还剩20页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
沈阳工程学院课程设计任务书课程设计题目数据结构及算法的设计与实现系别信息工程系班级学生姓名学号指导教师杨政、姜柳职称讲师、副教授课程设计进行地点实训E312任务下达时间2008年11月27日起止日期2008年12月1日起——至2008年12月5日止教研室主任姜柳2008年11月28日批准数据结构课程设计任务书
一、设计目的数据结构是计算机专业的核心课程,是一门实践性很强的课程课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C++)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用
二、设计要求
1、课程设计题目每组三题,每个学生必须独立完成;
2、课程设计时间为1周;
3、设计语言C(C++)不限;
4、课余时间完成源程序和课程设计报告等文档书写工作,上机时间只能做调试工作上机时带上源程序、数据结构教材、C语言教材
5、上机任务1)选择合适的数据结构,并定义数据结构的结构体;2)根据程序所要完成的基本要求,设计出完整的算法;3)设计出主程序(main函数),使其成为完整的程序
6、上机时间按照实验室上机时间安排计划执行
7、无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理
三、报告书写格式1.封皮2.成绩单3.任务书4.目录5.正文6.参考文献
四、成绩评定评定成绩根据课程设计表现、成绩测验、课程设计报告等进行综合评定评定等级不及格、及格、中、良好、优秀
五、设计题目1设计题目一全国交通咨询模拟【问题描述】处于对不同目的的旅客对交通工具有不同的要求例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则希望旅费尽可能省,而老年旅客则要求中转次数最少编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询【基本要求】
(1)提供对城市信息进行编辑(如添加或删除)的功能
(2)城市之间有两种交通工具火车和飞机提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能
(3)提供两种最优决策最快到达或最省钱到达全程只考虑一种交通工具
(4)旅途中耗费的总时间应该包括中转站的等候时间
(5)咨询以用户和计算机的对话方式进行由用户输入起始站、终点站、最优决策原则和交通工具,输出信息最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地【测试数据】【实现提示】
(1)对全国城市交通图和班车时刻表及飞机航班表的编辑,应该提供文件形式输入和键盘输入两种方式飞机航班表的信息应包括起始站的出发时间、终点站的到达时间和票价;列车时刻表则需根据交通图给出各个路段的详细信息,例如对于从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至各段的出发时间、到达时间和票价信息
(2)以邻接表作交通图的存储结构,表示边的结点内除含有邻接点的信息外,包括交通工具、路程中消耗的时间和花费以及出发和到达的时间等多项属性【选作内容】增加旅途中转次数最少的最优决策设计题目二学生成绩管理系统【基本要求】现有学生成绩信息文件1(
1.txt),内容如下姓名学号语文数学英语张明明01677882李成友02789188张辉灿03688256王露04564577陈东明05673847….......…学生成绩信息文件2(
2.txt)内容如下:姓名学号语文数学英语陈果31576882李华明32889068张明东33484256李明国34504587陈道亮35475877….......…试编写一管理系统要求如下:
1、实现对两个文件数据进行合并生成新文件
3.txt
2、抽取出三科成绩中有补考的学生并保存在一个新文件
4.txt
3、对合并后的文件
3.txt中的数据按总分降序排序至少采用两种排序方法实现
4、输入一个学生姓名后能查找到此学生的信息并输出结果至少采用两种查找方法实现
5、要求使用结构体链或数组等实现上述要求.采用多种方法且算法正确者可适当加分.设计题目三小型图书馆管理系统(链表的插入,排序,查询,删除)设计要求对C语言软件开发有一定的认识,了解并掌握开发的各个流程,以及各功能代码的实现创建一个图书馆管理系统,可进行还书(插入),排序,查找,借书(删除)操作【设计原理】1.所有信息存储在一个带头结点的单向链表中,每个结点存储一条图书记录,即结构体book,其中各域为书号number、书名title、作者writer、定价pricing、出版社publishinghouse,指针域next2.系统初始时图书记录为空,由用户录入信息,进行插入(包括创建),排序,查找,删除操作3.有两种排序算法可选选择排序和直接插入排序,均由链表实现4.如输入有错,给出出错提示设计内容与步骤选择合适的数据结构结点结构的设计算法设计与分析程序设计、实现、调试课程设计说明书进度安排设计工作4学时实现与调试12学时课程设计说明书4学时设计考核要求考勤20%课程设计说明书50%答辩30%
五、参考书目摘要“数据结构”是一门专业技术基础课它的教学要求是学会分析研究计算机加工的数据结构的特征,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术另一方面,本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范在学习中,先要学习程序设计课程的目的掌握设计程序的思路,学习会用计算机语言编写程序,以实现所需要处理的任务要正确处理算法与语法的关系,算法是程序的核心、是灵魂,语法是外壳、是工具不应把学习重.点放在语法规则上,语法是重要的,不掌握语法规则就无法编写出正确的程序一定要把重点放在解题的思路上,通过思考,和大量的阅读,来构造一个完整的程序请记住重要的是学会编程,而不是背语法程序设计是为了锻炼我们的实际动手能力,在一定程度上,又增加了我们的各方面的知识,特别是一些联系实际的课程设计,它的完成需要自己平时积累的大量知识、并且需要勤于思考的能力和无限的激情本次课设主要是学习程序设计的方法,进行程序设计的基本训练,大多数的学生应该把精力放在最基本,最常用的内容上,学好基本功最后,感谢老师在我们程序设计的过程中辛勤的指导和不倦的教诲关键词线性表,栈和队列,二叉树,图,查找,排序目录TOC\o1-3\h\z\u摘要5目录6第一章问题分析
141.1项目的必要性和可行性
141.2需求分析14第二章数据结构与算法分析15第三章核心代码16第四章运行结果23结论24致谢25第一章问题分析
1.1项目的必要性和可行性学生成绩管理系统,可以解决复杂的学生的各门学科成绩的汇总,对信息资源进行高级管理,方便拥护对信息的查找,修改和编辑,基于计算机技术的发展,特别是数据库技术的发展以及操作语言,系统开发软件的发展,使设计一个满足用户需求的多功能的管理系统更为方便,更加美观,也具有更佳的操作性
1.2需求分析通过调查要求系统需要有以下功能:⑴由于操作人员的计算机知识普遍较差要求有良好的人机界面;⑵由于该系统的使用对象多要求有较好的权限管理;⑶原始数据修改简单方便支持多条件修改⑷方便的数据查询,支持多条件查询;⑸在相应的权限下,删除数据方便简单,数据稳定性好;⑹数据计算自动完成,尽量减少人工干预;
1.设计步骤
(1)、需求分析对系统的应实现的功能进行分析
(2)、概要设计对系统功能进行模块分解,对模块的功能及模块之间的相互关系进行说明(如用到函数,则对函数间的接口进行说明),对系统使用的数据结构(各数组、主要变量的设置及其代表的含义)进行说明
(3)、详细设计用流程图、伪代码等方法对各主要算法进行描述
(4)、编写代码根据设计编写源程序要按照程序的格式规范来编写,要求结构清晰,界面友好,关键部分有必要的注释
(5)、调试分析准备充分的测试数据对系统进行调试(对错误的数据输入也要进行测试,保证程序的容错性),并通过测试对系统提出改进设想第2章数据结构与算法分析[数据结构算法应用]从算法设计能力的角度来说,其培养目标分三个层次
(1)模仿学习通过学习常用数据结构的基本操作的实现过程,以及排序和查找算法,掌握算法设计的一般过程、思考问题的方法和伪代码的书写;
(2)简单应用在掌握算法设计一般过程的基础上,对给定的数据结构,要求完成单一的功能,其难度相当于常用数据结构的基本操作,能够实现一些特定操作;
(3)综合应用综合应用数据结构知识和算法知识,学会分析研究数据对象的特性,以便选择合适的数据结构和存贮结构以及相应的算法,合理地组织数据、有效地表示数据、高效地处理数据,书写的程序结构清楚、正确易读,提高程序设计的质量算法设计详见图2-1(流程图)���������开始�选择功能学生登入�忘记密码�回到首页�是否查询�账户密码是否正确�修改密码�管理员课程信息管理显示成绩�学生成绩管理结束�NoYes学生资料管理图2-1第三章核心代码structstud//定义结构体{longnum;//定义长整形变量;charname
[20];//定义字节数组;doublescore;//定义双精度变量};typedefstructstucode//定义结构体{structstudstudent;structstucode*next;//定义指针}L;whileflag{systemcls;menu;choose=getchar;switchchoose{case1:createlistr;outr;printfTestingfunction1\nPressanykeytocontinue\n;getchar;getchar;break;case2:search1r;printfTestingfunction1\nPressanykeytocontinue\n;getchar;getchar;break;case3:search2r;printfTestingfunction1\nPressanykeytocontinue\n;getchar;getchar;break;case4:delr;outr;printfTestingfunction1\nPressanykeytocontinue\n;getchar;getchar;break;case5:insertr;outr;printfTestingfunction1\nPressanykeytocontinue\n;getchar;getchar;break;case6:sortr;outr;printfTestingfunction1\nPressanykeytocontinue\n;getchar;getchar;break;case7:outr;printfTestingfunction7\nPressanykeytocontinue\n;getchar;getchar;break;case0:flag=0;printfTheend.\n;break;default:printf\nWrongSelection!选择错误请重选!\n;getchar;getchar;}}}voidmain//主函数{charchoose;intflag=1;//标识位1structstucode*r=NULL;voidcreateliststructstucode**r{structstucode*p*t;longn;chara
[20];doubles;if*r*r=NULL;printf\n请输入\n学号(请按学号升序排列)姓名分数(若要结束请输入三个为零)\n;scanf%ld%s%lfnas;ifn==0return;p=L*mallocsizeofL;//调用函数mallocp-student.num=n;strcpyp-student.namea;//调用函数strcpyp-student.score=s;p-next=NULL;*r=p;scanf%ld%s%lfnas;whilen{t=p;p=L*mallocsizeofL;p-student.num=n;strcpyp-student.namea;p-student.score=s;p-next=NULL;t-next=p;scanf%ld%s%lfnas;}}voidsearch1structstucode*r{longx;if!r{printf没有学生信息可查询!\n;return;}printf请输入要查询的学生信息的学生学号:\n;scanf%ldx;whilerr-student.num!=x//循环遍利rr=r-next;ifr==NULLprintfError!Nosuchstudent!\n;elseprintf%ld%s%.2lf\nr-student.numr-student.namer-student.score;}voidsearch2structstucode*r{charm
[20];if!r{printf没有学生信息可查询!\n;return;}printf请输入要查询的学生信息的学生姓名:\n;scanf%sm;whilerstrcmpr-student.namemr=r-next;ifr==NULLprintfError!Nosuchstudent!\n;elseprintf%ld%s%.2lf\nr-student.numr-student.namer-student.score;}voiddelstructstucode**r{longk;structstucode*p=*r*t;if!*r{printf没有学生信息可删除!\n;return;}printf请输入要删除的学生信息的学生学号:\n;scanf%ldk;ifp-student.num==k*r=*r-nextfreep;else{whilep-nextp-next-student.num!=kp=p-next;ifp-next==NULLprintfError!Nosuchstudent!\n;else{t=p-next;p-next=p-next-next;freet;}}voidinsertstructstucode**r//插入具体实现{longn;//定义长整形变量chara
[20];//定义字节数组doubles;//定义双精度类型变量L*p*t*k;printf请输入要插入的学生信息的学生学号姓名分数:\n;scanf%ld%s%lfnas;p=L*mallocsizeofL;p-student.num=n;p-student.score=s;strcpyp-student.namea;if!*r{*r=p;*r-next=NULL;return;}ifp-student.num*r-student.nump-next=*r*r=p;else{t=*r;k=t;whilet-nextt-next-student.num=p-student.numt=t-next;p-next=t-next;t-next=p;*r=k;}}voidsortstructstucode**r//排序指针函数{structstucode*t*p*q*z;if!r{printf没有学生信息可排序!\n;return;}if!*r||!*r-nextreturn;t=*r;p=t-next;t-next=NULL;whilep{q=p-next;ifp-student.scoret-student.score{p-next=t;t=p;}else{z=t;whilez-nextz-next-student.score=p-student.scorez=z-next;p-next=z-next;z-next=p;}p=q;}*r=t;}第四章运行结果结论通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从数据结构这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解这次实训是老师给了范例程序,经过自己的改写,实现要求先做简单的输出,一步步的再做其它图案,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思在具体操作中对这学期所学的数据结构的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点发现上机实训的重要作用,特别是对数组和链表有了深刻的理解致谢数据结构课程设计的选题、研究及论文的撰写均是在我们的指导教师姜柳老师和杨政老师的悉心指导下进行的设计中的每一个环节无不凝聚着两位老师的心血老师在数据结构课程设计有很多的实践经验,在我面对问题时对我的悉心指导及其严谨的工作态度锐意创新的精神,使我们受益匪浅,在此特别向老师表示深深的感谢和由衷的敬意在我们课程设计完善过程中,我也遇到了这样或那样的技术问题,但经过自己的不懈努力及查阅大量的资料,最终都得到了基本满意的答案同时,其他同学也给了我许多有益的启示,促动和帮助,使我能够顺利的完成课题感谢所有给予我帮助的老师,他们辛勤耕作,传道授业,不仅使我们开阔了视野,拓宽了思路,增长了学识,而且为我们今后的工作和学习打下了牢固的基础,也使增强我们对计算机的兴趣是老师给予我无限的创造力和奋斗力,使我有无限的信心和希望来完成本次的实训内容我还清楚地记得,在我遇到困难的时候,有各位老师的辛勤指导,而且从他们的身上,也使我知道自己知识的匮乏,对数据结构这一门课程,自己还存在许多不足和需要完善的地方,通过此次实训,也使我更加敬佩老师的渊博学识,更重要的是他们将自己知道的知识毫不保留地传授给我们,而且还不求回报,我想说,老师,你们是我心中最可爱的人同时也感谢学校给了我们这次难得的实训机会,实训的过程让我们看到了自己理论知识上的不足,已掌握的知识也在这次的实训中有了质的飞跃,知识能够应用了才是真正掌握了,也希望学校多给我们一些这样的机会在最后,再次感谢我们的老师,如果没有老师的耐心指导,就不会有我们的成果在我做论文期间,两位老师渊博的学识、严谨求实的科学精神、一丝不苟的治学态度和高尚的品格,深深的感染了我程序的每次改动都离不开老师的辛勤工作,从各个方面来说,审查的工作往往比编写任务更复杂正是老师百忙中不辞劳苦的帮助,才使我能够顺利完成这篇论文,在这里,对您衷心的表示感谢本次实训中,老师对我的指导,我将永远感激在心,我相信这是我人生中宝贵的财富老师,谢谢您!祝老师在今后的工作中,一帆风顺,事事顺心参考文献徐州397乌鲁木齐哈尔滨长春沈阳天津郑州西安兰州成都上海昆明贵阳株州福州柳州广州深圳南宁189221611456681100967639907349676511242305704651622367409255607675140呼和浩特北京137674西宁大连534842武汉825南昌672。