# 基于C++的民航订票系统的设计与实现
# 一、需求分析
设计一个民航管理系统,使更广大的用户群体可以借助这个平台订飞机票。
C++作为一个面向对象的语言,利用多态性和封装性可以更好地表达出这些功能,相比 JAVA 等语言,C++具STL,可以表达更强的封装性。
# 二、程序的主要功能
- 登录和注册用户,管理员的登录
- 存储用户的身份验证信息,账户信息,历史购票记录
- 用户使用地址或者是航班号对特定的航班进行查询
- 用户可以修改自己的密码、账户号和账户密码
- 用户能够对航班信息进行确认
- 用户对余额进行充值操作
- 管理员可以对航班进行新建、修改、删除等操作
# 三、程序运行平台
- qt-opensource-windows-x86-msvc2013_64-5.4.1+ Qt Creator 3.3.2
- Microsoft Visual C++ Compiler 14.0 (amd64)
具体操作如下:
```c++
qmake.exe -r -spec win32-msvc2013 CONFIG+=debug
jom.exe -f Makefile.Debug cl -c -nologo -Zm200-Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc/Fddebug\CPP_Curriculum_Design.pdb -DUNICODE -DWIN32 -DQT_WIDGETS_LIB-DQT_GUI_LIB -DQT_CORE_LIB
```
注:程序需要手动在build目录下建立userdb.dat,flightdb.dat 两个空二进制文件作为数据存储
# 四、系统总框架图
![](http://www.write-bug.com/myres/static/uploads/2021/10/19/c00533f2608e12d40036dae2b84601b7.writebug)
# 五、模块分析
- **登录模块**
用户输入用户名和密码进行登录操作,从而得到权限进入主界面
- **注册模块**
用户新建一个用户
- **乘客模块**
乘客可以通过城市或者是航班号对特定航班进行查询
- **查询模块**
系统显示符合条件的航班,让用户进行选择然后进行订票
- **确认模块**
将航班详细信息显示出来,同时提示余额变化情况,以让用户进行最后确认
- **修改信息模块**
用户对自己的密码,卡账号和密码进行修改
- **充值模块**
用户通过输入正确的卡账号和密码进行充值操作
- **查看历史订票信息模块**
用户查看自己曾经预订过的航班
- **管理员模块**
管理员用户对航班进行添加,修改和删除
# 六、类的说明
**User**:
```c++
class User
{
protected:
string Name; // 姓名
string Password; // 密码
public:
User() {} // 默认构造函数
User(string,string); // 姓名和密码的构造函数
string getName() { return Name;}
string getPassword() { return Password; }
void setPassword(string s) { Password = s;}
void setName(string s) { Name = s;}
virtual void editInfo(string,string,string) = 0; // 虚函数用来让子类根据情况来修改信息
};
```
**Passenger**:
```c++
class Passenger : public User
{
string Id; // 身份证号
string CreditCardId; // 信用卡账号
string CreditCardPassword; // 信用卡密码
int CreditCardMoney; // 信用卡金额
public:
vector<FlightInfo> bookInfo; // vector容器保存的已经订购的航班信息
Passenger() {} // 默认构造函数
Passenger(const Passenger&); // 拷贝构造函数
Passenger(string,string); // 有账号和密码的构造函数
Passenger& operator = (const Passenger&); // 重载赋值运算符
void setId(string);
void setCreditCardId(string);
void setCreditCardPassword(string);
void setCreditCardMoney(int);
bool validateCreditCard(string,string); // 验证信用卡信息
bool recharge(int); // 充值账户
string getCreditCardId();
string getCreditCardPassword() ;
int getCreditCardMoney() ;
string getId();
void editInfo(string,string,string); // 编辑信息
};
```
**Manager :**
```c++
class Manager : public User
{
string phonenumber;
string extra; // 管理人员的备注信息
public:
void editInfo(string,string,string); // 修改信息
};
```
**UserManager:**
```c++
class UserManager
{
vector<Passenger> userlist; // vector容来用来存放用户清单
public:
UserManager(); // 构造函数
UserManager(const UserManager&); // 拷贝构造函数
~UserManager(); // 析构函数
void findUserByName(string,Passenger&); // 通过名字来查找用户
bool addUser(string,string); // 增加用户
bool deleteUser(string); // 删除用户
bool editUser(string,const Passenger&); // 编辑用户信息
bool validate(string,string); // 验证身份信息
};
```
**FlightInfo:**
```c++
class FlightInfo
{
string No; // 航班号
string StartCity; // 起飞地点
string EndCity; // 降落地点
string StartDate; // 日期
string StartTime; // 起飞时间
string EndTime; // 降落时间
int FirstTicket; // 头等舱剩余票数
int FirstPrice; // 头等舱价格
int SecondTicket; // 二等舱剩余票数
int SecondPrice; // 二等舱价格
public:
FlightInfo() {} //默认构造函数
FlightInfo(string, string); //带两个参数的构造函数,参数分别为航班号和日期
~FlightInfo(); //析构函数
FlightInfo(const FlightInfo&); // 拷贝构造函数
FlightInfo& operator = (const FlightInfo&); //重置赋值运算符
void setDateTime(string,string,string);//设置航班起飞的日期和时间
void setFirstPrice(int,int); //设置头等舱的价格和剩余票数
void setSecondPrice(int,int); //设置二等舱的价格和剩余票数
void setBaseInfo(string,string);//设置出发地和目的地
void setNo(string); //设置航班号
string getNo() { return No; }
string getStartCity() {return StartCity;}
string getEndCity() {return EndCity;}
string getStartDate() {return StartDate;}
string getStartTime() { return StartTime;}
string getEndTime() { return EndTime;}
int getFirstTicket() {return FirstTicket;}
int getFirstPrice() {return FirstPrice / 100;} // 为方便操作,将数值扩大一百倍来表示角和分,返回时则缩小一百倍
int getSecondTicket() {return SecondTicket;}
int getSecondPrice() {return SecondPrice / 100;}
};
```
**FlightManager**:
```c++
class FlightManager
{
public:
vector<FlightInfo> flightlist; // 用vector容器来保存flighinfo对象,表示航班信息
FlightManager(); // 构造函数
~FlightManager(); // 析构函数
FlightManager(const FlightManager&); // 拷贝构造函数
bool addFlight(const FlightInfo&); // 增加航班
bool editFlight(string,string,const FlightInfo&); // 编辑航班
bool deleteFlight(string,string); // 删除航班
void findFlightByPlace(string,string,string,vector<FlightInfo>&); // 给定起降位置来搜索航班
void findFlightByNo(string,string,vector<FlightInfo>&); // 给定航班号来搜索航班
};
```
# 七、关键函数
```c++
// 使用md5对密码进行处理
bool UserManager::addUser(string name, string password);
bool UserManager::validate(string name, string password);
```
# 八、总结
**不足**
- Qt GUI编程是第一次使用,在环境调试过程就花费了许多的时间。在许多细节上也存在很多的问题和缺陷,整个程序的效率受此影响并不高
- 代码略显臃肿
- 文件读写某些情况还是会出现问题
**体会**
- 文件读写过程非常的繁琐,而且十分容易出错
精选_毕业设计_基于C++的民航订票系统的设计与实现_完整源码
版权申诉
5星 · 超过95%的资源 61 浏览量
2022-03-05
10:55:21
上传
评论
收藏 374KB ZIP 举报
工具盒子
- 粉丝: 60
- 资源: 1313
最新资源
- 测试aaaaaaabbbbb
- VID20240521070643.mp4
- Android系统原理与开发学习要点详解-培训课件.zip
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈