




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用文档*实践教学*兰州理工大学软件学院2011年秋季学期计算机应用基础 课程设计题 目:运动会分数统计系统专业班级:软件技术(2)班姓 名:刘正翔学 号:11700215指导教师:张墨逸成 绩:摘要1运动会分数统计系统 2.1问题描述与分析 2.1.1 课程设at目的 21.2 系统需求分析 22总体设计3.3详细设计4.3.1 数据类型及重要变量的定义 43.2 函数的设计和实现 54编码95测试136课程设计总结186.1 调试中遇到的较重要问题回顾 186.2 算法的效率及改进设想 19致谭巾20.参考文献21.附录22.文案大全C语言通常别称为高级语言中的中级计算机语言。C语言由于它
2、的可移植性和高效率,各种C语言编译程序均可产生非常紧凑、 执行快捷的目标码。它比任何一种BASIC语言编译 程序的目标码都紧凑、快速。这就要求有较高的理论水平,而且还要求有实际的动手能力。 因此掌握C语言程序设计是学好软件技术的第一步。本课程设计的主要目的是提高实践能力,包括提高C语言的编程能力,长期以来,注重书本知识,轻视实际动手设计能力是教学中普遍存在的现象。 进行课程设计的目的就是要 改变这种状况,使学习者既具有完备的理论知识,也能够解决在实际学习,生活工作中遇到 的问题。学生应该能够把学习到的理论知识运用到实际中去,将知识转变为实际的能力,同 时通过这些理论知识和实际的应用推动理论和实
3、践的发展。关键字:函数,定义,子程序,文本编辑运动会分数统计系统1问题描述与分析1.1 课程设计目的为了巩固我们数据结构知识,加强我们的实际动手能力和提高我们综合素质,提高我 们对计算机软件工程的认识学院组织我们进行了数据结构课程设计。此次课程设计要达到以下几点目的:(1) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。(2)提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用 基本调试方法,迅速找出程序代码中的错误并且修改。(3)培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。(4)初步掌握软件开发过程的问题
4、分析、系统设计、程序编码、测试等基本方法和技能。1.2系统需求分析问题描述:参加运动会有 n个学校,学校编号为1no比赛分成m个男子项目,和 w个女子项目。 项目编号为男子1 m,女子m+1m+w不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)。功能要求:1)可以输入各个学校各个项目的前三名或前五名的成绩;2)能统计各学校总分;3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;5)数据存入
5、文件并能随时查询;6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称。输出形式:有中文提示,各学校分数为整形。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。2总体设计2.1 系统功能设计根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:信息统计模块、 信息输出模块、信息查询模块,其系统功能结构图如图1所示。(1)信息统计模实现信息的输入、统计、存档。(2)信息输出模块,实现信息的输出。(3)信息查询实现信息的查询。运动会分数统计系统信息统计模块信息输出模块信息查询模块输入信息分数统计信息存档查询信息数据存储读出数据系统功能
6、结构图2.2 函数构造根据系统功能结构图的描述,可以构造出该系统的几个基本的函数,其方法名和功 能如表1所示。表1函数功能表函数功能void inputinformation()输入和统计信息函数void output()输出信息函数void inquiry()查询信息函数void writedata()数据存储函数void readdata()读入数据函数3详细设计3.1 数据类型及重要变量的定义(1)定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。定义项目结点的类型 typedef struct int itemnum; / 项目编号int top;项目取
7、名次的数目,由用户定义3或5int range5; 名次int mark5; 分数 itemnode;(2)定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。定义学校结点类型typedef structint schoolnum;学校编号int score;学校总分int mscore;男团体总分int wscore;女团体总分itemnode cm+w; 项目数组schoolnode;(3)定义学校数组schoolnode hn。采用数组结构有利于随机的存储和查询。定义全局标志变量int flagl 、flag2 ,分别用以标志是否已经向系统输入了
8、信息和标志系统中是否已经存在信息。定义文件指针FILE * report ,用来指向存档的文件。3.2 函数的设计和实现在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。(1)信息输入及分数统计功能void inputinformation()为输入信息及分数统计函数。在输入信息的同时进行分数的统计。可以输入各个学校各项目前三名或前五名的成绩。在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。利用 swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7, 5、3、2、1 ,未取得
9、成绩则赋为0。并统计团体总分,男团总分和女团总分。其主要功能代码如下:for(s=0;sk;s+)printf(* 名次:”);scanf(%d,&hi.cj.rangesD;/ 输入所获名次信息if(hi.cj.top=3)switch(hi.cj.ranges) case 0: hi.cj.marks=0; break;case 1: hi.cj.marks=5; break;case 2: hi.cj.marks=3; break;case 3: hi.cj.marks=2; break;elseswitch(hi.cj.ranges) case 0: hi.cj.marks=0; br
10、eak;实用文档case 1: hi.cj.marks=7; break;case 2: hi.cj.marks=5; break;case 3: hi.cj.marks=3; break;case 4: hi.cj.marks=2; break;case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks;(2)信息输出功能void output()为输出函数。列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。利用辅助数组remember口和冒泡排序的方法使之按分数的由高到低输出。
11、利用循环语句do while()当输入2时返回输出目录,输入0是跳出循环返回主菜单。其流程图如图2所示。实用文档图2输出信息模块流程图(3)信息查询功能void inquiry()为查询函数。列车一个查询目录利用swich语句使函数按学校编号或项目 编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。再利用循环语句do while()当输入2是返回查询目录,输入0时跳出循环返回主菜单。其程序流程图如图3所示。图3查询信息模块程序流程图(4)主函数void main()是主函数。列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。想在每次查询结束想返回主菜单进行其它项时
12、,应在main()函数中调用其它函数时再调用main()函数,如:switch(choice) case 1:printf(输入信息:n);inputinformation();writedata();printf(信息已存入档案!);main();case 2:printf(输出信息:n);if(flag1)readdata();output();main();在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回 主菜单。直到用户输入了信息或退出系统。其实现代码如下doprint
13、f(= 欢迎使用=n);printf(nn*运动会分数统计系统*n);printf(nn*1.输入信息*n);printf(*2.输出信息*n);printf(*3.查询信息*n);printf(*4.退出系统*nnn);printf(=nn);printf(*请选择要实现步骤的编号(请确保已经输入信息!):nn);scanf(%d,&choice);if(choice=4)break;else if(choice=1)flag1=0;else if(report=fopen(sportsdata.txt,r)!=null )flag2=0;else system(cls);printf(nn
14、nn系统中无任何信息!nn请先输入信息!!nnnn);while(flag1 & flag2);4编码信息输出功能void output()为输出函数。列出一个输出目录利用 swich语句使函数按学校编号输出或 按学校总分、男团总分、女团总分由高到低排序输出。利用辅助数组 remember口和冒泡排序 的方法使之按分数的由高到低输出。利用循环语句 do while()当输入2时返回输出目录,输 入0是跳出循环返回主菜单。其流程图如图 2所示。跳出结束图2输出信息模块流程图信息输出模块,用来输出信息,可以选择按不同的方式输出信息void output。int choice,i,j,k;int r
15、emembern;int sign;do文案大全printf( printf( printf( printf(*1*2”*”*3.*4.按学校编号输出. 按学校总分输出. 按男团总分输出. 按女团总分输出.*n);*n);*n);*n);请选择编号 *nn:);printf(nn* scanf(%d,&choice);switch(choice)case 1: 按编号顺序输出for(i=0;in;i+)学校编号:%dn,hi.schoolnum);printf(nn*printf( printf( printf( break;”*”*”*学校总分:dn ,hi.score);男团总分:dn,h
16、i.mscore);女团总分:dnnn,hi.wscore);case 2: 按学校总分输出for(i=0;in;i+)rememberi=i;for(i=0;in;i+)for(j=i+1;jn;j+)if(hrememberi.scorehj.score) k=rememberi;rememberi=rememberj; rememberj=k;/用冒泡排序方法,用辅助数组记住学校结点下标for(i=0;in;i+)printf(nn* 学校编号:%dn,hrememberi.schoolnum);printf(* 学校总分:%dn ,hrememberi.score);printf(*
17、男团总分:dn,hrememberi.mscore);printf(* 女团总分:%dnnn,hrememberi.wscore);按所记下标顺序输出 break;case 3: 按男团总分输出for(i=0;in;i+)rememberi=i;for(i=0;in;i+)for(j=i+1;jn;j+)if(hrememberi.scorehj.score)k=rememberi;rememberi=rememberj; rememberj=k;for(i=0;in;i+)printf(nn*学校编号:dn,hrememberi.schoolnum);printf(* 学校总分:%dn ,h
18、rememberi.score);printf(* 男团总分:%dn,hrememberi.mscore);printf(* 女团总分:%dnnn,hrememberi.wscore); break;case 4: 按女团总分输出for(i=0;in;i+)rememberi=i;for(i=0;in;i+)for(j=i+1;jn;j+)if(hrememberi.scorehj.score) k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;i = 小口山口袋运辽会分数雷理衰统,exeA j sz 一 _XQXSXUrfOXA编思总总
19、君团团Rx子男女像愤愦安J:i JXJW;!12 3 4! 3 3 3 JJUJfcJ 3m 33771 737, Rl-1*;t- -17 H_1 JhJJJhJJjhJJJhJJjhJihJ-,J;3 3J3UJ,hJ3irr图6输入信息模块界面用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。如图79分别是按照学校编号、学校总分、女团总分输出的情况。文案大全实用文档 - 3abug阚会分数言理至统.w施 MMENMEHMEMMNWEK - M 箕舞翼苴St M wt M St M it M #t M it M U M *T有*F .按女团总分输出FT
20、 - i*,1=* m i-r *i-r i_u,i_r xu u 1_1 u -,u t-t uj r_i H u -j j u j U t-a *1!RiPfrHi_iHrR_!H7S_fl7frRrW_fl7frR7frHrW_:HW I cj J L * Jh e_ TTfrRiWMrwlRrMifrTHRTFrKTKrtTPrfrTPrraTHrHHMrHTHr:1口1 .走,:&.总 将就见 I1 1 111笔 EmE.矍见见请选择2继续*酬跳出图7按学校编号输出K 6 口 cbugXi动会分歌苜理笈统.一回 S3C M M X H今Z干戈=健级*G跳出2 ? ? OM请选择编号,
21、惬,怩M帼*,帼*帧*$科* M计M * M苜M =匚费夯编、tMe.F 后.$中男女DZ爰力编总趣:1=10图8按学校总分输出文案大全回 应C:mbugit的的雉整物 q出出出 X.rflL.n SI 总总总 校园见 学男女 庭愤能v 7 y T, wj u r 1 一 r II 1 .S- _ l ”, 7 7 0 1 12 11 1113-p褊目回电 编区总虬 团团 团团 噫:1枝 噫熊西请选择2建续小跳出图9按女团总分输出(3)查询信息输入3进入信息查询模块,该模块分为两项,如图10所示图10信息查询模块用户可以选择不同菜单进行查询,如图11和图12分别是按照学校编号和项目编号查询 的
22、情况。I C:Dubug怔就会分数室,货上箕。冲*1 :按学校编号查询*2 :按项目编号查询1 乂千志:亥HT : *- 户 鲂号号名 关舄皋S ?-12 2 2 2校的 的 次 名1早一一蒯:5:1:2:3:4 第次次要次 懿名名名名名(4)退出系统在主菜单下输入4可以退出系统,并有中文提示,如图所示 c :De bu6运前金龛女统计奈婉后税11 回S3K*KdNrM#MWeWWK*ME嗦动会分数统计系统 i*自S.J思统 入出询出 退1火 3丁i请选择要实现步噱的编号(请确保已经输入信息,: 亲出系统,谢谢使用,Pfcss Any key to continue图13退出系统6课程设计总结
23、6.1 调试中遇到的较重要问题回顾(1)提出问题:所有输入输出内容只能在一屏内显示,学过 c语言,很知道 n”是换 行,” f”是换屏的,可是在这里就是无法实现。解决问题:输入clrscr();(2)提出问题:设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作, 或者直接退出系统。分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的 并不是这几个数字时,系统就不能做出正确判断。解决问题:修改case语句,添加default语句提示出错,要求重新输入。源代码如下:Default: clrscr();/* 清屏*/printf(输入错误,请重新选择);(3)提出
24、问题:用户在系统主菜单上进行选择时,若没有输入任何初始信息,而选择 输出或查询操作,系统也会做出相应操作。解决问题:增加标识变量作为循环终止变量,用来判断系统中是否已经输入了信息。若 没有就提示用户先输入信息。6.2 算法的效率及改进设想算法的效率:总的来讲,严重影响执行速度的便是查找,查找任意一个数据,便要将其 所在的结构从头至尾遍历一次,耗费大量的时间。改进设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结 构改为以由有关学校的各种信息为集合的结构。致谢这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的
25、许多不足。平时没有掌握好的知识在这次实验 中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还 存在一些问题没有解决。我相信在以后的学习能够解决好它们。通过本课题程序的设计、调试以及论文的编写,我不仅提高了利用C语言编程及识错能 力和撰写论文的能力,而且它使我更加深入的了解到了计算机应用基础这门课在现实生 活中的重要性。在这次课程设计过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不 能解决,留待日后思考和解决。比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但 结果出了问题,最后还是用了我们熟悉的选择法排序。在编写之前,做整体
26、规划和详细设计很重要。只有思路清晰,设计合理可行,编码才有 可能有的放矢,才能更加有效的完成任务。本次课程设计,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写, 确实有一点困难。但我对于难度一向是以积极迎战的态 度来面对,认真积极努力完成这次课程设计的任务。对我来说这是一次很好的机会,同时我 也很好的把握了这次机会,认真的完成了此次的任务,对自己今后在程序编写方面以及文档 撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。参考文献1王连相,C/C+程序设计教程,中国铁
27、道出版社,20062谭浩强,C语言程序设计,清华大学出版社,19993谭浩强,C程序设计题解与上机指导,清华大学出版社,19994王连相,C/C+程序设计上机指导与测试,中国铁道出版社,20065 C语言函数手册,机械工业出版社,19996 C语言的实际应用,安徽科学技术出版社,2000附录程序:#include#include#include #include # define n 2学校数目# define m 1/男子项目数目# define w 1/女子项目数目# define null 0int flag1=1;int flag2=1;/全局变量,用来标识是否已经向系统输入信息FIL
28、E *report;定义项目结点的类型typedef structint itemnum; / 项目编号int top;项目取名次的数目,由用户定义 3或5int range5; 名次int mark5; 分数itemnode;定义学校结点类型typedef structint schoolnum;学校编号int score;学校总分int mscore;男团体总分int wscore;女团体总分itemnode cm+w; 项目数组schoolnode;schoolnode hn;定义一个学校结点数组/void inputinformation()int i,j,k,s;for(i=0;in
29、;i+)hi.score=0;hi.mscore=0;hi.wscore=0;初始化各结点for(i=0;in | hi.schoolnum=0);输入学校结点信息for(j=0;jm+w | hi.cj.itemnum=0); doprintf(* 取前 3 名 or 前 5 名:);scanf(%d,&hi.cj.top);while(hi.cj.top!=3 & hi.cj.top!=5);printf(* 获得几个名次:”); scanf(%d,&k); 输入项目信息for(s=0;s5;s+)hi.cj.ranges=0, hi.cj.marks=0;初始化排名和分数for(s=0;
30、sk;s+) printf(* 名次:);scanf(%d,&hi.cj.rangesD;输入所获名次信息if(hi.cj.top=3)switch(hi.cj.ranges) case 0: hi.cj.marks=0; break;case 1: hi.cj.marks=5; break;case 2: hi.cj.marks=3; break;case 3: hi.cj.marks=2; break;elseswitch(hi.cj.ranges)case 0: hi.cj.marks=0; break;case 1: hi.cj.marks=7; break;case 2: hi.cj
31、.marks=5; break;case 3: hi.cj.marks=3; break;case 4: hi.cj.marks=2; break;case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks;按取前三名还是取前五名分别记分if(j=m-1)hi.mscore=hi.mscore+hi.cj.marks;是男子项目则记到男子分数里面去elsehi.wscore=hi.wscore+hi.cj.marks;是女子项目则记到女子项目里面去 printf(n);信息输出模块,用来输出信息,可以选择按不同的方式输出信息void
32、output。int choice,i,j,k;int remembern;int sign;doprintf(”*1.printf(”*2.printf(”*3.按学校编号输出按学校总分输出按男团总分输出*n);*n);*n);printf(”*4.按女团总分输出*n);printf(nn*请选择编号*nn:);scanf(%d,&choice);switch(choice)case 1: 按编号顺序输出for(i=0;in;i+)printf(nn* 学校编号:dn,hi.schoolnum);printf(*学校总分:%dn ,hi.score);printf(* 男团总分:%dn,hi
33、.mscore);printf(*女团总分:%dnnn,hi.wscore); break;case 2: 按学校总分输出for(i=0;in;i+)rememberi=i;for(i=0;in;i+)for(j=i+1;jn;j+)if(hrememberi.scorehj.score) k=rememberi;rememberi=rememberj; rememberj=k;/用冒泡排序方法,用辅助数组记住学校结点下标for(i=0;in;i+)printf(nn*学校编号:%dn,hrememberi.schoolnum);printf(* 学校总分:%dn ,hrememberi.sc
34、ore);printf(* 男团总分:dn,hrememberi.mscore);printf(* 女团总分:%dnnn,hrememberi.wscore);按所记下标顺序输出break;case 3: 按男团总分输出for(i=0;in;i+)rememberi=i;for(i=0;in;i+)for(j=i+1;jn;j+)if(hrememberi.scorehj.score)k=rememberi;rememberi=rememberj; rememberj=k;for(i=0;in;i+)printf(nn*学校编号:dn,hrememberi.schoolnum);printf(
35、* 学校总分:%dn ,hrememberi.score);printf(* 男团总分:%dn,hrememberi.mscore);printf(* 女团总分:%dnnn,hrememberi.wscore);break;case 4: 按女团总分输出for(i=0;in;i+)rememberi=i;for(i=0;in;i+)for(j=i+1;jn;j+)if(hrememberi.scorehj.score)k=rememberi;rememberi=rememberj; rememberj=k;for(i=0;in)printf(错误:这个学校没有参加此次运动会!nnn);else
36、printf(要查询的项目编号:); scanf(%d,&j);if(jm+w|j=0)printf(此次运动会没有这个项目nnn);学校编号超出范围,则输出警告elseprintf(这个项目取前 d名,该学校的成绩如下:n, h0.cj-1.top);for(k=0;km+w|s=0)printf(此次运动会不包括这个项目.nnn);项目编号超出范围则输出警告elseprintf(该项目取前%d名,取得名次的学校n,h0.cs-1.top);for(i=0; in;i+)for(j=0;j5;j+)if(hi.cs-1.rangej!=0)printf(学校编号:d,名次:dn,hi.sch
37、oolnum,hi.cs-1.rangej);输出该项目取得名次学校的成绩printf(nnn 继续 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2);break;void writedata()把数据存储在文件中 /FILE *report; int i; if(report=fopen(sportsdata.txt,w)尸null) printf(文件不存在,不能打开文件!n);exit(1); for(i=0;in;i+) fwrite(&hi,sizeof(schoolnode),1,report); fclose(report);按头结点块写入void readdata()读出文件中数据的函数 /FILE *report; int i,j,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025汽车配件商店股份转让合同
- 农业数字化融合路径-洞察及研究
- 工地环保演练方案
- 酒店推销家具方案模板
- 展厅柱子施工方案
- 保护水库拆迁补偿方案
- 二零二五年度重点工程安保力量聘用合同
- 2025版腾讯云游戏云服务合同书
- 二零二五年度新型塑料材料买卖合同样本修订
- 二零二五年度按揭贷款合同书范本(个人经营)
- 部编级下册期末语文集体备课表
- 2022北京冬奥会举办宣传15课件
- 土壤分析技术规范(第二版)
- 城市园林绿化养护管理质量要求
- 四风问题整改台账
- 2012 EAPC 阿片类药物治疗癌痛指南
- DB41∕T 2202-2021 水利工程白蚁防治项目验收技术规程
- 模板10KV架空双回线路安装竣工资料
- 蒸车操作规程
- 施工现场临水临电标准化图册
- 钢化炉操作手册
评论
0/150
提交评论