优缺点分析——小初高数学试卷生成程序(C++)

1. 程序结果(源码于文末)

如上图所示该程序可实现用户登录,并可根据不同的用户类别生成不同的类型的数学题目,并且在当前目录生成yyyy-MM-dd-HH-mm-ss.txt 文件(空文件)。

 

2. 程序框架

主要函数

int x_sumbol(int x)        //小学题目运算符选择

int x_question()        //小学题目生成

int c_sumbol(int x)        //中学题目运算符选择

int c_question()        //中学题目生成

int g_sumbol(int x)        //高中题目运算符选择

int g_question()        //高中题目选择

主函数调用

3. 优点

该程序脉络清晰,程序分为各类型题目生成模块、账户设置模块、账户验证模块及文件生成模块。其中题目生成模块独立于主函数,其余模块在主函数顺序执行。

题目生成模块如x_sumbol(int x), x_question() 均采用随机数生成操作数和操作符,并通过if-else分支结构进行选择,结构清晰易理解。

主函数在设置好用户名后开始以while循环检测用户名及密码的正确性,接着在分支结构中选择相应程序进行执行。

总的来说,该程序逻辑清晰,if-else分支结构以及主函数外模块调用增加程序的可读性。

 

4. 不足

该程序首先有几点需求没有满足,如切换用户、将题目输出到指定文件夹中的txt文件以及不能持续生成多套试卷。

其次,该程序可以进一步对象化,比如可以将用户验证程序模块化。

 

5. 附源码

 

  1 #include<iostream>
  2 #include<cstdlib>
  3 #include<time.h>
  4 #include<fstream>
  5 using namespace std;
  6 
  7 int x_sumbol(int x){//小学的符号 
  8     x=rand()%4;
  9     if(x==0){
 10         cout<<"+";
 11     }
 12     
 13     else if(x==1){
 14         cout<<"-";
 15     }
 16     
 17     else if(x==2){
 18         cout<<"*";
 19     }
 20     
 21     else if(x==3){
 22         cout<<"/";
 23     }
 24     
 25 }
 26 
 27 int x_question(){//小学的题目 
 28     int g_oper;
 29     g_oper=rand()%5+1;
 30     int x=rand()%4;
 31     int a=rand()%100+1;
 32     int b=rand()%100+1;
 33     int c=rand()%100+1;
 34     int d=rand()%100+1;
 35     int e=rand()%100+1;
 36     
 37     if(g_oper==1){
 38         cout<<a<<endl;
 39     }    
 40     
 41     else if(g_oper==2){
 42         cout<<a;
 43         x_sumbol(x);
 44         cout<<b<<endl;
 45     }
 46     
 47     else if(g_oper==3){
 48         cout<<a;
 49         x_sumbol(x);
 50         cout<<b;
 51         x_sumbol(x);
 52         cout<<c<<endl;
 53     }
 54     
 55     else if(g_oper==4){
 56         cout<<a;
 57         x_sumbol(x);
 58         cout<<b;
 59         x_sumbol(x);
 60         cout<<c;
 61         x_sumbol(x);
 62         cout<<d<<endl;
 63     }
 64     
 65     else if(g_oper==5){
 66         cout<<a;
 67         x_sumbol(x);
 68         cout<<b;
 69         x_sumbol(x);
 70         cout<<c;
 71         x_sumbol(x);
 72         cout<<d;
 73         x_sumbol(x);
 74         cout<<e<<endl;
 75     }
 76 }
 77 
 78 int c_sumbol(int x){//初中的符号 
 79     x=rand()%4;
 80     if(x==0){
 81         cout<<"+";
 82     }
 83     
 84     else if(x==1){
 85         cout<<"-";
 86     }
 87     
 88     else if(x==2){
 89         cout<<"*";
 90     }
 91     
 92     else if(x==3){
 93         cout<<"/";
 94     }
 95     
 96 }
 97 
 98 int c_question(){//初中的题目,括号里的是开根或平方 
 99     int g_oper;
100     g_oper=rand()%5+1;
101     int x=rand()%4;
102     int a=rand()%100+1;
103     int b=rand()%100+1;
104     int c=rand()%100+1;
105     int d=rand()%100+1;
106     int e=rand()%100+1;
107     
108     if(g_oper==1){
109         cout<<a<<"(1/2)"<<endl;
110     }    
111     
112     else if(g_oper==2){
113         cout<<a<<"(2)";
114         c_sumbol(x);
115         cout<<b<<endl;
116     }
117     
118     else if(g_oper==3){
119         cout<<a;
120         c_sumbol(x);
121         cout<<b<<"(2)";
122         c_sumbol(x);
123         cout<<c<<"(1/2)"<<endl;
124     }
125     
126     else if(g_oper==4){
127         cout<<a<<"(2)";
128         c_sumbol(x);
129         cout<<b;
130         c_sumbol(x);
131         cout<<c<<"(2)";
132         c_sumbol(x);
133         cout<<d<<"(1/2)"<<endl;
134     }
135     
136     else if(g_oper==5){
137         cout<<a;
138         c_sumbol(x);
139         cout<<b<<"(1/2)";
140         c_sumbol(x);
141         cout<<c;
142         c_sumbol(x);
143         cout<<d<<"(2)";
144         c_sumbol(x);
145         cout<<e<<endl;
146     }
147 }
148 
149 int g_sumbol(int x){//高中的符号 
150     x=rand()%4;
151     if(x==0){
152         cout<<"+";
153     }
154     
155     else if(x==1){
156         cout<<"-";
157     }
158     
159     else if(x==2){
160         cout<<"*";
161     }
162     
163     else if(x==3){
164         cout<<"/";
165     }
166     
167 }
168 
169 int g_question(){//高中的题目 
170     int g_oper;
171     g_oper=rand()%5+1;
172     int x=rand()%4;
173     int a=rand()%100+1;
174     int b=rand()%100+1;
175     int c=rand()%100+1;
176     int d=rand()%100+1;
177     int e=rand()%100+1;
178     
179     if(g_oper==1){
180         cout<<"sin("<<a<<")"<<endl;
181     }    
182     
183     else if(g_oper==2){
184         cout<<a;
185         g_sumbol(x);
186         cout<<"tan("<<b<<")"<<endl;
187     }
188     
189     else if(g_oper==3){
190         cout<<a<<"(2)";
191         g_sumbol(x);
192         cout<<b;
193         g_sumbol(x);
194         cout<<"sin("<<c<<")"<<endl;
195     }
196     
197     else if(g_oper==4){
198         cout<<"tan("<<a<<")";
199         g_sumbol(x);
200         cout<<b;
201         g_sumbol(x);
202         cout<<c<<"(1/2)";
203         g_sumbol(x);
204         cout<<"sin("<<d<<")"<<endl;
205     }
206     
207     else if(g_oper==5){
208         cout<<a;
209         g_sumbol(x);
210         cout<<"cos("<<b<<")";
211         g_sumbol(x);
212         cout<<c<<"(2)";
213         g_sumbol(x);
214         cout<<"tan("<<d<<"";
215         g_sumbol(x);
216         cout<<e<<"(1/3)"<<endl;
217     }
218 }
219 
220 int main(){
221     string acc;
222     int pass;
223     string x_a="张三1"; 
224     string x_b="张三2";
225     string x_c="张三3";
226     string c_a="李四1";
227     string c_b="李四2";
228     string c_c="李四3";
229     string g_a="王五1";
230     string g_b="王五2";
231     string g_c="王五3";
232     int g_num;
233     
234     do{
235         cout<<"请输入账户、密码";
236         cin>>acc>>pass;
237     }while(((acc!=x_a)&&(acc!=x_b)&&(acc!=x_c)&&(acc!=c_a)&&(acc!=c_b)&&(acc!=c_c)&&(acc!=g_a)&&(acc!=g_b)&&(acc!=g_c))||(pass!=123));
238     
239     if(((acc==x_a)||(acc==x_b)||(acc==x_c))&&(pass==123)){ 
240         cout<<"当前选择为小学出题"<<endl;
241         cout<<"准备生成小学数学题目,请输入生成题目数量:"<<endl;
242         cin>>g_num;
243         for(int i=0;i<g_num;i++){
244         x_question();
245         cout<<endl;
246     }
247     } 
248     
249     else if(((acc==c_a)||(acc==c_b)||(acc==c_c))&&(pass==123)){ 
250         cout<<"当前选择为初中出题"<<endl;
251         cout<<"准备生成初中数学题目,请输入生成题目数量:"<<endl;
252         cin>>g_num;
253         for(int i=0;i<g_num;i++){
254         c_question();
255         cout<<endl;
256     }
257     }
258     
259     else if(((acc==g_a)||(acc==g_b)||(acc==g_c))&&(pass==123)){ 
260         cout<<"当前选择为高中出题"<<endl;
261         cout<<"准备生成高中数学题目,请输入生成题目数量:"<<endl;
262         cin>>g_num;
263         for(int i=0;i<g_num;i++){
264         g_question();
265         cout<<endl;
266     }
267     } 
268     
269     else{
270         cout<<"请输入正确的用户名、密码"; 
271     } 
272     
273     time_t nowtime = time(NULL);
274     struct tm *p;
275     p = gmtime(&nowtime);
276  
277     char filename[256] = {0};
278     char timeinfo[256] = {0};
279     sprintf(filename,"%d-%d-%d-%d-%d-%d.txt",1900+p->tm_year,1+p->tm_mon,p->tm_mday,8+p->tm_hour,p->tm_min);
280     sprintf(timeinfo,"%d/%d/%d %d:%02d.txt\n",1900+p->tm_year,1+p->tm_mon,p->tm_mday,8+p->tm_hour,p->tm_min);
281  
282     ofstream out(filename);
283     
284     return 0;
285 } 

 

posted @ 2018-09-26 17:04  汪庆  阅读(503)  评论(0编辑  收藏  举报