小学生测验管理
2016-01-20 21:09
155 查看
#include<stdio.h>
#include<stdlib.h>
#include<time.h> //随机取数用到它
struct Student
{
char name[15];
int number;
int age;
int score;
}stu; //定义名为stu的结构体
void meun() //主界面
{
printf("****************************************\n");
printf("***********小学数学测试软件*************\n");
printf(" \n");
printf(" 一 二 年 级 测 试 题 \n");
printf(" \n");
printf("**** [1] 进入测试 [0] 退出测试 ****\n");
printf("****************************************\n");
}
/*编译成功进入下图测试界面,选择1,按要求输入学号,姓名,年龄后进入测试界面*/
void ceshi() //测试界面
{
printf("*********************************************\n");
printf("***********小学数学测试软件*************\n");
printf(" \n");
printf(" [1]加法测试 [2]减法测试 \n");
printf(" \n");
printf("**** [3]混合测试 [0]退出测试 **** \n");
printf("****************************************\n");
/*在测试界面可根据需要输入数字进入相关界面*/
}
int c,d,a,b,q; //定义全局变量 a,b为随机数,c表示加法,d表示减法,q控制返回测试界面
void add()
{
system("cls"); //清屏
printf("*******************************************************************\n");
printf("************************* -= 加法测试 -= ***********************\n");
printf("*******************************************************************\n");
int i,k,t;
stu.score=0;
srand(time(NULL));//用当前时间,设置种子
for(i=0;i<10;) //当0<c<50时,i++
{
a=rand()%50;
b=rand()%50;
c=a+b;
if(c>0&&c<50)
{
i++;
printf("第%d题:%d+%d=",i,a,b);
for(t=3;t>0;t--)
{
scanf("%d",&k);
if(k==c)
{
switch(t)
{
case 1: stu.score+=5;break;
case 2: stu.score+=7;break;
case 3: stu.score+=10;break;
}
break;
}
else
{
printf("答案错误,你还有%d次机会\n",t-1);
if((t-1)==0) printf("正确答案:%d\n",c);
}
}
}
}
printf("你的总成绩为%d分\n",stu.score);
}
void sub()
{
system("cls");
printf("*******************************************************************\n");
printf("************************* -= 减法测试 -= **************************\n");
printf("*******************************************************************\n");
int i,k,t;
stu.score=0;
srand(time(NULL));//用当前时间,设置种子
for(i=0;i<10;)
{
a=rand()%50;
b=rand()%50;
d=a-b;
if(d>0&&d<50)
{
i++;
printf("第%d题:%d-%d=",i,a,b);
for(t=3;t>0;t--)
{
scanf("%d",&k);
if(k==d)
{
switch(t)
{
case 1: stu.score+=5;break;
case 2: stu.score+=7;break;
case 3: stu.score+=10;break;
}
break;
}
else
{
printf("答案错误,你还有%d次机会\n",t-1);
if((t-1)==0) printf("正确答案:%d\n",d);
}
}
}
}
printf("你的总成绩为%d分\n",stu.score);
}
void mix()
{
system("cls");
printf("*******************************************************************\n");
printf("************************* -= 加减测试 -= **************************\n");
printf("*******************************************************************\n");
int i,k,t,p;
srand(time(NULL));//用当前时间,设置种子
stu.score=0;
for(p=0;p<10;p++)
{
i=rand()%2;
switch(i)
{
case 0:
while(1)
{
a=rand()%50;
b=rand()%50;
c=a+b;
if(c>0&&c<50)
{
printf("第%d题:%d+%d=",p+1,a,b);
for(t=3;t>0;t--)
{
scanf("%d",&k);
if(k==c)
{
switch(t)
{
case 1: stu.score+=5;break;
case 2: stu.score+=7;break;
case 3: stu.score+=10;break;
}
break;
}
else
{
printf("答案错误,你还有%d次机会\n",t-1);
if((t-1)==0) printf("正确答案:%d\n",c);
}
}
break;
}
}break;
case 1:
while(1)
{
a=rand()%50;
b=rand()%50;
d=a-b;
if(d>0&&d<50)
{
printf("第%d题:%d-%d=",p+1,a,b);
for(t=3;t>0;t--)
{
scanf("%d",&k);
if(k==d)
{
switch(t)
{
case 1: stu.score+=5;break;
case 2: stu.score+=7;break;
case 3: stu.score+=10;break;
}
break;
}
else
{
printf("答案错误,你还有%d次机会\n",t-1);
if((t-1)==0) printf("正确答案:%d\n",d);
}
}
break;
}
}break;
}
}
printf("你的总成绩为%d分\n",stu.score);
}
void dengji()
{
if(stu.score>=90)
printf("SMART\n");
else if(stu.score>=80) printf("GOOD\n");
else if(stu.score>=70) printf("OK\n");
else if(stu.score>=60) printf("PASS\n");
else printf("TRY AGAIN\n");
printf("按 0 返回测试界面:");
scanf("%d",&q);
}
void save()
{
FILE *fp;
if((fp=fopen("pupil.dat","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
if(fwrite(&stu,sizeof(struct Student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
void load()
{
FILE *fp;
if((fp=fopen("pupil.dat","rb"))==NULL)
{
printf("cannot open infile\n");
return;
}
if(fread(&stu,sizeof(struct Student),1,fp)!=1)
{
if(feof(fp))
{
fclose(fp);
return;
}
printf("file read error\n");
}
fclose(fp);
}
int main()
{
int z,r;
load();
meun();
while(1)
{
printf("请选择:");
scanf("%d",&z);
if(z>1||z<0)
{
printf("没有该选项,请重新输入!\n");
continue;
}
switch(z)
{
case 1:
printf("请输入学号:");
scanf("%d",&stu.number);
printf("请输入你的姓名:");
scanf("%s",stu.name);
printf("请输入你的年龄:");
scanf("%d",&stu.age);
B:system("cls");
ceshi();
while(1)
{
printf("请选择测试内容:");
scanf("%d",&r);
if(r>3||r<0)
{
printf("没有该选项,请重新输入!\n");
continue;
}
switch(r)
{
case 1:add();save();dengji();if(q==0) goto B;;
case 2:sub();save();dengji();if(q==0) goto B;
case 3:mix();save();dengji();if(q==0) goto B;
case 0:exit(0);break;
}
}
break;
case 0:exit(0);break;
}
}
return 0;
}
相关文章推荐
- PowerShell中的加法运算详解
- ASP实现加法验证码
- c语言中用位运算实现加法技巧介绍
- 位操作实现加法
- 一元多项式的加法和乘法运算
- python任意进制加法
- while的经典用法
- 关于2的补码
- poj 1000 A+B Problem
- 高精度加法
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
- 不用+,-,x,/做加法运算
- 两个多项式的加法
- 《编程之美》求两个大整数的最大公约数问题的一般解法
- 数学问题--大数乘以小数,大数乘以大数,大数的加法以及减法
- 位运算 实现加法
- LeetCode Add Two Numbers
- 用位运算实现两个整数的加减乘除运算
- Leetcode 415. Add Strings JAVA语言
- 写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。