C语言课程设计报告--公交路线管理系统

时间:2024.3.27

合肥学院

计算机科学与技术系

课程设计报告

2010~20##学年第二学期

20##年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,所以该函数是一个指针函数,也是作为子函数的形式出现。可以删除整条路线,也可以删除线路上的某一个站点,删除一整条路线时,就相当于删除链表中的某一个节点,先确定你要删除的线路号,找到后,只需要将其前一个节点指向其后一个节点,所以删除时还需要考虑到删除的是首节点还是末节点还是中间节点,若删除首节点只需将head指向head的下一个节点,若删除末节点,将倒数第二个节点之后赋值为空即可,因此对线路的删除还是相对比较简单的,但是要求我们对链表的相关操作熟练掌握。删除站点时,先确定你要删除的是哪条路线上的站点,找到后一个指针会指向该节点,再确定你要删除的站序号,确定后将其后一个站名称移到当前删除节点的位置,就可以将该站名覆盖,从而实现站点的删除。

模块七:修改线路信息。

同上分析,该子函数也是一个指针函数,修改时,先确定你要修改哪条路线,指针指向该节点,在重新输入新的信息即可,新输入的信息会覆盖原有节点信息,所以可以实现对线路进行修改,但是修改时需要注意的是,修改时新输入的站点数目不能改变。

模块八:查询路线信息。

该子函数是一个无返回值的函数。使用时先输入你要找的路线号,再输入你要经历的起点站和终点站,程序就会为你显示出起点站和终点站之间共有多少站,并且输出起点站和终点站之间所有站序号和站点名称。

模块九:将信息保存到文件中。当用户对原始路线信息进行改动之后,或许要将修改过后的信息保存起来,此时用户就可以自己选择是否要将信息保存起来,保存的位置是本系统实现设定好的,保存之后的信息在D盘根目录下,也方便用户的查看。

模块十:主函数。

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

3、实现注释:

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

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

三、用户手册

用户在适用本系统时,我在这里有几点说明要解释一下。以便用户更好的使用本系统。

(1)路线号整形数据,站序号是整形数据,站名时字符串。

(2)输入路线信息时,站的序号是有次序的,从1开始依次往后增加。如果你要结束站点的输入,只需要在最后一个站点后在输入下一个站的序号,但是本站的站名一定要是end,用来表示站点录入结束的结束标志。

(3)保存信息的文本文档,一点要放入D盘根目录下,因为我在写本程序时就规定了将文本文档置于D盘根目录下,所以以后用户查看数据信息时可以从D盘根目录下查找。

四、调试及测试

     本程序的运行结果如下所示:

五、课程小结

 通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从C语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。

这次实训是老师给了题目,经过自己的努力,实现要求。先做简单的输出,一步步的再做其它要求,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。

通过实际操作,学会 C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的,只有想不到的”,“团结就是力量”,“实践是检验真理的标准”……的寓意。

在此希望以后应多进行这样的实训,加长设间,培养我们独立思考问题的能力,提高实际操作水平。

六、参考文献

[1] 黄明等编著《C语言课程设计》北京:电子工业出版社;

[2] 郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社;

[3] 宁正元《数据结构(c语言)》 南京:东南大学出版社。20##年6月第1;;版;

[4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版;

[5] 谭浩强编著《C程序设计题解与上机指导(第3版) 》北京:清华大学出版社;

[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社;

[7] 洪国胜 等编著 《C++ Builder程序设计轻松上手》北京:清华大学出版社;

[8] 宁正元《数据结构(c语言)》 南京:东南大学出版社。20##年6月第1版;

[9] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版;

[10] 明日科技 编著《Visual C++程序开发范例宝典》北京:人民邮电出版社;

[11] 胡学钢等《数据结构算法设计指导》北京:清华大学出版社,1999年 第1版。

七、源程序代码

#include "stdio.h"

#include "malloc.h"

#include "string.h"

#include "stdlib.h"

struct station   //公交站

{int num;  //站序号

 char name[20];//站名称

}stop[50];

typedef struct busline  //公交路线

{int busnum; //公交车号码

 struct station stop[50]; //线路上的站

 struct busline *next;

}BL;

BL *head;

/**********************菜单显示***********************/

void Menu()

{printf("\n\n");

 printf("\t\t========公交路线管理系统========\n");

 printf("\t\t========功能显示=========\n");

 printf("\t\t0----退出---\n");

 printf("\t\t1----显示线路信息-----\n");

 printf("\t\t2----增加线路信息-----\n");

 printf("\t\t3----删除线路信息-----\n");

 printf("\t\t4----修改线路信息-----\n");

 printf("\t\t5----查询路线---------\n");

 printf("\t\t6----将信息保存到文件中\n");

}

/******************从文件读取路线信息************************/

BL *Creat()

{BL *p,*q;

 int j=1;

 char ch[5]={"end"};

 FILE *fp;

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

 if(fp==NULL)

 {printf("不能打开此文件!");

  exit(0);

 }

 p=(BL *)malloc(sizeof(BL));

 head=p;

 q=p;

 fscanf(fp,"%d",&(p->busnum));

 do

 {fscanf(fp,"%d %s",&(p->stop[j].num),p->stop[j].name);

 j++;

 }while(strcmp(p->stop[j-1].name,ch)==1);

 while(!feof(fp))

 {j=1;

  p=(BL *)malloc(sizeof(BL));

  q->next=p;

  q=p;

  fscanf(fp,"%d",&(p->busnum));

  do

  {fscanf(fp,"%d %s",&(p->stop[j].num),p->stop[j].name);

   j++;

  }while(strcmp(p->stop[j-1].name,ch)!=0);

 }

 q->next=NULL;

 fclose(fp);

 return head;

}

/*************************显示线路信息****************************/

void Put()

{BL *p=head;

 int j;

 char ch[5]={"end"};

 puts("线路信息为-----");

 while(p!=NULL)

 {

  printf("%d\n",p->busnum);

  j=1;

  do

  {

   printf("%d%s---",p->stop[j].num,p->stop[j].name);

   j++;

  }while(strcmp(p->stop[j].name,ch)!=0);

  p=p->next;

  printf("\n");

 }

 }

/****************************增加线路信息****************************/

BL *Add()

{BL *p=head,*q,*t;

char nme[20];

 int j,choise,k,r,key,x,c;

 char ch[5]={"end"};

 printf("您要添加公交路线还是公交站点?\n");

 puts("1--添加公交路线    2--添加公交站点\n");

 printf("请选择:");

 scanf("%d",&choise);

 switch(choise)

 {

  case 1:j=1;

        t=(BL *)malloc(sizeof(BL));

        printf("输入你要添加的公交路线信息:\n");

        scanf("%d",&(t->busnum));

         do

       {

         scanf("%d%s",&(t->stop[j].num),t->stop[j].name);

           j++;

       }while(strcmp(t->stop[j-1].name,ch)!=0);

         while(p!=NULL)

       {

         q=p;

         p=p->next;        /*在表尾插入*/

       }

       q->next=t;  

         t->next=NULL;

       return head;

       

  case 2:j=1;

        printf("选择你要添加站点的公交路线:");

        scanf("%d",&key);

       while(p!=NULL)

       {q=p;

        if(p->busnum==key) break;

        p=p->next;

       }

       printf("输入你要添加的站序号及站名称:");

       scanf("%d",&x);

       scanf("%s",nme);

         while(strcmp(p->stop[j].name,ch)!=0)

       {if(x==(p->stop[j].num))

           {

            r=j;

            break;

           }

        j++;

       }

       r=j;

       c=j;

        while(strcmp(p->stop[c].name,ch)!=0)

          c++;

      for(k=c;k>=r;k--)

         strcpy(p->stop[k+1].name,p->stop[k].name);

      strcpy(p->stop[r].name,nme);

      return head;

 }

}

/****************************删除线路信息******************************/

BL *Delete()

{BL *q,*p=head;

 int key,r,j=1,x,choise,k;

 char ch[5]={"end"};

 printf("您是要删除公交路线还是线路站点:\n");

 printf("1---删除公交路线    2---删除站点\n");

 printf("你的选择:");

 scanf("%d",&choise);

 switch(choise)

 {case 1:printf("请输入你要删除的公交路线号");

         scanf("%d",&key);

         while(key!=p->busnum && p!=NULL)

       {q=p;

          p=p->next;

       }

         if(p->busnum==key)

       { if(p==head)

               head=p->next;

           else

               q->next=p->next;

       }

         else

              printf("没有找到你要删除的公交路线!");

         return head;

  case 2:printf("选择线路:");

         scanf("%d",&key);

        while(key!=p->busnum && p!=NULL)

        { q=p;

            p=p->next;

        }

         printf("输入你要删除的站点序号:");

         scanf("%d",&x);

       

        for(j=1;j<=x;j++)

        {if(x==p->stop[j].num)

            break;

         j++;

        }

        r=j;

        for(k=r;strcmp(p->stop[k].name,ch)!=0;k++)

            strcpy(p->stop[k].name,p->stop[k+1].name);

          strcpy(p->stop[k-1].name,p->stop[k].name);

        return head;

 }   

 }

/*******************************修改线路信息*******************************/

BL *Correct()

{BL *p=head,*q;

 int key,j=1;

 char ch[5]={"end"};

 printf("选择你要修改的路线号:");

 scanf("%d",&key);

 while(p!=NULL)

 {if(p->busnum==key) break;

  q=p;

  p=p->next;

 }

 printf("重新输入该条路线信息(包括路线号、站序号、站名称,各个站的站数不变):\n");

 scanf("%d",&p->busnum);

 do

 {

  scanf("%d%s",&(p->stop[j].num),p->stop[j].name);

  j++;

 }while(strcmp(p->stop[j-1].name,ch)!=0);

 return head;

}

/****************************查询路线信息*******************************/

void Search()

{BL *p=head,*q;

 int key,j=1,c,d;

 char str1[20],str2[20],ch[5]={"end"};

 printf("输入公交车号:");

 scanf("%d",&key);

 printf("\n输入起始站和终点站名称:");

 scanf("%s%s",str1,str2);

 while(p!=NULL)

 {if(p->busnum==key) break;

  q=p;

  p=p->next;

 }

 while(strcmp(p->stop[j].name,ch)!=0)

 {if(strcmp(p->stop[j].name,str1)==0)

     c=j;

  if(strcmp(p->stop[j].name,str2)==0)

    d=j;

  j++;

 }

 printf("起始站和终点站之间共有%d站\n",d-c-1);

 printf("各个站的序号及名称为:\n");

 for(j=c;j<=d;j++)

 printf("%d%s\t",p->stop[j].num,p->stop[j].name);

 printf("\n");

}

/****************************将信息保存到文件中***************************/

Save()

{

 FILE *fp;

 BL *t;

 int j;

 char ch[5]={"end"};

 //head=Creat();

 t=head;

 fp=fopen("123.txt","w+");

 if(fp==NULL) 

 {printf("File can not open!\n");

  exit(0);

 }  

while(t!=NULL)

  {fprintf(fp,"%d\t",t->busnum);

   j=1;

   do

   {

    fprintf(fp,"%d%s--",t->stop[j].num,t->stop[j].name); 

    j++;

   }while(strcmp(t->stop[j].name,ch)!=0);

   fprintf(fp,"\n");

  t=t->next; 

 }

fclose(fp);

}

/*******************************主函数*********************/

void main()

{

 int choise;

 head=Creat();

 Put();

 Menu();

 while(1)

 {

  printf("请选择:");

  scanf("%d",&choise); 

  switch(choise)

  {case 0:exit(0);

   case 1:system("cls");

         Put();

          Menu();

         break;

   case 2:system("cls");

         Put();

          Menu();

         Add();

         break;

   case 3:system("cls");

         Put();

          Menu();

         Delete();

        break;

   case 4:system("cls");

         Put();

          Menu();

         Correct();

        break;

   case 5:system("cls");

         Put();

          Menu();

         Search();

         break;

   case 6:Save();

         break;

   default:printf("输入错误,请重新输入!\n");

         break;

  }

 }

}

更多相关推荐:
c语言图书管理系统课程设计报告

合肥学院计算机科学与技术系课程设计报告20xx20xx学年第二学期课学学专指业导班教生姓程C语言课程设计图书管理系统名号级师课程设计名称20xx年6月一需求分析为了满足图书管理的要求通过计算机技术给图书管理人员...

c语言课程设计报告·图书管理系统

第一章11题目描述图书管理系统设计要求图书管理信息包括图书名称图书编号单价作者存在状态借书人姓名性别学号等试设计一图书管理系统使之能提供以下功能1新图书基本信息的输入2图书基本信息的查询3对撤销图书信息的删除4...

C语言图书管理系统课程设计报告[1]

第三章图书管理系统的设计与实现3.1系统的需求分析图书登记管理系统作为一个应用软件将为学校的老师和学生提供一个对学校图书馆深入了解并借阅、还书的平台。根据系统界面的提示信息对图书馆信息进行查询、初始化等操作系统…

c语言图书管理系统课程设计报告

沈航北方科技学院课程设计说明书课程名称教学部专业数控班级B042111学号B04211123学生姓名指导教师赵小磊20xx年6月链表实现图书信息操作田文目录摘要31绪论32系统分析321功能需求322数据需求4...

c语言图书管理系统课程设计报告

河南工业大学C语言课程设计报告20xx20xx学年第2学期课程C语言课程设计课程设计名称图书管理系统姓名晁永兵学号20xx16040220学院信息科学与工程学院专业软件工程班级2班20xx年05月04日一需求分...

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

C语言图书管理系统课程设计报告

C语言图书管理系统课程设计报告引言随着社会经济的迅速发展和现代科学技术的进步,人类社会正逐渐走向现代化。计算机事业的飞速发展,使得以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。同时,随着经济文化水平的…

通讯录管理系统课程设计报告书(C语言)[1]

课程设计报告书课程名称班级学号姓名指导老师通讯录管理系统一需求分析设计题目及要求建立通讯录信息信息至少包含编号姓名年龄电话通讯地址电子邮箱等能够提供添加删除和修改通讯录信息的功能能够提供安不同方式查询的功能如按...

C语言课程设计报告—图书信息管理系统

C语言课程设计报告图书信息管理系统设计5507113陈杰20xx1001797指导老师刘文中C语言程序设计编程实践是学习C语言程序设计的一重要环节上机实习和课程设计是提高同学们程序设计能力的有效途径能够使同学们...

C语言图书馆管理系统课程设计报告

一目的要求C语言程序设计是一门讲述C语言的基本知识和编程方法的课程在讲述C语言数据类型的基础上对C语言的五类语句做了简单的介绍另外还讨论了C语言的三种程序结构顺序选择和循环对函数的使用指针的概念结构体的应用文件...

C语言图书馆管理系统课程设计报告12

C语言课程设计学生姓名袁盛升学生学号所在班级任课教师姜林10211121图书馆管理系统设计目的图书信息包括登录号书名作者名分类号出版单位出版时间价格等试设计一图书信息管理系统使之能提供以下功能1系统以菜单方式工...

图书馆管理系统_毕业设计论文_开题报告

开题报告课题名称图书管理系统一立项依据1课题的目的及意义本次毕业设计所从事的课题题目是基于VB的图书管理系统的设计与实现课题的目的应用当前高速发展的计算机技术组建图书管理系统随着计算机及网络技术的飞速发展Int...

c语言图书管理系统课程设计报告(26篇)