版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一、 需求分析 ················································
2、183;··········1二、 概要设计 ······································
3、;·····················11、 系统功能组成框图···························
4、;·························12、 数据结构设计·······················&
5、#183;································23、 模块说明················
6、;············································2三、 详细设计····
7、83;·················································
8、83;····21、 模块设计代码············································
9、;···········22、 程序详细代码·····································&
10、#183;·················33、 函数的调用······························
11、3;··························11四、 调试分析······················&
12、#183;····································11五、 用户手册···········
13、3;···············································11六、 测试数据·&
14、#183;·················································&
15、#183;·······15七、 附件·········································
16、······················16八、 心得体会··························
17、83;································16学生成绩管理系统一、需求分析1、此程序里包含着多个属性,所以类型为结构体类型2、程序内的对象调入和调出都需循环体类型的文件操作实现3、学生成绩的信息修改、插入、删除都需保存,而保存需进行文件的读写操作4、排
18、序操作可采用冒泡排序和选择法排序5、主函数中根据不同选择执行不同操作可通过“多分支选择语句switch”实现二、概要设计学生成绩管理系统1系统功能组成框图输入系统修改系统输出系统删除系统插入系统按学号查询系统升序按姓名降序按学号排序系统升序按总分降序2数据结构设计成绩管理系统为结构体struct 结构体名定义名字的长度,学号的长度定义性别三门课程的成绩总分平均分3模块说明1、每一条记录包括一个学生的学号、姓名、性别、3门成绩、总分、平均成绩。2、输入功能:可以一次完成规定数字记录的输入。3、输出功能:完成全部学生记录的显示。4、插入功能:按学生的学号、姓名、性别、三门课程成绩、总分、平均分插入
19、学生信息。5、修改功能:选择学生进行修改6、排序功能:按学生总分进行升降排序。7、查找功能:完成按姓名或者学号查找学生记录,并显示。8、删除功能:选择学生的学号或者名字进行核对,确定之后删除三、 详细设计1、模块设计代码 input( )/*输入模块*/ output( )/*输出模块*/ search( )/*查询模块*/ modify( )/*修改模块*/ delete( )/*删除模块*/ insert( )/*插入模块*/ sort()/*排序模块*/2、程序详细代码#include <stdio.h> /*头文件(源文件)*/struct stu /*定义一个结构体用来存
20、放学生学号、三门课成绩、总分及平均成绩*/char num10; /*学号长度*/ char name10; /*姓名长度*/char sex; /*性别类型*/ int score3; /*三门课程类型*/* float sum; /*总分类型*/ float ave; /*平均分类型*/student55; int n=3; /*定义n=3*/main() /*主函数*/char ch; /*定义类型*/while(1) /*循环(死循环)主界面*/system("cls");printf("nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn&qu
21、ot;);clrscr(); printf("*n");printf(" welcome to the student's management system n "); printf("*n");printf(" * * n"); printf(" * * n"); printf(" * * n"); printf(" *1:input*n"); printf(" *2:output*n"); printf(" *3
22、:search*n"); printf(" *4:delete*n"); printf(" *5:insert*n"); printf(" *6:modify* n "); printf(" *7:sort* n"); printf(" *8:exit* n"); printf(" * n"); printf(" * n"); printf(" * n"); printf(" * n"); printf(&
23、quot; *"n); printf("nntt please input the option:n"); ch=getchar(); switch(ch) case'1': input();break; case'2': output();break; case'3': search();break; case'4': delete();break; case'5': insert();break; case'6': modify();break; case'
24、7': sort();break; case'8': exit(0);input() /*输入*/file *fp; /*定义指针 文件*/int i,j; /*定义i j*/if(fp=fopen("stu.dat","w+")=null) /*若文件打不开*/printf("cannot open the file"); /*显示cannot open the file */exit(0); /*退出*/printf("please input the student's imformat
25、ion:n"); /*显示“请输入学生信息”*/for(i=0;i<n;i+) /*从0开始,i<3 一次次叠加*/printf("the %d",i+1); /*输出第几个学生*/ printf("the number:"); /*输出学号*/ scanf("%s",studenti.num); /*输入这个学生的学号*/ printf("n the name:"); /*输出学生姓名*/ scanf("%s",); /*输入这个学生的姓名*/
26、printf("n the sex: "); /*输出性别*/ scanf(" %c",&studenti.sex); /*输入这个学生的性别*/ printf("n the 3 score:"); /*输出3门科目的分数*/ studenti.sum=0; /*定义这个学生刚开始的总分为0*/ for(j=0;j<3;j+) /*j从0开始,j<3,一次次叠加*/ printf("the score %d :",j+1); /*输出科目的分数*/ scanf("%d",&a
27、mp;studenti.scorej); /*输入这个学生的学号和科目*/ studenti.sum+=studenti.scorej; /*学生的总分,sum+的意思为从0开始叠加*/ studenti.ave=studenti.sum/3.0; /*学生的平均分*/ fwrite(student,sizeof(struct stu),n,fp); /*将这个学生的信息写入指针文件中*/getch();fclose(fp); /*关闭文件*/output() /*输出文件*/file *fp; /*定义指针 文件*/ int i; /*定义i */ if(fp=fopen("stu
28、.dat","r")=null) /*若文件打不开*/printf("cannot open the file"); /*显示cannot open the file */ exit(0); /*退出*/ n=0; while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+; /*循环,每读取时都为一次*/ printf("num name sex score1 score2 score3 sum ave n"); /*若读取成功则输出学生的学号姓名性别 123科目成绩
29、总分平均分*/ for(i=0;i<n;i+) printf("%st%st%ct%dt%dt%dt%ft%fn",studenti.num,, studenti.sex,studenti.score0,studenti.score1,studenti.score2, studenti.sum,studenti.ave); /*输出学号,姓名,性别,成绩,成绩,成绩,总分,平均分*/ fclose(fp); /*关闭文件*/ getch(); insert() /*插入*/ file *fp; /*定义指针文件*/int i,j,m,x; /
30、*定义i,j,m,x*/if(fp=fopen("stu.dat","ab+")=null) /*若文件打不开*/printf("cannot open the file"); /*显示cannot open the file */ exit(0);/*退出*/n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+; /*循环,每读取时都为一次*/printf("please input the the count:n"); /*请输入数字*/sca
31、nf("%d",&m); /*输入增加的数目*/printf("please input the student's information:n"); /*请输入插入学生的信息*/for(i=n;i<n+m;i+) printf("the %d",i+1); /*输出一项*/ printf("the number:"); /*输出数字*/ scanf("%s",studenti.num); /*输入插入学生的学号*/ printf("nthe name:"
32、;); /*学生姓名*/ scanf("%s",); /*输入插入学生的姓名*/ printf("n the sex: "); /*学生性别*/ scanf( " %c",&studenti.sex); /*输入插入学生的性别*/ printf("n the 3 score:"); /*三门课程的成绩*/ studenti.sum=0;/*总分初始为0*/ for(j=0;j<3;j+) printf("the score %d :",j+1);/*课程的
33、成绩累加*/ scanf("%d",&studenti.scorej); /*输入插入学生第几门成绩*/ studenti.sum+=studenti.scorej; /*学生总分=三门课程成绩的累加*/ studenti.ave=studenti.sum/3.0; /*学生平均分=学生的总分/3*/ for(i=n;i<n+m;i+) fwrite(&studenti,sizeof(struct stu),1,fp); /*保存输入学生信息的数据进文件*/fclose(fp); /*关闭文件*/modify() /*修改*/file *fp; /*定
34、义指针文件*/int i,j;char name10; /*定义name的长度*/ char ch; if(fp=fopen("stu.dat","rb+")=null) /*若文件打不开*/ printf("cannot open the file"); /*显示cannot open the file */ exit(0); /*退出*/ n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+;printf("please input the name o
35、f the student who should be modify!n"); /*请输入要修改学生的姓名*/printf("ttt the name:n"); /*输出姓名*/scanf("%s",name); /*姓名*/for(i=0;i<n;i+)if(strcmp(name,)=0) /*比较输入学生的姓名是否符合文件中学生的姓名*/printf("%st%st%ct%dt%dt%dt%ft%fn",studenti.num,,studenti.sex,st
36、udenti.score0,studenti.score1,studenti.score2,studenti.sum,studenti.ave); /*输出学生的学号,姓名,性别,成绩,成绩,成绩,总分,平均分*/break;printf("nttt do you modify it, y/n? "); /*你要修改吗?y/n*/scanf(" %c",&ch); if(ch='y'|ch='y') /*y=y*/printf("the %d",i+1); /*第一项*/ printf(&quo
37、t;the number:"); /*学号*/ canf("%s",studenti.num); /*输入学生的学号*/ rintf("nthe name:"); /*姓名*/ canf("%s",); /*输入学生的姓名*/ rintf("nthe sex: (mf) "); /*学生的性别(mf)*/ canf(" %c",&studenti.sex); /*输入学生的性别*/ printf("n the 3 score:");
38、 /*三门课程的成绩*/ tudenti.sum=0; /*初始总分为0*/ for(j=0;j<3;j+)printf("the score %d",j+1); /*成绩*/scanf("%d",&studenti.scorej); /*输入该学生成绩*/studenti.sum+=studenti.scorej; /*学生的总分*/studenti.ave=studenti.sum/3.0; /*学生的平均分*/rewind(fp); /*保存信息*/fwrite(student,sizeof(struct stu),n,fp); fc
39、lose(fp); /*关闭文件*/sort() /*排序*/ file *fp; /*定义指针文件*/ int i,j; struct stu m; /*定义结构体m*/ char ch1,ch2; if(fp=fopen("stu.dat","rb+")=null) /*若文件打不开*/printf("cannot open the file"); /*显示cannot open the file */ exit(0); /*退出*/ n=0;while(fread(&studentn,sizeof(struct stu)
40、,1,fp)=1) n+;printf("ntt 1->numn"); /*输出“选择1为学号排序”*/printf("ntt 2->sumn"); /*输出“选择2为总分排序”*/printf("please select:n"); /*请选择*/scanf(" %c",&ch1); /*输入1*/if(ch1='1') /*若选择1 */printf("nt u->up"); /*输出u=up*/printf("nt d->down&
41、quot;); /*输出d=down*/printf("please select:n"); /*输出“请选择”*/scanf(" %c",&ch2); /*输入选择*/if(ch2='u'|ch2='u') /*选择中的u=u*/for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if(strcmp(studentj.num,studentj+1.num)>0) /*比较studentj.num和studentj+1.num的长度>0*/m=studentj;stu
42、dentj=studentj+1;studentj+1=m; /*小点的数字覆盖前面大点的数字,大点的数字往后移*/ if(ch2='d'|ch2='d') /*选择中的d=d*/for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if(strcmp(studentj.num,studentj+1.num)<0) m=studentj;studentj=studentj+1;studentj+1=m; if(ch1='2') /*若选择2*/printf("nt u->up");
43、 /*输出u=up*/ printf("nt d->down"); /*输出d=down*/ printf("please select:n"); /*输出“请选择”*/ scanf(" %c",&ch2);/*输入选择*/ if(ch2='u'|ch2='u')/*选择中的u=u*/for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if(studentj.sum>studentj+1.sum) /*比较studentj.sum>stude
44、ntj+1.sum的长度*/m=studentj;studentj=studentj+1;studentj+1=m; /*小点的数字覆盖前面大点的数字,大点的数字往后移*/ if(ch2='d'|ch2='d') /*选择中的d=d*/for(i=0;i<n-1;i+) for(j=0;j<n-i-1;j+) if(studentj.sum<studentj+1.sum) /*若studentj.sum<studentj+1.sum*/m=studentj;studentj=studentj+1;studentj+1=m; /*后面大的数
45、字覆盖前面小点的数字*/ rewind(fp); fwrite(student,sizeof(struct stu),n,fp); /*写入文件*/ fclose(fp); /*关闭文件*/ search() /*查询*/ file *fp; /*定义指针文件*/ int i; char name10,num10,ch; /*定义name num的长度*/ if(fp=fopen("stu.dat","r+")=null) /*若文件打不开*/printf("cannot open the file"); /*显示cannot ope
46、n the file */ exit(0); /*退出*/ n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+;printf("ntt 1->numn"); /*选择1 为学号*/printf("ntt 2->namen"); /*选择2为姓名*/printf("please select:n"); /*请选择*/scanf(" %c",&ch); /*输入选择*/if(ch='1') /*选择1*/print
47、f("please input the num: n"); /*显示请输入学号*/ scanf("%s",num); /*输入学号*/ for(i=0;i<n;i+) if(strcmp(num,studenti.num)=0) /*比较num和studengti.num的长度*/ printf("%st%st%ct%dt%dt%dt%ft%fn",studenti.num,,studenti.sex, studenti.score0,studenti.score1,studenti.score2,st
48、udenti.sum,studenti.ave); /*输入学生的学号,姓名,性别,成绩,成绩,成绩,总分,平均分*/ if(ch='2') /*选择2*/ printf("please input the name: n"); /*显示请输入姓名*/scanf("%s",name); /*输入姓名*/ for(i=0;i<n;i+) if(strcmp(name,)=0)/*比较输入的姓名是否符合*/ printf("%st%st%ct%dt%dt%dt%ft%fn",studenti
49、.num,,studenti.sex, studenti.score0,studenti.score1,studenti.score2,studenti.sum,studenti.ave); /*输出学生的学号,姓名,性别,成绩,成绩,成绩,总分,平均分*/ fclose(fp); /*关闭文件*/delete() /*删除*/file *fp; /*定义指针文件*/ int i,j,k; char ch1,ch2;char num10,name10; if(fp=fopen("stu.dat","rb")=null) /*若文
50、件打不开*/printf("cannot open the file!n");/*显示cannot open the file */ exit(0); /*退出*/ n=0;while(fread(&studentn,sizeof(struct stu),1,fp)=1) n+; printf("please input the student's information:n"); /*显示请输入学生的信息*/ printf("tt 1=numt2=namen"); /*1为学号,2为姓名*/ scanf("
51、 %c",&ch1); /*选择*/ f(ch1='1') /*选择1*/ printf("please input the student's num=n"); /*请输入学生的学号*/ scanf("%s",num); /*输入学生的学号*/ for(i=0;i<n;i+) if(strcmp(num,studenti.num)=0) /*若um,studenti.num相等*/ printf("%st%st%ct%dt%dt%dt%ft%ftn", studenti.num,stu
52、,studenti.sex,studenti.score0, studenti.score1,studenti.score2,studenti.sum,studenti.ave);/*输出学生的学号,姓名,性别,成绩,成绩,成绩,总分,平均分*/ k=i; /*用k标记i的地址*/ if(ch1='2') /*选择2*/printf("please input the student's name=n"); /*显示请输入学生的姓名*/ canf("%s",name); /*输入姓名*/ or(i=0;i<
53、;n;i+)if(strcmp(name,)=0) /*若name,符合*/printf("%st%st%ct%dt%dt%dt%ft%fn",studenti.num,,studenti.score0,studenti.score0,studenti.score2,studenti.sum,studenti.ave); /*输出学生的学号,姓名,性别,成绩,成绩,成绩,总分,平均分*/ break;printf("n delete this student y/n?"); /
54、*显示 是否删除该学生*/scanf(" %c",&ch2);if(ch2='y'|ch2='y') /*y y 都可以.是个或逻辑结构*/for(i=i+1;i<n;i+) udenti-1=studenti; fclose(fp); /*关闭文件*/if(fp=fopen("stu.dat","wb")=null) /*若文件打不开*/printf("cannot open the file!n");exit(0); /*显示cannot open the file 并退出*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中考化学实验操作考试冲刺卷及答案
- 2026年农村邻居滴水合同(1篇)
- 2026中国爱尔兰威士忌市场消费状况与销售策略分析报告
- 2026年中医胸痹心痛考试试题及答案
- 2026年高考政治二轮复习-清单13 民事权利义务 家庭与婚姻(知识·方法·能力清单)(全国适用)(原卷版)
- 2026年录用疾病合同(1篇)
- 2026年指纹伪造合同(1篇)
- 声学检测服务协议2026年版
- 2026年专利保护维护合同协议
- 2026年虚拟现实教育市场拓展分析方案
- 固定桥修复后可能出现的问题及处理
- QCT457-2023救护车技术规范
- 湖南对口招生考试旅游类专业综合知识模拟试题及答案
- 《管理运筹学》第5版习题答案韩伯棠
- 华为信用管理手册
- 超50米落地脚手架专家论证方案-
- 机械设备租赁保障措施
- 小学前鼻音后鼻音练习题
- Q GW 202002-2019-金风风力发电机组 塔架技术条件-归档版-D
- GB/T 22085.1-2008电子束及激光焊接接头缺欠质量分级指南第1部分:钢
- 儿科学的范围和任务及儿科学的发展和展望课件
评论
0/150
提交评论