课程设计报告
课程名称:高级语言程序设计课程设计
姓 名: ***************
班级学号: *************
指导教师: *************
完成日期: 2012/6/8
目录
1 课程设计目的与要求. 1
2 问题描述. 2
3总体设计. 3
3.1 功能分析. 3
3.2 系统使用的主要函数. 4
3.3 系统使用的主要数据结构. 6
4 详细设计. 8
4.1信息输入模块. 8
4.2结果录入模块. 10
4.3查询模块. 10
5功能测试. 11
5.1系统主界面. 11
5.2输入信息界面. 12
6 程序设计调试情况分析. 15
7 课程设计小结. 16
参考文献. 16
附录 系统源程序. 17
运动会管理系统
1 课程设计目的与要求
1.初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数;各项目名次取法有如下几种: ① 取前6名:第1名得分 7,第2名得分 5,第3名得分4,第4名得分3,第5名得分2,第5名得分1;② 取前3名:第1名得分 5,第2名得分 3,第3名得分2; ③ 用户自定义:各名次权值由用户指定;
2.由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息;
3.所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看参赛学校信息和比赛项目信息等。
2 问题描述
本课题是运动会管理系统的设计,改程序总共有分为信息输入,成绩录入和查询三个大的模块。在信息输入里边又包括了保存运动员信息,保存学校信息和保存比赛项目信息;在查询模块里有学校总体成绩查询,学生个人成绩查询。而且能自己选择排名办法,有取前5名的办法;取前七名的办法。当然了,用户可以根据自己的需求自定义选取办法。在信息输入完毕之后,可以录入运动会的得分情况,而且能够和刚刚输进去的信息一起存档。在最后的查询模块中可以查找出你想要得到的信息。
利用函数,实现了数据的输入,数据的处理,数据的输出,实现了运这个系统程序的设计,此程序就是针对所在的问题设计的。在设计过程中主要用了指针,函数定义,函数调用等知识。
随着各高等院校的不断扩招,其田径运动会的规模也随之扩大。运动会的组织和管理所需要的各种数据的报送,运动会过程各项事务处理的数据统计工作都显现出烦琐和效率低的状况。针对田径运动会信息管理的特点,使用现代化的管理手段完成其相关信息的处理工作,无论是对减轻繁重的手工劳动、提高工作效率、减少差错发生、节省费用开支,还是对提升管理水平、实现运动会管理的信息化和现代化都具有重要的现实意义。
在进行管理的方法和手段方面。最有效的工具就是电脑管理了。传统的人力管理存在着许多无法避免的问题,针对这些问题需要设计出运用计算机管理的信息系统。系统实现运动会的信息记录和存储,进行全面自动管理,大幅提高了管理效率,使得运动会能够更加圆满完成。因此,该程序显得尤为重要。
开发工具:Microsoft Visual C++ 6.0
3总体设计
3.1 功能分析
系统提供主界面,各种功能操作以独立的函数为基础,运用对链表操作的技术来实现通讯录的管理,同时对操作结果在计算机中做永久保存。
分析整个系统,根据以上的需求分析及题目要求,可将整个系统的设计分为以下五个模块:信息输入、录入比赛结果、查询信息、退出.
3.2 系统使用的主要函数
主函数一般设计的较为简洁,只提供输入、功能处理和输出部分的函数调用。其中各功能模块用菜单方式选择。另外菜单部分也可以写成函数。
void bsxm();
void csxx();
void Information();
void main();
void menu();
void printf_back();
void saveathlete();
void saveprogram();
void saveschool();
void savescore();
void Search();
void ttzf() ;
3.3 系统使用的主要数据结构
1、 struct athlete //定义运动员信息
{
char univ[5];
char name[8];
char prog[15];
char mingci[5];
int score;
}at[SIZE];
2、struct xuexiao //定义学校信息
{
char univ[5];
char prog[15];
int num_athlete;
}xx[N];
3、struct program //定义项目信息
{
char prog[5];
int quming;
char ath1[5];
char ath2[5];
char univ1[5];
char univ2[5];
}pro[WM];
4、struct zongfen //定义学校得分信息
{
char univ[5];
char prog1[5];
char prog2[5];
char prog3[5];
int score1;
int score2;
int score3;
int total_score;
}zf[N];
4 详细设计
4.1程序总体结构图
4.1.1主菜单
图4-1 程序总结构图
4.1.2输入信息模块
图4-2 输入信息模块图
4.1.3比赛结果录入
图4-3 信息输入部分流程图
4.2程序流程图
4.2.1查询模块
图4-4 查询模块流程图
5功能测试
5.1系统主界面
图5-1 系统主界面
5.2输入信息界面
、
图5-2 输入信息界面
图5-3 输入一名运动员后的截图
5.3查询模块界面
图5-4 查询模块界面
图5-5 查询团体总分
图5-6 查询参赛学校信息
图5-7 查询运动员信息
6 程序设计调试情况分析
在编程的过程中,经常会在语句结束时少“;”或者把中文输入的引号输入文件,很难发现错误所在。
在编程题时也出现了一些编译中的问题。例如,在开始未加头文件#include<string.h>导致有许多未定义的errors;在输入字符串时用到“%S”,使功能无法输出。
由于原来题目要求较少,题目较简单,在编译时,我先按照题目要求将它编写好,之后又给它添加了很多功能。在帮同学修改程序的过程中,也遇到过一个问题。在头文件后定义了子函数,可是之后忘了编写子函数,在纠错时,有的是不会发现错误的,但是连接过程中就会报告出错。我觉得在以后的编程过程中,最好用什么函数写什么函数,后者在写完一个子函数后再在头文件底下声明。
7 课程设计小结
通过这次课程设计我得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但是到真正用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。同时早设计的过程中发现了自己的不足之处,对以前学的知识理解不够深刻,掌握的不够牢固,比如说指针,编程时要养成良好的风格,注意相同的内容的缩进和对齐。这样做可以使程序代码出错的时候,可以快速的并且便捷的查找到错误的行,利于很好的修改。另外,有些知识学习的支离破碎,没有建立起知识框架来,就这次实训来说吧,思路蛮清晰的,一块一块的东西怎么做,思路也蛮清晰的,虽然遇到了知识上的问题,但是没有那么难解决。但是,当把所有的东西往一起融合,把各个模块还有主函数揉到一块时候,就开始有点傻眼了。从这次经历来看,我们目前在整体的去把程序结合这方面还是很欠缺的。所以,我觉得像这次的课程设计是很有意义很有用的。
在整个设计中,我懂得了许多东西,既培养了我团队合作的意识,让我明白了团体的力量,一个团体的合作分工到位的话可以大大的提高工作效率;也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。在此次课程设计中呢,也大大提高了我的动手能力,虽然面对的是一些代码,但是那是在考验你的智力,是在考验你的应变能力,使我充分的体会到了在创造的过程中探索的艰难和成功的喜悦。虽然这个课程设计还有很多不尽如人意的地方,但是在设计过程中所学到的东西是这次课程设计最大的收获和财富,是我终身受益。
小组成员分工
组长:尹其文 (BX1107 33) 负责信息输入模块
组员: 李冲 (BX1107 32) 负责结果录入模块
杨静远 (BX1107 21) 负责查询信息模块
参考文献
《C语言程序设计》 作者:吉顺如 出版社:清华大学出版社
《C语言程序设计》 作者 : 谭浩强 出版社 : 清华大学出版社
《C程序设计语言》 作者 : Brian W.Kernighan/Dennis M.Ritchie 出版社 : 清华大学出版社
.《 C标准库》 作者 : P. J. Plauger 出版社 : 人民邮电出版社
《C语言程序设计教程》(第3版) 作者 : 谭浩强 出版社:高等教育出版社
《C程序设计题解与上机指导》(第3版) 作者 : 谭浩强 出版社:清华大学出版社
附录 系统源程序
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 1
#define N 3
#define WM 3
void bsxm();
void csxx();
void Information();
void main();
void menu();
void printf_back();
void saveathlete();
void saveprogram();
void saveschool();
void savescore();
void Search();
void ttzf() ;
int i;
FILE *fp1,*fp2,*fp3,*fp4;
struct athlete //定义运动员信息
{
char univ[5];
char name[8];
char prog[15];
char mingci[5];
int score;
}at[SIZE];
struct xuexiao //定义学校信息
{
char univ[5];
char prog[15];
int num_athlete;
}xx[N];
struct program //定义项目信息
{
char prog[5];
int quming;
char ath1[5];
char ath2[5];
char univ1[5];
char univ2[5];
}pro[WM];
struct zongfen //定义学校得分信息
{
char univ[5];
char prog1[5];
char prog2[5];
char prog3[5];
int score1;
int score2;
int score3;
int total_score;
}zf[N];
void Information()
{
int n,w ;
do {
puts("\n\n\n");
puts("\t\t***^__^ Welcome to load 信息录入 system! ^__^***\n");
puts("\t\t*************************MENU*************************\n");
puts("\t\t******** 1.保存运动员信息 **********\n");
puts("\t\t******** 2.保存学校信息 **********\n");
puts("\t\t******** 3.保存项目比赛信息 **********\n");
puts("\t\t******** 4.退出 **********\n");
puts("\t\t***************************************\n");
printf("Choic your number(1-4):[ ]\b\b");
scanf("%d",&n);
if (n<1||n>4)
{
w=1;
getchar();
}
else w=0;
}
while (w==1);
switch(n)
{
case 1 : saveathlete(); break;// 保存运动员信息子函数
case 2 : saveschool(); break;//保存学校信息子函数
case 3 : saveprogram();break;//保存项目比赛信息子函数
case 4 : exit(0);
}
}
void saveathlete() //保存运动员信息子函数
{
printf("\n请输入各项目获奖运动员的信息:");
for(i=0;i<SIZE;i++)
{
printf("\n请输入第%d个运动员的信息:\n",i+1);
printf("姓名:");
scanf("%s",at[i].name);
printf("学校:");
scanf("%s",at[i].univ);
printf("参赛项目:");
scanf("%s",at[i].prog);
printf("名次:");
scanf("%s",at[i].mingci);
printf("得分:");
scanf("%d",&at[i].score);
}
fp1=fopen("ath","w");
for(i=0;i<SIZE;i++)
{
if(fwrite(&at[i],sizeof(struct athlete),1,fp1)!=1)
printf("File write error!\n");
}
fclose(fp1);
fp1=fopen("ath","r");
printf("\n现在各运动员的信息如下:\n\n");
printf("姓名 学校 项目 名次 得分\n");
for(i=0;i<SIZE;i++)
{
fread(&at[i],sizeof(struct athlete),1,fp1);
printf("%-10s%-10s%-18s%-10s%d\n",at[i].name,at[i].univ,at[i].prog,at[i].mingci,at[i].score);
}
fclose(fp1);
printf_back();
}
void saveschool() //保存学校信息子函数
{
printf("\n请输入各参赛学校的信息:");
for(i=0;i<N;i++)
{
printf("\n请输入第%d个学校的信息:\n",i+1);
printf("学校:");
scanf("%s",xx[i].univ);
printf("参赛的项目:");
scanf("%s",xx[i].prog);
printf("参赛者数:");
scanf("%d",&xx[i].num_athlete);
}
fp3=fopen("xxiao","w");
for(i=0;i<N;i++)
{
if(fwrite(&xx[i],sizeof(struct xuexiao),1,fp3)!=1)
printf("File write error!\n");
}
fclose(fp3);
printf_back();
}
void saveprogram() //保存项目比赛信息子函数
{
printf("\n请输入关于比赛项目的信息:");
for(i=0;i<WM;i++)
{
printf("\n请输入第%d项比赛的信息:\n",i+1);
printf("项目:");
scanf("%s",pro[i].prog);
printf("取分情况:");
scanf("%d",&pro[i].quming);
printf("参赛者1:");
scanf("%s",pro[i].ath1);
printf("所属学校:");
scanf("%s",pro[i].univ1);
printf("参赛者2:");
scanf("%s",pro[i].ath2);
printf("所属学校:");
scanf("%s",pro[i].univ2);
}
fp4=fopen("pr","w");
for(i=0;i<N;i++)
{
if(fwrite(&pro[i],sizeof(struct program),1,fp4)!=1)
printf("File write error!\n");
}
fclose(fp4);
printf_back();
}
void savescore() //保存学校得分情况子函数
{
printf("N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数。\n");
printf("W.100-女子一百米比赛,M.100-男子一百米,M.200-男子两百米。\n");
printf("\n各项名次得分权值如下:\n");
printf("取前三名:第一名5分 第二名3分 第三名2分\n");
printf("\n请输入各学校的得分情况:");
for(i=0;i<N;i++)
{
printf("\n请输入第%d个学校的得分情况:\n",i+1);
printf("学校:");
scanf("%s",zf[i].univ);
printf("参赛项目1:");
scanf("%s",zf[i].prog1);
printf("得分:");
scanf("%d",&zf[i].score1);
printf("参赛项目2:");
scanf("%s",zf[i].prog2);
printf("得分:");
scanf("%d",&zf[i].score2);
printf("参赛项目3:");
scanf("%s",zf[i].prog3);
printf("得分:");
scanf("%d",&zf[i].score3);
zf[i].total_score=zf[i].score1+zf[i].score2+zf[i].score3;
}
fp2=fopen("zfen","w");
for(i=0;i<N;i++)
{
if(fwrite(&zf[i],sizeof(struct zongfen),1,fp2)!=1)
printf("File write error!\n");
}
fclose(fp2);
printf_back();
}
void Search()
{
int n,w2;
do
{
puts("\t\t***^__^ Welcome to load search system! ^__^***\n");
puts("\t\t*************************MENU*************************\n");
puts("\t\t******** 1.查看团体总分 **************\n");//查看团体总分
puts("\t\t******** 2.查看参赛学校信息 **************\n");//查看参赛学校信息!
puts("\t\t******** 3.查看比赛项目信息 **************\n");//查看比赛项目信息!
puts("\t\t******** 4.退出 **************\n");//退出
puts("\t\t***************************************\n");
printf("选择数字(1-4):[ ]\b\b");
scanf("%d",&n);
if (n<1||n>4)
{
w2=1;
getchar();
}
else w2=0;
}
while (w2==1);
switch(n)
{ case 1: ttzf();break;
case 2: csxx();break;
case 3: bsxm();break;
case 4: exit(0);break;
default: printf("未进行任何操作!");
}
}
void ttzf() //查看学校团体总分子函数
{
fp2=fopen("zfen","r");
printf("\n各学校的团体总分情况如下:\n\n");
printf("学校 参赛项目 总分\n");
for(i=0;i<N;i++)
{
fread(&zf[i],sizeof(struct zongfen),1,fp2);
printf("%-8s%s,%s,%-12s%-12d\n",zf[i].univ,zf[i].prog1,zf[i].prog2,zf[i].prog3,zf[i].total_score);
}
fclose(fp2);
printf_back();
}
void csxx() //查看参赛学校信息子函数
{
fp3=fopen("xxiao","r");
printf("\n各参赛学校的情况如下:\n\n");
printf("学校 参赛项目 参赛者数\n");
for(i=0;i<N;i++)
{
fread(&xx[i],sizeof(struct xuexiao),1,fp3);
printf("%-8s%-20s%-12d\n",xx[i].univ,xx[i].prog,xx[i].num_athlete);
}
fclose(fp3);
printf_back();
}
void bsxm() //查看比赛项目子函数
{
fp4=fopen("pr","r");
printf("\n各比赛项目的信息如下:\n\n");
printf("项目 取分情况 参赛者1 所属学校 参赛者2 所属学校\n");
for(i=0;i<N;i++)
{
fread(&pro[i],sizeof(struct program),1,fp4);
printf("%-12s%-10d%-10s%-12s%-10s%-12s\n",pro[i].prog,pro[i].quming,pro[i].ath1,pro[i].univ1,pro[i].ath2,pro[i].univ2);
}
fclose(fp4);
printf_back();
}
void main()
{
menu();
}
void menu()
{
int n,w1;
do
{
puts("\t\t***^__^ Welcome to load sports system! ^__^***\n");
puts("\t\t*************************MENU*************************\n");
puts("\t\t******** 1.输入信息 **************\n");
puts("\t\t******** 2.比赛结果录入 **************\n");
puts("\t\t******** 3.查询模块 **************\n");
puts("\t\t******** 4.退出 **************\n");
puts("\t\t******************************************************\n");
printf("请选择(1-4):[ ]\b\b");
scanf("%d",&n);
if (n<1||n>4)
{
w1=1;
getchar();
}
else w1=0;
}
while (w1==1);
switch(n)
{case 1:Information();break; //输入信息
case 2:savescore();break;//比赛结果录入
case 3:Search();break;//查询模块
case 4:exit(0);
}
}
//公共函数
void printf_back()
{
int w;
printf("\n\n\tSUCCESSFUL!\n\n");
printf("What do you want to do next?\n\n\t1).exit \t2).menu:[ ]\b\b");
scanf("%d",&w);
if(w==1)
exit(0);
else menu();
}