您的当前位置:首页正文

运动会分数统计报告模板.参考例子

2024-06-10 来源:小奈知识网


南京邮电大学 通达学院

2019/2020学年第1学期 《Windows编程》课程大作业报告

课题代号(单选)□课题1 □课题2 □课题3 □课题4 课题名称:_____________________________________________________ 小组成员人数(单选)□1人 □2人 □3人 □4人

学号___________________姓名________________________

课题完成时间:___________________________________

================以下部分为教师填写区,请勿填写================= 成绩评定:

软件基本功能_______ 软件提高功能______ 软件部分成绩________ 文档结构___________ 文档撰写__________ 文档部分成绩________

总成绩_____________

备注__________________________________________________________

运动会分数统计

一、 课题内容和要求

课题名称:运动会分数统计

内容和要求:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)。

1 / 31

二、需求分析

可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

实现以下几个功能: 1. 添加学生 2. 统计信息

3. 按学校编号查询学校某个项目的情况

4. 可以按项目编号查询取得前三或前五名的学校 5. 显示学校信息 6. 显示项目信息

7. 删除保存在本地的文件 8. 保存数据文件

9. 显示所有项目的名次信息 10.

退出系统

2

三、概要设计

项目信息表结构

typedef struct xm_table{ int item;// 项目编号 char name[20];//项目名称 int count; //该项目得分人的数量 }XM_TABLE;

学生信息表结构 struct STUDENT{ char name[20]; int score; int range; int item; int sex; };

参赛学校信息结构

typedef struct SchoolStruct {

int count;

//计算实际运动员个数 //学校编号

//姓名 //得分成绩 //得分名次 //得分项目 //性别

int serial;

char Name[20];//学校名称 int menscore; //男子团体总分 int womenscore;//女子团体总分 int totalscore; //团体总分 int jifeng;

//学校积分

//参赛运动员

struct STUDENT students[10];

struct SchoolStruct *next; //下一个参赛学校

3

}SCHOOLSTRUCT; 统计信息结构

typedef struct TongJi {

int fs;//分数

SCHOOLSTRUCT *psch;//学校地址 struct STUDENT *pstu;//学生信息地址 }TONGJI;

4

1. 添加学生功能

开始 输入学校编号 Y 继续选择学校 返回主菜单或继续选择学校 该学校人数已满? N 返回主菜单 输入学生姓名 输入项目编号 输入输入项目成绩 Y 继续添加学生? N 结束 5

2.统计信息功能

开始 显示统计菜单 输入菜单编号 调用相应的函数执行 结束 6

3. 按学校编号查询学校某个项目的情况

开始 输入学校编号 输入项目编号 根据输入的学校编号和项目编号查找出对应的信息 输出信息 结束 7

4.可以按项目编号查询取得前三或前五名的学校

开始 调用函数刷新排序计算结果 输入项目编号 根据输入的项目编号找到统计的信息 输出相应的信息 结束 8

5.显示学校信息

开始 输出所有学校编号,名称,参赛人数 结束 9

6.显示项目

开始 输出所有项目编号,名称,参赛人数 结束 10

7.删除文件

开始 N 存在数据文件 Y 是否删除 N Y 执行删除 结束 11

8.保存文件

开始 执行保存操作 提示保存成功 结束 12

9.显示项目名次

开始 调用函数刷新排序计算结果 输出排序的结果 结束 13

10.退出系统

开始 显示退出界面 结束 14

四、详细设计

程序分为10个大模块:添加学生,统计信息,按学校编号查询学校某个项目的情况,可以按项目编号查询取得前三或前五名的学校,显示学校信息,显示项目信息,删除文件,保存文件,显示项目名次,退出系统。

同时还有3个小模块:初始化数据,排序计算,设置参数。

15

计算名次函数

思路:遍历学校链表,找出各项目的前3名或前5名,最后对每个项目的前几名降序排序 void MingCi() {

int i,j,z,k1,k2,min,max; TONGJI temp; SCHOOLSTRUCT *p;

tj=calloc(5*(M+N),sizeof(TONGJI)); //初始化tj for(i=0;ifor(j=0;j<5;j++) { }

for(p=h->next;p!=NULL;p=p->next) {

for(i=0;icount;i++)//每个学校有count个参赛学生信息 {

k1=xm[p->students[i].item-1].count;//该项目的得分人数,3或5 k2=p->students[i].item-1;//该项目编号-1 //找出现有项目中分数最小的 min=0;

for(j=1;jif(p->students[i].score>tj[k2*5+min].fs)

16

tj[i*5+j].fs=0; tj[i*5+j].pstu=NULL; tj[i*5+j].psch=NULL;

if(tj[k2*5+j].fsmin=j;

}

}

}

{ }

tj[k2*5+min].fs=p->students[i].score; tj[k2*5+min].pstu=&p->students[i]; tj[k2*5+min].psch=p;

//tj降序排序

for(i=0;ik1=xm[i].count;

for(j=0;jmax=j;

for(z=j+1;zif(tj[i*5+z].fs > tj[i*5+max].fs)

max=z;

if(max!=j) { }

temp=tj[i*5+max]; tj[i*5+max]=tj[i*5+j]; tj[i*5+j]=temp;

17

排序计算函数

思路:先将各项目名次确定,再计算各学校总积分,男女团体总分。 void Sort() {

int i,j,k1; SCHOOLSTRUCT *p;

int jf3[3]={5,3,2},jf5[5]={7,5,3,2,1}; //将名次写入学生参赛信息 MingCi();

for(i=0;ifor(p=h->next;p!=NULL;p=p->next) {

p->menscore=p->womenscore=p->totalscore=p->jifeng=0; for(i=0;icount;i++) {

if(p->students[i].sex)//男生

p->menscore += p->students[i].score;

k1=xm[i].count; for(j=0;jif(tj[i*5+j].pstu!=NULL)

tj[i*5+j].pstu->range=j+1;

else//女生

p->womenscore += p->students[i].score;

p->totalscore = p->menscore + p->womenscore ;//团体总分 //学校积分

if(p->students[i].range)

18

{ if(xm[p->students[i].item-1].count==3) {p->jifeng+=jf3[p->students[i].range-1];} else

{p->jifeng+=jf5[p->students[i].range-1];}

}

}

}

}

19

五、测试数据及其结果分析

开始界面

菜单界面

20

添加学生

统计信息菜单

21

按学校编号排序输出

按学校总分排序输出

22

按男子团体总分排序输出

按女子团体总分排序输出

23

按男女团体总分排序输出

按学校查项目情况

24

查询结果

按项目查找前几名

25

查询结果

参赛学校信息

26

所有项目信息

删除文件

27

所有项目名次信息

退出界面

28

六、调试过程中的问题

(1)刚开始碰到输入一个字符后,按下的回车键会被下一个待输入的字符接收,导致程序混乱。后来通过在输入字符后加fflush(stdin)来刷新缓冲。

(2)进行输入姓名等字符串时,若长度超过字符串数组长度,会出现错误。后来通过读取一个字符,就对其进行判断,并对输入的字符个数进行监控,超过字符串数组长度时,对接收的字符不响应。

(3)刚开始设计的保存函数,总是出错,后来发现保存完一个后,没有关闭文件指针。加了fclose(fp)函数后,问题就解决了。

29

七、大作业报告总结

通过本次的课程程序设计,应用VC++6.0软件进行程序的调试验证,把学习过的C语言知识进行了实践,对知识还进行了进一步的掌握,同时加深了对VC++6.0软件的熟练程度。

30

因篇幅问题不能全部显示,请点此查看更多更全内容