小学生测验

关于这段代码:

  • 数据存放在一个叫data的文件中
  • 增加了结构体排序,对小学生们的成绩排名
  • 其他要求如同题干

 大一时写的版本,没文件读写,大三时写的在下面。

项目一 小学生测验         16学时

问题描述:面向小学1~2年级学生,随机选择两个整数的加减法形成算式要求学生解答。

1.基本要求

(1)电脑随机出10道题,每题10分,程序结束时显示学生得分;

(2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或差超出0~50的范围,负数更是不允许的;

(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;

(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;

 (5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”

 

#include<iostream>    
#include<stdlib.h>    
#include<math.h>   
#include<stdio.h>
#include<time.h> 
using namespace std;typedef struct node
{int jiajian;int num1;int num2;int trytimes;
}specific;
specific informat[10];void changesi(int p){if(p==0)cout<<"+";if(p==1)cout<<"-";}int getgrade(int m)//把做错的次数转换成应得的分数return 
{if(m==0)return 10;if(m==1)return 7;if(m==2)return 5;if(m==3)return 0;
}int suijishu(int &a,int &b,int &c,int t)  
{    int a1,b1;    do    {    a1=rand()%50;    b1=rand()%50;    }while(!(a1+b1>=0&&a1+b1<=50&&a1-b1>=0&&a1-b1<=50));    informat[t].num1=a=a1;    informat[t].num2=b=b1;    informat[t].jiajian=c=rand()%2; return 0;    
}    void show_rank(int sum)
{cout<<endl<<endl;cout<<"总分:"<<sum<<endl;if(sum>=90)cout<<"Rank:SMART"<<endl;  else if(sum<90&&sum>=80)cout<<"Rank:GOOD"<<endl;  else if(sum<80&&sum>=70)cout<<"Rank:OK"<<endl;  else if(sum<70&&sum>=60)cout<<"Rank:PASS"<<endl;  else cout<<"please TRE AGAIN"<<endl;   
}int main()    
{    srand(time(NULL));cout<<"----------------------------pupil exercise system---------------------------- " <<endl;     int t=1,cnt=0,sum=0,a,b,c,ans;    while(t<=10)    {    cout<<"this is the "<<t<<" question"<<endl;  suijishu(a,b,c,t);    while(cnt<=3)    {    if(c==0)//add    {       printf("%d+%d=",a,b);    scanf("%d",&ans);    if(a+b==ans)    {    cout<<"Right"<<endl;    break;    }    else    {    cnt++;    cout<<"Wrong!!"<<endl;    if(cnt==3)    {   //cnt++;    cout<<"anwser:"<<a+b<<endl;    break;    }    }    }    else if(c==1)    {    printf("%d-%d=",a,b);    scanf("%d",&ans);    if(a-b==ans)    {    cout<<"Right"<<endl;    break;    }    else    {    cnt++;    cout<<"Wrong!!"<<endl;    if(cnt==3)    {    cout<<"anwser is:"<<a-b<<endl;    break;    }    }    }    }    informat[t].trytimes=cnt;if(cnt==0)sum+=10;    if(cnt==1)sum+=7;    if(cnt==2)sum+=5;    t++;    cnt=0;    cout<<endl<<endl;  cout<<"--------------------------------------------------------------------- " <<endl;  }    show_rank(sum);cout<<endl<<endl;for(int i=1;i<=10;i++){cout<<"第"<<i<<"题:"<<informat[i].num1;changesi(informat[i].jiajian);cout<<informat[i].num2<<"=";if(informat[i].jiajian==0)cout<<informat[i].num1+informat[i].num2<<endl;else if(informat[i].jiajian==1)cout<<informat[i].num1-informat[i].num2<<endl;cout<<"你错了"<<informat[i].trytimes<<"次,得了"<<getgrade(informat[i].trytimes); cout<<"分"<<endl; } //getchar();getchar();    
}    

大三时重写的版本,有文件读写,有排序

小学生测验系统
面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。
功能要求:
(1)电脑随机出10道题,每题10分,程序结束时显示学生得分并记录该学生的名称;
(2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的;
(3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;
(4)对于每道题,学生第一次输入正确答案得10分,第二次输入正确答案得7分,第三次输入正确答案得5分,否则不得分;
(5)总成绩90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRY AGAIN”
(6) 根据得分高低排序显示所有用户的成绩;
(7)用户输入名称,获得其得分信息。
         (二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块(视情况可另外加分)
(4)写出课程设计报告,具体要求见相关说明文档

部分运行截图,因为没有积分了,所以设置的积分下载,没有的话可以私信我。

#include<iostream>    
#include<stdlib.h>    
#include<math.h>   
#include<stdio.h>
#include<time.h> 
#include<fstream>
using namespace std;int UserNumber=0;//所有用户数  typedef struct node
{int jiajian;//1代表加法,0代表减法 int num1;int num2;int ans;int trytimes;//错误次数,0是直接做对,十分。1为错误一次,七分。2为错误两次,五分。错了三次,不得分。 int sum;
}question;
question que[11];//问题结构体,用来保存生成的测试的问题 typedef struct node1
{string name;int grade;
}StudentItem;
StudentItem temp;//当前学生的情况 
StudentItem StudentList[300];//打开文件之后用这个来维护考过试的学生的信息 string changeaddsub(int op)// 把代表加法减法的1或0转成字符串 
{string str1="+";string str0="-";if(op==1)return str1;else return str0;}void ShowRank(int mark)//显示成绩的等级 
{if(mark>90)cout<<"SMART"<<endl;else if(mark>80)cout<<"GOOD"<<endl;else if(mark>60)cout<<"Pass"<<endl;else cout<<"TRY AGAIN"<<endl; getchar();getchar();
}int suiji(question &quee)  //随机生成数字,初始化一个题目的结构体 
{    int a1,b1;    do    {    a1=rand()%50;    b1=rand()%50;    }while(!(a1+b1>=0&&a1+b1<=50&&a1-b1>=0&&a1-b1<=50));    quee.num1=a1;    quee.num2=b1;    quee.jiajian=rand()%2;if(quee.jiajian==1) quee.ans=a1+b1;else quee.ans=a1-b1;quee.trytimes=0; quee.sum=0;return 0;    
}    void InitQuestion()//初始化问题 
{srand(time(NULL));for(int i=0;i<=10;i++){suiji(que[i]);}
}//对每一题测试过程 
void EachQsestionText(question &quee,int t)
{int tempinput;int cnt=0;system("cls");cout<<"当前是第"<<t<<"个题目:"<<endl;cout<<quee.num1<<changeaddsub(quee.jiajian)<<quee.num2<<"=___"<<endl<<"请输入你的答案:";cin>>tempinput;if(tempinput==quee.ans){quee.sum+=10;return;}else quee.trytimes++;system("cls");cout<<"你输错了一次,请重新尝试"<<endl;cout<<quee.num1<<changeaddsub(quee.jiajian)<<quee.num2<<"=___"<<endl<<"请输入你的答案:";cin>>tempinput;if(tempinput==quee.ans){quee.sum+=7;return;}else quee.trytimes++;system("cls");cout<<"你输错了两次,请重新尝试"<<endl;cout<<quee.num1<<changeaddsub(quee.jiajian)<<quee.num2<<"=___"<<endl<<"请输入你的答案:";cin>>tempinput;if(tempinput==quee.ans){quee.sum+=5;return;}else quee.trytimes++;system("cls");cout<<"你输错了三次,答案是"<<quee.ans<<endl<<"输入任意键进入下一题";getchar();getchar();return; }void SortUser()//在这个里面对所有用户进行排序 
{StudentItem t;for(int i=0;i<UserNumber-1;i++){for(int j=0;j<UserNumber-1-i;j++){if(StudentList[j].grade < StudentList[j+1].grade){t.name=StudentList[j].name;t.grade=StudentList[j].grade;StudentList[j].name=StudentList[j+1].name;StudentList[j].grade=StudentList[j+1].grade;StudentList[j+1].name=t.name;StudentList[j+1].grade=t.grade;}}}} void SaveFile()//保存用户信息到文件 
{
ofstream fout("data",ios::out);if(!fout){  printf("errror!\n");  exit(-1);  }  SortUser();fout<<UserNumber<<endl;for(int i=0;i<UserNumber;i++){fout<<StudentList[i].name<<" "<<StudentList[i].grade<<" ";}fout.close(); } //一个人的测验过程 ,做十题 
int EachPersonTest() 
{InitQuestion();//初始化问题//测试过程控制,for(int i=1;i<=10;i++){EachQsestionText(que[i],i);temp.grade+=que[i].sum;}//对 StudentItem temp维护 string studentname;system("cls");cout<<"请输入你的姓名"<<endl; cin>>temp.name;StudentList[UserNumber].name=temp.name;StudentList[UserNumber].grade=temp.grade;UserNumber++;SortUser();SaveFile();ShowRank(temp.grade);} //显示所有的成绩 ,先读出文件里的信息, 
int ShowAllGrades()
{system("cls");cout<<"共"<<UserNumber<<"个用户"<<endl; for(int i=0;i<UserNumber;i++){cout<<StudentList[i].name<<"的成绩 "<<StudentList[i].grade<<endl;}getchar();getchar();} //主要的交互界面 
int Menu()
{system("cls");cout<<"请选择功能:"<<endl;cout<<"1.进入测试"<<endl;cout<<"2.显示其所有人的的成绩"<<endl;cout<<"3.成绩查询"<<endl;cout<<"4.退出"<<endl;int mode;do{cin>>mode;}while(mode>4|mode<1);return mode;} //输入人名,从文件里查询成绩信息,从上至下,找到匹配的利用id输出成绩 
void QueryGrade()
{system("cls");string name;cout<<"请输入要查询的姓名"<<endl;cin>>name;for(int i=1;i<UserNumber;i++){if(name==StudentList[i].name){system("cls");cout<<name<<"的成绩"<<StudentList[i].grade<<endl;getchar();getchar();return; }}system("cls");cout<<name<<" "<<"查无此人"<<endl; getchar();getchar();
}void ReadFile()//读文件到结构体 {ifstream fin("data",ios::in);if(!fin){cout<<"error"<<endl;exit(-1);}fin>>UserNumber;for(int i=0;i<UserNumber;i++){fin>>StudentList[i].name>>StudentList[i].grade;}fin.close();}void Welcome()//欢迎界面 
{cout<<"-------------------------欢迎使用小学生测验系统----------------------------"<<endl; cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;cout<<"                           Created By  @@@@@                               "<<endl; cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;cout<<"##########################回车键进入使用###################################"<<endl;getchar();
}int main(){ReadFile();Welcome();while(1)//选择功能 {int mode=Menu();switch(mode){case 1:EachPersonTest();break;case 2:ShowAllGrades();break;case 3:QueryGrade();break;case 4:exit(1);}}}

用devc++来编译

要在.exe文件夹下有一个名为data的文件

格式为

第一个是数字(总人数),之后姓名和分数用空格隔开

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法训练 和为T 深度搜索

问题描述 从一个大小为n的整数集中选取一些元素&#xff0c;使得它们的和等于给定的值T。每个元素限选一次&#xff0c;不能一个都不选。 输入格式 第一行一个正整数n&#xff0c;表示整数集内元素的个数。   第二行n个整数&#xff0c;用空格隔开。   第三行一个整数T&am…

算法训练 瓷砖铺放 递归

问题描述 有一长度为N(1<&#xff2e;<10)的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为1&#xff0c;另一种长度为2&#xff0c;数目不限。要将这个长度为N的地板铺满&#xff0c;一共有多少种不同的铺法&#xff1f;   例如&#xff0c;长度为4的地面一…

链表应用 多项式相加

用链表实现多项式相加 #include<iostream> #include<cstdio> #include<malloc.h> #define flag -1 using namespace std; typedef struct Node {float coef;int expn;struct Node *next; }LNode,*LinkList;void CreatLinkList(LinkList L) {LNode *r,*s;fl…

KMP算法 串模式识别 用nextval[j]改进next[j]

用nextval[]改进next[] 还有&#xff0c;代码真美&#xff0c;看了好久 #include<stdio.h> #define MAXSIZE 100 #include<iostream> using namespace std;typedef struct {char data[MAXSIZE];int length; }SqString;void StrAssign(SqString &s,char cstr[]…

vi(vim)编辑器 学习笔记

vi是非图形化的编辑器 vim是vi的加强版。 三种使用模式 一般模式用户可以进行光标的移动&#xff0c;删除字符以及复制 编辑模式下&#xff0c;用户可以插入或者删除字符 命令模式下&#xff0c;可以保存文件或者退出编辑器 移动操作 向下移动光标&#xff1a;下箭头&#…

动态数组vector的使用_简单代码示例

简单代码示例 //动态数组vector的使用 #include <iostream> #include <vector> //用 <vector>头文件 using namespace std; int main() {vector<int> a; //新建一个int型数组a[] a.push_back(0); //数组末尾插入0 a.push_back(1); …

二维数组vector的代码使用简单例子_vector容器_ 用构造函数vectorint()

二维数组vector 用构造函数vector<int>() #include <iostream> #include<vector> using namespace std;int main() {vector<vector<int> > v2d;//开一个vector用来存放vector类型的容器&#xff0c;用空格区分> >和>> for(int i0;…

素筛打表(输出小于n最大素数)

今天有一个小学弟问我洛谷一个很基础的题目&#xff0c;顺便重新温习了一下素筛&#xff0c;网上别人的代码风格真的不习惯。 #include<iostream> using namespace std; const int MAX100000; bool is_prime[MAX];int main() {int n;cin>>n;for(int i2;i<n;i)i…

淮北师范18-19计算机科学与技术大类实验课试卷

1、编写一个C程序&#xff0c;输入一个正整数&#xff0c;判断其是否为素数 #include<iostream> using namespace std; const int MAX100000; bool is_prime[MAX];int main() {int n;cin>>n;for(int i2;i<n;i)is_prime[i]1;for(int i2;i*i<n;i){if(is_prime…

win10台式机一根网线连接笔记本wifi网络

我的笔记本和台式机都是win10&#xff0c;笔记本通过家里的路由器连的无线网&#xff0c;台式机没法连接无线&#xff0c;还有一条网线 笔记本打开网络适配器 右键属性 勾选共享里面的 允许其他网络用户通过此计算机的internet连接来连接 家庭网络选择笔记本和台式机之间的局…

蓝桥杯单片机stc15f2k61s2矩阵按键中断扫描代码

使用中断函数进行矩阵按键的扫描&#xff0c;在《手把手教你学51单片机》上面的代码修改了一下。感觉这个代码写的比较好。 #include<stc15f2k60s2.h>#define uchar unsigned charsbit KEY_IN_1 P4^4; sbit KEY_IN_2 P4^2; sbit KEY_IN_3 P3^5; sbit KEY_IN_4 P3^4; …

蓝桥杯单片机DS1302时钟芯片驱动代码注释

蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线),SCLK (串行时钟).*/#include<STC15F2K60S2.H> #include<intrins.h>#define uchar unsigned ch…

蓝桥杯单片机DS18B20代码注释及部分时序图

蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar unsigned char #define uint unsigned int sbit DQP1^4;uchar code tab[]{0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF}; u…

蓝桥杯单片机stc15f2k60s2 中断函数代码模板注释

用到哪些寄存器&#xff1f; 中断使能寄存器// EA1&#xff08;总使能开&#xff09;&#xff0c;ET01&#xff08;T0中断允许&#xff09; 定时器/计数器控制寄存器TCON// TH0和TL0设定值确定时间间隔&#…

Linux下文件的压缩和解压

文件的压缩和解压 Gzip格式的: tar -czvf 要存的名字.tar.gz 要打包的东西或目录 bzip2格式的: tar -cjvf 要存的名字.tar.bz2 要打包的东西或目录 压缩 解压 Gzip格式的:tar -xzvf 要解压的压缩文件 -C 解压到的目录 bzip2格式的:tar …

redhat下的iptables和firewalld 笔记

iptables命令怎么用&#xff1f; 网上看见的一个不错的图。 使用iptables命令配置的防火墙规则默认会在系统下一次重启时失效&#xff0c;如果想让配置的防火墙策略永久生效&#xff0c;还要执行保存命令&#xff1a; service iptables save 怎么理解firewalld&#xff1f; …

redhat挂载镜像软件包

挂载&#xff08;mounting&#xff09;是指由操作系统使一个存储设备&#xff08;诸如硬盘、CD-ROM或共享资源&#xff09;上的计算机文件和目录可供用户通过计算机的文件系统访问的一个过程。 本质&#xff1a;针对某一设备, 分析出其文件系统结构, 并根据其文件系统类型调用…

chcon和semanage fcontext的坑

chcon后不能restorecon,不然就default_t:s0&#xff0c;samba_share_t没了 chcon semanage fcontext restorecon

Windows底层窗口的实现———学习笔记

基本概念 SDK 软件开发工具包&#xff08;Software Development Kit&#xff09;&#xff0c;一般都是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 API Windows操作系统提供给应用程序编程的接口&#xff08;Appl…

数据链路层差错检验循环冗余码过程图示

计算机网络数据链路层差错检验循环冗余码过程