C++编程课程设计:运动会成绩查询系统
发布时间:2024-11-10
发布时间:2024-11-10
河南城建学院
课
程设
计
报告书
专 业:计算机科学与技术 课程设计名称:《数据结构课程设计》 题 目:xxx 班 级:xxx 学 号:xxx 姓 名:xxx 同 组 人 员: xxx 指 导 老 师:想xx
完 成 时 间:2012年2月17日
摘要
运动会成绩查询系统是运动会管理中的一个重要内容,随着时代的进步,参加运动会的运动员数量也不断增加、项目也越来越多、运动会举办也越来越频繁,对成绩的管理要求也越来越高。如何管理好各单位、运动员的成绩的信息,对运动会成绩管理系统的要求也越来越高,所以必须要不断地更新运动会成绩管理系统,才能满足社会日益发展的需要。
本文是采用VC++6.0作为前台开发工具,旨在实现对现有的运动会成绩数据库存储的基础上,提供信息咨询,信息检索,信息存取等服务,在此论文中主要实现对存储在数据库中的数据表进行这些简单的操作,为提高运动会成绩查询系统的效率提供了便利。
关键词:VC++6.0;运动会成绩查询;
目录
目录 ................................................................................................................................... 1 第一章
1.1
开发环境和开发工具 .......................................................................................... 1 C/C++语言简介 ................................................................................................... 1
1.2 开发背景 ................................................................................................................. 1 1.3 开发环境 ................................................................................................................. 1 第二章 算法思想 ............................................................................................................... 2
2.1 系统需求分析 ......................................................................................................... 2 2.2 系统总体设计 ......................................................................................................... 2
2.2.1 系统设计目标 ............................................................................................. 2 2.2.2 开发设计思想 ............................................................................................. 3 2.2.3 系统功能模块设计 ..................................................................................... 4 2.3 算法思想描述 ......................................................................................................... 4 第三章
算法实现 .............................................................................................................. 6
3.1 数据结构 ................................................................................................................. 6 3.2 程序模块 ................................................................................................................. 6 3.3 各模块之间的调用关系 ......................................................................................... 6 3.4 源程序代码 ............................................................................................................. 6 第四章
测试与分析 ........................................................................................................ 14
4.1 测试数据选择 ....................................................................................................... 14 4.2 测试结果分析 ....................................................................................................... 15 总 结 ............................................................................................................................. 20 心得体会 ............................................................................................................................. 21 参考文献 ..................................................................................................................... 22
第一章 开发环境和开发工具
1.1 C/ C ++语言简介
C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。
1.2 开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人
们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而人事管理的全面自动化、信息化则是其中重要的组成部分。人事管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。因此,本文所研究的人事管理信息系统具有一定的使用价值和现实意义。
1.3 开发环境
本文所采用的开发环境主要是基于C语言在Microsoft Visual C++平台上开发的系统,界面友好,功能强大,调试也很方便。这是微软出的一个C语言集成开发环境(IDE),主要有:VC++6.0等,分为企业版和学生版等。对于初学者VC++6.0是比较容易上手的,但其对标准支持的不好可能使人养成不良的编程习惯。
第二章 算法思想
2.1 系统需求分析
●数据结构不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基。
●本实验中,对不同的对象采取不同的存储结构,对参赛学校采取链式结构,而对于参赛运动员采取一个结构就可以了。本程序中主要用到线性表的一些基本操作,将各学校信息,运动员信息,项目信息都构造成线性表。具体功能通过主函数分别调用各函数实现。
●参考本实验的功能要求,本程序分为七个模块:主函数、信息录入函数、信息统计函数、信息查询函数,信息排序函数、存盘函数、读盘函数。
●信息录入函数有包括学校信息录入函数(包括学校总数、学校名称等),竞赛项目录入函数(男子竞赛项目总数、女子竞赛项目总数、竞赛项目名称、取名次方法和各名次对应的分值)、比赛结果录入函数(各名次的学生信息等)。
●信息统计不再结果中显示出来,为了信息查询和排序输出。
●信息查询函数包括按学校编号查询、按学校名称查询、按项目编号查询三个子函数。
●信息排序函数包括按男子总分排序函数、按女子总分排序函数、按团体总分排序函数。
2.2 系统总体设计
2.2.1 系统设计目标
本文研究开发的运动会管理系统用于支持用于查询各个学校在运动会中的
成绩。有几种目标:
●支持输入各个项目的前三名或前五名的成绩;
●能统计各学校总分;
●可以按学校编号或名称、学校总分、男女团体总分排序输出。
●可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
●数据存入文件并能随时查询
输入数据形式和范围:可以输入学校的名称,运动项目的名称;输出形式有提示,各学校分数为整形;界面要求有合理的提示,每个功能可以设立菜单,根 据提示,可以完成相关的功能要求。
●存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关
数据要存储在数据文件中。
●测试数据:要求使用全部合法数据、整体非法数据、局部非法数据。进行程序 测试,以保证程序的稳定。
2.2.2 开发设计思想
基于以上系统设计目标,本文在开发运动会管理系统时遵循了以下开发设计思想:
●采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
●尽量达到操作过程中的直观、方便、实用、安全等要求。
●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
●系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。 2.2.3 系统功能模块设计
本系统分为四个模块:输入成绩模块、计算成绩模块、分析排名模块、查询
模块。得到如图2-1所示的系统功能模块图。
图2-1系统功能模块图
2.3 算法思想描述
●本实验中,对不同的对象采取不同的存储结构,对参赛学校采取链式结构,而对于参赛运动员采取一个结构就可以了。本程序中主要用到线性表的一些基本操作,将各学校信息,运动员信息,项目信息都构造成线性表。具体功能通过主函数分别调用各函数实现。
●参考本实验的功能要求,本程序分为七个模块:主函数、信息录入函数、信息统计函数、信息查询函数,信息排序函数、存盘函数、读盘函数。
●信息录入函数有包括学校信息录入函数(包括学校总数、学校名称等),竞赛项目录入函数(男子竞赛项目总数、女子竞赛项目总数、竞赛项目名称、取名次方法和各名次对应的分值)、比赛结果录入函数(各名次的学生信息等)。
●信息统计不再结果中显示出来,为了信息查询和排序输出。
●信息查询函数包括按学校编号查询、按学校名称查询、按项目编号查询三
个子函数。
●信息排序函数包括按男子总分排序函数、按女子总分排序函数、按团体总分排序函数。
第三章 算法实现
3.1 数据结构
运动会管理系统是一个数据库应用系统,各个学校的所有信息都保存在数据库中。
3.2 程序模块
程序分为四个模块:输入成绩模块、计算成绩模块、分析排名模块、查询模块。
3.3 各模块之间的调用关系
输入成绩模块:让用户输入学校信息,比赛项目信息,比赛成绩信息。 计算成绩模块:计算用户输入的比赛成绩,计算男团分数、男团分数、总分。 分析排名模块:对学校的男团分、女团分和总分进行排名。
查询模块:让用户查询各学校成绩,男团排名,女团排名,总排名和各项目
的前几名。
模块调用关系:计算成绩模块调用输入成绩模块,分析排名模块调用计算成
绩模块,查询模块调用计算成绩模块、分析排名模块。
函数 函数功能 时间复杂度
Void information 输入信息建立系统 O(n*n) Void output 输出信息 O(n*n) Void inquiry 查询信息 O(n*n) Void main 输入主界面 ,调用各个函数 O(n*n)
3.4 源程序代码
#include<stdio.h> #include<math.h> #include <conio.h> #include <process.h>
#define n 3//学校数目 #define m 2//男子项目数目 #define w 1//女子项目数目 #define null 0
typedef struct {
int itemnum; //项目编号 int top; //取名次的数目 int range[5]; //名次 int mark[5]; //分数
}itemnode; //定义项目结点的类型
typedef struct {
int dai;
int schoolname;
int schoolnum; //学校编号 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分 itemnode c[m+w]; //项目数组 }headnode;//定义头结点类型
headnode h[n];//定义一个头结点数组
void inputinformation() //输入信息,建立系统 {
int i,j,k,s;
for(i=0;i<n;i++) {
h[i].score=0; h[i].mscore=0; h[i].wscore=0;
} // for(i=0;i<n;i++) {
printf("*****学校名称:");
scanf("%s",&h[i].schoolname); printf("*****学校编号:");
scanf("%d",&h[i].schoolnum); // for(j=0;j<m+w;j++) {
printf("*****项目编号:");
初始化头结点 输入头结点信息
scanf("%d",&h[i].c[j].itemnum); printf("*****取前3名or前5名:"); scanf("%d",&h[i].c[j].top); printf("*****获得几个名次:");
scanf("%d",&k); //输入项目信息 for(s=0;s<5;s++)
h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数 for(s=0;s<k;s++) {
printf("*****名次:");
scanf("%d",&h[i].c[j].range[s]); //输入所获名次信息 if(h[i].c[j].top==3)
switch(h[i].c[j].range[s]) {
case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=5; break; case 2: h[i].c[j].mark[s]=3; break; case 3: h[i].c[j].mark[s]=2; break; } else
switch(h[i].c[j].range[s]) {
case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=7; break; case 2: h[i].c[j].mark[s]=5; break; case 3: h[i].c[j].mark[s]=3; break; case 4: h[i].c[j].mark[s]=2; break; case 5: h[i].c[j].mark[s]=1; break; }
h[i].score=h[i].score+h[i].c[j].mark[s]; //按取前三名还是取前五名分别记分 if(j<=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是男子项目则记到男子分数里面去 else
h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是女子项目则记到女子项目里面去 }
printf("\n"); } } }
void output() //输出函数 {
int choice,i,j,k;
int sign; do {
printf("*******************1.按学校编号输出.*******************\n");
printf("*******************2.按学校名称输出.*******************\n");
printf("*******************3.按学校总分输出.*******************\n");
printf("*******************4.按男团总分输出.*******************\n");
printf("*******************5.按女团总分输出.*******************\n");
printf("\n\n******************* 请选择编号*************************\n\n:"); scanf("%d",&choice); switch(choice) {
case 1:
printf("学校编号 学校名称 学校总分 男团总分 女团总分\n"); for(i=0;i<n;i++) {
printf("%8d %8s %8d %8d %8d\n",h[i].schoolnum,h[i].schoolname,h[i].score,h[i].mscore,h[i].wscore);
} //按编号顺序输出 break;
case 2:
printf("学校名称 学校编号 学校总分 男团总分 女团总分\n"); for(i=0;i<n;i++) {
printf("%8s %8d %8d %8d %8d\n",h[i].schoolname,h[i].schoolnum,h[i].score,h[i].mscore,h[i].wscore);
} //按学校名称输出 break;
case 3:
printf("学校名次 学校总分 学校名称 学校编号 男团总分 女团总分\n");
for(i=0;i<n;i++) {
h[i].dai=h[i].score; }
for(i=0;i<n;i++) {
for(j=0;j<n-i;j++)
if(h[j].dai<h[j+1].dai) {
k=h[j].dai;h[j].dai=h[j+1].dai;h[j+1].dai=k; } }
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
if(h[j].score==h[i].dai)
printf("第%d名 %12d %8s %8d %8d %8d \n",i+1,h[j].score,h[j].schoolname,h[j].schoolnum,h[j].mscore,h[j].wscore); }
//按学校总分输出 break;
case 4:
printf("学校名次 男团总分 学校名称 学校编号 学校总分 女团总分\n");
for(i=0;i<n;i++)
h[i].dai=h[i].mscore; for(i=0;i<n;i++) {
for(j=0;j<n-i;j++)
if(h[j].dai<h[j+1].dai)
k=h[j].dai;h[j].dai=h[j+1].dai;h[j+1].dai=k; }
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
if(h[j].mscore==h[i].dai)
printf("第%d名 %12d %8s %8d %8d %8d \n",i+1,h[j].mscore,h[j].schoolname,h[j].schoolnum,h[j].score,h[j].wscore); }
//按男团总分输出 break;
case 5:
printf("学校名次 女团总分 学校名称 学校编号 学校总分 男团总分\n");
for(i=0;i<n;i++)
h[i].dai=h[i].wscore; for(i=0;i<n;i++) {
for(j=0;j<n-i;j++)
if(h[j].dai<h[j+1].dai)
k=h[j].dai;h[j].dai=h[j+1].dai;h[j+1].dai=k; }
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
if(h[j].wscore==h[i].dai)
printf("第%d名 %12d %8s %8d %8d %8d \n",i+1,h[j].mscore,h[j].schoolname,h[j].schoolnum,h[j].score,h[j].mscore); }
break; //按女团总分输出 }
printf("请选择 2 继续,0 跳出\n"); scanf("%d",&sign);
}while(sign==2); //循环执行输出语句 }
void inquiry() //查询函数 {
int choice; int i,j,k,s;
printf("\n*****1:按学校编号查询\n"); printf("\n*****2:按项目编号查询\n");
printf("\n\n*****请选择查询方式:"); //提供两种查询方式 scanf("%d",&choice); switch(choice) {
case 1: do
{
printf("要查询的学校编号:"); scanf("%d",&i); if(i>n)
printf("错误:这个学校没有参加此次运动会!\n\n\n"); else {
printf("要查询的项目编号:"); scanf("%d",&j); if(j>m+w||j==0)
printf("此次运动会没有这个项目\n\n\n"); //学校编号超出范围,则输出警告 else {
printf("这个项目取前 %d名,该学校的成绩如下:\n", h[0].c[j-1].top); for(k=0;k<5;k++)
if(h[i-1].c[j-1].range[k]!=0)
printf("名次:%d\n",h[i-1].c[j-1].range[k]); //输出要查询学校项目的成绩 } }
printf("请选择 2 继续 , 0 跳出\n"); scanf("%d",&s); printf("\n\n\n");
}while(s==2); //循环执行输出语句 break; case 2: do {
printf("要查询的项目编号:"); scanf("%d",&s); if(s>m+w||s==0)
printf("此次运动会不包括这个项目.\n\n\n"); //项目编号超出范围则输出警告 else {
printf("该项目取前 %d名,取得名次的学校\n",h[0].c[s-1].top); for(i=0; i<n;i++) for(j=0;j<5;j++)
if(h[i].c[s-1].range[j]!=0)
printf("学校编号:%d,名次:%d\n",h[i].schoolnum, h[i].c[s-1].range[j]);
} //输出该项目取得名次学校的成绩
printf("\n\n\n继续 2,跳出 0\n"); scanf("%d",&i); printf("\n\n\n");
}while(i==2); break; } }
void main() {
int choice;
printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n"); printf("\n\n********************1.输入信息*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n");
printf("********************4.退出系统*************************\n\n\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号:\n\n"); scanf("%d",&choice);
switch(choice) {
case 1:
inputinformation();main(); case 2:
output();main(); case 3:
inquiry();main(); case 4: exit(0); default:
printf("输入错误请重新输入!"); } }