C语言综合设计实验十上机报告(共14页).doc

上传人:飞****2 文档编号:14165859 上传时间:2022-05-03 格式:DOC 页数:14 大小:70KB
返回 下载 相关 举报
C语言综合设计实验十上机报告(共14页).doc_第1页
第1页 / 共14页
C语言综合设计实验十上机报告(共14页).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《C语言综合设计实验十上机报告(共14页).doc》由会员分享,可在线阅读,更多相关《C语言综合设计实验十上机报告(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上标准C语言程序设计上机报告实验十 综合设计实验 专业: 电子信息工程 班级: 电信1301 学号: U 姓名: 秦行 指导教师: 张继远 完成日期:2014-7-1一、 实验目的1、 进一步熟悉开发环境,掌握编译、连接和调试的技巧;2、 综合运用数组、指针、函数、结构体和文件,通过综合设计掌握数组、结构体、指针和函数之间的相互关系,掌握函数实参与形参的对应关系,理解传值、传指针的区别(允许使用传引用)3、 熟悉具有复杂需求的程序设计过程和注意事项;4、 使用多文件的工程设计二、 实验内容及要求下面程序运行中所有学生信息均存入文件studengdata.txt,程序每次

2、运行时从文件中提取数据存入内存结构体数组中(指定文件不存在则新建)。题目:某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。编程实现如下菜单驱动的学生成绩管理系统:(1) 录入学生学号、姓名和各科考试成绩;(2) 计算每门课程的总分和平均分;(3) 计算每个学生的总分和平均分;(4) 按每个学生的总分由高到低排出名次表;(5) 按学号由小到大排出成绩表;(6) 按姓名的字典顺序排出成绩表;(7) 按学号查询学生排名及其考试成绩;(8) 按姓名查询学生排名及其考试成绩;(9) 按优秀(90-100)、良好(80-89)、中等(70-79)、及

3、格(60-69)、不及格(0-59)5个类别,对每门课程分别统计各类别人数和所占比例;(10) 输出每个学生学号、姓名、各科考试成绩和总分排名。(11) 学生记录信息写入文件studengdata.txt(12) 从文件中读出学生记录信息并显示;(13) 退出系统程序要求:1. 程序运行后先显示菜单列出上面13项操作选项,并提示用户输入1-13值;2. 考虑对用户输入的数据进行有效性校验,提高程序的健壮性;总体要求:1、 按模块化设计方法,对问题进行分解,提出模块划分并绘制模块划分框图。给出各子函数模块的输入输出接口设计(即函数原型)以及用到的主要数据类型或数据结构的选择;(注:输入数据、折半

4、查找、统计个人平均分、统计班级总平均分、排序、打印等均采用子函数设计,文件操作允许在main函数内完成)(不得采用直接选择法进行排序子函数设计)2、 给出程序清单,添加注释;3、 不允许使用全局变量,避免破坏程序结构;4、 允许采用传引用方式定义子函数;5、 注意编程规范,包括书写格式遵循缩进规则和空行规则;6、 提交要求:提交:报告纸质打印档、报告电子档、源码(含cpp和h文件)、student data.txt文件。所有电子档压缩归档,压缩档命名格式为“2013级综合设计代码报告汇总班号学号姓名提交年月日.rar”,纸质档提交截至时间2014/7/1,提交唯一邮箱:zhang_ty163三

5、、 程序设计注意事项1、 大型程序通常采用模块化,每个模块通常至少有一个函数组成;大型程序是以工程project来组织的,一个project又是由几个源程序文件(.cpp)组成的。因此,学会编写多源文件和多函数的C+程序,不要一味地用唯一的main函数来组织程序设计。本设计要求2个以上的源文件,规定所有子函数原型说明语句、结构体类型定义以及#define宏、typedef类型别名说明语句等放在myproject.h文件中,main函数和各子函数定义放在源文件中,源文件开头用#include “myproject.h”包含。2、 尽量少用全局变量(外部存储类型变量)。过多使用外部类型的全局变量,

6、将使函数模块之间的耦合性加强,从而降低函数的独立性以及通用型。尽管采用全局变量编程相对容易,但对C+程序员,更应注意采用符合模块化的设计理念来完成设计,正确的设计方法论是我们在学习过程首先要掌握并以此为主要学习任务,不能为了解决问题而“凑”程序。3、 采用软件工程学的准则来完成整个设计过程,一般的软件开发过程包括了:确定需求分析过程、逐步细化的系统设计过程(包含总体设计、概要设计、详细设计等)、程序生产过程(编写代码)、调试和测试以及运行和维护过程这几个阶段。对于初学者,我们不必严格按照这些步骤,但简单的问题理解、通过系统设计给出各模块的函数原型说明以及用到的主要数据类型或数据结构、编程、调试

7、运行等需要掌握。四、 设计思路分析1、 简单需求分析:编程需要1.结构体的应用2.几个函数模块的结合和利用.把握好函数的模块即可. 设计: 每一个操作作为一个函数封装起来,然后用一个菜单函数来把每一个函数联系起来,是操作更加简洁美观和人性化.2、 总体设计确定功能模块划分:要求:根据需求分析,确定所有函数模块,对各模块功能作简单描述,根据函数模块之间的调用与被调用关系,分析出彼此数据传递关系,然后为每个函数模块确定输入/输出接口参数定义,写出完整的函数原型说明。最终根据上面得到的函数模块调用关系及接口参数定义画出具体的功能模块划分框图图(方框内为模块名,方框之间的连线注明数据传递)prints

8、core(stu,n); 输出每个学生学号、姓名、各科考试成绩和总分排名statisticanalysis(stu,n);按按优秀(90-100)、良好(80-89)、中等(70-79)、及格(6069)、不及格(0-59)5个类别,对每门课程分别统计各类别人数和所占比例;121110987643125000Menu函数/用户的功能选择Readscore(stu,n)/作为输入函数进行数据录入Aversumofscore(stu,sum_stu,n);/ /计算每门和每个学生的总分和平均分Desortbyscore(stu,sum_stu,n);通过总分来排序Assortbynum(stu,n

9、);通过学号来排序并输出成绩Assortbyname(stu,n);通过姓名字典顺序来排序searchbynum(stu,n);按学号进行查询成绩searchbyname(stu,n);按姓名进行查询成绩save(stu,n);学生记录信息写入文件studengdata.txt read(stu,n); /从文件中读出学生记录信息并显示exit(0)/退出程序Main:输入学生人数,进行while无限循环,用一个菜单函数和switch语句来让用户进行功能选择,选择各种函数.3、 模块内部流程图或伪代码要求:除输入输出子函数外都要给出函数内部流程图或伪代码(关于伪代码参考wikipedia,内部

10、搜索词:Pseudocode或直接谷歌)Menu(void)Readscore(stu,n)/作为输入函数进行数据录入Aversumofscore(stu,sum_stu,n);/ /计算每门和每个学生的总分和平均分Desortbyscore(stu,sum_stu,n);通过总分来排序Assortbynum(stu,n);通过学号来排序并输出成绩Assortbyname(stu,n);通过姓名字典顺序来排序searchbynum(stu,n);按学号进行查询成绩searchbyname(stu,n);按姓名进行查询成绩)statisticanalysis(stu,n);按按优秀(90-100

11、)、良好(80-89)、中等(70-79)、及格(6069)、不及格(0-59)5个类别,对每门课程分别统计各类别人数和所占比例;)printscore(stu,n); 输出每个学生学号、姓名、各科考试成绩和总分排名)vsave(stu,n);学生记录信息写入文件studengdata.txt)read(stu,n); /从文件中读出学生记录信息并显示)exit(0)/退出程序五、 源代码(每个子函数需附注释描述功能及关键方法)#include #include #include #include”my project.h”#define STU_M 30 /*最多的学生人数*/#define

12、 SCORE_M 6struct studentint num;char name20;float scoreSCORE_M;int mingci;int Menu(void);void Readscore (student *,int n);void Aversumofscore(student *,float *,int n);void Desortbyscore(student *,float *,int n);void Assortbynum(student *,int n);void Assortbyname(student *,int n);void searchbynum(stu

13、dent *,int n);void searchbyname(student *,int n);void statisticanalysis(student *,int n);void printscore(student *,int n);void save(student *,int n);void read(student *,int n);int main() char itemselected; int n; struct student stuSTU_M; float sum_stuSTU_M; printf(输入学生人数(n%d),STU_M); scanf(%d,&n); w

14、hile (1) itemselected=Menu(); /*显示菜单,并读取用户输入*/ switch (itemselected) case 1: Readscore (stu,n); break; case 2: Aversumofscore(stu,sum_stu,n); break; case 3: Desortbyscore(stu,sum_stu,n); printf(n sort in descending order by score:n); break; case 4: Assortbynum(stu,n); printf(n sort in ascending orde

15、r by score:n); break; case 5: Assortbyname(stu,n); printf(n sort in ascending order by name:n); break; case 6: searchbynum(stu,n); break; case 7: searchbyname(stu,n); break; case 8: statisticanalysis(stu,n); break; case 9: printscore(stu,n); break; case 10: save(stu,n); case 11: read(stu,n); case 0:

16、 exit(0); /*printf(end of program!); break;*/ default :printf(input error !); break; return 0;/*函数功能:显示菜单项并获得用户键盘输入的选项*/int Menu(void)int itemselected;printf(n 学生成绩管理系统:管理学生成绩n);printf(n 1. 录入每个学生学号和考试成绩n);printf(n 2. 计算每门课程和每个学生总分和平均分n);/每门课的总分,平均分和每个学生的总分,平均分用一个函数计算/printf(n 3. 按总分由低到高排出名次表n);prin

17、tf(n 4. 按学号由大到小排出成绩表n);printf(n 5. 按姓名的字典顺序排序并输出成绩表n);printf(n 6. 按学号查询学生排名和考试成绩n);printf(n 7. 按姓名查询学生排名和考试成绩n);printf(n 8. 按优秀(90-100分)、良好(80-89分)、中等(70-79分)、及格(60-69分)、不及格(0-59分)5个类别n统计每个类别的人数n);printf(n 9. 输出学生学号、姓名、各科考试成绩和总分排名:n);printf(n 10.学生记录信息写入文件studengdata.txt);printf(n 11.从文件中读出学生记录信息并显示

18、);printf(n 0. 程序结束n);printf(n输入你的选择n);scanf (%d,&itemselected);return itemselected;/*函数功能:输入n个学生的信息*/void Readscore (struct student *p,int n) int i,j; float s; for(i=0;iname); printf(请输入学号:n); scanf(%d%f,&(p+i)-num); for(j=0;jscorej=s; /*函数功能:计算每门课程和每个学生总分和平均分*/(第2第3整合到了一起)void Aversumofscore(struct

19、 student *p,float *ap,int n)int i,j;float sum1,ave1,ave2;for(j=0;jSCORE_M;j+)sum1=0;ave1=0;for(i=0;iscorej;ave1=sum1/n;printf(第%d门课程的总分为%fn第%d门课程的平均分为%f,j,sum1,j,ave1);/输出每门课程情况for(i=0;in;i+)ave2=0;for(j=0;jscorej;ave2=*(ap+i)/SCORE_M;printf(学生%s的总成绩为%d,平均成绩为%d,(p+i)-name,*ap,ave2);/输出每个学生情况/*函数功能:将

20、学生按总分从高到低排序*/void Desortbyscore(struct student *p,float *ap,int n)int i,j,max;struct student temp;for(i=0;in;i+)max=i;for(j=i+1;japmax)max=j;if(max!=i)temp=pi;pi=pmax;pmax=temp;for(i=0;imingci=i;printf(按总分排序结果为第%5d名为%st总分为%dn,i,(p+i)-name,*(ap+i);/*函数功能:将按学号从小到大排学生顺序*/void Assortbynum(struct student

21、 *p,int n)int i,j,min;struct student temp;for(i=0;in;i+)min=i;for(j=i+1;jnumnum)min=j;if(min!=i)temp=pi;pi=pmin;pmin=temp;for(i=0;inum,(p+i)-name);for(j=0;jscorej);/*函数功能按姓名字典顺序排序并输出成绩表*/void Assortbyname(struct student *p,int n);int i,j,min;struct student temp;for(i=0;in;i+)min=i;for(j=i+1;jname,(p

22、+min)-name)0)min=j;if(min!=i)temp=pi;pi=pmin;pmin=temp;for(i=0;iname);for(j=0;jscorej);/*函数功能:按学号查找学生成绩并显示查找结果*/void searchbynum(struct student *p,int n) int i,j,search;printf(请输入学号:n); scanf(%d,&search);for(i=0;inum) continue; else for(j=0;jscorej);break/*函数功能:按学号查找学生成绩并显示查找结果*/void searchbyname(st

23、ruct student *p,int n) int i,j;char search20;printf(请输入姓名n); scanf(%s,search);for(i=0;in;i+)if(strcmp(searchname)!=0)continue; else for(j=0;jscorej);break/*函数功能:统计各分数段的学生人数*/void statisticanalysis(struct student *p,int n)int i,aSCORE_M,bSCORE_M,cSCORE_M,dSCORE_M,eSCORE_M;float ;a=0;b=0;c=0;d=0;e=0;f

24、=0;for(i=0;in;i+)for(j=0;jscorej;switch(f/10)case 9:aj+;continue;case 8:bj+;continue;case 7:cj+;continue;case 6:dj+;continue;default:ej+;continue;for(j=0;jSCORE_M;j+)printf(优秀人数:%dn,良好人数:%dn,中等人数:%dn,及格人数:%dn,aj,bj,cj,dj,ej);/*函数功能:输出学生学号、姓名、各科考试成绩和总分排名*/void printscore(struct student *p,int n)int i

25、,j;printf(学号:t姓名:t科目1:t科目2:t科目3:t科目4:t科目5:t科目6:t总分排名:n);for(i=0;inum,(p+i)-name);for(j=0;jscorej);printf(%dn,(p+i)-mingci);/*函数功能:/* 保存到文件 */void save(struct student stu,int n)FILE *fp;int i;if(fp=fopen(studengdata.txt,wt)=NULL)printf(cannot open filen);return;for(i=0;in;i+)if(fwrite(&stui,sizeof(st

26、ruct student),1,fp)!=1)printf(file write errorn);fclose(fp);/*实现从文件studengdata.txt读出数据*/void read(struct student stu,int n)FILE *fp;int i;if(fp=fopen(studengdata.txt,rt)=NULL)printf(cannot open filen);return;for(i=0;in;i+)if(fread(&stui,sizeof(struct student),1,fp)!=1)printf(file write errorn);fclose(fp);六、 感受和困惑1. 程序的运行与程序编写的预期相差太多太多.2. 很多错误在编译完后会出现.3. 程序的调试很重要.专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁