C++ 车票管理系统

这是一个用 C++ 编写的车票管理系统,可以实现录入车票信息、浏览车票信息、查询车票信息、售票、退票等功能。

代码如下:

#include <bits/stdc++.h>
using namespace std;
time_t t = time(NULL);  // 设置当前时间
static int n = 0;  // 总车次
void menu();// 主菜单

class bus   // 车票车次类
{
public:
    int hour;   // 发车时间(时)
    int minute;     // 发车时间(分)
    char start_station[20];     // 起始站
    char end_station[20];   // 终点站
    double runtime;    // 行车时间
    int busload;    // 载客量
    int ys;     // 已售票
};

class sy   // 管理系统类
{
private:
    bus bs;
public:
    void input();// 录入车次信息
    void browse();// 浏览车次信息
    void search_train();// 按车次查询
    void search_station();// 按终点站查询

    void sp();// 售票
    void tp();// 退票
    void display(int a);// 显示各车次信息
    friend void save();// 保存数据
    friend void read();// 初始化函数,读取'数据.txt'的数据
};

sy ticket[1000];
/*  将车次信息存储在文本文件数据.txt中  */
void save()
{
    ofstream file("数据.txt", ios_base::out);// 写操作,写入文件
    int i;
    for( i=0; i<n; i++ )
    {
        file << i+1 << " ";
        file << ticket[i].bs.hour << " ";
        file << ticket[i].bs.minute << " ";
        file << ticket[i].bs.start_station << " ";
        file << ticket[i].bs.end_station << " ";
        file << ticket[i].bs.runtime << " ";
        file << ticket[i].bs.busload << " ";
        file << ticket[i].bs.ys << endl;
    }
    file.close();// 关闭文件
    cout << "信息已存入文件" << endl;
}
/*  录入车次信息  */
void sy::input()
{
    cin >> ticket[n].bs.hour >> ticket[n].bs.minute;
    cin >> ticket[n].bs.start_station >> ticket[n].bs.end_station;
    cin >> ticket[n].bs.runtime >> ticket[n].bs.busload >> ticket[n].bs.ys;
    n++;
    save();
}

/*  浏览车次信息  */
void sy::browse()
{
    tm *pt = localtime(&t);
    cout << "当前时间: " << setw(2) << pt->tm_hour << ":";
    cout << pt->tm_min << endl;
    cout << "车次信息:" << endl;
    cout << "班次号\t" << "发车时间  " << "起始站  " << "终点站  " << "行车时间  " << "载客量  " << "已售票  " << "状态" << endl;
    int j;
    for( j=0; j<n; j++ )
    {
        ticket[j].display(j+1);
        cout << "    ";
        if( ticket[j].bs.hour < pt->tm_hour )
        {
            cout << "此班已发出" << endl;
        }
        else
        {
            if( ticket[j].bs.minute <= pt->tm_min && ticket[j].bs.hour == pt->tm_hour )
            {
                cout << "此班已发出" << endl;
            }
            else
            {
                cout << "此班未发出" << endl;
            }
        }
    }
}
/* 按车次查询  */
void sy::search_train()
{
    int s;
    cout << "输入要查询的车次: ";
    cin >> s;
    cout << "班次号\t" << "发车时间  " << "起始站  " << "终点站  " << "行车时间  " << "载客量  " << "已售票" << endl;
    cout << s << "\t" << ticket[s-1].bs.hour << ":" << ticket[s-1].bs.minute << "\t" << ticket[s-1].bs.start_station << "\t" << ticket[s-1].bs.end_station << "\t" << ticket[s-1].bs.runtime << "\t" << ticket[s-1].bs.busload << "\t" << ticket[s-1].bs.ys << endl;
}
/*  按终点站查询  */
void sy::search_station()
{
    char s[20];
    int flag = 0;
    cout << "要查询的终点站: ";
    cin >> s;
    int j;
    cout << "查询结果:" << endl;
    cout << "班次号\t" << "发车时间  " << "起始站  " << "终点站  " << "行车时间  " << "载客量  " << "已售票" << endl;
    for( j=0; j<n; j++ )
    {
        if( strcmp( s, ticket[j].bs.end_station ) == 0 )
        {
cout << j+1 << "\t" << ticket[j].bs.hour << ":" << ticket[j].bs.minute << "\t" << ticket[j].bs.start_station << "\t" << ticket[j].bs.end_station << "\t" << ticket[j].bs.runtime << "\t" << ticket[j].bs.busload << "\t" << ticket[j].bs.ys << endl;
        }
    }
}
/*  售票  */
void sy::sp()
{
    int flag = 0;
    int a;
    cout << "输入售票班次号: ";
    cin >> a;
    tm *pt = localtime(&t);
    if( ticket[a-1].bs.ys<ticket[a-1].bs.busload )
    {
        if(ticket[a-1].bs.hour>pt->tm_hour)
        {
            flag = 1;
        }
        else
        {
            if(ticket[a-1].bs.hour==pt->tm_hour && ticket[a-1].bs.minute>pt->tm_min)
            {
                flag = 1;
            }
        }
    }
    if(flag==1)
    {
        cout << "售票成功" << endl;
        ticket[a-1].bs.ys++;
    }
    else
    {
        cout << "票已售完" << endl;
    }
}
/*  退票  */
void sy::tp()
{
    int a;
    cout << "退票的车次: ";
    cin >> a;
    tm *pt = localtime(&t);
    int flag = 0;
    if(ticket[a-1].bs.hour>pt->tm_hour)
    {
        flag = 1;
    }
    else
    {
        if(ticket[a-1].bs.hour==pt->tm_hour && ticket[a-1].bs.minute>pt->tm_min)
        {
            flag = 1;
        }
    }
    if(flag==1)
    {
        cout << "退票成功" << endl;
        ticket[a-1].bs.ys--;
    }
    else
    {
        cout << "退票失败" << endl;
    }
}
/*  显示  */
void sy::display( int a )
{
    cout << a << "\t" << bs.hour << ":";
    if(bs.minute==0)
    {
        cout << "00";
    }
    else
    {
        cout << bs.minute;
    }
    cout << "\t " << " " << bs.start_station << "\t" << "  " << bs.end_station
        << "       " << bs.runtime << "       " << bs.busload << "     " << bs.ys;
}
/*  初始化函数,从数据.txt中读出信息  */
void read()
{
    ifstream file( "数据.txt", ios_base::in );
    while(!file.eof())
    {
        file >> ticket[n].bs.hour;
        file >> ticket[n].bs.minute;
        file >> ticket[n].bs.start_station;
        file >> ticket[n].bs.end_station;
        file >> ticket[n].bs.runtime;
        file >> ticket[n].bs.busload;
        file >> ticket[n].bs.ys;
        n++;
    }
    file.close();
}
/*主菜单*/
void menu()
{
    cout << "~~~~~~~~~~~~~~~~欢迎使用车票管理系统!~~~~~~~~~~~~~~~~" << endl;
    cout << "              =========================" << endl;
    cout << "                  1.录入车票信息        " << endl;
    cout << "                  2.浏览车票信息        " << endl;
    cout << "                  3.查询车票信息        " << endl;
    cout << "                  4.售票                " << endl;
    cout << "                  5.退票                " << endl;
    cout << "                  6.退出系统            " << endl;
}
int main()
{
    menu();
    int m;
    int f;
    int z = 1;
    sy p;
    while(z==1)
    {
        cout << "\n请选择: ";
        cin >> m;
        switch(m)
        {
            case 1: p.input();break;// 录入车票信息
            case 2: p.browse();break;// 浏览车票信息
            case 4: p.sp();break;// 售票
            case 5: p.tp();break;// 退票
            case 6: z=0;break;// 退出系统
            case 3:
                cout << "查询方式(按车次查询输入1,按终点站查询输入2):";
                cin >> f;
                if(f==1)
              {
                    p.search_train();
                }
                if(f==2)
                {
                    p.search_station();
                }
        }
    }
    return 0;
}

代码说明:

  1. 类定义:
    • bus: 定义了车票车次类,包含了发车时间、起始站、终点站、行车时间、载客量和已售票等信息。
    • sy: 定义了管理系统类,包含了录入车次信息、浏览车次信息、查询车次信息、售票、退票等方法。
  2. 文件操作:
    • save(): 将车次信息保存到'数据.txt'文件中。
    • read(): 从'数据.txt'文件中读取车次信息。
  3. 时间操作:
    • tm *pt = localtime(&t);: 将当前时间转换为本地时间,并将其存储在结构体指针 pt 中。
    • cout << pt->tm_min << endl;: 输出当前时间的分钟数。
  4. 主菜单:
    • menu(): 显示主菜单,包括录入车票信息、浏览车票信息、查询车票信息、售票、退票和退出系统等选项。
  5. 主函数:
    • 从主菜单中选择操作,并执行对应的方法。

使用方法:

  1. 编译并运行程序。
  2. 选择相应的操作,例如:
    • 录入车票信息:输入车次号、发车时间、起始站、终点站、行车时间、载客量和已售票数。
    • 浏览车票信息:显示所有车次信息,包括车次号、发车时间、起始站、终点站、行车时间、载客量和已售票数。
    • 查询车票信息:可以按车次或终点站进行查询。
    • 售票:输入车次号,进行售票操作。
    • 退票:输入车次号,进行退票操作。
    • 退出系统:退出程序。

注意:

  • 运行程序时,需要确保'数据.txt'文件存在,否则程序将无法正常运行。
  • 在程序运行过程中,所有数据都将保存在'数据.txt'文件中,如果需要清空数据,请手动删除'数据.txt'文件。

代码功能:

  • 录入车次信息
  • 浏览车次信息
  • 按车次查询车次信息
  • 按终点站查询车次信息
  • 售票
  • 退票

代码优点:

  • 代码结构清晰,易于理解和维护。
  • 功能完善,可以满足基本的车票管理需求。
  • 使用了文件操作,可以保存车次信息,方便下次使用。

代码改进:

  • 可以增加一些功能,例如:
    • 支持用户登录和注册。
    • 支持在线支付。
    • 支持打印车票。
  • 可以使用数据库来存储车次信息,提高数据管理效率。
  • 可以使用图形界面,提高用户体验。
C++ 车票管理系统 - 售票、退票、查询

原文地址: https://www.cveoy.top/t/topic/qwJY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录