火车订票系统课程设计.docx

上传人:b****4 文档编号:12098024 上传时间:2023-04-17 格式:DOCX 页数:40 大小:251.41KB
下载 相关 举报
火车订票系统课程设计.docx_第1页
第1页 / 共40页
火车订票系统课程设计.docx_第2页
第2页 / 共40页
火车订票系统课程设计.docx_第3页
第3页 / 共40页
火车订票系统课程设计.docx_第4页
第4页 / 共40页
火车订票系统课程设计.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

火车订票系统课程设计.docx

《火车订票系统课程设计.docx》由会员分享,可在线阅读,更多相关《火车订票系统课程设计.docx(40页珍藏版)》请在冰豆网上搜索。

火车订票系统课程设计.docx

火车订票系统课程设计

火车订票系统课程设计

小组成员:

(080100)王健

(08010088)汪选继

()王海全

(08010077)黄磊

(08010067)韦士奎

第六章源程序代码...........................................................................16

第一章概述

1.1课程设计题目

开发一个学生火车票定票系统

主要实现以下功能:

1、学生基本信息的管理,尤其是学生目的地。

2、学生购票的基本信息,尤其是价钱和车票目的地

3、购票以后的分发管理和分配。

4、能实现退票功能

5、能进行信息的统计和查询

6、操作员管理

1.2设计目的

应用本学期对大型数据库系统原理的理论学习,通过上机实践的方式将理论知识与实践更好的结合起来,巩固所学知识。

实践和巩固在课堂教学中学习的关于关系数据库原理的有关知识和数据库系统的建立方法,熟练掌握对于给定实际问题,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。

1.3设计内容

对于所选择的题目必须对课题的相关信息有一定的了解,对于这个学生火车票定票系统来说,必须了解火车票预定系统的基本雏形以及购票人的信息还有火车票的相关信息。

把这些信息整理并生成数据库表,输入到数据库中,使之能够进行添加、查询、修改、删除并且与火车票预定系统执行一致的操作。

需求分析阶段就是要研究火车票预定系统的具体分类和实施过程流图。

概念设计阶段要完成数据抽象与局部视图设计还有视图的集成。

逻辑结构设计阶段要把E-R图转化为关系模式并且把我输入的三张表结合在一起完成一个总关系表。

最后就是要运行和实施数据库。

1.4系统测试要求

建立两个用户:

zhangsan,admin

(1)第一个用户zhangsan只具有普通用户的权限。

(2)第二个用户admin拥有系统操作员的权限。

第二章需求分析

2.1需求分析的任务

调查学生火车票预定系统应用领域涉及的内容,对涉及到领域的各个应用的信息要求和操作要求进行详细分析,形成需求分析说明书。

最重要的是调查、收集信息、分析购票人信息和火车票预定流程。

处理要求、数据的安全性与完整性要求。

要求系统能有效、快速、安全、可靠和无误的完成上述操作。

并要求客户端的界面要简单明了,易于操作,服务器端程序利于维护。

2.2需求分析的过程

火车站为方便学生返程,需要开发一个学生火车票预定系统。

这个预定火车票系统的学生信息,包括姓名、性别、身份证号码、起始时间、目的地,输入火车票预定系统的客户端程序,系统通过查询铁路系统内的车次数据服务器后,为学生安排车次,印出取票通知。

学生在凭取票通知和帐单交款后取票,系统校对无误后即印出火车票给学生。

如果有特殊原因,学生可以持有效证件去火车站退票。

要求系统能有效、快速、安全、可靠和无误的完成上述操作。

并要求客户端的界面要简单明了,易于操作,服务器端程序利于维护。

2.3数据字典与流程图

经过可行性分析和初步需求调查,抽象出该系统业务流程图,结合该实例具体情况,给出学生信息、订票信息和取票通知的具体需求。

图2.1学生购票流程图

⑴系统用户需求

①火车站需求

●订票功能:

希望能通过学生姓名查到该学生的车次编号并记录学生的基本信息。

●统计功能:

◆按火车票统计买票人数

②学生购票需求:

学生持个人有效证件去火车站购买火车票。

●交费功能:

◆交费

◆退票(资金退还)

③取票需求

●通知功能:

◆通知学生取票

●统计功能:

◆统计可以取票的人

●查询功能:

◆购票学生查询

购票学生姓名

购票学生身份证号

购票学生火车票编号

④车次信息需求

●查询功能:

◆车次号

◆起始地

◆目的地

◆出发时间

2.4系统框架

在调查完了系统需求之后,就要开始分析用户需求。

在此,采用自顶向下的结构化分析方法。

首先,定义全局概念结构的框架,如图2.2所示。

图2.2火车票预定系统总框架图

每个子系统需要进一步细化。

学生信息系统为例进一步细化,如图2.3所示。

图2.3学生信息系统

并且其中的每一个功能模块都可以进一步细化,如图2.4所示。

图2.4查询学生信息功能

图2.5车次信息系统

 

图2.6火车票信息系统能查询到的内容

图2.7退票系统

将以上所有子系统全部细化。

将所有用户需求分析完毕之后,就要开始构造数据字典了。

经分析之后,本系统要用到三个基本表:

学生信息表,车次信息表,火车票信息表。

数据结构定义如表2.1所示。

表2.1数据结构定义

数据结构名

含义说明

组成

学生

定义了学生相关信息

学生姓名,身份证号,性别,

学校,电话号

车次信息表

定义了车次

的有关信息

车次编号,起始时间,起始站点,终点站

火车票信息表

定义了火车票相关信息

火车票编号,座位号,起始时间,起始站点,终点站

第三章概念结构设计

3.1概念结构设计的方法与步骤

3.1.1概念结构设计的方法

概念设计阶段采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。

对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。

3.1.2概念结构设计的步骤

第一步是进行局部视图的设计:

由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。

因此我先逐一的设计分E-R图。

第二步是进行视图的集成:

各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。

我想采用一次集成两个分E-R图的方式。

3.2数据抽象与局部视图设计

按照图2.2火车票预定系统总框架图,设计实体属性图以及局部E-R图。

图3.1车次信息实体属性图

图3.2学生实体属性图

图3.3火车票实体属性图

……

3.3视图的集成

经过逐步细化再进行每两个一集成初步形成一个E-R图,最后得到图3.4总体概念结构E-R图。

 

图3.4系统总体结构E-R图

第四章数据库逻辑设计

4.1E-R图向关系模型的转换

将图3.4总体概念结构E-R图转化成关系模型。

学生(姓名,身份证号,电话号,性别,学校)

车次信息表(车次编号,起始时间,起始站点,终点站)

火车票信息表(座位号,车次编号号,座位信息,售出时间)

4.2数据模型的优化

将转化的关系模式进行优化,最终达到第三范式。

1、确定数据依赖

学生(姓名,身份证号,电话号,性别,学校)

学生姓名→身份证号,学生姓名→电话号,学生姓名→性别,学生姓名→学校

车次信息表(车次编号,起始时间,起始站点,终点站)

车次编号→起始时间,车次编号→起始站点,车次编号→终点站

火车票信息表(座位号,车次编号,座位信息,售出时间)

(座位号,车次编号)→座位信息,(座位号,车次编号,座位信息)→售出时间

2、对各关系模式间数据依赖进行极小化处理,消除冗余

学生姓名→性别,学生姓名→学校,学生姓名→车次编号

学生姓名→座位号,车次编号→起始站点,车次编号→终点站

车次编号→起始时间,(座位号,车次编号)→座位信息

3、看这些模式是否符合要求,确定是否要对某些模式进行合并或者分解

最终分解成第三范式:

(电话号,身份证号)(学生姓名)(学生姓名,性别,学校)(学生姓名,车次编号)(学生姓名,座位号)(车次编号,座位号)(车次编号,起始站点,终点站,起始时间)

4.3数据库的结构

根据总体结构图设计各表的结构,其相应标的定义如下:

 

字段名

数据类型

长度

约束

描述

name

varchar

50

主键

姓名

id

decimal

不为空

身份证号

telephonenumber

decimal

不为空

电话号

sex

varchar

50

不为空

性别

school

Varchar

50

不为空

学校

表4-1学生信息系统的结构

字段名

数据类型

长度

约束

描述

ttrainnumber

decimal

主键

车次编号

stratplace

varchar

50

不为空

起始站点

destination

varchar

50

不为空

目的地

startime

time

不为空

起始时间

表4-2车次信息表系统的结构

字段名

数据类型

长度

约束

描述

Seatnumber

decimal

主键

座位号

trainnumber

decimal

不为空

车次编号

soledtime

varchar

50

不为空

售出时间

isbooked

boolean

50

不为空

订票状态

表4.3火车票信息表系统的结构

 

五、软件功能设计

5.1软件模块划分

1.普通用户模块

在普通用户模块中可以实现注册,登陆,资料修改,车次查询,订票以及退票。

2.管理员模块

管理员模块包含三个板块的内容:

①车次基本信息管理:

包括添加,更新,查询,删除车次。

②火车票信息管理:

已定火车票列表。

③查看营业总额。

5.2软件功能结构图

 

第六章、源程序代码

算法的设计:

主函数:

       利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函数,实现相应的功能。

在主函数开始处做下First标识,以便在其他函数中使用goto语句返回主函数的用户界面。

 

In()函数:

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

 

Book()函数:

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

 

Inquire()函数:

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

 

Cancel()函数:

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

 

You()函数:

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

 

Find()函数:

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

Total()函数:

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

 

 

详细设计:

 

1.主函数:

 

①程序代码:

 

Main()

{int*t;

intc;

First:

 printf(“welcometoourticketsystem!

\n”);

printf(“1.intputthedata.\n”);     /*按1键输入数据*/

printf(“2.booktheticket.\n”);     /*按2键订车票*/

printf(“3.inquiretheticket.\n”);  /*按3键查询车票*/

printf(“4.canceltheticket.\n”);   /*按4键退车票*/

printf(“5.inputyourowndata.\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(“youenteranerrornumber\n”);}}

 

②功能说明:

通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入实现该功能函数完成用户所需要的功能.

2.In()函数:

①程序流程图:

建立横向链表头结点

 

输入m,n的值

 

For循环,m是否为0

 

 

建立结点

 

向结点输入数据

 

For循环,n是否为0

 

 

建立纵向结点

 

向结点输入数据

 

 

返回头指针

 

Goto到用户界面

②程序代码:

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

   {

   structticket*head;            /*头结点*/

structticket*p1,*p2;

structstation*s1,*s2;

intm,n;

inti;

p1=p2=(structticket*)malloc(len); /*建立横向链表的头结点*/

scanf("%d",&m);            /*输入一共所需的车票信息总数*/

scanf(“%d”,&n);          /*输入从始发站到终点站共有几站*/

head=null;

for(i=0;i<=m;i++)

{

p2->next=p1;

p2=p1;

p1=(structticket)*malloc(len);  

s1=s2=(structticket)*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=(structticket)*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);    /*返回头指针*/

gotofirst;      /*返回头指针*/

}

③功能说明:

通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.

3.Book()函数:

①程序流程图:

输入需要的车次号

 

输入需要到达的车站名

 

While循环是否需要的车次

 

 

横向结点值给o

 

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

 

 

使mark的值为1

 

纵向结点值给s

 

纵向链表移针

 

横向链表移针

 

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

 

输出s点的数据

 

输出o点的数据

 

Mark是否为1

 

错误

 

 

②程序代码:

voidbook()

 {

structticket*p;

structstation*q;

intt;

int*o,*s;

printf(“pleaseenterthenumber:

”);

scanf(“%d”,&f);      /*输入需要的车次*/

printf(“pleaseenterthestation:

”); 

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(“yourticketisunused”);

else

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

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

}

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

}}

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

}

printf(“yourtickethasalreadybooked!

”);

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);  /*输出纵向链表的数据*/

gotofirst;

}

③功能说明:

本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为已定车票.如果mark已经为1则输出错误信息.

3.inquire()函数:

①程序流程图:

输入需要的车次号

 

输入需要到达的车站名

 

While循环是否已到空

 

 

是否是需要的车次

 

 

While循环是否已到头指针

 

 

是否是需要的车站名

 

 

输出所需的信息

 

 

 

错误

 

移动指针

 

 

 

②程序代码:

voidinquire()

 {

structticket*p;

structstation*q;

intt;

int*o,*s;

printf(“pleaseenterthenumber:

”);

scanf(“%d”,&f);      /*输入需要的车次*/

printf(“pleaseenterthestation:

”); 

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);  /*输出纵向链表的数据*/

gotofirst;

}

③功能说明:

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

4.Cancel()函数:

①程序流程图:

输入需要的车次号

 

输入需要到达的车站名

 

While循环是否需要的车次

 

 

横向结点值给o

 

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

 

 

使mark的值为0

 

纵向结点值给s

 

纵向链表移针

 

横向链表移针

 

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

 

输出s点的数据

 

输出o点的数据

②程序代码;

 void cancel()

{

 structticket*p;

structstation*q;

intt;

int*o,*s;

printf(“pleaseenterthenumber:

”);

scanf(“%d”,&f);      /*输入需要的车次*/

printf(“pleaseenterthestation:

”); 

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(“yourtickethasalreadycancel!

”);

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);  /*输出纵向链表的数据*/

gotofirst;

}

③功能说明:

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

5.You()函数:

①程序代码:

voidyou()

   {

   structyou*head;

structyou*p;

p=(structyou*)malloc(len);

scanf("%d",&p->name,&p->num,&p->num1,&p-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1