运动会计分系统程实验设计报告 本文关键词:计分,运动会,实验,报告,设计
运动会计分系统程实验设计报告 本文简介:重重庆庆文文理理学学院院计计算算机机科科学学与与技技术术专专业业数数据据结结构构课课程程设设计计报报告告题目:运动会计分系统班级:14级计算机科学与技术姓名:张张超超学号:2145827404221458274042起迄日期:2015年7月4日课程设计地点:格致楼格致楼A317A317指导教师:周周
运动会计分系统程实验设计报告 本文内容:
重重庆庆文文理理学学院院
计计算算机机科科学学与与技技术术专专业业
数数据据结结构构课课程程设设计计报报告告
题
目:
运
动
会
计
分
系
统
班
级:
14
级计算机科学与技术
姓
名:
张张
超超
学
号:
2145827404221458274042
起
迄
日
期:
2015
年
7
月
4
日
课程设计地点:
格致楼格致楼
A317A317
指导教师:
周周
建建
新新
评阅意见:评阅意见:
成绩评定:成绩评定:
评阅人:评阅人:
日期:日期:
完成日期:2015
年
7
月
5
日
目录目录
一.设计目的
.2
二、需求分析二、需求分析2
2
2.1
功能需求2
2.2
数据需求
.2
三.概要设计三.概要设计2
2
3.1
设计背景2
3.2
程序流程:3
四、详细设计四、详细设计4
4
4.1
运动会计分系统的主要结构4
4.1.14.1.1
结构定义结构定义4
4
4.1.24.1.2
主要函数声明及功能描述如下主要函数声明及功能描述如下5
5
4.2
源程序.10
4.2.14.2.1
头文件头文件
dssx14.hdssx14.h
1010
4.2.24.2.2
函数文件函数文件
dssx14.cdssx14.c
1515
4.2.34.2.3
主函数文件主函数文件
dssx14main.cdssx14main.c
1919
五五.
.程序测试结果及问题分析程序测试结果及问题分析2020
5.1
程序测试结果.20
5.2
问题分析:
23
六六.
.总结总结2323
七七.
.参考文献参考文献2424
第
2
页
一一.
.设计目的设计目的
1.
通过设计、编码、调试等各环节的训练,深刻理解、牢固掌握数据结构和算
法设计
技术,掌握分析、解决实际问题的能力。
2.
综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,
逐步
。
掌握软件开发的基本思想、方法和实现步骤,提高实际应用水平。
3.
初步树立正确的程序设计思想,培养分析问题、解决问题的能力,提高查询
资料和撰写书面文件的能力。
4.提高综合软件开发能力,体验项目开发流程,规范代码。
二、需求分析二、需求分析
2.12.1
功能需求功能需求
本系统主要是运动会分数统计方案设计。
运动会分数统计方案适合采用结构
体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成
绩输出、查询比赛成绩和调用统计结果。
本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的
时间内将运行结果稳定输出,就需要系统达到安全性能好,可靠性高,稳定性
强,处理数据迅速等特点。应具备一定的实用性。
2.22.2
数据需求数据需求
需要输入学校编号,项目编号,取得的名次,以及哪些名次
三.概要设计三.概要设计
3.13.1
设计设计背景背景
参加运动会有
n
个学校,学校编号为
1??n。比赛分成
m
个男子项目,和
w
个
女子项目。项目编号为男子
1??m,女子
m+1??m+w。不同的项目取前五名或
前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m
#include
#include
//数据结构的设计
//项目表结构//
typedef
struct
xm_table{
int
item;//项目编号
char
xm_name[20];//项目名称
int
selectCount;//获奖人数;取前五名或取前三名,则
5
或
3
}XM_TABLE;
//运动员信息表
//
typedef
struct
STUDENT{
char
studentName[20];//运动员姓名
int
score;//运动员成绩
int
range;//名次
int
item;//获奖项目编号
int
sex;//性别
}STUDENT;
//学校成绩信息表
typedef
struct
SCHOOL{
int
serial;//学校编号
char
schoolName[20];//学校名称
int
allCount;//获奖总人数
int
menScore;//男子总分
int
womenScore;//女子总分
int
allscore;//团体总分
int
jifeng;//总积分
STUDENT
student[41];//获奖学生:下标为
0
的单元不装数据,参赛项目不
超过
40
个
第
11
页
}SCHOOL;
//学校结点结构,单链表
typedef
struct
SchoolLink{
SCHOOL
school;
struct
SchoolLinknext;//下一个节点指针
}SchoolLink;
//功能函数声明///
//参数设置
/*功能:设置参赛学校数目、男子比赛项目数目和女子比赛项目数目
//输入:参赛学校数目、男子比赛项目数目和女子比赛项目数目
//输出:无/
void
setArgs();
//比赛项目信息设置
/*
功能:
输入:
输出:/
void
setXmInfo();
//生成空的学校信息单链表
/*
功能:生成一个带头结点的空学校信息单链表,每个参赛学校对应一个节点,
输入学校编号,名称,并置其他成员值为空
输入:学校编号,名称
输出:单链表的头指针/
SchoolLinkcreat_SchoolLink();
//向学校信息单链表添加一个获奖学生的获奖信息
/*
功能:向学校信息单链表添加一个获奖学生的获奖信息,并修改学校得分和积
分
输入:获奖学生的姓名,性别,参赛编号,成绩和名次
输出:无/
void
Add_One_StudentScore(SchoolLink);
//添加所有获奖学生成绩
/*
功能:调用
void
Add_One_StudentScore(SchoolLink);添加所有获奖学生成绩
输入:
输出:
第
12
页/
void
Add_All_StudentScore(SchoolLink);
//汇总各学校的总成绩
/*
功能:依次统计各学校的总成绩,包括团体总,男女总分和总积分
输入:
输出:/
void
Cal_SchoolScore(SchoolLink);
//向屏幕输出比赛成绩数据
/*
功能:向标准输出设备输出数据,包括各个学校的各项总成绩,总积分和获奖
学生信息
输入:
输出:/
void
Print_All_Score(SchoolLink);
//查找类算法
//按项目编号查询取得前三或前五名的学校
/*
功能:按项目编号查询取得前三或前五名的学校
输入:学校比赛信息单链表的头指针,查找的项目编号
输出:/
void
Find_Xm_ID(SchoolLink,int
xm_ID);
//按学校编号查询学校某个项目的情况
/*
功能:按学校编号查询学校某个项目的情况
输入:学校比赛信息单链表的头指针,查找的项目编号,学校编号
输出:/
void
Find_School_Xm(SchoolLink,int
School_ID,int
xm_ID);
//排序类
//按团体总分排序
/*
功能:按团体总分排序
输入:
输出:/
void
SortByTotlscore(SchoolLink);
//按男子总分排序
/*
功能://按男子总分排序
输入:
第
13
页
输出:/
void
SortByMenscore(SchoolLink);
//按女子总分排序
/*
功能:按女子团体总分排序
输入:
输出:/
void
SortByWomenscore(SchoolLink);
//按总积分排序
/*
功能:按总积分排序
输入:
输出:/
void
SortByJiFeng(SchoolLink);
//导入原始数据类
//从文件导入参数
/*
功能:从文件导入参赛学校数目,男子比赛项目数目和女子比赛项目数目
输入:当前目录下文件:args.txt
输出:无/
void
ImportArgs();
//从文件导入比赛项目
/*
功能:从文件导入比赛项目
输入:当前目录下文件:xminfotable.txt
输出:无/
void
ImportXmInfo();
//从文件读入学校名称生成空的学校信息单链表
//从文件导入学校成绩总表
//导出类
/*
功能:生成一个带头结点的空学校信息单链表,每个参赛学校对应一个结点,
输入
学校编号、名称,并置其它成员值为空,学校名称从文件
allschool.txt
读入。
输入:学校编号、名称
输出:单链表的头指针/
SchoolLinkCreatSchoolLinkByFile();
//从文件导入学校成绩总表
第
14
页
/*
功能:从文件导入学校成绩总表
输入:从当前目录下文件:allscoretable.txt
导入
输出:无/
void
ImportStudentScore(SchoolLinkhead);
//导入按团体总分排序的成绩
/*功能:从文件导入已排序男子团体总分表并显示在屏幕上
输入:当前目录下文件:sortedtotalscoretable.txt
输出:无/
void
ImportSortedTotalscore();
//导入按男子团体总分排序的成绩
/*功能:从文件导入已排序男子团体总分表并显示在屏幕上
输入:当前目录下文件:sortedmenscoretable.txt
输出:无/
void
ImportSortedMenscore();
//导入按女子团体总分排序的成绩
/*功能:从文件导入已排序女子团体总分表并显示在屏幕上
输入:当前目录下文件:sortedwomenscoretable.txt
输出:无/
void
ImportSortedWomenscore();
//导入按总积分排序的成绩
/*功能:从文件导入已排序总积分表并显示在屏幕上
输入:当前目录下文件:sortedjftable.txt
输出:无/
void
ImportSortedJf();
//导出类
//void
ExportSchoolTable(SchoolLinkhead);
////////将团体总分排名导出到文件中/////////////////
/*功能:将团体总分排名导出到文件中
输入:
输出:当前目录下文件:sortedtotalscoretable.txt/
void
ExportSortedTotalscore(SchoolLinkhead);
////////将男子团体总分排名导出到文件中/////////////////
/*功能:将男子团体总分排名导出到文件中
输入:ExportMenscore
输出:当前目录下文件:sortedmenscoretable.txt
第
15
页/
void
ExportSortedMenscore(SchoolLinkhead);
////////将女子团体总分排名导出到文件中/////////////////
/*功能:将女子团体总分排名导出到文件中
输入:
输出:当前目录下文件:sortedwomenscoretable.txt/
void
ExportSortedWomenscore(SchoolLinkhead);
////////将总积分排名导出到文件中/////////////////
/*功能:将总积分排名导出到文件中
输入:
输出:当前目录下文件:sortedjftable.txt/
void
ExportSortedJf(SchoolLinkhead);
//登录类
/*
功能:输入用户名和密码,与文件
managers.txt
中的用户进行对比,如果是合
法用户,
则进入相应的界面(管理员权限(用整数
1
表示)进入后台界面,操作员权限
(用整数
0
表示)
进入前台界面,否则询问是否继续登录或退出系统,最多登录验证
3
次
输入:当前目录下文件
managers.txt,用户名和密码
输出:无/
void
login();
//菜单类
//前台菜单
void
reception();
//后台菜单
void
backstage();
4.2.2
函数文件
dssx14.c
//比赛项目信息设置
/*
功能:
输入:
输出:
第
16
页/
void
setXmInfo(){
int
i;
printf(“/n
请输入男子项目。“);
for(i=1;inext=(SchoolLink)malloc(sizeof(SchoolLink));
p-school.serial=i;
printf(“请输入
NO%d
学校的名称:“,i);
scanf(“%s“,p-school.schoolName);
p-school.allCount=0;
p-school.allscore=0;
p-school.jifeng=0;
p-school.menScore=0;
第
17
页
p-school.womenScore=0;
}
p-next=NULL;
return
head;
}
//向学校信息单链表添加一个获奖学生的获奖信息
/*
功能:向学校信息单链表添加一个获奖学生的获奖信息,并修改学校得分和积
分
输入:获奖学生的姓名,性别,参赛编号,成绩和名次
输出:无/
void
Add_One_StudentScore(SchoolLinkhead){
int
schoolid;
char
studentName[20];
int
sex;
int
xm_id;
int
score;
int
range;
SchoolLinkp;
printf(“/n
请输入获奖学生所在学校的
ID:“);
scanf(“%d“,printf(“/n
请输入获奖学生的姓名:“);
scanf(“%s“,//1
表示男生,0
表示女生
printf(“/n
请输入获奖学生的性别:“);
scanf(“%d“,printf(“/n
请输入获奖学生参赛项目的
ID:“);
scanf(“%d“,printf(“/n
请输入获奖学生的比赛成绩:“);
scanf(“%d“,printf(“/n
请输入获奖学生的比赛名次:“);
scanf(“%d“,//printf(“aaaaa“);
p=head-next;
//printf(“bbbbb“);
while(p){
if(p-school.serial==schoolid){
p-school.allCount++;
//printf(“ccccc“);
strcpy(p-school.student[p-school.allCount].studentName,studentName);
p-school.student[p-school.allCount].score=score;
p-school.student[p-school.allCount].range=range;
第
18
页
p-school.student[p-school.allCount].sex=sex;
p-school.student[p-school.allCount].item=xm_id;
}
//else
p=p-next;
}
}
//添加所有获奖学生成绩
/*
功能:调用
void
Add_One_StudentScore(SchoolLink);添加所有获奖学生成绩
输入:
输出:/
void
Add_All_StudentScore(SchoolLinkhead){
int
studentcount,i;
printf(“/n
输入获奖总人数:“);
scanf(“%d“,for(i=1;inext;
while(p){
for(i=1;ischool.allCount;i++){
第
19
页
totalscore+=p-school.student[i].score;//依次累加该校学生获奖分
数
if(p-school.student[i].sex)
menscore+=p-school.student[i].score;//依次累加该校男生获
奖分数
else
womenscore+=p-school.student[i].score;//依次累加该校女生
获奖分数
item_i=p-school.student[i].item;
if(xm_T[item_i].selectCount==5){//取前五名的积分
switch(p-school.student[i].range){
case
1:jf+=7;break;
case
2:jf+=5;break;
case
3:jf+=3;break;
case
4:jf+=2;break;
case
5:jf+=1;break;
}
}
if(xm_T[item_i].selectCount==3){//取前
3
名的积分
switch(p-school.student[i].range){
case
1:jf+=5;break;
case
2:jf+=3;break;
case
3:jf+=1;break;
}
}
}
p-school.jifeng=jf;
p-school.allscore=totalscore;
p-school.menScore=menscore;
p-school.womenScore=womenscore;
p=p-next;
menscore=0;
womenscore=0;
totalscore=0;
jf=0;
}
}
第
20
页
4.2.3
主函数文件
dssx14main.c
#include“dssx14.h“extern
int
SchoolCount=0;//参赛学校总数
extern
int
boyCount=0;//男生项目总数
extern
int
girlCount=0;//女生项目总数
extern
int
xmCount=0;//比赛项目总数
extern
XM_TABLE
xm_T[41];//比赛项目表
extern
SchoolLink
SchoolTable;
void
main(){
int
n,m=1;
while(m){
system(“cls“);
printf(“***************************欢迎使用运动会积分系统******************************/n“);
printf(“(1)前台服务(普通人员身份登录)/n“);
printf(“(2)后台服务(管理员身份登录)/n“);
printf(“(0)退出/n“);
printf(“请选择您的身份进行登录:“);
scanf(“%d“,switch(n){
case
1:
reception();
break;
case
2:
login();
break;
case
0:
m=0;
break;
default:
printf(“您的输入有误,任意键继续./n“);
getchar();
}
}
}
第
21
页
五五.
.程序测试结果程序测试结果及问题分析及问题分析
5.15.1
程序测试结果程序测试结果
主界面
前台服务界面
后台服务界面
第
22
页
学校成绩明细
第
23
页
团体总分排序
手工输入数据
5.25.2
问题分析:问题分析:
1、调试过程中我遇到的问题是:“您所引用的内存不能写!”通过对变量的调
整此问题得以解决。
2、上述算法的时间复杂度和空间复杂度较好,改进设想:将程序中所用到的变
量以数组形式代替大量变量名使相应算法用循环语句重新整合;
3、在设计与实现的过程中,我体会最深的一点是无论遇到多陌生的问题都要冷
第
24
页
静处理。
六六.
.总结总结
本程序主要用结构体和数组储存数据,通过循环套用和选择结构实现运动
会各项目各学院成绩的处理并输出。在设计程序过程中逐渐体验到数据结构对
程序实现的巨大作用,可以说数据结构使
C
程序更加灵活多变,功能更强大。
调试程序时无数次的失败也曾让我垂头丧气,但我咬牙坚持了下来。当一个问
题解决时,例如解决了在选择名次类
型和最后输出报表时发生冲突,我也体验
到了独立完成任务并解决问题的乐趣。本次课程设计给了我发挥能力的平台,
也使我的编程能力和调试能力得到了提高。
每一次的课程设计,都是让我们对原有的知识从了解表面到深入本质,从个
体学习到整体把握的跳跃,对新知识的汲取,更是把课本的知识应用到实际中,
让我们了解了我们的学习有什么用,能够解决什么样的问题,增加了自信和学
习的动力。
在这次综合项目开发中,我深刻的体验到了语句注释、代码整洁的重要性,
在大规模的程序开发中,代码的整洁清晰、注释是非常重要的。还有在本次项
目开发过程中我深刻的体验到了逻辑框架结构的重要性,将决定项目开发的每
一个分块是否能够一次性开发成功。坚持“自顶而下,逐步细化”的原则,成
功的完成了本项目的开发,我们需要这样的大型综合项目来进行练习。
总之,通过这次的课程设计,我们收获匪浅首先由衷感谢老师提供这样一
个锻炼自己的机会,感受到学来的知识不只是用来完成试卷的。一向惯于独立
思考的自己学会了积极的同同学、朋友交流,取长补短,共同进步。课程设计
使自己发现考试并不是最重要,最重要的是能运用所学的知识。在整个课程设
计的学习过程中,不再是用学到的知识解题,而是在实际运用时遇到什么学什
么,重在把知识应用于实际。
七七.
.参考文献参考文献
[1]严蔚敏,吴伟民.
《数据结构:C
语言版》
.北京:清华大学出版社,2010.3
[2]陈维兴,林小茶.C++面向对象程序设计教程.北京:清华大学出版社,2009.6
[3]谭浩强.C
语言程序设计(第二版).北京:清华大学出版社,2008.10