实现下述题目,重点是程序通顺,没有bug。先做基本功能,慢慢加内容,注意模块化设计。按照三到四次课的时间来完成应该差不多,大家先做做看,最后做完再交,注意我有查重系统。
题目:小学生测验 面向小学1~2年级学生,随机选择两个整数进行四则运算,要求学生解答。 功能要求:
(1)电脑随机出题,题目数用户设置,满分100分,程序结束时显示学生得分;
(2)确保算式没有超出12年级的水平,只允许进行100以内的四则运算,不允许两数或运算结果超出0100的范围,负数更是不允许的;
(3)每道题学生有两次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果两次机会结束则输出正确答案;
(4)对于每道题,学生第一次输入正确答案得该题满分,第二次输入正确答案得该题一半的分,否则不得分;
(5)总成绩90以上显示“SMART” ,80-90显示“GOOD”,70-80显示“OK, 60-70显示“PASS”,60以下“TRY AGAIN”
(6)保存学生做过的题目,保存的细节自己考虑。可以加载浏览。
注意:
程序运行后,
1.注册、登录。登录要求输入用户名,密码,三次机会。(注册信息应写入文件,写入时,应检查用户名是否重复)
2.进入系统,展示功能菜单,比如:
a. 注册
b.登陆
c. 四则云端
d.查看错题集
e. 退出系统
3.代码无bug
- 百度一下以下几个函数的功能
system(“cls”);
system(“pause”);
srand(time(0))
rand();
sprintf函数
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <string.h>
#include <string>
#include <time.h>
using namespace std;
int problem,answer,c,n,temp;
double score,result[10000],right=0;
int i,j=0,k,a[10000],b[10000];
int mistake[10000];
int usenum=0;
void Display();
struct User
{
string ID;
string Name;
string Email;
string Password;
User(){};
void Register();
void Enter();
void operate(int problem);
void mistakeBook();
};
User people[10000];
void operate(int problem);//运算函数
int main()
{
Display();
return 0;
}
void User::Register()//注册
{
string pw1;
string pw2;
User person;
usenum++;//注册过的人数(不重复)
printf("请设置您的ID:");
flag:
scanf("%s",&person.ID);
for(i=0;i<usenum-1;i++)
{
if(people[i].ID==person.ID)
{
printf("该ID已存在,请重新设置:");
goto flag;
}
}
printf("请设置您的用户名:");
scanf("%s",&person.Name);
printf("请绑定您的邮箱:");
scanf("%s",&person.Email);
printf("请设置您的密码:");
flag0:
scanf("%s",&pw1);
printf("请再次确认您的密码:");
scanf("%s",&pw2);
if(pw1!=pw2)
{
printf("前后两次输入密码不一致,请重新设置密码:");
goto flag0;
}
printf("注册成功!\n");
person.Password=pw1;
people[k++]=person;//复制到people记录
Display();
}
void User::Enter()//登录
{
int times=0;//输入密码次数
printf("请输入您的ID:");
flag1:
string id;
string pwd;
scanf("%s",&id);
for(int i=0;i<usenum;i++)//验证ID是否存在
{
int tk=1;tk++;
if(people[i].ID==id)
{
tk=2;
printf("请输入您的密码:");
flag2:
if(times>=3)
{
printf("密码已错误三次,请核对后重新登录!!");
break;
}
scanf("%s",&pwd);
times++;
if(people[i].Password!=pwd)
{
printf("密码错误,请重新输入:");
goto flag2;
}
printf("登录成功!\n");
Display();
}
}
printf("该ID不存在,请重新输入:");
goto flag1;
}
void Display()//界面
{
printf(" (1)Register注册\n (2)Enter登录\n (3)四则运算\n");
printf(" (4)查看错题集\n (5)退出系统\n\nChoice: ");
int choice;//选择界面
User u;
scanf("%d",&choice);
switch(choice)
{
case 1://注册
u.Register();//调用函数
break;
case 2://登录
u.Enter();//调用函数
break;
case 3://四则云端
printf("请输入题目数量:");
scanf("%d",&problem);
u.operate(problem);
break;
case 4:
u.mistakeBook();
break;
case 5:
exit(EXIT_FAILURE);
}
}
void User::mistakeBook()
{
int g;
if(mistake[i]%4==0)
for(g=0;g<j;g++)
{
if(mistake[g]%4==0)
printf("%d+%d=%.0f\n",a[mistake[g]],b[mistake[g]],result[mistake[g]]);
if(mistake[g]%4==1)
printf("%d-%d=%.0f\n",a[mistake[g]],b[mistake[g]],result[mistake[g]]);
if(mistake[g]%4==2)
printf("%d*%d=%.0f\n",a[mistake[g]],b[mistake[g]],result[mistake[g]]);
if(mistake[g]%4==3)
printf("%d÷%d=%.0f\n",a[mistake[g]],b[mistake[g]],result[mistake[g]]);
}
printf("\n");
Display();
}
void User::operate(int problem)//运算函数
{
srand(time(0));
for(i=0;i<problem;i++)
{
a[i]=rand()%100;b[i]=rand()%100;
if(i%4==0)//加法
{
result[i]=a[i]+b[i];
while(result[i]>100)
{
a[i]=rand()%100;b[i]=rand()%100;
result[i]=a[i]+b[i];
}
printf("%d+%d=",a[i],b[i]);
}
if(i%4==1)//减法
{
result[i]=a[i]-b[i];
while(result[i]<0)
{
a[i]=rand()%100;b[i]=rand()%100;
result[i]=a[i]-b[i];
}
printf("%d-%d=",a[i],b[i]);
}
if(i%4==2)//乘法
{
result[i]=(a[i]%10)*(b[i]%10);
while(result[i]>100)
{
a[i]=rand()%100;b[i]=rand()%100;
result[i]=(a[i]%10)*(b[i]%10);
}
printf("%d*%d=",a[i]%10,b[i]%10);
}
if(i%4==3)//除法
{
result[i]=(double)a[i]/b[i];
temp=(int)result[i];
while(result[i]>temp)
{
a[i]=rand()%100;b[i]=rand()%100;
result[i]=(double)a[i]/b[i];
temp=(int)result[i];
}
printf("%d÷%d=",a[i],b[i]);
}
scanf("%d",&answer);
if(answer==result[i])
right++;
else
{
printf("答案错误!请重新输入答案:");
scanf("%d",&answer);
if(answer==result[i])
right+=0.5;
else
printf("正确答案为:%.0f\n",result[i]);
printf("是否需要存放入错题集,选择1(是),0(否):");
scanf("%d",&c);
if(c)
mistake[j++]=i;
}
}
score=(right*100/problem);
printf("%.0f\n",score);
if(score>=90)
printf("SMART\n");
if(score>=80&&score<90)
printf("GOOD\n");
if(score>=70&&score<80)
printf("OK\n");
if(score>=60&&score<70)
printf("PASS\n");
if(score<60)
printf("TRY AGAIN\n");
Display();
}