C语言课程设计报告公交路线管理系统.docx
《C语言课程设计报告公交路线管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告公交路线管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告公交路线管理系统
合肥学院
计算机科学与技术系
课程设计报告
2021~2021学年第二学期
课
程
C语言课程设计
课程设计名称
公交路线管理系统
学
生
姓
名
杨莉莉
学
号
18
专
业
班
级
计本〔4〕班
指
导
教
师
徐静项向琴
2021年6月24日
一、需求解析
本系统主要功能是实现对公交路线的管理和保护。
我们都知道,每个城市都会有公交路线的改动,若是使用这个系统,就可以及时的对路线信息进行改正和保存,是特别方便的,而且该系统使用起来也很方便。
用户只需依照显示的提示信息进行选择和输入就可以实现你要求的功能。
该系统拥有增加,盘问,删除,改正和显示全部记录的功能。
用户能够依照实质情况进行相应的功能选择。
其详细功能简单描述以下:
(1〕保存:
立刻信息存入指定文件中。
当用户对原始数据进行相关的改动〔主若是对路线信息进行增加、删除、改正〕此后,用户能够依照自己的选择判断可否要保存到文件中,这样就实现了信息的记录功能,以方便用户随时进行查察。
(2〕增加:
即增加一条新的公交路线或许是某一条路线上的站点。
每次能够增加一条路线信息,假设用户想增加多条路线信息的话能够重复执行该功能,同样的,增加站点的话也是每一次增加一个站点,假设用户想增加多条路线信息的话也只需要重复执行该功能即可。
这样,就实现了对公交路线的增加信息管理。
(3〕盘问:
即能够查找出你要的公交路线信息和总合有多少站。
简单地说,就是用户先选择你要盘问的公交路线号,在输入起点站和终点站名称,尔后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间全部站点的序号和名称,从而使用户如数家珍的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节约了好多时间。
(4〕删除:
即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。
假设要删除路线时只需要输入你要删除的公交路线号即可,假设要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。
(5)改正:
即能改正一条你需要该的路线信息。
改正内容包括:
改正该条公交路线号、改正站点名称〔输入新的信息时该条路线的站点长度不能够改变,假设要改变站点长促能够选
择增加和删除功能,即可实现〕。
(6)显示路线信息:
立刻路线信息显示到屏幕中,供用户查察。
该功能比较简单,在这里不详细说明。
二、算法设计
1、设计思想:
本系统的设计流程简单比较简单,原始数据全部都保存在文件中,用户就不用自己一个一个的输入信息。
程序执行时从文件中读出,文件的读取操作在下文中我会详细说明,这里就不做详细说了然。
创立动向链表和结构体数组对路线信息进行储藏,因为使用链表时对程序的插入、删除会比较方便,那么插入和删除就相当于对链表节点的删除和插入。
写无返回值的主函数voidmain()对系统的功能进行显示,每次用户选择某一功能时都能够
看到路线的大体信息,以便于用户改正确的选择功能。
其中利用switch条件分支语句进行子函数功能的选择和调用。
而且使用while循环语句进行屡次循环执行,就可以实现对信
息的屡次删除、增加、改正,知道到达用户满意时由用户自己选择退出系统。
通同时使用了清屏函数,对前一次程序运行的结果清楚只显示本次运行的相关信息,这样的话就做到了界面的友好化,简单了然,不冗杂,更方便观看。
当用户对信息进行相关的改动此后,用户依照自己的选择可否保存入文件中,就可以保存他所要的信息了。
其主要流程图以下:
开始
路线信息
输入选择信息n
输入错误!
请重新输入n
n<7No
Yes
菜单
保存增加盘问删除改正输出退出
菜单
结束
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言〕?
南京:
南大学初版社。
2000年6月第1;;版;
[4]蔚敏等?
数据构〔c言版〕?
北京:
清大学初版社,1997年4月第1版;
[5]浩著?
C程序解与上机指(第3版)?
北京:
清大学初版社;
[6]浩著?
C程序(第3版)?
北京:
清大学初版社;
[7]洪国等著?
C++Builder程序松上手?
北京:
清大学初版社;
[8]宁正元?
数据构〔c言〕?
南京:
南大学初版社。
2000年6月第1版;
[9]蔚敏等?
数据构〔c言版〕?
北京:
清大学初版社,1997年4月第1版;
[10]明日科技著?
VisualC++程序开模范宝典?
北京:
人民初版社;
[11]胡学等?
数据构算法指?
北京:
清大学初版社,1999年第1版。
七、源程序代码
#include""
#include""
#include""
#include""
structstation
j++;
um),p->stop[j].name);
}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);
returnhead;
}
/*************************显示线路信息****************************/
voidPut()
{BL*p=head;
intj;
charch[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;
charnme[20];
intj,choise,k,r,key,x,c;
charch[5]={"end"};
printf("您要增加公交路线还是公交站点\n");
puts("1--增加公交路线2--增加公交站点\n");
printf("请选择:
");
scanf("%d",&choise);
switch(choise)
{
case1:
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;
returnhead;
case2:
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);
returnhead;
}
}
/****************************删除线路信息******************************/
BL*Delete()
{BL*q,*p=head;
intkey,r,j=1,x,choise,k;
charch[5]={"end"};
printf("您是要删除公交路线还是线路站点:
\n");
printf("1---删除公交路线2---删除站点\n");
printf("你的选择:
");
scanf("%d",&choise);
switch(choise)
{case1:
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("没有找到你要删除的公交路线!
");
returnhead;
case2:
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);
returnhead;
}
}
/*******************************
改正线路信息
*******************************/
BL*Correct()
{BL*p=head,*q;
intkey,j=1;
charch[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);
returnhead;
}
/****************************盘问路线信息*******************************/
voidSearch()
{BL*p=head,*q;
intkey,j=1,c,d;
charstr1[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;
intj;
charch[5]={"end"};
um,t->stop[j].name);
j++;
}while(strcmp(t->stop[j].name,ch)!
=0);
fprintf(fp,"\n");
t=t->next;
}
fclose(fp);
}
/*******************************
voidmain()
{
主函数*********************/
intchoise;