小学生四则运算系统。。出错了。。不知道这么改。。
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <time.h>
#define header1 小学生四则运算系统
int saveflag=1;
int flag=0;
int k;
struct student{
char ID[20];
char name[20];
int month;
int year;
int score;
} stu[1000];
struct student1{
char ID[20];
char name[20];
int month;
int year;
int score;
} stuexchange[1000];
void whetherregister()
{
printf("如果还没注册,请注册用户-1,如果已经注册,请输入用户名-2,退出-0\n");
}
void register_ID()
{
printf("请输入用户名(16个字符以内):");
scanf("%s",stu[saveflag].ID);
//if(savecheck(stu[saveflag].ID,saveflag)==1)
//register_ID();
//else
printf("用户名注册成功.\n");
}
void inputmoreinformation()
{
printf("请输入您的姓名:");
scanf("%s",stu[saveflag].name);
printf("请输入您的出生年份:");
scanf("%d",&stu[saveflag].year);
printf("请输入您的出生月份:");
scanf("%d",&stu[saveflag].month);
}
void login(char name)
{
printf("请输入您的用户名:");
scanf("%s",name);
if(inputcheck(name,saveflag)!=2)
printf("账号输入有误!\n");
else
login(name);
}
void save(int k)
{
FILE *fp;
int i;
if((fp=fopen("D:\\list","wb"))==NULL)
{printf("\n文件打开出错!\n");
getchar();
return;}
for(i=0;i<k;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("文件读取出错!\n");
fclose(fp);
}
void savecheck(char ID,int k)
{
FILE *fp;
int i;
fp=fopen("D:\\list","rb");
for(i=0;i<k;i++)
{fread(&stu[i],sizeof(struct student),1,fp);
if(strcmp(ID,stu[i].ID)==0)
{
printf("该用户名已经被注册,请重新输入\n");
flag=1;
}
}
fclose(fp);
return flag;
}
void inputcheck(char ID,int k)
{
FILE *fp;
int i;
fp=fopen("D:\\list","rb");
for(i=0;i<k;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);
if(strcmp(ID,stu[i].ID)==0)
{
printf("登陆成功!\n");
flag=2;
}
}
return flag;
}
void ranking_list(int k)
{
FILE *fp = fopen("D:\\list","rb");
int i=0,j=0;
while(!feof(fp))
{
fscanf(fp,"%d",&stu[i].score);
i++;
}
printf("排行榜\n");
for(i=0;i<k-1;i++)
for(j=i;j<k;j++)
if(stu[i].score<stu[j].score)
{
// stuexchange[j]=stu[j];
// stu[j]=stu[i];
//stu[i]=stuexchange[j];
}
for(i=0;i<k;i++)
printf("%s %d %d %d",stu[i].name,stu[i].year,stu[i].month,stu[i].score);
printf("\n");
}
int p1()
{
time_t t;
int h,i,g,j,a[100],b[100];
srand((unsigned)time(&t));
for(i=0;i<10;i++)
{
a[i]=rand()%9+1;
for(j=0;;j++)
{
b[i]=rand()%9+1;
if(k==1)
{
printf("%d+%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]+b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
else if(k==2)
{
if(a[i]<b[i])
{
g=a[i];
a[i]=b[i];
b[i]=g;
}
printf("%d-%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]-b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
else if(k==3)
{
printf("%d*%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]*b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
else if(k==4)
{
float s;
printf("%d/%d=",a[i],b[i]);
scanf("%f",&s);
if(s==(float)a[i]/b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
}
}
printf("你的最后得分为:%d\n",stu[saveflag].score);
}
int p2()
{
time_t t;
int h,g,i,j,a[100],b[100];
srand((unsigned)time(&t));
for(i=0;i<10;i++)
{
a[i]=rand()%90+10;
for(j=0;;j++)
{
b[i]=rand()%90+10;
if(k==1)
{
printf("%d+%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]+b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
else if(k==2)
{
if(a[i]<b[i])
{
g=a[i];
a[i]=b[i];
b[i]=g;
}
printf("%d-%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]-b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
else if(k==3)
{
printf("%d*%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]*b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
else if(k==4)
{
printf("%d/%d=",a[i],b[i]);
scanf("%d",&h);
if(h==a[i]/b[i])
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
}
}
printf("你的最后得分为:%d\n",stu[saveflag].score);
}
int p3()
{
time_t t;
int i,x,y,j;
float h,e,a[100],b[100];
srand((unsigned)time(&t));
for(i=0;i<10;i++)
{
a[i]=rand()%1000;
a[i]=a[i]/100.00;
for(j=0;;j++)
{
b[i]=rand()%900+100;
b[i]=b[i]/100.00;
printf("%.2f+%.2f=",a[i],b[i]);
e=a[i]+b[i];
printf("%f\n",a[i]+b[i]);
scanf("%f",&h);
if(h==e)
{
printf("答对了,你真棒!\n");
stu[saveflag].score+=10;
break;
}
else
{
printf("答错了,不要灰心哦!\n");
break;
}
}
}
printf("你的最后得分为:%d\n",stu[saveflag].score);
}
int main()
{
int i,h;
int a;
char name[20];
printf("小学生四则运算系统\n") ;
whetherregister();
scanf("%d",&h);
if(h==1)
{
register_ID();
inputmoreinformation();
save(saveflag);
saveflag++;
}
if(h==2)
login(name);
printf("请选择运算类型:1:+ 2:- 3:* 4:/ \n");
scanf("%d",&k);
printf("请选择难度系数:1:第一级 10以内的运算 2:第二级 100以内的运算 3:第三级 小数运算\n");
scanf("%d",&a);
switch(a)
{
case 1:p1();break;
case 2:p2();break;
case 3:p3();break;
}
printf("成绩排行榜-1,退出-2:");
scanf("%d",i);
switch(i)
{
// case 1 : rangking_list(saveflag);break;
case 2 : whetherregister();break;
}
}
要求:
(1) 学生进行系统时,要求输入他的帐号,若没有帐号,则让其注册,注册时,要输出姓名,出生年月(要用文件保存)
(2) 学生在答题前能够选择是进行什么运算的练习,运算包括:+、-、*、/
(3) 每种运算设立三级难度系数,第一级为10以内的运算,第二级为100以内的运算,第三级为小数运算。学生答题前能够选择难度系数。
(4) 每次答题数量为10个问题,每题10分,根据答对题的多少给出对学生的评价(自己设计评语)
(5) 学生答题完毕后给出答题排行榜。(要用文件保存)
求各位大神帮帮忙!!!!!!
[ 本帖最后由 zyxandycx 于 2012-5-31 16:49 编辑 ]