QT汽车客运公司售票系统(大作业)

题目要求

[要求] 设某客运公司每日都发售今、明、后三天的班次车票。该系统需创建和管理以下信息: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标题在这改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);
}

QT获取QMessageBox 的返回值,判断点击了那个按钮

原码

建议私聊博主

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItsNorth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值