c++实现车票管理系统

车票管理系统: 编程实现车票管理系统,车票信息包括车次号、
发车时间、起始站、终点站、行车时间、载客量、已售票等,如
班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数
1 8:00 郫县 广汉 2 45 30
2 6:30 郫县 成都 0.5 40 40
3 7:00 郫县 成都 0.5 40 20
4 10:00 郫县 成都 0.5 40 2
功能要求:

(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:可按班次号查询 ,可按终点站查询
(4)售票和退票功能
        A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数

       B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数

#include<iostream>
#include<iomanip>
#include<cstring>
#include<ctime>
#include<fstream>

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::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;
}

/* 按车次查询  */
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;
        }
    }
}

/*  初始化函数,从数据.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 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 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;
}
#include <iostream> #include <fstream> #include <string> #include<time.h> using namespace std; void welcome(); //欢迎子函数 void choose(); //选择子函数 void banciluru(); //班次录入子函数 void liulanbancixinxi(); //浏览班次信息子函数 void shoupiao(); //售票子函数 void tuipiao(); //退票子函数 void quit(); //退出子函数 void chaxun(); //查询子函数 int loading(); //文件载入子函数 const int MAX=20; //使数组最大值可调 const int N=50; struct time //时间结构体,为了与系统时间做比较. { int hour; int minutes; }; struct ticket //车票结构体,包含车次,时间结构体,起点,终点,行车时间,额定载客量,已订票人数 { int Number; struct time Setout; char Qidian[MAX]; char Zhongdian[MAX]; float Lasttime; int Fixnumber; int Fixednumber; }car[N]; //主函数 int main() { welcome(); return 0; } //欢迎子函数 void welcome() { cout<<"________________________________________________________"<<endl; cout<<"| 欢 * 迎 * 使 * 用 * 火 * 车 * 票 * 管 * 理 * 系 * 统 |"<<endl; cout<<"| |"<<endl; cout<<"| 本管理系统有以下功能: |"<<endl; cout<<"| |"<<endl; cout<<"| 1 班次录入 |"<<endl; cout<<"| 2 浏览班次信息 |"<<endl; cout<<"| 3 查询火车信息 |"<<endl; cout<<"| 4 购买火车票 |"<<endl; cout<<"| 5 退订火车票 |"<<endl; cout<<"| 6 退出系统 |"<<endl; cout<<"|______________________________________________________|"<<endl; cout<<"请输入所要执行功能前的数字: "<<endl; choose(); } //选择子函数 void choose() { string i; cin>>i; if(i=="1") banciluru(); if(i=="2") liulanbancixinxi(); if(i=="3") chaxun(); if(i=="4") shoupiao(); if(i=="5") tuipiao(); if(i=="6") quit(); else { cout<<"输入有误!请在数字1-5之间重新您的输入选择!"<<endl; choose(); } } //班次录入子函数 void banciluru() { string t="1"; ofstream outfile; outfile.open("班次信息.txt",ios::app); for(int i=0;t=="1";i++) { cout<<"请输入需要添加的火车班次:"<<endl; cin>>car[i].Number; cout<<"请输入此班次发车时间(格式:先输入小时,回车,再输入分钟):"<<endl; cin>>car[i].Setout.hour; cin>>car[i].Setout.minutes; cout<<"请输入出发:"<<endl; cin>>car[i].Qidian; cout<<"请输入终点:"<<endl; cin>>car[i].Zhongdian; cout<<"请输入行车时间:"<<endl; cin>>car[i].Lasttime; cout<<"请输入额定载客量:"<<endl; cin>>car[i].Fixnumber; cout<<"请输入已订票人数:"<<endl; cin>>car[i].Fixednumber; outfile<<car[i].Number<<" "<<car[i].Setout.hour<<" "<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl; cout<<"是否继续录入?(是请输1,否请输任意键返回主菜单)"<<endl; cin>>t; if(t!="1") { welcome(); } } outfile.close(); cout<<"输入回车键返回"<<endl; getchar(); getchar(); welcome(); } //浏览班次子函数 void liulanbancixinxi() { int c; c=loading(); cout<<"班次"<<" "<<"发车时间"<<" "<<"起点"<<" "<<"终点"<<" "<<"行车时间"<<" "<<"额定载客量"<<" "<<"已订票人数"<<endl; for(int i=0;i<c;i++) { cout<<car[i].Number<<" "<<car[i].Setout.hour<<":"<<car[i].Setout.minutes<<" "<<car[i].Qidian<<" "<<car[i].Zhongdian<<" "<<car[i].Lasttime<<" "<<car[i].Fixnumber<<" "<<car[i].Fixednumber<<endl; time_t tval; struct tm *now; tval = time(NULL); now = localtime(&tval); if((now->tm_hour==car[i].Setout.hour&&now->tm_min>car[i].Setout.minutes)||(now->tm_hour>car[i].Setout.hour)) cout<<"此车已发出"<<endl; } cout<<"输入回车键返回"<<endl; getchar(); getchar(); welcome(); } //车次查询子函数 void Numbersearch(); void Finalsearch(); void chaxun() { string t; cout<<"1.按班次查询"<<endl; cout<<"2.按终点查询"<<endl; cout<<"请输入您想选择的查询方法前的数字:"<<endl; cin>>t; if(t=="1") Numbersearch(); if(t=="2") Finalsearch(); if(t!="1"||t!="2") { cout<<"输入有误,请重新输入"<<endl; chaxun(); } }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值