运动会课程设计报告.docx
- 文档编号:23627652
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:32
- 大小:1.03MB
运动会课程设计报告.docx
《运动会课程设计报告.docx》由会员分享,可在线阅读,更多相关《运动会课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。
运动会课程设计报告
课程设计报告
(2010--2011年度第2学期)
实验名称:
数据结构
题目:
运动会项目管理
院系:
控制与计算机工程
班级:
软件1002班
学号:
1101250224
学生姓名:
温裕青
指导教师:
林碧英
设计周数:
1周
成绩:
日期:
2011年6月25日
一、课程设计的目的与要求
1.目的:
应用数据结构和算法来设计相应的程序,培养学生问题求解模块的框架设计和详细设计、相关程序实现和调试能力,完成创新能力和实践能力的训练。
2.要求:
用高级程序设计语言C编码,用VC++开发平台调试。
二、设计正文
一)课程设计题目:
运动会项目管理。
二)需求分析:
运动会项目管理程序设计所需要的是整理出不可以同时举行的项目,然后把他们分到一组。
同时把程序运行过程中的信息存储到文件里面方便下次使用。
要求可以增减项目和参赛的同学,这过程中得考虑增减项目对学生报名信息的影响。
三)概要设计:
1)先定义一个游戏中要用到的抽象的数据类型。
ADTLIST{
数据对象D:
D是具有相同特性的数据袁术的集合,每个元素对应学生的一项信息名。
数据关系R:
数据元素同属一种类型
基本操作:
从文件读取学生信息;插入,删除学生信息。
}ADT;
2)本程序包含的函数有:
1.主函数main();//里面包含了一级菜单。
2.学生报名信息管理的二级菜单menu1();
3.运动会项目管理的二级菜单menu2();
4.插入学生信息的函数insertSTU();
5.删除学生信息的函数deleSTU(charname[]);//一次只能删除一个,且按姓名删除
6.把项目信息从文件里面导出Pdaochu();
7.把学生信息从文件里面导出Sdaochu();
8.给项目赋值一个整数以方便项目安排是的计算fuzhi(char[]);
9.插入运动项目Pinsert();
10.删除运动项目Pdele();//删除运动会项目是需要考虑到删除后对学生信息的各种影响
11.查看某同学所报的项目是否举行LOOK(student);
12.参看某项目是否存在Plook(char[]);
13.项目安排管理函数Program();
各函数之间的关系:
insertSTU
PdaochudeleSTU
dispSTU
Sdaochumenu1
MainLOOK
PinsertPlook
Pdele
menu2Programfuzhi
四)详细设计
(1)数据类型定义
typedefstruct
{
charschool[10];//院系
charsex[4];//性别
charsum[20];//学号
charname[20];//学生姓名
charitem[3][20];//所报项目且每人限报两项,只报一项的则第二项改为'不报'
}student;
操作:
Sdaochu-------导出学生信息
insertSTU-----增加学生信息
deleSTUI---------按姓名删除学生信息
Pdaochu---------导出项目信息
Pinsert---------插入项目信息
Pdele-----------删除项目信息
Program---------项目安排管理
//以上操作完成后都要把信息存入文件里面保存。
方便下次使用。
五)调试分析
1.开始在执行删除学生信息是每次都是把全部都删除了。
通过调试才发现原来从文件导出学生信息时久已经出现了错误。
用于导出学生信息的一个变量“i”没有初始化为1,所以一开始就为最后的一个。
所以存放信息的数据结构前面都为空了。
2.在执行Program函数是发现里面的data[]变化没有按照预期的进行。
通过调试是才发现赋值data[]的循环不能跳出。
所以我加了个限制他的循环条件。
3.开始在执行二级菜单时发现一级菜单的东西还留在屏幕上。
所以我在每个二级菜单前加了个清屏函数。
这样在二级菜单开始前一级菜单的信息都会从屏幕上清除.
4.在执行删除项目函数时,发现删除了一个项目后学生信息里面还有这个项目的信息。
所以经过考虑我删除了学生信息里面的不存在的信息,并且如果该学生所报的项目都不存在的话,则删除改学生的所有信息。
六)使用说明
开始运行后,显示为
下面我们先选择1:
我们先看下从文件里面导出的学生信息是否正确,所以选择3
可以看出信息成功的导出了.
下面我们退回到一级菜单。
选择2:
我们先看下项目是否正确了。
选择4
可以看出项目的导出也成功了。
选择3,看下项目安排正确不。
接下来再退回到一级菜单。
选择1
再选择1增加一个学生信息。
这里我们选择增加一个学生信息
接下来显示下看学生信息是否插入
因为插入了一个学生信息,冲突关系发生了改变,项目安排肯定也相应的发生了改变,我们再执行以下项目安排管理
可以看到男子200米和男子1000米被分到了不同组。
下面我们执行下删除学生信息。
输入删除的名字:
小刚。
再显示一遍看看。
退回到一级菜单,
选择2
来到运动会项目管理的二级菜单。
由于之前删除了小刚的信息。
所以项目安排也会改变
下面执行删除运动会项目。
选择2选择删除一个,因为本身数据里面项目就很少删除太多会导致数据不全面。
男子3级跳
删除后显示一次看看是否删除了。
这里可以看出删除成功。
接下来看下删除后对学生信息的影响
小谷那里原来是报有男子3级跳的,但是删除了3级跳之后变成了“不报”。
项目安排也会发生相应的改变。
增加一个运动项目‘
男子铁人
增加了项目当然相应的也有学生报。
回到项目安排管理的地方
男子铁人出现在了第二组。
附录:
#include
#include
#include
#include
#definemax50
typedefstruct
{
charschool[10];//院系
charsex[4];//性别
charsum[20];//学号
charname[20];//学生姓名
charitem[3][20];//所报项目且每人限报两项,只报一项的则第二项改为'不报'
}student;
studentSTU[20];
charsl[20][20];
intn,m;
voidinsertSTU();//插入报名学生
voiddeleSTU(charname[10]);//删除报名学生
voidPdaochu();//把项目从文件里导出
voidSdaochu();//把学生信息从文件里面导出
voidProgram();//项目安排
intfuzhi(char[]);//给项目附给一个整数方便比较
voidPinsert();//插入运动项目
voidPdele();//删除运动会项目
intLOOK(student);//查看某同学所报项目是否都不举办
intPlook(charp[20]);//查看项目是否存在
intPlook(charp[20])
{
inti;
for(i=1;i<=m;i++)
{
if(strcmp(p,sl[i])==0)
return1;
}
return0;
}
intLOOK(studenta)
{
inti;
for(i=1;i<=m;i++)
{
if(strcmp(a.item[1],sl[i])==0||strcmp(a.item[2],sl[i])==0)
return1;
}
return0;
}
voidPdele()
{
inti,j,k,q;
charpro[20];
printf("输入你要删除项目的个数:
\n");
scanf("%d",&k);
printf("输入要删除的项目:
\n");
for(i=1;i<=k;i++)
{
scanf("%s",pro);
for(j=1;j<=m;j++)
if(strcmp(pro,sl[j])==0)
{
strcpy(sl[j],sl[j+1]);
m--;
}
}
//把修改后的项目存入文件
FILE*fp,*p1;
fp=fopen("项目.txt","w");
for(j=1;j<=m;j++)
fprintf(fp,"%s\t",sl[j]);
fclose(fp);
//由于删除了项目后部分同学的参报项目也需改变,
//如果某同学所报的项目全部没有了就把该同学删掉
q=n;
for(i=1;i { if(LOOK(STU[i])==0) { strcpy(STU[i].school,STU[i+1].school); strcpy(STU[i].sex,STU[i+1].sex); strcpy(STU[i].sum,STU[i+1].sum); strcpy(STU[i].name,STU[i+1].name); strcpy(STU[i].item[1],STU[i+1].item[1]); strcpy(STU[i].item[2],STU[i+1].item[2]); n--; } } if(LOOK(STU[i])==0) n--; for(i=1;i<=q;i++) { if(Plook(STU[i].item[1])==0) { strcpy(STU[i].item[1],STU[i].item[2]); strcpy(STU[i].item[2],"不报"); } if(Plook(STU[i].item[2])==0) strcmp(STU[i].item[2],"不报");//-------------------------------------------------------------------- } //把学生信息存入文件 p1=fopen("学生报名信息","w"); for(i=1;i<=n;i++) fprintf(p1,"%s\t%s\t%s\t%s\t%s\t%s\n",STU[i].school,STU[i].sex,STU[i].sum,STU[i].name,STU[i].item[1],STU[i].item[2]); fclose(p1); } voidSdaochu() { inti=1; FILE*p1; if((p1=fopen("学生报名信息","r"))==NULL) { printf("文件文件读入失败! ! ! ! \n"); exit(0); } while(! feof(p1)) { fscanf(p1,"%s%s%s%s%s%s",STU[i].school,STU[i].sex,STU[i].sum,STU[i].name,STU[i].item[1],STU[i].item[2]); //如果只报一项,则第二个输入“不报” i++; } n=i-2; fclose(p1); } voidPinsert() { FILE*fp; intk,i; charb[20]; fp=fopen("项目.txt","at"); printf("输入增加的项目的个数\n"); scanf("%d",&k); printf("输入增加项目名称--\n"); for(i=1;i<=k;i++) { scanf("%s",b); fprintf(fp,"%s\t",b); strcpy(sl[m+i],b); } fclose(fp); m=m+k; } voidPdaochu() { inti=1; FILE*fp; fp=fopen("项目.txt","r"); while(! feof(fp)) fscanf(fp,"%s",sl[i++]); fclose(fp); m=i-1; } voidinsertSTU() { intk,i; FILE*fp; fp=fopen("学生报名信息","at"); printf("输入增加学生的个数\n"); scanf("%d",&k); printf("输入增加的学生的信息---\n"); for(i=1;i<=k;i++) { scanf("%s%s%s%s%s%s",STU[n+i].school,STU[n+i].sex,STU[n+i].sum,STU[n+i].name,STU[n+i].item[1],STU[n+i].item[2]); fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\n",STU[n+i].school,STU[n+i].sex,STU[n+i].sum,STU[n+i].name,STU[n+i].item[1],STU[n+i].item[2]); } fclose(fp); n=n+k; } voiddeleSTU(charname[10]) { FILE*p1; inti=1,k; for(i=1;i<=n;i++) { if(strcmp(name,STU[i].name)==0) k=i; } //把学生信息存入文件 p1=fopen("学生报名信息","w"); for(i=1;i<=n;i++) if(i! =k) { fprintf(p1,"%s\t%s\t%s\t%s\t%s\t%s\n",STU[i].school,STU[i].sex,STU[i].sum,STU[i].name,STU[i].item[1],STU[i].item[2]); } fclose(p1); for(i=k;i { strcpy(STU[i].school,STU[i+1].school); strcpy(STU[i].sex,STU[i+1].sex); strcpy(STU[i].sum,STU[i+1].sum); strcpy(STU[i].name,STU[i+1].name); strcpy(STU[i].item[1],STU[i+1].item[1]); strcpy(STU[i].item[2],STU[i+1].item[2]); } n--; } intfuzhi(chars[10]) { intj=1; while(sl[j]) { if(strcmp(sl[j],s)==0) returnj; else j++; } returnj; } voidProgram() { inti=1,j=1,k=1,l=1,data[20],q,num=0; for(;i<=m;i++) data[i]=l;//开始把代表运动项目安排的次序全部置为1 l++; while(j! =num) { num=j; for(i=1;i<=n;i++) { if(data[fuzhi(STU[i].item[1])]==l-1&&data[fuzhi(STU[i].item[2])]==l-1) { data[fuzhi(STU[i].item[2])]=l; j++; } } l++; } q=l-2; i=1; FILE*fporder; fporder=fopen("分组信息.txt","w"); while(i<=q) { printf("\n第%d组\n",i); fprintf(fporder,"第%d组\n",i); //把分组的信息读出来和存进文件里面 for(j=1;j<=m;j++) { if(data[j]==i&&strcmp(sl[j],"不报")! =0) { printf("%s\t",sl[j]); fprintf(fporder,"%s\t",sl[j]); } } i++; } fclose(fporder); } voidSdisp() { inti=1; printf("院系\t性别\t学号\t姓名\t第一个项目\t第二个项目\n"); while(i<=n) { printf("%s\t%s\t%s\t%s\t%s\t%s\n",STU[i].school,STU[i].sex,STU[i].sum,STU[i].name,STU[i].item[1],STU[i].item[2]); i++; } } intmenu1() { charname[20]; while (1) { intk; printf("-------------------------------------------------\n"); printf("学生报名信息管理\n"); printf("------------------------------------------------\n"); printf("1-增加学生报名信息\n"); printf("2-按姓名删除学生报名信息\n"); printf("3-显示学生报名信息\n"); printf("0-退出\n"); printf("*************************************************\n"); printf("请输入你要进行的操作"); scanf("%d",&k); switch(k) { case1: insertSTU(); printf("\n按任意键继续\n"); getch(); break; case2: printf("输入要删除的学生的名字: \n"); scanf("%s",name); deleSTU(name); printf("\n按任意键继续\n"); getch(); break; case3: Sdisp(); printf("\n按任意键继续\n"); getch(); break; case0: return0; default: printf("错误操作指令,请重新输入"); printf("\n按任意键继续\n"); getch(); break; } system("cls");//清屏函数 } } intmenu2() { while (1) { intk,i; printf("-------------------------------------------------\n"); printf("运动会项目管理\n"); printf("------------------------------------------------\n"); printf("1-增加运动会项目\n"); printf("2-减少运动会项目\n"); printf("3-运动会项目安排管理\n"); printf("4-显示比赛项目\n"); printf("0-退出\n"); printf("*************************************************\n"); printf("请输入你要进行的操作"); scanf("%d",&k); switch(k) { case1: Pinsert(); printf("\n按任意键继续\n"); getch(); break; case2: Pdele(); printf("\n按任意键继续\n"); getch(); break; case3: Program(); printf("\n按任意键继续\n"); getch(); break; case4: for(i=1;i<=m;i++) printf("%s\t",sl[i]); printf("\n按任意键继续\n"); getch(); break; case0: return0; default: printf("错误操作指令,请重新输入"); printf("\n按任意键继续\n"); getch(); break; } system("cls"); } } voidmain() { inti=1; Pdaochu(); Sdaochu(); while (1) { intk; //菜单----------菜单 printf("-------------------------------------------------\n"); printf("运动会项目管理系统\n"); printf("------------------------------------------------\n"); printf("1-学生报名信息管理\n"); printf("2-运动会项目管理\n"); printf("0-退出\n"); printf("*************************************************\n"); printf("请输入你要进行的操作"); scanf("%d",&k); switch(k) { case0: exit(0); case1: system("cls");//清屏函数 menu1(); printf("\n按任意键继续\n"); getch(); break; case2: system("cls");//清屏函数 menu2(); printf("\n按任意键继续\n"); getch(); break; } system("cls");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 课程设计 报告