数据结构课程设计 7Word文档格式.docx
- 文档编号:19868050
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:15
- 大小:227.23KB
数据结构课程设计 7Word文档格式.docx
《数据结构课程设计 7Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 7Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;
可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询;
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
2、总体设计
2.1、功能模块设计
根据课程设计题目的功能要求,各个功能模块的组成如下:
(1)主程序模块:
Voidmain()
{
初始化:
For()
接受处理命令:
}
接受处理:
(2)学校的单元模块——实现有序表的抽象数据类型:
(3)运动员的结构模块——定义线性表的结构特点。
各模块的之间的调用关系如下:
主程序模块
↓
学校的单元模块
运动员结构单元模块
2.2、所有功能模块的流程图
3、详细设计
3.1、程序中所采用的数据结构及存储结构的说明
运动会分数统计程序用到的是顺序表的数据类型,由于一开始参赛人数就是确定下来的,参赛人数即为顺序表表长,故顺序表的表长也就确定下来了,顺序表的主要内容有学校数、男子项目数、女子项目数、总的参赛人数。
节点主要内容包括:
学生的姓名、学校代号、项目代号以及学生的成绩。
顺序表类型如下:
typedefstruct{//节点
charname[100];
//姓名
intxuexiao;
//学校代号
intxiangmu;
//项目代号
intscore;
//成绩
}schooltype;
typedefstruct{
schooltypesc[size];
//顺序表
intn;
//学校数
intm;
//男子项目数
intw;
//女子项目数
intr;
//总参赛人数
}seqlist;
该程序要求统计各个学校的总分及男女项目总分,为便于排序,另用一顺序表将计算出来的总分放于其中,节点内容包括关键字key(即算出来的总分)xiaohao(用来放学校的代号)解决了排序后能输出确定的学校代号及总分。
typedefstruct{//节点
intkey;
//放分
intxiaohao;
//放学校代号
}recordtype;
typedefstruct{//顺序表为方便排序而建立的
recordtyper[size];
//工作单元
}list;
3.2、算法的设计思想
参赛人数即为顺序表表长,在顺序表节点中有成绩,在建立学生信息时可直接输入成绩,输入学生信息时编码是自动加的,统计学校总分或男女项目总分时都用2个for循环来实现,统计出来的得分都可放入另一个顺序表中以便于排序,在查询时用户输入要查询的学校代号或项目代号即可查询,在建立信息时会调用保存在文件的函数来实现学生信息的保存。
结构图如下:
3.3、成员函数名及功能介绍如下:
成员函数名
作用
set(seqlist*L)
建立参赛者信息
search1(seqlist*L)
按学校代号查某个项目的情况
search2(seqlist*L)
按项目代号查取得成绩的学校
tongfen(seqlist*L,list*s)
统计各学校总分
tongfenboy(seqlist*L,list*s)
统计各学校男子项目总分
tongfengirl(seqlist*L,list*s)
统计各学校女子项目总分
output(seqlist*L)
输出
seqlist*loadfile()
提取到文件函数
savefile(seqlist*s)
保存到文件函数
paixu(seqlist*L,list*s)
直接插入排序
本程序主要用来实现运动会分数统计,用户在使用前需输入参赛人数,男子项目数、女子项目数以及参赛总人数,参赛编号是根据输入顺序编的,参赛人数既为顺序表表长,在完成这一步后,在提供的可选菜单中用户应先建立参赛者信息,参赛者信息一次性输入,如果文件中已保存输入的菜单,下次就不需要再重新建立参赛者信息了,可直接对已存的信息进行查询排序输出,可根据菜单选择。
1)、程序调试过程中常会出现一些小错误,如i,j混淆少括号少分号等小问题都可以按照提示找到,然后改正。
2)、语句错误语句使用不当造成程序无法运行出正常的结果。
3)、在排序过程中输出的结果是按总分顺序排序的,但是却不能够正确的输出是哪个学校的总分,解决方法是在新申请的顺序表的节点中加入了一个纪录学校代号的内容,在输出的同时就可以把学校代号也正确的输出来了。
在排序时用到了直接插入排序,从算法描述中可以看到,在搜索插入位置时,遇到关键字相等的元素就停止比较和移动元素,可以确定该算法是稳定的排序算法。
从空间角度上看,它只需要一个元素的辅助空间r[0]。
从时间角度上看,主要时间耗费在关键字的比较和移动元素上。
n为顺序表表长,平均时间复杂度为O(n2)最坏时间复杂度为O(n2)辅助存储空间r[0]。
6、源程序清单和执行结果
#include<
stdio.h>
string.h>
malloc.h>
#defineNULL0
#definesize100
//姓名
//学校代号
//成绩
typedefstruct{//顺序表
schooltypesc[size];
//工作单元
intn;
//学校数
//男子项目数
//女子项目数
//总参赛人数
//intlength;
typedefstruct{//节点
//放分
//放校代号
typedefstruct{//顺序表为方便排序而建立的
voidsavefile(seqlist*);
voidset(seqlist*L){
inti;
for(i=1;
i<
=L->
r;
i++){
printf("
依次输入校代号,项目号,姓名,成绩:
\n"
);
scanf("
%d%d%s%d"
&
L->
sc[i].xuexiao,&
sc[i].xiangmu,&
sc[i].name,&
sc[i].score);
savefile(L);
建立成功!
:
"
}
voidsearch1(seqlist*L){//按学校代号查某个项目的情况
inti,j,n;
输入学号以及要查的项目代号:
%d%d"
i,&
n);
for(j=1;
j<
j++){
if(L->
sc[j].xuexiao==i&
&
sc[j].xiangmu==n)
该学校在该项目姓名为%s取得成绩%d\n"
L->
sc[j].name,L->
sc[j].score);
voidsearch2(seqlist*L){//按项目代号查取得成绩的学校
intj,k;
输入所要查的项目代号:
%d"
k);
j++){
if(L->
sc[j].xiangmu==k&
sc[j].score!
=0)
printf("
学校代号%d在该项目姓名%s取得成绩%d\n"
sc[j].xuexiao,L->
}
voidtongfen(seqlist*L,list*s){//统计各学校总分
inti,j,sum;
n;
sum=0;
for(j=1;
sc[j].xuexiao==i){
sum=sum+L->
sc[j].score;
s->
r[i].xiaohao=i;
s->
r[i].key=sum;
printf("
学校代号为%d的学校取得的总分为%d\n"
i,sum);
voidtongfenboy(seqlist*L,list*s){//统计各学校男子项目总分
if((L->
sc[j].xiangmu)<
(L->
m)||(L->
sc[j].xiangmu)==(L->
m)){
}
学校代号为%d在男子项目取得的总分为%d\n"
voidtongfengirl(seqlist*L,list*s){//统计各学校女子项目总分
sc[j].xiangmu)>
学校代号为%d在女子项目取得的总分为%d\n"
}
voidpaixu(seqlist*L,list*s){//直接插入排序(有监视哨)
inti,j,k;
r[0]=s->
r[i];
j=i-1;
//将待插元素存到监视哨r[0]中
while(s->
r[0].key<
s->
r[j].key){//寻找插入位置
s->
r[j+1]=s->
r[j];
j=j-1;
r[0];
将待插入元素插入到已排序的序列中
排序后输出为:
for(k=1;
k<
k++){
学校代号为%d总分为%d:
s->
r[k].xiaohao,s->
r[k].key);
}
voidoutput(seqlist*L){
intj;
学校代号编号项目号姓名成绩:
printf("
%d\t%d\t%d\t%s\t%d\n"
sc[j].xuexiao,j,L->
sc[j].xiangmu,L->
};
seqlist*loadfile()//提取函数
{
FILE*fp;
charbuf[100];
fp=fopen("
运动员系统.txt"
"
r"
seqlist*s;
s=(seqlist*)malloc(sizeof(seqlist));
fscanf(fp,"
%d%d%d%d"
r,&
n,&
m,&
w);
for(inti=1;
=s->
i++)
fscanf(fp,"
%s"
buf);
strcpy(s->
sc[i].name,buf);
%d%d%d"
fclose(fp);
returns;
voidsavefile(seqlist*s)//保存函数
if((fp=fopen("
a+"
))==NULL)
Cannotopenthefile!
return;
fprintf(fp,"
%d\t"
r);
m);
%d\n"
fprintf(fp,"
%s\t"
sc[i].name);
sc[i].xuexiao);
sc[i].xiangmu);
intmenu_select(){
inti,sn;
------欢迎来到大学生运动会管理系统------\n"
请您先建立参赛者信息并记录成绩
(1)\n"
查询(按校查某个项目)
(2)\n"
查询(按项目查取得成绩的学校)(3)\n"
统计各学校总分并排序输出(4)\n"
统计各学校男子项目总分并排序输出(5)\n"
统计各学校女子项目总分并排序输出(6)\n"
输出(7)\n"
退出(0)\n"
----------------请选择------------------\n"
for(i=0;
100;
i++){
scanf("
&
sn);
if(sn<
0||sn>
7)
\n\t输入错误,重选0-7:
elsebreak;
returnsn;
voidmain(){
intm,n,w,r;
seqlistS,*L=&
S;
listp,*s=&
p;
L=(seqlist*)malloc(sizeof(seqlist));
输入参赛的学校数,男子项目数,女子项目数,总的参赛人数:
scanf("
w,&
L->
n=n;
m=m;
w=w;
r=r;
else
L=loadfile();
for(;
;
){
switch(menu_select()){
case1:
set(L);
break;
case2:
search1(L);
case3:
search2(L);
case4:
tongfen(L,s);
paixu(L,s);
case5:
tongfenboy(L,s);
case6:
tongfengirl(L,s);
case7:
output(L);
case0:
7、C程序设计总结
通过这次课程设计使我进一步达到理论与实际相结合,提高了自己组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能,掌握设计程序的思路,学会用计算机语言编写程序,以实现所需处理的任务,锻炼自己的动脑能力,学会用自己的思路解决现实中的实际问题,虽然一开始也走了一些弯路不过在同学和老师的点拨下完成了该程序,这次课程设计中遇到了很多问题,一开始准备用二维数组存放的可考虑到同一个学校同一个项目有好几个人参加,就不能用二维数组了,如果每个学校都申请一个二维数组也非常不方便,还是用顺序表方便也不浪费空间,在这次课程设计的过程中虽然很多次都参照了课本及资料,不过这使我更加熟悉了顺序表以及结构体的定义及实现,调试过程中也遇到了一些问题也都是自己独立思考完成的,还有一个体会是,遇到不会的地方可以参考课本也可以去图书馆或网上查资料,当然主要思路有了也就简单点了,一开始思路不是很清楚就开始在敲程序了,浪费了很多时间,在老师的指导下,把自己的思路理清楚了再来敲程序果真是事半功倍,这真是个很好的收获。
8、致谢
能够完成这次课程设计必须感谢C语言课张老师、周志强同学(他帮我修改了几处重要错误,同时启发我完善了该程序的功能)。
9、参考文献
[1]贾宗璞、许合利,C语言程序设计,江苏:
中国矿业大学出版社,2007.6
[2]谭浩强,C程序设计(第二版),北京:
清华大学出版社,2001.1
[3]严蔚敏等编著《数据结构(C语言版)》北京:
清华大学出版社,2010.10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计 数据结构 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)