源程序阅读与调试课程设计报告学生管理系统.docx
- 文档编号:23371366
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:22
- 大小:694.25KB
源程序阅读与调试课程设计报告学生管理系统.docx
《源程序阅读与调试课程设计报告学生管理系统.docx》由会员分享,可在线阅读,更多相关《源程序阅读与调试课程设计报告学生管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
源程序阅读与调试课程设计报告学生管理系统
源程序阅读与调试课程设计报告
题
班
目:
级:
学生成绩管理系统
统专软件1001班
小组成员:
常永恒
孙东升
吴春亮
李
强
完成时间:
2011年12月13日
1
2
3
需求分析.............................................................1
概要设计............................................................2
详细设计.............................................................3
3.1
3.2
3.3
3.4
文件合并.......................................................3
自动检索.......................................................3
数据排序.......................................................3
信息查询.......................................................3
4
5
代码设计.............................................................5
系统测试............................................................11
5.1
5.2
黑盒测试——功能测试..........................................11
边界值测试——健壮性测试......................................14
6
总结................................................................15
源程序阅读与调试课程设计报告
1
需求分析
现有学生成绩信息文件1(1.txt),内容如下
姓名
学号
语文
数学
英语
张明明01677882
李成友02789188
张辉灿03688256
王露04564577
陈东明05673847
….......…
学生成绩信息文件2(2.txt),内容如下:
姓名
学号
语文
数学
英语
陈果31576882
李华明32889068
张明东33484256
李明国34504587
陈道亮35475877
….......…
试编写一管理系统,要求如下:
1)实现对两个文件数据进行合并,生成新文件3.txt
2)抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)对合并后的文件3.txt中的数据按总分降序排序
4)输入一个学生姓名后,能查找到此学生的信息并输出结果5)要求使用结构体,链或数组等实现上述要求.
6)采用多种方法且算法正确者,可适当加分.
第1页共17页
源程序阅读与调试课程设计报告
2
概要设计
derectfindoutst
第2页共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.3
自动检索
已知:
文件3.txt、id、name、chinese、math、english。
求:
chinese、math、english中小于60的成绩,并显示名字、学号。
算法:
1.读取3.txt;
2.创建4.txt;
3.读取3.txt里面的成绩,应用
studd.chinese<60||stud.english<60||stud.math<60找出不及格的成绩;4.将不及格成绩写入4.txt;
5.关闭3.txt;4.txt。
数据排序
已知:
文件3txt、id、name、chinese、math、english。
求:
各个学生的总分并按照降序排序
算法:
1.读取3.txt;
2.求出文件3.txt各个学生的总分;
3.用选择排序的方法将学生的总分进行排序;
4.关闭文件3.txt。
第3页共17页
3.4
源程序阅读与调试课程设计报告
信息查询
已知:
文件3.txt、id、name、chinese、math、english。
求:
输入一个学生姓名后,能查找到此学生的信息并输出结果算法:
1.读取3.txt;
2.从表的一端开始至尾端,顺序扫描线性表;
3.依次将线性表中的信息和输入的信息(姓名)进行比较;4.若相等则查找成功,并输出该元素。
第4页共17页
源程序阅读与调试课程设计报告
4
代码设计
#include
usingnamespacestd;
#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,&s
tudd.english)!
=EOF)
{fprintf(p,"%-6s%2d%d%d%d\n",studd.name,studd.id,studd.chinese,studd.math,studd.english);
}
写入3.txt,继续读取直结束*/
/*读取1.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,&s
tudd.english)!
=EOF)
{fprintf(p,"%-6s%2d%d%d%d\n",studd.name,studd.id,studd.chinese,studd.math,studd.english);
}/*读取2.txt的数据进入结构体中,
第5页共17页
源程序阅读与调试课程设计报告
写入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,&s
tudd.english)!
=EOF)
{
if(studd.chinese<60||studd.english<60||studd.math<60)
{
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");/*跳过一行字符串*/while(fscanf(fp,"%s%d%d%d%d",stud[i].name,&stud[i].id,&stud[i].chinese,&stud[i].m
ath,&stud[i].english)!
=EOF)
第6页共17页
{
i++;
}
stud中*/
源程序阅读与调试课程设计报告
/*从3.txt中读入数据进结构体数组
fclose(fp);
for(j=0;j
*/
{
/*每趟是选出一个最值确定其在结果序
列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。
可进行降序排序*/
max1=j;
sum1=stud[j].math+stud[j].english+stud[j].chinese;
for(k=j+1;k
{
sum2=stud[k].math+stud[k].english+stud[k].chinese;
if(sum1 { 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;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); } fclose(fp);/*关闭文件3.txt*/ } 第7页共17页 源程序阅读与调试课程设计报告 voidderectfindoutstudent()/*输入一个学生姓名,查找到此学生的信息并输出结果*/ { charNAME[30]; intflag=0; FILE*fp; fp=fopen("3.txt","r");/*以读的方式打开3.txt*/ cin>>NAME; 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<<"-------姓名-------学号-------语文-------数学-------英语-------总 分--------"< cout<<""< cout< "< break; } } if(flag==0) cout<<"无此学生相关信息"< fclose(fp);/*关闭文件3.txt*/ } /*主程序*/ intmain() { system("color79");/*背景为白色,字体为淡蓝色*/ intchoice; while (1) { /*主菜单*/ if(sign3==0) { printf("-------------------------------学生成绩管理系统---------------- 第8页共17页 源程序阅读与调试课程设计报告 ----------------\n"); printf("1.合并1.txt和2.txt为3.txt\n"); printf("2.抽取出三科成绩中有补考的学生并保存在一个新文件4.txt\n");printf("3.对合并后的文件3.txt中的数据按总分降序排序\n"); printf("4.输入一个学生姓名,查找到此学生的信息并输出结果\n");printf("5.退出\n"); printf("请选择(1-5): "); } sign3=1; scanf("%d",&choice);/*输入功能数字,颜色按照定义颜色*/switch(choice) { case1: Unitedfile(); sign=1; cout<<"操作1成功! "< break;/*输入1,使用Unitedfile函数。 并显示 "操作1成功! "*/ case2: if(sign==0) { cout<<"请执行操作1后再执行此项操作! "< break; } cout<<"操作2成功! "< findout(); break;/*输入2,如果sign==0输出"请执行操作 1后再执行此项操作! "。 否则输出"操作2成功! "*/ case3: if(sign==0) { cout<<"请执行操作1后再执行此项操作! "< break; } Selectsort(); cout<<"操作3成功! "< sign1=1; break;/*输入3,如果sign==0输出"请执行操作 第9页共17页 源程序阅读与调试课程设计报告 1后再执行此项操作! "。 否则输出"操作3成功! "*/ case4: while (1) { charc; cout<<"按姓名查找: "< derectfindoutstudent(); cout<<"继续查找请输入Y: "< cout<<"返回主菜单请输入N: "< cin>>c;/*输入4,启用derectfindoutstudent函数*/if(c=='N'||c=='n')break;//N==n==c } system("cls");/*清屏*/ sign3=0; break; case5: exit(0); break;/*输入5,关闭程序*/ } } return0; } 第10页共17页 源程序阅读与调试课程设计报告 5 系统测试 5.1 黑盒测试——功能测试 图1 源文件1.txt 图2 源文件2.txt 图3 生成文件3.txt 图4 生成文件4.txt 第11页共17页 源程序阅读与调试课程设计报告 图5 程序运行图(查找) 图6 程序运行图(不按顺序执行,进行提示) 第12页共17页 源程序阅读与调试课程设计报告 图7 程序运行图(不按顺序执行,进行提示) 图8 程序运行图(合并,抽取补考的,排序) 第13页共17页 源程序阅读与调试课程设计报告 图9 程序运行图(查找) 5.2 边界值测试——健壮性测试 没有1.txt和2.txt 出现错误 图10 错误提示 第14页共17页 源程序阅读与调试课程设计报告 6 总结 通过了这次的课程设计,加深了我们对程序的理解,特别是对一个大程序,来 怎样进行对它的组织和编写,该课程已经学完了。 到了最后阶段,有了这样的课程设计,感觉是挺好的,主要是我们加强对一个大程序的宏观概念。 可是光凭自己写的话,还是有一定的难度,对此我们还是借鉴了网络上的一些 资料,这说明我们在编程方面还有一定的欠缺。 要是碰到一个大程序的话,一开始不知如何下手,只有找多方面的资料,才能把它进行完善。 总的来说,这次的课程设计,充分锻炼了我们的动手能力及学到一些课程内其 他没有学到过的知识,感觉收获是颇多的! 通过了这次的实践,相信以后学起来会更加的得心应手! 第15页共17页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 源程序 阅读 调试 课程设计 报告 学生 管理 系统