基于数据结构和C语言实现公交管理系统(含文档和代码)数据结构课程设计 您所在的位置:网站首页 昆山公交线路查询系统 基于数据结构和C语言实现公交管理系统(含文档和代码)数据结构课程设计

基于数据结构和C语言实现公交管理系统(含文档和代码)数据结构课程设计

2023-08-14 23:54| 来源: 网络整理| 查看: 265

目录

第1章 课程设计内容及要求 

第2章 需求分析 

第3章 算法设计 

3.1 设计思想 

3.2 设计表示 

第4章 系统调试及测试(含代码) 

4.1 功能截图 

4.2 实现代码 

第5章 课程设计心得 

5.1 设计体会 

5.2 系统改进 

第6章 参考文献 

谢辞 

课程设计内容及要求

设计一个公交线路管理系统,为乘客提供各种信息查询服务。系统中处理的道路信息和公交线路信息保存在文件busline.txt 中,系统执行时所处理的数据要对此文件分别进行读写操作。整个系统由前台服务和后台管理两个子系统组成。

后台管理具体功能包括:

(1)公交站点的增加:能根据需要增加公交站点。

(2)道路信息的增加:能根据需要增加道路信息。

(3)公交线路的增加:能根据需要增加新的公交线路信息。

(4)公交线路的删除:能根据需要删除已有的公交线路信息。

前台服务具体功能包括:

(1)公交线路信息查询:输入线路号,输出该线路所有站点。

(2)乘车线路方案查询:输入起点站和终点站,输出两站点之间所有乘车方案。

(3)乘车线路最优查询:输入起点站和终点站,输出两站点之间乘车时间(或距离)最短的乘车方案。

第2章 需求分析

本系统主要功能是实现对公交路线的管理和维护。我们都知道,每个城市都会有公交路线的改动,如果使用这个系统,就可以及时的对路线信息进行修改和保存,是非常方便的,而且该系统使用起来也很方便。用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能。该系统具有录入,查询,删除,修改和显示所有记录的功能。用户可以根据实际情况进行相应的功能选择。其具体功能简单描述如下: (1)保存:即将信息存入指定文件中。当用户对原始数据进行相关的改动(主要是对路线信息进行增加、删除、修改)之后,用户可以根据自己的选择判断是否要保存到文件中,这样就实现了信息的记录功能,以方便用户随时进行查看。 (2)录入:即录入一条新的公交路线或者是某一条路线上的站点。每次可以录入一条路线信息,若用户想录入多条路线信息的话可以重复执行该功能,同样的,录入站点的话也是每一次录入一个站点,若用户想录入多条路线信息的话也只需要重复执行该功能即可。这样,就实现了对公交路线的录入信息管理。 (3)查询:即能够查找出你要的公交路线信息和总共有多少站。简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。 (4)删除:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。 (5)修改:即能修改一条你需要该的路线信息。修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现)。 (6)显示路线信息:即将路线信息显示到屏幕中,供用户查看。该功能比较简单,在这里不具体说明。

第3章 算法设计 3.1 设计思想

本系统的设计流程简单比较简单,原始数据全部都保存在文件中,用户就不必自己一个一个的输入信息。程序执行时从文件中读出,文件的读取操作在下文中我会详细说明,这里就不做具体说明了。创建动态链表和结构体数组对路线信息进行存储,因为使用链表时对程序的插入、删除会比较方便,那么插入和删除就相当于对链表节点的删除和插入。写无返回值的主函数 void main()对系统的功能进行显示,每次用户选择某一功能时都可以看到路线的大致信息,以便于用户更准确的选择功能。其中利用switch 条件分支语句进行子函数功能的选择和调用。并且使用while循环语句进行多次循环执行,就可以实现对信息的多次删除、增加、修改,知道达到用户满意时由用户自己选择退出系统。通同时使用了清屏函数,对上一次程序运行的结果清楚只显示本次运行的相关信息,这样的话就做到了界面的友好化,简单明了,不冗杂,更方便观看。当用户对信息进行有关的改动之后,用户根据自己的选择是否保存入文件中,就可以保存他所要的信息了。 其主要流程图如下:

3.2 设计表示

下面我将对各个子模块的功能进行详细的介绍和描述:

公交车信息:路线编号,司机姓名,途经站台总数,第一个站台名称到最最后一个站台名称,公交车的起始时间和终止时间,票价。

模块一:头文件,函数声明,定义结构体,各个子函数的定义,以便主函数能够直接调用实现其功能。

模块二:菜单显示。显示该系统所能完成的功能,一目了然。根据用户的需求自由选择功能实现。

模块三:从文件中读取信息。执行此程序时首先定义文件指针FILE *fp,在打开此文件时,若没有该文件,则显示文件打开失败,然后会自动创建一个新文件。当文本文档里已经有用户需要的数据,就可以从文件中正确读取出来,若文件打开不成功则会显示“文件打开失败!”。读取结束后必须要关闭文件,即 fclose(fp),这样就完成了从文件中读取信息的功能。

模块四:显示路线信息。该功能以子函数的形式给出,无返回值。当你选择信息显示功能时,你会进入公交车信息库,然后你就可以查看到所有的公交车信息。

模块五:录入线路信息。输入路线编号,司机姓名,途经站台总数,第一个站台名称到最最后一个站台名称,公交车的起始时间和终止时间,再输入票价,创建成功,保存公交车信息。

模块六:删除线路信息。选择该功能后,再输入你需要删除的路线编号,若没有该条路线编号,则显示未找到该路线编号,若有,则显示已找到。再输入1,就将你需要删除的公交车信息删除了。

模块七:修改线路信息。进入之后输入需要修改的公交车路线编号,然后出现一个修改菜单:1.修改路线编号 2.修改车辆信息 3.修改行车路线 4.修改行车时间 5.返回到主菜单。选择1,输入新的路线编号,保存公交车信息。选择2,输入新的司机姓名和单程票价,保存公交车信息。选择3,输入新的行车路线,保存公交车信息。选择4,输入新的行车时间,保存公交车信息。

模块八:查询路线信息。该子函数是一个无返回值的函数。使用时会出现一个查询菜单:1.路线导航查询 2.路线编号查询 3.站台信息查询 4.返回到主菜单。选择1,输入你所在的站点和要前往的站点,便会显示出所有含这两个站点的公交车信息。选择2,输入你要查找的公交路线编号,便会显示出该编号的公交车信息。选择3,输入你要查询的途经站台名称,便会显示出所有经过这个站台的公交车信息。

模块九:将公交车信息保存到文件中。当用户对原始路线信息进行改动之后,或许要将修改过后的信息保存起来,此时用户就可以自己选择是否要将信息保存起来,保存的位置是本系统实现设定好的,保存之后的信息在C:\Program Files (x86)\Microsoft Visual Studio\works\Debug\bus.txt目录下,也方便用户的查看。

模块十:主函数。构建无返回值的主函数,主函数用来实现对子模块的调用功能,用while循环语句来控制循环次数,用户可以根据自己的需求选择任何时候退出系统。对子模块的调用主要使用switch开关控制语句,根据选择实现用户要求的功能。实现注释:

本系统对于菜单显示表上的功能基本上都能实现,但是不是很完善,很多地方我还没有考虑到,或许是考虑的不够周全,但是有些不足的地方,是我的能力所不能达到的,还望老师体谅,不过等以后学过新的知识用新的方法或许就能将系统做进一步的改进。

算法设计中一些新的想法:

我觉得本系统很不完善,很多功能虽然能实现,但是实现的不够完美,很多细节我都没有考虑到,比如查询路线时,不能大致故略出起点站和终点站需要的时间;修改路线信息时,重新输入该条路线的信息时,路线上站点的个数不能改变,要改变的话还得选择增加或删除功能;还有就是用户将改动过后的信息保存到文件中后,以后该文件中的数据用户如果要使用的话,不能从文件中读取显示到屏幕上。这些都是我的系统一些不完善的地方,希望以后有能力的时候,能进一步对系统进行修改和完善。

系统调试及测试(含代码) 4.1 功能截图

主菜单:

信息录入:

信息显示:

信息修改:

信息删除:

信息查询:

4.2 实现代码

/**************************头文件声明************************************/

#include

#include

#include

/**************************函数声明************************************/

void init();           //初始化函数

void add();             //信息录入函数

void view();             //信息显示函数

void mod();             //信息修改函数

void modmeun();           //修改菜单

void modnavimeun();         //路线修改菜单

void del();             //信息删除函数

void find();             //信息查询函数

void findmeun();           //查询菜单

void findnavi();           //路线导航查询函数

void findnum();           //路线编号查询函数

void findstameun();         //站台信息查询菜单

void findsta();           //站台信息查询函数

void save();             //信息保存函数

void mainmeun();           //主菜单

char Test(char a,char b,char c);   //菜单输入检测函数

/**************************宏定义声明************************************/

#define N 100          //公交车数量

/**************************结构体定义************************************/

struct station          //途径站点信息

{

 char c[20];         //站点名称

};

struct bus            //公交车信息

{

 char num[20];        //公交车路线编号

 char name[20];        //司机姓名

 int n;            //站台数目

 struct station b[12];    //站台名称

 char topen[20];       //起始时间

 char tclose[20];       //终止时间

 int money;          //票价

}a[N];

/**************************子函数定义************************************/

void init()   //初始化函数    

{

 FILE *fp;            //文件指针

 int i;

 if((fp=fopen("bus.txt","r+"))==NULL)         //初次尝试打开"bus.txt"文本文件

 {

 printf("\n\t\t文件打开失败\n\n\t\t正在尝试创建新文件...\n");

 fp=fopen("bus.txt","w");             //创建"bus.txt"文本文件

 if((fp=fopen("bus.txt","r+"))==NULL)       //再次判断是否打开成功

 {

  printf("\t\t文件创建失败!!!\n");

  return;

 }

 }

 fp=fopen("bus.txt","r+");

 for(i=0;i

 if(*a[i].num!='\0')

  continue;

 else

 {

  printf("\n添加第%d辆公交车路线记录:\n",i+1);                

  printf("\n请输入路线编码(3位编码,第一位为大写字母,后两位为数字):\n");  //路线编码

  scanf("%s",cc);

  for(j=0;j

  while(a[i].n12)

  {

   printf("\n站台总数应满足(2



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有