




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中国矿业大学徐海学院计算机系软件认知实践报告姓 名: 王震 学 号: 22120494 专 业: 计算机科学与技术 设计题目: 运动会分数统计 指导教师: 吴川 2013年12月目 录第1章 题目概述1第1.1节 题目要求1第1.2节 主要难点1第2章 系统流程图3第3章 数据结构和算法3第4章 核心代码分析与调试4第5章 复杂度分析.11参考文献.11附录:.12中国矿业大学徐海学院软件认知实践报告第1章 题目概述参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、
2、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)第1.1节 题目要求一、题目要求:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。5)数据存入文件并能随时查询 6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形二、界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。三、存储结构:学生自己根据系统功能要求自己设
3、计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构。四、测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。第1.2节 主要难点1.用冒泡排序方法,用数组记住头结点下标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=remembe
4、rj,rememberj=k; 2.根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。这也有利于以后项目情况的查询。typedef structint itemnum; /项目编号 int top; /取名次的数目int range5; /名次int mark5; /分数 itemnode; /定义项目结点的类型3.储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分和学校总分。其中学校编号和名称是提前输入的,而其他三项内容将由系统进行自动统计。typed
5、ef structint schoolnum; /学校编号int score; /学校总分int mscore; /男团体总分int wscore; /女团体总分itemnode cm+w; /项目数组headnode;/定义头结点类型4.对各个学校的报名情况及成绩进行汇总,为了操作方便,只包含了学校的编号、项目的编号以及其在比赛中的成绩。typedef struct /*单项成绩*/ int schoolnum; /*学校编号*/ int itemnum; /* 项目编号*/ int xmch; /*项目成绩*/danx; 第2章 系统流程图开始-初始化输入判断N Y输入学校及男女项目范围输
6、入某项目各名次成绩Y继续输入N查询团体总分Case3成绩查询Case2Y继续Case1N查询各学校成绩Y输出查询学校成绩继续N结束退出第3章 数据结构和算法本方案要求准备结构体数组、读写文件。还能把信息直接输入存储到文件中,读取文件中信息,从而得到结果。 (1) 菜单设计分为主函数菜单、比赛成绩输出菜单、查询分数统计结果菜单、查询方式子菜单。 (2) 数据保存方式建立文件,数据保存在文件中。运动运分数统计程序(3) 数据类型采用结构体类型。(4) 存储结构采用结构体类型数组存储结构存储。(5) 算法设计输入比赛结果模块中运用了冒泡算法将输入的数据排序。第4章 核心代码分析1.核心代码 void
7、 inputinformation() /输入信息,建立系统 int i,j,k,s; for(i=0;in)printf(错误:这个学校没有参加此次运动会!nnn); elseprintf(要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告 else printf(这个项目取前 %d名,该学校的成绩如下:n, h0.cj-1.top); for(k=0;km+w|s=0)printf(此次运动会不包括这个项目.nnn);/项目编号超出范围则输出警告elseprintf(该项目取前 %d名,
8、取得名次的学校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.schoolnum,hi.cs-1.rangej); /输出该项目取得名次学校的成绩 printf(nnn继续 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2); break;2.调试结果:(1)首先运行文件运动会统计分数系统(2) 输入信息:程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。输入1得到进入输入信息模块。按回车键可得到学校的得分
9、信息和按编号获得的所以信息。(3)输出信息:输入2进入输出信息模块,该模块分四项: 按学校编号输出: 按学校总分输出: 按男团总分输出: 按女团总分输出: 输入2返回输出信息模块,输入0返回主菜单。(4)查询信息:输入3进入信息查询模块: 按学校编号查询 按项目编号查询 输入错误信息时给出提示: 输入2继续查询,输入0返回主菜单第5章 复杂度分析时间复杂度的计算:数据初始录入中学校为O(b),项目为O(c),成绩的录入为O(a),统计函数调入内存函数为O(a+b+c),学校成绩统计为O(a+2)*b),项目统计为O(a+1)*c),按学校编号、按学校总成绩、男团和女团输出函数为O(b2/2),
10、查询某校某项目函数为O(c*b*5/2),查询某项目的信息为O(5*b*c/2)。参考文献1 陈志泊,王春铃. 面向对象的程序设计语言C+.北京:人民邮电出版社,20042 数据结构(C+版),严蔚敏,清华大学出版社,20103 C语言 杨磊,中国矿业大学出版社2012.4 C+程序设计. 吴乃陵 况迎辉.第2版.高等教育出版社,2012 附录:#include#include#include #include #define n 2/学校数目 #define m 1/男子项目数目 #define w 1/女子项目数目#define null 0typedef struct int itemn
11、um; /项目编号 int top; /取名次的数目 int range5; /名次 int mark5; /分数itemnode; /定义项目结点的类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组headnode;/定义头结点类型headnode hn;/定义一个头结点数组void inputinformation() /输入信息,建立系统int i,j,k,s; for(i=0;in;i+) hi.score=0;
12、hi.mscore=0; hi.wscore=0; /初始化头结点 for(i=0;in;i+) printf(*学校编号:); scanf(%d,&hi.schoolnum); /输入头结点信息 for(j=0;jm+w;j+) printf(*项目编号:); scanf(%d,&hi.cj.itemnum); printf(*取前3名or前5名:); scanf(%d,&hi.cj.top); printf(*获得几个名次:); scanf(%d,&k); /输入项目信息 for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数 for
13、(s=0;sk;s+) printf(*名次:); scanf(%d,&hi.cj.ranges); /输入所获名次信息 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; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; bre
14、ak; 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; /按取前三名还是取前五名分别记分 if(j=m-1)hi.mscore=hi.mscore+hi.cj.marks;/是男子项目则记到男子分数里面去 else hi.wscore=hi.wscore+hi.cj.marks;/是女子项目则记到女子项目里面去 printf(n); void
15、output() /输出函数 int choice,i,j,k;int remembern;int sign; do printf(*1.按学校编号输出.*n); printf(*2.按学校总分输出.*n); printf(*3.按男团总分输出.*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(*
16、男团总分:%dn,hi.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(*学
17、校总分:%dn ,hrememberi.score); 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.mscorehj.mscore)k=rememberi;rememberi=rememberj;rememberj=k; for(i=0;in;i+) printf(nn*学
18、校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%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.wscorehj.wscore) k=rememberi;rememberi=rememberj;remember
19、j=k; for(i=0;in)printf(错误:这个学校没有参加此次运动会!nnn); elseprintf(要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告 else printf(这个项目取前 %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+) f
20、or(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf(学校编号:%d,名次:%dn,hi.schoolnum,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+)fw
21、rite(&hi,sizeof(headnode),1,report); fclose(report); /按头结点块写入 void readdata() /读出文件中数据的函数 FILE *report; int i,j,k,s; if(report=fopen(sportsdata.txt,r)=null) printf(file can not be openedn); exit(1); for(i=0;in;i+) printf(*学校编号:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*学校总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*男团总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(*女团总分:); fread(&k,sizeof(int),1,report); printf(%dn,k); printf(nnn); getch(); for(j=0;jm+w;j+) printf(*项目编号:); fread(&k,sizeof(int),1,re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《心电图室性早搏》课件
- 《资本运营的策略与应用》课件
- 《现代设计理念》课件
- 腹部外伤影像学检查课件
- 《电力系统自动化设备教程》课件
- 《华氏机组介绍》课件
- 外国政府贷款转贷业务培训
- 《固定在左下角》课件
- 有关承揽合同范本
- 土地使用委托协议
- 2025年春季学期形势与政策第二讲-中国经济行稳致远讲稿
- 人教PEP版英语五年级下册Recycle 1单元教学设计(2课时教案)
- 中国产教融合行业市场发展现状及前景趋势与投资分析研究报告(2024-2030版)
- 2025年山西焦煤集团有限责任公司招聘笔试参考题库含答案解析
- 人教版五年级数学下册全套试卷附完整答案
- 踝关节骨折的护理查房课件
- 第六届“四川工匠杯”职业技能大赛(健康照护赛项)理论参考试题库(含答案)
- 2024-2030年中国生姜及深加工市场发展动态及前景规划研究报告
- 消防中控室操作人员培训
- 急诊一病一品
- 学前教育法培训
评论
0/150
提交评论