火车票订票系统

目 录

1 课程设计介绍.................. ...................................................................................... 3

1.1 课程设计内容 ................................................................................................................. 3 1.2 课程设计要求 ................................................................................................................. 3 2 概要介绍 ................................................................................................................................... 3

2.1系统总体设计 .................................................................................................................. 3 2.2各子模块设计 .................................................................................................................. 4

2.2.1主函数模块: ...................................................................................................... 4 2.2.2火车信息录入模块: .......................................................................................... 4 2.2.3火车订票模块: .................................................................................................. 5 2.2.4火车票退票模块: .............................................................................................. 5 2.2.5火车车次查询模块: .......................................................................................... 6 2.2.6显示火车信息模块: .......................................................................................... 7

3 详细设计 ................................................................................................................................. 7

3.1主函数模块所涉及的函数分析 .............................................................................. 7 3.2录入火车信息模块所涉及的函数分析 ................................................................ 11 3.3火车票订票模块所涉及的函数分析 .................................................................... 12 3.4退订火车票模块所涉及的函数分析 .................................................................... 14 3.5查询成员模块所涉及的函数分析 ........................................................................ 15 3.6显示成员模块所涉及的函数分析 ........................................................................ 19

4 软件测试 ............................................................................................................................... 20

4.1主程序运行界面 .................................................................................................... 20 4.2功能测试 ................................................................................................................ 21 4.2.1火车信息录入功能模块运行结果截图 ............................................................ 21 4.2.2火车票订票功能模块运行结果截图 ................................................................ 21 4.2.3退票功能模块运行结果截图 ............................................................................ 22 4.2.4查询功能模块运行结果截图 ............................................................................ 23 4.2.5显示功能模块运行结果截图 ............................................................................ 25

5 总结 ......................................................................................................................................... 25

5.1设计中出现的问题以及解决的办法汇总(调试过程记录) ............................ 25 5.2课程设计心得体会 ................................................................................................ 27

所有源代码: ............................................................................................................................... 28 参考文献 ....................................................................................................................................... 37

题目: 火车订票系统的设计

学生姓名: 学 号: 院 (系): 电气与信息工程学院 专 业: 电子信息科学与技术 指导教师: 杨帆

2015 年 06月26日

课程设计报告

1 课程设计介绍

1.1 课程设计内容

软件技术基础课程是非计算机本科专业学习计算机软件基础知识的综合性基础课程。学习本课程,要求学生对软件技术的各个组成部分的基础知识、发展趋势有全面、系统的了解;掌握基本数据结构,达到能熟练运用解决实际问题的程度;掌握操作系统基本原理和类型,了解系统各种管理功能。通过自学了解软件工程的基本概念,软件设计开发的过程和相关技术。

实践环节具体任务:设计、开发一种火车订票系统。通过此系统可以实现如下功能:火车车次信息录入、车次信息查询、火车票订票、火车票退票等。

1.2 课程设计要求

系统应该至少提供以下模块: 火车车次信息录入:

可以录入车次情况(包含车次编号、出发时间、出发站、到达站、到达时间、途经主要大站(需要考虑如何保存这些信息)等信息) 车次信息查询:

可以查询某个车次的情况(如,输入车次号,查询出站、到站时间,票价,票价折扣,确定车次是否满员);可以输入出发站点、到达站点城市,查询火车车次情况; 火车票订票:

可以订票,如果该车次已经无票,可以提供相关可选择车次(同样到达点、途经出发站的其他火车)——订票时需要提供时间、车次、车厢号、座位号、票价、订票人姓名、订票人联系方式、证件号码、订票数量、订单号等,只能比这个多,不能少于这些信息; 火车票退票:

可退票,退票后修改相关数据;客户资料有姓名,证件号,订票数量及车次情况,订单要有编号。 要求:

根据以上功能说明,设计火车票订票系统订票环节涉及的信息,订票信息的存储结构,设计程序完成功能。

2 概要介绍

2.1系统总体设计

首先考虑好选用链表结构存储通讯录。经过对程序设计题目的分析可知,整个程序的

设计实现大致分为六个模块,每一个模块对应一个函数。这些函数分别为:火车信息录入函数,火车车次查询函数,火车票订票函数,火车票退票函数,显示火车信息函数,主函数(包括菜单控制程序函数)。 2.2各子模块设计

2.2.1主函数模块:

实现程序最初运行时的菜单界面,以及对其他模块的调用。同时建立火车信息单链表。其中采用switch函数实现对菜单目录的每个模块的运行。 结构框图:

2.2.2火车信息录入模块:

主要实现程序最初运行时火车信息的录入。用头插入法建立带有头结点的单链表。 结构框图:

2.2.3火车订票模块:

实现的功能是查询到火车信息后,客户购买火车票,输入客户的姓名、手机号、身份证号等基本信息并依次保存到客户链表位置。 结构框图:

2.2.4火车票退票模块:

实现的是查询已订票的客户,然后退票并输出订单号。

结构框图:

2.2.5火车车次查询模块:

实现的是查询目前链表里火车的信息。该模块又细分为3个小模块,分别是按编号查询、按出发站查询、按终点站查询,用if选择语句实现对这三个小模块的运行选择。查询功能用strcmp比较函数实现, Strcmp函数比较原理: 例如:strcmp(str1,str2); 比较的结果由函数值带回。 如果字符串1=字符串2,则函数值为0.

如果字符串1>字符串2,则函数值为一个正整数. 如果字符串1

2.2.6显示火车信息模块:

实现功能为显示链表中所有的火车信息。原理是遍历链表,并输出所有信息。 结构框图:

3 详细设计

3.1主函数模块所涉及的函数分析

源代码:

#include #include

#include//使用getch() #include struct train {

char num[10]; //火车编号 char ltime[10]; //出发时间 char atime[10];//到达时间 char leave[10];//出发站 char arrive[10]; //到达站 char through[10];//途径大站 char price[10];//票价

char shengpiao[10];//剩余票数 struct train *next; };//火车信息单链表 struct man {

char name[10]; //姓名 char phone[11]; //手机号 char number[18];//身份证号

struct man *next; };//客户信息单链表

void main()//主函数,菜单程序 {

train *head=(train*)malloc(sizeof(train)); man *h=(man*)malloc(sizeof(man)); head->next=NULL; h->next=NULL; char choice;

printf("\n----------------------------------------------\n"); printf("----------------------------------------------\n");

printf("---

printf("--- 欢迎进入火车票管理系统 ---\n"); ---\n");

printf("--- ---\n"); printf("----------------------------------------------\n"); printf("----------------------------------------------\n\n"); printf(" \n -------------- 请输入选项 -------------\n"); printf(" \ 1.火车信息录入\n"); printf(" \ 2.火车信息查询\n"); printf(" \ 3.购票\n");

printf(" \ 4.退票\n");

printf(" \ 5.显示火车信息\n"); printf(" \ 6.退出管理系统\n"); printf(" \ 请按键选择\n");

while(true) {

printf("请按键选择操作:\n"); fflush(stdin); //清除缓冲区 choice=getch(); switch(choice) { case '1':

printf("**********************************\n"); printf("* 火 车 信 息 的 录 入 *\n"); printf("**********************************\n"); insert(head);//调用录入函数 break; case '2':

printf("***********************************\n"); printf("* 查 询 火 车 信 息 *\n"); printf("***********************************\n"); find(head);//调用查询函数 break; case '3':

printf("***********************************\n"); printf("* 购 买 火 车 票 *\n"); printf("***********************************\n");

printf("***请查询火车信息***\n");

find(head);//调用查询函数

buy(h);//调用买票函数 break; case '4':

printf("***********************************\n"); printf("* 退 票 *\n"); printf("***********************************\n"); nam(h);//调用查询客户函数 tui(h);//调用退票函数 break; case '5':

printf("************************************\n"); printf("* 显 示 火 车 信 息 *\n"); printf("************************************\n"); show(head); break; case '6': exit(0); default:

printf("输入错误\n"); } } } 流程图:

3.2录入火车信息模块所涉及的函数分析

源代码:

void insert(train* head)//录入火车信息 {

train *p=head;//申请头结点

train *newrecord=(train*)malloc(sizeof(train));//申请存空间 printf("输入火车信息\n"); printf("编号:");

scanf("%s",newrecord->num); printf("出发时间:");

scanf("%s",newrecord->ltime); printf("到达时间:");

scanf("%s",newrecord->atime); printf("出发站:");

scanf("%s",newrecord->leave); printf("到达站:");

scanf("%s",newrecord->arrive); printf("途径大站:");

scanf("%s",newrecord->through); printf("票价:");

scanf("%s",newrecord->price); printf("剩余票数:");

scanf("%s",newrecord->shengpiao);

while(p->next!=NULL) {

if(strcmp(p->num,newrecord->num)==0) {

printf("此编号的列车已存在!\n"); return; } p=p->next; }

p->next=newrecord;

newrecord->next=NULL; printf("添加成功\n"); } 流程图:

3.3火车票订票模块所涉及的函数分析

源代码:

void buy(man* h)//订票函数 {

int i,j,k,a,b,c; a=1;b=1;c=1001;

printf("是否订票(1/0):"); scanf("%d",&i); if(i==1) {

printf("请输入订票数量\n");

scanf("%d",&j);

for(k=0;k

{

man *p=h;//申请头结点

man *newrecord=(man*)malloc(sizeof(man));//申请存空间 printf("输入客户信息\n"); printf("姓名:");

scanf("%s\n",newrecord->name); printf("手机号:");

scanf("%s\n",newrecord->phone); printf("身份证号:");

scanf("%s\n",newrecord->number); printf("==================\n"); printf("购票成功\n"); printf("车厢号:%d\n",&a); printf("座位号:%d\n",&b); printf("订单号:%d\n",&c);

printf("==================\n"); while(p->next!=NULL) {

p=p->next; b=b+1; c=c+1; }

p->next=newrecord; newrecord->next=NULL; } } } 流程图:

3.4退订火车票模块所涉及的函数分析

源代码:

void tui(man* h)//退票函数 { int n,m; m=1000;

printf("是否退票(1/0):"); scanf("%d",&n); if(n==1)

{printf("退票成功\n"); printf("订单号为:%d",&m); m=m+1; } }

void nam(man* h)//查询客户信息函数 {

man *p=h->next; char name[10];

printf("请输入要查询的名字: \n");

p=h->next; scanf("%s",name); while(p!=NULL)

{ {

if(strcmp(p->name,name)==0) printf("客户信息:\n"); printf("姓名:%s\n",p->name); printf("手机号:%s\n",p->phone); printf("身份证号:%s\n",p->number); return; } 流程图:

} }

p=p->next;

3.5查询成员模块所涉及的函数分析

源代码:

void find(train *head)//查询 {

train *p=head->next;

char num[10]; char leave[10];

char arrive[10]; int y;

printf("==================\n"); printf(" 1. 按编号查询 \n"); printf(" 2. 按出发站查询 \n"); printf(" 3. 按到达站查询 \n"); printf("==================\n"); printf(" 请 选 择: "); p=head->next; scanf("%d",&y); if (y==1)

{

printf("请输入要查找的编号:"); scanf("%s",num); while(p!=NULL)

{ {

if(strcmp(p->num,num)==0) printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; }

else if(y==2)

{ printf(" 请输入要查找的出发站:");

} }

p=p->next;

scanf("%s",leave); while(p!=NULL) {

if(strcmp(p->leave,leave)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; }

printf("不存在此出发站的车次\n"); }

else if(y==3) {

printf(" 请输入要查找的到达站:"); scanf("%s",arrive); while(p!=NULL) {

if(strcmp(p->arrive,arrive)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return;

} p=p->next; }

printf("不存在此终点站的车次\n"); } }

void show(train *head)//显示列车所有信息 {

train *p=head->next; while(p!=NULL) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao);; p=p->next; } } 流程图:

3.6显示成员模块所涉及的函数分析

源代码:

void show(train *head)//显示列车所有信息 {

train *p=head->next; while(p!=NULL) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao);;

p=p->next; } } 流程图:

4 软件测试

4.1主程序运行界面

4.2功能测试

4.2.1火车信息录入功能模块运行结果截图

在录入模块中输入火车基本信息,并进行后续的功能测试。

在录入后采用模块功能5输出链表中目前所有的火车信息,以此可以检验是否录入成功。 录入截图:

显示截图:

4.2.2火车票订票功能模块运行结果截图

继续火车信息录入功能后进行订票功能模块运行。首先调用查询模块查询所需求的列车信息,然后订票输入订票人基本信息。

查询截图:

订票客户信息截图:

4.2.3退票功能模块运行结果截图

继订票模块功能测试后,进行退票功能测试。首先查询已经订票客户的信息,然后退票。

退票截图:

4.2.4查询功能模块运行结果截图

查询功能模块分为三部分,以下分别为三个功能的截图。 1.按编号查询:

2.按出发站查询:

3:按终点站查询:

如果没有该列车的截图:

4.2.5显示功能模块运行结果截图

5 总结

5.1设计中出现的问题以及解决的办法汇总(调试过程记录)

没有解决的问题:

设计中有一些问题没有在软件中得以实现,比如老师要求的在火车票订票模块中,如果该车次已经无票,可以提供相关可选择车次,该系统中没有实现这一功能;没有折扣等列车基本信息。

在订票模块中,输入客户信息时,信息错位,如下图:

在输入客户信息时有错,输入名字后本应该输入手机号,但是系统没有弹出手机号而是需要继续输入,这样就导致后边退票时查询的客户信息发生错位,问题原因所在应该是指针的问题。

完成订票后,没有将单链表中火车剩余票数修改,没有将俩个单链表联系起来所以没有实现这一功能。

实现车厢号和座位号时,原计划是车厢号从1开始,每节车厢30个座位,座位满30后车厢号加一,然后座位号从一号重新开始,但是代码一直没有编译通过。 已经解决的问题:

在录入信息输入后,一开始输出的页面是说有信息在一行,后面运行后发现会发生错位现象,后来在每输完一个信息后就换行,输出也同样如此,这样就可以更加直观的浏览到信息,不会错位。而且一开始的输出方法录入信息时必须制定信息长度,比如编号是四

位,手机号是十一位,时间地点等都有输入字数限制,后来发现这一弊端后进行改进,在换成了换行输入输出后,都不用规定长度。但是这样有个缺陷就是数据输错后不容易发现,而且不符合常理,比如手机号只有11位,身份证号应该是18位。

5.2课程设计心得体会

本来一开始做的时通讯录系统,后来又在假期重新做的火车票订票系统。如今系统还不是很完善,就如上文所说,有部分小细节还不能实现,而且还有点问题没有解决。 经过这次课程设计的训练,我的编程能力有了较明显的提高,尤其是对顺序表和链表的认识和使用有了显著的提高。然而,虽然只是编写这么一个小小的程序,却是我意识到自己的不足以及需要提高的地方。程序语句的不熟练使我在编程初期工作效率相当的低下。不断地翻书让我很痛苦,而且浪费了很多时间。

最后,通过这两周的编程,我感觉到了程序的来之不易。平时惯用的免费软件没觉得有什么,但通过本次的编程后我感觉到了编程者的艰辛。这次编程我学到了很多,也懂得了很多。我的C语言又有了新的提高,质的升华。

所有源代码:

#include #include

#include//使用getch() #include struct train {

char num[10]; //火车编号 char ltime[10]; //出发时间 char atime[10];//到达时间 char leave[10];//出发站 char arrive[10]; //到达站 char through[10];//途径大站 char price[10];//票价

char shengpiao[10];//剩余票数 struct train *next; };//火车信息单链表 struct man {

char name[10]; //姓名 char phone[11]; //手机号 char number[18];//身份证号

struct man *next; };//客户信息单链表

void buy(man* h)//订票函数 { int i,j,k,a,b,c; a=1;b=1;c=1001;

printf("是否订票(1/0):"); scanf("%d",&i); if(i==1) {

printf("请输入订票数量\n");

{

scanf("%d",&j);

for(k=0;k

man *p=h;//申请头结点

man *newrecord=(man*)malloc(sizeof(man));//申请存空间 printf("输入客户信息\n"); printf("姓名:");

scanf("%s\n",newrecord->name); printf("手机号:");

scanf("%s\n",newrecord->phone); printf("身份证号:");

scanf("%s\n",newrecord->number); printf("==================\n"); printf("购票成功\n"); printf("车厢号:%d\n",&a); printf("座位号:%d\n",&b); printf("订单号:%d\n",&c);

printf("==================\n"); while(p->next!=NULL) {

p=p->next; b=b+1; c=c+1; }

p->next=newrecord; newrecord->next=NULL; } } }

void tui(man* h)//退票函数 { int n,m; m=1000;

printf("是否退票(1/0):"); scanf("%d",&n);

if(n==1)

{printf("退票成功\n"); printf("订单号为:%d",&m); m=m+1; } }

void nam(man* h)//查询客户信息函数 {

man *p=h->next; char name[10];

printf("请输入要查询的名字: \n"); p=h->next; scanf("%s",name); while(p!=NULL)

{ {

if(strcmp(p->name,name)==0) printf("客户信息:\n"); printf("姓名:%s\n",p->name); printf("手机号:%s\n",p->phone); printf("身份证号:%s\n",p->number); return; }

void insert(train* head)//录入火车信息函数 {

train *p=head;//申请头结点

train *newrecord=(train*)malloc(sizeof(train));//申请存空间 printf("输入火车信息\n"); printf("编号:");

scanf("%s",newrecord->num); printf("出发时间:");

scanf("%s",newrecord->ltime);

} }

p=p->next;

printf("到达时间:");

scanf("%s",newrecord->atime); printf("出发站:");

scanf("%s",newrecord->leave); printf("到达站:");

scanf("%s",newrecord->arrive); printf("途径大站:");

scanf("%s",newrecord->through); printf("票价:");

scanf("%s",newrecord->price); printf("剩余票数:");

scanf("%s",newrecord->shengpiao);

while(p->next!=NULL) {

if(strcmp(p->num,newrecord->num)==0) {

printf("此编号的列车已存在!\n"); return; } p=p->next; }

p->next=newrecord; newrecord->next=NULL; printf("添加成功\n"); }

void find(train *head)//查询函数 {

train *p=head->next; char num[10]; char leave[10];

char arrive[10]; int y;

printf("==================\n"); printf(" 1. 按编号查询 \n");

31

printf(" 2. 按出发站查询 \n"); printf(" 3. 按到达站查询 \n"); printf("==================\n"); printf(" 请 选 择: "); p=head->next; scanf("%d",&y); if (y==1)

{

printf("请输入要查找的编号:"); scanf("%s",num); while(p!=NULL)

{ {

if(strcmp(p->num,num)==0) printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; }

else if(y==2)

{ printf(" 请输入要查找的出发站:"); scanf("%s",leave); while(p!=NULL) {

if(strcmp(p->leave,leave)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime);

32

} }

p=p->next;

printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; }

printf("不存在此出发站的车次\n"); }

else if(y==3) {

printf(" 请输入要查找的到达站:"); scanf("%s",arrive); while(p!=NULL) {

if(strcmp(p->arrive,arrive)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; }

printf("不存在此终点站的车次\n"); } }

33

void show(train *head)//显示列车所有信息 {

train *p=head->next; while(p!=NULL) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao);; p=p->next; } }

void main()//主函数,菜单程序 {

train *head=(train*)malloc(sizeof(train)); man *h=(man*)malloc(sizeof(man)); head->next=NULL; h->next=NULL; char choice;

printf("\n----------------------------------------------\n"); printf("----------------------------------------------\n");

printf("--- printf("--- 欢迎进入火车票管理系统 printf("--- printf("----------------------------------------------\n"); printf("----------------------------------------------\n\n"); printf(" \n -------------- 请输入选项 -------------\n"); printf(" \ 1.火车信息录入\n"); printf(" \ 2.火车信息查询\n");

printf(" \ 3.购票\n");

34

---\n"); ---\n"); ---\n");

printf(" \ 4.退票\n");

printf(" \ 5.显示火车信息\n"); printf(" \ 6.退出管理系统\n"); printf(" \ 请按键选择\n");

while(true) {

printf("请按键选择操作:\n"); fflush(stdin); //清除缓冲区 choice=getch(); switch(choice) { case '1':

printf("**********************************\n"); printf("* 火 车 信 息 的 录 入 *\n"); printf("**********************************\n"); insert(head);//调用录入函数 break; case '2':

printf("***********************************\n"); printf("* 查 询 火 车 信 息 *\n"); printf("***********************************\n"); find(head);//调用查询函数 break; case '3':

printf("***********************************\n"); printf("* 购 买 火 车 票 *\n"); printf("***********************************\n");

printf("***请查询火车信息***\n"); find(head);//调用查询函数

buy(h);//调用买票函数 break; case '4':

printf("***********************************\n"); printf("* 退 票 *\n"); printf("***********************************\n");

35

nam(h);//调用查询客户函数 tui(h);//调用退票函数 break; case '5':

printf("************************************\n"); printf("* 显 示 火 车 信 息 *\n"); printf("************************************\n"); show(head); break; case '6': exit(0); default:

printf("输入错误\n"); } } }

36

参考文献

1.李淑芬,计算机软件技术基础,机械工业出版社,2009 2.谭浩强,C语言程序设计(第二版).清华大学出版社,2002

37

目 录

1 课程设计介绍.................. ...................................................................................... 3

1.1 课程设计内容 ................................................................................................................. 3 1.2 课程设计要求 ................................................................................................................. 3 2 概要介绍 ................................................................................................................................... 3

2.1系统总体设计 .................................................................................................................. 3 2.2各子模块设计 .................................................................................................................. 4

2.2.1主函数模块: ...................................................................................................... 4 2.2.2火车信息录入模块: .......................................................................................... 4 2.2.3火车订票模块: .................................................................................................. 5 2.2.4火车票退票模块: .............................................................................................. 5 2.2.5火车车次查询模块: .......................................................................................... 6 2.2.6显示火车信息模块: .......................................................................................... 7

3 详细设计 ................................................................................................................................. 7

3.1主函数模块所涉及的函数分析 .............................................................................. 7 3.2录入火车信息模块所涉及的函数分析 ................................................................ 11 3.3火车票订票模块所涉及的函数分析 .................................................................... 12 3.4退订火车票模块所涉及的函数分析 .................................................................... 14 3.5查询成员模块所涉及的函数分析 ........................................................................ 15 3.6显示成员模块所涉及的函数分析 ........................................................................ 19

4 软件测试 ............................................................................................................................... 20

4.1主程序运行界面 .................................................................................................... 20 4.2功能测试 ................................................................................................................ 21 4.2.1火车信息录入功能模块运行结果截图 ............................................................ 21 4.2.2火车票订票功能模块运行结果截图 ................................................................ 21 4.2.3退票功能模块运行结果截图 ............................................................................ 22 4.2.4查询功能模块运行结果截图 ............................................................................ 23 4.2.5显示功能模块运行结果截图 ............................................................................ 25

5 总结 ......................................................................................................................................... 25

5.1设计中出现的问题以及解决的办法汇总(调试过程记录) ............................ 25 5.2课程设计心得体会 ................................................................................................ 27

所有源代码: ............................................................................................................................... 28 参考文献 ....................................................................................................................................... 37

题目: 火车订票系统的设计

学生姓名: 学 号: 院 (系): 电气与信息工程学院 专 业: 电子信息科学与技术 指导教师: 杨帆

2015 年 06月26日

课程设计报告

1 课程设计介绍

1.1 课程设计内容

软件技术基础课程是非计算机本科专业学习计算机软件基础知识的综合性基础课程。学习本课程,要求学生对软件技术的各个组成部分的基础知识、发展趋势有全面、系统的了解;掌握基本数据结构,达到能熟练运用解决实际问题的程度;掌握操作系统基本原理和类型,了解系统各种管理功能。通过自学了解软件工程的基本概念,软件设计开发的过程和相关技术。

实践环节具体任务:设计、开发一种火车订票系统。通过此系统可以实现如下功能:火车车次信息录入、车次信息查询、火车票订票、火车票退票等。

1.2 课程设计要求

系统应该至少提供以下模块: 火车车次信息录入:

可以录入车次情况(包含车次编号、出发时间、出发站、到达站、到达时间、途经主要大站(需要考虑如何保存这些信息)等信息) 车次信息查询:

可以查询某个车次的情况(如,输入车次号,查询出站、到站时间,票价,票价折扣,确定车次是否满员);可以输入出发站点、到达站点城市,查询火车车次情况; 火车票订票:

可以订票,如果该车次已经无票,可以提供相关可选择车次(同样到达点、途经出发站的其他火车)——订票时需要提供时间、车次、车厢号、座位号、票价、订票人姓名、订票人联系方式、证件号码、订票数量、订单号等,只能比这个多,不能少于这些信息; 火车票退票:

可退票,退票后修改相关数据;客户资料有姓名,证件号,订票数量及车次情况,订单要有编号。 要求:

根据以上功能说明,设计火车票订票系统订票环节涉及的信息,订票信息的存储结构,设计程序完成功能。

2 概要介绍

2.1系统总体设计

首先考虑好选用链表结构存储通讯录。经过对程序设计题目的分析可知,整个程序的

设计实现大致分为六个模块,每一个模块对应一个函数。这些函数分别为:火车信息录入函数,火车车次查询函数,火车票订票函数,火车票退票函数,显示火车信息函数,主函数(包括菜单控制程序函数)。 2.2各子模块设计

2.2.1主函数模块:

实现程序最初运行时的菜单界面,以及对其他模块的调用。同时建立火车信息单链表。其中采用switch函数实现对菜单目录的每个模块的运行。 结构框图:

2.2.2火车信息录入模块:

主要实现程序最初运行时火车信息的录入。用头插入法建立带有头结点的单链表。 结构框图:

2.2.3火车订票模块:

实现的功能是查询到火车信息后,客户购买火车票,输入客户的姓名、手机号、身份证号等基本信息并依次保存到客户链表位置。 结构框图:

2.2.4火车票退票模块:

实现的是查询已订票的客户,然后退票并输出订单号。

结构框图:

2.2.5火车车次查询模块:

实现的是查询目前链表里火车的信息。该模块又细分为3个小模块,分别是按编号查询、按出发站查询、按终点站查询,用if选择语句实现对这三个小模块的运行选择。查询功能用strcmp比较函数实现, Strcmp函数比较原理: 例如:strcmp(str1,str2); 比较的结果由函数值带回。 如果字符串1=字符串2,则函数值为0.

如果字符串1>字符串2,则函数值为一个正整数. 如果字符串1

2.2.6显示火车信息模块:

实现功能为显示链表中所有的火车信息。原理是遍历链表,并输出所有信息。 结构框图:

3 详细设计

3.1主函数模块所涉及的函数分析

源代码:

#include #include

#include//使用getch() #include struct train {

char num[10]; //火车编号 char ltime[10]; //出发时间 char atime[10];//到达时间 char leave[10];//出发站 char arrive[10]; //到达站 char through[10];//途径大站 char price[10];//票价

char shengpiao[10];//剩余票数 struct train *next; };//火车信息单链表 struct man {

char name[10]; //姓名 char phone[11]; //手机号 char number[18];//身份证号

struct man *next; };//客户信息单链表

void main()//主函数,菜单程序 {

train *head=(train*)malloc(sizeof(train)); man *h=(man*)malloc(sizeof(man)); head->next=NULL; h->next=NULL; char choice;

printf("\n----------------------------------------------\n"); printf("----------------------------------------------\n");

printf("---

printf("--- 欢迎进入火车票管理系统 ---\n"); ---\n");

printf("--- ---\n"); printf("----------------------------------------------\n"); printf("----------------------------------------------\n\n"); printf(" \n -------------- 请输入选项 -------------\n"); printf(" \ 1.火车信息录入\n"); printf(" \ 2.火车信息查询\n"); printf(" \ 3.购票\n");

printf(" \ 4.退票\n");

printf(" \ 5.显示火车信息\n"); printf(" \ 6.退出管理系统\n"); printf(" \ 请按键选择\n");

while(true) {

printf("请按键选择操作:\n"); fflush(stdin); //清除缓冲区 choice=getch(); switch(choice) { case '1':

printf("**********************************\n"); printf("* 火 车 信 息 的 录 入 *\n"); printf("**********************************\n"); insert(head);//调用录入函数 break; case '2':

printf("***********************************\n"); printf("* 查 询 火 车 信 息 *\n"); printf("***********************************\n"); find(head);//调用查询函数 break; case '3':

printf("***********************************\n"); printf("* 购 买 火 车 票 *\n"); printf("***********************************\n");

printf("***请查询火车信息***\n");

find(head);//调用查询函数

buy(h);//调用买票函数 break; case '4':

printf("***********************************\n"); printf("* 退 票 *\n"); printf("***********************************\n"); nam(h);//调用查询客户函数 tui(h);//调用退票函数 break; case '5':

printf("************************************\n"); printf("* 显 示 火 车 信 息 *\n"); printf("************************************\n"); show(head); break; case '6': exit(0); default:

printf("输入错误\n"); } } } 流程图:

3.2录入火车信息模块所涉及的函数分析

源代码:

void insert(train* head)//录入火车信息 {

train *p=head;//申请头结点

train *newrecord=(train*)malloc(sizeof(train));//申请存空间 printf("输入火车信息\n"); printf("编号:");

scanf("%s",newrecord->num); printf("出发时间:");

scanf("%s",newrecord->ltime); printf("到达时间:");

scanf("%s",newrecord->atime); printf("出发站:");

scanf("%s",newrecord->leave); printf("到达站:");

scanf("%s",newrecord->arrive); printf("途径大站:");

scanf("%s",newrecord->through); printf("票价:");

scanf("%s",newrecord->price); printf("剩余票数:");

scanf("%s",newrecord->shengpiao);

while(p->next!=NULL) {

if(strcmp(p->num,newrecord->num)==0) {

printf("此编号的列车已存在!\n"); return; } p=p->next; }

p->next=newrecord;

newrecord->next=NULL; printf("添加成功\n"); } 流程图:

3.3火车票订票模块所涉及的函数分析

源代码:

void buy(man* h)//订票函数 {

int i,j,k,a,b,c; a=1;b=1;c=1001;

printf("是否订票(1/0):"); scanf("%d",&i); if(i==1) {

printf("请输入订票数量\n");

scanf("%d",&j);

for(k=0;k

{

man *p=h;//申请头结点

man *newrecord=(man*)malloc(sizeof(man));//申请存空间 printf("输入客户信息\n"); printf("姓名:");

scanf("%s\n",newrecord->name); printf("手机号:");

scanf("%s\n",newrecord->phone); printf("身份证号:");

scanf("%s\n",newrecord->number); printf("==================\n"); printf("购票成功\n"); printf("车厢号:%d\n",&a); printf("座位号:%d\n",&b); printf("订单号:%d\n",&c);

printf("==================\n"); while(p->next!=NULL) {

p=p->next; b=b+1; c=c+1; }

p->next=newrecord; newrecord->next=NULL; } } } 流程图:

3.4退订火车票模块所涉及的函数分析

源代码:

void tui(man* h)//退票函数 { int n,m; m=1000;

printf("是否退票(1/0):"); scanf("%d",&n); if(n==1)

{printf("退票成功\n"); printf("订单号为:%d",&m); m=m+1; } }

void nam(man* h)//查询客户信息函数 {

man *p=h->next; char name[10];

printf("请输入要查询的名字: \n");

p=h->next; scanf("%s",name); while(p!=NULL)

{ {

if(strcmp(p->name,name)==0) printf("客户信息:\n"); printf("姓名:%s\n",p->name); printf("手机号:%s\n",p->phone); printf("身份证号:%s\n",p->number); return; } 流程图:

} }

p=p->next;

3.5查询成员模块所涉及的函数分析

源代码:

void find(train *head)//查询 {

train *p=head->next;

char num[10]; char leave[10];

char arrive[10]; int y;

printf("==================\n"); printf(" 1. 按编号查询 \n"); printf(" 2. 按出发站查询 \n"); printf(" 3. 按到达站查询 \n"); printf("==================\n"); printf(" 请 选 择: "); p=head->next; scanf("%d",&y); if (y==1)

{

printf("请输入要查找的编号:"); scanf("%s",num); while(p!=NULL)

{ {

if(strcmp(p->num,num)==0) printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; }

else if(y==2)

{ printf(" 请输入要查找的出发站:");

} }

p=p->next;

scanf("%s",leave); while(p!=NULL) {

if(strcmp(p->leave,leave)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; }

printf("不存在此出发站的车次\n"); }

else if(y==3) {

printf(" 请输入要查找的到达站:"); scanf("%s",arrive); while(p!=NULL) {

if(strcmp(p->arrive,arrive)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return;

} p=p->next; }

printf("不存在此终点站的车次\n"); } }

void show(train *head)//显示列车所有信息 {

train *p=head->next; while(p!=NULL) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao);; p=p->next; } } 流程图:

3.6显示成员模块所涉及的函数分析

源代码:

void show(train *head)//显示列车所有信息 {

train *p=head->next; while(p!=NULL) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao);;

p=p->next; } } 流程图:

4 软件测试

4.1主程序运行界面

4.2功能测试

4.2.1火车信息录入功能模块运行结果截图

在录入模块中输入火车基本信息,并进行后续的功能测试。

在录入后采用模块功能5输出链表中目前所有的火车信息,以此可以检验是否录入成功。 录入截图:

显示截图:

4.2.2火车票订票功能模块运行结果截图

继续火车信息录入功能后进行订票功能模块运行。首先调用查询模块查询所需求的列车信息,然后订票输入订票人基本信息。

查询截图:

订票客户信息截图:

4.2.3退票功能模块运行结果截图

继订票模块功能测试后,进行退票功能测试。首先查询已经订票客户的信息,然后退票。

退票截图:

4.2.4查询功能模块运行结果截图

查询功能模块分为三部分,以下分别为三个功能的截图。 1.按编号查询:

2.按出发站查询:

3:按终点站查询:

如果没有该列车的截图:

4.2.5显示功能模块运行结果截图

5 总结

5.1设计中出现的问题以及解决的办法汇总(调试过程记录)

没有解决的问题:

设计中有一些问题没有在软件中得以实现,比如老师要求的在火车票订票模块中,如果该车次已经无票,可以提供相关可选择车次,该系统中没有实现这一功能;没有折扣等列车基本信息。

在订票模块中,输入客户信息时,信息错位,如下图:

在输入客户信息时有错,输入名字后本应该输入手机号,但是系统没有弹出手机号而是需要继续输入,这样就导致后边退票时查询的客户信息发生错位,问题原因所在应该是指针的问题。

完成订票后,没有将单链表中火车剩余票数修改,没有将俩个单链表联系起来所以没有实现这一功能。

实现车厢号和座位号时,原计划是车厢号从1开始,每节车厢30个座位,座位满30后车厢号加一,然后座位号从一号重新开始,但是代码一直没有编译通过。 已经解决的问题:

在录入信息输入后,一开始输出的页面是说有信息在一行,后面运行后发现会发生错位现象,后来在每输完一个信息后就换行,输出也同样如此,这样就可以更加直观的浏览到信息,不会错位。而且一开始的输出方法录入信息时必须制定信息长度,比如编号是四

位,手机号是十一位,时间地点等都有输入字数限制,后来发现这一弊端后进行改进,在换成了换行输入输出后,都不用规定长度。但是这样有个缺陷就是数据输错后不容易发现,而且不符合常理,比如手机号只有11位,身份证号应该是18位。

5.2课程设计心得体会

本来一开始做的时通讯录系统,后来又在假期重新做的火车票订票系统。如今系统还不是很完善,就如上文所说,有部分小细节还不能实现,而且还有点问题没有解决。 经过这次课程设计的训练,我的编程能力有了较明显的提高,尤其是对顺序表和链表的认识和使用有了显著的提高。然而,虽然只是编写这么一个小小的程序,却是我意识到自己的不足以及需要提高的地方。程序语句的不熟练使我在编程初期工作效率相当的低下。不断地翻书让我很痛苦,而且浪费了很多时间。

最后,通过这两周的编程,我感觉到了程序的来之不易。平时惯用的免费软件没觉得有什么,但通过本次的编程后我感觉到了编程者的艰辛。这次编程我学到了很多,也懂得了很多。我的C语言又有了新的提高,质的升华。

所有源代码:

#include #include

#include//使用getch() #include struct train {

char num[10]; //火车编号 char ltime[10]; //出发时间 char atime[10];//到达时间 char leave[10];//出发站 char arrive[10]; //到达站 char through[10];//途径大站 char price[10];//票价

char shengpiao[10];//剩余票数 struct train *next; };//火车信息单链表 struct man {

char name[10]; //姓名 char phone[11]; //手机号 char number[18];//身份证号

struct man *next; };//客户信息单链表

void buy(man* h)//订票函数 { int i,j,k,a,b,c; a=1;b=1;c=1001;

printf("是否订票(1/0):"); scanf("%d",&i); if(i==1) {

printf("请输入订票数量\n");

{

scanf("%d",&j);

for(k=0;k

man *p=h;//申请头结点

man *newrecord=(man*)malloc(sizeof(man));//申请存空间 printf("输入客户信息\n"); printf("姓名:");

scanf("%s\n",newrecord->name); printf("手机号:");

scanf("%s\n",newrecord->phone); printf("身份证号:");

scanf("%s\n",newrecord->number); printf("==================\n"); printf("购票成功\n"); printf("车厢号:%d\n",&a); printf("座位号:%d\n",&b); printf("订单号:%d\n",&c);

printf("==================\n"); while(p->next!=NULL) {

p=p->next; b=b+1; c=c+1; }

p->next=newrecord; newrecord->next=NULL; } } }

void tui(man* h)//退票函数 { int n,m; m=1000;

printf("是否退票(1/0):"); scanf("%d",&n);

if(n==1)

{printf("退票成功\n"); printf("订单号为:%d",&m); m=m+1; } }

void nam(man* h)//查询客户信息函数 {

man *p=h->next; char name[10];

printf("请输入要查询的名字: \n"); p=h->next; scanf("%s",name); while(p!=NULL)

{ {

if(strcmp(p->name,name)==0) printf("客户信息:\n"); printf("姓名:%s\n",p->name); printf("手机号:%s\n",p->phone); printf("身份证号:%s\n",p->number); return; }

void insert(train* head)//录入火车信息函数 {

train *p=head;//申请头结点

train *newrecord=(train*)malloc(sizeof(train));//申请存空间 printf("输入火车信息\n"); printf("编号:");

scanf("%s",newrecord->num); printf("出发时间:");

scanf("%s",newrecord->ltime);

} }

p=p->next;

printf("到达时间:");

scanf("%s",newrecord->atime); printf("出发站:");

scanf("%s",newrecord->leave); printf("到达站:");

scanf("%s",newrecord->arrive); printf("途径大站:");

scanf("%s",newrecord->through); printf("票价:");

scanf("%s",newrecord->price); printf("剩余票数:");

scanf("%s",newrecord->shengpiao);

while(p->next!=NULL) {

if(strcmp(p->num,newrecord->num)==0) {

printf("此编号的列车已存在!\n"); return; } p=p->next; }

p->next=newrecord; newrecord->next=NULL; printf("添加成功\n"); }

void find(train *head)//查询函数 {

train *p=head->next; char num[10]; char leave[10];

char arrive[10]; int y;

printf("==================\n"); printf(" 1. 按编号查询 \n");

31

printf(" 2. 按出发站查询 \n"); printf(" 3. 按到达站查询 \n"); printf("==================\n"); printf(" 请 选 择: "); p=head->next; scanf("%d",&y); if (y==1)

{

printf("请输入要查找的编号:"); scanf("%s",num); while(p!=NULL)

{ {

if(strcmp(p->num,num)==0) printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; }

else if(y==2)

{ printf(" 请输入要查找的出发站:"); scanf("%s",leave); while(p!=NULL) {

if(strcmp(p->leave,leave)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime);

32

} }

p=p->next;

printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; }

printf("不存在此出发站的车次\n"); }

else if(y==3) {

printf(" 请输入要查找的到达站:"); scanf("%s",arrive); while(p!=NULL) {

if(strcmp(p->arrive,arrive)==0) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; }

printf("不存在此终点站的车次\n"); } }

33

void show(train *head)//显示列车所有信息 {

train *p=head->next; while(p!=NULL) {

printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao);; p=p->next; } }

void main()//主函数,菜单程序 {

train *head=(train*)malloc(sizeof(train)); man *h=(man*)malloc(sizeof(man)); head->next=NULL; h->next=NULL; char choice;

printf("\n----------------------------------------------\n"); printf("----------------------------------------------\n");

printf("--- printf("--- 欢迎进入火车票管理系统 printf("--- printf("----------------------------------------------\n"); printf("----------------------------------------------\n\n"); printf(" \n -------------- 请输入选项 -------------\n"); printf(" \ 1.火车信息录入\n"); printf(" \ 2.火车信息查询\n");

printf(" \ 3.购票\n");

34

---\n"); ---\n"); ---\n");

printf(" \ 4.退票\n");

printf(" \ 5.显示火车信息\n"); printf(" \ 6.退出管理系统\n"); printf(" \ 请按键选择\n");

while(true) {

printf("请按键选择操作:\n"); fflush(stdin); //清除缓冲区 choice=getch(); switch(choice) { case '1':

printf("**********************************\n"); printf("* 火 车 信 息 的 录 入 *\n"); printf("**********************************\n"); insert(head);//调用录入函数 break; case '2':

printf("***********************************\n"); printf("* 查 询 火 车 信 息 *\n"); printf("***********************************\n"); find(head);//调用查询函数 break; case '3':

printf("***********************************\n"); printf("* 购 买 火 车 票 *\n"); printf("***********************************\n");

printf("***请查询火车信息***\n"); find(head);//调用查询函数

buy(h);//调用买票函数 break; case '4':

printf("***********************************\n"); printf("* 退 票 *\n"); printf("***********************************\n");

35

nam(h);//调用查询客户函数 tui(h);//调用退票函数 break; case '5':

printf("************************************\n"); printf("* 显 示 火 车 信 息 *\n"); printf("************************************\n"); show(head); break; case '6': exit(0); default:

printf("输入错误\n"); } } }

36

参考文献

1.李淑芬,计算机软件技术基础,机械工业出版社,2009 2.谭浩强,C语言程序设计(第二版).清华大学出版社,2002

37


相关文章

  • 2011年春运广铁集团电话订票流程
  • 2011年春运广铁集团电话订票流程 订票热线:96020088或95105105 电话订票须知 广铁公安提醒您:买票时必须使用有效的身份证,一证一票.进站时,工作人员对您的身份证件和车票上的个人信息核对一致后方可进站上车. 一. 电话订票分 ...查看


  • 火车票网上订票系统
  • 数据库系统 火车票网上订票系统 实 验 报 告 姓名:邱宁 学号:13071041 同组者:佟思淼 张啸宇 目录 1.需求分析 ........................................................ ...查看


  • 上海铁路局电话订票系统服务指南
  • 上海铁路局电话订票系统服务指南 [上海铁路局 2010-01-24] 电话订票须知 1.为方便广大旅客购票,上海铁路局自2009年12月8日起在管辖范围内(涉及安徽省.江苏省.上海市.浙江省)开通电话订购火车票业务,实行"通订通取 ...查看


  • 火车票电话预订流程
  • 火车票电话预订流程 目前是提前12天电话订票,一般是第二天晚上12点之前取票. 首先拨通订票电话:95105105,然后根据语音提示:1为车票预订及取消:2为列车时刻查询:3为票价查询:4为余票查询:6为区号查询:8为一线通卡:9为订票投诉 ...查看


  • 上海铁路局电话订票服务指南
  • 上海铁路局电话订票服务指南 [上海铁路局 2011-12-19] 上海铁路局电话订票须知 上海铁路局订票电话统一为:95105105.在上海市.安徽省.江苏省.浙江省境内直接拨打本地订票电话,即可接入电话订票系统,只收取本地普通话费:电话订 ...查看


  • 北京铁路局电话订票和网上订票流程/指南
  • 一.北京铁路局管辖铁路及主要车站 主要管辖北京市.天津市.河北省和山东德州.山西阳泉部分铁路. 主要车站:北京站.北京西站.北京南站.北京北站.石家庄站.天津站.天津西站.唐山站.邯郸站.保定站.邢台站.丰台站.张家口站.秦皇岛站.阳泉站. ...查看


  • 坐火车大攻略
  •  1.购买春运火车票哪种购票方式好? 电话订票:优点,容易买到票:缺点,流程较繁琐. 网上购票:优点,买票最方便:缺点,不能挑座位. 实名制购票:优点,打击黄牛党:缺点,不便代买票.  2.电话订票可以使用哪些身份证件? 电话订票时,需 ...查看


  • 2017年春运火车票购票攻略大全
  • 2017春运火车票购票攻略 众所周知,春运是火车票购票的高峰期,火车票可谓一票难求,所以春运期间要购买的火车票的旅客都是提前好几个月就预订,抢购火车票有什么攻略呢? 2017年春节火车票购买时间: 2017年春节时间:2017年1月28日农 ...查看


  • 北京铁路局网络电话订票须知
  • 北京铁路局电话订票和网上订票流程/指南 一.北京铁路局管辖铁路及主要车站 主要管辖北京市.天津市.河北省和山东德州.山西阳泉部分铁路. 主要车站:北京站.北京西站.北京南站.北京北站.石家庄站.天津站.天津西站.唐山站.邯郸站.保定站.邢台 ...查看


热门内容