课程设计.docx
- 文档编号:24893449
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:23
- 大小:216.49KB
课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
课程设计
经济管理学院本科课程设计论文
数据结构课程设计
学号:
1005170121
姓名:
秦孝文
班级:
管理101
专业:
信息管理与信息系统
系别:
管理系
指导教师:
孙鸿飞
2011年12月30日吉林
目录
第1章校园导游咨询系统概述-1-
1.1校园导游咨询系统目的-1-
1.2校园部分景点平面图-1-
1.3软件运行和开发工具-1-
第2章需求分析-2-
2.1程序要求-2-
2.2程序功能-2-
2.3测试数据-2-
第3章系统设计-3-
3.1设计思路-3-
3.2系统结构-3-
第4章程序设计与编码-4-
4.1概要设计说明-4-
4.2详细设计-4-
4.2.1介绍景点函数-4-
4.2.2主函数-6-
第5章系统测试-8-
5.1运行结果界面-8-
5.2查找景点相关信息的结果-8-
5.3查找最短路径的结果-9-
第6章航空客运订票系统概述-10-
6.1航空客运订票系统简介-10-
6.2航空客运订票系统原理-10-
第7章航空客运订票系统需求分析-11-
7.1程序背景-11-
7.2系统功能-11-
第8章航空客运订票系统需求分析-12-
8.1查询-12-
8.2订票-12-
8.3退票-12-
第9章航空客运订票系统设计-13-
9.1系统结构-13-
9.2系统流程图-14-
9.3详细设计-14-
9.3.1查询功能-14-
9.3.2退票功能-15-
第10章系统测试-18-
10.1系统主界面-18-
10.2查询航线信息-19-
10.3进行订票操作-19-
10.4所需已经被预订的情况-20-
10.5退票界面-20-
第11章心得与体会-21-
参考文献-22-
校园导游咨询系统
第1章校园导游咨询系统概述
第2章校园导游咨询系统目的
设计一个校园导游系统,为来客查询校园的各种信息。
并熟练掌握图的知识,加深课堂所学用于实践。
第3章校园部分景点平面图
图1-1东北电力部分景点平面图
第4章软件运行和开发工具
1.windowsxp操作系统
2.VisualC++6.0开发环境
第5章需求分析
第6章程序要求
1.设计你所在的学校的校园平面图,所含景点不少于10个。
以图中顶点表示校内各景点,存放景点的名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的最短的简单路径。
第7章程序功能
查询校园各景点的信息并找出最短路径。
第8章测试数据
出发点:
1:
新校区寝室
到达点:
10:
第二教学楼
出发点:
10:
第二教学楼
到达点:
1:
新校区寝室
出发点:
1:
新校区寝室
到达点:
2:
第三教学楼
出发点:
6:
专家招待所
到达点:
10:
第二教学楼
结果正常,未发现错误
第9章系统设计
第10章设计思路
1.创建校园图:
2.先定义节点个数N,边的最大值(MAXedg),节点(景点名称、景点信息),邻接点,边,顶点向量,当前顶点数和边数。
3.先给一个节点赋上其相关信息,然后再用p=(Node)malloc(sizeof(edgenode))语句申请下一结点,再给所申请的节点赋上相关信息,直到节点数为N=10为止。
4.读入道路的起始点,为邻接矩阵的边赋相应的值。
5.节点和边的相关信息都弄好了后,校园图也就创建好了
6.利用函数Name给10个节点赋上相应的名称,利用函数Information给各节点添加相应的介绍信息。
7.利用函数travgraph来查找景点信息,要查找景点名称时调用Name函数,要查找景点介绍信息时调用Information函数。
8.手动创建一个校园图creat(Matrix_Graph*G),然后为相应的边赋上真正的值。
9.用path函数来求任意两景点之间的最短路径。
10.用main函数来输出结果:
用switch语句分别输出,要创建校园图时调用creatgraph函数;查找景点相关信息时调用travgraph函数;要查找任意两景点之间的最短路径时,先输入你目前所在的位置,再输入你的目的地,最后调用path函数。
第11章系统结构
图3-1系统结构
第12章程序设计与编码
第13章概要设计说明
用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求实现以下功能:
1.查询各景点的相关信息。
2.查询图中任意两个景点间的最短路径。
3.查询图中任意两个景点间的所有路径。
用图的结点代表景点,用图的边代表景点意见的路径,首先设计一个图类,结点值代表景点的信息,边的权值代表景点之间的距离,结点值及边的权值用顺序表存储,所以需要设计一个顺序表类,本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个编号,用结构体类型来实现。
计算路径长度和最短路线是可以用Dijkstra(迪杰斯特拉)算法实现,在主函数中用switch选择语句执行浏览景点信息或查询最短路径。
第14章详细设计
第4章.介绍景点函数
voidintroduce()
{
intn;
cout<<"请输入查询景点编号:
"< cin>>n; switch(n) { case1: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case2: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case3: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case4: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case5: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case6: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case7: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case8: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case9: cout<<"景点编号: "< "< cout<<"景点简介: "< break; case10: cout<<"景点编号: "< "< cout<<"景点简介: "< break; default: cout<<"输入序号错误。 "; break; } } 主函数 voidmain() { chark; init(); cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"; cout<<"┃┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓┃\n"; cout<<"┃┃┃┃\n"; cout<<"┃┃┃┃\n"; cout<<"┃┃欢迎使用校园导游咨询┃┃\n"; cout<<"┃┃本程序将为您快捷找到东电的景物┃┃\n"; cout<<"┃┃┃┃\n"; cout<<"┃┃2012.1.3┃┃\n"; cout<<"┃┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛┃\n"; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"; while (1) { cout<<"1.景点信息查询请按“1”键\n"; cout<<"2.景点最短路径查询请按“2”键\n"; cout<<"3.退出系统请按“3”键\n"; cout<<"请选择服务: "; cin>>k; switch(k) { case'1': cout<<"景点简介查询(请输入1~10)。 "; introduce(); break; case'2': cout<<"景点最短路径查询。 "; shortestdistance(); break; case'3': exit(0); } } system("pause"); } 第15章系统测试 第16章运行结果界面 图5-1运行结构界面 第17章查找景点相关信息的结果 图5-2查找景点相关信息的结果 第18章查找最短路径的结果 图5-3查找最短路径的结果 航空客运订票系统 第19章航空客运订票系统概述 第20章航空客运订票系统简介 问题描述: 每条航线所设计的信息由: 终点站名、航班号、飞行日期(星期几飞行)、成员定额、余票量、订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。 第21章航空客运订票系统原理 以栈分别模拟航空路线及乘客信息,以文件分别存储航空路线及乘客信息,以管理员操作和乘客订票两大模块模拟航空订票系统的过程。 每一条航线包括五个数据项: 航班号,飞机号,目的地,订票数,余票数,用链表进行插入、删除操作。 乘客能够使用链表模拟进行查询航线信息,订票,退票的操作,输出票号,或输出票以售空。 第22章航空客运订票系统需求分析 第23章程序背景 飞机场每天要接受大量的订票退票服务,还有互联网上的异地订票等。 对这些数量巨大的数据,需要一个专门的软件来进行管理和操作。 软件至少需要具备的基本功能包括: 接受订票,处理退票,查询乘客信息,查询航班信息等等。 第24章系统功能 1.查询航线: 根据客户提出的终点站点输出如下信息: 航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; 2.承办订票业务: 根据客户提出的要求(航班号、订票数量)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。 若需要,可登记排队候补; 3.承办退票业务: 根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有其他人排队候补,首先询问排在第一位的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。 第25章航空客运订票系统需求分析 可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。 明确开发风险及其所带来的经济效益。 本报告经审核后,交软件经理审查。 第26章查询 1.可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓); 2.可以输入起飞抵达城市,查询飞机航班情况; 3.可以输入乘客信息,查询乘客所订票情况; 第27章订票 可以订票,如果该航班已经无票,可以提供相关可选择航班; 第28章退票 1.可退票,退票后修改相关数据文件; 2.客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 第29章航空客运订票系统设计 第30章 退出系统 输出航线和客户信息 办理 退票 编辑航线 航空订票系统 办理订票 系统结构 图9-1系统结构 第31章系统流程图 图9-2系统流程图 第32章详细设计 9.3.1查询功能 voidchaxungongnen(){ intn; printf("\t查找航线信息\n"); printf("\t╔═════════════╗\n"); printf("\t║1.通过目的地查询║\n"); printf("\t║2.通过航班号查询║\n"); printf("\t╚═════════════╝\n"); printf("\t请选择: "); scanf("%d",&n); printf("\n");//格式化 switch(n) { case1: mddchaxun(); break; case2: hbhchaxun(); break; default: break; } } 9.3.2退票功能 voidtuipiaogongnen()//***************************************************************退票功能 { Linklistp=L; Yidingkehu*h=H,*h1,*h2; linkQueueq=Q; charc[15],name1[15]; intm=1,piao,n;// gets(c); printf("请输入航班号: ");gets(c); p=L;//->next; if(p) { do{//使用dowhile来查找是否有此航班 if(! p) {//如果是到了表尾且没有匹配,goto至再输入航班号 printf("\n对不起,没有你要找的航班: \n"); gotoloop1; } m=strcmpi(p->hangbanhao,c);//如果匹配的话,m=0 if(m==0) { printf("\t航班信息: \n"); printf("航班号: %s\n",p->hangbanhao); printf("飞机号: %s\n",p->feijihao); printf("飞行时间: %d\n",p->feixingriqi); printf("余票量: %d\n",p->yupiao);} elsep=p->next; }while(m! =0); if(m==0) {//如果找到了,就来给他退票 do{ h=p->yiding; if(h) { printf("请输入你的姓名: "); gets(name1);//gets(name1); printf("请输入你订的票数: "); scanf("%d",&piao); printf("\n"); h1=h; h=h->next1; if(strcmpi(h->name,name1)==0&&h->dingpiaoshu==piao)//如果名字和订的票数相等,则就给他取消订票 { p->yupiao+=h->dingpiaoshu; h2=h; h1->next1=h->next1; free(h2); printf("你取消订票成功: \n\n"); structWeidingkehu*q3; q.front=p->yudingqueue; if(q.front==q.rear){printf("没有人预订票: \n");gotoloop1;} if((p->yupiao)>=(q.front->next2->yudingpiao)) { h2=(structYidingkehu*)malloc(sizeof(Yidingkehu)); strcpy(h2->name,q.front->next2->name); h2->dingpiaoshu=q.front->next2->yudingpiao; n=p->yupiao-q.front->next2->yudingpiao; p->yupiao=n; q3=Q.front->next2;// q.front->next2=q3->next2;//这二语句来删除结点 if(q.rear==q3)q.rear=q.front; free(q3);//释放空间 printf("链队中删除成功\n"); h2->next1=h->next1; h->next1=h2;//为之插入进已订票客户链表中 printf("为预订的客户订票成功\n"); } elseprintf("余票数不够,不能为预订客户订票! \n"); } else {//如果没有找到,即系统中没有该人的信息,提示是否来重新查找 printf("对不起,该航班没有人订票或者是你没有订该航班的票\n"); printf("是否要重新查找并取消订票? \n"); printf("需要请输入1否则请按2"); scanf("%d",&m); printf("\n"); } } }while(m==1); } } loop1: ; } 第33章系统测试 第34章系统主界面 图10-1系统主界面 第35章查询航线信息 图10-2系统主界面 第36章进行订票操作 图10-3进行订票操作 第37章所需已经被预订的情况 图10-4余票为零 第38章退票界面 图10-5退票界面 第39章心得与体会 通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。 图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧妙的事情,经过了思考和老师同学的帮助,我用edges[i][j]=up和edges[j][i]=up就能实现了一个双向图信息的存储。 对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。 不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf()和包涵在#include 因为课程设计的题目是求最短路径,本来是想通过算法的实现把这个程序与交通情况相连,但是因为来不及查找各地的信息,所以,这个计划就没有实现,我相信在以后有更长时间的情况下,我会做出来的。 参考文献 [1]数据结构实用教程第二版(徐孝凯著)[M].清华大学出版社,2010.8 [2]潘彦.算法设计与分析基础[M].北京: 清华大学出版社,2007.1 [3]吕凤翥.C++语言程序设计(第2版).电子工业出版社,2007.2 [4]李云清、杨庆红、揭安全.数据结构(C语言版)[M].人民邮电大学出版社,2004.6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计