题目要求
[要求] 设某客运公司每日都发售今、明、后三天的班次车票。该系统需创建和管理以下信息:1、 今、明、后三天每个班次的基本信息:班次号、发车时间、终点城市、座位数量、座位数据集;
2.每个班次各座位的旅客登记表:姓名、身份证号、座号。
系统功能要求如下:
1.创建和管理描述每个班次基本信息的对象;
2.创建和管理描述特定班次的座位信息的对像(售票时实现);
3.办理售票,在班次中添加旅客信息(即座位号),座位号不能重复;
4.办理退票,在班次中删除旅客信息;
5. 基本查询功能;
6. 数据文件读写:文件中包含所有班次信息、每个班次的座位旅客登记等数据;
7. 基本信息显示:1)显示所有班次;2)显示特定班次的座位旅客登记表;
8. 可选功能提升:查询指定班次的余票数和座位号等;
分析功能要求:
1.创建和管理描述每个班次基本信息的对象;
- 创建BusTable类用来描述当前时间的班车班次,以及当天班次总数,实现班次增减
- 实现增加班次功能,创建AddBusSchedule类
- 类中包含从增加班次界面文本框返回键盘输入的班次号,目的地,起点,出发日期,出发时间,座位数相关函数
- 实现增加班次具体界面
- 在MainWindow中实现菜单栏打开新窗口的功能,即把菜单栏和Add界面联系起来
- 实现减少班次功能,创建ReduceBusSchedule类(这里属于是英文文化荒漠)
- 类中包含从删除班次界面文本框返回键盘输入的班次号,出发日期,出发时间相关函数
- 实现删除班次具体界面
- 在MainWindow中实现菜单栏打开新窗口的功能,即把菜单栏和Reduce界面联系起来
- 在这里增加了ErrorOccured类,用来提示操作失误,报错信息通过MessageBox实现
2.创建和管理描述特定班次的座位信息的对像(售票时实现);
- 创造BusPassanger类用来描述每个班次的乘客信息:
- 使用结构体ticket:包括姓名,ID,座位号,以及本票是否已经售出
- 类中包含ticket数组,以及余票数
- 统计余票数,以及通过下标访问票务信息
- 为了方便售票/退票功能,特别增加了changeTotalSpareSeat函数
- 创建RegularBusInfo类用来描述班车具体信息:
- 包含班次,起点,终点,发车日期,发车时间,乘客信息(该班次所有的),座位数
- 以及一些函数来访问和修改以上信息
3.办理售票,在班次中添加旅客信息(即座位号),座位号不能重复;
- 创建SellTicket类用来布置售票界面
- 从菜单栏进入的售票界面返回文本框中信息
- 根据不同的键入信息做出不同的报错信息,以及不同的购票方式:自主选票/随机选票
创建RefundTicke类来布置退票界面4.办理退票,在班次中删除旅客信息;
- 创建RefundTicket类,布置退票界面
- 从菜单栏进入的售票界面返回文本框中信息
- 根据不同的键入信息做出不同的报错信息
- 在MainWIndow中编写槽函数的具体功能:判定班次,判定乘客
5.基本查询功能;
- 查询班次及所有乘客信息
- 由于预设界面与删除班次较为相似,直接使用ReduceBusSchedule类的ui界面
- 在mainWindow设施槽函数将ReduceBusSchedule类的ui界面与ShowPassengerSchedule连接
- 在BusTable类中补充findBus函数,通过班次号检查班次是否存在
- 查询一个乘客的所有票务信息
- 创建NameAndId类,用来读取输入的Name和Id
- 在MainWindow中创建ShowNameAndersonId函数,用来将一个乘客的所有票务信息输出
- 用表格的方式输出班次信息,通过tableWiget实现
6.数据文件读写:文件中包含所有班次信息、每个班次的座位旅客登记等数据;
- BusPassanger类,RegularBusInfo类,BusTable类,MainWindow中分别写入相关信息
- 其中前三个类具体读取,写入的操作,MainWindow’中调用前三个函数
- 为了区分三天的具体信息,将信息分别存入不同txt文档
- 增加了ErrorOccored类中报错种类,分为Critical,Information,About类
以下为具体图片7.基本信息显示:
1)显示所有班次;
- 用表格的方式输出班次信息,通过tableWiget实现
- 通过槽函数将显示和点击“今天”“明天”“后天”联系起来
- 设置文字居中显示
2)显示特定班次的座位旅客登记表;- 用表格的方式输出班次信息,通过tableWiget实现
- 通过槽函数将具体操作与菜单栏连接
- 设置文字居中显示
8.可选功能提升:查询指定班次的余票数和座位号等;
已经在以上功能中实现
9.功能补充:
- 在班次表中添加按钮,可以直接查看班次乘客信息,删除班次
- 在对应班次的乘客信息页面设置按钮,使得可以直接购票和退票
- 在单独乘客信息页面设置按钮,使得可以直接购票和退票
易错点
注意此处只能输入英文,所以要输入英文后再到右下角test处改成中文
想在工具栏写字就直接把它拖下来
MainWIndow标题在这改
整形改成字符串
QString t; t=tr("%1").arg();
字符串改整形
int t=m_tempNumber.toInt();
文件读取信息后显示失败
待优化
- 现在管理员功能和乘客功能写在一起了,应该分离开;分别制作管理员界面和购票界面
- 查询班次乘客信息的时候不能判断班次是否存在
- BusPAssanger类中全是公有,但是私有的话结构体的值无法被真正更改,考虑新建一个Ticket类来优化
- BusTable类中findBus函数和deleteBus函数较为相似应该修改并和为一个函数
一些经验
1.建议每个ui界面.h的命名和界面的形态相关,如我的NameAndId类
2.如果同一个ui界面需要用多次,建议每次在函数最前面加个.setWindowTitle(" "); 用来修改对话框标题
3.在tableWiget上添加按钮的方法//布置按钮 QString str1="乘客信息"; QPushButton *m_button1 = new QPushButton();//按钮需要传值,所以按钮是指针类型的,不加*会报错 m_button1->setText(str1); m_button1->setFixedSize(100,30);//设置按钮大小 connect(m_button1,SIGNAL(clicked()),this,SLOT(on_TableBtnPassenger_Clicked()));//连接槽函数 QHBoxLayout *vlayout=new QHBoxLayout(); QWidget *Widget_btn=new QWidget; vlayout->addWidget(m_button1);//添加按钮 Widget_btn->setLayout(vlayout); ui->tableWidget->setCellWidget(j,6,Widget_btn);//j指的是行数,6是列数 ui->tableWidget->verticalHeader()->setHidden(true); m_button1->setProperty("name", tempBus.m_number);//这里把信息存入按钮中,方便槽函数中调用 m_button1->setProperty("day", tempBus.m_day); //槽函数 void MainWindow::on_TableBtnPassenger_Clicked() { QPushButton *button = dynamic_cast<QPushButton*>(this->sender());//调用按钮传来的值 QString tempBusNumber = button->property("name").toString(); int tempDay=button->property("day").toInt(); if(tempDay==1) ShowPassengerSchedule(table1.findBus(tempBusNumber,tempDay),tempDay); if(tempDay==2) ShowPassengerSchedule(table2.findBus(tempBusNumber,tempDay),tempDay); if(tempDay==3) ShowPassengerSchedule(table3.findBus(tempBusNumber,tempDay),tempDay); }
原码
建议私聊博主