运动会课程设计报告.docx

上传人:b****7 文档编号:23627652 上传时间:2023-05-19 格式:DOCX 页数:32 大小:1.03MB
下载 相关 举报
运动会课程设计报告.docx_第1页
第1页 / 共32页
运动会课程设计报告.docx_第2页
第2页 / 共32页
运动会课程设计报告.docx_第3页
第3页 / 共32页
运动会课程设计报告.docx_第4页
第4页 / 共32页
运动会课程设计报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

运动会课程设计报告.docx

《运动会课程设计报告.docx》由会员分享,可在线阅读,更多相关《运动会课程设计报告.docx(32页珍藏版)》请在冰豆网上搜索。

运动会课程设计报告.docx

运动会课程设计报告

 

课程设计报告

(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");

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1