火车订票系统课程设计Word文档格式.docx
- 文档编号:4847959
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:40
- 大小:251.41KB
火车订票系统课程设计Word文档格式.docx
《火车订票系统课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《火车订票系统课程设计Word文档格式.docx(40页珍藏版)》请在冰点文库上搜索。
火车站为方便学生返程,需要开发一个学生火车票预定系统。
这个预定火车票系统的学生信息,包括姓名、性别、身份证号码、起始时间、目的地,输入火车票预定系统的客户端程序,系统通过查询铁路系统内的车次数据服务器后,为学生安排车次,印出取票通知。
学生在凭取票通知和帐单交款后取票,系统校对无误后即印出火车票给学生。
如果有特殊原因,学生可以持有效证件去火车站退票。
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
电话号
sex
性别
school
Varchar
学校
表4-1学生信息系统的结构
ttrainnumber
车次编号
stratplace
起始站点
destination
目的地
startime
time
起始时间
表4-2车次信息表系统的结构
Seatnumber
座位号
trainnumber
soledtime
售出时间
isbooked
boolean
订票状态
表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();
case‘3’:
inquire();
case‘4’:
cancel();
case
‘5’:
you()
;
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);
/*输入一共所需的车票信息总数*/
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;
/*指向纵向链表的头结点*/
"
num,&
num2,&
time);
/*输入横向链表的数据*/
=n,i++)
s2->
next=s2;
s2=s1;
s1=(structticket)*malloc(len);
/*建立纵向链表*/
scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1->
name,&
s1->
time,&
money,&
seat,&
mark);
}
/*输入纵向链表的数据*/
next=head1;
/*纵向链表为循环链表*/
}
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:
”);
f);
/*输入需要的车次*/
printf(“pleaseenterthestation:
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->
/*横向链表移针*/
printf(“yourtickethasalreadybooked!
printf("
o->
num,o->
num2,o->
/*输出横向链表的数据*/
printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->
s->
/*输出纵向链表的数据*/
本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为已定车票.如果mark已经为1则输出错误信息.
3.inquire()函数:
While循环是否已到空
是否是需要的车次
While循环是否已到头指针
是否是需要的车站名
输出所需的信息
移动指针
voidinquire()
{
本函数主要提供查询功能.用户输入需要查询的车次和需要到车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本车次的所有信息.
4.Cancel()函数:
使mark的值为0
②程序代码;
void
cancel()
number=t)
name=h)
mark=0;
printf(“yourtickethasalreadycancel!
本函数主要提供退票功能.用户输入需要退票的车次和需要到车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标识是其为0.最后输出所有关于本车次的所有信息.
5.You()函数:
voidyou()
structyou*head;
structyou*p;
p=(structyou*)malloc(len);
p->
num1,&
p-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火车 订票 系统 课程设计