火车票购票系统 基于QT(C++)

buyer

#ifndef BUYER_H
#define BUYER_H
#include<QString>

class buyer
{
public:
    buyer();
    void getinformation(QString n,QString i,QString s,QString e,int p);
    QString getname();
    QString getidentify();
    QString getstart();
    QString getend();
    int getprise();
    bool gettorf();
    void setfalse();
    void settrue();
    void delete_information();
private:
    QString name,identfy,start,end;
    int prise;   //票价,为sum(distance)*1.5
    bool torf;   //判断是否买票,买票记为true,否则为false1

};

#endif // BUYER_H

mainwidget

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include<buyer.h>
#include<station.h>
namespace Ui {
class mainWidget;
}

class mainWidget : public QWidget
{
    Q_OBJECT

public:
    explicit mainWidget(QWidget *parent = 0);
    ~mainWidget();
    void searching();    //查询余票
    void buying();         // 购票
    void cancell(QString nameoriden);        //退票
     void seek_information(QString nameoriden);  // 查询车票信息
     double get_sum_prise(QString station1,QString station2);   //获取票价
     void settickets(QString station1,QString station2);  //买票时票数-1
     void addtickets(QString station1,QString station2);  //退票后票数+1


private slots:
     void on_pushButton_2_clicked();

     void on_book_clicked();

     void on_pushButton_3_clicked();

     void on_pushButton_4_clicked();

private:
    Ui::mainWidget *ui;
    buyer buyerinf[100];   //存放buyer的信息
    station Station[10];     //存放车站信息

};

#endif // MAINWIDGET_H

station

#ifndef STATION_H
#define STATION_H
#include<QString>

class station
{
public:
    station();
    void setsname(QString sn);
    void setdistance(double d);
     QString getsname();
     int getremained();
     void numoticket();
     int get_distance();
     void add_ticket();
private:
    QString sname;    //车站名
   double distance;    //与下一站间的距离
   int remained;    //余票(若为A-C间的余票,则取A-B中reminded最小值
};

#endif // STATION_H

#include "buyer.h"

buyer::buyer()
{
    torf = false;     //初始化状态为未买票

}
void buyer::getinformation(QString n, QString i, QString s, QString e, int p)
{
    name = n;
    identfy = i;
    start = s;
    end = e;
    prise = p;
    torf = true;
}


QString buyer::getname()
{
    return name;
}

QString buyer::getidentify()
{
    return identfy;
}

QString buyer::getstart()
{
    return start;
}

QString buyer::getend()
{
    return end;

}

int buyer::getprise()
{
    return prise;
}

bool buyer::gettorf()
{
    return torf;
}
void buyer::setfalse()
{
    torf = false;
}
void buyer::settrue()
{
    torf = true;
}

void buyer::delete_information()  // 退票时撤销信息
{
    name = "0";
    identfy = "0";
}

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    mainWidget w;
    w.show();

    return a.exec();
}

#include "mainwidget.h"
#include "ui_mainwidget.h"
#include<buyer.h>
#include<QTextBrowser>
#include<QMessageBox>
#define  prise_per_k  1.5    /*每公里票价*/
mainWidget::mainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::mainWidget)
{
    Station[0].setdistance(110);    //车站初始化
    Station[0].setsname("A");
    Station[1].setdistance(120);
    Station[1].setsname("B");
    Station[2].setdistance(130);
    Station[2].setsname("C");
    Station[3].setdistance(140);
    Station[3].setsname("D");
    Station[4].setdistance(50);
    Station[4].setsname("E");
    Station[5].setdistance(60);
    Station[5].setsname("F");
    Station[6].setdistance(70);
    Station[6].setsname("G");
    Station[7].setdistance(90);
    Station[7].setsname("H");
    Station[8].setdistance(80);
    Station[8].setsname("I");
    Station[9].setdistance(60);
    Station[9].setsname("J");


    ui->setupUi(this);
}

mainWidget::~mainWidget()
{
    delete ui;
}

void mainWidget::searching()                 //查询余票
{   QString s_station;    /*起点站*/
    QString e_station;    /*终点站*/
    s_station = ui->Start->currentText();
    e_station = ui->End->currentText();
    int min_ticket;
    bool error = false;         /*错误标记*/
    for(int i=0;i<10;i++)
     {
        if(s_station.compare(e_station)==0)
        {
            error = true;           /*车站选择错误*/
            ui->show->setText("路线选择有误,请重新选择路线!");
            break;
        }

        if(Station[i].getsname().compare(s_station) == 0)
           {
                min_ticket = Station[i].getremained();
                for(int j=i;Station[j].getsname().compare(e_station)!=0;j++)
                   {
                         if(j == 9)        /*车站填写顺序错误*/
                          {
                          error = true;           /*车站选择错误*/
                          break;
                          }
                         if(Station[j].getremained()<min_ticket)
                               {
                                  min_ticket=Station[j].getremained();
                               }


                  }
                if(error == false)     /*未发生错误*/
                {
                    double ticket_prise = this->get_sum_prise(s_station,e_station);
                  ui->show->setText(QString("%1-%2剩余车票:%3;票价:%4").arg(s_station).arg(e_station).arg(min_ticket).arg(ticket_prise)); /*输出剩余车票*/
                   break;
                }
                else{
                    ui->show->setText("路线选择有误,请重新选择路线!");
                    break;
                }
           }


     }
    }




void mainWidget::buying()                   //购票
{

     for(int i=0;i<100;i++)
     {
         if(ui->Name->text().isEmpty()&&ui->Identify->text().isEmpty())
         {
             ui->show->setText("请输入姓名或身份证");
             break;
         }

                if(buyerinf[i].gettorf() == false)
        {           QString buyername,buyerIden,s_station,e_station;
                    double Prise;
                    buyername = ui->Name->text();
                    buyerIden = ui->Identify->text();
                    s_station = ui->Start->currentText();
                    e_station = ui->End->currentText();
                    Prise = this->get_sum_prise(s_station,e_station);
                    int ret = QMessageBox::question(this,"提示","确认购票");

                    if(ret == QMessageBox::Yes)
                 {
                        buyerinf[i].getinformation(buyername,buyerIden,s_station,e_station,Prise);/*将键盘中输入的姓名,身份证等信息输入到信息数组中*/
                        buyerinf[i].settrue();                       /*标记买票*/
                        this->settickets(s_station,e_station);       /*票数-1*/
                        ui->show->setText(QString("购票成功! 路线:%1-%2").arg(s_station).arg(e_station));               /*文本框中输出购票完成提示*/
                        break;
                 }
                 else{
                     break;
                 }

        }
    }

}

void mainWidget::cancell(QString nameoriden)              //退票
    {
                     for(int i=0;i<100;i++)
               {
                      if(nameoriden.compare(buyerinf[i].getidentify())==0||nameoriden.compare(buyerinf[i].getname())==0)
                          {
                                  if(buyerinf[i].gettorf() == false)
                                   {
                                        ui->show->setText("您未购票");      /*输出未购票提示*/
                                    }


                               else{
                                   int ret = QMessageBox::question(this,"提示","确认退票");              /*对话框--是否退票*/
                                    if(ret == QMessageBox::Yes)    /*是则*/
                                    {
                                        buyerinf[i].setfalse();
                                        buyerinf[i].delete_information();   /*撤销购票信息*/
                                       this->addtickets(buyerinf[i].getstart(),buyerinf[i].getend());
                                        ui->show->setText("退票成功!");
                                             break;
                                    }
                                 }

                                  break;

                          }
                      if(i == 99)
                      {
                           ui->show->setText("对不起,您未购票。"); /*输出未购票提示*/
                      }

                }
    }

void mainWidget::seek_information(QString nameoriden)
{
         for(int i=0;i<100;i++)
    {
           if(nameoriden.compare(buyerinf[i].getidentify())==0||nameoriden.compare(buyerinf[i].getname())==0)
        {
                 if(buyerinf[i].gettorf() == false)
                      {
                                 ui->show->setText("对不起,您未购票");
                      }
                else
                    {
                         ui->show->setText(QString("姓名:%1  身份证:%2  出发站:%3  到达站:%4  票价:%5").arg(buyerinf[i].getname()).arg(buyerinf[i].getidentify()).arg(buyerinf[i].getstart()).arg(buyerinf[i].getend()).arg(buyerinf[i].getprise()));
                         break;
                    }
         }
        if(i == 99)
        {
             ui->show->setText("对不起,您未购票");          /*查无此人*/
           }
    }
}



void mainWidget::on_book_clicked()   //点击购票
{
    this->buying();
}

void mainWidget::on_pushButton_2_clicked()  /*点击查询余票*/
{
  this->searching();
}

void mainWidget::on_pushButton_3_clicked()  /*点击查询购票信息*/
{
    QString name1,identify1;
    name1 = ui->Name->text();
    identify1 = ui->Identify->text();


    if(!name1.isEmpty())              /*通过姓名查询购票信息*/
    this->seek_information(name1);


    else if(!identify1.isEmpty())     /*通过身份证查询购票信息*/
      this->seek_information(identify1);
}

void mainWidget::on_pushButton_4_clicked()  /*点击退票*/
{
    QString name1,identify1;
    name1 = ui->Name->text();
    identify1 = ui->Identify->text();
    if(!name1.isEmpty())
   this->cancell(name1);
    else if(!identify1.isEmpty())
        this->cancell(identify1);
}

double mainWidget::get_sum_prise(QString station1, QString station2)  /*获取票价*/
{       double sum=0;
    for(int i=0;i<10;i++)
    {
        if(Station[i].getsname().compare(station1)==0)
        {
            for(int j=i;Station[j].getsname().compare(station2)!=0;j++)
            {
                sum+=Station[j].get_distance()*prise_per_k;
            }
         break;
        }

    }
        return sum;
}

void mainWidget::settickets(QString station1, QString station2)
{
    for(int i=0;i<10;i++)
    {
        if(Station[i].getsname().compare(station1)==0)
        {
            for(int j=i;Station[j].getsname().compare(station2)!=0;j++)
            {
                  Station[j].numoticket();
            }
         break;
        }

    }
}

void mainWidget::addtickets(QString station1, QString station2)
{
    for(int i=0;i<10;i++)
    {
        if(Station[i].getsname().compare(station1)==0)
        {
            for(int j=i;Station[j].getsname().compare(station2)!=0;j++)
            {
                  Station[j].add_ticket();
            }
         break;
        }

    }
}
#include "station.h"

station::station()
{
    remained=10;      //初始化车票数
}

void station::setdistance(double d)
{
    distance=d;
}

void station::setsname(QString sn)
{
    sname = sn;
}

QString station::getsname(){
    return sname;
}

int station::getremained()
{
    return remained;
}

void station::numoticket()   //买票后该站票数-1
{
    remained--;
}
void station::add_ticket()
{
    remained++;
}

int station::get_distance()
{
    return distance;
}


  • 5
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值