收藏 分销(赏)

源程序阅读与调试课程设计报告--学生管理系统.doc

上传人:仙人****88 文档编号:9445425 上传时间:2025-03-26 格式:DOC 页数:17 大小:584.54KB 下载积分:10 金币
下载 相关 举报
源程序阅读与调试课程设计报告--学生管理系统.doc_第1页
第1页 / 共17页
源程序阅读与调试课程设计报告--学生管理系统.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
源程序阅读与调试 课程设计报告 题 目: 学生成绩管理系统 班 级: 统专软件1001班 小组成员: 常永恒 孙东升 吴春亮 李 强 完成时间: 2011年12月13日 目录 1 需求分析 1 2 概要设计 2 3 详细设计 3 3.1 文件合并 3 3.2 自动检索 3 3.3 数据排序 3 3.4 信息查询 3 4 代码设计 5 5 系统测试 11 5.1 黑盒测试——功能测试 11 5.2 边界值测试——健壮性测试 14 6 总结 15 源程序阅读与调试课程设计报告 1 需求分析 现有学生成绩信息文件1(1.txt),内容如下 姓名    学号   语文  数学   英语 张明明  01     67    78      82 李成友  02     78    91      88 张辉灿  03     68    82      56 王露    04     56    45      77 陈东明  05     67    38      47 ….      ..      ..     ..       … 学生成绩信息文件2(2.txt),内容如下: 姓名    学号   语文  数学   英语 陈果    31     57    68      82 李华明  32     88    90      68 张明东  33     48    42      56 李明国  34     50    45      87 陈道亮  35     47    58      77 ….      ..      ..     ..       … 试编写一管理系统,要求如下: 1) 实现对两个文件数据进行合并,生成新文件3.txt 2) 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt 3) 对合并后的文件3.txt中的数据按总分降序排序 4) 输入一个学生姓名后,能查找到此学生的信息并输出结果 5) 要求使用结构体,链或数组等实现上述要求. 6) 采用多种方法且算法正确者,可适当加分. 2 概要设计 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.chinese<60||stud.english<60||stud.math<60找出不及格的成绩; 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 信息查询 已知:文件3.txt、id、name、chinese、math、english。 求:输入一个学生姓名后,能查找到此学生的信息并输出结果 算法:1.读取3.txt; 2.从表的一端开始至尾端,顺序扫描线性表; 3.依次将线性表中的信息和输入的信息(姓名)进行比较; 4.若相等则查找成功,并输出该元素。 4 代码设计 #include<iostream> using namespace std; #define SIZE 100 /*存放学生数据的结构体*/ typedef struct { char name[10]; int id; int chinese; int math; int english; int sum; }Student; Student stud[SIZE]; int i; int sign=0,sign1=0,sign2=0,sign3=0; void Unitedfile() /*合并1.txt和2.txt为3.txt*/ { FILE *fp,*p; Student studd; 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.chinese,studd.math,studd.english ); } /*读取2.txt的数据进入结构体中,写入3.txt,继续读取直结束*/ fclose(fp); /*关闭文件2.txt*/ fclose(p); /*关闭文件3.txt*/ } void findout() /*抽取出三科成绩中有补考的学生并保存在一个新文件4.txt*/ { FILE *fp,*p; Student studd; 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.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*/ } void Selectsort() /*对合并后的文件3.txt中的数据按总分降序排序*/ { int j,k,max1,sum1,sum2,q; i=0; Student temp; 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].math,&stud[i].english )!=EOF) { i++; } /*从3.txt中读入数据进结构体数组stud中*/ fclose(fp); for(j=0;j<i;j++) /*对结构体数组中的数据进行选择排序*/ { /*每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序*/ max1=j; sum1=stud[j].math+stud[j].english+stud[j].chinese; for(k=j+1;k<i+1;k++) { sum2=stud[k].math+stud[k].english+stud[k].chinese; if(sum1<sum2) { 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<i;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*/ } void derectfindoutstudent() /*输入一个学生姓名,查找到此学生的信息并输出结果*/ { char NAME[30]; int flag=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<<"-------姓名-------学号-------语文-------数学-------英语-------总分--------"<<endl; cout<<" "<<stud[1].name<<" "<<stud[1].id<<" "; cout<<stud[1].chinese<<" "<<stud[1].math<<" "<<stud[1].english<<" "<<stud[1].sum<<endl; break; } } if(flag==0) cout<<"无此学生相关信息"<<endl; /*如无法找到,则显示"无此学生相关信息"*/ fclose(fp); /*关闭文件3.txt*/ } /*主程序*/ int main() { system("color 79"); /*背景为白色,字体为淡蓝色*/ int choice; while(1) { /*主菜单*/ if(sign3==0) { printf("-------------------------------学生成绩管理系统--------------------------------\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) { case 1: Unitedfile(); sign=1; cout<<"操作1成功!"<<endl; break; /*输入1,使用Unitedfile函数。并显示"操作1成功!"*/ case 2: if(sign==0) { cout<<"请执行操作1后再执行此项操作!"<<endl; break; } cout<<"操作2成功!"<<endl;; findout(); break; /*输入2,如果sign==0输出"请执行操作1后再执行此项操作!"。否则输出"操作2成功!"*/ case 3: if(sign==0) { cout<<"请执行操作1后再执行此项操作!"<<endl; break; } Selectsort(); cout<<"操作3成功!"<<endl; sign1=1; break; /*输入3,如果sign==0输出"请执行操作1后再执行此项操作!"。否则输出"操作3成功!"*/ case 4: while(1) { char c; cout<<"按姓名查找:"<<endl; derectfindoutstudent(); cout<<"继续查找请输入Y:"<<endl; cout<<"返回主菜单请输入N:"<<endl; cin>>c; /*输入4,启用derectfindoutstudent函数*/ if(c=='N'||c=='n')break;//N==n==c } system("cls"); /*清屏*/ sign3=0; break; case 5: exit(0); break; /*输入5,关闭程序*/ } } return 0; } 5 系统测试 5.1 黑盒测试——功能测试 图1 源文件1.txt 图2 源文件2.txt 图3 生成文件3.txt 图4 生成文件4.txt 图5 程序运行图(查找) 图6 程序运行图(不按顺序执行,进行提示) 图7 程序运行图(不按顺序执行,进行提示) 图8 程序运行图(合并,抽取补考的,排序) 图9 程序运行图(查找) 5.2 边界值测试——健壮性测试 没有1.txt和2.txt 出现错误 图10 错误提示 6 总结 通过了这次的课程设计,加深了我们对程序的理解,特别是对一个大程序,来怎样进行对它的组织和编写,该课程已经学完了。到了最后阶段,有了这样的课程设计,感觉是挺好的,主要是我们加强对一个大程序的宏观概念。 可是光凭自己写的话,还是有一定的难度,对此我们还是借鉴了网络上的一些资料,这说明我们在编程方面还有一定的欠缺。要是碰到一个大程序的话,一开始不知如何下手,只有找多方面的资料,才能把它进行完善。 总的来说,这次的课程设计,充分锻炼了我们的动手能力及学到一些课程内其他没有学到过的知识,感觉收获是颇多的!通过了这次的实践,相信以后学起来会更加的得心应手! 第15页 共17页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服