试卷生成程序优缺点分析

·程序说明

队友的个人项目完成了项目的所有功能要求。

他使用了如下函数来实现需求:

void kuohao(int B[] ,int numA);         //预定公式在括号中的位置

string Pschooltext(int A[],int numA);     //生成一条小学的试题

string Jschooltext(int A[],int numA);     //生成一条初中的试题

string Sschool(int A[],int numA);        //生成一条高中的试题

int searchtext(string a[],string strname);  //打开文件夹读取所有的历史试题并返回题目数量

string ltime();                       //获取当前时间

 ·优缺点分析

细看代码后发现了有些不错的处理:

1、首先是生成括号的函数,由于题目限定了操作数个数,所以生成括号函数的操作,他才用了一个特别的int型数组来记录该操作数左右方括号的情况,具体是:

int B[6];//记录括号的位置 ,1单(,2单),3((,4)),0代表没有括号

括号位置确定代码:

void kuohao(int B[] ,int numA){
	int k,n;
	if(numA<=2) k=0;
	else k=numA/2;
	n=rand()%(k+1);
	while(n>0)
	{
		int a,b;
		a=rand()%numA+1;
		b=rand()%(numA-a+1)+a;
		if(a==1 && b== numA)
		continue;
		else if(a!=b){
			if(B[a]==0 && B[b]==0){
				B[a]=1;
		        B[b]=2;
		        n--;
			}
			else if(B[a]==1 && B[b]==0){
				B[a]=3;
				B[b]=2;
				n--;
			}
			else if(B[a]==0 && B[b]==2){
				B[a]=1;
				B[b]=4;
				n--;
			}
		}

	}

}

对应下标就是第几个操作数,下标1就是第一个操作数,然后在函数中用随机函数模拟,并分好不同的情况,最后再生成运算式中加进去。

2、他在处理如何打开一个文件夹中的所有txt文件进行查重的时候,每生成一套卷只需要进行一次,因为第一次将所有的题目都存在一个string数组中,然后每生成一道题只需要和数组对比一次,之后没有重复的题目就放进数组中(数组设立最大上限),所以打开操作只需一次。

文件读取函数:

int searchtext(string a[],string strname){
	int i=0;
	string textname="F:\\输出文件\\"+strname+"\\*.txt";
    struct _finddata_t fileinfo;
    string in_name;
    long handle;
    if ((handle = _findfirst(textname.c_str(), &fileinfo)) == -1L)
    {
        cout << "没有找到匹配文件!" << endl;
        return 0;
    }
    else
    {
        in_name = "F:\\输出文件\\"+strname + "\\" + fileinfo.name;
        ifstream fin(in_name.c_str());
            if (!fin)
            {
             cerr << "open file error" << endl;
             exit(-1);
            }
            string str;
            while (getline(fin, str))
             {
              a[i]=str;
              i++;
             }
        while (!(_findnext(handle, &fileinfo)))
        {
        	in_name ="F:\\输出文件\\"+strname + "\\" + fileinfo.name;
        	ifstream fin1(in_name.c_str());
            if (!fin1)
            {
             cerr << "open file error" << endl;
             exit(-1);
            }
            string str;
            while (getline(fin1, str))
             {
              a[i]=str;
              i++;
             }
        }
        _findclose(handle);
    }
    for(int j=0;j<i;j++)
    {
    	if(a[j]!="")
    	a[j]=a[j].substr(3);
	}
    return i;
}

获取历史试题:

string a[10000];
int sum = searchtext(a,strname);

sum返回的是数组中存放题目的个数.

同时,我认为他的代码有以下几点不足之处:

1、他的代码有些冗长,其实在生成3中难度题目中的很多代码都可以写成一个函数进行重复调用

2、输出格式,不够美观,题号后面的“.”应该加个空格和题目分开

3、他的代码有个的BUG,就是假如随机生成的操作数如果在1到9之间,生成出来就是一个乱码的数:

产生Bug的代码:

char s1,s2;
if(A[i]/10!=0)
s1=A[i]/10+‘0‘;
s2=A[i]%10+‘0‘;
string S1,S2;S1=s1;
S2=s2;
number+=S1+S2;

Bug产生原因:

由于没有考虑char型没有初始的时候是随机一个乱码,当随机数是1到9中,s1就会没有被赋值,就会出现错误(该部分代码是将生成的随机数转化为string型)。

Bug截图:

后来经他本人debug,就把这个BUG很快地修正了;修正后代码:

char s1,s2;
string S1,S2;
s2=A[i]%10+‘0‘;
S2=s2;
if(A[i]/10!=0)
{
  s1=A[i]/10+‘0‘;
  S1=s1;
  number+=S1+S2;
}
else{
  number+=S2;
}

 

·程序运行结果

控制台界面:

输出文件:

原文地址:https://www.cnblogs.com/derzom/p/9709143.html

时间: 2024-08-29 17:06:57

试卷生成程序优缺点分析的相关文章

中小学自动试卷生成程序优缺点分析

一.项目的需求分析: 1.命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学.初中和高中三个选项中的一个.否则提示“请输入正确的用户名.密码”,重新输入用户名.密码: 2.登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学.初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题.每道

android 原生应用、Web应用、混合应用优缺点分析

最近开发几个项目,牵涉到android的几种开发模式.对于原生态开发.web 应用开发以及混合模式开发,本人认为并不是哪一种就是最好的,哪一种就是最差的,这个完全是根据自己的需求,选择一种合适的开发模式.他们同时具备自己的有点,同时也有自身的缺点,我们根据实际情况,取其中的优点,尽量避免掉缺点,才是最好的开发模式.下面,我们就一同看看,这三种开发模式,到底有什么区别. 一.原生应用 (也称本地开发 Native App) 你使用过微软PowerPoint 或者 Word吧?这些可直接在你电脑上运

数据库索引的优缺点分析

优点:创建索引可以大大提高系统的性能:第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义. 第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间. 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能. 缺点:增加索引也有许多不利的方面:第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增

ASP.NET常用数据绑定控件优缺点分析总结

ASP.NET常用数据绑定控件优缺点分析总结 本文的初衷在于对Asp.net常用数据绑定控件进行一个概览性的总结,主要分析各种数据绑定控件各自的优缺点,以便在实际的开发中选用合适的控件进行数据绑定,以提高开发效率. 因为这些数据绑定控件大部分都已经封装的很好了,稍微有一些基础的朋友都可以很容易的上手使用,所以本文不涉及具体控件的使用,只在于分析各自的优劣点,但是在下一篇文章里,我会主要讲一下ListBox.GridView.Repeater这三个数据绑定控件的“高效分页”,ListBox和Gri

三种Tomcat集群方式的优缺点分析

三种Tomcat集群方式的优缺点分析 2009-09-01 10:00 kit_lo kit_lo的博客 字号:T | T 本文对三种Tomcat集群方式的优缺点进行了分析.三种集群方式分别是:使用DNS轮询,使用Apache R-proxy方式,以及使用Apache mod_jk方式. AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统 Tomcat集群方式有三种,分别是: 1.使用DNS轮询. 2.使用Apache R-proxy方式. 3.使用Apache mod_jk方式

结对编程——队友代码的优缺点分析

一·项目的需求分析 需求文档中给出5个需求,第一个是用户的登录要求用户名和密码相匹配,并且有着初始的出题类型:需求二则限制题目的操作数和取值范围: 需求三要求我们输入题目数量,这里给出限定条件10-30个题目并且要求同一位老师的题目不能一样:需求四则要我们满足切换出题类型:需求五则 是对题目保存路径和文件的要求. 二·代码优缺点分析 main函数大体框架为:一个循环加一个if的判断语句来确定登陆对象,并且每一个登录对象都有一个唯一的标识,eg:张三1的标识为(0,1),再将其标 识传递给user

分布式缓存中间件优缺点分析(redis、memcache、ehcache)

分布式缓存中间件优缺点分析(redis.memcache.ehcache) 1. redis 优点: 1. 丰富的数据结构,支持字符串(strings).散列(hashes).列表(lists).集合 (sets).有序集合(sorted sets) 2. 主从同步,故障转移 集群 3. 持久化 缺点: 1. 单核,单线程,所以在存储海量数据的时候会极大的影响系统性能 2. memcache     优点: 1. 简单的key-value存储,memcache的key-value只支持Strin

中小学自动生成试卷优缺点分析

和个人项目相比,结对编程带给我们的是一个互相进步的过程. 通过对双方代码的解读,我们发现到了双方存在的优点和不足,这有助于我们加强对个人项目更加深入的理解,从而在优化和完善个人项目的基础上,能够更加全面便捷地实现结对编程项目. 个人需求主要是要求形成一个中小学数学卷子自动生成程序. 优点分析 1.在处理题目的时候用到了比较巧妙的思路,使得过程和函数的语言内容清晰简洁,容易理解,对于有些问题的理解有创新的想法. 2.写的代码结构清楚明了,在代码中关键的部分有关键的步骤,方便了读者的理解与认识. 3

对Quin同学的试卷自动生成程序代码分析

我的partner Quin同学使用Python语言编写的中小学试卷生成系统,在此我对他的劳动成果进行一个简单分析. 项目需求: 功能: 1.命令行输入用户名和密码,两者之间用空格隔开(程序预设小学.初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学.初中和高中三个选项中的一个.否则提示“请输入正确的用户名.密码”,重新输入用户名.密码: 2.登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录