1、 分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计结构图如下:统计语文最高分、最低分、平均成绩2、模块功能说明对各个模块进行功能的描述(1)、输入模块:录入需要管理的学生信息并将信息保存于文件中,以方便日后进行打印、读取、修改等操作。(2)、输出模块:将所有学生信息或想要查询的学生信息显示于屏幕,用于打印学生信息或查找某些学生信息。(3)、查询模块:可对已建立的学生信息进行查询,并且可根据需要选择按姓名查询。(4)、新增模块:根据需要随时增加学生信息。 (5)、修改模块:可根据需要对多个学生信息进行修改,也
2、可随时对个别项进行修改。(6)、删除模块:可对退学或休学的学生信息做删除处理。(7)、统计模块: 对学生四门成绩最高分、最低分、平均成绩的统计。(8)、排序模块: 对学生四门成绩由高到低的排序。(9)、退出系统:选择该项,自动退出该系统。五、详细设计及运行结果流程图, 函数之间相互调用的图示 ,程序设计及编码, 运行结果。统计计算机最高分、最低分、平均成绩统计英语最高分、最低分、平均成绩排序语文成绩排序数学成绩删除模块统计数学最高分、最低分、平均成绩新增模块修改模块 六 调试情况及运行结果1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。此次实践课编写的是一个应用程序,相对于以前我们
3、见的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。可是毕竟是第一次独立完成这样的大程序,结果还不是太理想。由于时间很短,在选题报告中设想到的好多功能都没有实现。已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。如:再录入数据时,没有设计数据输入出错的提示,如果成绩输的是负值程序也继续执行,这就给运用上带来一些不便;没有设计按各科成绩排序的功能。2、在设计过程中的感受。本次C 语言的实习课让我对C 语言的学习又有了更深入的了
4、解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。本次实习中遇到了很多以前没有遇到过的问题,也曾想要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。3、程序中出现的问题及解决方法问题一、学生初始信息模块:其中包括学生的姓名、学号和性别以及学生的语文 数学、英语和计算机等相关信息;可用函数input
5、()来实现此操作。当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。解决办法及步骤:(1)一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。(2)既然有此学生,那么检查循环判断是否有此学生的语句发现没有错。(3)仔细分析原因后,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的变量。问题二、查询模块:可用inquire()函数来实现。找到就输出此学生全部信息,包括学生的语文、数学、英语和计算机等的成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。解决办法及步骤:(1)检查所编写的程序代码是否完全正确
6、,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。(2)检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。问题三、插入模块:可用insert()函数来实现。当我们输入插入信息时,系统却提示插入不进数据。(1)检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入插入信息看能否插入进去得到所要插入的学生信息以及学生的语文、数学、英语和计算机的成绩。(2)检查当我们在输入插入信息时,看是否我们输入的插入信息有。七参考文献C语言程序设计 王曙燕 曹锰 科学出版社 2005年2月八
7、. 附录: # include # include # define N 5int sum; /*用来记录学生人数*/*学生信息结构体类型*/struct student int num; char name12; char sex; int score4; int ave;stuN;/*全新保存函数*/save_message(int sum) /*保存函数,保存sum个记录*/ FILE *fp; int i; if(fp=fopen(student.txt,wb)=NULL) /*以输出打开方式,在此前的记录被覆盖*/ printf(nCannot open filen); return
8、 NULL; for(i=0;isum;i+) if(stui.ave!=0) /*stui.ave=0表此记录已删除*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(file write errorn fclose(fp);/*学号输入函数*/void no_input(int i) /*表示第i个的学生信息*/ int j,k;NO.: scanf(%d,&stui.num); if(stui.num9) /*判断学号是否为数字*/Input errror!Only bemade up of (0-9).Please re
9、input!n/*对分数输入*/void score_input(int i) int j; for(j=0;j4;j+)score %d:,j+1);stui.scorej);void average(int i) /*对第i个记录的分数求平均值*/ int j,sum=0; sum+=stui.scorej; stui.ave=sum/4;/*输入模块*/void input_message(int i) printf(nn 录入学生信息(最多%d种)n,N);N;please input name: fflush(stdin);%3s,stui.name); no_input(i);pl
10、ease input sex:%cstui.sex); score_input(i); average(i);n -%d名学生信息输入完毕!-n,i); sum=i;n 按任意键返回主菜单!/*读取信息*/int read_message() int i=0;rb)=NULL)nn*暂时还没有任何库存信息,按任意键进入主菜单选择基本信息的录入! *n return; while(feof(fp)! fread(&stui,sizeof(struct student),1,fp); if(stui.num=0) break; else i+; return(i);/*输出模块*/void out
11、put_message() int i=0,j; do%d %3s %ctt,stui.num,stui.name,stui.sex);%dtt,stui.scorej);%dn,stui.ave); i+; while(i8|c1)nChoice error!Please again! /*判断选择是否错误,若是则重新选择*/ /*当输入是字符时,可以防止死循环*/ switch(c) /*选择要修改的项目*/ case 1:printf(n 输入修改后的学号: break; case 2:n 输入修改后的姓名: case 3:n 输入修改后的性别: case 4:n 输入修改后的语文成绩:
12、 case 5:n 输入修改后的数学成绩: case 6:n 输入修改后的英语成绩: case 7:n 输入修改后的计算机成绩: case 8:n 输入修改后的平均成绩:stui.ave);nn Go on? (Y/N)choice); if (choice= flag=1;/*删除学生信息*/void del_message() int i,k,del_num,flag=1;please input the deleted student num:del_num); if(stui.num=del_num) for(k=i;kmax) max=stui.score0; if (stui.sc
13、ore0max) max=stui.score1; if (stui.score1max) max=stui.score2; if (stui.score2max) max=stui.score3; if (stui.score3min) min=stui.score3; SUM+=stui.score3;n Computer average:n Computer max:n Computer min:/*学生语文成绩排序*/void sort_Chinese() int i,j,t;Input %d scores:,sum);,stui.score0);sum-1; for(j=i+1; if(stui.score0stuj.score0) t=stui.score0; stui.score0=stuj.score0; stuj.score0=t;The sorted scores: