辽宁工程技术大学综合训练项目任务书一(数据结构)_第1页
辽宁工程技术大学综合训练项目任务书一(数据结构)_第2页
辽宁工程技术大学综合训练项目任务书一(数据结构)_第3页
辽宁工程技术大学综合训练项目任务书一(数据结构)_第4页
辽宁工程技术大学综合训练项目任务书一(数据结构)_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选文档软 件 学 院 综合训练项目报告书课程名称 数据结构 项目名称 运动会分数统计 专业班级 软件14届1班 组 别 3 成 员 李业宏扬 张孝瀚 张岩 任课教师 孙宁 目 录1设计时间.12设计任务.13设计内容.13.1问题分析.13.2程序设计.23.2.1数据类型的定义.23.2.2主程序的流程.33.2.3函数与类调用关系说明.33.2.4主要函数伪代码.43.3测试与分析.43.3.1测试.43.3.2分析.63.4代码.64 总结与展望.13参考文献.14成绩评定.151 设计时间2015年10月20日至2015年11月14日2 设计任务参加运动会有n个院系,编号为1n。比赛

2、分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m<=20,n<=20)3 设计内容根据设计任务编写程序,要求:假设姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是取前三名)输入,并按名次顺序输入运动员姓名、院系编号和成绩。产生各院系的成绩单,内容包括各院系取得的每项成绩的项目号、名次(成绩)、姓名和得分; 产生团体总分报表,内容包括院系编号、男子团体总分、女子团体总分和团体总分。程序

3、运行后有相应功能的选择菜单界面。3.1问题分析根据设计内容要求,分析如下:创建菜单,内容如下:菜单1.录入成绩: 输入项目号,输入取前几名 循环取名次数次,输入: 姓名、院系编号、排名 三项信息。菜单2.院系成绩单 输出所有院系的院系编号及其对应的 项目号、名次、姓名、得分 四项信息。团体总分报表 输入男子项目总数 输出所有院系的院系编号及其对应的 男团总分 女团总分 总分 三项信息根据菜单框架,需要以下存储函数:用于存储学生记录的节点用于存储节点的结构以上两个结构用函数对其操作,具体如图所示:节点2节点1next链式结构head外部函数图3.1.1 数据结构其中插入记录就是新建一个节点,获取

4、院系成绩单就是输出全部符合某条件的节点数据。即:这个项目是一个链表的实例。3.2程序设计3.2.1数据类型的定义1. typedef struct Studentint xmid;/项目idint headnum;/选取前几名,3或者5char *name;/指向选手名字的指针int yuanid;/院系idint paiming;/排名struct Student *next;/指向下一个节点的指针student;节点结构体的定义如上。2.class Cj对节点记录进行操作的类,具体解释请看3.2.3及3.2.4具体节点间关系采用链表操作,结构请看图3.1.13.2.2主程序流程 1.实例化

5、Cj类并初始化 2.主函数选择菜单: 录入成绩、 获取所有院系成绩单、获取所有院系团体总分、退出 3.具体调用关系请看3.2.33.2.3函数与类调用关系说明 主函数图3.2.1 程序流程录入成绩in()获取成绩cj()团体总分zf()退出return 0class Cjsetdata实例化struct Student调用函数3.2.4主要函数伪代码Cj类的insert函数:传入数据为节点分配内存为节点赋值数据节点的next域指向上一个before指针指向的节点,若为头节点则指向nullCj类的outdata函数传入条件遍历链表 如果满足条件,输出改行Cj类的nantuan、nvtuan函数计

6、数变量sum=0传入院系条件遍历链表 如果满足院系相等,sum=sum+节点分数(其中节点分数为调用getscore函数实现)3.3测试与分析3.3.1测试院系数目测试可为5-10个中任意一个,本测试以6个为例选项选1项目号选1选择的名次数为3输入测试数据: 张三 1 1 李四 2 2 王五 1 3输出为: 再次录入数据,选1项目号选2前名次数选5输入 张三 1 1 李四 2 2 王五 1 3 赵六 1 4 侯七 3 5再次输入2输出如下:输入3男子总项目输入为1输出如下:即测试成功(以上王五李四张三为同名男女)3.3.2分析1.调试过程中发现最后一个节点没有数据,因此查看代码发现最后一个节点

7、被跳过了。2.算法的空间复杂度相对较大,构思是否能够用更简便的方法。3.4 代码#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct Student/student节点int xmid;int headnum;char *name;int yuanid;int paiming;struct Student *next;student;class Cj/cj类,用于处理成绩的类public:student *head,*before;int yuannum;void ini

8、t(int yuan)/初始化类head=before=NULL;yuannum=yuan;void insert(int xmid,int headnum,char *name,int yuanid,int paiming)/压入节点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->yuan

9、id=yuanid;head->paiming=paiming;head->next=before;before=head;int getscore(int headnum,int pai)/根据两个数据获取分数switch(headnum)case 3:switch(pai)case 1:return 5;case 2:return 3;case 3:return 2;case 5:switch(pai)case 1:return 7;case 2:return 5;case 3:return 3;case 4:return 2;case 5:return 1;return 0;

10、void outdata(int yuanid)/输出数据记录student *stu=head;while(stu->next)if(stu->yuanid=yuanid)printf(" %4d %4d %10s %4dn",stu->xmid,stu->paiming,stu->name,getscore(stu->headnum,stu->paiming);stu=stu->next;if(stu->yuanid=yuanid)printf(" %4d %4d %10s %4dn",stu-&

11、gt;xmid,stu->paiming,stu->name,getscore(stu->headnum,stu->paiming);int nantuan(int nan,int yuan)/计算男子团体总分student *stu=head;int sum=0;while(stu->next)if(stu->xmid<=nan && stu->yuanid=yuan)sum+=getscore(stu->headnum,stu->paiming);stu=stu->next;if(stu->xmid&l

12、t;=nan && stu->yuanid=yuan)sum+=getscore(stu->headnum,stu->paiming);return sum;int nvtuan(int nan,int yuan)/计算女子团体总分student *stu=head;int sum=0;while(stu->next)if(stu->xmid>nan && stu->yuanid=yuan)sum+=getscore(stu->headnum,stu->paiming);stu=stu->next;if

13、(stu->xmid>nan && stu->yuanid=yuan)sum+=getscore(stu->headnum,stu->paiming);return sum;void in(Cj *setdata)/录入成绩int temp,temp2,yuan,pai,i;char name20;puts("请输入项目号");scanf("%d",&temp);puts("请输入要取的前名次数");scanf("%d",&temp2);puts(&qu

14、ot;请输入各学生成绩,顺序为:姓名 院系编号 排名");for(i=0;i<temp2;i+)scanf("%s%d%d",&name,&yuan,&pai);setdata->insert(temp,temp2,name,yuan,pai);void cj(Cj *setdata)/获取所有院系成绩单int i;for(i=1;i<=setdata->yuannum;i+)printf("院系id:%dn",i);printf("%6s%6s%10s%6sn","

15、项目id","排名","姓名","得分");setdata->outdata(i);void zf(Cj *setdata)/获取所有院系团体总分int i,nan;puts("请输入男子项目总数");scanf("%d",&nan);for(i=1;i<=setdata->yuannum;i+)printf("院系id:%dn",i);printf(" 男子团体总分:%dn",setdata->nantuan(n

16、an,i);printf(" 女子团体总分:%dn",setdata->nvtuan(nan,i);printf(" 团体总分:%dn",setdata->nantuan(nan,i)+setdata->nvtuan(nan,i);int main()int data;Cj setdata;printf("请输入院系总数目");scanf("%d",&data);setdata.init(data);while(1)puts("1.录入成绩");puts("2

17、.获取所有院系成绩单");puts("3.获取所有院系团体总分");puts("4.退出");puts("请输入选项");scanf("%d",&data);switch(data)case 1:in(&setdata);break;case 2:cj(&setdata);break;case 3:zf(&setdata);break;case 4:return 0;default:system("cls");puts("输入错误,请重新输入");system("pause");return 0;4 总结与展望从项目设计过程中,我们深切地体会到了链表的重要性、操作的易用性。本次我们小组在做项目时遇到了很多问题,比如在调试过程中发现了很多错误,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论