1、运动会成绩管理系统沈 阳 航 空 工 业 学 院 课程设计 学 号 200704021019班 级 7402101姓 名 李辰指导教师 吴杰宏2008年 9 月 8日沈阳航空工业学院课程设计任务书院系:电子信息工程 专业:电子信息工程 班级:7402101学号:200704021019 题目:运动会成绩管理系统(1)一、课程设计时间200809第1学期第2周,共计1周,20学时。二、课程设计内容用C语言编写软件完成以下任务:1录入运动员信息;2按所参加的项目添加成绩;3某一项目按成绩排名。三、课程设计要求1. 程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便。 用户界面
2、中的菜单至少应包括“运动员信息录入”、“按项目添加成绩”、“按成绩排名(某一项目)”、“退出”4项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2. 课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字指导教师:_ 学生签名:_五、说明书成绩六、教师评语 目录一、需求分析 1二、程序流程图 1三、核心技术的实现说明及相应程序段 2四、个人总结 5五、参考文献 12六、源程序 12一、需求分析经过对程序设计题目的分析可知,整个程序的实现大致分为三个模块,其中每一个模块对应一个或多个函数,他们的功能分别是:添加运动员信
3、息(add),排序函数(sort) ,添加运动员成绩(change)。这三个功能分别对应题目的三个要求:1、添加运动员信息函数 主要实现程序最初运行时运动员信息的录入;2、排序函数 按照题目的具体要求实现的是单项成绩的排序以及名次显示,其中总成绩相同者名次相同;3、添加运动员成绩函数 可以实现对运动员按项目添加成绩除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。每一个运动员的记录都包括序号、系别、姓名、年龄、性别以及短跑、跳高和游泳三项比赛成绩,在程序当中,将运动员记录类型定义为结构体类型,添加的运动员信息直接写入E盘的stude
4、nt.dat文件中,其他函数每次对运动员记录的访问,其数据来源都是student.dat文件,这样做不但可以保证运动员数据的一致性,而且可以对运动员数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图1、程序总体结构图2、具体功能框图(1)添加学生数据函数add()图2 添加学生数据函数(2)读取学生数据reads图3读取运动员数据(4)按总分排序函数sort()图5单项成绩排序函数三、核心技术的实现说明及相应程序段本程序主要由九个自定义函数和一个主函数组成,其中主函数以主菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,添加运动员信息函数、添加运动员成绩函数和排序
5、函数是程序中的核心部分,下面分别进行说明。1、 添加信息数据函数add()添加信息数据函数是按照运动员来添加信息,先将运动员编号,然后依次输入系别、姓名、年龄和性别,并且输入的信息将被储存在E盘的student.dat文件中,不会丢失。具体的程序段如下:void add()/*添加学生信息*/FILE *fp; int n,i,j; struct student stu; if(fp=fopen(e:student.dat,rb+)!=NULL) /*读写方式打开文件*/ j=getw(fp); rewind(fp); printf(请输入要添加的运动员数量,按回车键确认:); scanf(%
6、d,&n); putw(j+n,fp); fseek(fp,0L,2); for(i=1;i=n;i+) printf(n请输入第%d个运动员的序号、系别、姓名、性别、年龄,用空格分开,并按回车键确认:n,i);scanf(%s%s%s%s%f,&stu.num,&stu.xibie,&stu.name,&stu.sex,&stu.age); fwrite(&stu,sizeof(struct student),1,fp); else if(fp=fopen(e:student.dat,wb)!=NULL) printf(请输入要添加的运动员数量,按回车键确认:); scanf(%d,&n);
7、 putw(n,fp); for(i=1;i=n;i+) printf(n请输入第%d个运动员的序号、系别、姓名、性别、年龄,用空格分开,并按回车键确认:n,i);scanf(%s%s%s%s%f,&stu.num,&stu.xibie,&stu.name,&stu.sex,&stu.age); fwrite(&stu,sizeof(struct student),1,fp); fclose(fp);2添加运动员成绩函数change()此函数的作用为添加短跑、跳高和游泳三项比赛成绩,数据同样会被存入student.dat文件中。具体的程序段如下:void change()struct stud
8、ent stuN,temp; int n,i; FILE *fp; printf(n请输入要输入信息的运动员的序号,按回车键确认:); scanf(%s,&temp.num); reads(stu,&n); for(i=0;i=n) printf(无此运动员信息!n); return; printf(n请输入运动员的短跑、跳高和游泳三项成绩,按回车键确认:n); scanf(%f%f%f,&temp.race,&temp.jump,&temp.swimming); strcpy(stui.name,temp.name); stui.race=temp.race; stui.jump=temp.
9、jump; stui.swimming=temp.swimming; if(fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!); return; putw(n,fp); for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp); fclose(fp);3排序函数sort()该函数实现的是三个项目的单项成绩排序。程序首先由一个菜单进入,此时可以选择要排序的项目,按要求操作即可完成排序,排序后的结果将连同名次显示在屏幕上。具体的程序段如下:void sort()/*排序*/ int k; prin
10、tf(*请输入要排序的项目的序号*n); printf( 1.短跑 n); printf( 2.跳远 n); printf( 3.游泳 n); scanf(%d,&k); switch(k) case 1: order1();break; case 2: order2();break; case 3: order3();break; default: printf(输入错误,请输入列表中存在的序号!n ); void order1() FILE *fp; struct student stuN,temp; int i,j,n; reads(stu,&n); for(i=0;in-1;i+) f
11、or(j=0;jn-1-i;j+) if(stuj.racestuj+1.race) strcpy(temp.xibie,stuj.xibie); strcpy(temp.name,stuj.name); temp.race=stuj.race; strcpy(stuj.xibie,stuj+1.xibie); strcpy(stuj.name,stuj+1.name); stuj.race=stuj+1.race; strcpy(stuj+1.xibie,temp.xibie); strcpy(stuj+1.name,temp.name); stuj+1.race=temp.race;if(
12、fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!); return; putw(n,fp); j=1; for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp);if(stui.race=stui+1.race)printf(n%3d%5s%5s%8.2fn,j,stui.xibie,stui.name,stui.race);elseprintf(n%3d%5s%5s%8.2fn,j+,stui.xibie,stui.name,stui.race); fclose(fp); void orde
13、r2() FILE *fp; struct student stuN,temp;int i,j,n; reads(stu,&n); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.jumpstuj+1.jump) strcpy(temp.xibie,stuj.xibie); strcpy(temp.name,stuj.name); temp.jump=stuj.jump; strcpy(stuj.xibie,stuj+1.xibie); strcpy(stuj.name,stuj+1.name); stuj.jump=stuj+1.jump; strcp
14、y(stuj+1.xibie,temp.xibie); strcpy(stuj+1.name,temp.name); stuj+1.jump=temp.jump; if(fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!); return; putw(n,fp); j=1; for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp);if(stui.jump=stui+1.jump) printf(n%3d%5s%5s%8.2fn,j,stui.xibie,stui.name,stui.jump)
15、; elseprintf(n%3d%5s%5s%8.2fn,j+,stui.xibie,stui.name,stui.jump); fclose(fp); void order3() FILE *fp; struct student stuN,temp; int i,j,n; reads(stu,&n); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.swimmingstuj+1.swimming) strcpy(temp.xibie,stuj.xibie); strcpy(temp.name,stuj.name); temp.swimming=stu
16、j.swimming; strcpy(stuj.xibie,stuj+1.xibie); strcpy(stuj.name,stuj+1.name); stuj.swimming=stuj+1.swimming; strcpy(stuj+1.xibie,temp.xibie); strcpy(stuj+1.name,temp.name); stuj+1.swimming=temp.swimming; if(fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!); return; putw(n,fp); j=1; for(i=0;in;i+) fwrit
17、e(&stui,sizeof(struct student),1,fp);if(stui.swimming=stui+1.swimming)printf(n%3d%5s%5s%8.2fn,j,stui.xibie,stui.name,stui.swimming); elseprintf(n%3d%5s%5s%8.2fn,j+,stui.xibie,stui.name,stui.swimming); fclose(fp); 四、个人总结通过这次课程设计,让我复习了所学过的C语言知识,使知识得到实际应用,并发现了许多以前学习的不足。这次课设让我深深体会到,制作程序态度一定要认真,要本着细致严谨的作
18、风,因为一个微小的失误就可以导致整个程序的混乱。这次课设不仅锻炼了我们的思维,还增强了我们的分析问题能力。五、参考文献1谭浩强C程序设计北京:清华大学出版社.2005年2黄 明. C语言课程设计. 北京:电子工业出版社. 2006年3. 郭翠英. C语言课程设计案例精编. 北京:中国水利水电出版社. 2004年六、源程序#include#include#include#define N 20struct studentchar num10; char xibie20; char name10; char sex10; int age; float race; float jump; float
19、 swimming;void menu();void reads();void add();void sort();/*排序*/void change();void order1();void order2();void order3();void main() int n; while(1) menu(); printf(n 请输入您要选择的操作序号,按回车键确认:); scanf(%d,&n); switch(n) case 1: add();break; case 2: change();break; case 3: sort();break; case 4: exit(0);break
20、; default: printf(输入错误,请输入列表中存在的序号!n ); void menu()printf( *运动会成绩管理系统* ); printf(n 1 添加运动员信息); printf(n 2 添加运动员成绩); printf(n 3 单项成绩排序); printf(n 4 退出);void add()/*添加学生信息*/FILE *fp; int n,i,j; struct student stu; if(fp=fopen(e:student.dat,rb+)!=NULL) j=getw(fp); rewind(fp); printf(请输入要添加的运动员数量,按回车键确认
21、:); scanf(%d,&n); putw(j+n,fp); fseek(fp,0L,2); for(i=1;i=n;i+) printf(n请输入第%d个运动员的序号、系别、姓名、性别、年龄,用空格分开,并按回车键确认:n,i); scanf(%s%s%s%s%f,&stu.num,&stu.xibie,&stu.name,&stu.sex,&stu.age); fwrite(&stu,sizeof(struct student),1,fp); else if(fp=fopen(e:student.dat,wb)!=NULL) printf(请输入要添加的运动员数量,按回车键确认:); s
22、canf(%d,&n); putw(n,fp); for(i=1;i=n;i+) printf(n请输入第%d个运动员的序号、系别、姓名、性别、年龄,用空格分开,并按回车键确认:n,i); scanf(%s%s%s%s%f,&stu.num,&stu.xibie,&stu.name,&stu.sex,&stu.age); fwrite(&stu,sizeof(struct student),1,fp); fclose(fp);void reads(struct student stuN,int *n) FILE *fp; int i=0; if(fp=fopen(e:student.dat,r
23、b)=NULL) printf(文件打开失败!n); return; else *n=getw(fp); for(i=0;i*n;i+) fread(&stui,sizeof(struct student),1,fp); fclose(fp);void change()struct student stuN,temp; int n,i; FILE *fp; printf(n请输入要输入信息的运动员的序号,按回车键确认:); scanf(%s,&temp.num); reads(stu,&n); for(i=0;i=n) printf(无此运动员信息!n); return; printf(n请输
24、入运动员的短跑、跳高和游泳三项成绩,按回车键确认:n); scanf(%f%f%f,&temp.race,&temp.jump,&temp.swimming); strcpy(stui.name,temp.name); stui.race=temp.race; stui.jump=temp.jump; stui.swimming=temp.swimming; if(fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!); return; putw(n,fp); for(i=0;in;i+) fwrite(&stui,sizeof(struct stud
25、ent),1,fp); fclose(fp);void sort()/*排序*/ int k; printf(*请输入要排序的项目的序号*n); printf( 1.短跑 n); printf( 2.跳远 n); printf( 3.游泳 n); scanf(%d,&k); switch(k) case 1: order1();break; case 2: order2();break; case 3: order3();break; default: printf(输入错误,请输入列表中存在的序号!n ); void order1() FILE *fp; struct student stu
26、N,temp; int i,j,n; reads(stu,&n); for(i=0;in-1;i+) for(j=0;jn-1-i;j+) if(stuj.racestuj+1.race) strcpy(temp.xibie,stuj.xibie); strcpy(temp.name,stuj.name); temp.race=stuj.race; strcpy(stuj.xibie,stuj+1.xibie); strcpy(stuj.name,stuj+1.name); stuj.race=stuj+1.race; strcpy(stuj+1.xibie,temp.xibie); strc
27、py(stuj+1.name,temp.name); stuj+1.race=temp.race;if(fp=fopen(e:student.dat,wb)=NULL) printf(打开文件失败!); return; putw(n,fp); j=1; for(i=0;in;i+) fwrite(&stui,sizeof(struct student),1,fp);if(stui.race=stui+1.race)printf(n%3d%5s%5s%8.2fn,j,stui.xibie,stui.name,stui.race);else printf(n%3d%5s%5s%8.2fn,j+,stui.xibie,stui.name,stui.race); fclose(fp); void order2() FILE *fp; struct student stuN,temp;int i,j,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1