04021100健身跑学分管理系统.docx
- 文档编号:9658300
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:20
- 大小:91.27KB
04021100健身跑学分管理系统.docx
《04021100健身跑学分管理系统.docx》由会员分享,可在线阅读,更多相关《04021100健身跑学分管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
04021100健身跑学分管理系统
沈阳航空工业学院
课程设计
学号200704021100
班级7402104
姓名石峰
指导教师尹航
2008年9月8日
沈阳航空工业学院
课程设计任务书
电子信息工程学院电子信息工程专业7402104班学号200704021100
一、课程设计题目:
健身跑学分管理系统
二、课程设计工作自2008年9月8日起至2008年9月12日止
三、课程设计内容:
运用所学的C语言知识,编制和调试程序,具有如下功能:
学生的记录信息要保存在磁盘文件中(记录结构至少应该包括以下四项:
学号,姓名、累计次数、学分)。
学分计算方法:
在一个学期内累计次数达到20次,可得到0.5学分,否则没有学分,新学期开始累计次数从0开始累计。
在大学期间,最多可得到2学分。
该系统具有如下功能:
(1)学生记录输入
(2)跑步签到(每签到一次,累计次数加1)。
(3)按学号进行排序(4)查询(可按学号、学分等进行查询)
(5)插入新的学生记录(6)自己再加一项功能
四、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“输入数据”、“跑步签到”、“排序”、“查询”、“退出”5项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
学生签名:
成绩:
教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段9
四、个人总结11
五、参考文献11
六、源程序11
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:
学生信息输入函数(shuru),学生签到函数(qiandao),按学号排序函数(paixu),按学号查询函数(chaxun),输出学分满0.5的学生函数(de)以及插入新的学生记录函数(enter)。
1、学生信息输入函数主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、学生签到函数实现的功能是按照学号对学生的数据记录进行添加;
3、按学号排序函数按照题目的具体要求实现的是按学号的递增顺序显示出相应的学生数据;
4、按学号查询函数可以实现按照学号对学生的信息进行查询;
5、输出学分满0.5的学生函数可以实现对学生记录中学分达到0.5的学生进行输出;
6、插入新的学生记录函数可以实现插入新的学生信息。
除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
每一个学生记录都包含学号、姓名、签到次数以及学分,在程序当中,将学生记录类型定义为结构体类型,添加以及追加的学生信息直接写入D盘的student.txt文件中,其他函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
(图1程序总体结构图)
2、具体功能框图
(1)学生信息输入函数
(图2学生信息输入函数)
(2)学生签到函数
(图3学生签到函数)
(3)按学号排序函数
(图4按学号排序函数)
三、核心技术的实现说明及相应程序段
本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,学生信息输入函数、学生签到函数和按学号排序函数是程序中较为核心的部分,下面分别进行说明。
1、学生信息输入函数
学生信息输入时是在学生文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中。
具体程序段如下所示:
voidshuru()/*输入学生信息*/
{
FILE*fp;
inta,i,c;
intb=0;
if((fp=fopen("d:
\\student.txt","w+"))==NULL)
{
printf("文件打开失败\n");
return;
}
printf("\n添加学生人数:
");
scanf("%d",&a);
c=b;
if(a<=(SIZE-b))
for(i=b;i<(a+c);i++)
{
printf("\n输入学生信息:
");
printf("\n输入学生学号:
");
scanf("%d",&stud[i].num);
printf("\n输入学生姓名:
");
scanf("%s",stud[i].name);
printf("\n输入签到次数:
");
scanf("%d",&stud[i].time);
printf("\n输入学分:
");
scanf("%f",&stud[i].score);
b++;
}
else
printf("输入超限\n");
fclose(fp);
}
2、学生签到函数
学生签到函数的核心内容是随着学生签到次数的增加,学分增长。
该函数执行时,首先由用户输入签到学生的学号,如果文件中存在该学生的数据信息,那么此学生签到次数将比原来增加1次,如果签到次数未达到20次,则学分为0;如果签到次数达到20次,则学分变为0.5。
具体程序段如下所示:
voidqiandao()/*学生签到*/
{
FILE*fp;
inti,num;
printf("\n输入学生学号:
");
scanf("%d",&num);
if((fp=fopen("d:
\\student.txt","r+"))==NULL)
{
printf("文件打开失败\n");
return;
}
for(i=0;i { fread(&stud[i],sizeof(structstud),1,fp); if(num==stud[i].num) { stud[i].time++; if(stud[i].time==20) stud[i].score+=0.5; printf("\n%d\t%s\t%d\t%f",stud[i].num,stud[i].name,stud[i].time,stud[i].score); } } fclose(fp); } 3、按学号排序函数 对于按学号进行排序部分采用的是冒泡法排序,由于冒泡法排序涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。 具体程序段如下所示: voidpaixu()/*按学号进行排序*/ { FILE*fp; inti,k,t,p; charq[50]; floatr; if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(t=0;t fread(&stud[t],sizeof(structstud),1,fp); for(t=0;t for(k=0;k if(stud[k].num>stud[k+1].num) { { p=stud[k].num; stud[k].num=stud[k+1].num; stud[k+1].num=p; } { strcpy(q,stud[k].name); strcpy(stud[k].name,stud[k+1].name); strcpy(stud[k+1].name,q); } { p=stud[k].time; stud[k].time=stud[k+1].time; stud[k+1].time=p; } { r=stud[k].score; stud[k].score=stud[k+1].score; stud[k+1].score=r; } } if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(i=0;i fwrite(&stud[i],sizeof(structstud),1,fp); for(i=0;i if(stud[i].num! =0) printf("\n%d\t%s\t%d\t%f",stud[i].num,stud[i].name,stud[i].time,stud[i].score); fclose(fp); } 四、个人总结 C语言课程设计结束了,我受益良多。 我本人认为C语言是一门很难的课程,而且一开始我对自己的课程设计并没有信心,不知道该如何入手,但是在老师和同学的帮助下,渐渐产生了思路。 以前不明白的通过翻阅课本,都有了深刻的认识。 虽然在整个程序中有很多不足,例如题目要求: 学生学分不得超过2.0,在我的程序中没有实现,但我认为经过这次课程设计,我的进步已经很大了。 五、参考文献 1谭浩强.C程序设计.北京: 清华大学出版社,2007 2刘成等.C语言程序设计实验指导与习题集.北京: 中国铁道出版社,2006 六、源程序 #include #include #include #include #include #defineSIZE20 structstud//(student的一个结构体,包含学号、姓名、签到次数、以及学分) { intnum; charname[10]; inttime; floatscore; }stud[SIZE]; voidshuru()/*输入学生信息*/ { FILE*fp; inta,i,c; intb=0; if((fp=fopen("d: \\student.txt","w+"))==NULL) { printf("文件打开失败\n"); return; } printf("\n添加学生人数: "); scanf("%d",&a); c=b; if(a<=(SIZE-b)) for(i=b;i<(a+c);i++) { printf("\n输入学生信息: "); printf("\n输入学生学号: "); scanf("%d",&stud[i].num); printf("\n输入学生姓名: "); scanf("%s",stud[i].name); printf("\n输入签到次数: "); scanf("%d",&stud[i].time); printf("\n输入学分: "); scanf("%f",&stud[i].score); b++; } else printf("输入超限\n"); fclose(fp); } voidqiandao()/*学生签到*/ { FILE*fp; inti,num; printf("\n输入学生学号: "); scanf("%d",&num); if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(i=0;i { fread(&stud[i],sizeof(structstud),1,fp); if(num==stud[i].num) { stud[i].time++; if(stud[i].time==20) stud[i].score+=0.5; printf("\n%d\t%s\t%d\t%f",stud[i].num,stud[i].name,stud[i].time,stud[i].score); } } fclose(fp); } voidpaixu()/*按学号进行排序*/ { FILE*fp; inti,k,t,p; charq[50]; floatr; if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(t=0;t fread(&stud[t],sizeof(structstud),1,fp); for(t=0;t for(k=0;k if(stud[k].num>stud[k+1].num) { { p=stud[k].num; stud[k].num=stud[k+1].num; stud[k+1].num=p; } { strcpy(q,stud[k].name); strcpy(stud[k].name,stud[k+1].name); strcpy(stud[k+1].name,q); } { p=stud[k].time; stud[k].time=stud[k+1].time; stud[k+1].time=p; } { r=stud[k].score; stud[k].score=stud[k+1].score; stud[k+1].score=r; } } if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(i=0;i fwrite(&stud[i],sizeof(structstud),1,fp); for(i=0;i if(stud[i].num! =0) printf("\n%d\t%s\t%d\t%f",stud[i].num,stud[i].name,stud[i].time,stud[i].score); fclose(fp); } voidchaxun()/*按学号查询学生信息*/ { FILE*fp; inti,num; printf("\n请输入学生学号: "); scanf("%d",&num); if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(i=0;i { fread(&stud[i],sizeof(structstud),1,fp); if(num==stud[i].num) printf("\n%d\t%s\t%d\t%f",stud[i].num,stud[i].name,stud[i].time,stud[i].score); } } voidde()/*输出学分满0.5的学生*/ { FILE*fp; intt; if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败\n"); return; } for(t=0;t { if(stud[t].score==0.5) printf("\n%d\t%s\t%d\t%f",stud[t].num,stud[t].name,stud[t].time,stud[t].score); } } voidenter()/*记录插入*/ { FILE*fp; inta,i,c; intb=0; if((fp=fopen("d: \\student.txt","r+"))==NULL) { printf("文件打开失败! \n"); return; } printf("\n请输入要记录的学生数量: "); scanf("%d",&a); c=b; if(a<=(SIZE-b)) for(i=b;i<(a+c);i++) {printf("\n输入学生信息: "); printf("\n输入学生学号: "); scanf("%d",&stud[i].num); printf("\n输入学生姓名: "); scanf("%s",stud[i].name); printf("\n输入签到次数: "); scanf("%d",&stud[i].time); printf("\n输入学分: "); scanf("%f",&stud[i].score); b++; } for(i=0;i { if(fwrite(&stud[i],sizeof(structstud),1,fp)! =1) printf("文件书写错误\n"); } fclose(fp); } voidmain() { inti; for(i=0;;i++) { printf("\n"); printf("******************健身跑学分管理系统********************\n"); printf("1: 输入学生信息\n"); printf("2: 跑步签到\n"); printf("3: 按学号进行排序\n"); printf("4: 查询\n"); printf("5: 输出学分满0.5的人\n"); printf("6: 插入新的同学记录\n"); printf("7: 退出\n"); switch(getch()) { case'1': shuru();break; case'2': qiandao();break; case'3': paixu();break; case'4': chaxun();break; case'5': de();break; case'6': enter();break; case'7': exit(0);break; default: printf("error\n"); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04021100 健身 学分 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)