📄 航空售票系统.cpp
字号:
#include <iostream>
#include <string>
#include <cassert>
#include <conio.h>
using namespace std;
#define MAXPASNUMBER 40 //乘客最大数
#define PLANENUMBER 10 //航班数
struct PasMesNode//乘客信息
{
string Name;//姓名
int SeatNo;//座位号
string Password;//密码
string IDNo;//身份证号
PasMesNode* link;//指向乘客链表的指针
};
struct TakeUpTime
{
int week; //星期几起飞,用数字表示
int hour; //起飞小时
int minute; //起飞分钟
};
struct PlaneMegNode//飞机信息
{
string FightNo; //航班号
string Source;//出发地
string Dest; //目的地
TakeUpTime Takeuptime;
int ExtraTicket;//余票额
int PasNum;//现有乘客数量
PlaneMegNode* Link;//指向下一项的指针
PasMesNode* Dlink;//指向乘客信息的指针
};
typedef PlaneMegNode* PlanePoint;
typedef PasMesNode* PasPoint;
int Init(void);
PlanePoint CreatePlaneList(void);//建立飞机信息链表
void CreatePasList(PlanePoint);//建立乘客信息链表
PasPoint SearchName(PlanePoint, string);//按乘客姓名在特定飞机信息下的乘客信息中搜索并打印航班和乘客信息
PlanePoint SearchFightNo(PlanePoint, string);//按航班搜索并打印航班信息
void Bookticket(PlanePoint, string FightNo, int TicketAmout);//买票
void ReturnTicket(PlanePoint, string FightNo, string name);//退票
void PrintPas(PasPoint);//打印乘客信息
void PrintPlane(PlanePoint);//打印特定飞机信息
void PrintAllPlaneMeg(PlanePoint PlaneList);//打印所有飞机信息
int* PrintExtraSeat(PlanePoint);//打印并返回剩余座位号
PasPoint AttachPasMes(PlanePoint,string name,string password,string idNo,int seatNo);//添加乘客信息到特定飞机乘客列表中
void DeletePas(PlanePoint, PasPoint);//删除该用户信息
int main()
{
int ch;//输入选择选项
int flag =0;
string name;
string fightNo;
int TicketAmout;
PlanePoint PlaneList = CreatePlaneList();//建立飞机信息链表,返回头节点
CreatePasList(PlaneList);//在飞机信息链表中,加入乘客信息
PlanePoint TmpPlaneList = PlaneList->Link;
PasPoint TmpPasPoint;
if(Init() == 0)//初始化,要求管理员输入密码,失败时退出
{
cout<<"Sorry,goodbye"<<endl;
exit(0);
};
system("cls");//清屏
//欢迎界面
cout<<"*************************Welcome to the airplane system*************************";
cout<<"Please choose the service:"<<endl;
cout<<"1.Press 1 to search passenger."<<endl;
cout<<"2.Press 2 to search fightNo."<<endl;
cout<<"3.Press 3 to book tickets."<<endl;
cout<<"4.Press 4 to Reject tickets."<<endl;
cout<<"5.Press 5 to print all fights' messege."<<endl;
cout<<"0.Press 0 to quit the system."<<endl;
cin>>ch;
getchar();
system("cls");
while(ch != 0)//退出选项中止循环
{
switch(ch)//判断选择,进入不同功能模块
{
case 1://查询乘客信息
cout<<"Please input the name of the passenger which you want to search:";
getline(cin,name);
getchar();
while(TmpPlaneList != 0)//循环搜索所有飞机信息
{
TmpPasPoint = SearchName(TmpPlaneList, name);
if(TmpPasPoint != 0)
{
flag++;
}//设标志位而不退出以实现搜索重名
TmpPlaneList = TmpPlaneList->Link;
}
if(flag == 0)
{
cout<<"No this passenger."<<endl;//找不到该乘客姓名时打印
}
flag = 0;//归位
break;
case 2:
cout<<"Please input the fightNo which you want to search:";
getline(cin, fightNo);
getchar();
SearchFightNo(PlaneList, fightNo);//搜寻飞机班次
break;
case 3:
cout<<"Please input the fightNo which you want to book:";
getline(cin, fightNo);
getchar();
cout<<"How many tickets of this fight would you like to book?";
cin>>TicketAmout;
getchar();
Bookticket(PlaneList, fightNo, TicketAmout);//买票
break;
case 4:
cout<<"Please input the fightNo which you want to Reject:";
getline(cin, fightNo);
getchar();
cout<<"Please input your name:";
getline(cin, name);
getchar();
ReturnTicket(PlaneList, fightNo, name);//退票
break;
case 5:
PrintAllPlaneMeg(PlaneList);//打印所有航班信息
break;
default:
cout<<"Input error.Please input again"<<endl;
break;
}
TmpPlaneList = PlaneList->Link;//归位
cout<<"Coutinue to operate!"<<endl;
cin>>ch;
getchar();
}
return 0;
}
int Init()
//初始化模块,此时要求管理员输入密码,以进入航空售票系统,测试密码是123456
{
char password[8];int j = 1;
char Pass[7] = "123456";
cout<<"Please enter the password to enter the syetem(Test Secret:123456):";
while(j <= 3)
{
for(int i = 0;i < 7; i++)
{
password[i]=getch();//读取密码,但不显示
if(password[i] == '\r')
{
password[i] = '\0';//当读入回车时,写入\0,表示字符串结束
break;
}
cout<<"*";//用*表示
if(password[i] == '\b')//对退格符的处理,允许用户用退格回退
{
putchar('\b');
putchar('\b');
putchar(' ');
putchar(' ');
putchar('\b');
putchar('\b');
i--;
i--;
}
}
cout<<endl;
if(strcmp(password, Pass) == 0)
return 1;//如果成功返回1
cout<<"Enter Wrong!Please enter again:";
j++;
}
return 0;
}
//建立小型飞机数据库模块
//建立飞机信息链表,返回链表的表头
PlanePoint CreatePlaneList()
{
PlanePoint FirstNode = new PlaneMegNode;
PlanePoint TmpFirstNode = FirstNode;
PlanePoint TmpNode;
PasPoint Tmp;
string fightno[PLANENUMBER] = {"c331","c332","c333","c334","c335","c336","c337","c338","c339","c340"};
string source[PLANENUMBER] = {"beijing","shanghai","changchun","haerbin","changshan","guangzhou","shengzhen","hefei","hangzhou","shijiazhuang"};
string dest[PLANENUMBER] = {"shanghai","changchun","haerbin","changshan","guangzhou","shengzhen","hefei","hangzhou","shijiazhuang","beijing"};
TakeUpTime time[PLANENUMBER] = {{3,20,20},{2,13,40},{1,12,34},{4,23,23},{6,1,30},{7,3,40},{4,15,33},{3,0,30},{5,4,40},{6,10,54}};
int extraTicket[PLANENUMBER] = {10,2,12,0,14,12,0,2,12,37};
int num[PLANENUMBER] = {5,3,2,2,3,1,3,4,3,2};
FirstNode->Dlink = 0;
for(int i = 0; i < PLANENUMBER; i++)//循环建立航班链表,将上面的信息保存至链表中
{
TmpNode = new PlaneMegNode;
TmpFirstNode -> Link = TmpNode;
TmpFirstNode = TmpNode;
TmpNode->FightNo = fightno[i];
TmpNode->Source=source[i];
TmpNode->Dest = dest[i];
TmpNode->Takeuptime.week = time[i].week;
TmpNode->Takeuptime.hour = time[i].hour;
TmpNode->Takeuptime.minute = time[i].minute;
TmpNode->ExtraTicket = extraTicket[i];
TmpNode->PasNum = num[i];
Tmp = new PasMesNode;
TmpNode->Dlink = Tmp;
if(i == PLANENUMBER - 1)
TmpNode->Link = 0;
}
return FirstNode;
}
//建立乘客信息链表
void CreatePasList(PlanePoint PlaneList)
{
PasMesNode TmpPasMesNode;
PlanePoint TmpPlanePoint;
PasPoint TmpPasPoint;
PasPoint Tmp;
int i = 0,j = 0;
string name[PLANENUMBER][20] = {{"cao","ca","joj","ko","lko"},{"ds","df","tyr"},{"jh","fh"},
{"fds","jgk"},{"fh","hfdo","fhj"},{"ds"},{"dsjk","dsh","hjfd"},
{"d","e","dcd","e"},{"das","fd","s"},{"fa","gdf"}};
int seatNo[PLANENUMBER][20] = {{1,4,3,6,7},{3,1,2},{2,6},{1,2},{3,6,9},
{4},{1,2,3},{1,2,3,4},{5,3,6},{4,3}};
string password[PLANENUMBER][20] = {{"cao","ca","joj","ko","lko"},{"ds","df","t4y"},{"jh","42h"},
{"f45","j4"},{"fh","452do","245"},{"d"},{"dsjk","dsh","h546"},
{"d","fds","6rcd","e"},{"das","fd","546"},{"sdg","dgf"}};
string idNo[PLANENUMBER][20]={{"5453","353","53","23","76"},{"343","756","757"},{"532","5336"},
{"7584","5636"},{"533","7656","359"},{"674"},{"8765","7878","24233"},
{"641","872","783","854"},{"785","783","3566"},{"32344","653"}};
int num[PLANENUMBER] = {5,3,2,2,3,1,3,4,3,2};
TmpPlanePoint = PlaneList->Link;
while(TmpPlanePoint != 0)//循环建立乘客链表,将上面信息保存起来
{
i = 0;
TmpPasPoint = TmpPlanePoint->Dlink;
while(num[j] != 0)
{
TmpPasPoint->Name = name[j][i];
TmpPasPoint->SeatNo = seatNo[j][i];
TmpPasPoint->Password = password[j][i];
TmpPasPoint->IDNo = idNo[j][i];
Tmp = new PasMesNode;
num[j]--;
if(num[j] == 0)
TmpPasPoint->link = 0;
else
{
Tmp = new PasMesNode;
TmpPasPoint->link = Tmp;
TmpPasPoint = Tmp;
}
i++;
}
j++;
TmpPlanePoint = TmpPlanePoint->Link;
}
}
//查询功能模块
//按乘客姓名查询,第一个参数是飞机信息链表的头节点,第二个是乘客姓名
PasPoint SearchName(PlanePoint PlaneList, string name)
{
PasPoint TmpPasPoint;
TmpPasPoint = PlaneList->Dlink;
while(TmpPasPoint != 0)
//循环比较每个乘客信息中的姓名与参数中的姓名一致,一致的话返回该乘客信息链表,否则返回NULL
{
if((TmpPasPoint->Name.compare(name)) == 0)
{
PrintPlane(PlaneList);
PrintPas(TmpPasPoint);
cout<<endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -