软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析%2B可行性分析)(全文5篇)

时间:2019-05-14 00:01:04下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析%2B可行性分析)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析%2B可行性分析)》。

第一篇:软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析%2B可行性分析)

软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功

能)(需求分析+可行性分析)

设计题目:火车订票系统 小组成员: 指导教师: 完成时间: 一.需求设计:

1.每条线路所涉及的信息有:起点、终点、站名、车次、、票价、时间、座位号。2.作为示意系统,全部数据可以只放在内存中。

3.系统能实现的功能和操作如下:

①.查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。

②.承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排队候补。

③.承办退票业务:根据客户提供的情况(车次、时间、座位号)为客户办理退票手续,然后查询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

④登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。

⑤统计功能:将每次车的订票,退票结果统计出来。

⑥管理功能:列车管理员可以通过调用函数来查看车票极其用户情况.⑦.查询功能:用户可以查询自己需要的车辆信息.二.总体设计

1.程序流程图: 按1键

按2键

按3键

按4键

进入in函数

进入book函数

进入inquire函数

进入cancel函数

按5键

进入you函数 2.总体设计说明: ①.数据结构设计: 程序=数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次到站,票价,到达时间,是否已被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的车次,起始站,要到的站,时间.已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号码,已购车票的车次,出发时间,到达时间.车票信息链表示意图: 车次

起始站

发车时间

downn next 下一站名

到站时间

票价

mark next 座位号

未购票用户信息队列: 用户姓名

购票的车次

起始站

要到的站

达到时间 用户姓名

购票的车次

起始站

要到的站

达到时间

注:座位号包含在车次号中

已购票用户信息链表示意图: 用户姓名

身份证号码

已购车票的车次号

出发时间

到达时间

注:座位号包含在车次号中 ②算法的设计: 主函数:

利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函数,实现相应的功能。在主函数开始处做下First标识,以便在其他函数中使用goto语句返回主函数的用户界面。

In()函数:

In()函数负责输入各种信息,链表中车票信息的初始值.Book()函数:

Book()函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark值.Inquire()函数:

Inquire()函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出.Cancel()函数:

Cancel()函数主要负责退票功能.主要是遍历整个链表查找到需要的结点,然后修改mark的值.You()函数:

You()函数主要负责输入用户信息,主要是创建一个单链表,将用户信息放入.并提供管理人员的查询功能.Find()函数:

Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息.Total()函数:

Total()函数主要负责统计整个订票系统的情况.三.详细设计:

1.主函数:

①程序代码:

Main(){ int *t;int c;

First: printf(“welcome to our ticket system!n”);printf(“1.intput the data.n”);/*按1键输入数据*/ printf(“2.book the ticket.n”);/*按2键订车票*/ printf(“3.inquire the ticket.n”);/*按3键查询车票*/ printf(“4.cancel the ticket.n”);/*按4键退车票*/ printf(“5.input your own data.n”);/*按5键输入个人信息*/ scanf(“%d”,&c);switch(c)

{case „1‟: t=in();break;

case „2‟: book();break;

case „3‟: inquire();break;

case „4‟: cancel();break;

case „5‟: you();break;

default : printf(“you enter an error numbern”);}}

②功能说明: 通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入实现该功能函数完成用户所需要的功能.2.In()函数: ①程序流程图: 建立横向链表头结点

输入m,n的值

For循环,m是否为0 否 建立结点

向结点输入数据

For循环,n是否为0 否

建立纵向结点

向结点输入数据

返回头指针

Goto到用户界面 ②程序代码: struct ticket *in()/*一个返回指针形的函数*/

{

struct ticket *head;/*头结点*/ struct ticket *p1,*p2;struct station *s1,*s2;int m,n;int i;

p1=p2=(struct ticket *)malloc(len);/*建立横向链表的头结点*/ scanf(“%d”,&m);/*输入一共所需的车票信息总数*/ scanf(“%d”,&n);/*输入从始发站到终点站共有几站*/ head=null;for(i=0;i<=m;i++){

p2->next=p1;p2=p1;

p1=(struct ticket)*malloc(len);

s1=s2=(struct ticket)*malloc(len);/*建立纵向链表的头结点*/ head1=s1=s2;

p1->down=s1=s2;/*指向纵向链表的头结点*/

scanf(“%d”,“%d”,“%d”,&p1->num,&p1->num2, &p1->time);/*输入横向链表的数据*/ for(i=0;i<=n,i++){

s2->next=s2;s2=s1;

s1=(struct ticket)*malloc(len);/*建立纵向链表*/

scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1->name,&s1->time,&s1->money,&s1->seat,&s1->mark);} /*输入纵向链表的数据*/ s1->next=head1;/*纵向链表为循环链表*/ }

p2->next=null;

return(head);/*返回头指针*/ goto first;/*返回头指针*/ }

③功能说明: 通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.3.Book()函数: ①程序流程图: 输入需要的车次号

输入需要到达的车站名

While循环是否需要的车次

横向结点值给o

While循环是否是需要的车站名

使mark的值为1

纵向结点值给s

纵向链表移针

横向链表移针

当横向链表下一个指针为空时

输出 s点的数据

输出 o点的数据

Mark是否为1 错误

②程序代码: void book()

{

struct ticket *p;struct station *q;int t;int *o,*s;

printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);

scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/ while(p=!null){

if(p->number==t){ q=p->down;

o=p;/*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){

if(q->name==h){

if(q->mark=1)

printf(“your ticket is unused”);else

q->mark=1;/*修改mark标记*/

s=q;/*把符合条件的纵向链表的数据给s*/ }

q=q->next;/*纵向链表移针*/ }}

p=p->next;/*横向链表移针*/ }

printf(“your ticket has already booked!”);

printf(“%d”,“%d”,“%d”,o->num,o->num2, o->time);/*输出横向链表的数据*/

printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark);/*输出纵向链表的数据*/ goto first;}

③功能说明: 本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为已定车票.如果mark已经为1则输出错误信息.3.inquire()函数: ①程序流程图: 输入需要的车次号

输入需要到达的车站名

While循环是否已到空

否 是否是需要的车次

While循环是否已到头指针

是否是需要的车站名

输出所需的信息

错误

移动指针

②程序代码: void inquire()

{

struct ticket *p;struct station *q;int t;int *o,*s;

printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);

scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/ while(p=!null){

if(p->number==t){ q=p->down;

o=p;/*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){

if(q->name==h){

s=q;/*把符合条件的纵向链表的数据给s*/ }

q=q->next;/*纵向链表移针*/ } }

p=p->next;/*横向链表移针*/ }

printf(“%d”,“%d”,“%d”,o->num,o->num2, o->time);/*输出横向链表的数据*/

printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark);/*输出纵向链表的数据*/

goto first;}

③功能说明: 本函数主要提供查询功能.用户输入需要查询的车次和需要到 车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本车次的所有信息.4.Cancel()函数: ①程序流程图: 输入需要的车次号

输入需要到达的车站名

While循环是否需要的车次

横向结点值给o

While循环是否是需要的车站名

使mark的值为0

纵向结点值给s

纵向链表移针

横向链表移针

当横向链表下一个指针为空时

输出 s点的数据

输出 o点的数据 ②程序代码;void cancel(){

struct ticket *p;struct station *q;int t;int *o,*s;

printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);

scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/ while(p=!null){

if(p->number=t){ q=p->down;o=p;/*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){

if(q->name=h){

q->mark=0;/*修改mark标记*/

s=q;/*把符合条件的纵向链表的数据给s*/ }

q=q->next;/*纵向链表移针*/ }}

p=p->next;/*横向链表移针*/ }

printf(“your ticket has already cancel!”);

printf(“%d”,“%d”,“%d”,o->num,o->num2, o->time);/*输出横向链表的数据*/

printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark);/*输出纵向链表的数据*/ goto first;}

③功能说明:

本函数主要提供退票功能.用户输入需要退票的车次和需要到车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标识是其为0.最后输出所有关于本车次的所有信息.5.You()函数: ①程序代码: void you()

{

struct you *head;struct you *p;

p=(struct you *)malloc(len);

scanf(“%d”,&p->name,&p->num,&p->num1,&p->time,&p->time1);}

goto First;}

②用户查询代码:(注:本函数用于管理人员查询用户)void find(){

struct you *head;struct you *p;int u;

scanf(“%d”,&u);while(p=!null){

if(p->num=u){s=p;} p=p->next;}

printf(“%s”,”%d”,”%d”,”%d”,”%d”,p->name,p->num,p->num1,p->time,p->time1);}

③功能说明:

本函数用于用户输入个人信息,以便管理人员管理.而管理函数只面对管理人员使用,因此未在用户界面上显示出来.6.统计模块: void total(){ int *p,*q;int n;p=t;

while(p=!null){

while(q->next=!head1){

if(mark=1)

{n=n+1;} q=q->next;}

p=p->next;}

printf(“the number of the booked ticket are :”);printf(“%d”,n);

}

6.所用变量声明:

①横向链表结点的结构体: struct ticket { int num;int num1;

int time;

struct ticket *next;

struct station *down;};

int t;

②纵向链表结点的结构体: struct station

{

int name;

int time;

int money;

int mark;

struct station *next;}

③用户信息链表结点的结构体:

struct you

{

int name;

int num;

int num1;

int time;

int time1;

struct you *next;

}

四.程序说明书:

本系统用于火车站的车票管理.主要方便用户订票,也可方便管理人员管理车票.当用户看到用户界面时,可以根据提示选择自己想要的服务,选择后按下回车键,程序便会转到相应的函数进行.完成后,程序会显示您已经成功的订票或退票.完成后程序会自动回到起始位置.管理人员也可以很方便的调用本系统包含的查询和统计函数,管理车票情况.具体说明:

1.提示程序操作者输入预设的数据.2.提示用户进行订票操作.3.提示用户进行查询自己需要的车票的操作.4.提示用户进行退票操作.5.提示用户输入自己的相关信息.五.程序调试:

本程序分为多模块,为的是方便小组合作.所以各个功能都由函数调用来实现.组员在各自的编制和调试中基本都实现所需的功能.但在联调的过程中,由于我们使用了大量的传递指针形的函数,所以在数值的传递上问题很多.分步执行的时候指针的位置很乱!所以让我们遗憾的是联调并没有成功.我们也会吸取教训,在函数编制时注意数值的传递.六.运行结果: 输入: 2

K717,Beijing,11:00

Yuci,12:00,10,0,56

Yangyuan,1:00,20,0,56

Shijiazhuang,2:00,30,56

输入:k717

shijiazhuang

输出:you have already booked the ticket!

K717,shijiazhuang,11:00,3:00,30,56

七.程序源代码:

#include #include #define null 0

#define len sizeof(struct ticket)struct ticket { int num;int num1;

int time;

struct ticket *next;

struct station *down;};

int t;

struct station {

int name;

int time;

int money;

int mark;

struct station *next;struct you

{

int name;

int num;

int num1;

int time;

int time1;

struct you *next;

}

/*公共变量声明*/

struct ticket *in()/*一个返回指针形的函数*/

{

struct ticket *head;/*头结点*/ struct ticket *p1,*p2;struct station *s1,*s2;int m,n;int i;

p1=p2=(struct ticket *)malloc(len);/*建立横向链表的头结点*/ scanf(“%d”,&m);/*输入一共所需的车票信息总数*/ scanf(“%d”,&n);/*输入从始发站到终点站共有几站*/ head=null;for(i=0;i<=m;i++){

p2->next=p1;p2=p1;

p1=(struct ticket)*malloc(len);

s1=s2=(struct ticket)*malloc(len);/*建立纵向链表的头结点*/ head1=s1=s2;

p1->down=s1=s2;/*指向纵向链表的头结点*/

scanf(“%d”,“%d”,“%d”,&p1->num,&p1->num2, &p1->time);/*输入横向链表的数据*/ for(i=0;i<=n,i++){

s2->next=s2;s2=s1;

s1=(struct ticket)*malloc(len);/*建立纵向链表*/

scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1->name,&s1->time,&s1->money,&s1->seat,&s1->mark);} /*输入纵向链表的数据*/ s1->next=head1;/*纵向链表为循环链表*/ } p2->next=null;

return(head);/*返回头指针*/ goto first;/*返回头指针*/ }

void book()

{

struct ticket *p;struct station *q;int t;int *o,*s;

printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);

scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/ while(p=!null){

if(p->number==t){ q=p->down;

o=p;/*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){

if(q->name==h){

if(q->mark=1)

printf(“your ticket is unused”);else

q->mark=1;/*修改mark标记*/

s=q;/*把符合条件的纵向链表的数据给s*/ }

q=q->next;/*纵向链表移针*/ }}

p=p->next;/*横向链表移针*/ }

printf(“your ticket has already booked!”);

printf(“%d”,“%d”,“%d”,o->num,o->num2, o->time);/*输出横向链表的数据*/

printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark);出纵向链表的数据*/ goto first;}

void inquire()

{

struct ticket *p;struct station *q;int t;int *o,*s;

printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);

scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/ while(p=!null){

if(p->number==t){ q=p->down;

o=p;/*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){

/*输 if(q->name==h){

s=q;/*把符合条件的纵向链表的数据给s*/ }

q=q->next;/*纵向链表移针*/ } }

p=p->next;/*横向链表移针*/ }

printf(“%d”,“%d”,“%d”,o->num,o->num2, o->time);/*输出横向链表的数据*/

printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark);出纵向链表的数据*/

goto first;}

void cancel(){

struct ticket *p;struct station *q;int t;int *o,*s;

printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);

scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/ while(p=!null){

/*输if(p->number=t){ q=p->down;

o=p;/*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){

if(q->name=h){

q->mark=0;/*修改mark标记*/

s=q;/*把符合条件的纵向链表的数据给s*/ }

q=q->next;/*纵向链表移针*/ }}

p=p->next;/*横向链表移针*/ }

printf(“your ticket has already cancel!”);

printf(“%d”,“%d”,“%d”,o->num,o->num2, o->time);/*输出横向链表的数据*/

printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark);出纵向链表的数据*/ goto first;}

void you()

{

struct you *head;struct you *p;

p=(struct you *)malloc(len);

scanf(“%d”,&p->name,&p->num,&p->num1,&p->time,&p->time1);}

goto First;}

/*输

void find(){

struct you *head;struct you *p;int u;

scanf(“%d”,&u);while(p=!null){

if(p->num=u){s=p;} p=p->next;}

printf(“%s”,”%d”,”%d”,”%d”,”%d”,p->name,p->num,p->num1,p->time,p->time1);}

void total(){ int *p,*q;int n;p=t;

while(p=!null){

while(q->next=!head1){

if(mark=1)

{n=n+1;} q=q->next;}

p=p->next;}

printf(“the number of the booked ticket are :”);printf(“%d”,n);}

Main(){ int *t;int c;

First: printf(“welcome to our ticket system!n”);printf(“1.intput the data.n”);/*按1键输入数据*/ printf(“2.book the ticket.n”);/*按2键订车票*/ printf(“3.inquire the ticket.n”);/*按3键查询车票*/ printf(“4.cancel the ticket.n”);/*按4键退车票*/ printf(“5.input your own data.n”);/*按5键输入个人信息*/ scanf(“%d”,&c);switch(c)

{case „1‟: t=in();break;

case „2‟: book();break;

case „3‟: inquire();break;

case „4‟: cancel();break;

case „5‟: you();break;

default : printf(“you enter an error numbern”);

}

} 八.结束语:

课程设计使我们通过解决一个实际问题,巩固和加深所学课程,提高了我们分析和编写程序的能力,为我们以后的学习提供了很好的帮助,更为毕业设计和毕业以后从事计算机方面的工作奠定了基础。

通过两周的学习,我们对已学的专业知识有了比较深刻的认识,同时在查找资料或和其他同学交流的过程中,发现了一些问题,所以在设计的时候,遇到了很多困难。在对所学的有限知识的理解和掌握下,在查找资料以及大家共同努力学习和讨论后终于把课题做完。但因为对专业知识没有很深的认识,所以其中难免有一些是错误的或者是不合理的,希望老师多指教。

在课程设计的过程中,老师的指导对我起了非常大的帮助,在此表示感谢,谢谢各位老师的辛勤工作!

下载软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析%2B可行性分析)(全文5篇)word格式文档
下载软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析%2B可行性分析)(全文5篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐