源程序阅读与调试课程设计报告题目:学生成绩管理系统班级:统专软件1001班小组成员:常永恒孙东升吴春亮李强完成时间:2011年12月13日目录1需求分析............................................................12概要设计............................................................23详细设计............................................................33.1文件合并.......................................................33.2自动检索.......................................................33.3数据排序.......................................................33.4信息查询.......................................................34代码设计............................................................55系统测试...........................................................115.1黑盒测试——功能测试..........................................115.2边界值测试——健壮性测试......................................146总结...............................................................15源程序阅读与调试课程设计报告第1页共17页1需求分析现有学生成绩信息文件1(1.txt),内容如下姓名学号语文数学英语张明明01677882李成友02789188张辉灿03688256王露04564577陈东明05673847….......…学生成绩信息文件2(2.txt),内容如下:姓名学号语文数学英语陈果31576882李华明32889068张明东33484256李明国34504587陈道亮35475877….......…试编写一管理系统,要求如下:1)实现对两个文件数据进行合并,生成新文件3.txt2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)对合并后的文件3.txt中的数据按总分降序排序4)输入一个学生姓名后,能查找到此学生的信息并输出结果5)要求使用结构体,链或数组等实现上述要求.6)采用多种方法且算法正确者,可适当加分.源程序阅读与调试课程设计报告第2页共17页2概要设计学生成绩管理系统数据合并自动检索数据排序信息查询姓名查找选择排序main()主函数Unitedfile()合并findout()检索Selectsort()排序derectfindoutstudent()查询源程序阅读与调试课程设计报告第3页共17页3详细设计3.1文件合并已知:文件1.txt、文件2.txt、id、name、chinese、math、english。求:调用函数来实现1.txt和2.txt合并为新生成文件3.txt算法:1.函数以读的方式打开1.txt文件和2.txt文件,以写的方式打开3.txt文件;2.从1.txt读入一个数据并写入3.txt文件,直到遇到1.txt文件结束;3.用上述方式把数据写入3.txt直到遇到2.txt文件结束;4.关闭1.txt,2.txt,3.txt文件,实现对于文件的合并。3.2自动检索已知:文件3.txt、id、name、chinese、math、english。求:chinese、math、english中小于60的成绩,并显示名字、学号。算法:1.读取3.txt;2.创建4.txt;3.读取3.txt里面的成绩,应用studd.chinese60||stud.english60||stud.math60找出不及格的成绩;4.将不及格成绩写入4.txt;5.关闭3.txt;4.txt。3.3数据排序已知:文件3txt、id、name、chinese、math、english。求:各个学生的总分并按照降序排序算法:1.读取3.txt;2.求出文件3.txt各个学生的总分;3.用选择排序的方法将学生的总分进行排序;4.关闭文件3.txt。3.4信息查询源程序阅读与调试课程设计报告第4页共17页已知:文件3.txt、id、name、chinese、math、english。求:输入一个学生姓名后,能查找到此学生的信息并输出结果算法:1.读取3.txt;2.从表的一端开始至尾端,顺序扫描线性表;3.依次将线性表中的信息和输入的信息(姓名)进行比较;4.若相等则查找成功,并输出该元素。源程序阅读与调试课程设计报告第5页共17页4代码设计#includeiostreamusingnamespacestd;#defineSIZE100/*存放学生数据的结构体*/typedefstruct{charname[10];intid;intchinese;intmath;intenglish;intsum;}Student;Studentstud[SIZE];inti;intsign=0,sign1=0,sign2=0,sign3=0;voidUnitedfile()/*合并1.txt和2.txt为3.txt*/{FILE*fp,*p;Studentstudd;fp=fopen(1.txt,r);/*以读的方式打开1.txt*/p=fopen(3.txt,w);/*以写的方式打开3.txt*/fscanf(fp,%*[^\n]%*c);/*跳过一行字符串*/fprintf(p,姓名学号语文数学英语\n);while(fscanf(fp,%s%d%d%d%d,studd.name,&studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF){fprintf(p,%-6s%2d%d%d%d\n,studd.name,studd.id,studd.chinese,studd.math,studd.english);}/*读取1.txt的数据进入结构体中,写入3.txt,继续读取直结束*/fclose(fp);/*关闭文件1.txt*/fp=fopen(2.txt,r);/*以写的方式打开2.txt*/fscanf(fp,%*[^\n]%*c);/*跳过一行字符串*/while(fscanf(fp,%s%d%d%d%d,studd.name,&studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF){fprintf(p,%-6s%2d%d%d%d\n,studd.name,studd.id,studd.chines源程序阅读与调试课程设计报告第6页共17页e,studd.math,studd.english);}/*读取2.txt的数据进入结构体中,写入3.txt,继续读取直结束*/fclose(fp);/*关闭文件2.txt*/fclose(p);/*关闭文件3.txt*/}voidfindout()/*抽取出三科成绩中有补考的学生并保存在一个新文件4.txt*/{FILE*fp,*p;Studentstudd;fp=fopen(3.txt,r);/*以读的方式打开3.txt*/p=fopen(4.txt,w);/*以写的方式打开4.txt*/fscanf(fp,%*[^\n]%*c);/*跳过一行字符串*/fprintf(p,姓名学号语文数学英语\n);while(fscanf(fp,%s%d%d%d%d,studd.name,&studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF){if(studd.chinese60||studd.english60||studd.math60){fprintf(p,%-6s%2d%d%d%d\n,studd.name,studd.id,studd.chinese,studd.math,studd.english);}}/*从3.txt中读入学生数据进结构体,判断是否有不及格的课程,如果有,则写入文件4.txt中*/fclose(fp);/*关闭文件3.txt*/fclose(p);/*关闭文件4.txt*/}voidSelectsort()/*对合并后的文件3.txt中的数据按总分降序排序*/{intj,k,max1,sum1,sum2,q;i=0;Studenttemp;FILE*fp;fp=fopen(3.txt,r);/*以读的方式打开3.txt*/i=0;fscanf(fp,%*[^\n]%*c);/*跳过一行字符串*/源程序阅读与调试课程设计报告第7页共17页while(fscanf(fp,%s%d%d%d%d,stud[i].name,&stud[i].id,&stud[i].chinese,&stud[i].math,&stud[i].english)!=EOF){i++;}/*从3.txt中读入数据进结构体数组stud中*/fclose(fp);for(j=0;ji;j++)/*对结构体数组中的数据进行选择排序*/{/*每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序*/max1=j;sum1=stud[j].math+stud[j].english+stud[j].chinese;for(k=j+1;ki+1;k++){sum2=stud[k].math+stud[k].english+stud[k].chinese;if(sum1sum2){max1=k;sum1=sum2;}}if(max1!=j){temp=stud[max1];stud[max1]=stud[j];stud[j]=temp;}stud[j].sum=sum1;}fp=fopen(3.txt,w);/*将排序后的数据写入3.txt中*/fprintf(fp,姓名学号语文数学英语总分\n);for(q=0;qi;q++){fprintf(fp,%-6s%2d%d%d%d%d\n,stud[q].name,stud[q].id,stud[q].chinese,stud[q].math,stud[q].english,stud[q].sum);}源程序阅读与调试课程设计报告第8页共17页fclose(fp);/*关闭文件3.txt*/}voidderectfindoutstudent()/*输入一个学生姓名,查找到此学生的信息并输出结果*/{charNAME[30];intflag=0;FILE*fp;fp=fopen(3.txt,r);/*以读的方式打开3.txt*/cinNAME;while(fscanf(fp,%s%d%d%d%d%d,stud[1].name,&stud[1].id,&stud[1].chinese,&stud[1].math,&stud[1].english,&stud[1].sum)!=EOF){if(strcmp(stud[1].name,NAME)==0)/*如果输入的姓名达到要求*/{/*输出显示其相对应的信息*/flag=1;cout-------姓名-------学号-------语文-------数学-------英语-------总分--------endl;coutstud[1].n