版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计目录1.需求分析1.2基本任务22.概要设计 HYPERLINK l bookmark122.1主界面设计2 HYPERLINK l bookmark142.2数据结构设计3 HYPERLINK l bookmark163系统功能设计3 HYPERLINK l bookmark183.模块设计3 HYPERLINK l bookmark203.1模块设计3 HYPERLINK l bookmark222系统子模块及功能设计4 HYPERLINK l bookmark243.3系统模块之间的调用关系44.详要设计4.1数据结构设计5 HYPERLINK l bookmark302
2、系统主要模块设计6 HYPERLINK l bookmark325.调试分析85.1创建学校链表82添加获奖学生85.3按项目査学校成绩115.4按学校编号査参加项目14 HYPERLINK l bookmark44&用户使用说明157.参考文献158对软件自我评价159.程序设计源代码1610.心得体会22 一.需求分析1.1问题描述课程设计题目:运动会分数统计。任务:加运动会有n个学校,学校编号为1no比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前
3、五名或前三名由学生自己设定。(m=20,n项目表Pioject_T41o2.3系统功能设计.创建学校的链表:voidCreatSchoolLink(School&head);.添加获奖学生:voidAddStudentLink(School&head);.按项目编号査询取得前三或前五名的学校。voidFind_Project_ID(School&head,intProject_ID);.按学校爲号查询率校某个项目。一voidFind_School_Project(School&head,intSchool_ID,intProject_ID);.成绩统voidScoreCount(Schoolf
4、ehead);.输出参赛结果:voidOutPut_Link(Schoolhead);.添加学生薮据:voidAddStudent(Schoolfehead);.菜单函数:intmenuO;.主函数:intmainO;三.模块设计3.1模块设计系统主要包含主程序模块和其它链表操作模块。其调用关系如图2所示。图2模块调用示意图2系统子模块及其功能设计系统设计了8个子功能模块,8个子功能模块的描述如下:.创建学校的链表:voidCreatSchoolLink(School&head);.添加获奖学生:voidAddStudentLink(School&head);.按项目编号查询取得前三或前五名的
5、学校。voidFind_Project_ID(School&head,intProject_ID);.按学校廳号查询皋校某个项目。一voidFind_School_Project(School&head,intSchool_ID,intProject_ID);.成绩统voidScoreCount(Schoolfehead);.输出参赛结果:voidOutPut_Link(Schoolhead):(8).添加学生薮据:voidAddStudent(Schoolfehead):(8).菜单函数:intmenuO;3.3系统模块之间的调用关系系统的10个子模块之间的主要调用关系如图3所示:图3系统函
6、数调用关系图详细设计4.1数据结构设计系统采用线性表的链式存储结构存储学校信息。结点定义如下:typedefstruetSchoolNodeintnumber;/学校编号charname10;intcount;/运动员人数intboyscore:/男子团体总分intgirlscore;/女子团体总分inttotalscore:/团体总分intjifen:/积分Studentstudents20:/参赛学生struetSchoolNode*next;SchoolNode,School;2系统主要模块设计创建学校链表算法思想及程序代码:voidCreatSchoolLink(Schoolfehea
7、d)/创建学校的链表Schoolp:inti;head=p=(School)malloc(sizeof(SchoolNode);for(i=l;inext=(School)malloc(sizeof(SchoolNode);printf(请输入编号为%d的学校的名称:n,i);scanf(%s,p-name);p-number=i;p-count二0;p-boyscore二0;p-girlscore二0;p-totalscore二0;p-jifen二0;p-next二NULL;/使指针指向空head=head-next;/头指针后移添加获奖学生函数程序代码:voidAddStudentLink
8、(School&head)/添加获奖学生SchoolL,p;intSchool_ID:/学校编号charStudentName20:学生姓名intsex;/性别intProject_ID;/项目编号intscore:成绩intranking;名次printf(“请输入学生的姓名:);scanf(%s,StudentName);printfC请输入该学生所在学校的编号:n);scanf(%d,&School_ID);printfC请输入该学空的性别(0女,一男):W);scanf(%d,&sex);printfC请输入该学生参加的项目编号:);scanf(%d,&Project_ID);if(s
9、ex=0)GirlProject二Project_ID;if(sex=l)BoyProject=Project_ID;printfC请输入该学生该项目的冠分:n);scanf(%d,&score);printfC请输入该学生在该项目中的名次:n);scanf(%d,&ranking);L二head;while(L)if(L-number=School_ID)P二L;p-count=p-count+l:运动员数+1该项目得分strcpy(,StudentName);/学生姓名p-studentsp-count.Project二Project_ID;得分
10、项目Project_TProject_ID.count二Project_TProjeccount+1;人数+1_p-studentsp-count.ranking=ranking;/得分洛次p-studentsp-count.score=score;得分p-studentsp-count,sex二sex;性别break;elseL二L一next;按学校项目查询前三名和前五名学校函数程序代码:voidFind_Project_ID(School&head,intProject_ID)/按项目编号查询取得前三或前五名的学校。Schoolh,p:p二h二head;保存链表头指针inti;printf
11、(查询结果如下:n);while(h)for(i=l;icount;i+)if(hstudentsi.Project二二Project_ID)printfC学校:s姓名:%s.名次:dn,h-name,,hstudentsi.ranking);printf(nn);h=hnext;按学校编号查询学校的某个项目程序代码:voidFind_School_Project(School&head,intSchool_ID,intProject_ID)按学校编号査询学校某个烦目一Schoolh,p:intProject_i=0;inti;p二h二head;保存链表头指针wh
12、ile(h)if(h-number=School_ID)p二h;break;h二h-next;for(i=l;icount;i+)if(p-studentsiProject=Project_ID)printfC查询结果如下:W);printf(姓名:sn,p-studentsiname);Project二p-studentsiProject;if(p-studentsisex二二0)printfC性别:女n);Project_i二Project_i+20;elseprintfC性别:男n);printfC项目编号:d项目名称$该项目得分d需次:%dn,p-studentsiProject,Pr
13、oject_TProject.iname,p-studentsiscore,p-studentsiranking);调试分析各子功能测试运行结果如下:5.1创建学校链表运行结果:SBC:Windowssystern32cmd.exe息亠一曰项名生:1目称名:2目跑:3目女号项包号项朝号项入编入瞰一编输冃主月换主冃.0而.称名:4目号顶称泊各为学为学为学为学:5目跑号大号大号大号号项秦编矍范1编入米入工入邮入交入师呵鳥远昙咼幕00tinW项佳規项麻项请15请重请重请重请重编入创建5个学校,分别为重庆工商大学、重庆邮电大学、重庆交通大学、重庆师范大学、重庆大学2添加获奖学生运行结果:固|C:Win
14、dowssystem32cmd.exe 固|C:Windowssystem32cmd.exe 息亠一一R引粗顶名生:1目包:2目包:3ID男号项职号项證号项入编人称名:4目号项编入称名:5目号项编入球曇B-iBial叢囂回I:|息亠一一R引粗顶名生:1目女号项胞号项入编-Ar编入输主冃师圭冃L0顷主冃、IT:I1I:ISBC:Windowssystem32cmd.exe目称项名生:1目(女号项包号项囲号项人编入r编矗编入筍为学如学知学怒国汚目跑号大号大号大号4八斗号项秦编鲁氾.:彳编入米入工入邮入交入师输亘課nrs03ons远咼nds00输肉请项请110顶请120项佳規项麝项请II5请重请重请
15、重请重称名:2目跑:3目称名:4目号顶称泊编入 固|C:Windowssystem32cmd.exe 固|C:Windowssystem32cmd.exe #详细添加学生人数,我们组徐维维己截图,总共输入重庆工商大学9人,其中项目2有5人,项目1、3、4、5各一人,重庆邮电大学1人参加项目5,重庆交通大学2人,参加项目2、5各一人。5.3按项目查找前三名或前五名学校运行结果:固|C:Windowssystem32cmd.exe #固|C:Windowssystem32cmd.exe 3统计4一学校查询一参数设置2添加学生数据结构一-运动会分数统计SBC:Windowssystem32cmd.e
16、xe3IH1X,动别分动别分277L29133Sr积八务:1J_K总曹运团团:?员员:i项:8子子八务4XT本男女总运运运#斬跑綱短咲00:9名:1维维徐固|C:Windowssystem32cmd.exe 五球:5名:s目2隆卑目8显卑引03,I项:8名员琴项:7名员琴项:9名员岁项:?项:6名员分动别分动别分动别姓廿目0次跑尢短迪米文0:半105员员母项:?名动动别分分分运运性扫IHg倚E,亠旳1:90三球大庆貶茶张铅:3:s含忌总:2名哦:4名:2口lr#w?0数姓另目0盜目0曹运团团:1员员琴项:8名0E:i项:9子子分动动别分分分动别分分4IZ于本男女忌运运运师00酢积分分:4淳含思
17、总爰运团团:R员黎次子子分动冲忑子本男女总运固|C:Windowssystem32cmd.exe #由运行结果可以知道,当每个项目人数大于等于5时,按第一种积分计算,第一名取7分,当每个项目总数小于5时,按第二种积分计算,第一名取得是5分。其次还计算了每个学校女子团体总分、男子团体总分、学校总分。5.4按学校编号查找某个项目参加人数函数运行结果:SBC:Windowssystem32cmd.exekn:|回| 姓名:王二顶目名称200米短跑项目名称200米短跑性别:请输人学校编号记5项目查询按其他键退出4统计4一一学校査询一参数设置2添加学生该项目得分82名次:2该项目得分6。名次:6数据结构
18、-一运动会分数统计下2D眇四身长BU?号长B幺幺目目询1目姓性墾_姓性C:Windowssystem32cmdexe下:2如二号杲匚项目名称200米短跑项目名称200米短跑项目名称200米短跑数据结构一-运动会分数统计参数设萱2添加孝生该项目得分丁5该项目得分盹该项目得分?0名决3名次:53统计4一学校查询5项目查询按其他键退出姓名:王五逍癒项且编号汚置尙结果茹下:学校:重庆干商大学半: 用户使用说明该运动会分数统计程序用C语言编写,实现了所要求的大部分功能。(1)按数字键1,使用前首先要进行参数统计,包括参赛学校数(不多余20个),男生项目数(不多于20个)和女生项目数(不多于20个)。设置
19、时同时输入学校及项目的名称,要求输入英文字符。(2)按数字键2用户可以添加获奖学习信息,包括所在学校编号,性别,参赛项目编号,成绩和名次。(3)按数字键3,可以按学校编号输出学校参赛的信息,包括学校的编号名称,男子团体总分,女子团体总分,团体总分,积分。可以输出每个学校的每个运动员的信息,包括姓名,性别,得分项目名称,成绩,名次。可以输出所有的运动项目。(4)按数字键4,可以查询某个学校某个项目的信息。(5)按数字键5,可以按项目编号查询取得前三或前五需的学校。(6)按15之外的数字键可以退出程序。参考文献在编程过程中所参考的文献:数据结构第三版、C语言教程对所设计的软件进行自我评价此源程序代
20、码还存在两点点没有解决的问题,第一学校总分成绩排序没有编写代码,第二男女生参加项目人数没有统计,其他的相关要求基本上达到。在实验过程中出现以下儿点问题:第一,在创建链表时,忽略了不带头结点的指针头指针需要向后移,是由于长期的定式思维,头指针是不能发生改变导致;第二,对链表的掌握不是足够的扎实,因此在处理相关问题的时候,存在很大的障碍,譬如对遍历链表,表头指针的后移;第三,在处理每个项目的前三名和前五名积分是花费了一段时间去理解。程序源代码:#includenstdio.hn#iiicluden)alloc.h#include,stdlib.hn#incliidesumg.htypedefstn
21、ictProjectmtnumber;/项目编号chainan)el0;/项目名称mtcount;/该项目得分人数Pioject_Table;typedefstnictStudentcharname10;mtsex;mtPioject;/参加的项目mtscoie;/成绩mtranking;/次Student;typedefstnictSchoolNodemtnumber;/学校编号chainame10;liltcount;/运动员人数mtbovscoie;/男子团体总分mtgillscoie;女子团体总分mttotalscoie;/团体总分mtjifen;/积分Studentstudents2
22、0;/参赛学生stnictSchoolNode*next;)SchoolNode,*School;mtSchoolCount=0;学校总数mtBovProject=0;男生项目总数mtGiilProject=0;/女生项目总数mtTotalPioject=0;/项目总数Pioject_TablePioject_T41;/项目表voidCreatSchoolLink(Scliool&head)创建学校的链表Schoolp;mti;head=p=(School)n)alloc(sizeof(SchooiNode);foi(i=1;inext=(Scliool)njalloc(sizeof(Scho
23、olNode);pmitf(n请输入编号为d的学校的名称:n”,1);scanf(n%sl,?p-iiame);p-nuinbei-i,p-count=0;p-boyscoie=0,p-gnlscoie=0,p-totalscoie=0;p-jifen=O;p-next=NULL;/使指针指向空liead=head-next;/头指针后移)voidAddStudentLiiiLk(School&head)添加获奖学生SchoolL,p;mtSchool_ID;学校编号chaiStudentNanie20;学生姓名mtsex;/性别mtPioject_ID;项目编号mtscore;成绩mtlai
24、iking;名次pnntf(,f请输入学生的姓名:nH);scaiif(n%s,StudentNanie);printfCiW输入该学生所在学校的编号皿);scaiif(n%d”,&School_ID);printfCiW输入该学王的性别(0-女,-男)3);scaiif(n%dn,&sex);pmitf(”请输入该学生参加的项目编号皿);scanf(%d”,&ProjectJD);if(sex=0)GiilPioject=Pioject_ID;if(sex=l)BovPioject=Pioject_ID,请输入该学生该项目甬得分W);scaiif(”d,&score);pmitf(”请输入该
25、学生在该项目中的名次M“);scaiif(n%d”,&faiiking);L=head;wlule(L)if(L-inunbei=School_ID)P=L;该项目得分人数十1p-coimt=p-count+1;运动员数十1strcpy(,StudentNanie);学生姓名p-snidentsp-count.Pioject=Pioject_ID;/得分项目Pioject_TPioject_ID.coimt=Pioject_TPioject_I叨.count十1;p-stiidentsp-comit.iaiikiiig=raiikiiig;/分名次
26、p-stiidentsp-comitscoie=score;得分p-stiidentsp-count.sex=sex;性别break;elseL=L-next,voidFind_Pioject_ID(School&headjiltPioject_ID)按项目编号查询取得前三或前五名的学校。Schoolh,p;p=h=head;保存链表头指针inti;查询结果如下M”);wlule(h)foi(i=1;icount;i+)if(h-studentsi.Pioject=PiojectD)piintfC学校:s姓名:%s需次:duJh-iKune,hstudemsiiKmieJi-stiidemsi
27、iankrng);pnntfCin);)li=h-next;voidFind_School_Pioject(School&headjntSchool_ID,intPioject_ID)/按学校编号査询学校某个项目Schoolh,p;intPioject_i=0,inti;p=h=head;保存链表头指针wlule(h)if(h-nuniber=School_ID)p=h;break;h=h-next;foi(i=1;icount;i-H-)if(p-stiidentsi.Pioject=Pioject_ID)pmitf(“查询结果如printf(H姓名:sn,p-studentsi.iiame
28、);Pioject_i=p-stiidentsi.Project;if(p-stiidentsi.sex=O)printf(”性别:女n“);Pioject_i=Pioject_i+20;elseprintf(”性别:男n“);)pnntfC项目编号d项目名称s该项目得分%d名次ddi,p-stiidemsi.Pioject,Pioject_TPiojec(_,p-stiideiHsi.scoie,p-stiideiHsi.jLankmg);)voidOutPiit_Lmk(Schoolhead)向屏幕嘯出数据Schoolh,h=head;inti;intPiojectJD;int
29、Pioject_count_i,wlule(h)遍历学校priiitf(学校编号:%dn,h-mimbei);priiitf(学校名称:%snn,li-naiiie);piintfC*本次运动会积%dnn,h-jifen);printf(男子团体总分:%dn,h-boyscore);printfi女子团体总分:%dn,h-giilscore);总分:%dn,h-totalsc01e);运动员数dn”,h-coum);for(i=1;icount;i+)/输出该校学生运动员情况piintfC*运动员姓名:%siiv,h-studentsi.iianie);if(h-studentsi.sex=O
30、)pmitf(性别:女n);elsepiintf(u性别】男11”);ProjectJD=h-studentsi,Project;if(li-stiideiitsi.sex=0)Pioject_ID=Pioject_ID+20;如果是女生则项目表向后移动pnntf(得分项目:%sh,Pioject_TPioject_ID.najne);piintfC*得分dn,li-stiidentsi.score);pnntfC1得分名次:%dn,h-studentsi.iaiiking);)pniitf(n);h=li-next,指针向后移动)pnntf(iiAn”);)voidScoieCount(Sc
31、hool&head)成绩统计Schoolp,p=head;保存链表头指针intbovscoie=0,男子团体总分intgiilscoie=0,女子团体总分inttotalscore=0;/团体总分inti;intPioject_i=0,mtjifen=0;/积分wlule(p)foi(i=1;icount;i+)/计算分数totalscoie=totalscoie+p-studentsi.scoie;计算总分if(p-studentsi.sex=O)gnlscoie=giilscoie+p-studentsi.scoie;/女f团体总分elseboyscoie=bovscoie+p-stude
32、ntsi.scoie;/男子团体总分计算积分Project_i=p-studentsi.Project;if(Pioject_TPioject_i.count=5)/取前玄if(p-snideiitsi.iaiiking=l)jifen=jifen+7;elseif(p-snidentsi.raiiLking=2)jifeii=jifeiH-5;elseif(p-snidentsi.raiiLking=3)jifeii=jifeiH-3;elseif(p-snidentsi.raiiLking=4)jifeii=jifeiH-2;elseif(p-snidentsi.raiiLking=5)j
33、ifeii=jifeiH-l;if(Pioject_TPioject_i.countsnideiitsi.iaiiking=l)jifeu=jifen+5;elseif(p-snidentsi.raiiLking=2)jifeii=jifeiH-3;elseif(p-snidentsi.raiiLking=3)jifeii=jifeiH-2;/fOLp-jifen=jifen;/计算积分p-giilscoie=gnlscoie;/保存女子总分p-bovscoie=bovscoie;/保存男子总分p-totalscoie=totalscoie;/保存总分jifen=0;boyscoie=0;男子团体总分gnlscoie=0;女子团体总分totalscoie=0;总分p=p-next;向后移动扌旨针“while)voidAddStudent(Scliool&head)/添加学生数据inti=l;whileAddStudentLiiik(head);/添加学生数据pmitfCVii是否继续添加学生数据?No=0Yes=lnH);scaiifC%dn,&i);)mtmeini0/*菜单函数*/mtd,pnntf(n数据结构运动会分数统计1卩);piintf(niil-参数设置2-添加学生);pnntf(ii3-统计4一学校查询);pmitf(”n5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水粉烟花课件教学课件
- 出游应急预案
- 旅游业安全规范解析
- 2024年大型并网风力发电机组发电机项目资金需求报告代可行性研究报告
- 物业小区危险源识别
- 吉林省2024七年级数学上册第1章有理数1.7有理数的减法课件新版华东师大版
- 彩色的雨教案反思
- 建筑业薪酬政策
- 林业安防施工合同
- 影视制作薪酬管理
- 国开(浙江)2024年《个人理财》形考作业1-4答案
- 《创意改善生活》课件 2024-2025学年湘美版(2024)初中美术七年级上册
- 2024-2025学年 浙教版七年级数学上册期中(第1-4章)培优试卷
- 个人简历模板(5套完整版)
- CHT 1027-2012 数字正射影像图质量检验技术规程(正式版)
- 文艺复兴经典名著选读智慧树知到期末考试答案章节答案2024年北京大学
- 《中医药健康知识讲座》课件
- 劳务派遣劳务外包服务方案(技术方案)
- 第一章特殊教育概述-特殊教育概论(共4页)
- 炼油厂化重整装置生产原理及工艺
- (完整版)装修主要材料一览表
评论
0/150
提交评论