数据结构运动会计分系统.docx
《数据结构运动会计分系统.docx》由会员分享,可在线阅读,更多相关《数据结构运动会计分系统.docx(30页珍藏版)》请在冰豆网上搜索。
青岛理工大学
数据结构课程设计报告
题目一:
运动会计分系统题目二:
电梯模拟
院(系):
计算机工程学院
学生姓名:
钟文
班级:
计算092学号:
200907021
起迄日期:
指导教师:
张艳
指导教师评语:
成绩:
签名:
年
月
日
2010—2011年度第2学期
1、问题描述与分析
1.1课程设计目的:
《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
数据结构课程设计是为数据结构课程独立开设的实践性教学环节。
数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。
课程设计的目的:
1.要求学生达到熟练掌握C语言的基本知识和技能。
2.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。
3.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
4.培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5.初步掌握软件开发过程的问题分析、系统设计、程
序编码、测试等基本方法和技能。
1.2课程设计内容
(1)、课程设计内容:
运动会分数统计
问题描述:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
功能要求:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
输出形式:
有中文提示,各学校分数为整形
界面要求:
有合理的提示,每个功能可以设立菜单,根据提
示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
(2)、课程设计的要求
数据结构课程设计用C/C++/C#编程实现。
课程设计的一般步骤:
1.问题描述与分析:
根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?
限制条件是什么?
2.数据结构设计:
为实现每个功能选择的逻辑结构和存储结构,分析原因及合理性。
3.软件结构设计:
设计软件模块之间的结构。
4.算法设计:
算法的设计及算法分析。
每个部分的算法设计说明,可以用流程图描述算法。
5.程序编码:
把详细设计的结果进一步求精为程序设计语言程序。
源程序要按照软件工程的规则来编写,要求结构清晰,重要功能部分要加上清晰的程序注释。
6.调试分析:
掌握调试工具的各种功能,设计测试数据,测试输出的结果。
并进行算法的时间复杂度和空间复杂度的分析。
7.总结:
课程设计过程的收获,遇到问题以及解决问题的思路和方法,程序调试能力的思考,对数据结构这门课程的认识及思考等。
8.编写课程设计报告
2、程序设计描述
2.1运行环境:
MicrosoftVisualC++6.0。
VisualC++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。
VisualC++6.0提供的控制台应用程序对学习和掌握标准C++内容非常有利。
“可视”的资源编辑器与MFC类以及应用程序向导,为快速高效地开发出功能强大的Windows应用程序提供了极大的方便。
利用VisualC++
6.0进行Internet、数据库及多媒体等多方面的程序开发也很容易。
2.2系统流程图:
c
mscore
headnode
运
动会
分 itemnode
数统计
Globals
schoolnumscorewscore
itemnummarkrangetop
inputinformation)(
inquiry()main()output()readdata()writedata()h
N
成绩查询
Case2
查询团体总分
Case1
查询各学校成绩
继续
开始---初始化
输入
Y
N
输入学校及男女项目范围
输入某项目各名次成绩
Y
继续输
Case3
Y
输出查询学校成绩
N
Y
继续
N
结束—退出
2.3函数及变量说明:
voidinputinformation()为输入信息函数。
用来输入各个学校各个项目前三名或前五名的成绩,结果取前三名还是前五名自己定,利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。
并统计团体总分,男团总分和
女团总分。
voidoutput()为输出函数。
列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。
利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。
利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。
voidinquiry()为查询函数。
列车一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。
再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。
voidwritedata()是数据存储函数。
建立一个文件
sportsdata.txt,将输入的数据存入此文件中。
voidreaddata()是读入数据函数。
它将写入sportsdada.txt
中的数据直接调用并显示出来。
voidmain()是主函数。
列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。
3、调试分析
3.1调试过程中出现的问题和处理方式:
为了使系统具有一点的容错性,当输入错误信息时应给出相应提示以正确输入数据,如:
printf("要查询的项目编号:
");
scanf("%d",&s);if(s>m+w||s==0)
printf("此次运动会不包括这个项目.\n\n\n");
想在每次查询结束想返回主菜单进行其它项时,应在main()
函数中调用其它函数时再调用main()函数,如:
switch(choice)
{
case1:
inputinformation();writedata();readdata();main();case2:
output();main();case3:
inquiry();main();case4:
readdata();main();
程序出现语法错误,发现是输入名次信息的地方忘带地址符&,或是程序不完整,只写了一个大括号。
如:
printf("*****名次:
");scanf("%d",&h[i].c[j].range[s]);
3.2调试分析:
(1).函数调用。
函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。
(2).对结构体的不熟练。
刚开始对结构体不太了解,使调试程序时费了我不少的时间。
结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。
结构体在我的实习中站了很大的比重,我也很重视它。
通过与线性表,循环等的有机搭配,我完成了实习任务。
(3).循环的问题。
这是我很苦恼,大量的循环语句的应用,分
析。
使我很头疼,循环是计算机语言中很重要的部分,什么程序也离不开循环,这个问题的解决使我有了坚实的基础。
对多层循环的应用也有了深刻的理解。
3.3调试结果:
(1)首先运行文件运动会统计分数7.exe:
(2)输入信息:
程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。
输入1得到进入输入信息模块。
按回车键可得到学校的得分信息和按编号获得的所以信息。
(3)输出信息:
输入2进入输出信息模块,该模块分四项:
①按学校编号输出:
②按学校总分输出:
③按男团总分输出:
④按女团总分输出:
⑤输入2返回输出信息模块,输入0返回主菜单。
(4)查询信息:
输入3进入信息查询模块:
①按学校编号查询
②按项目编号查询
③输入错误信息时给出提示:
④输入2继续查询,输入0返回主菜单
(5)调用信息
输入4时显示出所有的信息:
4、总结
(1).调试中所遇到的较重要问题的回顾:
1)提出问题:
所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是换屏的,可是在这里就是无法实现。
解决问题:
输入clrscr();
2)提出问题:
设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。
分析问题:
在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。
解决问题:
修改case语句,添加default语句提示出错,要求重新输入;
Default:
{
clrscr(); /*清屏*/printf("输入错误,请重新选择");
}
3)提出问题:
当同一项目中有同一学校的两个人时,便不能正确输出或者输出相同人名。
分析问题:
由于同时有两个相同学校编号的人存在,系统在输出时,不能确定那个是正确的,或者用后来的覆盖以前的。
解决问题:
用for函数实现从开始到结尾的遍历。
(2).算法的效率及