实验题目:运动会成绩模拟统计
- 实验目的
- 增强分析问题,解决问题的能力
- 建立模块化程序设计能力
- 掌握查找排序方法。
- 课题要求
- 该系统应具有合理的界面设计,并易于操作;
- 编码风格良好;
- 该系统用控制台程序即可实现;
- 编程语言为C语言,编程环境为devc++。
- 需求分析
为推动学校体育工作的开展,计算机科学技术学院将在近期举办院运会。本届运动会只设学生组,比赛项目为田径、游泳、篮球、排球、足球、武术、健美操、兵乓球8项。
名次奖励
田径、游泳、健美操、武术
1.各单项按成绩分别录取前8名,报名不足8人(队)的比赛项目,按实际参赛人(队)数减一录取名次。
2.各单项录取前8名的运动员,分别按9、7、6、5、4、3、2、1计分。
3.按各班级运动员名次得分总和,录取奖励班级总分前8名;如遇积分相等,以班级名排序。
对获得各项总分前8名的运动队,分别颁发奖杯。
- 篮球、排球、足球
1.录取名次:分别录取男子组、女子组前8名。
2.奖励:对获得前8名的运动队颁发奖杯,对获得前3名的运动员颁发奖牌,对获得前8名的运动员颁发成绩证书。
- 乒乓球
1.录取名次:各单项均分别录取前8名,报名不足8人(队)的比赛项目,则按照实际参赛人数减一录取。
2.奖励:
对获得各单项前3名的运动员颁发奖牌;前8名的运动员颁发成绩证书。
团体总分奖
1.对团体总分前8名的代表团按名次颁发一等奖奖杯,获得9-18名的代表团颁发不分名次的二等奖奖杯,其余代表团颁发不分名次的优胜奖奖杯。
2.代表团团体总分为本代表团运动员在参加所有比赛项目中所取得名次的总分,各比赛项目名次得分规定如下:
(1)田径、游泳、武术、健美操、乒乓球项目的名次得分:获得各单项前8名者,分别按9、7、6、5、4、3、2、1计入代表团团体总分。
(2)篮球、排球、足球项目的名次得分:获得该项目录取名次的各队,按田径各单项相应名次得分的2倍计入代表团团体总分。
- 具体运动会成绩模拟统计的实现要求
程序运行后,首先进行登陆,登录成功后显示菜单:
其中每个菜单项的详细设计要求:
1.密码修改模块
用户登录成功后可以进行密码修改。在修改密码前首先要求输入原密码,只有原密码输入正确的前提下才可以进行,并把修改结果写入user.txt文件。
2.比赛成绩浏览
当选择比赛成绩浏览时,显示如下菜单:
其中有两种浏览内容:
团队信息:效果如下图。
运动员信息:效果如下图(对其中的数据也可以按班级排序后呈现)
3. 添加数据模块
每有一场比赛结束,公布成绩后将进行成绩的录入,即数据添加。在系统设计时需设计两个文本文件运动员文件(player.txt)和团队文件(team.txt)。其中运动员文件中的数据可以不进行排序,但团队文件中的数据始终按团队总分排序呈现。
数据添加分为两种情况,一是上述文件(player.txt和team.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的对应信息信息写入对应文件当中;二是上述文件(player.txt和team.txt)已经存在的情况下,此时文件以追加的方式打开,这样可以保证以前已经存在的数据不丢失。
注意:
- 在添加成绩时,运动员信息和团队信息更新;
- 在添加成绩时,team.txt和player.txt文件同步更新。
4.修改信息
根据运动员号码查询并显示运动员信息。如果运动员号码不存在,输出对应提示信息。
如果存在,则根据实际情况对其信息进行对应修改。由于信息录入造成的错误可有许多种情况,但这里只考虑成绩录入错误。两文件中数据始终同步变化.
5.删除信息
由于某些原因,有些学生成绩无效,需要将其删除。同时检测删除该运动员成绩后其所在团队的成绩是否为0,如果为0,则删除该团队信息。两文件中数据始终同步变化。
6.退出
结束程序运行。
- 系统功能模块图
- 详细设计
- 各个结构体设计
struct Project {
char pro_name[50];
int rank;
int grade;
int used = 0;//0代表没这个项目,1代表有这个项目
};
struct Student {
char id[50];
char name[50];
Project pro[3];
int used = 0;//0代表没这个学生,1代表有这个学生
};
struct Class {
char class_name[50];
int sum = 0;
int rank=0;
Student stu[50];
};
- 各功能函数接口设计
void Init(); //文件读写
void MainMenu(); //主函数
void GradeMenu(); //浏览信息选项
bool Login(); //密码判定
void ModifyPwd(); //修改信息
void GradeManagment(); //管理密码修改
void AddGrade(); //添加信息
void ModifyPlayer(); //修改信息
void DelPlayer(); //删除信息
- 各模块流程图
- 源代码(部分展现)
-
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <algorithm> struct Project { char pro_name[50]; int rank; int grade; int used = 0;//0代表没这个项目,1代表有这个项目 }; struct Student { char id[50]; char name[50]; Project pro[3]; int used = 0;//0代表没这个学生,1代表有这个学生 }; struct Class { char class_name[50]; int sum = 0; int rank=0; Student stu[50]; }; Class class_s[10]; char User_Name[20]; void Init(); void MainMenu(); void GradeMenu(); bool Login(); void ModifyPwd(); void GradeManagment(); void AddGrade(); void ModifyPlayer(); void DelPlayer(); int main() { if (Login()) { Init(); int op; while (true) { MainMenu(); scanf("%d", &op); switch (op) { case 1: system("cls"); ModifyPwd(); break; case 2: system("cls"); GradeManagment(); break; case 3: system("cls"); AddGrade(); break; case 4: system("cls"); ModifyPlayer(); break; case 5: system("cls"); DelPlayer(); break; case 6: return 0; default: printf("没有该命令,请重新输入!\n"); break; } system("pause"); system("cls"); } } }
- 测试分析
- 测试数据