航空客运订票系统

选题背景

方案论证

过程论述

运行结果

完整代码

选题背景

①背景: 现在人们更多的使用飞机作为出行交通工具,因此机票票务市场也在快速发展。国内外航空事业在飞速发展,各航空公司对票务管理的要求也在不断的提高,对航空的信息管理系统提出了更高的要求。

②应达到的技术要求: 为实现航空管理员和乘客的不同需要,技术上应实行多级用户。管理员能够查看所有航班信息,乘客名单以及修改航班票价等;乘客用户能够查询航班信息,购买机票以及退票等操作。
为实现上述功能,需要完成文本文件的基本编辑:增、删、改、查,创建多文件适应不同需要,同时为了在内存中创建对应对象,需要良好的面向对象的知识。

③指导思想: 为航空管理员和乘客提高良好的管理系统。

方案论证(设计理念)

** 设计理念:**   基于C++程序设计基础,实现了多级用户管理。乘客用户可以查询航班,根据旅客提出的终点站名输出信息;根据提供的航班号进行购票,可选择购票数,若有余票,则为用户办理订票;若无余票或余票不满足用户需求,可询问旅客是否登记排队候补。乘客可退票,若有旅客在次航班候补,可按顺序为满足订票数的乘客购票。 航空公司管理员可查看所有航班信息和乘客名单,并且可以修改航班票价。

实现方案:
  C++ MVC模式:win32控制台为界面(view)、文本文件提供数据(model)、面向对象中类、实例及链表。应用运行环境为visual studio 2010。

这个方案的特点:
  1.win32控制台界面简洁、用户交互良好,同时可以让程序制作者更专注于逻辑代码的编辑和落实上。虽然UI略显简陋,但是用户提示足够详细,界面上的不足完全可以由技术和逻辑弥补。
  2.使用文本文件可直接打开获取、修改、保存数据,直观性好。
  3.使用面向对象的方法设计程序,以管理员和乘客为基本点出发,结构和层次更清晰。同时先将文本文件的数据读取到内存中,作为链式储存,容易插入、删除数据,再与用户进行交互,避免了重复打开文件,多次操作文件带来的效率低下的问题。同时也利用了操作内存速度远比操作文件速度要快的特点,提升了程序性能。

过程论述

1.建立对象:
  实现多级用户管理。乘客用户可以查询航班,根据旅客提出的终点站名输出信息;票或余票不满足用户需求,可询问旅客是否登记排队候补。乘客可退票,若有旅客在次航班候补,可按顺序为满足订票数的乘客购票。航空公司管理员可查看所有航班信息和乘客名单,并且可以修改航班票价。
  定义结构Client,表示乘客,具有next指针指向下一结点,可以实现链式结构。

  具有next指针指向下一结点,可以实现链式结构。定义类对象airline,表示航班:

  具有next指针指向下一结点,可以实现链式结构。具有终点站名、航班号、飞机号、飞行日、乘员定额、余票量、已订票的客户名单文件名以及等候替补的客户名单文件名等私有数据成员,保证了数据的安全性。以及一系列的友元函数,可以完成对航班的访问,来实现特定的功能。

2.通过文本文件读取、存放数据

  将文本文件的数据读取到内存中,作为链式储存,容易插入、删除数据,再与用户进行交互,避免了重复打开文件,多次操作文件带来的效率低下的问题。同时也利用了操作内存速度远比操作文件速度要快的特点,提升了程序性能。
  本实验设计了一个航班信息的文本文件,以及每条航班线对应有一个乘客名单文件和排队候补旅客名单文件,这两份名单文件名在该航班信息中存放。
  程序运行时,将航班信息文本文件读取到内存中,每次数据有修改时,对文本文件进行数据修改。

  以下是文本内容:


3.基本功能的实现(以下简单介绍几个较为重要的函数)

  登录界面,通过选择乘客登录或管理员登录:

  本次实验对登录界面进行简化,实际中较为复杂,乘客登录只需输入姓名,管理员登录输入管理员密码(666666)。根据不同的登录方式将进入不同的用户界面。

查询功能:
  乘客根据终点站名查询航班,通过链表顺序查找,匹配终点站名,并判断是否找到,若找到则打印航班信息。

订票功能:
  系统根据乘客提供的航班号链式顺序查找该航班,若找到,则询问购票数。
  然后分为两个分支:一是余票量满足购票数,则购票成功,改用户列入乘客名单

  二是余票不足,则继续询问,是否登记排队候补

退票功能:
  分为两个部分,一是退票,二是若有用户排队候补次航班,则根据需求票数和排队顺序为候补乘客购票。
  在该航班的乘客名单中根据姓名查找,若找到则询问退票数量。
  首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户

修改票价功能:
  管理员通过输入航班号,找到该航班进行票价修改

4.完善用户界面系统

  通过main函数完成,switch分支选择调用不同的函数,到达不同的界面,实现各种功能。如图所示;

运行结果


            图1 乘客登录


            图2 乘客用户界面


            图3 乘客查询航班


            图4 乘客订票(余票足)


            图5乘客订票(余票不足)


            图6 乘客退票


            图7 管理员登录


            图8 管理员操作界面


            图9 管理员查看所有航班信息


            图10 管理员查看乘客名单


            图11 管理员修改票价

完整代码

#include<iostream>
#include<fstream>
#include<stdio.h>
#include<cstring>
using namespace std;struct client
{ /*客户*/char name[20];          /*姓名*/int ordering_number;    /*订票量*/int grade;             /*舱位等级*/client *next;
};
class airline
{ /*航班信息*/
private:char end_station[20];   /*终点站名*/char air_num[10];       /*航班号*/char plane_num[10];     /*飞机号*/char day[7];            /*飞行日(星期几)*/int people_quota;       /*乘员定额*/double price;           /*票价*/int more_ticket;        /*余票量*/char passenger_list[50];   /*乘客名单*/char waiting_list[50];     /*等候替补的客户名单*/   static int number;       /*航班总数*/
public:void print(){/*打印航班信息*/cout<<"  终点站名:"<<end_station<<"  \t 航班号:"<<air_num<<"\t    飞机号:"<<plane_num<<"\n  时间:"<<day<<"\t\t  乘员定额:"<<people_quota<<"\n  票价:"<<price<<"\t\t 余票量:"<<more_ticket<<"\n\n";} friend airline* get_airline();                   /*读取文件中的航班信息*/friend void client_list();friend void put_airline(airline*);friend void print_airline();friend void search();friend void booking();friend void refund();friend client* get_passenger(airline);friend client* get_wait(airline);friend void put_passenger(airline,client*);friend void put_wait(airline,client*);friend void re_price();
};int airline::number=0;
char Name[20]="";            /*用于用户登录的姓名*/
airline *L;                  /*全局变量,航线指针*/      void app_client(client *c,client *q)
{/*增加乘客*/client *p=c;while(p->next) p=p->next;p->next=q;q->next=NULL;
}
int login()
{/*登录*/int f;char password[20],*p="666666";       /*管理员密码*/cout<<"*************************登录*****************************\n\n";cout<<"           1.乘客登录         2.管理员登录\n  请选择用户身份:";fflush(stdin);   /*刷新输入流缓冲区*/while(f=int(getchar())-48){if(f==1) { cout<<"  姓名:";cin>>Name;cout<<"\n\t\t登录成功!!\n\n**********************************************************\n\n";return 1;}else if(f==2) {cout<<"\n  输入管理员密码(提示6个6):";fflush(stdin);while(cin>>password){if(!strcmp(password,p)) {cout<<"\n\t\t登录成功!!\n\n**********************************************************\n\n";return 2;}else cout<<"\n密码错误!! 请重新输入\n\n  输入管理员密码:";}}else cout<<"输入错误!! 请重新输入\n  请选择用户身份: ";}
}
void search()
{/*查询操作*/char s[20];int i=0;cout<<"*************************查询*****************************\n\n\t\t终点站名:";cin>>s;while(i<L->number&&strcmp(s,L[i].end_station)) i++;    /*按链表顺序匹配终点站名*/if(i<L->number)          L[i].print();else cout<<"\n无此航班信息!\n\n";cout<<"**********************************************************\n\n";
}
void refund()
{/*退票操作*/char s[20];int i=0,n;cout<<"*************************退票*****************************\n\n\t\t航班号:";cin>>s;while(i<L->number&&strcmp(s,L[i].air_num)) i++;       /*按航班号匹配*/if(i<L->number){/*找到此航班*/client *c1=get_passenger(L[i]),*c2=get_wait(L[i]),*p=c1,*q,*r;/*获得次航班的乘客和候补乘客链表*/while(p->next&&strcmp(Name,p->next->name)) p=p->next;     /*姓名查找*/if(p->next){/*找到该用户姓名*/cout<<"您在"<<L[i].air_num<<"航班(终点站:"<<L[i].end_station<<")订了"<<p->next->ordering_number<<"张票\n请输入退票数量:";do{/*输入退票数*/cin>>n;if(n>0&&n<=p->next->ordering_number) break;else cout<<"\n输入错误!!请重新输入:";}while(1);if(n==p->next->ordering_number) {/*全部退票*/r=p->next;q=r->next;p->next=q;delete r;  }else if(n<p->next->ordering_number) p->next->ordering_number-=n;  /*退部分票*/L[i].more_ticket+=n;   /*余票增加*/int f=1;while(L[i].more_ticket&&f){/*有余票且未访问完所有候补乘客*/p=c2;while(p->next&&L[i].more_ticket<p->next->ordering_number) p=p->next; if(p->next){/*找到需求票数满足的*/L[i].more_ticket-=p->next->ordering_number;r=p->next;q=r->next;p->next=q;app_client(c1,r);}else f=0;  /*访问完*/}put_passenger(L[i],c1);   /*刷新乘客名单*/put_wait(L[i],c2);}else cout<<"\n退票错误!! 您没有在此航班订票\n";}else cout<<"\n无此航班信息!\n\n";cout<<"\n 退票完成!\n";cout<<"**********************************************************\n\n";put_airline(L);
}
void booking()
{/*订票操作*/char s[20];int i=0,n,y,g;cout<<"*************************订票*****************************\n\n\t\t航班号:";cin>>s;while(i<L->number&&strcmp(s,L[i].air_num)) i++;if(i<L->number){/*找到该航班*/L[i].print();client *c1=get_passenger(L[i]);client *c2=get_wait(L[i]);cout<<" 舱位等级(1:头等舱,2:普通舱,3:经济舱):";cin>>g;cout<<" 购买票数:";do{/*合理输入购买票数*/cin>>n;if(n<=L[i].people_quota) break;elsecout<<"错误!!不能超过最大乘员数("<<L[i].people_quota<<"),重新输入:";}while(1);if(L[i].more_ticket){/*有余票*/if(n<=L[i].more_ticket) {/*余票足够*/client *p=new client;strcpy_s(p->name,Name);p->ordering_number=n;L[i].more_ticket-=n;p->grade=g;app_client(c1,p);cout<<"\n 购票完成!\n";}else if (n>L[i].more_ticket){/*余票小于购买数*/int x;client *p1=new client,*p2=new client;/*询问用户*/cout<<"\n\n(1:只买"<<L[i].more_ticket<<"张  2:买"<<L[i].more_ticket<<"张,"<<n-L[i].more_ticket<<"张等候  3:不买)\n 余票不足"<<n<<"张,是否继续购买?:";cin>>x;switch(x){case 1:strcpy_s(p1->name,Name);p1->ordering_number=L[i].more_ticket;L[i].more_ticket=0;p1->grade=g;app_client(c1,p1);cout<<"\n 购票完成!\n";break;case 2:strcpy_s(p1->name,Name);p1->ordering_number=L[i].more_ticket;p1->grade=g;app_client(c1,p1);strcpy_s(p2->name,Name);p2->ordering_number=n-L[i].more_ticket;L[i].more_ticket=0;p2->grade=g;app_client(c2,p2);cout<<"\n 购票完成!\n";break;}}}else  {/*无余票*/cout<<"\n 无余票! 是否排队等候票?(1:是 0:否)";cin>>y;if(y) {/*进入等候名单*/client *p=new client;strcpy_s(p->name,Name);p->ordering_number=n;p->grade=g;app_client(c2,p);}}put_passenger(L[i],c1);    /*刷新乘客名单*/put_wait(L[i],c2);}else cout<<"\n无此航班信息!\n\n";cout<<"\n**********************************************************\n\n";put_airline(L);
}void put_wait(airline l,client *c)
{/*输出等候替补名单*/fstream f;client *p=c->next;f.open(l.waiting_list,ios::out|ios::trunc);while(p){f<<p->name<<" "<<p->ordering_number<<" "<<p->grade<<'\n';p=p->next;}f.close();
}
client* get_passenger(airline l)
{/*读取某航班乘客信息*/fstream f;int i=0;client *c=new client,*p=new client,*q=c;f.open(l.passenger_list,ios::in);while(f>>p->name>>p->ordering_number>>p->grade){q->next=p;p=new client;q=q->next;}q->next=NULL;f.close();return c;
}
void put_passenger(airline l,client *c)
{/*输出乘客信息到文件*/fstream f;client *p=c->next;f.open(l.passenger_list,ios::out|ios::trunc);while(p){f<<p->name<<" "<<p->ordering_number<<" "<<p->grade<<'\n';p=p->next;}f.close();
}
client* get_wait(airline l)
{/*读取某航班等候替补名单*/fstream f;int i=0;client *c=new client,*p=new client,*q=c;f.open(l.waiting_list,ios::in);while(f>>p->name>>p->ordering_number>>p->grade){q->next=p;p=new client;q=q->next;}q->next=NULL;f.close();return c;
}
airline* get_airline()
{/*读取文件中的航班信息*/fstream f;int i=0;airline *line=new airline [100];f.open("航班信息.txt",ios::in);while(f>>line[i].end_station>>line[i].air_num>>line[i].plane_num>>line[i].day>>line[i].people_quota>>line[i].price>>line[i].more_ticket>>line[i].passenger_list>>line[i].waiting_list)i++;line->number=i;f.close();return line;
}
void put_airline(airline *L)
{/*输出修改后的航班信息*/fstream f;int i;f.open("航班信息.txt",ios::out);for(i=0;i<L->number;i++)  f<<L[i].end_station<<" "<<L[i].air_num<<" "<<L[i].plane_num<<" "<<L[i].day<<" "<<L[i].people_quota<<" "<<L[i].price<<" "<<L[i].more_ticket<<" "<<L[i].passenger_list<<" "<<L[i].waiting_list<<'\n';f.close();
}
void print_airline()
{/*打印所有航班信息(管理员操作)*/L=get_airline();int i=0;cout<<"*************************航班信息*************************\n\n";for(int i=0;i<L->number;i++)L[i].print();cout<<"\n**********************************************************\n\n";
}
void client_list()
{/*查看某航班乘客名单(管理员操作)*/int i=0;char s[20],*g;cout<<"*************************乘客名单*************************\n\n\t\t航班号:";cin>>s;while(i<L->number&&strcmp(s,L[i].air_num)) i++;if(i<L->number){client c;fstream f;f.open(L[i].passenger_list,ios::in);cout<<"\n  已购票乘客名单:\n";while(f>>c.name>>c.ordering_number>>c.grade){switch(c.grade){case 1:g="头等舱";break;case 2:g="普通舱";break;case 3:g="经济舱";}cout<<"\t姓名:"<<c.name<<"\t舱位等级:"<<g<<"\t购票数:"<<c.ordering_number<<endl;}f.close();f.open(L[i].waiting_list,ios::in);cout<<"\n  候补订票乘客名单:\n";while(f>>c.name>>c.ordering_number>>c.grade){switch(c.grade){case 1:g="头等舱";break;case 2:g="普通舱";break;case 3:g="经济舱";}cout<<"\t姓名:"<<c.name<<"\t舱位等级:"<<g<<"\t预订票数:"<<c.ordering_number<<endl;}f.close();}else cout<<"\n无此航班信息!\n\n";cout<<"\n**********************************************************\n\n";}
void re_price()
{/*修改某航班票价(管理员操作)*/int i=0,p;char s[20];cout<<"*************************修改票价*************************\n\n\t\t航班号:";cin>>s;while(i<L->number&&strcmp(s,L[i].air_num)) i++;if(i<L->number){cout<<"  终点站名:"<<L[i].end_station<<"\t  飞机号:"<<L[i].plane_num<<"\n\n\t    原票价:"<<L[i].price<<"\n\t    新票价:";cin>>p;L[i].price=p;cout<<"\n   修改票价完成\n";}else cout<<"\n无此航班信息!\n\n";put_airline(L);cout<<"\n**********************************************************\n\n";
}
int form1()
{/*乘客用户界面*/int s;cout<<"*************************用户界面*************************\n\n";cout<<"   1.查询航班\t   2.订票\t  3.退票     0.退出登录\n\n\t\t选择操作:";fflush(stdin);while(s=int(getchar())-48){if(s>=0&&s<=3)      {cout<<"\n**********************************************************\n\n";return s;}else cout<<"\t输入错误!! \n\t请重新选择操作:";}}
int form2()
{/*管理员界面*/int s;cout<<"***********************管理员界面*************************\n\n";cout<<"   1.航班信息\t   2.乘客名单\t  3.修改票价     0.退出登录\n\n\t\t选择操作:";fflush(stdin);while(s=int(getchar())-48){if(s>=0&&s<=3)        {cout<<"\n**********************************************************\n\n";return s;}else cout<<"\t输入错误!! \n\t请重新选择操作:";}
}
int main()
{L=get_airline();do{int f=1;switch(login()){case 1:/*乘客界面*/system("pause");system("cls");do{switch(form1()){case 1:/*调用查询函数*/system("cls");search();system("pause");system("cls");break;case 2:/*订票*/system("cls");booking();system("pause");system("cls");break;case 3:/*退票*/system("cls");refund();system("pause");system("cls");break;case 0:/*退出登录,返回上一层*/f=0;system("cls");}}while(f);break;case 2:/*管理员界面*/system("pause");system("cls");do{switch(form2()){case 1:/*查看所有航班信息*/system("cls");print_airline();system("pause");system("cls");break;case 2:/*查看乘客名单*/system("cls");client_list();system("pause");system("cls");break;case 3:/*修改票价*/system("cls");re_price();system("pause");system("cls");break;case 0:/*退出登录,返回上一层*/f=0;system("cls");}}while(f);}}while(1);
}

注: 需要在工程项目中Debug文件夹中加入以下文本文件



其中:北京 001 KN9500 星期一 150 2000 18 001a.txt 001b.txt
对应:终点站 航班号 飞机号 星期 总票数 票价 余票数 已购票文件名 候补订票文件名

工程文件打包下载地址:

https://download.csdn.net/download/qq_33966112/11095091

C++课程设计:航空客运订票系统相关推荐

  1. (附源码)ssm航空客运订票系统 毕业设计 141612

    SSM航空客运订票系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针 ...

  2. ssm航空客运订票系统 毕业设计源码141612

    SSM航空客运订票系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针 ...

  3. C语言版-数据结构-期末课程设计-大作业(航空客运订票系统)附源码+实验文档

    设计题目:航空客运订票系统 本项目涉及到的知识:指针.结构体数组.链表.参数传递 [问题描述]航空客运订票的业务活动包含查询航线和客票预订信息,可以办理订.退票等,用c语言设计一个程序模拟实现. 一. ...

  4. win API之航空客运订票系统(课程设计)

    这学期的数据结构课结了,上个周做了课程设计,在此总结下(晒一下) 先是老师给了选题,我选了航空客运订票系统这个选题. 这个系统定义的也很简单,就是两个单链表,一个航班的,一个顾客的,再对它俩进行遍历. ...

  5. 航空客运订票系统C语言程序设计,航空客运订票系统.doc

    洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 数据结构课程设计 设计题目 航空客运订票系统 专 课 程 设 计 任 务 书 设计题目:航空客运订票系统___________________ ...

  6. C++数据结构 航空客运订票系统

    航空客运订票系统  问题描述:业务主要包括查询航线和客票预订的信息.客票预订和办理 退票等.  基本要求: 系统必须能存储以下数据信息: 航班信息:飞机抵达城市.航班号.飞机号.起降时间.票价.总 ...

  7. 航空客运订票系统(C语言,软件用的DEV)

    这两天整理之前的作业代码,把自己一点一点敲出来的系统又看了一下,挑几个发出来供大家参考.想要源码.报告可以找我啦,代码的注释之前写的都是非常详细的! 但是不是无偿的啦(不坑,一杯奶茶喽,不做白嫖怪啦^ ...

  8. 【数据结构应用】航空客运订票系统

    目录 前言 一.作业要求介绍 二.各个函数的实现 1.头文件总结需要的功能 (1)结构体的定义 (2)各个功能的函数 2.各个函数的具体实现 (1)初始化 (2)打印航班信息表 (4)查找航班信息 ( ...

  9. C语言课程设计之火车订票系统

    C语言课程设计之火车订票系统 下载链接 运行效果图 文档报告 答辩PPT 下载链接 运行效果图 文档报告 答辩PPT

最新文章

  1. 一个合格的程序猿编程
  2. 零基础Java学习之成员变量
  3. 放置奇兵 算法 月度活动 破碎时空记录 第七关 阿姨(阿伊达)+暗战(阿斯布)
  4. wireshark相关协议详解和nc命令建立对话
  5. 信息学奥赛一本通 1099:第n小的质数 | OpenJudge NOI 1.5 44
  6. 想象中的论文答辩和真实的论文答辩,我太难了……
  7. redis hashmap过期_看完这篇再也不怕 Redis 面试了
  8. bzoj 2553 [BeiJing2011]禁忌——AC自动机+概率DP+矩阵
  9. 基于麻雀搜索的PID神经网络解耦控制算法 - 附代码
  10. 云计算的工作原理是什么?
  11. HTTP协议和APACHE
  12. API 接口加密及请求参数加密
  13. c语言加油站仿真实验报告,c程序队列实现模拟加油站研讨.ppt
  14. oracle错误信息提示中英文显示切换
  15. API 夺命四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?...
  16. 小米5s 小米6 MIUI 系统 删除温控 破解限制
  17. Flutter 使用自定义 fluro 路由转场动画实现个性化页面切换
  18. Python模拟Tim登录界面
  19. Matlab三维绘图------三维曲线图
  20. ServerSocket和Socket连接

热门文章

  1. “应聘、户口、档案、合同法”经验交流
  2. 认证机制强化个人信息保护,促进数据合规利用
  3. Fomo3D:天使还是魔鬼?
  4. NOJ-1143-字母转换
  5. 元宇宙游戏开发 中国元宇宙游戏开发商蓄势待发
  6. 串的数据元素为什么只是一个字符?
  7. mysql中判断NULL和空字符串
  8. xmanager远程Qt键盘错位或者重复输入问题
  9. cocos2dx AudioEngine(声音播放)音效播放结束判断测试和背景音乐播放
  10. PHP ladp和ladps区别