学号11~15 选题三:火车票订票管理系统
1.基本要求:为方便管理火车票购买信息,编写一个火车票订票管
理系统软件。系统记录必须包括订票人姓名、订票人身份证号、始发站、终到站、票价、席别、订票时间等。
2.基本管理功能:
[1]添加:增加一条订票人的记录到管理系统中。
[2]查询:根据订票人身份证查找订票人的相关信息并显示,若
找不到也要给出相应提示。
[3]修改:在管理系统中修改订票人的订票记录。
[4]保存:将所有订票信息保存在一个文件中(数据库文件或普
通的文本文件)。
[5]读取:从文件中读取已保存了数据。
[6]删除:从管理系统中删除一条记录。
[7]恢复:能恢复被删除的记录。
[8]统计:(A) 统计每天订票张数和总车票金额;(B) 统计单价
在100元以下、100~400元之间和400元以上的票数总张数
及总金额;(C) 以表格形式打印所有订票信息。
源代码:
#include
#include
#include
#include
using namespace std;
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<<"|"< } void menu() {cout< cout< cout<<" ************欢迎使用 ************"< cout< cout<<" **请输入选项前的编号**"< cout< cout<<" **************************************************************"< cout<<" * 1.添加车票信息*"< cout<<" * 2.查询车票信息*"< cout<<" * 3.修改车票信息*"< cout<<" * 4.删除车票信息*"< cout<<" * 5.恢复车票信息 *"< cout<<" * 6.显示车票信息*"< cout<<" * 7.统计车票信息*"< cout<<" * 8.保存车票信息*"< cout<<" * 9.读取车票信息*"< cout<<" * 0.离开*"< cout<<" **************************************************************"< } 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<<"=============开始输入订票信息============="< 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<<"无相关信息!"< else {cout< cout<<"|"< cout<<"------------------------------------------------------------------------"< p3->display();system("pause");} } void display1() // {system("cls"); ticket *dis; cout< cout<<"|"< cout<<"------------------------------------------------------------------------"< dis=head; if(head!=0) do {dis->display(); dis=dis->next; } while(dis!=NULL); } void modify()//修改函数,用于修改数据(目前只可以修改单个订票信息,待完善) {system("cls"); display1(); cout<<"请输入要修改信息的身份证号码:"; cin>>sfz; p3=search1(sfz); if(p3==NULL) {cout<<"无相关信息!"< else {x=1; 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");