运动会分数统计数据结构课程设计方案(含源代码)_第1页
运动会分数统计数据结构课程设计方案(含源代码)_第2页
运动会分数统计数据结构课程设计方案(含源代码)_第3页
免费预览已结束,剩余35页可下载查看

下载本文档

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

文档简介

1、计算机学院信管专业数据结构课程设计题目:运动会分数统计班级:姓名: 学号:同组人姓名:起迄日期:课程设计地点:指导教师:评阅意见:成绩评定:评阅人:日期:完成日期: 2013 年 12 月目录1、需求分析 022、概要设计 033、详细设计 044、调试分析和测试结果 055、总结 136、参考文献 147、致谢 148、附录 141、需求分析(1)任务:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和 w个女子项目。项目编号为男子1 m,女子m+1 m+w。不同的项目取前 五名或前三名积分;取前五名的积分分别为: 7、5、3、2、1,前三名的积分分 别为: 5、3、2;哪些取前

2、五名或前三名由学生自己设定。 (m<=20,n<=20)(2)功能要求:a).可以输入各个项目的前三名或前五名的成绩;b).能统计各学校总分,c).可以按学校编号、学校总分、男女团体总分排序输出;d).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三 或前五名的学校。(3)规定:输入数据形式和范围: 20 以内的整数(如果做得更好可以输入学校的名称, 运动项目的名称)( 4)输出形式:有中文提示,各学校分数为整形(5)界面要求:有合理的提示, 每个功能可以设立菜单, 根据提示, 可以完成相关的功能要 求。(6)存储结构:学生自己根据系统功能要求自己设计, 但是要求运

3、动会的相关数据要存储在 数据文件中。(7)测试数据:要求使用 1、全部合法数据; 2、整体非法数据; 3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;2、概要设计(1)文字分析本课设要求输入信息, 统计分数, 执行排序与查找功能, 在要求中没有在建 立数据之后进行插入和删除操作, 而在排序和查找过程中有许多的随机读取数据 操作,因此使用顺序结构而不用链表。 由于各个要求属性具有一定的联系, 在定 义数据时使用结构体和结构体数组来存储信息数据。 考虑到程序的要求在设计函 数时将学校个数和项目个数设计为可变的数据,为方便使用设计菜单函数(menU,而由于要

4、求将信息存储在文件中故设计文件的存储(savetofile )与 读取函数( readfromfile ),信息输入函数( input )在输入基本信息后由系统 统计总分的内容并全部存入文件 file 中,在接下来的函数中开始都需要读取文 件中的信息,信息的输出( output )输出输入函数中统计后的各项信息,在排序 输出( sortput )中使用冒泡排序法进行不同关键字的排序,查询函数(search)采用顺序表的查找来完成。3、详细设计(1)项目数据表:运动会系统先制定本次运动会所需的参赛项目。本数据表根据要求设计存储 每个项目的编号、要取的名次、各个名次名称及各名次对应的分数。用于对以

5、后项目情况的统计已及查询。其中inum,top,range由输入信息输入,而 mark有range和top决定。typedef struct int inum;/*项目编号*/int top;/*取名次的数目*/in t ra nge 5;/* 名次 */int mark5;/* 分数 */ite mnode;/*存放项目信息*/2)学校数据表:本数据表根据要求储存了各个参赛学校的总体情况, 包括学校的编号、 学校 总分、男子团体总分、女子团体总分,并且包括项目数据数组 tn 。其中 snum 和 tn 中部分数据由输入信息输入,而其他三项内容 score,mscore,wscore 将 由系

6、统进行自动统计。typedef struct/*学校编号 */ /*学校总分 */ /* 男团体总分 */ /* 女团体总分 */int snum;int score;int mscore;int wscore;itemnode tM+W; /* 项目数组 */ snode; snode aN; 这二个数据表相关联接, (3)模块划分1、Void menu(int n,int m,int w)2、Void savetofile()3、Void readfromfile()4、Void input(int n,int m,int w)5、Void output(int n,int m,int w

7、)6、Void sortput(int n,int m,int w)7、Void search(int n,int m,int w)/* 存放学校信息 */* 定义一个学校数组 */an 中包括 tn形成一个整体。功能是提供界面窗口 功能是保存输入的运动会信息到 file 文件 功能是从 file 文件中读取运动会信息 功能是输入信息并统计 功能是按学校、项目输出统计信息 功能是按四种方法排序并输出结果 功能是按两种方法查询并输出结果4、调试分析与测试结果(1)测试数据测试取学校个数为 3,男子项目个数 2. 女子项目个数 1(2)测试结果1、主菜单界面欢迎使用 “运动会分数统制 胡先输入运动

8、会主要信息關入季校个数:目编号 1 (男)编号 2 (男)编号 3 (女)学校取前3取前5取前5编号1编号2名次31、43、4名次22、51、5编号3名次132欢迎使坤*运动会分教统十诜输入运动会主要信息 d入学较个数沖 i入舅子项目个数汐 d入女字项目木籤汽欧迎使用*运动会分数统七息计序息岀 信统書退晴选择要实现步骤的编号(0-4:2、信息输入运行测试a).信息输入次迎使用X MiX K 来耳恥来:WE MSW耳芬I井纟充 lj" 纟北 XMiXXKlCXUNJtX-flMMM MMME M4cm t-r -u bjt i-r tj t-t fl入岀岀询统 st 息计序息岀 信统普

9、退锥常实现步骤的编号0-4:1:1甫3名或前5名強或者5* 3得名次个数13; 1 斤获名次13=3名次个数“一5» 2 名次 15:1 名次CL-5)討SH编号章前3名或前5名铝或者5:5玄次不数"-5: 2名次 155:3名次 15:4b).输入完成1 ><0«尊前次次 雷编曇名 诜_枝口片得E-J?;名5>5 一 上U - 亠冃1口豆刖次次次编取名且目得篥-53 4前次次次取名名名2 14b 1 3丿 c 尊前次次 编编矍名 校目目黨浚取前3名或前5名3或者5 :5赛養站茨个数15s 2所叢名次“-5:2所获名5 = 5扌取前3名威前5名铝

10、或者5X5 諸次个数2丈名次15:1E 名次 15):5名3>5 - 1 上U - S 亠R 1 >尊慚次次编编矍名校目目得获4 55 一 3 -U -: 亠冃1 >g< 5 文一 谱1- 3y < 前次次 鑿名55 - 2-U - *T 1 )1 号前次無 编豎名欢迎使用耳at耳X it耳K E ME算)Fj2壬近j娄攵纟充l击系纟冗KMiXXUfJCKiUXltM:口 h x 丄 y h h#wwwmrww 蛊.出出S*M-M-算逐耳梵H-»e幘选择要实现歩骤的编号0-,3、统计输出运行测试a) 统计输出欢迫使用!, 运动会分数统计系统! '

11、入岀出询统 m 自心计富苗 信统體退< M:M M:"斗女团总分噌1111现按骤旳编号個 芯土护科数4 -壽号汐谕取名次数量汚次:1分数:?fe=4并薮汐JS目编号胡 所取名次数量咔茨汴分数泠次注分数:上隸駭雞:严总分女团总分胡分总a男日7:1秋 分欣 总名 校取冲话:3所:&:1所:7:1 魏 数数 宴数2 1LVT 2 SJ.VT- 3 TSJ s : 7777._5 口韦 号扁扁2扁2 £扁1 £冬却 S : z * : 校目次目無次目次次女团总尸汚3曰至量曰互 T数数数 分次次次 总名名名 校取取取 需:5所:3听汚 吻:藝 3 1 VT 2

12、 ku 3 . .u s ! /7- - /7 口瓦韦号号 扁扁1 S 3 offl 2 自勺: 自- 狡冃次目次DT次死计完毕?返回? 1是2否b) .统计输出完毕统计完毕*返回于是£否丄欢迎使用*运动会分数统计 玲如事来«* MitaifME*E K * MrKMrMW« *MW1 N ifaj hjj 14 w .4 竺M R M M « M. M J_ . | 口 .IJj、'M M M M M | BxmxxmxxB .退岀系统猜选择要实现歩骤的编号馆-7;4、排序输出运行测试a).选择排序输出形式欢迎使用*1垂动会分数统计 系统*入岀

13、出询统 系 自计-llSniS 岀 -请选择旻实现出骤的编号0-4 :3"g"x“""护k.予输 岀系竝M MM M-4输 口不分分 编总总总 叢团团女 n E K搭耳情选择要实现功能的编号1-4:b).按学校编号输出KXXKK运动会分数统计 系统XXKMXmXKX入出岀询统 输.f 自殊罟心出 基薯退KN wJOCKH KXJIKJC XME KXME请选择要*2車詈*3最男团总分*4-按女团总分:M M;来 JI1 k C 6 7 3 号:1:1=10 Is分分分 的总总总菜 能主 功也書啬 现 读 实=1:2叮丄 戸-BE-S 蕩编编> 选咬

14、皎咬先 请w?盂Tc).按学校总分输出當编騙择 迤驾该咬选 臺盂卡s'辔'I'.-B'19 8 »« S 分分分 i总总总 >:团团团04:3_KiM耳 8耳光疋光覧1:1耳:疋申g 序出N ME ifrM'JI,.貝1貝且乙!FW M F TFT Ji B口昇分分编总总总H团 赛頁女实现功能的编号1-4 ;1嘗狡总分皿=3申楼总分皿 1返向主菜单百继续旺翌以-o女团总分汚M梵来:HMM-MM女团总分拓实 : 择编编編择 选选 亶请2 13- ; 158 - 5团短团女女女19 18»« 二分分分 2总总总

15、>:团团团 <l-;k 口 ip=lil=le 8主d).按男团总分输出*林排序输岀系统OKKR分 编凸甞心总 曙团团 WSR女耳一”楝宝JJIE E «M M M Mj .d).按女团总分输出119 8功?Hr于 实:1:2詔1<-673 号:1:1:1 編分分分苗 的总总总辛分分分 日总总总 >团团团119 8分分分1总总总>:团®团号:l:l:lp 编分分分单 的总总总注木 能主 功回 现 返 实:1;2:31病119-8 E 分分分 11女团总分汚58 - 5:2r返回主東单o继续记分分分3总总总实现功能的编号14 冷嘗狡总分汕7:1爭

16、交总分卄 =3率桂总4: 13 1返商主菜豐I二>:团团团Y 甲 W®R4 67 3 口 lp:l:l:l8 编分分分单 的总总总!ek 能主 功宀回女女女19 18 - 分分分 4总总总 >:团团团- 纟-<1:3 歸 曰冇吐:1:10 编分分令单 的总总总菜 能亠有2-=一番编编择86现 返 实:1:2:31 蒙编编择 选:选功冲盂率回 现 返 实:2:1 善包总万 sfwg编择 噬咬亠役咬选 Shhh于胃2 13;L »» i5、信息查询运行测试a).选择信息查询方式欢迎使用*运动 乞 分 教纟兀计系统W-KM M-M-MMriHf*2*3

17、4二二二二二二二賈二入出岀询统 端渝一鲁_耳 自甘罟心岀 信统辔退KME址梵选查杳:次选功能的编号<12>:1疇器聽爲空学校的翩如下:1 返回主菜单0-<贋选择要实现步囁的编号HCiOEitKiMKUfiCiOfKaifltfM: *tri 旬 系号K 梵 i< :梵 K if iff X 梵 K 梵站輦梵 Kfl 按学校编号查询I* 按项目编号查询*丄按学校编好查询* 2fe项目编号查询*晴选择要实现功能的蝙号<1-2>b).按学校编号查询c) .按项目编号查询XK K Mi Jf >f K W Ml 电孑:旬 蔡绍K W KU WK MiXkH廉M

18、:来:M瞬 该 獻 d 12% JJ " 能:'3占 功编S3蟲.项瑕 番的目 择询篡:3择 选查查个次选M :阴3 態!PF 功编名齢 现目3"- 实项前=1碣=3箍 醫書苕苕有:1 择询目编编编择 选查项选:1菜+次次次主名名名回6、退出系统运行测试欢迎使用运动会分数统计系统MMMHMM*w*2 *4 .信忌尊调*0*退出耳生|jj / 乙 Mi MT N SM X Mi SM L|_J 7iIII r P 1 u- M XJ- U* M xj- Ml 廿出Zth "匚 In-r i-F ir _r i_a晴选择要实现步骤的编号倜-j欢迎使用»

19、;*2.3*3, j*4*q入出出询统 輛撤響_系 亠一巨宛悲一口艮梵耳覽梵K>E>fMSMrac 耳 iotn騎«骤的编号Pess «ny key to cantinue5、总结通过为期四天的课程设计,我对数据结构这门课程有了更深一步的了 解,使我对数据结构这门课程掌握以及运用更加灵活。虽然是应用C语言来编写程序,但却深刻的体现了数据结构对编程的重要性。这次课程设计运用C语言与数据结构知识,编写一个运动会分数统计系统。 其中遇到了不少问题,因为对数据结构这一门课程掌握不够熟练以及平时自 己在编写一些普通常见的程序时只是运用单一的知识而课程设计却需要将各个 方面

20、的内容联系结合,例如文件与程序的结合,输入、输出、统计、查找的综合 应用等,因此真正的程序设计必须先有一个正确的算法思想, 运用正确的数据结构和编程语言,灵活的运用并联系几个方面的内容。通过课程设计也使我认识到, 要学好编程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们 学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书 本上的东西6、参考文献1 严蔚敏,吴伟民;数据结构(C语言版),清华大学出版社,2007年2 王裕明;数据结构与程序设计,清华大学出版社,2010年3 谭浩强;C语言程序设计(第三版),北京航空航天大学出版社,2005年4 李建学;数据结构课

21、程设计案例精编(用C/C+描述),清华大学出版社,2007年5 催俊凯;计算机软件基础,机械工业出版社,2007年67、致谢本次试验能够如期完成,主要是要感谢席老师课堂上的讲解以及指导,才能使我对数据结构这门课程有较为深入的理解与掌握,才能在本次课程设计中 得以运用。再加上课程设计过程中的程序设计建议,才使得这次课程设计中所遇到的问题能够较快的解决其次,我还要感谢和我一组的赵咏荔同学, 通过两个人的共同协作,才使得 本次课程设计能够较好的完成。同时,还要感谢平时课堂上以及课堂外给我帮助 的同学们,能够热心的为我解答我所存在的疑问,并为我的程序提出一些建议。8、附录源代码:#i nclude&l

22、t;stdio.h>#in clude <process.h>#defi ne N 20#in clude<math.h>/*学校最大数目*/#define M 20 /* 男子项目最大数目 */ #define W 20 /* 女子项目最大数目 */ typedef struct/* 项目编号 */* 取名次的数目 */*名次*/*分数*/* 存放项目信息 */int inum;int top;int range5;int mark5; itemnode; typedef struct int snum;/* 学校编号 */int score;/* 学校总分 *

23、/int mscore;/* 男团体总分 */int wscore;/* 女团体总分 */itemnode tM+W; /* 项目数组 */snode;/* 存放学校信息 */snode aN;/* 定义一个学校数组 */void menu(int n,int m,int w) /* 菜单函数 */int c;void input(int n,int m,int w); void output(int n,int m,int w); void sortput(int n,int m,int w); void search(int n,int m,int w); printf("ttt

24、 欢迎使用 ttttnn");printf("t*运动会分数统计系统 *nn");printf("tt*1.信息输入 *n");printf("tt*2.统计输出 *n");printf("tt*3.排序输出printf("tt*4.信息查询printf("tt*0.退出系统* nn");*n");*n");nn");printf(" 请选择要实现步骤的编号 (0-4):");scanf("%d",&c);s

25、witch(c)case 1: input(n,m,w);break;case 2: output(n,m,w);break;case 3:sortput(n,m,w);break;case 4: search(n,m,w);break;case 0:printf("谢谢使用,再见!n");exit(0);default:printf(" 输入错误 ,请重试 !n");menu(n,m,w);void savetofile()/* 信息存入文件 file*/FILE *fp;int i;if(fp=fopen("file.txt",&

26、quot;w")=NULL)printf("cannot open the filen");return;for(i=0;i<N;i+)if(ai.snum!='0')if(fwrite(&ai,sizeof(snode),1,fp)!=1)printf("file write errorn");return;fclose(fp);void readfromfile() /*信息从文件 file 中取出 */int i;FILE *fp;if(fp=fopen("file.txt","

27、rb")=NULL)printf("cannot open the filen");return;for(i=0;i<N;i+)fread(&ai,sizeof(snode),1,fp);fclose(fp);/*1.信息输入 */void input(int n,int m,int w) int i,j,s,k,q=0;for(i=0;i<n;i+)printf("学校编号:");scanf("%d",&ai.snum); /* 输入学校信息 */ for(j=0;j<m+w;j+)pri

28、ntf(" 项目编号 :");scanf("%d",&ai.tj.inum);printf(" 项目取前 3名或前 5名(3 或者 5):");scanf("%d",&ai.tj.top);if(ai.tj.top=3)printf("获得名次个数(1-3):");elseprintf("获得名次个数(1-5):");scanf("%d",&k);/* 输入项目信息 */for(s=0;s<k;s+)if(ai.tj.top=

29、3)printf(" 所获名次 (1-3):");elseprintf(" 所获名次 (1-5):");scanf("%d",&ai.tj.ranges); /* 输入所获名次信息 */ printf("n");for(i=0;i<n;i+)ai.score=0;ai.mscore=0;ai.wscore=0; /* 初始化分数 */for(i=0;i<n;i+)for(j=0;j<m+w;j+)for(s=0;s<5;s+)if(ai.tj.top=3)switch(ai.tj.r

30、anges)case 0: ai.tj.marks=0; break;case 1: ai.tj.marks=5; break;case 2: ai.tj.marks=3; break;case 3: ai.tj.marks=2; break; else if(ai.tj.top=5)switch(ai.tj.ranges)case 0: ai.tj.marks=0; break;case 1: ai.tj.marks=7; break;case 2: ai.tj.marks=5; break;case 3: ai.tj.marks=3; break;case 4: ai.tj.marks=2

31、; break;case 5: ai.tj.marks=1; break; elseprintf("信息有误!"); printf("n");exit(0);ai.score=ai.score+ai.tj.marks; /* 记学校总分 */ if(j<=m-1)ai.mscore=ai.mscore+ai.tj.marks; /* 记男子团体总分 */ elseai.wscore=ai.wscore+ai.tj.marks; /* 记女子团体总分 */printf("输入完毕!返回? 1是2否n");/*返回菜单*/scanf

32、("%d",&q);printf("n");if(q!=1)printf(" 不能再添加信息 !");printf("n");savetofile();/*将信息存入文件 file*/menu(n,m,w);void output(int n,int m,int w)/*2.统计输出 */readfromfile();int i,j,s,q=0;for(i=0;i<n;i+)/*显示结果 */printf("学校编号:%d 学校总分:%d男团总分:%d 女团总分 :%dn",ai.

33、snum,ai.score,ai.mscore,ai.wscore);for(j=0;j<m+w;j+)printf(" 项目编号 :%d 所取名次数量 :%dn",ai.tj.inum,ai.tj.top); for(s=0;s<5;s+)if(ai.tj.ranges!=0)printf(" 名次 :%d 分数 :%dn",ai.tj.ranges,ai.tj.marks); printf("n"); printf("n");printf(" 统计完毕 !返回 ? 1 是 2 否"

34、;);/* 返回菜单 */scanf("%d",&q);printf("n");if(q!=1)printf(" 统计已经结束 !");printf("n");menu(n,m,w);/*3. 排序输出 */void sortput(int n,int m,int w)readfromfile();int c,i,j,k,q=0;int tempN;printf("t*排序输出系统 *nn");printf("tt*1. 按学校编号输出 *n"); printf(&q

35、uot;tt*2. 按学校总分输出 *n"); printf("tt*3. 按男团总分输出 *n"); printf("tt*4. 按女团总分输出 *n");nn");doprintf(" 请选择要实现功能的编号 (1-4):"); scanf("%d",&c);switch(c)case 1:for(i=0;i<n;i+) tempi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+) if(atempi.snum>aj.snum) k=tem

36、pi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序 */ for(i=0;i<n;i+)printf(" 学校编号 :%d 学校总分 :%d 男团总分 :%d 女团总分:dn ",atempi.s nu m,atempi.score,atempi.mscore,atempi.wscore); /* 按学校编号输出 */ break;case 2:for(i=0;i<n;i+) tempi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(atempi.score<aj.score)k=tempi

37、;tempi=tempj;tempj=k; /* 用冒泡排序方法排序 */for(i=0;i<n;i+)printf(" 学校编号 :%d 学校总分 :%d 男团总分 :%d 女团总分:dn ",atempi.s nu m,atempi.score,atempi.mscore,atempi.wscore);/* 按学校总分输出 */break;case 3:for(i=0;i<n;i+)tempi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(atempi.mscore<aj.mscore)k=tempi;tempi

38、=tempj;tempj=k; /* 用冒泡排序方法排序 */for(i=0;i<n;i+)printf(" 学校编号 :%d 学校总分 :%d 男团总分 :%d 女团总分:dn ",atempi.s nu m,atempi.score,atempi.mscore,atempi.wscore);/* 按男团总分输出 */break;case 4:for(i=0;i<n;i+)tempi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(atempi.wscore<aj.wscore)k=tempi; tempi=temp

39、j;tempj=k; /* 用冒泡排序方法排序 */for(i=0;i<n;i+)printf(" 学校编号 :%d 学校总分 :%d 男团总分 :%d 女团总分:dn ",atempi.s nu m,atempi.score,atempi.mscore,atempi.wscore);/* 按女团总分输出 */break;default:printf("输入错误,请重试!n");printf(" 请选择 1 返回主菜单 0 继续");/* 返回菜单或继续排序 */scanf("%d",&q);prin

40、tf("n");while(q=0); printf("n"); if(q!=0)/*查询函数 */menu(n,m,w);void search(int n,int m,int w)readfromfile();int c,i,j,k,d,l,q=0;printf("t* *查询系统 *nn");printf("tt*1. 按学校编号查询 *n");printf("tt*2. 按项目编号查询 *n");nn");dok=-1;d=-1;l=-1;printf(" 请选择要实现功能的编号 (1-2):"); scanf("%d",&c);switch(c)case 1:printf(" 要查询的学校编号 :");/*查找学校编号下标 */sca

温馨提示

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

评论

0/150

提交评论