数据结构课程设计报告一.docx
- 文档编号:7525949
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:11
- 大小:212.81KB
数据结构课程设计报告一.docx
《数据结构课程设计报告一.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告一.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告一
中南大学
数据结构课程设计报告
学生姓名:
刘江涛
学号:
0909090710
专业班级:
计科0902班
指导老师:
王国军
学院:
信息科学与工程学院
完成时间:
2011年7月7日
目录
一、实验序号实验名称3
二、班级、姓名、学号、实验日期3
三、实验目的3
四、实验内容:
3
五、实验要求:
3
六、概要设计4
七、详细设计4
八、调试分析6
九、测试结果8
十、实验心得12
一、实验序号实验名称
实验序号:
实验五
实验名称:
运动会分数统计系统
二、班级、姓名、学号、实验日期
班级:
计科0902班
姓名:
刘江涛姚启鹏
学号:
0909090710
实验日期:
2011年7月7日
三、实验目的
1.要求学生达到熟练掌握C语言的基本知识和技能。
2.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。
3.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
4.培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
四、实验内容:
参加运动会的n个学校编号为l~n。
比赛分成m个男子项目和w个女子项目,项目编号分别为l~m和m+1~m+w。
由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
设计一个统计程序按名次产生各种成绩单、得分报表。
五、实验要求:
1.在上机前思考程序的编写;
2.能在机器上正确运行程序;
3.用户界面清晰。
六、概要设计
1.首先,这个题目要求设计一个统计程序按名次产生各种成绩单、得分报表。
这些得分报表还要按照不同的要求按名次排序输出(比如:
按男团总分、女团总分等)。
2.其次,要求有n个学校编号为l~n参加比赛。
比赛分成m个男子项目和w个女子项目,项目编号分别为l~m和m+1~m+w。
有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
这里采用了结构体,定义头文件等先把大致结构确定。
3.再次,要求产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次、成绩、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分;均按名次排序。
这里就比较麻烦,设计到排序输出的问题,在这里我选择用冒泡排序的方法。
4.最后,是最后界面菜单问题和所用语言问题,我选择运用C++。
七、详细设计
1.首先,确定程序的大致流程,定义项目节点类型—>头结点类型—>输入函数—>输出函数—>查询函数—>主函数。
2.其次,根据题目要求学校编号,项目编号,项目所取名次(前三还是前五),获奖人姓名和所获得名次分数,都需要自己进行输入。
因此,运用宏定义先确定学校数目和男女项目个数,其次定义voidinputinformation()为输入信息函数。
用来输入各个学校各个项目前三名或前五名的成绩,结果取前三名还是前五名自己定,同时利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。
最后,统计团体总分,男团总分和女团总分。
3.再次,就是这个程序最关键的地方——输出。
按照题目要求这里要求输出各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次、成绩、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。
因此,定义voidoutput()为输出函数。
列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。
利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。
利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。
无疑,这里如何按不同要求顺序输出是最关键的,因此在这里我采用了冒泡排序,同时利用数组remember[]来辅助进行。
4.再次,除了题目要求的任务外,另外添加了两种查询方式,分别为“按学校编号查询”和“按项目编号查询”。
因此,在这里定义voidinquiry()为查询函数。
列出一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。
再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。
5.最后,为了使大家能够方便的使用各个功能,要求做一个清晰方便的菜单供大家完成各个功能。
因此,定义voidmain()是主函数。
列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。
八、调试分析
1.问题一:
显示出开始界面。
我是利用了label,在label上放上一张图片显示出来,让玩家点击然后进入到游戏中。
但是一开始图片一直显示不出来,最后不断地改,终于发现了问题的所在,原来是一句话的原因:
startPanel.setLayout(null);
这句话是设置startPanel的布局是空,然后如果添加了一个label的话,label虽然并没有正确的设置它的位置和大小,所以无法显示出label来。
去掉之后,还有一个问题,原来的图片的大小很大,1000*967,但是我的窗体的大小是600*600,显示出来的图片出现了明显的变形,很不美观,想让图片自适应大小,找了很久,终于知道怎么设置了:
image.setImage(image.getImage().getScaledInstance(600,600,Image.SCALE_DEFAULT));
这样就好了,开始界面显示就没有什么问题了。
2.问题二:
随机扑克牌的产生。
刚开始我只是利用Java的Random类对象的nextInt方法来产生四个随机数:
Randomram=newRandom();a=ram.nextInt(52)+1;
后来发现错了,四张扑克牌是不会相同的,而随机产生四个数字是有可能相同的!
想到这里我马上就去改,保证下一个产生的随机数不和前面的随机数字相同,然后就可以了。
Randomram=newRandom();
a=ram.nextInt(52)+1;//既要保证数字随机还要保证不能重复
do{
b=ram.nextInt(52)+1;
}while(a==b);
do{
c=ram.nextInt(52)+1;
}while(c==a||c==b);
do{
d=ram.nextInt(52)+1;
}while(d==a||d==b||d==c);
3.问题三:
中缀表达式转换成后缀表达式。
这里有一个很关键的问题就是判断操作符的优先级。
我是按照课件PPT中方法去做的,刚开始就在中缀表达式的末尾添加一个’#’,并让’#’入栈。
然后按顺序遍历中缀表达式,如果是数字的话,首先看后面的字符是否也是数字,根据情况(这里的数字不会超过三位数)判断,求出数值,如果是开括号的话,就直接放入到栈中。
如果是闭括号,就要不断弹出栈顶元素直到栈顶元素是开括号,然后再弹出栈顶。
如果是其他的操作符,那么就要比较栈顶元素和当前的操作符的优先级,如果栈顶元素的优先级高,就弹出栈顶,直到当前操作符的优先级高于栈顶元素的优先级。
比较操作符时,可以只考虑栈顶元素优先级高的情况。
例如当栈顶元素是’*’时,然后考虑当前操作符就可以了,它可以是’+’,’-’,’*’,’/’,如果满足其中的一个,那么久返回true,其他的同理可得。
这里刚开始遇到了不少的问题,最后都慢慢的解决了,要注意一些特殊的情况,如果当前的操作符是’#’,那么说明到了表达式的结尾,这个时候返回值就是true!
4.问题四:
四个数字的全排列。
我给这个程序提供了一个附加的功能,这个功能就是可以给玩家一些参考答案。
为了实现这个功能,我首先要做的是实现四个数字的全排列,这个问题看起来很简单,但是自己写我试了好几种方法都失败了,后来看了数据结构的书找到了,使用的是递归的方法,看了一会,觉得看懂了,然后自己写,还是失败了,输出的结果都是原来的排列,最终问题出现在递归的交换两个数字那里。
重新写了一下,没有使用交换方法并把交换的顺序好好地捋了捋,终于好了,实现了四个数字的全排列。
九、测试结果
1.程序运行时的开始界面
2.输入1之后进入输入页面。
这时可以按文字提示输入各种信息。
输入完成后按enter后,自动返回主菜单。
3.选择2进入输出页面,根据菜单提示,按不同方式输出。
(1)按学校编号输出
(2)按学校总分输出
(3)按男团总分输出
(4)按女团总分输出
输出完成后,按0退出返回主菜单。
4.查询。
分为按学校编号查询和按项目编号查询。
(1)按学校编号查询
(2)按项目编号查询
(3)如果查询的不存在,则:
(4)退出系统。
实验心得
为期一周的数据结构上机已经结束了。
在这期间我遇到了很多问题,发现自己还并不能足够的掌握这些知识,比如:
结构体的运用上感觉不是很熟悉,遇到结构体的时候很陌生,这是以后必须要加强的。
同样还遇到了一些不能很好解决的问题,在输出的时候不能得到我们想要的效果,在按学校编号排序查询输出的时候,发生了重叠在做了几次修改之后都能使之满意,这有待学习和修改。
通过这次课程设计让我明白了:
在编写之前,做整体的规划很重要,这才能让在编程的时候效率更高,编写更流畅。
同时,也让我对基础的掌握更加熟练,也更加明白基础的重要性。
总而言之,对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次上机的任务,对自己今后在程序编写方面相信会有很大的帮助,今后必需认真思考,全面的想问题,以达到最完美的结果。
仔细回顾数据结构的学习过程,发现其实他也并不是想象中的那么难。
数据结构的学习应该是自己不断积累的过程,这比老师给我一个“A”要强数倍,,因为这意味着我走上了积累的道路,今天我所做的一切,不仅在改变今天的生活,而且在创造我将来的生活。
可以先尝试做简单的培养自己的兴趣,当你满足了最基本的,你可以想能不能再完善一些,不断为自己提出新要求,就可以不断地去超越,人也是在不断地超越过程中逐步成长的。
我们学习的关键就是算法,也就是说数据结构的思想精髓,适当的实践与交流是必要的,可以为自己以后奠定宝贵的一笔财富。
因此,我会一步一个脚印的走下去,这样才可以达到预期的彼岸!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告