1、0课 程 设 计 任 务 书课 程 设 计 任 务 书 题目:运动会成绩管理系统(1)题目:运动会成绩管理系统(1)一、课程设计时间一、课程设计时间共计 1 周,20 学时。二、课程设计内容二、课程设计内容用 C 语言编写软件完成以下任务:1 录入运动员信息;2 按所参加的项目添加成绩;3 某一项目按成绩排名。三、课程设计要求三、课程设计要求1.程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“运动员信息录入”、“按项目添加成绩”、“按成绩排名(某一项目)”、“退出”4 项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。2.课程设计说明书
2、:课程结束后,上交课程设计说明书和源程序。课程设计说明书的格式和内容参见提供的模板。四、指导教师和学生签字四、指导教师和学生签字指导教师:指导教师:_ 学生签名:学生签名:_五、说明书成绩五、说明书成绩目目 录录一、需求分析一、需求分析.1二、程序流程图二、程序流程图.2三、核心技术的实现说明及相应程序段三、核心技术的实现说明及相应程序段.4四、课设总结四、课设总结.8五、源程序五、源程序.90一、需求分析一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为十一个模块,每一个模块对应一个函数。在这些函数当中,添加运动员数据函数,删除数据函数,某项成绩排序函数的实现严格按照题目的
3、要求,而更改数据函数和显示函数属于附加功能。读取文件函数和保存信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。1.添加运动员数据函数 主要实现程序最初运行时运动员数据的录入以及其后的运行中学生数据的追加功能;2.删除运动员数据函数 实现的功能是按照号码对运动员的数据记录进行删除;3.排序函数 按照题目的具体要求实现的是某项成绩的递减排序以及名次显示,其中总成绩相同者名次相同;4.更改数据函数 可以实现对运动员的各项信息进行修改;5.显示函数 实现的是显示目前所有的有效运动员记录信息。除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并
4、根据需要终止程序的执1行。每一个运动员记录都包含号码、姓名,以及百米赛跑、三级跳和撑杆跳三门成绩,在程序当中,将运动员记录类型定义为结构体类型,添加以及追加的运动员信息直接写入 E 盘的 student.txt文件中,其它函数每次对运动员记录的访问,其数据来源都是student.txt 文件,这样做不但可以保证运动员数据的一致性,而且可以对运动员数据进行永久保存,保证每次运行程序都可以采用原来的数据。二、程序流程图二、程序流程图1.程序总体结构图2 当 1 真 输入值 n=1?假 真 n=2?假真n=3?假 真 n=4?假 真n=5?假真?假 添 加运 动员 信息 函数add()显示运动员信息
5、函数show()删 除函 数del()更 新 函数change()百 米排 序函 数sort()三 级跳 排序sort()n=7?真 假撑杆跳 排序 退出函数Sort()图 1 程序总体结构图2.排序功能框图排序函数 sort3当 jn-1-i 时j+循环变量i=0第j个运动员成绩第j+1个运动员成绩真假交换两个运动员信息 j+i+当in-1时i=0当 in 时输出运动员信息和排名情况i+n=reads(stu)调用更新文件函数save(stu,n)j=0成绩排序三、核心技术的实现说明及相应程序段三、核心技术的实现说明及相应程序段本程序主要由 10 个自定义函数和一个主函数组成,其中主函数以菜
6、单的形式调用其它函数来实现要求的所有功能。在这些函数当中,添加学生数据函数、删除数据函数和排序函数是程序中较为核心的部分,下面分别进行说明。1.添加数据函数4添加数据分为两种情况,其一是在运动员文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的运动员信息写入该文件当中;其二是在运动员文件(student.txt)已经存在的情况下,此时文件以追加的方式打开,这样才可以保证以前已经存在的数据不丢失。具体的程序段如下:FILE*fp;int n,i;struct student stu;if(fp=fopen(e:student.txt,a)=NULL)/如果文件已经
7、存在,可以追加学生信息如果文件已经存在,可以追加学生信息 if(fp=fopen(e:student.txt,w)=NULL)/文件不存在时,创建新文件,输入学生信息文件不存在时,创建新文件,输入学生信息 printf(文件打开失败!文件打开失败!n);return;printf(请输入要添加的运动员数量,按回车键确认:请输入要添加的运动员数量,按回车键确认:);scanf(%d,&n);for(i=1;i=n;i+)printf(n 请输入第请输入第%d 个运动员的号码、姓名,用空格分开,并按回车键确认:个运动员的号码、姓名,用空格分开,并按回车键确认:n,i);scanf(%s%s,stu
8、.num,stu.name);printf(n 请输入第请输入第%d 个运动员的百米赛跑、三级跳和撑杆跳三项成绩,用空格分开,并按回车键确认:个运动员的百米赛跑、三级跳和撑杆跳三项成绩,用空格分开,并按回车键确认:n,i);scanf(%f%f%f,&stu.baimi,&stu.sanjitiao,&stu.chenggantiao);5 fprintf(fp,%s%s%f%f%fn,stu.num,stu.name,stu.baimi,stu.sanjitiao,stu.chenggantiao);fclose(fp);2.删除数据函数该函数的核心内容是删除算法以及最终对源文件的更新。该函
9、数执行时,首先调用 reads 函数将文件中的运动员信息读入数组当中,并由用户输入待删除运动员的号码,而后按照该号码进行查找,如果文件中存在该运动员的数据,则采用删除算法删除,否则输出运动员信息不存在的提示信息。对运动员信息的具体删除算法是在结构体数组中实现的,当运动员的信息被找到后,位于数组中该学生后面的运动员记录依次向前移动一个元素的位置,这些操作完成后,要删除运动员信息就被后面的数组元素覆盖掉了,也就实现了删除。在数组中删除运动员信息后,还要将更改后的信息重新写回文件当中,以保证数据的一致性。具体程序段如下:struct student stuN;char number20;int n,
10、i,j;n=reads(stu);printf(n 请输入要删除信息运动员号码,按回车键确认:);scanf(%s,number);for(i=0;i=n)printf(没有找到该运动员信息!n);return;else for(j=i+1;jn;j+)stuj-1=stuj;save(stu,n-1);printf(删除成功!n);3.总分排序函数对于某项的排序采用的排序算法是冒泡法排序,整个排序过程在结构体数组 stu 中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。排序函数使运动员数据的排列顺序发生了变化,因此也需要对源文件进行更新。此外,对于运动员排
11、序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下(由于各项成绩排序函数相同,所以只给出百米赛跑排名程序):void sort()/按百米赛跑成绩排名struct student stuN,temp;int i,j,n;n=reads(stu);7for(i=0;in-1;i+)for(j=0;jn-1;j+)if(stuj.baimistuj+1.baimi)temp=stuj;stuj=stuj+1;stuj+1=temp;save(stu,n);j=1;printf(*百米赛跑成绩排序结果如下*nn);printf(名次 号码 姓名 百米赛跑 成绩 n);
12、printf(*n);for(i=0;in;i+)/输出结果并排名 if(stui.baimi=stui+1.baimi)printf(n%3d%12s%11s%11.2f%11.2f%11.2f%11.2fn,j,stui.num,stui.name,stui.baimi,stui.baimi);else printf(n%3d%12s%11s%11.2f%11.2f%11.2f%11.2fn,j+,stui.num,stui.name,stui.baimi,stui.baimi);getch();四、课设总结四、课设总结这是大学以来的第一次上课程设计,感受很多,收获也很多。其中最重要的是做
13、什么事都要自己动手,动脑。不要依赖同学,8只有这样才能增长自己的知识,同时也对 C 语言有了进一步的了解和认识,以前许多不懂得地方,通过这次课设都懂了。在做程序时,很是费脑筋,幸亏有老师的参考程序,给了不少的帮助,使得课程设计顺利的完成。五、源程序五、源程序#include#include#includeconio.h#define N 20struct studentchar num20;char name10;float baimi;float sanjitiao;float chenggantiao;void menu();int reads(struct student stuN);v
14、oid save(struct student stuN,int n);void add();void del();void sort();void keep();void sheep();void query();void show();void change();void main()int n;while(1)9 menu();printf(n 请输入您要选择的操作序号,按回车键确认:);scanf(%d,&n);switch(n)case 1:add();break;case 2:show();break;case 3:del();break;case 4:change();break
15、;case 5:sort();break;case 6:keep();break;case 7:sheep();break;case 8:exit(0);default:printf(输入错误,请输入列表中存在的序号!n);void menu()printf(*运 动 员 成 绩 管 理 系 统*);printf(n O(_ )O 1 添 加 运 动 员 数 据 O(_)O);printf(n O(_ )O 2 显 示 运 动 员 数 据 O(_)O);printf(n O(_ )O 3 删 除 运 动 员 数 据 O(_)O);printf(n O(_ )O 4 更 改 运 动 员 数 据
16、O(_)O);printf(n O(_ )O 5 百 米 成 绩 排 序 O(_)O);printf(n O(_ )O 6 三 级 跳 成 绩 排 序 O(_)O);printf(n O(_ )O 7 撑 杆 跳 成 绩 排 序 10O(_)O);printf(n O(_ )O 8 退 出 O(_)O);printf(n (_)(_)(_)(_)(_)(_)(_);int reads(struct student stuN)/读取运动员文件中的内容 FILE*fp;int i=0;if(fp=fopen(e:student.txt,r)=NULL)printf(文件打开失败!n);return 0;else for(i=0;!feof(fp);i+)fscanf(fp,%s%s%f%f%fn,stui.num,stui.name,&stui.baimi,&stui.sanjitiao,&stui.chenggantiao);fclose(fp);return i;void save(struct student stuN,int n)/运动员信息改变后更新文件 FILE*fp;int
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1