日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

个人项目对方代码分析(随机生成不同难度试卷)

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 个人项目对方代码分析(随机生成不同难度试卷) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這次的個人項目著實讓我知道了為什么程序猿毛發稀疏~(哭),在經歷了寫代碼的血與淚之后,看我搭檔的代碼不禁感慨,哇塞~她的代碼真的好短小精悍,讓人心情愉悅~相反,我的代碼讓人看起來就想扶額(嚶~)。下面我們就來一起欣賞我搭檔的代碼吧(應老師的要求,還要找找茬?)~~~~

題目:

1、命令行輸入用戶名和密碼,兩者之間用空格隔開(程序預設小學、初中和高中各三個賬號,具體見附表),如果用戶名和密碼都正確,將根據賬戶類型顯示“當前選擇為XX出題”,XX為小學、初中和高中三個選項中的一個。否則提示“請輸入正確的用戶名、密碼”,重新輸入用戶名、密碼;

2、登錄后,系統提示“準備生成XX數學題目,請輸入生成題目數量:”,XX為小學、初中和高中三個選項中的一個,用戶輸入所需出的卷子的題目數量,系統默認將根據賬號類型進行出題。每道題目的操作數在1-5個之間,操作數取值范圍為1-100;

3、題目數量的有效輸入范圍是“10-30”(含10,30),程序根據輸入的題目數量生成符合小學、初中和高中難度的題目的卷子(具體要求見附表)。同一個老師的卷子中的題目不能與以前的已生成的卷子中的題目重復(以指定文件夾下存在的文件為準,見5);

4、在登錄狀態下,如果用戶需要切換類型選項,命令行輸入“切換為XX”,XX為小學、初中和高中三個選項中的一個,輸入項不符合要求時,程序控制臺提示“請輸入小學、初中和高中三個選項中的一個”;輸入正確后,顯示“”系統提示“準備生成XX數學題目,請輸入生成題目數量”,用戶輸入所需出的卷子的題目數量,系統新設置的類型進行出題;

5、生成的題目將以“年-月-日-時-分-秒.txt”的形式保存,每個賬號一個文件夾。每道題目有題號,每題之間空一行;

該代碼流程圖:

代碼:

代碼一共分為三個部分:user.h,generate.h,main.cpp;

1、user.h

1 #ifndef USER_H_ 2 #define USER_H_ 3 4 5 #include <iostream> 6 #include <string> 7 using namespace std; 8 9 extern int g_grade; 10 11 class user 12 { 13 private: 14 string name; 15 string password; 16 int grade; 17 18 public: 19 void users(string username, string userpassword, int usergrade) 20 { 21 name = username; 22 password = userpassword; 23 grade = usergrade; 24 } 25 26 bool IsCorrect(string username, string userpassword) 27 { 28 if (username==name && userpassword==password) return true; 29 else return false; 30 } 31 32 int Getgrade() 33 { 34 return grade; 35 } 36 }; 37 38 void UserData() 39 { 40 user users[9]; 41 users[0].users("張三1", "123", 1); 42 users[1].users("張三2", "123", 1); 43 users[2].users("張三3", "123", 1); 44 users[3].users("李四1", "123", 2); 45 users[4].users("李四2", "123", 2); 46 users[5].users("李四3", "123", 2); 47 users[6].users("王五1", "123", 3); 48 users[7].users("王五2", "123", 3); 49 users[8].users("王五3", "123", 3); 50 51 cout << "請輸入用戶名和密碼" << endl; 52 string name, password; 53 while (1) 54 { 55 cin >> name >> password; 56 int is_correct = 0; 57 for (int i=0; i<9; i++) 58 { 59 if (users[i].IsCorrect(name, password) == true) 60 { 61 is_correct = 1; 62 g_grade = users[i].Getgrade(); 63 break; 64 } 65 } 66 if (is_correct == 1) 67 { 68 cout << "當前選擇為"; 69 if (g_grade == 1) cout << "小學出題, "; 70 else if (g_grade == 2) cout << "中學出題, "; 71 else cout << "高中出題, "; 72 break; 73 } 74 else 75 cout << "請輸入正確用戶名和密碼" << endl; 76 } 77 } 78 79 80 81 82 #endif /* USER_H_ */

?這個模塊主要作用為:有關登陸的一系列提示

優點:該模塊代碼巧妙運用類,使整個模塊思路更加清晰。

2、generate.h

1 #ifndef GENERATE_H_ 2 #define GENERATE_H_ 3 extern int g_num; 4 5 6 #include <iostream> 7 #include <ctime> 8 #include <cstdlib> 9 using namespace std; 10 11 extern ofstream out; 12 13 void Operator(int operatorNo) 14 { 15 switch (operatorNo) 16 { 17 case 1: out << " + "; break; 18 case 2: out << " - "; break; 19 case 3: out << " * "; break; 20 case 4: out << " / "; break; 21 case 5: out << "^2"; break; 22 case 6: out << ""; break; 23 case 7: out << "sin";break; 24 case 8: out << "cos";break; 25 case 9: out << "tan";break; 26 } 27 28 } 29 30 void GeneratePart(int operandNum, int g_grade) 31 { 32 int is_kuohao, kuohaoNum = 0, tmp1 = 0, tmp2 = 0, tmp3 = 0; 33 int juniorNum = 0, seniorNum = 0; 34 for (int j=0; j<operandNum-1; j++) 35 { 36 int operand = rand()%100 + 1; 37 int tmp4 = 0; 38 39 is_kuohao = rand()%2; 40 if (j != operandNum-2 && is_kuohao == 1 && kuohaoNum <= 3) 41 { 42 out << "("; 43 if (j == 0) tmp2 = 1; //用來排除(5+2)這種情況 44 kuohaoNum ++; 45 tmp1 = 1; //用來排除(5)這種情況 46 } 47 48 int choose = rand()%9 + 1; 49 if (g_grade > 1) 50 { 51 if (g_grade == 2 && choose == 6) 52 { 53 Operator(6); 54 juniorNum ++; 55 tmp4 ++; 56 } 57 else if (g_grade == 3 && choose > 6) 58 { 59 Operator(choose); 60 seniorNum ++; 61 tmp4 ++; 62 } 63 if (j != operandNum-2 && tmp4 != 0) 64 { 65 is_kuohao = rand()%2; 66 if (is_kuohao == 1 && kuohaoNum <= 3) 67 { 68 out << "("; 69 tmp3 = 1; 70 kuohaoNum ++; 71 } 72 } 73 } 74 75 out << operand; 76 77 if (g_grade ==2 && choose == 5) 78 { 79 Operator(5); 80 juniorNum ++; 81 } 82 83 if (tmp1 == 0 && tmp3 == 0 && kuohaoNum >= 1) 84 { 85 for (int k=0; k<kuohaoNum; k++) 86 { 87 int flag = rand()%2; 88 if (flag == 1) 89 { 90 out << ")"; 91 kuohaoNum --; 92 tmp2 = 2; 93 } 94 } 95 } 96 97 if (j==operandNum-2 && tmp2==1 && kuohaoNum>0) 98 { 99 for (int j=0; j<kuohaoNum; j++) 100 out << ")"; 101 kuohaoNum = 0; 102 } 103 104 int operatorNo = rand()%4 + 1; 105 Operator(operatorNo); 106 } 107 108 if ((g_grade==1) || (g_grade==2&&juniorNum!=0) || (g_grade==3&&seniorNum!=0)) out << rand()%100 + 1; 109 else if (g_grade == 2 && juniorNum == 0) 110 { 111 int chooseOper = rand()%2; 112 if (chooseOper == 0) out << "" << rand()%100 + 1; 113 else out << rand()%100 + 1 << "^2"; 114 } 115 else if (g_grade == 3 && seniorNum == 0) 116 { 117 int chooseOper = rand()%3 + 7; 118 Operator(chooseOper); 119 out << rand()%100 + 1; 120 } 121 122 if (kuohaoNum != 0) 123 { 124 for (int j=0; j<kuohaoNum; j++) 125 out << ")"; 126 kuohaoNum = 0; 127 } 128 out << " = "<< endl; 129 } 130 131 132 133 134 void GenerateAll(int g_num, int g_grade) 135 { 136 for (int i=0; i<g_num; i++) 137 { 138 out << i+1 << ". "; 139 140 if (g_grade == 1) 141 { 142 int operandNum = rand()%4 + 2; 143 GeneratePart(operandNum, g_grade); 144 } 145 146 else if (g_grade == 2) 147 { 148 int operandNum = rand()%5 + 1; 149 if (operandNum == 1) 150 { 151 int chooseOper = rand()%2; 152 if (chooseOper == 0) out << "" << rand()%100 + 1 << " = " << endl; 153 else out << rand()%100 + 1 << "^2 = " << endl; 154 } 155 else 156 { 157 GeneratePart(operandNum, g_grade); 158 } 159 } 160 161 else if (g_grade == 3) 162 { 163 int operandNum = rand()%5 + 1; 164 if (operandNum == 1) 165 { 166 int chooseOper = rand()%3; 167 if (chooseOper == 0) out << "sin"; 168 else if (chooseOper == 1) out << "cos"; 169 else out << "tan"; 170 out << rand()%100 + 1 << " = " << endl; 171 } 172 else 173 { 174 GeneratePart(operandNum, g_grade); 175 } 176 } 177 out << endl; 178 } 179 } 180 181 182 #endif /* GENERATE_H_ */

這個模塊主要作用:按需求文檔上的要求生成試卷(選擇生成運算符及括號)

優點:括號部分產生條理清晰,對于括號產生的條件限制考慮非常全面,比如(5),()前后需有運算符等。

缺點:一個子函數中變量過多,其中tmp4或許可以刪掉。代碼中注釋較少,一些變量旁可添加一些注釋,方便讀者閱讀代碼。

3、main.cpp

1 #include <iostream> 2 #include <fstream> 3 #include <ctime> 4 #include <time.h> 5 #include <stdio.h> 6 #include "generate.h" 7 #include "user.h" 8 9 int g_grade, g_num; 10 ofstream out; 11 12 int main() 13 { 14 UserData(); 15 16 cout << "請輸入題目數量(10-30)" << endl; 17 cin >> g_num; 18 while (g_num < 10 || g_num > 30) 19 { 20 cout << "請輸入正確數量" << endl; 21 cin >> g_num; 22 } 23 24 srand ((unsigned)time(NULL)); 25 26 time_t t = time(0); 27 char tmp[64]; 28 strftime( tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S.txt",localtime(&t) ); 29 //freopen(tmp,"w",stdout); 30 //GenerateAll(g_num, g_grade); 31 //fclose(stdout); 32 //freopen("CON", "w", stdout); 33 //freopen("CON", "r", stdin); 34 out.open(tmp); 35 GenerateAll(g_num, g_grade); 36 out.close(); 37 38 cout << "若需要切換類型, 輸入 切換為XX , 為小學、初中和高中三個選項中的一個" << endl; 39 string order; 40 while(1) 41 { 42 cin >> order; 43 int flag = 0; 44 if (order == "切換為小學") g_grade = 1; 45 else if (order == "切換為初中") g_grade = 2; 46 else if (order == "切換為高中") g_grade = 3; 47 else 48 { 49 cout << "請輸入小學、初中和高中三個選項中的一個" << endl; 50 flag = 1; 51 } 52 if (flag == 0) 53 { 54 cout << "準備生成"; 55 if (g_grade == 1) cout << "小學題目, 請輸入生成題目數量" << endl; 56 else if (g_grade == 2) cout << "中學題目, 請輸入生成題目數量" << endl; 57 else cout << "高中題目, 請輸入生成題目數量" << endl; 58 cin >> g_num; 59 if (g_num<10 || g_num>30) 60 { 61 cout << "請輸入正確數量" << endl; 62 cin >> g_num; 63 } 64 65 time_t t = time(0); 66 strftime( tmp, sizeof(tmp), "%Y-%m-%d-%H-%M-%S.txt",localtime(&t) ); 67 //freopen(tmp,"w",stdout); 68 //GenerateAll(g_num, g_grade); 69 //fclose(stdout); 70 //freopen("CON", "w", stdout); 71 //freopen("CON", "r", stdin); 72 out.open(tmp); 73 GenerateAll(g_num, g_grade); 74 out.close(); 75 } 76 } 77 return 0; 78 }

該模塊主要作用:設置出題題數和難度,以及最后文件的輸出。

優點:由于各模塊已經在頭文件中實現,所以主函數中代碼簡潔短小,條理清晰。

   同時,搭檔的變量的命名非常規范,嚴格按照老師給的代碼規范命名。

缺點:并不是所有用戶都要切換難度,還要考慮不切換難度的情況。同時,為了有更好的用戶體驗,界面上每次生成完試卷最好提示試卷完成生成。

運行截圖:

總結:

優點:代碼簡短,將各功能模塊化,條理清晰,命名及格式規范,每個模塊實現條件考慮嚴謹。

缺點:沒有實現向指定文件夾中生成試卷,沒有實現查重功能,輸入完成后,界面最好有提示,增強用戶體驗。

轉載于:https://www.cnblogs.com/ttyape/p/9708976.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的个人项目对方代码分析(随机生成不同难度试卷)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。