辽宁工程技术大学综合训练项目任务书一数据结构.docx

上传人:b****8 文档编号:29761653 上传时间:2023-07-26 格式:DOCX 页数:16 大小:155.40KB
下载 相关 举报
辽宁工程技术大学综合训练项目任务书一数据结构.docx_第1页
第1页 / 共16页
辽宁工程技术大学综合训练项目任务书一数据结构.docx_第2页
第2页 / 共16页
辽宁工程技术大学综合训练项目任务书一数据结构.docx_第3页
第3页 / 共16页
辽宁工程技术大学综合训练项目任务书一数据结构.docx_第4页
第4页 / 共16页
辽宁工程技术大学综合训练项目任务书一数据结构.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

辽宁工程技术大学综合训练项目任务书一数据结构.docx

《辽宁工程技术大学综合训练项目任务书一数据结构.docx》由会员分享,可在线阅读,更多相关《辽宁工程技术大学综合训练项目任务书一数据结构.docx(16页珍藏版)》请在冰豆网上搜索。

辽宁工程技术大学综合训练项目任务书一数据结构.docx

辽宁工程技术大学综合训练项目任务书一数据结构

软件学院

综合训练项目报告书

 

课程名称数据结构

项目名称运动会分数统计

专业班级软件14届1班

组别3

成员业宏扬孝瀚岩

任课教师宁

 

3.2.1数据类型的定义......................................................................2

3.2.2主程序的流程.........................................................................3

3.2.3函数与类调用关系说明...........................................................3

3.2.4主要函数伪代码......................................................................4

3.3.1测试........................................................................................4

3.3.2分析........................................................................................6

1设计时间

2015年10月20日至2015年11月14日

2设计任务

参加运动会有n个院系,编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1~m,女子m+1~m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:

7、5、3、2、1,前三名的积分分别为:

5、3、2;哪些项目取前五名或前三名由学生自己设定。

(m<=20,n<=20)

3设计容

根据设计任务编写程序,要求:

①假设长度不超过20个字符。

每个项目结束时,将其编号、类型符(区分取前五名还是取前三名)输入,并按名次顺序输入运动员、院系编号和成绩。

②产生各院系的成绩单,容包括各院系取得的每项成绩的项目号、名次(成绩)、和得分;

③产生团体总分报表,容包括院系编号、男子团体总分、女子团体总分和团体总分。

④程序运行后有相应功能的选择菜单界面。

3.1问题分析

根据设计容要求,分析如下:

创建菜单,容如下:

菜单1.录入成绩:

①输入项目号,输入取前几名

②循环取名次数次,输入:

、院系编号、排名

三项信息。

菜单2.院系成绩单

输出所有院系的院系编号及其对应的

项目号、名次、、得分

四项信息。

团体总分报表

①输入男子项目总数

②输出所有院系的院系编号及其对应的

男团总分女团总分总分

三项信息

根据菜单框架,需要以下存储函数:

①用于存储学生记录的节点

②用于存储节点的结构

以上两个结构用函数对其操作,具体如图所示:

其中插入记录就是新建一个节点,获取院系成绩单就是输出全部符合某条件的节点数据。

即:

这个项目是一个链表的实例。

3.2程序设计

3.2.1数据类型的定义

1.typedefstructStudent

{

intxmid;//项目id

intheadnum;//选取前几名,3或者5

char*name;//指向选手名字的指针

intyuanid;//院系id

intpaiming;//排名

structStudent*next;//指向下一个节点的指针

}student;

节点结构体的定义如上。

2.classCj

对节点记录进行操作的类,具体解释请看3.2.3及3.2.4

具体节点间关系采用链表操作,结构请看图3.1.1

3.2.2主程序流程

1.实例化Cj类并初始化

2.主函数选择菜单:

录入成绩、获取所有院系成绩单、获取所有院系团体总分、退出

3.具体调用关系请看3.2.3

3.2.3函数与类调用关系说明

3.2.4主要函数伪代码

①Cj类的insert函数:

传入数据

为节点分配存

为节点赋值数据

节点的next域指向上一个before指针指向的节点,若为头节点则指向null

②Cj类的outdata函数

传入条件

遍历链表

如果满足条件,输出改行

③Cj类的nantuan、nvtuan函数

计数变量sum=0

传入院系条件

遍历链表

如果满足院系相等,sum=sum+节点分数

(其中节点分数为调用getscore函数实现)

3.3测试与分析

3.3.1测试

院系数目测试可为5-10个中任意一个,本测试以6个为例

选项选1

项目号选1

选择的名次数为3

输入测试数据:

三11

四22

王五13

输出为:

再次录入数据,选1

项目号选2

前名次数选5

输入

三11

四22

王五13

六14

侯七35

再次输入2

输出如下:

输入3

男子总项目输入为1

输出如下:

即测试成功(以上王五四三为同名男女)

3.3.2分析

1.调试过程中发现最后一个节点没有数据,因此查看代码发现最后一个节点被跳过了。

2.算法的空间复杂度相对较大,构思是否能够用更简便的方法。

3.4代码

#include

#include

#include

typedefstructStudent//student节点

{

intxmid;

intheadnum;

char*name;

intyuanid;

intpaiming;

structStudent*next;

}student;

classCj//cj类,用于处理成绩的类

{

public:

student*head,*before;

intyuannum;

voidinit(intyuan)

{//初始化类

head=before=NULL;

yuannum=yuan;

}

voidinsert(intxmid,intheadnum,char*name,intyuanid,intpaiming)

{//压入节点

head=(student*)malloc(sizeof(student));

head->xmid=xmid;

head->headnum=headnum;

head->name=(char*)malloc(sizeof(char)*(strlen(name)+2));

strcpy(head->name,name);

head->yuanid=yuanid;

head->paiming=paiming;

head->next=before;

before=head;

}

intgetscore(intheadnum,intpai)

{//根据两个数据获取分数

switch(headnum)

{

case3:

switch(pai)

{

case1:

return5;

case2:

return3;

case3:

return2;

}

case5:

switch(pai)

{

case1:

return7;

case2:

return5;

case3:

return3;

case4:

return2;

case5:

return1;

}

}

return0;

}

voidoutdata(intyuanid)

{//输出数据记录

student*stu=head;

while(stu->next)

{

if(stu->yuanid==yuanid)

{

printf("%4d%4d%10s%4d\n",stu->xmid,stu->paiming,stu->name,getscore(stu->headnum,stu->paiming));

}

stu=stu->next;

}

if(stu->yuanid==yuanid)

{

printf("%4d%4d%10s%4d\n",stu->xmid,stu->paiming,stu->name,getscore(stu->headnum,stu->paiming));

}

}

intnantuan(intnan,intyuan)

{//计算男子团体总分

student*stu=head;

intsum=0;

while(stu->next)

{

if(stu->xmid<=nan&&stu->yuanid==yuan)

{

sum+=getscore(stu->headnum,stu->paiming);

}

stu=stu->next;

}

if(stu->xmid<=nan&&stu->yuanid==yuan)

{

sum+=getscore(stu->headnum,stu->paiming);

}

returnsum;

}

intnvtuan(intnan,intyuan)

{//计算女子团体总分

student*stu=head;

intsum=0;

while(stu->next)

{

if(stu->xmid>nan&&stu->yuanid==yuan)

{

sum+=getscore(stu->headnum,stu->paiming);

}

stu=stu->next;

}

if(stu->xmid>nan&&stu->yuanid==yuan)

{

sum+=getscore(stu->headnum,stu->paiming);

}

returnsum;

}

};

voidin(Cj*setdata)//录入成绩

{

inttemp,temp2,yuan,pai,i;

charname[20];

puts("请输入项目号");

scanf("%d",&temp);

puts("请输入要取的前名次数");

scanf("%d",&temp2);

puts("请输入各学生成绩,顺序为:

院系编号排名");

for(i=0;i

{

scanf("%s%d%d",&name,&yuan,&pai);

setdata->insert(temp,temp2,name,yuan,pai);

}

}

voidcj(Cj*setdata)//获取所有院系成绩单

{

inti;

for(i=1;i<=setdata->yuannum;i++)

{

printf("院系id:

%d\n",i);

printf("%6s%6s%10s%6s\n","项目id","排名","","得分");

setdata->outdata(i);

}

}

voidzf(Cj*setdata)//获取所有院系团体总分

{

inti,nan;

puts("请输入男子项目总数");

scanf("%d",&nan);

for(i=1;i<=setdata->yuannum;i++)

{

printf("院系id:

%d\n",i);

printf("男子团体总分:

%d\n",setdata->nantuan(nan,i));

printf("女子团体总分:

%d\n",setdata->nvtuan(nan,i));

printf("团体总分:

%d\n",setdata->nantuan(nan,i)+setdata->nvtuan(nan,i));

}

}

intmain()

{

intdata;

Cjsetdata;

printf("请输入院系总数目");

scanf("%d",&data);

setdata.init(data);

while

(1)

{

puts("1.录入成绩");

puts("2.获取所有院系成绩单");

puts("3.获取所有院系团体总分");

puts("4.退出");

puts("请输入选项");

scanf("%d",&data);

switch(data)

{

case1:

in(&setdata);

break;

case2:

cj(&setdata);

break;

case3:

zf(&setdata);

break;

case4:

return0;

default:

system("cls");

puts("输入错误,请重新输入");

system("pause");

}

}

return0;

}

 

4总结与展望

从项目设计过程中,我们深切地体会到了链表的重要性、操作的易用性。

本次我们小组在做项目时遇到了很多问题,比如在调试过程中发现了很多错误,我们小组齐心协力地解决了这些问题,增长了不少经验。

在开始做项目时组长考虑是否要存储数据到文件中,考虑到组员的能力,我们放弃了这一操作。

在解决问题过程中,我们尝试了很多种算法,最后还是感觉链表组员们更能接受一些。

 

参考文献

[1]胡学纲.数据结构(C语言版),高等教育

[2]许卓群,东青.数据结构与算法,高等教育

[3]王卫东.新编考研辅导丛书,数据结构辅导,电子科技大学

[4]遵仁.数据结构,人民邮电

成员分工

主要工作

备注

业宏扬

组长,写代码

孝瀚

项目测试与流程图绘制及本部分报告填写

其它部分报告填写

 

成绩评定

 

成绩教师签字

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

当前位置:首页 > 求职职场 > 职业规划

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

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