C语言课程设计报告--公交路线管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院
计算机科学与技术系
课程设计报告
2010~2011学年第二学期
课程C语言课程设计
课程设计名称公交路线管理系统
学生姓名杨莉莉
学号18
专业班级计本(4)班
指导教师徐静项向琴
2011年6月24日
一、需求分析
本系统主要功能是实现对公交路线的管理和维护。我们都知道,每个城市都会有公交路线的改动,如果使用这个系统,就可以及时的对路线信息进行修改和保存,是非常方便的,而且该系统使用起来也很方便。用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能。该系统具有添加,查询,删除,修改和显示所有记录的功能。用户可以根据实际情况进行相应的功能选择。其具体功能简单描述如下:
(1)保存:即将信息存入指定文件中。当用户对原始数据进行相关的改动(主要是对路线信息进行增加、删除、修改)之后,用户可以根据自己的选择判断是否要保存到文件中,这样就实现了信息的记录功能,以方便用户随时进行查看。
(2)添加:即添加一条新的公交路线或者是某一条路线上的站点。每次可以添加一条路线信息,若用户想添加多条路线信息的话可以重复执行该功能,同样的,添加站点的话也是每一次添加一个站点,若用户想添加多条路线信息的话也只需要重复执行该功能即可。这样,就实现了对公交路线的添加信息管理。
(3)查询:即能够查找出你要的公交路线信息和总共有多少站。简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。
(4)删除:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。
(5)修改:即能修改一条你需要该的路线信息。修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现)。
(6)显示路线信息:即将路线信息显示到屏幕中,供用户查看。该功能比较简单,在这里不具体说明。
二、算法设计
1、设计思想:
本系统的设计流程简单比较简单,原始数据全部都保存在文件中,用户就不必自己一个一个的输入信息。程序执行时从文件中读出,文件的读取操作在下文中我会详细说明,这里就不做具体说明了。创建动态链表和结构体数组对路线信息进行存储,因为使用链表时对程序的插入、删除会比较方便,那么插入和删除就相当于对链表节点的删除和插入。写无返回值的主函数void main()对系统的功能进行显示,每次用户选择某一功能时都可以看到路线的大致信息,以便于用户更准确的选择功能。其中利用switch条件分支语句进行子函数功能的选择和调用。并且使用while循环语句进行多次循环执行,就可以实现对信息的多次删除、增加、修改,知道达到用户满意时由用户自己选择退出系统。通同时使用了清屏函数,对上一次程序运行的结果清楚只显示本次运行的相关信息,这样的话就做到了界面的友好化,简单明了,不冗杂,更方便观看。当用户对信息进行有关的改动之后,用户根据自己的选择是否保存入文件中,就可以保存他所要的信息了。
其主要流程图如下:
2、设计表示:
下面我将对各个子模块的功能进行详细的介绍和描述:
模块一:头文件,定义结构体,结构体中还嵌套了一个结构体,定义结构体成员,同时定义指向该类型的指针head,其对整个程序都有效。
模块二:菜单显示。
显示该系统所能完成的功能,一目了然。根据用户的需求自由选择功能实现。
模块三:从文件中读取信息。
该功能以子函数的形式给出,因为其返回值是head,而head是指向结构体的指针,所以该函数属于指针函数。执行此程序时首先定义文件指针FILE *fp,在打开此文件时,文本文档里应该有用户需要的数据,从而才能从文件中正确读取出来,若文件打开不成功则会显示“不能打开此文件!”。创建动态链表来存储从文件中读出来的数据,每读取一组数据后文件指针后移,这是系统约定俗成的,不需要用户去考虑的,知道文件结束时停止读取。读取结束后必须要关闭文件,即fclose(fp),这样就完成了从文件中读取信息的功能。
模块四:显示路线信息。
该功能以子函数的形式给出,无返回值。定义指向定义过的结构体类型的指针p,并让p指向head,当p为非空时输出结构体成员信息,在这里需要说明的是,在输出站点信息时,当最后一个站点名是end时,停止输出,因此end是作为站点信息输出的结束标志,同时p指针指向链表的下一个节点,再次读取一组数据。
模块五:增加线路信息。
该函数的返回的是链表的头指针head,因此是一个指针函数。该函数不仅可以增加一条路线信息,也可以增加某一条路线上的站点信息。用户根据自己的需要进行选择。本系统添加一条公交路线时,是在链表的尾部添加的,因为我考虑到公交线路号一般没什么顺序可言,所以就简单的添加在了链表的末节点。定义BL *p=head,*q。重新建立一个新的节点来存储你添加的那条线路信息,判断p是否为空,若不为空的话,q指向p,p指针位置后移一个节点,直到p为空。然后q->next指向新建立的节点,新节点的下一结点赋值为空,从而完成了增加路线信息的功能。如果是添加路线站点,先确定要在哪条路线上添加,所以要先找到该条路线,并用指针指向该节点,然后找该站点将要插入的位置,找到后,将其后面的站点依次后移,把那个空的位置空间腾出来,用来置放添加的节点的信息,这样就实现了对站点的添加。
模块六:删除线路信息。
该函数返回的是头指针head,所以该函数是一个指针函数,也是作为子函数的形式出现。可以删除整条路线,也可以删除线路上的某一个站点,删除一整条路线时,就相当于删除链表中的某一个节点,先确定你要删除的线路号,找到后,只需要将其前一个节点指向其后一个节点,所以删除时还需要考虑到删除的是首节点还是末节点还是中间节点,若