综合能力测评系统
這是我在大一和同伴們一起做的一個實訓項目(主要是進行小學生的加減乘除等一系列數學操作的),是東軟這個公司的。如果你正在做相關相似的項目,可以借鑒一下。(因為我自己做這個項目時,沒有找到相似的可以借鑒的文章,所以寫下這篇文章希望能帶給你幫助!)
目錄
一、系統設計思路
二、系統功能流程圖
?三、文字講解+展示效果+功能代碼
(一)身份選擇
(二)教師服務
1、登錄注冊操作
2、老師功能菜單
3、查看老師信息
?4、查看學生信息
5、系統評價與建議
(三)學生服務
1、登錄注冊操作
2、學生功能菜單
?3、日常測試
4、考試測試
5、猜數小游戲
?6、系統評價與建議
四、完整代碼
五、路徑下的文件
一、系統設計思路
這個系統是為了實現小學生日常測試與考試測試的而設計的。利用不同用戶身份的選擇系統將為不同用戶提供不同的功能。
我們的學生用戶下可以注冊或者登錄賬號,進入對應的賬號后,系統將為學生提供測試功能,游戲功能,系統評價功能。測試分為考試測試與日常測試兩個類別,在兩個測試下可以實現題目類別選擇,題目難度選擇,在考試測試下我們可以自定義要做的題目數量,完成所有的題后系統將給出等級、正確率、答對題目數量。在日常測試下,我們可以隨時終止做題,每做一道題系統會自動給出提示,或者顯示答案。
對于老師用戶界面,我們可以查看老師、學生信息,也可以對系統作出評價。
為了實現學生和老師的信息查找,我們將老師和學生的個人注冊登錄信息都放進一個結構體中,用兩個不同的文件來存儲學生和老師信息。
二、系統功能流程圖
(這是一個簡單的系統操作圖,后面有文字+代碼講解)
?三、文字講解+展示效果+功能代碼
(每個不同的功能我都寫成了函數,方便引用)
(一)身份選擇
進入系統后,首先要進行身份的選擇,1代表不同,2代表學生,不同的身份后續對應的操作也不同。
?
//身份選擇 void identity() {int n=N;cout << "歡迎進入學生綜合素質測評系統" << endl;puts("");do {if (n != N) cout << "您輸入的身份信息有誤,請重新輸入" << endl;cout << "請選擇您的身份(1代表教師,2代表學生):";cin >> n;//輸入身份}while(n!=1&&n!=2);//學生身份if(n==2){LORE(); //學生登錄與注冊 sstudent(); //選擇 }else //老師 {teaLORE(); //老師登錄與注冊tteacher(); //選擇 }}(二)教師服務
(該項目進行的前提是在最開始時選擇的 1-教師)
1、登錄注冊操作
(進行此操作需要用到文件這一知識點,因為你需要用文件來存儲老師賬號、密碼等信息,注冊的信息存在文檔里,后面才能進行登錄。所以你需要在存儲代碼的相同路徑下,新建一個 txt 的文本文檔,我存儲老師信息的文本文檔叫做data.txt)
(1)可以選擇 0-退出 ,直接退出整個系統;
(2)也可以選擇 1-登錄,需要輸入賬號,若該賬號未提前注冊過,系統將提示“該賬號不存在,請先注冊”,若賬號已注冊過,則輸入密碼,若密碼錯誤,系統將提示“密碼錯誤,請重新輸入”,只有當賬號和密碼都正確時,才能進入系統;
(3)若選擇 2-注冊,你需要現輸入賬號,若該賬號已注冊過,系統將提示“該賬號已注冊過”,繼續彈出登錄注冊菜單欄,若該賬號未注冊過,繼續輸入姓名、性別、密碼、再次輸入密碼等信息。
?
?
//登錄注冊需要用到結構體存儲姓名、賬號、密碼等信息 typedef struct User_basicinfo {char id[15]; //賬號char paw[20]; //密碼char name[15]; //姓名char sex[5]; //性別 }Users; Users a={0},b={0}; int fflag=0,fllag=0; int LOGIN() //老師登錄 {Users a={0},b={0};FILE *pf=fopen("data.txt","r");if(pf==NULL){printf("文件打開失敗\n");return 0;}printf("歡迎來到登錄界面!\n");printf("請輸入賬號->");scanf("%s",a.id);fread(&b, sizeof(Users), 1, pf);while(1){if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0)//未到文件尾 {fread(&b, sizeof(Users), 1, pf);}else{printf("該賬號不存在,請先注冊\n");fclose(pf); pf=NULL;return 0;}}else//賬號注冊過->跳到輸入密碼 {break; //退出無限循環,跳到輸入密碼 }} //【輸入密碼】 printf("請輸入密碼->"); do{scanf("%s",a.paw);if(strcmp(a.paw, b.paw)!=0 )printf("密碼錯誤,請重新輸入->");else break;}while(1);printf("登錄成功!\n");return 1;fclose(pf); pf=NULL; } void REGIST() //老師注冊 {char tmp[20]={-1};FILE *pf=NULL;pf=fopen("data.txt","r");//用pf去指向文件 if(pf==NULL){printf("注冊時打開文件失敗\n");return ;}printf("\t\t\t歡迎來到注冊界面\n\n");printf("\t\t\t輸入賬號->");scanf("%s",a.id);printf("輸入成功!\n"); fread(&b, sizeof(Users), 1, pf); //【判斷】有沒有注冊過-比較字符串是否相等 //不相等->是否到文件尾 while(1) {if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0 )//未到文件尾 fread(&b, sizeof(Users), 1, pf);else//到了文件尾仍然沒有相同的字符串-說明輸入的賬號使新的 可以去注冊界面 {printf("賬號未注冊過,將跳轉到注冊界面\n");system("pause");break;//利用break來跳出無限循環 }}else{printf("該賬號已注冊過\n");fclose(pf); pf=NULL;return;} } //【注冊界面】 printf("\t\t\t請輸入姓名->"); scanf("%s",a.name);printf("\t\t\t請輸入性別:男/女->"); do{getchar();scanf("%s",a.sex);if(strcmp(a.sex, "男")!=0&&strcmp(a.sex, "女")!=0)printf("\t\t\t輸入錯誤,請重新輸入->");else break;}while(1);printf("\t\t\t請輸入密碼->"); scanf("%s",a.paw);printf("\t\t\t請再輸入一次密碼->"); do{scanf("%s",tmp);if(strcmp(tmp,a.paw)!=0)printf("\t\t\t兩次輸入密碼不一致,請再輸入一次密碼->");else break;}while(1);//兩次密碼一致fclose(pf); pf=NULL;pf=fopen("data.txt","a");//fwrite會在當前文件指針的位置寫入數據//"w" 打開,文件指針指到頭,只寫;"a" 打開,指向文件尾fwrite(&a, sizeof(Users) , 1, pf );printf("\t\t\t注冊成功!\n"); fclose(pf); pf=NULL;return; } void teaLORE() //老師登錄與注冊函數 {int input=-1,flagg=0; do{printf("\t\t\t----------------------------------\n");printf("\t\t\t| 1.登錄 |\n");printf("\t\t\t| 2.注冊 |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t----------------------------------\n");printf("請選擇功能->");scanf("%d",&input);switch(input){case 1:flagg=LOGIN();break; //登錄 case 2:REGIST();break; //注冊 case 0:puts("退出成功"); exit(0); //退出 }if(flagg==1) break;}while(input); //如果輸入除 1、2、0以外的數,將提示重新選擇功能 return ; }2、老師功能菜單
老師登錄成功后,系統會給出老師可以選擇的功能菜單。
?
void tteacher() //老師的服務 {int nn=N; srand (time(NULL));if(fflag==0) cout << "老師,歡迎進入老師管理系統" << endl;puts("");printf("\t\t\t============================================\n");printf("\t\t\t| |\n");printf("\t\t\t| 綜合能力測試系統 |\n");printf("\t\t\t| |\n");printf("\t\t\t|==========================================|\n");printf("\t\t\t| 請選擇要操作的命令 |\n");printf("\t\t\t|------------------------------------------|\n");printf("\t\t\t| |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t| 1.查看老師信息 |\n");printf("\t\t\t| 2.查看學生信息 |\n");printf("\t\t\t| 3.系統評價與建議 |\n");printf("\t\t\t| |\n");printf("\t\t\t============================================\n");printf("\t\t\t選擇(0---4):\t\t\t");fflag++;do {if (nn != N) cout << "當前選項不存在,請重新選擇:";cin >> nn;} while (nn != 0 && nn != 1 && nn != 2 && nn != 3 ); puts("");if(nn==0){cout<<"退出成功,祝您生活愉快!!"<<endl; exit(0);}else if(nn==1) readteacher(); //平時測試 else if(nn==2) readstudent(); //老師查看個人信息 else if(nn==3) estimate(1); //系統評價建議 }3、查看老師信息
在老師菜單里,我們可以選擇 1-查看老師信息,系統將給出老師的姓名、賬號等相關信息。
void readteacher() //老師查看個人信息 {cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;printf(" "); fstream f;//文件讀取,把原來的ios::out改成ios::in f.open("data.txt",ios::in);string s;//一直讀到文件末尾 while(f>>s)cout<<s<<endl; //顯示讀取內容 f.close();puts(""); puts("");tteacher(); }?4、查看學生信息
在老師菜單里,我們可以選擇 2-查看學生信息,系統將給出學生的姓名、賬號等相關信息。
void readstudent() //老師查看學生信息 {cout<<endl<<HEADER11<<HEADER2<<HEADER3 ;printf(" "); fstream f;//文件讀取,把原來的ios::out改成ios::in f.open("users.txt",ios::in);string s;//一直讀到文件末尾 while(f>>s)cout<<s<<endl; //顯示讀取內容 f.close();puts("");puts("");tteacher(); }5、系統評價與建議
?
void estimate(int xx) //統評價與建議 {int sorce;string words;printf("歡迎進入系統評價界面\n"); printf("您對我們系統滿意程度是多少呢?\n");printf("請打分(0-10):\n"); cin>>sorce;printf("感謝您的評價,我們會繼續努力的,為您提供更優質的服務\n");puts("");printf("您對我們的系統有什么建議嗎?\n");cin>>words;puts("");printf("您的建議是我們前進的動力,最后,祝您生活愉快喲 ≧▽≦\n");puts("");puts("");if(xx==0) sstudent(); //學生 else if(xx==1) tteacher(); //老師 }(三)學生服務
(該項目進行的前提是在最開始時選擇的 2-學生)
1、登錄注冊操作
([注]:該操作與老師的登錄注冊是相通的,只是存儲老師和學生信息的文件不同)
(進行此操作需要用到文件這一知識點,因為你需要用文件來存儲學生賬號、密碼等信息,注冊的信息存在文檔里,后面才能進行登錄。所以你需要在存儲代碼的相同路徑下,新建一個 txt 的文本文檔,我存儲學生信息的文本文檔叫做users.txt)
(1)可以選擇 0-退出 ,直接退出整個系統;
(2)也可以選擇 1-登錄,需要輸入賬號,若該賬號未提前注冊過,系統將提示“該賬號不存在,請先注冊”,若賬號已注冊過,則輸入密碼,若密碼錯誤,系統將提示“密碼錯誤,請重新輸入”,只有當賬號和密碼都正確時,才能進入系統;
(3)若選擇 2-注冊,你需要現輸入賬號,若該賬號已注冊過,系統將提示“該賬號已注冊過”,繼續彈出登錄注冊菜單欄,若該賬號未注冊過,繼續輸入姓名、性別、密碼、再次輸入密碼等信息。
typedef struct User_basicinfo {char id[15];char paw[20];char name[15];char sex[5]; }Users; Users a={0},b={0}; int fflag=0,fllag=0; //學生注冊函數 void Regist() {char tmp[20]={-1};FILE *pf=NULL;pf=fopen("users.txt","r");//用pf去指向文件 if(pf==NULL){printf("注冊時打開文件失敗\n");return ;}printf("\t\t\t歡迎來到注冊界面\n\n");printf("\t\t\t輸入賬號->");scanf("%s",a.id);printf("輸入成功!\n"); fread(&b, sizeof(Users), 1, pf); //【判斷】有沒有注冊過-比較字符串是否相等 //不相等->是否到文件尾 while(1) {if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0 )//未到文件尾 fread(&b, sizeof(Users), 1, pf);else//到了文件尾仍然沒有相同的字符串-說明輸入的賬號使新的 可以去注冊界面 {printf("賬號未注冊過,將跳轉到注冊界面\n");system("pause");break;//利用break來跳出無限循環 }}else{printf("該賬號已注冊過\n");fclose(pf); pf=NULL;return;} } //【注冊界面】 printf("\t\t\t請輸入姓名->"); scanf("%s",a.name);printf("\t\t\t請輸入性別:男/女->"); do{getchar();scanf("%s",a.sex);if(strcmp(a.sex, "男")!=0&&strcmp(a.sex, "女")!=0)printf("\t\t\t輸入錯誤,請重新輸入->");else break;}while(1);printf("\t\t\t請輸入密碼->"); scanf("%s",a.paw);printf("\t\t\t請再輸入一次密碼->"); do{scanf("%s",tmp);if(strcmp(tmp,a.paw)!=0)printf("\t\t\t兩次輸入密碼不一致,請再輸入一次密碼->");else break;}while(1);//兩次密碼一致fclose(pf); pf=NULL;pf=fopen("users.txt","a");//fwrite會在當前文件指針的位置寫入數據//"w" 打開,文件指針指到頭,只寫;"a" 打開,指向文件尾fwrite(&a, sizeof(Users) , 1, pf );printf("\t\t\t注冊成功!\n"); fclose(pf); pf=NULL;return; }//登錄函數 int Login() {Users a={0},b={0};FILE *pf=fopen("users.txt","r");if(pf==NULL){printf("文件打開失敗\n");return 0;}printf("歡迎來到登錄界面!\n");printf("請輸入賬號->");scanf("%s",a.id);fread(&b, sizeof(Users), 1, pf);while(1){if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0)//未到文件尾 {fread(&b, sizeof(Users), 1, pf);}else{printf("該賬號不存在,請先注冊\n");fclose(pf); pf=NULL;return 0;}}else//賬號注冊過->跳到輸入密碼 {break; //退出無限循環,跳到輸入密碼 }} //【輸入密碼】 printf("請輸入密碼->"); do{scanf("%s",a.paw);if(strcmp(a.paw, b.paw)!=0 )printf("密碼錯誤,請重新輸入->");else break;}while(1);printf("登錄成功!\n");fclose(pf); pf=NULL;return 1; } //學生登錄與注冊函數 void LORE() {int input=-1,flagg=-1; do{printf("\t\t\t----------------------------------\n");printf("\t\t\t| 1.登錄 |\n");printf("\t\t\t| 2.注冊 |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t----------------------------------\n");printf("請選擇功能->");scanf("%d",&input);switch(input){case 1:flagg=Login();break; //登錄 case 2:Regist();break; //注冊 case 0:puts("退出成功"); exit(0); //退出 }if(flagg==1) break;}while(input); //如果輸入除 1、2、0以外的數,將提示重新選擇功能 return ; }2、學生功能菜單
學生登錄成功后,系統會給出學生可以選擇的功能菜單。
//學生選擇測試類型(日常、考試、小游戲、系統評價建議) void sstudent() {int nn=N; srand (time(NULL));if(fllag==0) cout << "同學,歡迎進入學生測評系統" << endl;puts("");printf("\t\t\t============================================\n");printf("\t\t\t| |\n");printf("\t\t\t| 綜合能力測試系統 |\n");printf("\t\t\t| |\n");printf("\t\t\t|==========================================|\n");printf("\t\t\t| 請選擇要操作的命令 |\n");printf("\t\t\t|------------------------------------------|\n");printf("\t\t\t| |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t| 1.日常測試 |\n");printf("\t\t\t| 2.考試測試 |\n");printf("\t\t\t| 3.猜數小游戲 |\n");printf("\t\t\t| 4.系統評價與建議 |\n");printf("\t\t\t| |\n");printf("\t\t\t============================================\n");printf("\t\t\t選擇(0---4):\t\t\t");fllag++;do {if (nn != N) cout << "當前選項不存在,請重新選擇:";cin >> nn;} while (nn != 0 && nn != 1 && nn != 2 && nn != 3 && nn != 4); puts("");if(nn==0){cout<<"退出成功,祝您生活愉快!!"<<endl; exit(0);}else if(nn==1) timetest(); //平時測試 else if(nn==2) examtest(); //考試測試else if(nn==3) gametest(); //猜數小游戲 else if(nn==4) estimate(0); //系統評價建議 }?3、日常測試
選擇 1-日常測試 后,系統又會給出運算類型菜單(加減乘除)、運算難度菜單(簡單--一位數的運算,中等--兩位數的運算,困難--三位數的運算),選擇不同的類型、難度,系統將提供相應的題目。日常測試不需要選擇題目數量,隨做隨停,作對做錯都有相關的提示,若想要正確答案,則輸入一個 ? 即可,若要停止作答,則輸入一個除數字、?的其他字符即可。
?
// 1代表日常測試 函數 void timetest() // {int n=N,a=N,b=N,c;int x,y;srand (time(NULL));cout << "您選擇了“日常測試”" << endl; cout << "那么,本次測試的成績將不會計入總分" << endl; printf(" **************題目類型*************\n");printf(" *--------------0.退出--------------*\n");printf(" *-------1.加法 2.減法-------*\n");printf(" *-------3.乘法 4.除法-------*\n");printf(" *************************************\n");do{//類型 if (b != N) cout << "當前選項不存在,請重新選擇:";printf(" 請輸入:"); cin >> b; if(b==0) exit(0); //退出系統 } while (b != 1 && b != 2 && b != 3 && b != 4); puts("");cout<<" *********題目難度*********"<<endl;cout<<" ** 0.退出 **"<<endl;cout<<" ** 1.簡單 **"<<endl;cout<<" ** 2.中等 **"<<endl;cout<<" ** 3.困難 **"<<endl;cout<<" **&&&&&&&&&&&&&&&&&&&&&&**" <<endl; cout<<" 請輸入:"; do {//難度 if (a != N) cout << "當前選項不存在,請重新選擇:";cin >> a;if(a==0) exit(0); //退出系統 } while (a != 1 && a != 2 && a != 3);puts("");cout << "即將開始測試" << endl;cout << "【注 1】若您需要退出,請在答題區域輸入一個或多個除數字、問號以外的其他字符" << endl;cout << "【注 2】若您需要答案提示,請在答題區域輸入一個問號" << endl; puts(""); cout << "測試開始!" << endl;puts("");string ans = "1";int res; //res是系統給出的正確答案 int flag = 0;while (1) //運算開始 {flag = 0;if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難 // *******加法******* if (b == 1){res = x + y; //res是系統給出的正確答案 cout << "請輸入" << x << " + " << y << "的答案:";cin >> ans; //學生自行運算的答案 getchar ();if (ans[0] >= '0' && ans[0] <= '9'){while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入:";cin >> ans;if (ans[0] == '?') //答案提示 { cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;puts("");flag = 1; break;}else if (ans[0] < '0' || ans[0] > '9') //不是數字 退出作答 {cout << "作答結束,即將退出,期待與您下次相遇!!"; flag = 2; break;} }if (flag == 1) continue; if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl; //輸出正確答案 cout << "請您再接再厲,加油!" << endl; puts(""); }else{cout << "作答結束,即將退出,期待與您下次相遇";break;} }// *******減法******* else if (b == 2) // 減法{if(x<y) swap(x,y);res = x - y; // 正確答案 cout << "請輸入" << x << " - " << y << "的答案:";cin >> ans; //學生自行運算的答案if (ans[0] >= '0' && ans[0] <= '9') {while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入:";cin >> ans;if (ans[0] == '?') {cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;flag = 1;puts("");break;} else if (ans[0] < '0' || ans[0] > '9') {cout << "作答結束,即將退出,期待與您下次相遇"; flag = 2;break;}}if (flag == 1) continue;if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl; puts(""); }else {cout << "作答結束,即將退出,期待與您下次相遇";break;} }// *******乘法******* else if (b == 3) // 乘法{res = x * y;cout << "請輸入" << x << " * " << y << "的答案:";cin >> ans;if (ans[0] >= '0' && ans[0] <= '9') {while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入:";cin >> ans;if (ans[0] == '?') {cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;flag = 1;puts("");break;}else if (ans[0] < '0' || ans[0] > '9') {cout << "作答結束,即將退出,期待與您下次相遇"; flag = 2;break;}}if (flag == 1) continue;if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;puts(""); }else {cout << "作答結束,即將退出,期待與您下次相遇";break;} }// *******除法******* else //除法 {res = x / y;cout << "請輸入" << x << " / " << y << "的答案(答案取下整):";cin >> ans;if (ans[0] >= '0' && ans[0] <= '9'){while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入(答案取下整):";cin >> ans;if (ans[0] == '?') {cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl; flag = 1;puts ("");break;} else if (ans[0] < '0' || ans[0] > '9') {cout << "作答結束,即將退出,期待與您下次相遇"; flag = 2;break;}}if (flag == 1) continue;if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;puts(""); }else {cout << "作答結束,即將退出,期待與您下次相遇";break; } } }puts("");puts(""); sstudent(); }4、考試測試
選擇 2-考試測試 后,系統又會給出運算類型菜單(加減乘除)、運算難度菜單(簡單--一位數的運算,中等--兩位數的運算,困難--三位數的運算),選擇不同的類型、難度,系統將提供相應的題目??荚嚋y試需要輸入需要做的題目的數量,作答結束后,系統會給出此次作答的正確題量、正確率、系統等級等信息。
?
void examtest() //考試測試 {int n,a=N,b=N,c;cout << "您選擇了“終極測試”" << endl; cout << "那么,本次測試的成績將會計入總分,請細心作答" << endl;printf(" **************題目類型***************\n");printf(" *--------------0.退出---------------*\n");printf(" *-------1.加法 2.減法-------*\n");printf(" *-------3.乘法 4.除法-------*\n");printf(" *************************************\n");printf(" 請輸入:"); do {//題目類型if (b != N) cout << " 當前選項不存在,請重新選擇:";cin >> b;if(b==0) exit(0);} while (b != 1 && b != 2 && b != 3 && b != 4);cout<<" *********題目難度*********"<<endl;cout<<" ** 0.退出 **"<<endl;cout<<" ** 1.簡單 **"<<endl;cout<<" ** 2.中等 **"<<endl;cout<<" ** 3.困難 **"<<endl;cout<<" **&&&&&&&&&&&&&&&&&&&&&&**" <<endl;cout<<" 請輸入:";do {//題目的難度if (a != N) cout << "當前選項不存在,請重新選擇:";cin >> a;if(a==0) exit(0);} while (a != 1 && a != 2 && a != 3);cout << " 請選擇題目數量(建議能做多少選多少,否則會影響你的信譽哦):";cin >> c; //題量while (c<=0) {cout << " 您輸入的題量有誤,請重新選擇:" << endl;cin >> c;}if(b==1) Add(a,c);//加法 (難度,題量) else if(b==2) Sub(a,c); //減法 (難度,題量)else if(b==3) Mul(a,c); //乘法 (難度,題量)else if(b==4) Div(a,c); //除法 (難度,題量)puts("");puts("");sstudent(); } //判斷計算輸入答案是否正確 void result(double res, double ans,int xx) { if(xx==1) //加 減 乘 { if (ans==res) printf("答案正確了耶≧▽≦\n");else printf("正確答案應該是%d\n答錯了~(′·︵ ·`)~沒關系再繼續加油!!\n", res);}else if(xx==0) //除 {if (fabs(ans-res)<=0.01) printf("答案正確了耶≧▽≦\n");else printf("正確答案應該是%d\n答錯了~(′·︵ ·`)~沒關系再繼續加油!!\n", res);} puts(""); } //考試結果評價 void evaluate(int num,int c) {printf("\n你一共答對了%d題\n", num);double acc;acc=100.0*(num*1.0)/(c*1.0); //正確率 printf("正確率為%.2f%%\n",acc); if (acc>=0 && acc<60) printf("等級為D 還要繼續加油啊!!\n");else if (acc>=60 && acc<70)printf("等級為C 還不錯喲!!繼續加油\n");else if (acc>=70 && acc<90)printf("等級為B 不錯不錯,朝著A奮斗吧\n");elseprintf("等級為A 天吶,太棒啦,繼續保持喲!!\n"); }void Add(int a,int c) 考試測試中的加法 (難度,題量) {printf("加法測試現在開始!!\n");int x,y,i,num=0; double res,ans;srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難res = x + y; //正確答案 cout << "第" << i << "題: 請輸入" << x << " + " << y << "的答案:";cin >> ans; //學生輸入的答案 if (ans == res) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } void Sub(int a,int c) //考試測試中的減法 (難度,題量) {printf("減法測試現在開始!!\n");int x,y,i,num=0; double res,ans; srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難if(x<y) swap(x,y); res = x - y; //正確答案 cout << "第" << i << "題: 請輸入" << x << " - " << y << "的答案:";cin >> ans; //學生輸入的答案 if (ans == res) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } void Mul(int a,int c) //乘法 (難度,題量) {printf("乘法測試現在開始!!\n");int x,y,i,num=0; double res,ans; srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難res = x*y; //正確答案 cout << "第" << i << "題: 請輸入" << x << " * " << y << "的答案:";cin >> ans; //學生輸入的答案 if (ans == res) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } void Div(int a,int c) //試測試中的除法 (難度,題量) {printf("除法測試現在開始!!\n"); printf("【注】保留兩位小數\n"); int x,y,i,num=0; double res,ans;srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難res =(x*1.0)/(y*1.0);cout << "第" << i << "題: 請輸入" << x << " / " << y << "的答案:";cin >> ans; //學生輸入的答案 if (fabs(ans-res)<=0.01) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) }5、猜數小游戲
這是一個休閑小游戲,輸入你想猜的數字范圍,系統將生成相應的隨機數,學生按照提示猜數。
void gametest() //簡單小游戲 {game();puts("");puts("");sstudent(); } int game() {int input = 0;srand((unsigned int)time(NULL)); do{printf("請選擇是否開始游戲?\n");printf("開始請按1! \t退出請按0!\n"); scanf("%d",&input);switch(input){case 1:printf("游戲開始! \n");guess();break;case 0:printf("退出游戲! \n");//exit(0);break;default:printf("選擇錯誤,請重新開始!\n");break;}if(input==0) break; }while(input);getchar(); } int guess() {int n=0;//接收隨機數 int s;//s表示生成數的范圍 int count=1;//計數猜了多少次 int x;//用戶猜的數字 printf("我想要猜的數字范圍:"); scanf("%d",&s); n=rand() % s + 1;do{printf("請猜數字:"); scanf("%d",&x); if(x>n){printf("你猜的數字太大了!");printf("請繼續猜!\n"); }else if(x<n){printf("你猜的數字太小了!");printf("請繼續猜!\n"); }else{printf("太棒了!你猜對了!\n"); break;} count++;}while(n!=x);printf("你猜了%d次!\n",count); }?6、系統評價與建議
此項目與老師系統評價與建議相同。
四、完整代碼
(完整代碼中的注釋請仔細閱讀哦~~有一些小細節)
#include <bits/stdc++.h> #include <windows.h> #include <mmsystem.h> #pragma comment (lib , "Winmm.lib") #include <string.h> #define HEADER1 "-------------------------老師信息------------------------ \n" #define HEADER11 "------------------------學生信息-------------------------\n" #define HEADER2 "| 賬號 | 密碼 | 姓名 | 性別 |\n" #define HEADER3 "|-----------|--------------|-----------------|-----------|\n" using namespace std; const int N = 1e7 + 5; typedef struct User_basicinfo {char id[15];char paw[20];char name[15];char sex[5]; }Users; Users a={0},b={0}; int fflag=0,fllag=0;void identity(); //身份的選擇函數(1老師,2學生) //學生服務 int Login();//學生登錄 void Regist();//學生注冊 void LORE(); int to_digit(string s); //字符串轉換成數字的函數 void sstudent(); //測試選擇 void timetest(); //平時測試 void examtest(); //考試測試 void evaluate(int num,int c); //考試結果評價 (正確數目,總數) void result(double res, double ans,int xx); //答案正確與否判斷 void Add(int a,int c); //考試測試中的加法 (難度,題量) void Sub(int a,int c); //考試測試中的減法 (難度,題量) void Mul(int a,int c); //試測試中的乘法 (難度,題量) void Div(int a,int c); //試測試中的除法 (難度,題量) void gametest(); //簡單小游戲 int game(); int guess(); void estimate(int xx); //系統評價//教師服務 void teaLORE(); //學生登錄與注冊函數 int LOGIN() ; //老師登錄 void REGIST(); //老師注冊 void tteacher(); //老師的服務 void readteacher(); //老師查看老師個人信息 void readstudent();//讀取現有學生信息 /* *******************我是友好的分界線***主函數******************* */ //主函數 int main() {mciSendString ("open bgmm.mp3 alias bkmusic" , NULL , 0 , NULL);mciSendString ("play bkmusic repeat" , NULL , 0 , NULL);identity();return 0; }/* *******************我是友好的分界線***學生or老師選擇******************* */ //身份選擇 void identity() {int n=N;cout << "歡迎進入學生綜合素質測評系統" << endl;puts("");do {if (n != N) cout << "您輸入的身份信息有誤,請重新輸入" << endl;cout << "請選擇您的身份(1代表教師,2代表學生):";cin >> n;//輸入身份}while(n!=1&&n!=2);//學生身份if(n==2){LORE(); //學生登錄與注冊 sstudent(); //選擇 }else //老師 {teaLORE(); //老師登錄與注冊tteacher(); //選擇 }}//學生注冊函數 void Regist() {char tmp[20]={-1};FILE *pf=NULL;pf=fopen("users.txt","r");//用pf去指向文件 if(pf==NULL){printf("注冊時打開文件失敗\n");return ;}printf("\t\t\t歡迎來到注冊界面\n\n");printf("\t\t\t輸入賬號->");scanf("%s",a.id);printf("輸入成功!\n"); fread(&b, sizeof(Users), 1, pf); //【判斷】有沒有注冊過-比較字符串是否相等 //不相等->是否到文件尾 while(1) {if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0 )//未到文件尾 fread(&b, sizeof(Users), 1, pf);else//到了文件尾仍然沒有相同的字符串-說明輸入的賬號使新的 可以去注冊界面 {printf("賬號未注冊過,將跳轉到注冊界面\n");system("pause");break;//利用break來跳出無限循環 }}else{printf("該賬號已注冊過\n");fclose(pf); pf=NULL;return;} } //【注冊界面】 printf("\t\t\t請輸入姓名->"); scanf("%s",a.name);printf("\t\t\t請輸入性別:男/女->"); do{getchar();scanf("%s",a.sex);if(strcmp(a.sex, "男")!=0&&strcmp(a.sex, "女")!=0)printf("\t\t\t輸入錯誤,請重新輸入->");else break;}while(1);printf("\t\t\t請輸入密碼->"); scanf("%s",a.paw);printf("\t\t\t請再輸入一次密碼->"); do{scanf("%s",tmp);if(strcmp(tmp,a.paw)!=0)printf("\t\t\t兩次輸入密碼不一致,請再輸入一次密碼->");else break;}while(1);//兩次密碼一致fclose(pf); pf=NULL;pf=fopen("users.txt","a");//fwrite會在當前文件指針的位置寫入數據//"w" 打開,文件指針指到頭,只寫;"a" 打開,指向文件尾fwrite(&a, sizeof(Users) , 1, pf );printf("\t\t\t注冊成功!\n"); fclose(pf); pf=NULL;return; }//登錄函數 int Login() {Users a={0},b={0};FILE *pf=fopen("users.txt","r");if(pf==NULL){printf("文件打開失敗\n");return 0;}printf("歡迎來到登錄界面!\n");printf("請輸入賬號->");scanf("%s",a.id);fread(&b, sizeof(Users), 1, pf);while(1){if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0)//未到文件尾 {fread(&b, sizeof(Users), 1, pf);}else{printf("該賬號不存在,請先注冊\n");fclose(pf); pf=NULL;return 0;}}else//賬號注冊過->跳到輸入密碼 {break; //退出無限循環,跳到輸入密碼 }} //【輸入密碼】 printf("請輸入密碼->"); do{scanf("%s",a.paw);if(strcmp(a.paw, b.paw)!=0 )printf("密碼錯誤,請重新輸入->");else break;}while(1);printf("登錄成功!\n");fclose(pf); pf=NULL;return 1; } //學生登錄與注冊函數 void LORE() {int input=-1,flagg=-1; do{printf("\t\t\t----------------------------------\n");printf("\t\t\t| 1.登錄 |\n");printf("\t\t\t| 2.注冊 |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t----------------------------------\n");printf("請選擇功能->");scanf("%d",&input);switch(input){case 1:flagg=Login();break; //登錄 case 2:Regist();break; //注冊 case 0:puts("退出成功"); exit(0); //退出 }if(flagg==1) break;}while(input); //如果輸入除 1、2、0以外的數,將提示重新選擇功能 return ; }/* *******************我是友好的分界線***字符轉數字******************* */ //字符轉數字 int to_digit(string s) {int n = 0 , res = 0;while (s[n] != '\0') {res = res * 10 + (s[n] - '0');n ++;}return res; } /* *******************我是友好的分界線***服務類型(日常、考試、小游戲、系統評價建議)選擇***********/ //學生選擇測試類型(日常、考試、小游戲、系統評價建議) void sstudent() {int nn=N; srand (time(NULL));if(fllag==0) cout << "同學,歡迎進入學生測評系統" << endl;puts("");printf("\t\t\t============================================\n");printf("\t\t\t| |\n");printf("\t\t\t| 綜合能力測試系統 |\n");printf("\t\t\t| |\n");printf("\t\t\t|==========================================|\n");printf("\t\t\t| 請選擇要操作的命令 |\n");printf("\t\t\t|------------------------------------------|\n");printf("\t\t\t| |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t| 1.日常測試 |\n");printf("\t\t\t| 2.考試測試 |\n");printf("\t\t\t| 3.猜數小游戲 |\n");printf("\t\t\t| 4.系統評價與建議 |\n");printf("\t\t\t| |\n");printf("\t\t\t============================================\n");printf("\t\t\t選擇(0---4):\t\t\t");fllag++;do {if (nn != N) cout << "當前選項不存在,請重新選擇:";cin >> nn;} while (nn != 0 && nn != 1 && nn != 2 && nn != 3 && nn != 4); puts("");if(nn==0){cout<<"退出成功,祝您生活愉快!!"<<endl; exit(0);}else if(nn==1) timetest(); //平時測試 else if(nn==2) examtest(); //考試測試else if(nn==3) gametest(); //猜數小游戲 else if(nn==4) estimate(0); //系統評價建議 }/* *******************我是友好的分界線***日常測試********************** */ // 1代表日常測試 函數 void timetest() // {int n=N,a=N,b=N,c;int x,y;srand (time(NULL));cout << "您選擇了“日常測試”" << endl; cout << "那么,本次測試的成績將不會計入總分" << endl; printf(" **************題目類型*************\n");printf(" *--------------0.退出--------------*\n");printf(" *-------1.加法 2.減法-------*\n");printf(" *-------3.乘法 4.除法-------*\n");printf(" *************************************\n");do{//類型 if (b != N) cout << "當前選項不存在,請重新選擇:";printf(" 請輸入:"); cin >> b; if(b==0) exit(0); //退出系統 } while (b != 1 && b != 2 && b != 3 && b != 4); puts("");cout<<" *********題目難度*********"<<endl;cout<<" ** 0.退出 **"<<endl;cout<<" ** 1.簡單 **"<<endl;cout<<" ** 2.中等 **"<<endl;cout<<" ** 3.困難 **"<<endl;cout<<" **&&&&&&&&&&&&&&&&&&&&&&**" <<endl; cout<<" 請輸入:"; do {//難度 if (a != N) cout << "當前選項不存在,請重新選擇:";cin >> a;if(a==0) exit(0); //退出系統 } while (a != 1 && a != 2 && a != 3);puts("");cout << "即將開始測試" << endl;cout << "【注 1】若您需要退出,請在答題區域輸入一個或多個除數字、問號以外的其他字符" << endl;cout << "【注 2】若您需要答案提示,請在答題區域輸入一個問號" << endl; puts(""); cout << "測試開始!" << endl;puts("");string ans = "1";int res; //res是系統給出的正確答案 int flag = 0;while (1) //運算開始 {flag = 0;if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難 // *******加法******* if (b == 1){res = x + y; //res是系統給出的正確答案 cout << "請輸入" << x << " + " << y << "的答案:";cin >> ans; //學生自行運算的答案 getchar ();if (ans[0] >= '0' && ans[0] <= '9'){while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入:";cin >> ans;if (ans[0] == '?') //答案提示 { cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;puts("");flag = 1; break;}else if (ans[0] < '0' || ans[0] > '9') //不是數字 退出作答 {cout << "作答結束,即將退出,期待與您下次相遇!!"; flag = 2; break;} }if (flag == 1) continue; if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl; //輸出正確答案 cout << "請您再接再厲,加油!" << endl; puts(""); }else{cout << "作答結束,即將退出,期待與您下次相遇";break;} }// *******減法******* else if (b == 2) // 減法{if(x<y) swap(x,y);res = x - y; // 正確答案 cout << "請輸入" << x << " - " << y << "的答案:";cin >> ans; //學生自行運算的答案if (ans[0] >= '0' && ans[0] <= '9') {while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入:";cin >> ans;if (ans[0] == '?') {cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;flag = 1;puts("");break;} else if (ans[0] < '0' || ans[0] > '9') {cout << "作答結束,即將退出,期待與您下次相遇"; flag = 2;break;}}if (flag == 1) continue;if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl; puts(""); }else {cout << "作答結束,即將退出,期待與您下次相遇";break;} }// *******乘法******* else if (b == 3) // 乘法{res = x * y;cout << "請輸入" << x << " * " << y << "的答案:";cin >> ans;if (ans[0] >= '0' && ans[0] <= '9') {while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入:";cin >> ans;if (ans[0] == '?') {cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;flag = 1;puts("");break;}else if (ans[0] < '0' || ans[0] > '9') {cout << "作答結束,即將退出,期待與您下次相遇"; flag = 2;break;}}if (flag == 1) continue;if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;puts(""); }else {cout << "作答結束,即將退出,期待與您下次相遇";break;} }// *******除法******* else //除法 {res = x / y;cout << "請輸入" << x << " / " << y << "的答案(答案取下整):";cin >> ans;if (ans[0] >= '0' && ans[0] <= '9'){while (res != to_digit(ans)) {cout << "答案錯誤,請再次輸入(答案取下整):";cin >> ans;if (ans[0] == '?') {cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl; flag = 1;puts ("");break;} else if (ans[0] < '0' || ans[0] > '9') {cout << "作答結束,即將退出,期待與您下次相遇"; flag = 2;break;}}if (flag == 1) continue;if (flag == 2) break;cout << "答案正確!" << endl;puts(""); }else if (ans[0] == '?'){cout << "本題答案為:" << res << endl;cout << "請您再接再厲,加油!" << endl;puts(""); }else {cout << "作答結束,即將退出,期待與您下次相遇";break; } } }puts("");puts(""); sstudent(); }/* *******************我是友好的分界線***考試測試********************** */ void examtest() //考試測試 {int n,a=N,b=N,c;cout << "您選擇了“終極測試”" << endl; cout << "那么,本次測試的成績將會計入總分,請細心作答" << endl;printf(" **************題目類型***************\n");printf(" *--------------0.退出---------------*\n");printf(" *-------1.加法 2.減法-------*\n");printf(" *-------3.乘法 4.除法-------*\n");printf(" *************************************\n");printf(" 請輸入:"); do {//題目類型if (b != N) cout << " 當前選項不存在,請重新選擇:";cin >> b;if(b==0) exit(0);} while (b != 1 && b != 2 && b != 3 && b != 4);cout<<" *********題目難度*********"<<endl;cout<<" ** 0.退出 **"<<endl;cout<<" ** 1.簡單 **"<<endl;cout<<" ** 2.中等 **"<<endl;cout<<" ** 3.困難 **"<<endl;cout<<" **&&&&&&&&&&&&&&&&&&&&&&**" <<endl;cout<<" 請輸入:";do {//題目的難度if (a != N) cout << "當前選項不存在,請重新選擇:";cin >> a;if(a==0) exit(0);} while (a != 1 && a != 2 && a != 3);cout << " 請選擇題目數量(建議能做多少選多少,否則會影響你的信譽哦):";cin >> c; //題量while (c<=0) {cout << " 您輸入的題量有誤,請重新選擇:" << endl;cin >> c;}if(b==1) Add(a,c);//加法 (難度,題量) else if(b==2) Sub(a,c); //減法 (難度,題量)else if(b==3) Mul(a,c); //乘法 (難度,題量)else if(b==4) Div(a,c); //除法 (難度,題量)puts("");puts("");sstudent(); } //判斷計算輸入答案是否正確 void result(double res, double ans,int xx) { if(xx==1) //加 減 乘 { if (ans==res) printf("答案正確了耶≧▽≦\n");else printf("正確答案應該是%d\n答錯了~(′·︵ ·`)~沒關系再繼續加油!!\n", res);}else if(xx==0) //除 {if (fabs(ans-res)<=0.01) printf("答案正確了耶≧▽≦\n");else printf("正確答案應該是%d\n答錯了~(′·︵ ·`)~沒關系再繼續加油!!\n", res);} puts(""); } //考試結果評價 void evaluate(int num,int c) {printf("\n你一共答對了%d題\n", num);double acc;acc=100.0*(num*1.0)/(c*1.0); //正確率 printf("正確率為%.2f%%\n",acc); if (acc>=0 && acc<60) printf("等級為D 還要繼續加油啊!!\n");else if (acc>=60 && acc<70)printf("等級為C 還不錯喲!!繼續加油\n");else if (acc>=70 && acc<90)printf("等級為B 不錯不錯,朝著A奮斗吧\n");elseprintf("等級為A 天吶,太棒啦,繼續保持喲!!\n"); }void Add(int a,int c) 考試測試中的加法 (難度,題量) {printf("加法測試現在開始!!\n");int x,y,i,num=0; double res,ans;srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難res = x + y; //正確答案 cout << "第" << i << "題: 請輸入" << x << " + " << y << "的答案:";cin >> ans; //學生輸入的答案 if (ans == res) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } void Sub(int a,int c) //考試測試中的減法 (難度,題量) {printf("減法測試現在開始!!\n");int x,y,i,num=0; double res,ans; srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難if(x<y) swap(x,y); res = x - y; //正確答案 cout << "第" << i << "題: 請輸入" << x << " - " << y << "的答案:";cin >> ans; //學生輸入的答案 if (ans == res) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } void Mul(int a,int c) //乘法 (難度,題量) {printf("乘法測試現在開始!!\n");int x,y,i,num=0; double res,ans; srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難res = x*y; //正確答案 cout << "第" << i << "題: 請輸入" << x << " * " << y << "的答案:";cin >> ans; //學生輸入的答案 if (ans == res) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } void Div(int a,int c) //試測試中的除法 (難度,題量) {printf("除法測試現在開始!!\n"); printf("【注】保留兩位小數\n"); int x,y,i,num=0; double res,ans;srand (time(NULL));for(i=1;i<=c;i++){if (a == 1) x = rand() % 10 + 1 , y = rand() % 10 + 1; //簡單 if (a == 2) x = rand() % 100 + 1 , y = rand() % 100 + 1; //中等 if (a == 3) x = rand() % 1000 + 1 , y = rand() % 1000 + 1; //困難res =(x*1.0)/(y*1.0);cout << "第" << i << "題: 請輸入" << x << " / " << y << "的答案:";cin >> ans; //學生輸入的答案 if (fabs(ans-res)<=0.01) num ++;//記錄正確的題目的數目 result(res,ans,0); }evaluate(num,c); //考試結果評價 (正確數目,總數) } /* *******************我是友好的分界線***猜數小游戲********************** */ void gametest() //簡單小游戲 {game();puts("");puts("");sstudent(); } int game() {int input = 0;srand((unsigned int)time(NULL)); do{printf("請選擇是否開始游戲?\n");printf("開始請按1! \t退出請按0!\n"); scanf("%d",&input);switch(input){case 1:printf("游戲開始! \n");guess();break;case 0:printf("退出游戲! \n");//exit(0);break;default:printf("選擇錯誤,請重新開始!\n");break;}if(input==0) break; }while(input);getchar(); } int guess() {int n=0;//接收隨機數 int s;//s表示生成數的范圍 int count=1;//計數猜了多少次 int x;//用戶猜的數字 printf("我想要猜的數字范圍:"); scanf("%d",&s); n=rand() % s + 1;do{printf("請猜數字:"); scanf("%d",&x); if(x>n){printf("你猜的數字太大了!");printf("請繼續猜!\n"); }else if(x<n){printf("你猜的數字太小了!");printf("請繼續猜!\n"); }else{printf("太棒了!你猜對了!\n"); break;} count++;}while(n!=x);printf("你猜了%d次!\n",count); }/* *******************我是友好的分界線***系統評價與建議********************** */ void estimate(int xx) //統評價與建議 {int sorce;string words;printf("歡迎進入系統評價界面\n"); printf("您對我們系統滿意程度是多少呢?\n");printf("請打分(0-10):\n"); cin>>sorce;printf("感謝您的評價,我們會繼續努力的,為您提供更優質的服務\n");puts("");printf("您對我們的系統有什么建議嗎?\n");cin>>words;puts("");printf("您的建議是我們前進的動力,最后,祝您生活愉快喲 ≧▽≦\n");puts("");puts("");if(xx==0) sstudent(); //學生 else if(xx==1) tteacher(); //老師 }//老師的功能 /* *******************我是友好的分界線***學生注冊與登錄******************* */ int LOGIN() //老師登錄 {Users a={0},b={0};FILE *pf=fopen("data.txt","r");if(pf==NULL){printf("文件打開失敗\n");return 0;}printf("歡迎來到登錄界面!\n");printf("請輸入賬號->");scanf("%s",a.id);fread(&b, sizeof(Users), 1, pf);while(1){if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0)//未到文件尾 {fread(&b, sizeof(Users), 1, pf);}else{printf("該賬號不存在,請先注冊\n");fclose(pf); pf=NULL;return 0;}}else//賬號注冊過->跳到輸入密碼 {break; //退出無限循環,跳到輸入密碼 }} //【輸入密碼】 printf("請輸入密碼->"); do{scanf("%s",a.paw);if(strcmp(a.paw, b.paw)!=0 )printf("密碼錯誤,請重新輸入->");else break;}while(1);printf("登錄成功!\n");return 1;fclose(pf); pf=NULL; } void REGIST() //老師注冊 {char tmp[20]={-1};FILE *pf=NULL;pf=fopen("data.txt","r");//用pf去指向文件 if(pf==NULL){printf("注冊時打開文件失敗\n");return ;}printf("\t\t\t歡迎來到注冊界面\n\n");printf("\t\t\t輸入賬號->");scanf("%s",a.id);printf("輸入成功!\n"); fread(&b, sizeof(Users), 1, pf); //【判斷】有沒有注冊過-比較字符串是否相等 //不相等->是否到文件尾 while(1) {if(strcmp(a.id, b.id)!=0 ){if(feof(pf)==0 )//未到文件尾 fread(&b, sizeof(Users), 1, pf);else//到了文件尾仍然沒有相同的字符串-說明輸入的賬號使新的 可以去注冊界面 {printf("賬號未注冊過,將跳轉到注冊界面\n");system("pause");break;//利用break來跳出無限循環 }}else{printf("該賬號已注冊過\n");fclose(pf); pf=NULL;return;} } //【注冊界面】 printf("\t\t\t請輸入姓名->"); scanf("%s",a.name);printf("\t\t\t請輸入性別:男/女->"); do{getchar();scanf("%s",a.sex);if(strcmp(a.sex, "男")!=0&&strcmp(a.sex, "女")!=0)printf("\t\t\t輸入錯誤,請重新輸入->");else break;}while(1);printf("\t\t\t請輸入密碼->"); scanf("%s",a.paw);printf("\t\t\t請再輸入一次密碼->"); do{scanf("%s",tmp);if(strcmp(tmp,a.paw)!=0)printf("\t\t\t兩次輸入密碼不一致,請再輸入一次密碼->");else break;}while(1);//兩次密碼一致fclose(pf); pf=NULL;pf=fopen("data.txt","a");//fwrite會在當前文件指針的位置寫入數據//"w" 打開,文件指針指到頭,只寫;"a" 打開,指向文件尾fwrite(&a, sizeof(Users) , 1, pf );printf("\t\t\t注冊成功!\n"); fclose(pf); pf=NULL;return; } void teaLORE() //老師登錄與注冊函數 {int input=-1,flagg=0; do{printf("\t\t\t----------------------------------\n");printf("\t\t\t| 1.登錄 |\n");printf("\t\t\t| 2.注冊 |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t----------------------------------\n");printf("請選擇功能->");scanf("%d",&input);switch(input){case 1:flagg=LOGIN();break; //登錄 case 2:REGIST();break; //注冊 case 0:puts("退出成功"); exit(0); //退出 }if(flagg==1) break;}while(input); //如果輸入除 1、2、0以外的數,將提示重新選擇功能 return ; }/* *******************我是友好的分界線***老師的服務******************* */ void tteacher() //老師的服務 {int nn=N; srand (time(NULL));if(fflag==0) cout << "老師,歡迎進入老師管理系統" << endl;puts("");printf("\t\t\t============================================\n");printf("\t\t\t| |\n");printf("\t\t\t| 綜合能力測試系統 |\n");printf("\t\t\t| |\n");printf("\t\t\t|==========================================|\n");printf("\t\t\t| 請選擇要操作的命令 |\n");printf("\t\t\t|------------------------------------------|\n");printf("\t\t\t| |\n");printf("\t\t\t| 0.退出 |\n");printf("\t\t\t| 1.查看老師信息 |\n");printf("\t\t\t| 2.查看學生信息 |\n");printf("\t\t\t| 3.系統評價與建議 |\n");printf("\t\t\t| |\n");printf("\t\t\t============================================\n");printf("\t\t\t選擇(0---4):\t\t\t");fflag++;do {if (nn != N) cout << "當前選項不存在,請重新選擇:";cin >> nn;} while (nn != 0 && nn != 1 && nn != 2 && nn != 3 ); puts("");if(nn==0){cout<<"退出成功,祝您生活愉快!!"<<endl; exit(0);}else if(nn==1) readteacher(); //平時測試 else if(nn==2) readstudent(); //老師查看個人信息 else if(nn==3) estimate(1); //系統評價建議 } /* *******************我是友好的分界線***老師查看個人信息********************** */ void readteacher() //老師查看個人信息 {cout<<endl<<HEADER1<<HEADER2<<HEADER3 ;printf(" "); fstream f;//文件讀取,把原來的ios::out改成ios::in f.open("data.txt",ios::in);string s;//一直讀到文件末尾 while(f>>s)cout<<s<<endl; //顯示讀取內容 f.close();puts(""); puts("");tteacher(); } /* *******************我是友好的分界線***老師查看學生信息********************** */ void readstudent() //老師查看學生信息 {cout<<endl<<HEADER11<<HEADER2<<HEADER3 ;printf(" "); fstream f;//文件讀取,把原來的ios::out改成ios::in f.open("users.txt",ios::in);string s;//一直讀到文件末尾 while(f>>s)cout<<s<<endl; //顯示讀取內容 f.close();puts("");puts("");tteacher(); }五、路徑下的文件
?這就是我們小組這個項目的所有內容,因為我們還在大一,還有很多其他功能我們想實現卻心有余而力不足,但是能做到這樣我們已經很滿意了,希望能對你有幫助,可能有些細節我的文字描述不太清楚,有問題歡迎在評論區提!!
總結
- 上一篇: 全球卫星导航系统(GNSS)频率表(20
- 下一篇: 在3DMAX中为动画添加根骨骼运动