1、沈 阳 航 空 工 业 学 院课 程 设 计学 号 200704021029 班 级 7402101 姓 名 邢 龙 指导教师 吴杰宏2008 年 9 月 12 日沈 阳 航 院 设 计 用 纸第 I 页沈 阳 航 空 工 业 学 院课 程 设 计 任 务 书电子工程系 电子信息工程专业 7402101 班 学号 200704021029一、课程设计题目:健身跑学分管理系统(1)二、课程设计工作自 2008 年 9 月 08 日起至 2008 年 9 月 11 日止三、课程设计内容:用 C 语言编写软件完成以下任务:学生的记录信息要保存在磁盘文件中(记录结构至少应该包括以下四项:学号、姓名、累
2、计次数、学分)。学分计算方法:在本学期内累计次数打倒 20 次,可得到 0.5 学分 ,否则没有学分,新学期开始累计次数从 0 开始累计。在大学期间 ,最多可得到 2学分。该系统具有如下功能:(1) 学生记录输入;(2) 跑步签到(每签到一次,累计次数加 1);(3) 删除某学生记录。四、课程设计要求:程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便。 用户界面中的菜单至少应包括“学生跑步信息录入” 、“学生跑步签到” 、 “某生信息删除” 、 “退出”4 项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书(打印稿
3、和电子稿) ,其内容如下: 封面 课程设计任务书 目录 需求分析(分析题目的要求) 程序流程图(总体流程图和主要功能模块流程图) 核心技术的实现说明及相应程序段 个人总结沈 阳 航 院 设 计 用 纸第 II 页 参考资料 源程序及适当的注释指导教师:_ 学生签名:_目录一、需求分析 .3二、程序流程图 .3三、核心技术的实现说明及相应程序段 .6四、个人总结 10五、参考文献 11六、源程序 11沈 阳 航 院 设 计 用 纸第 III 页沈 阳 航 院 设 计 用 纸第 4 页一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为 3 个模块,其中每一个模块对应一个函数,他们
4、的主要功能分别是:学生记录输入函数(change) ,跑步签到函数 (number),删除某学生记录函数(del) 1、学生记录输入函数 主要实现程序开始运行时学生相关数据的输入以及此后的运行中学生数据的追加功能;2、跑步签到函数 实现的功能是按照学号对学生的数据记录进行按要求添加;3、删除某学生记录 实现的功能是按照学号对学生的数据记录进行按要求的删除。本系统程序还具有退出功能,从而达到可以在程序的一次运行当中循环执行所有的功能的要求,并根据操作者的需要终止程序。将每一个学生记录都包含学号、姓名,以及签到次数、学分.记录类型定义为结构体类型,添加以及追加的学生信息直接写入student.da
5、t 中,其他函数对学生记录的访问时,数据来源都是student.dat 文件,这样做:1。可以保证学生数据的一致性 2。可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图沈 阳 航 院 设 计 用 纸第 5 页显示主功能菜单用户选择对应函数Switch()case 4case 2case 1case 3其他输入错误学生跑步信息录入 学生跑步签到 某生信息删除 退出 结束2、具体功能框图(1)学生记录输入 change()读写方式打开 D 盘真Student.dat 文件不成功? 假输出文件打开失败 打开指定文件沈 阳 航 院 设 计 用 纸第 6
6、 页for(i=0;i库函数实现的。这里不过多说明。三、核心技术的实现说明及相应程序段本程序主要由 3 个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,学生记录输入函数、其中跑步签到函数和删除功能函数是程序中较为核心的部分,下面分别进行说明。1、学生记录输入函数 学生记录输入实际为两步实现的:1。新建学生文件(student.dat )2。将录入的学生信息写入(student.dat)文件中。表面上看对整体系统的影响不大,但是实际上程序的原始信息录入的关键就在于此, “记忆”是其核心具体的程序段如下:void change()/*学生信息输
7、入 */FILE *fp;int a,i,c;static b=0;if(fp=fopen(“d:student.txt“,“w+“)=NULL)printf(“文件打开失败!n“);return;for(i=0;i=N)printf(“没有找到该学生信息!n“);return;else for(j=i+1;j#include#include#include#include/*相关的库函数,最后一项与 exit(0)*/#define N 3/*宏定义,定义可记录的学生个数*/struct studentint num;char name10;int count;float score; st
8、uN;沈 阳 航 院 设 计 用 纸第 13 页void change()/*对学生信息进行输入*/FILE *fp;int i;if(fp=fopen(“d:student.dat“,“w+“)=NULL)printf(“文件打开失败!n“);return;/*打开文件 */for(i=0;i=N)printf(“没有找到该学生信息!n“);return;else for(j=i+1;jN;j+) /*左移,覆盖待删除的学生记录*/strcpy(stuj-1.name,stuj.name);/*学生姓名的删除 */stuj-1.count=stuj.count;/*学生签到次数的删除 */s
9、tuj-1.score=stuj.score;/*学生学分的删除 */stuj-1.num=stuj.num;/*学生学号的删除 */if(fp=fopen(“d:student.dat“,“w“)=NULL) printf(“文件打开失败!“);沈 阳 航 院 设 计 用 纸第 16 页return;else /*重新写回到原文件中 */ putw(N-1,fp); /*将 N-1 重新写入文件中*/for(i=0;iN-1;i+)fwrite(fclose(fp);printf(“删除成功!n“);/*删除成功 */void main()/*主函数,主功能菜单*/int t;for(t=1
10、;t+)/*循环输出功能菜单 */printf(“n“);printf(“ * 学生健康跑签到系统*“);/*主菜单*/printf(“n 1 *学生跑步信息录入 “) ;printf(“n 2 *学生跑步签到 “) ; printf(“n 3 *某学生信息删除“) ;printf(“n 4 *退出 “);printf(“n 请输入您要选择的操作的序号 : “);switch(getch()case 1: change(); break;case 2: number(); break;case 3: del(); break; case 4: exit(0); break;default: printf(“输入错误,请输入列表中存在的序号!n “);沈 阳 航 院 设 计 用 纸第 17 页