实现下述题目,重点是程序通顺,没有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

  1. 百度一下以下几个函数的功能

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();
}