第一篇:火车票务管理系统
///////////////////////达内课后训练项目-火车票务管理系统///////////////////////// //
// //
姓名: X X
学号:1005010124
//
//
//
//
(1)火车时刻信息录入:包括车次、日期、起点、终点、开车时间、到达时间、票价// //
数据存入数据文件hchsk.dat或hchsk.txt中。
// //
每次打开软件自动读入文件中的信息
// //
(2)火车时刻信息查询。
// //
按照车次查询
// //
按终点查询
// //
按起点查询
// //
按终点和日期查询
// //
(3)统计
// //
按终点统计每日的车次数
// //
按起点统计每日的车次数
// // 系统主界面应有以下功能选项
// //
录入火车时刻信息
// //
浏览火车时刻信息
// //
查询火车时刻信息
// //
删除火车时刻信息
// //
统计火车车次
// //
退出
// /////////////////////////////////////////////////////////////////////////////////
#include
#define N 30
void menu();
//函数菜单 void save();
//保存文件信息
void open();
//运行软件的时候 自动打开以前录入的信息,并读入链表 void display();
//浏览输入的消息记录 void SearchTrain();
//根据火车车次查询 void Search();
//选择查询方式 void Quit();
//退出系统 void Great_Ticket();
//信息整体录入 void GoMenu();
//返回主菜单
void search(int x);
//按车次,启动,终点查询 void SearchEnd_Data();
//按终点和日期终点查询 void Statistics_Star();
//按起点统计车次数量 void Statistics_End();
//按终点统计车次数量 void Detele();
//删除火车时刻信息
struct Train_Ticket *Input(struct Train_Ticket *h);//单个信息输入 struct Train_Ticket *Output(struct Train_Ticket *h);//单个信息输出
struct Train_Ticket { char trains[N];
//车次
char data[N];
// 日期
char star[N];
//起点
char end[N];
// 终点
char star_time[N];
//开车时间
char end_time[N];
//到大时间
char prices[N];
//票价
struct Train_Ticket *next;
};struct Train_Ticket *head;//链表头
//录入单个信息
struct Train_Ticket *Input(struct Train_Ticket *h){
printf(“请输入:日期
起点
终点
开车时间
到达时间
票价n”);fflush(stdin);scanf(“%s %s %s %s %s %s”,h->data, h->star, h->end, h->star_time, h->end_time, h->prices);return h;}
//输出单个信息
struct Train_Ticket *Output(struct Train_Ticket *h){ printf(“%s %s %s %s %s %s %sn”,h->trains,h->data, h->star, h->end, h->star_time, h->end_time, h->prices);return h;}
//保存文件 void save(){ FILE *fp;struct Train_Ticket *p;p = head;fp = fopen(“hchsk.txt”,“w+”);if(fp == NULL){
printf(“打开文件失败!n”);
return;} else {
while(p!= NULL)
{
fprintf(fp,“ %s %s %s %s %s %s %s”,p->trains,p->data, p->star, p->end, p->star_time, p->end_time, p->prices);
p = p->next;
} // printf(“成功保存文件!n”);} printf(“n”);fclose(fp);}
//录入整个链表信息
车次号不能相同 否则录入信息失败 void Great_Ticket(){
struct Train_Ticket *p1,*p2;p1 = p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));printf(“请输入车次(车次为'0'时结束输入):”);if(p2 == NULL){
free(p2);
printf(“ 未分配内存成功!n”);
return;} else {
fflush(stdin);
scanf(“%s”, &p2->trains);
p2->next = NULL;} while(p2->trains[0]!= '0')
//车次号不为结束标志‘0’
{
p2 = Input(p2);
if(head == NULL)
{
head = p2;
}
else
{
p1 = head;
while(p1->next!= NULL)
{
if(!strcmp(p1->trains,p2->trains))
//判断车次是否存在{
printf(“该车次已存在,输入信息失败!nn”);
return;
}
p1 = p1->next;
}
p1->next = p2;
}
p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));
printf(“请输入车次(车次为'0'时结束输入):”);
if(p2!= NULL)
{
fflush(stdin);
scanf(“%s”, &p2->trains);
p2->next = NULL;
} } save();//输入完成后 自动保存输入的信息到文件件
return;}
//打开文件信息 void open(){ FILE *fp;if((fp = fopen(“hchsk.txt”,“r”))== NULL){
printf(“文件无任何消息记录!n”);
return;} struct Train_Ticket *p1,*p2;p1 = p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));head = p1;while(!feof(fp))
//文件不到结束时,将文件内容写到链表中 {
fscanf(fp,“%s %s %s %s %s %s %s”,&p2->trains,&p2->data, &p2->star, &p2->end, &p2->star_time, &p2->end_time, &p2->prices);
p1->next = p2;
p1 = p2;
p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));
p1->next = NULL;} fclose(fp);return;}
//浏览
void display(){ char ch;struct Train_Ticket *p1;p1 = head;if(p1 == NULL){
printf(“无任何记录!n”);
return;}
printf(“车次
日期
起点
终点
开车时间 while(p1!= NULL){
Output(p1);
if(p1->next!= NULL)
p1 = p1->next;
else
{
printf(”n“);
printf(”返回主菜单?(y/n): “);
fflush(stdin);
scanf(”%c“, &ch);
if(ch == 'y' || ch == 'Y')
{
system(”cls“);
GoMenu();
}
else
return;
到达时间票价n”);
} } }
//删除火车时刻信息 void Delete(){ char c[30];char ch;printf(“请输入要删除的火车车次:”);scanf(“%s”, c);struct Train_Ticket *p1,*p2;p1 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));p1 = head;if(p1 == NULL){
printf(“无任何记录!n”);
return;} p2 = p1->next;
if(!strcmp(p1-> trains, c))
//如果删除的信息是在表头
{
printf(“您要删除的信息如下:n”);
printf(“车次
日期
起点
终点
开车时间
到达时间
票价n”);
Output(p1);
printf(“确定删除吗?(y/n): ”);
fflush(stdin);
scanf(“%c”, &ch);
if(ch == 'y' || ch == 'Y')
{
head = p2;
printf(“成功删除该信息!nn”);
save();
//删除完成后,自动保存信息
free(p1);
//释放p1
return;
}
else
return;
}
else
//要删除的信息不在表头
{
while(p2!= NULL)
{
if(!strcmp(p2->trains, c))
{
printf(“您要删除的信息如下:n”);
printf(“车次
日期
起点
终点
开车时间
到达时间
票价n”);
Output(p2);
printf(“确定删除吗?(y/n): ”);
fflush(stdin);
scanf(“%c”, &ch);
if(ch == 'y' || ch == 'Y')
{
p1->next = p2->next;
printf(“成功删除该信息!nn”);
save();
//删除完成后,自动保存信息
free(p2);
//释放p2
return;
}
}
else if(p2->next!= NULL)
{
p1 = p1->next;
p2 = p2->next;
}
else
{
printf(“无此车次信息,删除失败!n”);
return;
}
} } }
//按火车车次、起点、终点查询 void search(int x){ char Tra[30];char a[30];struct Train_Ticket *p;p = head;printf(“请输入您要查询的内容:”);scanf(“%s”, Tra);if(p == NULL){
printf(“对不起,无资料记录!n”);
exit(0);} else {
while(p!= NULL)
{
if(x == 1)
strcpy(a, p->trains);
if(x == 2)
strcpy(a, p->star);
if(x == 3)
strcpy(a, p->end);
if(!strcmp(a, Tra))
{
printf(“车次
日期
起点
终点
Output(p);
return;
}
p = p-> next;
}
printf(”没有您要查询的车次记录!n“);} }
//按终点和日期查询 void SearchEnd_Data(){ char end[30];char data[30];struct Train_Ticket *p;p = head;printf(”请输入您要查询的车次和日期:“);fflush(stdin);scanf(”%s %s“, end,data);if(p == NULL){
printf(”对不起,无资料记录!n“);
exit(0);} else {
开车时间到达时间票价n”);
while(p!= NULL)
{
if(!strcmp(p->end, end)&&!strcmp(p->data,data))
{
printf(“车次
日期
起点
终点
开车时间
到达时间
票价n”);
Output(p);
}
if(p->next!= NULL)
{
p = p-> next;
}
else
return;
}
return;} }
//返回主菜单 void GoMenu(){ system(“cls”);menu();}
//查询
void Search(){ system(“cls”);int i;printf(“
1.按车次查找n”);printf(“
2.起点次查找n”);printf(“
3.终点次查找n”);printf(“
4.终点和日期次查找n”);printf(“
5.返回主菜单n”);T: printf(“请选择:”);fflush(stdin);scanf(“%d”,&i);switch(i){ case 1:
search(1);
break;case 2:
search(2);
break;case 3:
search(3);
break;case 4:
SearchEnd_Data();
break;case 5:
GoMenu();
break;default:
printf(“输入无效,请重试!n”);
goto T;} goto T;}
//按起点统计车数量 void Statistics_Star(){ int cout = 0;char b[30];struct Train_Ticket *p;p = head;printf(“请输入起点名:”);fflush(stdin);scanf(“%s”, b);if(p == NULL){
printf(“对不起,无资料记录!n”);
return;} else {
while(p!= NULL)
{
if(!strcmp(p->star, b))
{
cout ++;
}
if(p->next!= NULL)
{
p = p-> next;
}
else
{
printf(“起点为:%s 的车次共有 %d 次n”,b,cout);
return;
}
}
} }
//按终点统计车数量 void Statistics_End(){ int cout = 0;char b[30];struct Train_Ticket *p;p = head;printf(“请输入终点名:”);fflush(stdin);scanf(“%s”, b);if(p == NULL){
printf(“对不起,无资料记录!n”);
return;} else {
while(p!= NULL)
{
if(!strcmp(p->end, b))
{
cout ++;
}
if(p->next!= NULL)
{
p = p-> next;
}
else
{
printf(“终点为:%s 的车次共有 %d 次n”,b,cout);
return;
}
} } }
//统计车数量 void Statistics(){ int n;printf(“1.按起点统计
2.按终点统计n”);if(!scanf(“%d”, &n)){
printf(“输入无效!n”);
return;} else {
if(n == 1)
Statistics_Star();
else if(n == 2)
Statistics_End();
else
{
printf(“输入无效!n”);
return;
} } }
//退出 void Quit(){ char ch;printf(“确定退出吗?(y/n)n”);fflush(stdin);scanf(“%c”,&ch);if(ch == 'y' || ch == 'Y')
exit(0);else
return;}
//菜单 void menu(){ int m;printf(“************************************n”);printf(“*
火车票务管理系统
*n”);printf(“************************************n”);printf(“ ① 录入火车时刻信息
n”);
printf(“ ② 浏览火车时刻信息
n”);printf(“ ③ 查询火车时刻信息
n”);printf(“ ④ 删除火车车次
n”);printf(“ ⑤ 统计火车车次
n”);printf(“ ⑥ 退出
nn”);L: printf(“请选择功能:”);fflush(stdin);if(!scanf(“%d”,&m)){
printf(“输入无效,请重试:n”);
goto L;} switch(m){ case 1:
Great_Ticket();
break;case 2:
display();
break;
case 3:
Search();
break;case 4:
Delete();
break;case 5:
Statistics();//统计
break;
case 6:
Quit();
break;default:
printf(“输入无效,请重新输入:n”);
goto L;} goto L;}
//主菜单 int main(){ printf(“欢迎进入火车票务管理系统!n”);printf(“正在加载文档信息:”);open();
//运行软件的时候自动打开存入文件中的相关信息
for(int i = 0;i < 3;i++){
printf(“* ”);
Sleep(400);} system(“cls”);menu();return 0;}
第二篇:火车订票管理系统
学号11~15 选题三:火车票订票管理系统
1.基本要求:为方便管理火车票购买信息,编写一个火车票订票管理系统软件。系统记录必须包括订票人姓名、订票人身份证号、始发站、终到站、票价、席别、订票时间等。2.基本管理功能: [1] [2] 添加:增加一条订票人的记录到管理系统中。
查询:根据订票人身份证查找订票人的相关信息并显示,若找不到也要给出相应提示。[3] [4] 修改:在管理系统中修改订票人的订票记录。
保存:将所有订票信息保存在一个文件中(数据库文件或普通的文本文件)。[5] [6] [7] [8] 读取:从文件中读取已保存了数据。删除:从管理系统中删除一条记录。恢复:能恢复被删除的记录。
统计:(A)统计每天订票张数和总车票金额;(B)统计单价在100元以下、100~400元之间和400元以上的票数总张数及总金额;(C)以表格形式打印所有订票信息。
源代码:
#include
int d;//用于选择(按1继续,按2退出,按他其他报错待完善)int x=1;//用于脱出while循环
string sfz;//身份证号码,用户输入可用到
class ticket {public: string ID;string name;string Sstation;string Tstation;float price;string seat;string time;ticket *next;ticket(string I,string n,string S, string T,float p, string s,string t){ID=I;name=n;Sstation=S;Tstation=T;price=p;seat=s;time=t;} void display();};
void ticket::display(){cout< cout<<“|”< ************欢迎使用 ************”< **请输入选项前的编号**”< **************************************************************”< * 1.添加车票信息 *”< * 2.查询车票信息 *”< * 3.修改车票信息 *”< * 4.删除车票信息 *”< * 5.恢复车票信息 *”< * 6.显示车票信息 *”< * 7.统计车票信息 *”< * 8.保存车票信息 *”< * 9.读取车票信息 *”< * 0.离开 *”< **************************************************************”< ticket *head=NULL,*del=NULL,*p0,*p1,*p2,*p3,*p4;//head数据链表头指针,p0,p1,p2添加函数专用,避免发生错误 int check(string b)//身份证号码作为功能基本辨别数据,应该有一个函数专门检查其是否重复,0 表示重复,1 表示不重复 {ticket *ch;ch=head;int che=1;while(ch!=NULL) {if(ch->ID==b){che=0;ch=NULL;} else {ch=ch->next;} } return che;} int check1(string b)// sbl {ticket *ch;ch=del;int che=1;while(ch!=NULL) {if(ch->ID==b){che=0;ch=NULL;} else {ch=ch->next;} } return che;} int add()//将订票数据保存在一个基础链表中 {system(“cls”);float price;string name,ID,Sstation,Tstation,seat,time; if(head==NULL)//以下为链表为空的情况 { cout<<“=============开始输入订票信息=============”< cout<<“请输入订票人身份证号码:”;cin>>ID;cout<<“请输入订票人姓名:”;cin>>name;cout<<“请输入始发站:”;cin>>Sstation; cout<<“请输入终点站:”;cin>>Tstation; cout<<“请输入票价:”;cin>>price;cout<<“请输入席别:”;cin>>seat;cout<<“请输入订票时间(年月日以“-”隔开):”;cin>>time; head=p1=p2=new ticket(ID,name,Sstation,Tstation,price,seat,time);x=1;while(x){system(“cls”); cout<<“按1继续输入,按2退出-》”; cin>>d; if(d==1) {system(“cls”); p1->next=NULL; cout<<“=============开始输入订票信息=============”< cout<<“请输入订票人身份证号码:”; cin>>ID; if(check(ID)==0){cout<<“身份证号码重复!”< system(“pause”); return 0;} cout<<“请输入订票人姓名:”; cin>>name; cout<<“请输入始发站:”; cin>>Sstation; cout<<“请输入终点站:”; cin>>Tstation; cout<<“请输入票价:”; cin>>price; cout<<“请输入席别:”; cin>>seat; cout<<“请输入订票时间(年月日以“-”隔开):”; cin>>time; p1=new ticket(ID,name,Sstation,Tstation,price,seat,time); p2->next=p1; p2=p1; } else if(d==2) {p1->next=NULL; x=0; } else {cout<<“非法输入!”< } //以上为链表为空的情况 else //以下为链表已有数据,往末尾添加 {p3=head; while(p3->next!=NULL) {p3=p3->next;} x=1; while(x) {system(“cls”); cout<<“=============开始输入订票信息=============”< cout<<“请输入订票人身份证号码:”; cin>>ID; if(check(ID)==0){cout<<“身份证号码重复!”< system(“pause”); return 0;} cout<<“请输入订票人姓名:”; cin>>name; cout<<“请输入始发站:”; cin>>Sstation; cout<<“请输入终点站:”; cin>>Tstation; cout<<“请输入票价:”; cin>>price; cout<<“请输入席别:”; cin>>seat; cout<<“请输入订票时间(年月日以“-”隔开):”; cin>>time; p0=new ticket(ID,name,Sstation,Tstation,price,seat,time); p3->next=p0; p3=p0; system(“cls”); cout<<“按1继续输入,按2退出-》”; cin>>d; if(d==1){x=1;p3->next=NULL;} else if(d==2){p3->next=NULL;x=0;} else {cout<<“非法输入!”< } } //以上为链表已有数据,往末尾添加 return 1;} ticket *search1(string a)//查询函数1,用于输入身份证号码返回一个指针,可在其他部分被使用 {ticket *cha1;cha1=head;x=1;while(x) {if(cha1==NULL){x=0;} else if(cha1->ID==a){x=0;} else {cha1=cha1->next;} } return cha1;} ticket *search_1(string a)//改查1后面都得改,嗯,就这样了(~ ̄▽ ̄)~ {ticket *cha1;cha1=del;x=1;while(x) {if(cha1==NULL){x=0;} else if(cha1->ID==a){x=0;} else {cha1=cha1->next;} } return cha1;} ticket *search2(string b)//查询函数2,返回所要查询结点的前一个结点的指针,在删除部分使用 {ticket *cha2,*cha3;cha2=cha3=head;x=1;while(x) {if(cha2->next==NULL){x=0;} else if(cha2->ID==b){x=0;} else {cha3=cha2; cha2=cha2->next;} } return cha3;} ticket *search_2(string b)//-_-{ticket *cha2,*cha3;cha2=cha3=del;x=1;while(x) {if(cha2->next==NULL){x=0;} else if(cha2->ID==b){x=0;} else {cha3=cha2; cha2=cha2->next;} } return cha3;} void search()//用于用户查询功能(目前只能查询一次,然后退出,待完善){system(“cls”);cout<<“请输入身份证号码:”;cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<“无相关信息!”< cout<<“|”< cout<<“----------”< p3->display();system(“pause”);} } void display1()// {system(“cls”);ticket *dis;cout< {dis->display(); dis=dis->next; } while(dis!=NULL);} void modify()//修改函数,用于修改数据(目前只可以修改单个订票信息,待完善){system(“cls”);display1();cout<<“请输入要修改信息的身份证号码:”;cin>>sfz;p3=search1(sfz);if(p3==NULL){cout<<“无相关信息!”< while(x) {system(“cls”); cout<<“1.身份证号码 2.姓名 3.始发站 4.终点站 5.票价 6.席别 7.时间”< cout<<“请输入要修改的选项前的编号:”; cin>>d; if(d==1){hui2: cout<<“请输入身份证号码:”; cin>>sfz; if(check(sfz)==0){cout<<“身份证号码重复!”< goto hui2;} p3->ID=sfz; } else if(d==2){cout<<“请输入姓名:”;cin>>p3->name;} else if(d==3){cout<<“请输入始发站:”;cin>>p3->Sstation;} else if(d==4){cout<<“请输入终点站:”;cin>>p3->Tstation;} else if(d==5){cout<<“请输入票价:”;cin>>p3->price;} else if(d==6){cout<<“请输入席别:”;cin>>p3->seat;} else if(d==7){cout<<“请输入时间:”;cin>>p3->time;} else {cout<<“非法输入!”< hui1: cout<<“按1继续输入,按2退出-》”; int d1; cin>>d1; if(d1==1){x=1;} else if(d1==2){x=0;} else {cout<<“非法输入!”< } } } void Darea(ticket *c)//将删除信息储存在另一链表中 {if(del==NULL){del=c;del->next=NULL;} else {ticket *Dar; Dar=del; while(Dar->next!=NULL) {Dar=Dar->next;} Dar->next=c; Dar=c; Dar->next=NULL; } } void Delete()//删除函数将要删除的订票信息移出链表,并将所有删除信息结成另一链表,供恢复使用 {system(“cls”);display1();cout<<“请输入要删除订票信息的身份证号码:”;cin>>sfz;p3=search1(sfz);p4=search2(sfz);if(p3==NULL){cout<<“无相关信息!”< void recover()//恢复函数,用于将已经删除的订票信息恢复 {system(“cls”);ticket *r1,*r2,*r3;if(del==NULL){cout<<“无可恢复订票信息!”< cout<<“|”< cout<<“----------”< r1=del; if(del!=0) do {r1->display(); r1=r1->next; } while(r1!=NULL);hui3: cout<<“请输入要恢复的订票信息的身份证号码:”; cin>>sfz; if(check1(sfz)==1){cout<<“非法输入!”< r2=head; while(r2->next!=NULL){r2=r2->next;} r3=search_1(sfz); r2->next=r3; r3->next=NULL; Rdel(sfz); cout<<“成功恢复!”< system(“pause”); } } void display()//显示基础链表中的所有订票信息 {system(“cls”);ticket *dis;cout< {dis->display(); dis=dis->next; } while(dis!=NULL);system(“pause”);} void count()//统计部分 {system(“cls”);if(head==NULL){cout<<“无可统计信息!”< n=0,n1=0,n2=0,n3=0; float i,m=0,m1=0,m2=0,m3=0; p3=head; while(p3!=NULL) {i=p3->price; n=n+1; m=m+i; if(i<100){n1=n1+1;m1=m1+i;} if(i>=100&&i<=400){n2=n2+1;m2=m2+i;} if(i>400){n3=n3+1;m3=m3+i;} p3=p3->next; } cout< cout<<“|”< cout<<“-------------------”< cout<<“|”< 元 以 下 cout<<“|”< cout<<“|”< cout<<“|”< system(“pause”); } } void save()//保存函数 {system(“cls”);string filename,filename1;ofstream file;cout<<“请输入文件名:”;cin>>filename1;filename1=filename1+“.txt”;filename=“C:Program Files(x86)Microsoft Visual StudioMyProjects火车票订票管理系统savedata”+filename1;//此处路径根据需要自行更改 /*file.open(filename.c_str(),ios::in);//功能失败部分待完善 if(!file){d=1;} else {d=2;} file.close();if(d==1){file.open(filename.c_str(),ios::out); p1=head; x=1; while(x) {if(p1!=NULL) {file< ID< name< Sstation< Tstation< price< seat< time< p1=p1->next;} else {x=0;} } file.close(); cout<<“保存成功”< if(d==2){ */ int i;// cout<<“文件已存在!”< cin>>i; if(i==1) {file.open(filename.c_str(),ios::out); p3=head; x=1; while(x) {if(p3!=NULL) {file< ID< p3=p3->next;} else {x=0;} } file.close(); cout<<“保存成功”< } else if(i==2) {file.open(filename.c_str(),ios::app); p3=head; x=1; while(x) {if(p3!=NULL) {file< ID< p3=p3->next;} else {x=0;} } file.close(); cout<<“保存成功”< } else {cout<<“非法输入!”;goto hui;} //} } int load()//读取函数 {system(“cls”);int i=0,ii=0,j=0;ifstream infile;string filename,filename1;cout<<“请输入文件名:”;cin>>filename1;filename1=filename1+“.txt”;filename=“C:Program Files(x86)Microsoft Visual StudioMyProjects火车票订票管理系统savedata”+filename1;//此处路径根据需要自行更改 infile.open(filename.c_str(),ios::in); if(!infile){cerr<<“读取失败!”< system(“pause”); return-1;} string a[1000];//能力有限,不会动态大小,只能这样了(+﹏+)~ while(!infile.eof()){getline(infile,a[i],'n'); i++;} ticket *L1,*L2;float f;for(ii=0;ii {f=atof(a[ii+4].c_str()); head=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); head->next=NULL; } else {L1=head; while(L1->next!=NULL) {L1=L1->next;} f=atof(a[ii+4].c_str()); L2=new ticket(a[ii],a[ii+1],a[ii+2],a[ii+3],f,a[ii+5],a[ii+6]); L1->next=L2; L1=L2; L1->next=NULL; } } infile.close();cout<<“读取成功”< void select()//选择功能分支 {system(“cls”);menu();cin>>d; if(d==1){add();select();} if(d==2){search();select();} if(d==3){modify();select();} if(d==4){Delete();select();} if(d==5){recover();select();} if(d==6){display();select();} if(d==7){count();select();} if(d==8){save();select();} if(d==9){load();select();} else if(d==0) {ticket *ex1,*ex2,*ex3,*ex4; ex1=head; while(ex1!=NULL) {ex2=ex1; ex1=ex1->next; delete ex2; } ex3=del; while(ex3!=NULL) {ex4=ex3; ex3=ex3->next; delete ex4; } cout<<“离开!”< exit(0);} else {cout<<“错误!”< int main(){head=NULL;select();return 0;} //较多bug,比如,如果先恢复第一个会导致后面的数据全部丢失,时间能力有限,实在抱歉->_<- 票务管理 为了加强门票经营管理工作,保障经营者的合法权益,进一步规范门票,确保门票收入稳定,促使游乐园能够更好的持续发展,特制定此管理方案。 一、乐民水上乐园有限公司票务部负责门票的出售工作。 二、票务管理 1、门票经领导审批同意后由税务局定点印制。严禁其他部门 或个人私印、伪造。 2、公司负责门票的设计、印刷工作,由财务部负责保存,票 务部专人负责领用、回收、登记核算等工作。门票收入每日上缴财务。每次领用量最多不超过一周的使用量。 3、由于门票调价、霉变、重新设计等原因,造成库存门票报 废,保管员应及时清理造册。经领导审批后由旅游公司、财务部负责监督销毁。 三、门票结算管理 1、进入乐园游客一律现金购票,一人一票,票价10元,票 已售出,概不退换,车辆不收费。 2、出售时间为 8:00—18:00,节假日视情况另行安排。 四、为进一步开拓市场,对有关涉旅服务行业实行门票优惠及减免政策。 1.、本集团员工凭上岗证可免费进入 2、工作人员、车辆及住户施行通行证政策,每车150元/年,由公司办公室负责登记办理。人员及车辆凭通行证免费进入。 4、记者、导游凭有效证件免费进入。 5、70岁以上老年人和1.2米以下儿童可免费进入。 6、旅行社可享受八折优惠。 7、在校学生、现役军人、残疾人可凭有效证件享受半价优惠。 8、县直政府部门及其他执法部门经领导同意后可免费进入。 四、门票出售和检票管理 1、票务管理人员每天与财务做好交接手续,出售的门票做好 日清月结 2、票务出售人员应提前5分钟到岗。做好票务登记,并及时 解答游客所提出的问题。 3、景区实行售、检票分开管理方式,根据工作需要设立售票 口和检票口。保安专门负责检票工作。无票者禁止入内 4、票务管理人员负责指挥、疏导车辆。避免交通堵塞。 5、保安负责维持售票口的安全秩序。出现问题后应及时解 决。对于私自拉客现象应予坚决杜绝。 程序简介 此程序是采用多文件模块化形式编写;其中自定义头文件中包括了程序中所有调用的函数的声明,以及需要的所有系统头文件。 #include 编写时的分块包括订票块、查询块、输出块,及已订票修改部分等。 订票块则包含了定票流程的所有代码。查询块中是通过车次号码或是到达城市来查询的。输出部分包括了主界面的输出,已定车票信息的输出,所查车次信息输出的头部分。订票修改即是改定过程的编程。 即此程序包括了查询、订票、改定的流程。 编程过程 在编写该程序时,遇到了信息的保存问题。订票时与改定时的录入信息的保存不知如何处理;之后将保存的部分分为链表暂存和文件的保存,在录入信息时是暂存在链表中的,当离开此系统是会提示是否保存信息,若是则保存到文件中。此举方便了票的改定,将数据分割开了,也精简了程序,更便于阅读。 编程模块划分后,编写程序之后的编译时,总是连分文件编译时都无法通过。但是写入的代码经过检查又没有问题,一直困扰着我。直到想起老师教的课本以外的知识,并以一种玩玩试一试的心态用条件编译得以解决此问题。 同时在编程时多次用到“清屏”,保证了输出界面的简洁。 在分出模块后,未完成所有部分的编程时的试运行时出现刚一进入子程序时便会回到主界面,后发现时由于只有输出部分没有输入部分,每当运行完子程序后回到主程序时都会被“清屏”,结果造成编译时正常,到运行时却漏洞百出。 在编程时,由于对文件的处理不熟悉,以及计算机的设置问题没考虑,使用了‘w+’的调用方式,使得在保存数据到文件时出现无法写入文件的现象。在百度,问同学以及问老师后才用‘wb+’和别的方式调用,并写入成功。 这个程序时我学习计算机c以来编写的最大型涵盖面最广的一个程序,没有之一。但同时我也知道这在c语言编程中也只是很小的一个小程序而已,我在这编程中发现:我要学的还有很多,大型程序也不是一个人能写出来的,会一些编程技巧是很有必要的,与人合作是 – 1 – 必须的,当然了,我不是在写诗,而是真的这么觉得。一个人会的有限,专精方向也不同,若能好好的合作肯定可以超过一个人单干。 部分源代码 订票程序 #ifndef TRAINHEAD_H #define TRAINHEAD_H #include“trainhead.h” #endif/*条件编译,作用是防止头文件被重复引用*/ int saveflag = 0;void Bookticket(link l,booklink k){ Node *p[10],*q;char c[2],tnum[10],str[10],str1[10];Book *r,*s;int i = 0,t = 0,flag = 0,dnum;r = k;while(r->next!=NULL) r = r->next;printf(“Input the city you want to go:”);scanf(“%s”,&str);q = l->next;while(q!=NULL) { if(strcmp(q->data.reachcity,str)==0) { p[i] = q; i++; } q = q->next; } printf(“nthe number of record have %dn”,i); printhead(); for(t=0;t printdata(p[t]); if(i==0) printf(“nSorry!Can't find the train for you!n”); else { printf(“ndo you want to book it? scanf(“%s”,c); if(strcmp(c,“Y”)==0||strcmp(c,“y”)==0)/*判断是否订票*/ { s =(Book*)malloc(sizeof(Book)); printf(“nInput your name: ”); scanf(“%s”,&s->data.name); printf(“nInput your ID: ”); scanf(“%s”,&str1); 相应减少*/ strcpy(s->data.num,str1);printf(“nplease input the number of the train:”);scanf(“%s”,tnum);for(t=0;tdata.num,tnum)==0){ if(p[t]->data.ticketnum < 1)/*判断剩余的供订票的票数是否为0*/ { printf(“nsorry,no ticket!”); Sleep(2); return;} printf(“nremain %d ticketsn”,p[t]->data.ticketnum);flag = 1;break;} if(flag==0){ printf(“ninput error”);Sleep(2);return;} printf(“nInput your bookNum: ”);scanf(“%d”,&dnum);p[t]->data.ticketnum=p[t]->data.ticketnum-dnum;/*定票成功则可供订的票数s->data.bookNum = dnum;s->next = NULL;r->next = s;r = s;printf(“nLucky!you have booked a ticket!”);getch(); – 3 – } } } saveflag = 1;使用说明 运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图19.1所示。在主界面上输入数字0——6,实现相应的功能。 图19.1 火车订票系统主界面 主界面输入“1”,进入添加火车信息界面,如图19.2所示。根据屏幕上给出的提示输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数。 – 4 – 图19.2 输入效果图 主界面输入“2”,可以查询火车信息,可以选择查询的方法有两种,一种是按照车次查询,一种是按照你想要到达的地方查询,运行效果如图19.3所示。 – 5 – 图19.3 查询效果图 当在主界面输入“3”时,进入订票界面,按照提示输入你想要到达的城市,会自动显示出你终点站为你输入城市的信息,根据提示输入你是否决定订票以及你的个人信息,运行效果如图19.4所示。 图19.4 订票效果图 当在主界面输入“4”时,进入修改界面,根据提示输入你要修改的内容,修改模块的运行效果如图19.5所示。 – 6 – 图19.5 修改效果图 当在主界面输入“5”时,可以显示出所有的火车信息,显示模块效果如图19.6所示。 – 7 – 图19.6 显示效果图 当在主界面输入“6”时,进入到保存模块,将录入的火车信息进行保存,并且将订票人的信息也进行保存,存储在指定的磁盘文件中。运行效果如图19.7所示。 图19.7 保存效果图 – 8 – 票务管理复习 行统计获得的信息。 第三章 1.在封闭式售检票的作业环境下,售检票方式可分为人工售检票、办自动售检票、自动售检票。 2.实现自动售检票系统的基本构架一般有线路式架构、分散式架构、区域式架构、完全集中式架构、分级集中式架构五种。 3.选择自动售检票系统总体架构时需考虑以下因素: (1)符合轨道交通的战略目标和发展规划;(2)满足路网换乘; (3)满足票务结算的需求;(4)提高运营管理效率; (5)系统稳定性好,既有较强的适应性;(6)系统具有较好的经济性。 第五章 1.票务交易数据:根据这些运营参数自动售检票系统的各种终端设备自动执行票务政策,各种终端设备在执行过程中记录的信息被统称为票务交易数据 2.票务交易数据的管理主要体现在: (1)各种分类组合条件下的查询、统计和相关报表的处理,以满足票务管理的业务需要。 (2)在预先设置规则和统计模型情况下,对票务交易数据进行进一步挖掘和分析,为自动售检票运营管理提供辅助决策。 (3)中央计算机系统联机数据库中,按预设条件下将历史交易明细数据和相关统计资料的迁移、备份与删除,以保证中央计算机系统能连续、可靠地运行。 3.系统参数一般由:车票类型、价目表、优惠率、交易类型、操作权限、黑名单等组成。 4.运行参数包括:费率类;基础资料类;运行管理类;设备运行类。 5.信息汇总包括:信息统计、数据挖掘、各类报表生成。 6.数据挖掘是指把人工智能、机器学习与数据库等技术结合起来,由计算机自动地从数据库或数据仓库中的大量数据揭示出隐含的、先前未知的并具有潜在价值的信息或模式,以解决数据量大而知识贫乏这一困扰专家系统的知识瓶颈问题的非平凡过程。 7.根据轨道交通情分系统的业务及管理需要,系统的报表主要分为三大类:结算类报表、管理分析类报表、故障辅助解决类报表。 8.车票管理包括:车票的编码管理、车票库存管理、车票使用情况跟踪、车票交易查询。 9.设备管理包括:故障监控和统计、维修日志管理、操作日志、设备设置、设备软件管理、维护统计。 第六章 1.车站计算机系统的应用系统架构有五个子系统组成:通信管理子系统、运行管理子系、报表统计子系统、权限控制子系统、车站数据库系统。 2.车站计算机系统的日志包括两大类型:系统日志和应用日志。 3.车站计算机系统采用 UPS供电。 第七章 1.电磁兼容是指设备或者系统在电磁环境中不受干扰地正常工作,并且不会对该环境中任何事物构成不能承受的电磁干扰的影响。 2.外界电磁干扰侵入系统的主要途径:电源系统、传导通路、空间电磁波感应(包括静电场和磁场)。 第八章 1..A类卡的电源为5V;B类卡的电源为3V。 2.非接触式IC票的关键技术包括: (1)射频技术(2)低功耗技术(3)封装技术(4)安全技术 3..所谓突发的偶然因素,是指数据在传输过程中可能会收到外界的干扰,从而使原来的正确数据受到破坏。 4.所谓因系统本身的使用特点而产生的因素是指在非接触式IC卡系统的应用中经常会出现一个读卡器必须同时处理几张卡的情况(即有多张卡在读卡器的天线感应范围内),在这种情况下,卡片之间会出现数据干扰。 5.计算例题P235。 6.循环冗余校验码的特点 ①可检测出所有奇数位错 ②可检验出所有双比特的错 ③可检验出所有小于、等于校验位长度的突发错。 第九章 1.一个全方位的安全体系包含:访问控制、检查安全漏洞、攻击监控、认证、备份和恢复、多层防御、隐藏内部信息、设立安全监控中心等。 第十章 1.容灾系统是通过在异地另行建立和维护一套独立的应用系统,利用地理上的分离来保证信息系统和数据对灾难性事件的抵御能力,以实现整个应用系统和业务数据的完整备份。 第十一章 1.中央系统的维护人员需要进行以下运行维护操作: (1)系统运行状况监控;(2)系统用户管理; (3)重要数据和数据库的备份与恢复;(4)自诊断; (5)数据归档;(6)生产系统与灾容备份系统的切换演练。 2.越来越被广泛用于计算机系统的性能测试方法是基准程序方法。第三篇:票务管理
第四篇:火车订票管理系统主程序流程
第五篇:票务管理复习