第一篇:铁路客运窗口售票乘意险
1.1 窗口售保
1.1.1 售票售保 1)申请车票
如果选择的车次中有不能购买保险的车次,整批车票不能购买保险,如果除该车次车票外,其他车票都要购买保险,请分开取票。
一批购买乘意险的份数不能超过20份,一批可售保险份数由参数控制。
询问旅客是否购买保险,如果购买,按快捷键“Ctrl+I”或菜单“售票->售保”切换到售保界面。
2)输入被保险人信息
窗口不办理免费携带儿童赠保业务;若旅客为儿童购保,需提供乘车儿童的有效身份证件或复印件,售票员须录入儿童本人的证件号和姓名。
逐一输入被保险人信息(按F7快捷键可读取身份信息)。孩票均视为购买未成年人保险,二代证根据被保险人证件号选择保险类型,其他证件类型由操作员人工确认后,切换保险类型。
计算旅客是否年满18周岁,以购保的日期为准。被保险人在购保黑名单中时,不能购买保险。
被保险人证件信息要同时满足车票的购买规则(608规则、行程冲突等)。
3)输入投保人信息
如果购买保险为成年人险,投保人默认为被保险人。已经输入投保人的情况下,修改被保险人,投保人信息不随着改变,若要修改,请按”F6”快捷键。
如果购买保险为未成年人险,投保人要求是未成年人的合法监护人。
投保人信息输入时,选择“设为默认投保人”,输入的证件信息将成为所有未指定投保人的保单的投保人。
4)收取保费
窗口收取保费,全部采用现金方式。
如果票款以现金方式支付,操作员按照“应收”项一起收取票款、其他和保费,按照“余款”找零;如果票款以非现金方式支付,操作员按照“现金应收”项收取保费和其他,按照“现金余款”找零。
按快捷键“Ctrl+X”可切换到收款,输入收款金额。
5)旅客确认购保
保险的发售,必须由旅客最后完成确认后,才能进行发售。信息输入完成后,按“Alt+S”确认购保。
提示框中选择“是”,系统向确认器发送确认信息,旅客确认后,继续发售保险。
如果旅客认为购保信息有误,可选择确认器的“取消”按钮,系统返回售保界面,操作员可修改已输入证件信息。
6)完成购保
旅客购保确认完成后,完成保险的发售。
7)返回售票界面
购保完成后,返回售票界面,被保险人信息带回到售票界面,备注中有“保”字样。
8)制票、打印保险凭条
直接制票,同时打印保险凭条,有保险发票的窗口,操作员要同时把保险发票交给旅客。保险是否记录为领取由窗口参数控制。
打印保单凭条时,每份保险打印一张凭条,成年人险和未成年人险保单凭条保费和赔偿金额等信息不同,投保人与被保险人不同时,投保人和被保险人信息分开打印。凭条样式如下:
不论凭条打印成功与否,均不影响车票和保险的发售,凭条的可以在保单查询的界面补打。
1.1.2 单独加保
按快捷键“Ctrl+M”可切换到单独加保界面。
1)还原车票信息
电子票需要取票后加保,不能直接加保。
通过扫描车票二维码或者输入21位票号,还原车票信息。孩票、非实名制车票可修改、输入被保险人的身份信息,其他不能修改。所有车票均可修改投保人信息。
已购买过保险的车票不能加保。购票证件类型为“二代身份证”、'港澳通行证'、'台湾通行证'、'护照'、'外国人居留证'的车票,可加保,其他证件类型不能加保;乘车人属于限制购保的人员时,不能加保。
车次属于限购保险的车次时,不能购买保险。一次最多可添加20张车票同时购买保险。
通票购保,以第一段旅程的发到站加保,保险的区间为全程;中转车票不能加保。
2)完成购保
旅客确认购保后,收取保费,完成保险的发售,打印保险凭条,操作员将凭条、保险发票一同交付旅客。
1.2 保单批改
1)改签车票
按照现有车票改签流程,完成车票的改签。
2)批改保单
车票改签完成后,如果车票带有保险,系统将自动对保险进行批改,完成后,提示操作员保险已随车票进行批改,由操作员告知旅客。
1.3 废保
1.3.1 废票废保 1)正常废票
2)作废保单
废票后,如果车票带有保险,系统将自动对保险进行作废,完成后,提示操作员保险已随车票进行作废。
1.3.2 单独废保
按快捷键“Alt+L+I”可切换到单独废保界面。
1)查询保单信息
查询本结账日、售处、窗口、班次、操作员售出的保单。
2)废保
选中要作废的保险,按“Ctrl+C”进行废保。再次进行废保确认,选择“是”,继续废保。
废保完成后,系统提示废保成功,如果已经收取旅客保费,需将保费退还旅客。
保单状态变为“已废保”。
1.4 补领发票和凭条打印 按快捷键“Alt+U+I”可切换到乘意险处理界面。
1)查询保单信息
按证件、票面信息、保单号三种方式查询保单信息。
2)补领发票
选中要补领发票的保单,按“Ctrl+A”补领发票。已领取、已收回发票的保单不能再领取发票。未支付、已废保、已退保的保单不能领取发票。电子车票不能直接领取发票。
发票领取成功后,修改保单订单的发票领取状态,记录发票领取窗口、操作员等信息,系统提示操作员交付旅客相应金额的发票。
3)凭条打印
选中要补领发票的保单,按“Ctrl+P”打印凭条。未支付、已退保、已废保的保单不能补打购保凭条。
1.5 权限控制
1)操作员赋权
管理监控操作员定义中,为操作员添加“乘意险发售”的权限。
2)窗口赋权
管理监控窗口参数定义中,为窗口添加乘意险的发售权限。
段名:SALE 参数名:INSURE_MODULE 参数串:00 参数值:第一位为’0’表示无售保功能,第二位为’0’表示无单独加保功能,为’1’则表示有此功能。默认为‘00’。
3)可售保险份数
管理监控窗口参数定义中,为窗口设置一次可发售乘意险车票的张数。
段名:SALE 参数名:SALE_INSURE_NUM 参数串:0 参数值:窗口一次可发售乘意险车票的张数(小于20张)。默认为0。4)设置窗口是否可领取发票
段名:SALE 参数名:INSURE_INVOICE_FLAG 参数串:0 参数值:0-窗口无乘意险发票,1-有。默认值为0。
第二篇:铁路客运售票模拟系统
学生实习报告
课程名称_ 数据结构与数据处理应用训练 题目名称 学生学院 专业班级
学 号
学生姓名
指导教师
2014 年 2 月
日
[单击此处添加课程设计题目]
XXX
计算分院 计算1103
【摘要】
模拟铁路客运售票系统,采用链表结构储存数据,有订票、退票、查询、修改、读取文件等功能模块,整体系统运行为一个无限循环,根据输入指令进行不同操作,主要知识有结构的定义,链表的操作,循环的应用。
【关键词】
铁路客运售票模拟系统,查询车次,车票预订,办理退票 内容与要求
铁路客运售票模拟系统 【问题描述】
铁路客运售票系统的业务活动包括:查询车次、车票预订和办理退票。试设计一个铁路客运售票模拟系统,使上述业务可以借助计算机来完成。【具体要求】
铁路客运售票处的计算机系统可以为客户提供下列各项服务:
1. 查询车次:根据旅客提供的出发站、到达站、出发日输出下列信息:
车次号、出发站、到达站、出发时间、到达时间、各类车票的余票额(包括软卧、硬卧、软座、硬座、无座)等。还可根据客户要求,输出某车次从起点站到终点站的各站点的名称及出发时间和到达时间。
2.承办订票业务:根据客户提出的要求(日期、车次号、座位类别、订票数额)查询该车次该座位类别票额情况,若尚有余额,则为客户办理订票手续,并输出座位号(座位号信息的输出可作为选做部分);若无票或余票额少于订票额,则需要重新询问客户要求。若客户需要,可预约登记排队等候。
3.承办退票业务:根据客户提供的情况(日期、车次号、座位类别、退票数额),为客户办理退票手续,然后查询该车次该座位类别是否有人预约登记,首先询问排在第一的客户,若退票数能满足他的要求,则为他办理订票手续,否则依次询问其他排队预约的客户。为简化问题,可以规定同一个座位只能售出一次票,即不考虑同一个座位分不同路段出售多次。还可规定只能查询或预订未来3天之内的车票,即每个车次只需分别保存3个班次的售票情况。【实现提示】
每个车次应包含的信息有:车次号、出发日、起点站名、各中途站名、终点站名、各站点的到达时间与出发时间、各类座位车票定额、各类座位余票额、各座位是否已售出信息(选做内容,可用一张表记录每个座位是否已售出)、各类座位已订票的客户名单(包括姓名、出发站、到达站、订票额、座位号(选做))和各类座位预约登记的客户名单(包括姓名、出发站、到达站、所需票额)。这最后两项显然可以分别用线性表和队列实现(每一类别的座位需有各自的线性表和队列)。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构;由于预约人数无法预料,队列也应以链表作存储结构。整个系统需汇总各车次的情况记录在一张线性表上,由于车次基本不变,可采用顺序存储结构,并按车次有序,因为每个车次需保存未来3天的售票情况,可考虑每个车次的每一班次是这张表上的一个记录,也可以每个车次是一个记录,里面分别包含3趟班次的售票情况。每个记录需定义成一个结构类型。【测试数据】
自己设计,报告上要求写出多批数据测试结果。【实现说明】
每个同学可以根据自己的实际情况对该铁路客运售票模拟系统的功能进行增减。有能力的同学在完成上述功能的基础上,可以充分发挥自己的想象力,增加该系统的功能和其它服务项目,如可以按照实用性来完善上述模拟系统,考虑输出座位号信息、同一个座位允许分不同路段出售多次等;能力较弱的同学则可以简化上述系统,如不考虑预约登记排队等候车票、不考虑各种座位类别(即每个车次只有一种座位)、还可以不考虑中途站点(即每个车次只设置起点站与终点站,中间不停)等。总体设计
开始判断操作指令继续下一轮指令1.订票先根据出发站和到达站查询列车班次,然后订票2.退票根据姓名,时间,车次,座位类别进行退票3.查询输出所有路线信息与乘客信息5.读取文件读取存档文件中的路线信息和乘客信息1.增加路线输入增加路线信息4.修改路线判断操作指令2.删除路线输入删除路线日期与车次6.退出退出程序3.修改密码3 详细设计
路线信息
typedef struct trainline //路线 { char date[9];//日期
char train_num[8];//车次号 struct station *sta;//途经站
char begin_time[6];//出发时间
char end_time[6];//到达时间
int RW;//软卧余量
int YW;//硬卧余量
int RZ;//软座余量
int YZ;//硬座余量
int WZ;//无座余量 struct trainline *next;//下一个节点 }trainline;
停靠站点信息
typedef struct station//停靠站 { char stop[9];//停靠站名
char stop_time;//停靠时间
struct station *next;//下一个节点 }station;
乘客订票信息
typedef struct customer //乘客 { char name[9];//顾客名
char date[9];//日期
char train_num[9];//车次号 int seat_level;//座位类别
int seat_num;//座位数量
struct customer *next;//下一个节点 }customer;
找到路线链表中的末尾节点
status increase_train(trainline *l,char *date,char *train_num,station *stat,char *begin_time,char *end_time,int RW,int YW,int RZ,int YZ,int WZ)//增加路线 将需要插入的路线信息插入到链表中指定节点之后
status insert_trainline(trainline **p,char *date,char *train_num,station *stat,char *begin_time,char *end_time,int RW,int YW,int RZ,int YZ,int WZ)//trainline链表插入操作
将需要插入的乘客订票信息插入到链表中
status insert_customer(customer **p,char *name,char *date,char *train_num,int seat,int seat_num)//customer链表插入操作
删除某条路线,首先搜索到该路线,然后在链表中跳过该节点
status delete_trainline(trainline *h,char *date,char *train_num)//删除路线
删除某条乘客订票记录,首先搜索到该记录,然后在链表中跳过该节点
status delete_customer(customer *h,char *date,char *train_num)//删除顾客 修改路线座位余量,首先搜索到该路线,然后删除对应的座位类别的余量
trainline *modefy_trainline(trainline *l,char *date,char *train_num,int seat_level,int num)//修改trainline链表中的数据 退票,首先搜索到该订票记录,然后确定退票数量,如果大于订票数量,则减去退票数量;如果等于退票数量,则删除此订票记录;如果小于,则输出数量不足,退票失败。如果退票成功,则路线中相应座位余量增加。
status delete_cus(customer *h,trainline *l,char *name,char *date,char *train_num,int level,int num)//乘客退票
以下两个函数是为了方便操作所赋予的初始化数据
status creat_trainline(trainline **l)//创建trainline单链表 status creat_customer(customer **l)////创建customer单链表
订票查询,根据提供站点,查找路线,判断同意路线中是否有这两个站点,并且顺序正确 void book_search(trainline *l,char *begin_place,char *end_place)//订票查询函数 订票,首先找到该车次,然后判断余量是否够,如果够,则订票;反之,订票失败。订票成功,则增加乘客订票记录,兵减少相应车次的座位余量。
status book(trainline *l,char *date,char *train_num,customer *c,char *name,int seat_level,int num)//订票函数
根据路线链表和乘客链表逐个输出信息
status print_trainline(trainline *l)//打印路线信息 status print_customer(customer *l)//打印乘客信息
根据路线链表和乘客链表,逐个在 C盘 trainline.dat 和 customer.dat 文件中输出信息 status save_trainline(trainline *l)//保存trainline.dat status save_customer(customer *l)//保存乘客信息 customer.dat
从 C盘 trainline.dat 和 customer.dat 文件中读取记录,并用订票和增加路线函数逐条添加到系统中
status load_trainline(trainline *l)//导入路线信息,必须为5个站 status load_customer(customer *l)//导入乘客信息 程序测试 查询路线、乘客信息
status print_trainline(trainline *l)//打印路线信息 status print_customer(customer *l)//打印顾客信息 订票 首先查询 出发站-终点站
void book_search(trainline *l,char *begin_place,char *end_place)//订票查询函数
然后根据查询结果购买自己需要车次 status book(trainline *l,char *date,char *train_num,customer *c,char *name,int seat_level,int num)//订票函数
订票后的查询结果 退票(可以全部退完,也可以退一部分)status delete_cus(customer *h,trainline *l,char *name,char *date,char *train_num,int level,int num)//乘客退票
退票后查询结果 修改路线 默认密码12345678 代码:pass[9]=“12345678” 增加路线 status increase_train(trainline *l,char *date,char *train_num, station *stat,char *begin_time,char *end_time, int RW,int YW,int RZ,int YZ,int WZ)//增加路线
注意时间“:”为英文字符,输入中文字符会报错
增加路线后查询结果 删除路线
删除路线后查询结果 读入文件
status load_trainline(trainline *l)//导入路线信息,必须为5个站 status load_customer(customer *l)//导入乘客信息
隐藏密码函数
status inputpassword(char cc[9])//隐藏密码为*号的函数
系统存档 status save_trainline(trainline *l)//保存trainline.dat status save_customer(customer *l)//保存顾客信息 customer.dat
每完成一轮操作 系统自动存档一次,如果需要继续上一回的存档,请打开后直接选5读入存档总结
[单击此处添加正文]
参考文献
1.徐孝凯.数据结构实用教程.清华大学出版社.2006.9
附录
Slove.h #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW-2 #define PR printf #define RUANW 1 #define YINGW 2 #define RUANZ 3 #define YINGZ 4 #define WUZ 5
typedef int status;typedef struct trainline //路线 { char date[9];//日期
char train_num[8];//车次号 //char begin_place[9];//出发地
//char end_place[9];//目的地
struct station *sta;//途经站
char begin_time[6];//出发时间
char end_time[6];//到达时间 // int total;//座位总数 // int left;int RW;//软卧余量 int YW;//硬卧余量
int RZ;//软座余量
int YZ;//硬座余量
int WZ;//无座余量
struct trainline *next;//下一个节点 }trainline;
typedef struct station//停靠站 { char stop[9];//停靠站名
char stop_time;//停靠时间
struct station *next;//下一个节点 }station;
typedef struct customer //乘客 { char name[9];//顾客名
char date[9];//日期
char train_num[9];//车次号
int seat_level;//座位类别
int seat_num;//座位数量
struct customer *next;//下一个节点 }customer;
station *init_station()//初始化途经站 { station *l;l=(station*)malloc(sizeof(station));
if(l==NULL)exit(0);
l->next=NULL;return l;}
trainline *init_trainline()//初始化路线链表 { trainline *l;
l=(trainline*)malloc(sizeof(trainline));
if(l==NULL)exit(0);
l->next=NULL;return l;}
customer * init_customer()//初始化乘客链表 { customer *l;l=(customer*)malloc(sizeof(customer));
if(l==NULL)exit(0);
l->next=NULL;return l;}
status insert_trainline(trainline **p,char *date,char *train_num,//char *begin_place,char *end_place,station *stat,char *begin_time,char *end_time,int RW,int YW,int RZ,int YZ,int WZ)//trainline链表插入操作 { trainline *q;q=(trainline*)malloc(sizeof(trainline));
strcpy(q->date , date);strcpy(q->train_num , train_num);//strcpy(q->begin_place , begin_place);//strcpy(q->end_place , end_place);q->sta=stat;strcpy(q->begin_time , begin_time);strcpy(q->end_time , end_time);q->RW =RW;q->YW =YW;q->RZ =RZ;q->YZ =YZ;q->WZ =WZ;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;//PR(“insert %d ,%dis succssed!n”,e,bl);return OK;}
status insert_customer(customer **p,char *name,char *date,char *train_num,int seat,int seat_num)//customer链表插入操作 { customer *q;q=(customer*)malloc(sizeof(customer));
/* { PR(“内存分配失败n”);return OVERFLOW;}*/ strcpy(q->name , name);strcpy(q->date , date);strcpy(q->train_num , train_num);q->seat_level =seat;q->seat_num =seat_num;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;//PR(“insert %d ,%dis succssed!n”,e,bl);return OK;}
status delete_trainline(trainline *h,char *date,char *train_num)//删除路线 { trainline *p,*pr;pr=h;p=pr->next;while(p!=NULL){
if(strcmp(date,p->date)==0 && strcmp(train_num,p->train_num)==0)
{
pr->next =p->next;
PR(“删除 %s 车次n”,p->date);
return OK;
}
pr=pr->next;
p=pr->next;} PR(“无此车次,无法删除!n”);return ERROR;}
status delete_customer(customer *h,char *date,char *train_num)//删除顾客 { customer *p,*pr;pr=h;p=pr->next;while(p!=NULL){
if(strcmp(date,p->date)==0 && strcmp(train_num,p->train_num)==0)
{
pr->next =p->next;
}
pr=pr->next;
p=pr->next;} return OK;}
trainline *modefy_trainline(trainline *l,char *date,char *train_num,int seat_level,int num)//修改trainline链表中的数据 { trainline *p;p=l->next;for(;p!=NULL;p=p->next){
if(strcmp(date,p->date)==0 && strcmp(train_num,p->train_num)==0)
{
if(seat_level == RUANW)p->RW += num;
else if(seat_level == YINGW)p->YW += num;
else if(seat_level == RUANZ)p->RZ += num;
else if(seat_level == YINGZ)p->YZ += num;
else if(seat_level == WUZ)p->WZ += num;
// PR(“modefy %sn”,p->line_num);
return l;
} } PR(“没有这个路线,无法完成修改任务!n”);return 0;}
status delete_cus(customer *h,trainline *l,char *name,char *date,char *train_num,int level,int num)//乘客退票 { customer *p,*pr;int seat_num;// qr=h;pr=h;p=pr->next;// PR(“开始删除n”);while(p!=NULL){
if(strcmp(name,p->name)==0 && strcmp(date,p->date strcmp(train_num,p->train_num)==0 && level==p->seat_level)
{
seat_num=p->seat_num;
l=modefy_trainline(l,date,train_num,level,num);
if(num == seat_num){
pr->next =p->next;
PR(“乘客 %s 退票成功!n”,p->name);
}
else if(num < seat_num){
p->seat_num-= num;
PR(“乘客 %s 退票成功!n”,p->name);
}
else
PR(“数量不足,退票失败!n”,p->name);
return OK;
}
pr=pr->next;
p=pr->next;} PR(“无此顾客,无法退票!n”);return ERROR;}
status creat_trainline(trainline **l)//创建trainline单链表 { trainline *p=*l;int i=0;char *date[3]={“20140224”,“20140226”,“20140225”};char *train_num[3]={“T01”,“D02”,“G03”};char place[3][5][9]={“北京”,“杭州”,“上海”,“南昌”,“广州”,“广州”,“上海”,“金山”,“北京”,“敦煌”,“嘉兴”,“北京”,“上海”,“山西”,“深圳”};station *stat[3];for(i=0;i<3;i++){
stat[i]=init_station();
for(int j=0;j<5;j++){
station *st;
st=(station*)malloc(sizeof(station));
strcpy(st->stop,place[i][j]);
//可以在这里加停靠时间
st->next=stat[i];
stat[i]=st;)==0 &&
}
//stat[i]->next=NULL;} char *begin_time[3]={“12:02”,“22:42”,“05:09”};char *end_time[3]={“17:15”,“06:07”,“10:54”};int RW[3]={100,100,100};int YW[3]={100,100,100};int RZ[3]={100,100,100};int YZ[3]={100,100,100};int WZ[3]={100,100,100};for(i=0;i<3;i++)
insert_trainline(&p,date[i],train_num[i],stat[i],//begin_place[i],end_place[i],begin_time[i],end_time[i],RW[i],YW[i],RZ[i],YZ[i],WZ[i]);
return OK;}
status creat_customer(customer **l)////创建customer单链表 { customer *p=*l;int i=0;char *name[3]={“yangj”,“yunhl”,“fangs”};char *date[3]={“20140224”,“20140225”,“20140226”};char *train_num[3]={“T01”,“G03”,“D02”};int seat_level[3]={RUANW,YINGZ,WUZ};int seat_num[3]={2,3,4};for(i=0;i<3;i++)
insert_customer(&p,name[i],date[i],train_num[i],seat_level[i],seat_num[i]);
return OK;}
status increase_train(trainline *l,char *date,char *train_num,station *stat,char *begin_time,char *end_time,int RW,int YW,int RZ,int YZ,int WZ)//增加路线 { trainline *p=l->next;for(;p->next!=NULL;p=p->next){} insert_trainline(&p,date,train_num,stat,//begin_place,end_place,begin_time,end_time,RW,YW,RZ,YZ,WZ);PR(“增加车次 %s %s 成功!n”,date,train_num);return OK;}
status book(trainline *l,char *date,char *train_num,customer *c,char *name,int seat_level,int num)//订票函数 { trainline *p=l;customer *q=c->next;p=l->next;for(;q->next!=NULL;q=q->next){} // PR(“%sn”,q->name);for(;p!=NULL;p=p->next){
if(strcmp(date,p->date)==0)
{
if(seat_level == RUANW && p->RW >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->RW-=num;
return OK;
}
else if(seat_level == YINGW && p->YW >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->YW-=num;
return OK;
}
else if(seat_level == RUANZ && p->RZ >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->RZ-=num;
return OK;
}
else if(seat_level == YINGZ && p->YZ >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->YZ-=num;
return OK;
}
else if(seat_level == WUZ && p->WZ >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->WZ-=num;
return OK;
}
else PR(“对不起,余量不足!n”);
return 0;
} } PR(“对不起,没有这个路线号!n”);return ERROR;}
void book_search(trainline *l,char *begin_place,char *end_place)//订票查询函数 { trainline *p=l;//customer *q=c->next;p=l->next;//for(;q->next!=NULL;q=q->next){} // PR(“%sn”,q->name);for(;p!=NULL;p=p->next){
station *st=p->sta;
int stop_begin=0,stop_end=0,flag=1;
for(;st->next!=NULL;st=st->next){
if(strcmp(begin_place,st->stop)==0)
stop_begin=flag++;
if(strcmp(end_place,st->stop)==0)
stop_end=flag++;
if(stop_begin==1 && stop_end==2){
PR(“%15s%5s%12s%c%5s%10d%5d%5d%5d%5dn”,p->date ,p->train_num ,//p->begin_place ,'-',p->end_place ,p->begin_time ,'-',p->end_time ,p->RW ,p->YW,p->RZ ,p->YZ ,p->WZ);
station *st=p->sta;
PR(“途经: ”);
for(;st->next!=NULL;st=st->next){
PR(“%s ”,st->stop);
}
PR(“n”);
break;
}
} } }
status print_trainline(trainline *l)//打印路线信息 { trainline *p=l->next;for(;p!=NULL;p=p->next){
PR(“%15s%5s%12s%c%5s%10d%5d%5d%5d%5dn”,p->date ,p->train_num ,//p->begin_place ,'-',p->end_place ,p->begin_time ,'-',p->end_time ,p->RW ,p->YW,p->RZ ,p->YZ ,p->WZ);
station *st=p->sta;
PR(“途经: ”);
for(;st->next!=NULL;st=st->next){
PR(“%s ”,st->stop);
}
PR(“n”);}
return OK;}
status print_customer(customer *l)//打印顾客信息 { customer *p=l->next;for(;p!=NULL;p=p->next)
PR(“%5s %9s %5s %6d %6dn”,p->name ,p->date ,p->train_num ,p->seat_level ,p->seat_num);
return OK;}
status save_trainline(trainline *l)//保存trainline.dat { FILE *fp_trainline;trainline *p=l->next;char filename[]=“c: rainline.dat”;if((fp_trainline=fopen(filename,“wb”))==NULL){
printf(“can not open file to write:%sn”,filename);
return ERROR;} for(;p!=NULL;p=p->next){
fprintf(fp_trainline,“%s,%s,%s,%s,%d,%d,%d,%d,%d,”,p->date ,p->train_num ,//p->begin_place ,p->end_place ,p->begin_time ,p->end_time ,p->RW ,p->YW ,p->RZ ,p->YZ ,p->WZ);
station *st=p->sta;
for(;st->next!=NULL;st=st->next){
fprintf(fp_trainline,“%s,”,st->stop);
}
fprintf(fp_trainline,“#”);} fclose(fp_trainline);return OK;}
status save_customer(customer *l)//保存顾客信息 customer.dat { FILE *fp_customer;customer *p=l->next;char filename[]=“c:customer.dat”;if((fp_customer=fopen(filename,“wb”))==NULL){
printf(“can not open file to write:%sn”,filename);
return ERROR;} for(;p!=NULL;p=p->next){
// PR(“%s,%s,%dn”,p->name ,p->line_num ,p->seat_num);
fprintf(fp_customer,“%s,%s,%s,%d,%d,#”,p->name ,p->date ,p->train_num ,p->seat_level ,p->seat_num);} fclose(fp_customer);return OK;}
int changStrInt(char *ch)//把字符串转化为整型 { int a=1,b=0,c=0,i;for(i=strlen(ch)-1;i>=0;i--){
if(ch[i]<58&&ch[i]>47)
{
b=a*(ch[i]-48);
a=a*10;
c=c+b;
}
else
{
PR(“%c 不合法,无法将此字符串转化为整形!n”,ch[i]);
return 0;
}
// printf(“the c is %dn”,c);} return c;}
status load_trainline(trainline *l)//导入路线信息,必须为5个站 { FILE *fp_trainline;int flag=0,i=0;char ch;char date[9];//日期
char train_num[9];//车次号
char begin_time[6],end_time[6];//时间
char RW_str[5],YW_str[5],RZ_str[5],YZ_str[5],WZ_str[5];//座位余量字符串
int RW,YW,RZ,YZ,WZ;//座位余量 char place[9];//站名
station *sta=init_station();//途经站
// trainline *p=l;char filename[]=“c: rainline.dat”;if((fp_trainline=fopen(filename,“rb”))==NULL){
printf(“can not open file to load:%sn”,filename);
return ERROR;} while(!feof(fp_trainline)){
ch=fgetc(fp_trainline);
if(ch!='#')
{
if(flag==0&&ch!=','){ date[i]=ch;i++;} else if(flag==1&&ch!=','){ train_num[i]=ch;i++;} else if(flag==2&&ch!=','){ begin_time[i]=ch;i++;} else if(flag==3&&ch!=','){ end_time[i]=ch;i++;} else if(flag==4&&ch!=','){ RW_str[i]=ch;i++;} else if(flag==5&&ch!=','){ YW_str[i]=ch;i++;} else if(flag==6&&ch!=','){ RZ_str[i]=ch;i++;} else if(flag==7&&ch!=','){ YZ_str[i]=ch;i++;} else if(flag==8&&ch!=','){ WZ_str[i]=ch;i++;
} else if(flag>=9&&flag<=13&&ch!=','){
place[i]=ch;
i++;} else if(ch==','){
if(flag==0)date[i]=0;
else if(flag==1)train_num[i]=0;
else if(flag==2)begin_time[i]=0;
else if(flag==3)end_time[i]=0;
else if(flag==4)RW_str[i]=0;
else if(flag==5)YW_str[i]=0;
else if(flag==6)RZ_str[i]=0;
else if(flag==7)YZ_str[i]=0;
else if(flag==8)WZ_str[i]=0;
else if(flag>=9&&flag<=13){
place[i]=0;
station *st;
st=(station*)malloc(sizeof(station));
strcpy(st->stop,place);
//可以在这里加停靠时间
st->next=sta;
sta=st;
}
flag++;
i=0;} else {
PR(“错误n”);
return ERROR;} } else { flag=0;i=0;RW=changStrInt(RW_str);YW=changStrInt(YW_str);RZ=changStrInt(RZ_str);YZ=changStrInt(YZ_str);WZ=changStrInt(WZ_str);
PR(“%15s%5s%6s%c%5s%5d%5d%5d%5d%5dn”,date ,train_num ,begin_time ,'-',end_time ,RW ,YW,RZ ,YZ ,WZ);
PR(“途经: ”);
station *st=sta;
for(;st->next!=NULL;st=st->next){
PR(“%s ”,st->stop);
}
PR(“n”);
//increase_train(l,date,train_num,sta,//
begin_time,end_time,RW,YW,RZ,YZ,WZ);
insert_trainline(&l,date,train_num,sta,begin_time,end_time,RW,YW,RZ,YZ,WZ);
station *ss=init_station();
sta=ss;
} } fclose(fp_trainline);return OK;}
status load_customer(customer *l)//导入乘客信息 { FILE *fp_customer;int flag=0,i=0;char ch;char name[9];char date[9];//日期
char train_num[9];//车次号
char seat_level_str[5],num_str[5];int seat_level,num;//座位类别,数量 // customer *p=*l;char filename[50]=“c:customer.dat”;if((fp_customer=fopen(filename,“rb”))==NULL){
printf(“can not open file to load:%sn”,filename);
return ERROR;}
while(!feof(fp_customer)){ ch=fgetc(fp_customer);//printf(“%cn”,ch);if(ch!='#'){
if(flag==0&&ch!=',')
{
name[i]=ch;
i++;
}
else if(flag==1&&ch!=',')
{
date[i]=ch;
i++;
}
else if(flag==2&&ch!=',')
{
train_num[i]=ch;
i++;
}
else if(flag==3&&ch!=',')
{
seat_level_str[i]=ch;
i++;
}
else if(flag==4&&ch!=',')
{
num_str[i]=ch;
i++;
}
else if(ch==',')
{
if(flag==0)name[i]=0;
else if(flag==1)date[i]=0;
else if(flag==2)train_num[i]=0;
else if(flag==3)seat_level_str[i]=0;
else if(flag==4)num_str[i]=0;
flag++;
i=0;
}
else
{
PR(“错误n”);
return ERROR;
}
}
else
{
flag=0;
seat_level=changStrInt(seat_level_str);
num=changStrInt(num_str);
PR(“%10s %10s %5d %5dn”,name ,date ,train_num ,seat_level ,num);
insert_customer(&l,name,date,train_num,seat_level,num);
// p=p->next;
} } fclose(fp_customer);return OK;}
status inputpassword(char cc[9])//隐藏密码为*号的函数 { char c;int i;for(i=0;c=getch();i++){
if(c==13)break;/*13='n'*/
else
{
cc[i]=c;
printf(“*”);
} } cc[i]=' ';//printf(“n”);//printf(“%s”,cc);//getchar();return strlen(cc);}
railway.cpp #include
void main(){
char choice,choice2,name[9],date[9],password[9],train_num[9], place[9],begin_place[9],end_place[9],begin_time[6],end_time[6];
char pass[9]=“12345678”,re_pass_1[9],re_pass_2[9];//系统初始密码 int t=1,tt=1,RW,YW,RZ,YZ,WZ,seat_level,num;trainline *train=init_trainline();customer *cus=init_customer();
station *stat=init_station();creat_trainline(&train);creat_customer(&cus);while(t==1){
PR(“n”);
PR(“*----------------------------*n”);PR(“*--铁路客运售票模拟系统------*n”);PR(“* 订票-------1 *n”);PR(“* 退票-------2 *n”);PR(“* 查询-------3 *n”);PR(“* 修改路线---4 *n”);PR(“* 读入文件---5 *n”);PR(“* 退出-------6 *n”);PR(“*----------------------------*n”);PR(“请选择: ”);choice = getch();PR(“%cn”,choice);
if(choice=='1'){ PR(“请输入你的出发站: ”);scanf(“%s”,begin_place);
PR(“请输入你的到达站: ”);scanf(“%s”,end_place);
PR(“------------------n”);book_search(train,begin_place,end_place);
PR(“------------------n”);
} PR(“请输入出发日期: ”);scanf(“%s”,date);PR(“请输入车次号: ”);scanf(“%s”,train_num);PR(“请输入你的姓名: ”);scanf(“%s”,name);PR(“请输入座位类别: ”);scanf(“%d”,&seat_level);PR(“请输入购买数量: ”);scanf(“%d”,&num);book(train,date,train_num,cus,name,seat_level,num);
else if(choice=='2'){
PR(“n请输入你的姓名: ”);scanf(“%s”,name);PR(“n请输入车票日期: ”);scanf(“%s”,date);PR(“n请输入车次号: ”);scanf(“%s”,train_num);PR(“n请输入座位类别(1-5): ”);scanf(“%d”,&seat_level);PR(“n请输入退票数量: ”);scanf(“%d”,&num);
} delete_cus(cus,train,name,date,train_num,seat_level,num);
else if(choice=='3'){ PR(“n
日期
车次
出发时间-到达时间
软卧 硬卧 软座
硬座 无座n”);//输出路线信息
choice2=getch();PR(“%cn”,choice2);if(choice2=='1'){
PR(“请输入你要增加的日期: ”);scanf(“%s”,date);PR(“请输入车次号: ”);
if(strcmp(password,pass)==0){
PR(“n*------------------------------*n”);PR(“*-------路线信息修改:----------*n”);PR(“* 增加路线号-----'1' *n”);PR(“* 删除路线号-----'2' *n”);PR(“* 修改密码-------'3' *n”);PR(“*------------------------------*n”);PR(“请选择: ”);
}
else if(choice=='4'){
tt=1;
PR(“请输入密码: ”);//scanf(“%s”,password);inputpassword(password);PR(“n”);
print_trainline(train);
PR(“------------------n”);PR(“ 姓名
日期
车次
座位
数量n”);PR(“n”);
print_customer(cus);
PR(“------------------n”);
} scanf(“%s”,train_num);
PR(“请输入所有途经站(逆序,5个站点,并以#结束):n ”);while(scanf(“%s”,place)&& strcmp(place,“#”)!=0){
} //scanf(“%s”,begin_place);//PR(“请输入目的地: ”);//scanf(“%s”,end_place);PR(“请输入出发时间: ”);scanf(“%s”,begin_time);PR(“请输入到达时间: ”);scanf(“%s”,end_time);PR(“请输入软卧总数: ”);scanf(“%d”,&RW);PR(“请输入硬卧总数: ”);scanf(“%d”,&YW);PR(“请输入软座总数: ”);scanf(“%d”,&RZ);PR(“请输入硬座总数: ”);scanf(“%d”,&YZ);PR(“请输入无座总数: ”);scanf(“%d”,&WZ);
increase_train(train,date,train_num,stat,//begin_place,end_place,begin_time,end_time,RW,YW,RZ,YZ,WZ);
station *st;
st=(station*)malloc(sizeof(station));strcpy(st->stop,place);//可以在这里加停靠时间 st->next=stat;stat=st;else if(choice2=='2'){ PR(“请输入你要删除的车次日期: ”);
} scanf(“%s”,date);
PR(“请输入你要删除的车次号: ”);scanf(“%s”,train_num);
delete_trainline(train,date,train_num);delete_customer(cus,date,train_num);
else if(choice2=='3'){
} else {
} PR(“你的输入有误n”);PR(“注意:密码不能超过8位!n”);PR(“请输入新密码:”);scanf(“%s”,re_pass_1);PR(“请再输入一次: ”);scanf(“%s”,re_pass_2);
if(strcmp(re_pass_1,re_pass_2)==0){
} else { }
PR(“你两次输入的密码不一致!n”);strcpy(pass,re_pass_1);PR(“密码修改成功!请记住.n”);
}//end if else {
} PR(“对不起!你输入的密码不正确!n”);
}//end else if 修改
else if(choice=='5'){
}
}
} load_trainline(train);//导入路线信息,必须为5个站 load_customer(cus);//导入乘客信息
else if(choice=='6'){
} else { } PR(“你的输入有误n”);PR(“再见!”);t=0;exit(0);save_trainline(train);//保存票务文件 save_customer(cus);//保存乘客文件
getch();
第三篇:铁路售票系统
铁路售票系统应用软件需求分析报告
前言:
(1)需求分析报告的编写目的
本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,同时提出了本铁路售票系统的软件开发过程,便于程序员与客户之间的交流、协作,并作为工作成果的原始依据,同时也表明了本软件的共性,以期能够获得更大范围的应用。(2)产品背景明细 软件名称:铁路售票系统 软件开发者:(3)缩写及缩略语
铁路售票应用系统软件:基本元素为构成铁路售票及相关行为所必须的各种部分。
需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足合同、标准,规范或其它正式规定文档所需具有的条件或权能。
需求分析:包括提炼,分析和仔细审查已收集到的需求,以确保所有的风险承担者都明其含义并找出其中的错误,遗憾或其它不足的地方。
模块的独立性:是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。本工程描述:
(1)软件开发的目标:
完善目前铁路售票系统,使之能跟上时代的发展。同时通过实践来提高自己的动手能力。(2)应用范围:
理论上能够实现于铁路部门的售票系统,其目的在于在原有的系统基础使得铁路售票实名化,以期实现完善日常生活中铁路售票的各种缺陷。(3)硬件配置要求:
硬件外部设备需奔腾133以上的pc机,内存需16兆以上。(4)子集说明:
软件分别有五个模块组成,每个模块各有不同的功能。但都能完成查询和存储功能,各模块的数据都存放在数据库中。数据的调用和连接都有程序来完成。(5)软件功能描述:
外部功能:实现可视化窗口,查找及存储 内部功能:同步,过滤,定位,识别 软件功能描述图: 赔偿信息 车次信息 列车明细 日志维护 个人信息 主界面 同步 过滤 数据库 定位
(6)软件操作人员的要求:
软件要求操作人员具有初步的相关知识(7)在其他方面的要求:
由于本系统为即时软件,对数据的同步要求较高,建议配置网络时使用可靠性较高的相关网络硬件设施。软件结构化描述(1)数据流图: 乘客 数据库更新 列车明细 个人信息 日志 售票员
(2)数据结构的描述:
车票=日期+价格+出发站+目的站+售票站+座号+车次+性质+编号 日期=年+月+日+时+分 价格=“1”..“9999” 出发站=1{汉字}6 目的站=1{汉字}6 售票站=1{汉字}6 座号=车厢号+座位号 车次=“1”..“9999”
编号=“000000001”..“999999999”
性质=“1”..“6” 注:“1”表示空调硬座特快,“2”表示空调软座普快等 设计要求:
(1)所调用的数据库的显示: 输入内容:指定的库文件名。加工内容:调用指定的数据库。输出内容:所指定的数据库的库结构。(2)关于编辑框的说明: 输入内容:编辑框名称。加工内容:生成编辑框。输出内容:显示所生成的编辑框(3)指定记录说明:
输入内容:指定的项名及库文件名。加工内容:将指定的数据库里指定的记录置为当前记录。(4)初始化说明: 输入内容:所要求的尺寸
要求处理内容:确定指定对象在窗体中的开始尺寸的大小 输出内容:确定开始尺寸的四个参数。(5)最大化说明: 输入内容:指定的参数值。
加工内容:确定指定对象在窗体中的最大尺寸。输出内容:确定指定对象最大尺寸的四个参数。(6)最小化说明 原理同上
(7)查词编辑框说明(编辑框控制)
功能:主要是定义的一个编辑框,供用户输入一个词名,为程序生成查找条件做准备。输入内容:在查词编辑框中输入要查找的词名。加工内容:用输入的词名以供程序生成查找条。输出内容:地址、长度。
(8)内容编辑框说明(编辑框控制)
功能:主要是定义的一个编辑框,将程序查找到的用户所输入词的相关内容显示出来,为用户提供帮助信息。
输入内容:数据库中查找到的记录的项的内容的地址、长度。加工内容:置控制标题或值。
输出内容:显示用户所输入词的相关内容(如该词的格式、用法……)。(9)定义过滤说明
作用:定义用户输入的词名与内容库中的词名字段中的词名进行串比较,即定义词名字段为过滤字段。输入内容:用户输入的词名。
加工内容:把代码写入过滤条件指针之中。输出内容:查找条件。(10)执行过滤说明
作用:将定义的过滤作为内容库的过滤条件。输入内容:查找条件。
加工内容:与查找编辑框中的内容比较。输出内容:库过滤显。(11)同步说明: I:令牌持有标记
P:与数据库同步更新数据 O:更新数据库 环境要求:
(1)数据录入精度需求
在进行向数据库文件提取数据时,要求数据记录定位准确,在往数据库文件数组中添加数时,要求输入数准确。
(2)软件自身时间特性需求
程序响应时间:在人的感觉和视觉事件范围内;
信息交换时间:要求在程序调用前调用后都与数据库保持同步更新,网络信息狡猾施加应该小于程序调用的时间
(3)数据管理能力需求
要求数据库具有很好的更新能力,由于本产品是实验性软件,故对磁盘和内存容量没有很高的要求,但是数据库应该能够对并发事件,脏数据具有较强的识别处理能力。接口要求:
(1)硬件接口:无特别要求
(2)网络硬件接口要求:现实中要求具有高速以太网组网一实现联网销售,但是在理论实验验证软件本身的目的来看,无需网络通讯接口。(3)软件接口要求:无 软件属性(1)可用性 本软件也可以通过单步跟踪的操作进行检查处理。
(2)安全性
由于软件运行数据放在数据库中,所以参数不容易被错改、破坏,万一参数受到破坏也不会影响源程序。(3)可维护性
本软件利用数据库进行编程,系统结构由程序基本确定,大量的参数及文本内容全部放于数据库中。修改、更新数据只要在数据库进行修改添加,而不需要对系统结构进行修改,这样系统维护性、升级都十分方便。(4)兼容性
由于尚未测试,故无法对兼容性进行评析。支持信息(1)软件支持:
本软件开发是使用Delphi编写。
(2)设备支持:
推荐配置:WindowsXP,256内存,VGA显示器
第四篇:铁路实名制售票规定
铁路实名制售票规定
为有效遏制倒卖火车票违法犯罪活动,缓解春运期间旅客购票难的问题,保障广大旅客顺利出行,铁道部决定2012年春运期间实行实名制售票。旅客必须凭有效身份证件购票、乘车。为了您的顺利、平安出行,请您在购票、乘车过程中自觉遵守以下规定:
1、购买车票请带好乘车者的有效身份证件,进站乘车请带好本人的有效身份证件。有效证件包括:居民身份证、临时身份证、军官证、武警警官证、士兵证、军队学员证、军队文职干部证、军队离退休干部证和军队职工证以及护照、港澳同胞同乡证、港澳居民来往内地通行证、中华人民共和国来往港澳通行证、台湾居民来往大陆通行证、大陆居民往来台湾通行证、外国人居留证、外国人出入境证、外交官证、领事馆证、海员证。1.5米以16岁以下未成年人请带户口簿或者户口所在地公安机关出具的身份证明或学生证。
2、如果您购票后丢失有效证件,请在进站前到铁路公安机关核对身份信息或办理乘车身份确认手续。核对身份信息或办理身份确认手续请出具户籍证明或学校、部队、使领馆、其他有效证件的发证部门等部门出具的证明信。证明信内容必须包括旅客姓名、性别、出生年月、籍贯、有效身份证件号码等信息,与车票票面记载的旅客身份信息一致,并加盖证明单位公章。持居民身份证购买车票的旅客,在车站公安制证口通过查询人口信息系统确认身份。
3、请通过车站售票厅、代售点、铁路临时售票点等正规渠道购票,不得从票贩子手中购买车票。否则,人、证、票不一致,势必影响您进站乘车,由此耽误旅行和造成损失概由本人负责。
4、请不要委托不相识的人代买车票,不要轻信所谓的“老乡”帮买车票或带您进站,不要将车票和证件交与陌生人。
5、不得使用伪造的有关身份证件、身份证明或者冒用他人证件购买车票,否则,公安机关将依法严肃处理。
6、如果您的行程发生需要退票时,请本人持车票和有效身份证到车站退票窗口退票,不得将车票转卖他人,更不能高价倒卖,否则,公安机关将依法追究责任。
第五篇:铁路售票模式分析
铁路客运售票模式分析
一、铁路客运售票模式的概念
铁路客票销售模式是面对铁路客票销售的社会需求与过程控制,综合运用产品、价格、渠道、促销、人员、有形展示和服务过程等营销策略,为铁路旅客提供便捷、安全、可靠的信息咨询、预订和发售客票等服务,实现铁路客运服务产品交易的一项社会和管理过程。
二、国内铁路客运售票模式现状
现行铁路客运售票模式以客票预订和发售系统为依托,主要通过车站和代办点窗口售票完成客票交易。2006年全路开始推广售票系统5.0版本,系统总体运行良好。目前,系统拥有1个部客票管理中心、24个地区客票中心,1000多个车站实现了全国联网售票,2000多个车站实现了计算机售票,全路约有12000个计算机售票窗口投入运行。全路日均售票量250万张/日,高峰期达420万张/日。客票系统的实施,在提高售票效率,方便旅客购票方面发挥了重要作用,产生了良好的社会效益和经济效益。
铁路客票销售模式多元化,售票渠道包括以下几种:
(1)车站
售票厅是车站客运站房的重要组成部分,铁路客票销售的主渠道还是火车站,因为窗口数量较多,以及人们受传统的观念影响,尤其在春运、黄金周等旺季人们总相信在车站买票相对会容易一点。各大站在春节等繁忙时段会开动全部的窗口,并会在车站附近建立临时售票点。2004年春运,上海铁路部门甚至投资200多万元,首次以租借的形式,在普陀区体育馆开设了有30个售票窗口的铁路春运火车票大卖场。车站还经常在站台、出站口等处设置售票点方便换乘的旅客。车站售票厅除一般窗口外。还设有退票窗口、中转窗1:3,以及担负各种优先职能的优先窗口。优先窗口的对象有记者、检察机关办案人员、国家安全机关工作人员、全国人大代表、全国政协委员、有突出贡献的专家、两院院士、现役军人等。
(2)客票代售点
随着计算机联网售票系统的不断完善,铁路客票代售点也逐渐多了起来。客票代售点一般设在旅游景点、繁华商业街、居民密集的社区内,铁路局客运处负责客票代办点的布局规划与审批。客票代售点的代理条件是:必须是企业法人,营业范围有工商部门注册登记的铁路客票代理业,注册资金或固定资产不少于30万元,流动资金不少于5万元。客票代售点与铁路签订客票销售代理合同,缴纳代理押金。客票代售点按照接入点的不同,可以分为两种类型。一种与车站联网,由车站具体管理;另一种直接利用企业自身网络同地区中心直接联网。车站负责代售点售票人员的培训、计算机售票系统的维护及业务指导,代售点每天向车站上缴客票收入,并遵守铁路相关的规章制度。代售点的收入来自于每张票5元的服务费,以济南为例,经营成功的车票代售点,每天平均可售出200张车票,即可得1000元的毛收入,最差的平均每天只有10张左右。随着代售点数目的增加,车站客票主机的端口日益成为稀缺资源,铁路部门对代售点的管理要求也随之提高。
(3)电话订票
作为计算机售票系统的延伸,许多车站都推出了电话订票的业务。其中有车站自己推出的免费电话订票业务,也有将此业务外包出去,还有与通信平台合作建立的。但这些系统的定位都是延伸服务,或者是为宣传而推出的服务项目,因此,投入比较小,力量配备都比较弱,中继线数量一般在5-10条之间,同通信部门的客服平台不可同日而语。越是到了繁忙季节,旅客越依赖电话订票,此时的电话订票系统满负荷运转也不能满足旅客的需求,更多的旅客听到的将是忙音,不但解决不了多大问题,而且增加了旅客的不满。也有部分大站,像是北京、上海曾经推出网上订票,基于同样的原因,效果都不令人满意。电话订票同时没有解决旅客的取票问题。
(4)绿色通道
为了同公路竞争短途客流,铁路局还要求部分车站设置了绿色通道,方便旅客在来不及买票时直接进站上车。车站从自身利益出发,大多数会在绿色通道设有售票窗口,待旅客购票后进站上车。尽管如此,因减少了进站环节,绿色通道大受旅客欢迎,以济南一北京的T36次列车为例,从绿色通道进站的旅客占到总数的85%以上,其他始发的短途客车同样如此。
(5)列车补票
作为地面售票的补充,列车上以补票为主,主要是办理无票旅客的补票和车票席别的变更(更通俗的说法就是补卧铺)。列车补票作为一个重要的补充,不仅可以挽回车票收入的流失,而且可以提高各席别车票的利用率。列车移动补票机可以通过地面管理机实现与客票销售和预订系统的数据交换,从而实现财务核算、统计分析等功能。
(6)团体售票
每个车站尤其是大站,都有团体旅客售票窗口或者是合同单位售票窗,有的车站两种窗口都有。这就是在目前以车站为主要销售渠道的情况下,团体销售模式的表现形式。这里之所以叫团体销售模式,而不是批发方式,主要的原因在于:一是虽然铁道部出台了《团体旅客购票优惠办法》,但是一般情况下,旅客得不到优惠;二是在于不管买了多少票,支付形式单一,那就是现结。
(7)互联网售票
互联网售票就是通过网络工具——计算机,在网上购买和销售火车票。购票时,应当准确提供乘车人的有效身份证件信息。互联网售票是以互联网为核心网上订票与按需配送为基础服务的一种模式。流程为:选定车次、票价——填写送票信息——选择支付/送货方式——确认订单 ——在线支付。
三、售票模式多元化存在的问题
自2011年,中国铁路总公司在全路实施售票模式改革,全面实行实名制售票,推出互联网、电话订票、自助售(取)票等售票模式,为旅客购票提供了便利的条件。为此,铁路客运站如何适应售票组织模式变化带来的挑战、实现售票服务质量的提升十分重要。
(一)、售票组织存在的问题
随着12306网站上线运行及电话订票业务的开通,旅客购票主渠道由单一的车站(代售处)购票方式逐步向自助网络购票、电话订票等方式转变,旅客购票手段不断得到丰富,使售票厅购票旅客高度集中,特别是节假日期间排队购票的现象得到缓解。
但是,旅客购票方式的多元化也给客运站售票组织带来一些问题: ①在售票组织上,运输繁忙时期退票客流高度集中,退票窗口压力较大。春运期间部分旅客为挑选合适车票而通过互联网、电话等不同手段反复购票,由于网络购票旅客花费的时间、体力、精力较其他购票方式少,加之由于退票费用相对较低(仅为原票价格的5%),出现购票窗口不排队、退票窗口排长队的现象,给售票组织带来一定的压力。
②在运能运力上,由于旅客屯积车票现象严重,导致运能浪费。春运、暑运等运输繁忙时期,旅客通过某一种方式买到临客车票后,会继续通过其他渠道寻找预订图定旅客列车车票,直至找到符合自己期望的车票后再退临客车票。因此,产生旅客购买车票时显示车票已经售完、而列车席位大量虚糜的现象,对运能造成浪费。
(二)、售票服务重心转变
2013年由于互联网、电话订票所占比例不断增加,售票服务工作也在逐渐实现3个转变。
(1)由以窗口售票为主向以自助取票为主的转变。随着网络、电话、手机、支付宝等订票方式的不断推出,电子化购票已经逐渐取代窗口排队购票,客运站取票将面临越来越大的压力。
(2)由以客运站售票为主向以代售处售票为主的转变。以北京站所辖417家铁路车票代售处为例,代售处与车站窗口发售车票的比例为1:0.62,收人比例为l:0.37。因此,代售处车票发售量无论是在数量上还是收入上均高于车站窗口。同时,由于互联网购票和电话订票的开通,旅客通过互联网和电话订票越来越方便,导致到车站窗口排队买票的人越来越少,而去代售处取票的人越来越多。
(3)由以普通售票为主向以改签、退票为主的转变。目前,虽然12306网站支持车票改签和退票业务,但是必须在距开车2 h以前办理,而多数旅客由于难以赶上乘车时间无法在网上办理退票或改签,同时由于通退通改政策引起的退票、改签业务量增加,使车站改签和退票逐步转变成为主要工作之一。
四、售票模式策略
提高铁路客运站服务水平,满足不同旅客的购票需求,应在客运站购票服务体系设置上有所突破。
(一)、改变售票组织模式
(1)合理调配窗口设置。为了满足广大旅客的购票需求,在售票组织上采取分流分区售票、增开售票窗口、24 h不问断售票等措施,让旅客及时买到票。
(2)全面实行售取票分开。在取票客流所占比例逐渐增大时,需要在售票组织上实行取售票分开。开设独立的自助售取票专区,设有自助售票机和自助取票机,加快旅客取换票速度。同时,车站安排服务热情、业务精通的工作人员在售取票专区内提供引导服务,在帮助旅客取票、提高自助设备利用率的同时,也提高了自助设备的旅客认知度。
(3)科学规范引导揭示。为进一步提高自助设备使用率,车站在引导揭示方面需要实行合理化、规范性设置。①在售票厅明显位置利用电子显示屏、引导揭示等指明白助售取票设备位置,方便旅客寻找;②在自助售取票机旁张贴注意事项,防止旅客因排错队耽误取票;③在自助售取票机屏幕上张贴自助设备操作流程,以简捷易懂的图示引导旅客进行操作。
(二)、加强购票特色服务
(1)开设务工团体窗口。为方便务工人员购票,北京站售票厅在每年春运期间开设务工人员专口,办理企业务工团体取票和5人以上零散团体的订票、取票和售票业务。
(2)设置学生购票专区。为满足学生购票需求,在寒、暑假期间设立学生购票专区,根据客流情况变化及时调整发售学生票窗口数量,区别一般旅客,方便学生购票换票。
(3)设置“爱心售票口”。在售票厅设立“爱心售票窗口”和问询服务台,发现老幼病残孕等重点旅客购票时,由爱心引导员主动引导到“爱心售票口”,为重点旅客提供购票或帮扶进站服务。
(三)、严格代售处管理
代售处是铁路面向社会的窗口,也是未来铁路客票营销宣传的主战场。目前互联网购票、电话订票等多种售票渠道并行的趋势,使代售处逐渐取代车站成为旅客购票、取票的首选。在这种情况下,车站需要在管理体制、监察机制、教育方式上想办法,完善代售处监察机制,强化代售处人员培训,为代售处创造有利的生存空间。
五、结束语
随着市场变化规律和科学技术水平的提升,今后,售票模式、渠道还将会不断改变。因此,应充分利用现有资源、条件、规则,在为旅客提供更为高效、安全、舒适的客运服务的同时,还应站在旅客的角度,通过换位思考,了解和掌握旅客购票最满意和最不满意的方式,真正使旅客实现安全出行、方便出行和温馨出行的目标。