数据结构课程设计报告.docx
- 文档编号:29794598
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:39
- 大小:503.31KB
数据结构课程设计报告.docx
《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(39页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告
课程设计报告
(2010--2011年度第2学期)
实验名称:
数据结构
题目:
运动会赛事安排
院系:
控制与计算机工程
班级:
软件1002
学号:
1101250220
学生姓名:
汪豪
指导教师:
林碧英
设计周数:
1周
日期:
2011年6月25日
一、课程设计的目的与要求
1.目的:
应用数据结构和算法来设计相应的程序,培养学生问题求解模块的框架设计和详细设计、相关程序实现和调试能力,完成创新能力和实践能力的训练。
2.要求:
用高级程序设计语言C编码,用VC++开发平台调试。
二、设计正文
(一)课程设计题目
(二)需求分析
(三)概要设计
(四)详细设计
(五)调试分析
(六)使用说明
三、课程设计总结或结论
1.完成的工作
2.未完成的工作
3.所需做的改进
四、参考文献
[1]严蔚敏吴伟民数据结构(C语言版)清华大学出版社,1997年4月第一版
附录(设计流程图、程序、测试数据等)
一、课程设计题目
编制一个用于运动会赛事安排的程序
二、需求分析
(1)对运动项目的增加、删除、修改
(2)对运动员信息的增加、删除、修改
(3)将运动项目的信息储存在文件中
(4)将运动员信息储存在文件中
(5)按照运动项目的不同显示报名的运动员信息
(6)处理冲突实现运动项目的合理安排并将这一信息储存在文件中
三、概要设计
(1)列出程序中用到的抽象数据类型
ADTLIST{
数据对象D:
D是具有相同特性的数据元素的集合,每个元素含有项目的具体名称
数据关系R:
数据元素同属一个类型
基本操作:
Sort();
初始条件:
项目存在
操作结果:
项目按照不冲突的方式分成不同的组并存放在数组中
}ADT
(2)本程序包含21个函数:
1 主函数main()
2 显示函数disp()
3 显示操作菜单函数menu()
4 判断两运动是否冲突函数tell()
5 运动会项目安排函数sort()
6 学生报名管理主函数stumain()
7 学生报名管理菜单函数stumenu()
8 学生报名管理信息创建函数stucreat()
9 学生报名管理信息增加函数stuadd()
10 学生报名管理信息删除函数studel()
11 学生报名管理信息修改函数sturevamp()
12 学生报名管理信息显示函数studisp()
13 学生报名管理信息显示函数(按项目)studispitemaut()
14 学生报名管理信息显示函数(按学号)studispno()
15 项目管理主函数itemmain()
16 项目管理菜单函数itemmenu()
17 项目管理信息创建函数creatitem()
18 项目管理信息增加函数additem()
19 项目管理信息删除函数delitem()
20 项目管理信息修改函数revampitem()
21 项目管理信息显示函数itemdisp()
各函数间关系如下:
四、详细设计
(1)系统功能解构框图
(2)数据类型定义
1)学生信息的储存结构
typedefstruct
{
intstusize;//学生的个数
intitemno1[max];//第一个项目
intitemno2[max];//第二个项目
inttab[max];//报了几项项目(1或2)
charsex[max][20];//性别
charcollege[max][20];//院系
charname[max][20];//姓名
intno[max];//学号
}STU;
2)项目的信息
typedefstruct
{
charits[max][20];//项目的名称
intitemsize;//项目的个数
}Item;
3)已经分好组的项目存储
typedefstruct
{
intrear;//该组项目的个数
inta[max];//该组项目
}ss;
(3)基本操作
Stuadd学生增加
Stucreat学生创建
Studel学生删除
Studisp学生显示
Studispitemaut显示(按项目)
Studispno显示(按学号)
Sturevamp学生修改
Additem增加项目
Creatitem创建项目
Delitem删除项目
Itemdisp显示项目
Revampitem修改项目
其说明见前。
五、调试分析
1、在程序的调试工程中,发现每执行一次学生人数都会少两个人,通过debug调试发现原来是每一次的标志变量second没有初始化,加入second=-1后问题解决。
2、在调用文件的时候出现错误,打开文件进行观察后,发现原来是存入的数字i没有接受出来,发现问题后,定义一个临时变量i吸收其中的数字
3、发现项目在文件中无法处理,经过debug调试,发现原来计算机将100米中的100当作数字,为了解决这一问题,将100米换成了一百米
六、使用说明
程序名为sport.exe,运行环境为DOS。
程序运行后显示:
---------运动会系统----------
1-项目管理2-报名管理3-项目安排4-初始化0-结束
按提示输入不同数字将会得到不同结果:
选择0:
退出程序
选择1:
进入运动会系统/运动会项目管理系统的二级菜单并显示:
--运动会系统/运动会项目管理系统--
---------------------------------------------
1-增加2-删除3-修改4-显示5-创建0-退出
---------------------------------------------
选择2:
进入运动会系统/运动会报名系统并显示:
--运动会系统/运动会报名系统--
---------------------------------------
1-报名2-查看3-修改4-删除5-按学好查看
8-增加9-按项目查看(自动)0-退出
---------------------------------------
选择3:
自动安排项目分组并输出
形如:
第1组:
第2组:
选择4:
删除储存在文件中的信息重新进行程序
7、测试结果
1、初始化项目
运行sport.exe选择1
输入
5
4
一百米
二百米
跳高
跳远
选择4显示,可是看到项目为:
2、选择1增加一个项目
输入铅球,在选择4显示:
3、测试项目删除函数,选择2删除,显示
选择5,再次调用显示,出现:
3、测试项目修改函数
选择3,出现提示窗口,选择要修改的项目编号,调用显示函数,修改成功
4、测试报名管理系统
选择1
输入
2
1
5
201艾君伟男控计
202陈肖成男控计
203陈祖歌女控计
204郭海华男控计
205韩营男控计
1
1
2
12
2
23
2
12
2
14
调用显示函数:
创建成功!
5、测试增加学生函数
选择8,显示:
输入206黄瑞特男控计
2
14
调用显示函数:
增加成功!
6、测试删除函数:
选择4,
选择5,调用显示函数,
删除成功!
7、测试按项目查看函数,
选择9出现:
成功!
8、测试项目安排的实现:
选择0回到一级菜单界面,选择3
八、附录
源程序名为:
sport.cpp
//运动会项目管理
#include
#include
#include
#include
#definemax20
intsecond=-1;
typedefstruct
{
intrear;
inta[max];
}ss;
ssorder[max];
typedefstruct
{
charits[max][20];
intitemsize;
}Item;
typedefstruct
{
intstusize;
intitemno1[max];
intitemno2[max];
inttab[max];
charsex[max][20];
charcollege[max][20];
charname[max][20];
intno[max];
}STU;
STUstu;
Itemitem;
//项目管理菜单函数
intitemmenu()
{
inti;
printf("--运动会系统/运动会项目管理系统--\n");
printf("-------------------------------\n");
printf("1-增加2-删除3-修改4-显示5-创建0-退出\n");
printf("-------------------------------\n");
scanf("%d",&i);
getchar();
returni;
}
//项目管理显示函数
voiditemdisp()
{
inti;
for(i=0;i { printf("%d",i+1); printf("%s\n",item.its[i]); } } //项目管理增加函数 voidadditem() { chara[20]; item.itemsize++; printf("要增加项目的名称: "); scanf("%s",a); getchar(); strcpy(item.its[item.itemsize-1],a); } //项目管理删除函数 voiddelitem() { inti; itemdisp(); printf("请输入要删除的项目的编号: "); scanf("%d",&i); getchar(); for(i;i { strcpy(item.its[i-1],item.its[i]); } item.itemsize--; } //项目管理修改函数 voidrevampitem() { itemdisp(); chara[20]; inti; printf("输入要修改函数的编号: "); scanf("%d",&i); getchar(); printf("您要修改的项目是%s,要将原项目修改为: ",item.its[i-1]); scanf("%s",a); getchar(); strcpy(item.its[i-1],a); } //项目管理创建函数 voidcreatitem() { inti; printf("初始项目有多少项? \n"); scanf("%d",&i); for(intj=0;j { printf("第%d项是: ",j+1); additem(); } } //项目管理主函数 intitemmain() { while (1) { system("cls"); switch(itemmenu()) { case1: additem();break; case2: delitem();break; case3: revampitem();break; case4: itemdisp(); printf("按任意键继续\n"); getch(); break; case5: creatitem();break; case0: return0; } } } //学生报名菜单函数 intstumenu() { inti; printf("--运动会系统/运动会报名系统--\n"); printf("---------------------------------------\n"); printf("1-报名2-查看3-修改4-删除5-按学号查看\n"); printf("8-增加9-按项目查看(自动)0-退出\n"); printf("---------------------------------------\n"); scanf("%d",&i); returni; } //显示学生报名情况 voidstudisp() { for(inti=0;i { if(stu.tab[i]==1) { printf("%d%d%s%s%s%s\n",i+1,stu.no[i],stu.name[i],stu.sex[i],stu.college[i],item.its[stu.itemno1[i]-1]); } elseif(stu.tab[i]==2) { printf("%d%d%s%s%s%s%s\n",i+1,stu.no[i],stu.name[i],stu.sex[i],stu.college[i],item.its[stu.itemno1[i]-1],item.its[stu.itemno2[i]-1]); } } } //自动按项目分组 voidstudispitemaut() { FILE*fpaut; fpaut=fopen("autdata","w"); for(intj=0;j { printf("%s\n",item.its[j]); fprintf(fpaut,"%s",item.its[j]); for(inti=0;i { if(j+1==stu.itemno1[i]||j+1==stu.itemno2[i]) { printf("%d%d%s%s%s\n",i+1,stu.no[i],stu.name[i],stu.sex[i],stu.college[i]); fprintf(fpaut,"%d%d%s%s%s\n",i+1,stu.no[i],stu.name[i],stu.sex[i],stu.college[i]); } } } } //按照学号查看 intstudispno() { intnum; printf("要查看的人的学号是: "); scanf("%d",&num); getchar(); for(inti=0;i { if(stu.no[i]==num) { if(stu.tab[i]==1) { printf("%d%d%s%s%s%s\n",i+1,stu.no[i],stu.name[i],stu.sex[i],stu.college[i],item.its[stu.itemno1[i]-1]); } elseif(stu.tab[i]==2) { printf("%d%d%s%s%s%s%s\n",i+1,stu.no[i],stu.name[i],stu.sex[i],stu.college[i],item.its[stu.itemno1[i]-1],item.its[stu.itemno2[i]-1]); } return1; } } printf("没有对应的学号! \n"); return0; } //学生报名的修改函数 voidsturevamp() { inti; studisp(); printf("需要修改的学生的编号: "); scanf("%d",&i); getchar(); printf("输入学生学号、姓名、性别、院系: "); scanf("%d%s%s%s",&stu.no[i-1],stu.name[i-1],stu.sex[i-1],stu.college[i-1]); printf("%s报名了几项? ",stu.name[i-1]); scanf("%d",&stu.tab[i-1]); getchar(); if(stu.tab[i-1]==1) { printf("他报名的项目是: \n"); itemdisp(); scanf("%d",&stu.itemno1[i]); getchar(); } elseif(stu.tab[i-1]==2) { printf("他报名的两项项目是: \n"); itemdisp(); scanf("%d%d",&stu.itemno1[i-1],&stu.itemno2[i-1]); getchar(); } } //学生报名的创建函数 voidstucreat() { stu.stusize=0; printf("初始有多少个学生报名? "); scanf("%d",&stu.stusize); printf("输入学生学号、姓名、性别、院系: "); for(inti=0;i { printf("第%d个学生: ",i+1); scanf("%d%s%s%s",&stu.no[i],stu.name[i],stu.sex[i],stu.college[i]); } for(intj=0;j { printf("%s报名了几项? ",stu.name[j]); scanf("%d",&stu.tab[j]); getchar(); if(stu.tab[j]==1) { printf("他报名的项目是: \n"); itemdisp(); scanf("%d",&stu.itemno1[j]); getchar(); } elseif(stu.tab[j]==2) { printf("他报名的两项项目是: \n"); itemdisp(); scanf("%d%d",&stu.itemno1[j],&stu.itemno2[j]); getchar(); } } } //报名学生增加函数 voidstuadd() { printf("输入学生学号、姓名、性别、院系: "); scanf("%d%s%s%s",&stu.no[stu.stusize],stu.name[stu.stusize],stu.sex[stu.stusize],stu.college[stu.stusize]); printf("%s报名了几项? ",stu.name[stu.stusize]); scanf("%d",&stu.tab[stu.stusize]); getchar(); if(stu.tab[stu.stusize]==1) { printf("他报名的项目是: \n"); itemdisp(); scanf("%d",&stu.itemno1[stu.stusize]); getchar(); } elseif(stu.tab[stu.stusize]==2) { printf("他报名的两项项目是: \n"); itemdisp(); scanf("%d%d",&stu.itemno1[stu.stusize],&stu.itemno2[stu.stusize]); getchar(); } stu.stusize++; } //学生报名的删除函数 voidstudel() { studisp(); inti; printf("输入要删除的学生编号: "); scanf("%d",&i); getchar(); for(i;i { stu.itemno1[i-1]=stu.itemno1[i]; stu.itemno2[i-1]=stu.itemno1[i]; stu.tab[i-1]=stu.tab[i]; strcpy(stu.sex[i-1],stu.sex[i]); strcpy(stu.college[i-1],stu.college[i]); strcpy(stu.name[i-1],stu.name[i]); stu.no[i-1]=stu.no[i]; } stu.stusize--; } //学生报名的主函数 intstumain() { while (1) { system("cls"); switch(stumenu()) { case1: stucreat();break; case2: studisp(); printf("按任意键继续\n"); getch(); break; case3: sturevamp();break; case4: studel();break; case5: studispno(); printf("按任意键继续\n"); getch(); break; case8: stuadd();break; case9: studispitemaut(); printf("按任意键继续\n"); getch(); break; case0: studispitemaut(); return0; } } } //两项项目是否冲突的判断函数 inttell(inti,intj) { for(intk=0;k { if(stu.tab[k]==1) continue; elseif(stu.tab[k]==2) { if((stu.itemno1[k]-1==i&&stu.itemno2[k]-1==j)||(stu.itemno1[k]-1==j&&stu.itemno2[k]-1==i)) return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)