小学生测验
關(guān)于這段代碼:
- 數(shù)據(jù)存放在一個(gè)叫data的文件中
- 增加了結(jié)構(gòu)體排序,對(duì)小學(xué)生們的成績(jī)排名
- 其他要求如同題干
?大一時(shí)寫的版本,沒(méi)文件讀寫,大三時(shí)寫的在下面。
項(xiàng)目一 小學(xué)生測(cè)驗(yàn)?????????16學(xué)時(shí)
問(wèn)題描述:面向小學(xué)1~2年級(jí)學(xué)生,隨機(jī)選擇兩個(gè)整數(shù)的加減法形成算式要求學(xué)生解答。
1.基本要求
(1)電腦隨機(jī)出10道題,每題10分,程序結(jié)束時(shí)顯示學(xué)生得分;
(2)確保算式?jīng)]有超出1~2年級(jí)的水平,只允許進(jìn)行50以內(nèi)的加減法,不允許兩數(shù)之和或差超出0~50的范圍,負(fù)數(shù)更是不允許的;
(3)每道題學(xué)生有三次機(jī)會(huì)輸入答案,當(dāng)學(xué)生輸入錯(cuò)誤答案時(shí),提醒學(xué)生重新輸入,如果三次機(jī)會(huì)結(jié)束則輸出正確答案;
(4)對(duì)于每道題,學(xué)生第一次輸入正確答案得10分,第二次輸入正確答案得7分,第三次輸入正確答案得5分,否則不得分;
?(5)總成績(jī)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)//把做錯(cuò)的次數(shù)轉(zhuǎn)換成應(yīng)得的分?jǐn)?shù)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<<"你錯(cuò)了"<<informat[i].trytimes<<"次,得了"<<getgrade(informat[i].trytimes); cout<<"分"<<endl; } //getchar();getchar(); }大三時(shí)重寫的版本,有文件讀寫,有排序
小學(xué)生測(cè)驗(yàn)系統(tǒng)
面向小學(xué)1~2年級(jí)學(xué)生,隨機(jī)選擇兩個(gè)整數(shù)和加減法形成算式要求學(xué)生解答。
功能要求:
(1)電腦隨機(jī)出10道題,每題10分,程序結(jié)束時(shí)顯示學(xué)生得分并記錄該學(xué)生的名稱;
(2)確保算式?jīng)]有超出1~2年級(jí)的水平,只允許進(jìn)行50以內(nèi)的加減法,不允許兩數(shù)之和或之差超出0~50的范圍,負(fù)數(shù)更是不允許的;
(3)每道題學(xué)生有三次機(jī)會(huì)輸入答案,當(dāng)學(xué)生輸入錯(cuò)誤答案時(shí),提醒學(xué)生重新輸入,如果三次機(jī)會(huì)結(jié)束則輸出正確答案;
(4)對(duì)于每道題,學(xué)生第一次輸入正確答案得10分,第二次輸入正確答案得7分,第三次輸入正確答案得5分,否則不得分;
(5)總成績(jī)90以上顯示“SMART”,80-90顯示“GOOD”,70-80顯示“OK”,60-70顯示“PASS”,60以下“TRY?AGAIN”
(6)?根據(jù)得分高低排序顯示所有用戶的成績(jī);
(7)用戶輸入名稱,獲得其得分信息。
?????????(二)其它要求:
(1)只能使用C/C++語(yǔ)言,源程序要有適當(dāng)?shù)淖⑨?#xff0c;使程序容易閱讀
(2)至少采用文本菜單界面(如果能采用圖形菜單界面更好)
(3)學(xué)生可自動(dòng)增加新功能模塊(視情況可另外加分)
(4)寫出課程設(shè)計(jì)報(bào)告,具體要求見(jiàn)相關(guān)說(shuō)明文檔
部分運(yùn)行截圖,因?yàn)闆](méi)有積分了,所以設(shè)置的積分下載,沒(méi)有的話可以私信我。
#include<iostream> #include<stdlib.h> #include<math.h> #include<stdio.h> #include<time.h> #include<fstream> using namespace std;int UserNumber=0;//所有用戶數(shù) typedef struct node {int jiajian;//1代表加法,0代表減法 int num1;int num2;int ans;int trytimes;//錯(cuò)誤次數(shù),0是直接做對(duì),十分。1為錯(cuò)誤一次,七分。2為錯(cuò)誤兩次,五分。錯(cuò)了三次,不得分。 int sum; }question; question que[11];//問(wèn)題結(jié)構(gòu)體,用來(lái)保存生成的測(cè)試的問(wèn)題 typedef struct node1 {string name;int grade; }StudentItem; StudentItem temp;//當(dāng)前學(xué)生的情況 StudentItem StudentList[300];//打開(kāi)文件之后用這個(gè)來(lái)維護(hù)考過(guò)試的學(xué)生的信息 string changeaddsub(int op)// 把代表加法減法的1或0轉(zhuǎn)成字符串 {string str1="+";string str0="-";if(op==1)return str1;else return str0;}void ShowRank(int mark)//顯示成績(jī)的等級(jí) {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) //隨機(jī)生成數(shù)字,初始化一個(gè)題目的結(jié)構(gòu)體 { 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()//初始化問(wèn)題 {srand(time(NULL));for(int i=0;i<=10;i++){suiji(que[i]);} }//對(duì)每一題測(cè)試過(guò)程 void EachQsestionText(question &quee,int t) {int tempinput;int cnt=0;system("cls");cout<<"當(dāng)前是第"<<t<<"個(gè)題目:"<<endl;cout<<quee.num1<<changeaddsub(quee.jiajian)<<quee.num2<<"=___"<<endl<<"請(qǐng)輸入你的答案:";cin>>tempinput;if(tempinput==quee.ans){quee.sum+=10;return;}else quee.trytimes++;system("cls");cout<<"你輸錯(cuò)了一次,請(qǐng)重新嘗試"<<endl;cout<<quee.num1<<changeaddsub(quee.jiajian)<<quee.num2<<"=___"<<endl<<"請(qǐng)輸入你的答案:";cin>>tempinput;if(tempinput==quee.ans){quee.sum+=7;return;}else quee.trytimes++;system("cls");cout<<"你輸錯(cuò)了兩次,請(qǐng)重新嘗試"<<endl;cout<<quee.num1<<changeaddsub(quee.jiajian)<<quee.num2<<"=___"<<endl<<"請(qǐng)輸入你的答案:";cin>>tempinput;if(tempinput==quee.ans){quee.sum+=5;return;}else quee.trytimes++;system("cls");cout<<"你輸錯(cuò)了三次,答案是"<<quee.ans<<endl<<"輸入任意鍵進(jìn)入下一題";getchar();getchar();return; }void SortUser()//在這個(gè)里面對(duì)所有用戶進(jìn)行排序 {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(); } //一個(gè)人的測(cè)驗(yàn)過(guò)程 ,做十題 int EachPersonTest() {InitQuestion();//初始化問(wèn)題//測(cè)試過(guò)程控制,for(int i=1;i<=10;i++){EachQsestionText(que[i],i);temp.grade+=que[i].sum;}//對(duì) StudentItem temp維護(hù) string studentname;system("cls");cout<<"請(qǐng)輸入你的姓名"<<endl; cin>>temp.name;StudentList[UserNumber].name=temp.name;StudentList[UserNumber].grade=temp.grade;UserNumber++;SortUser();SaveFile();ShowRank(temp.grade);} //顯示所有的成績(jī) ,先讀出文件里的信息, int ShowAllGrades() {system("cls");cout<<"共"<<UserNumber<<"個(gè)用戶"<<endl; for(int i=0;i<UserNumber;i++){cout<<StudentList[i].name<<"的成績(jī) "<<StudentList[i].grade<<endl;}getchar();getchar();} //主要的交互界面 int Menu() {system("cls");cout<<"請(qǐng)選擇功能:"<<endl;cout<<"1.進(jìn)入測(cè)試"<<endl;cout<<"2.顯示其所有人的的成績(jī)"<<endl;cout<<"3.成績(jī)查詢"<<endl;cout<<"4.退出"<<endl;int mode;do{cin>>mode;}while(mode>4|mode<1);return mode;} //輸入人名,從文件里查詢成績(jī)信息,從上至下,找到匹配的利用id輸出成績(jī) void QueryGrade() {system("cls");string name;cout<<"請(qǐng)輸入要查詢的姓名"<<endl;cin>>name;for(int i=1;i<UserNumber;i++){if(name==StudentList[i].name){system("cls");cout<<name<<"的成績(jī)"<<StudentList[i].grade<<endl;getchar();getchar();return; }}system("cls");cout<<name<<" "<<"查無(wú)此人"<<endl; getchar();getchar(); }void ReadFile()//讀文件到結(jié)構(gòu)體 {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<<"-------------------------歡迎使用小學(xué)生測(cè)驗(yàn)系統(tǒng)----------------------------"<<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<<"##########################回車鍵進(jìn)入使用###################################"<<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++來(lái)編譯
要在.exe文件夾下有一個(gè)名為data的文件
格式為
第一個(gè)是數(shù)字(總?cè)藬?shù)),之后姓名和分?jǐn)?shù)用空格隔開(kāi)
總結(jié)
- 上一篇: linux 随机抽取文件,shell 随
- 下一篇: BP算法和RNN_模型CNN-RNN-L