C++实现班车管理系统课程设计

本文实例为大家分享了C++实现班车管理系统的具体代码,供大家参考,具体内容如下

课程设计要求:

一交通公司,班车系统的数据包括如下两部分:

①班车信息:班交及车号、最大载客数、起点、开车时间、终地点、到达终点站时间,单价;

② 乘客信息:车次及车号、身份证号码、姓名、性别、出生年月、座位号。

乘客订票的主要方式是:乘客提供起点、时间、终点、订票数等订票要求,根据事先保存的班数据决定乘客能否订票?只有全部满足了乘客的订票要求并且所订班次有足够的未订座位之后才能完成订票处理,并且修改该班次的未订座位数(每个班的未订座位数的初始值就是该班次的最大载客数);否则,订票失败,并且给出不能订票的原因。

功能要求 :

1、增加班次记录。

2、班次取消。

3、班次查询。

4、班次订票。

5、设计一个菜单,至少具有上述操作要求的基本功能。

程序:

// kcsjbcxxcx.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include
//#include
//#include
using namespace std;
int n=0,m=0;
 
struct date
{
    int year;
    int month;
    int day;
};
struct time
{
int shi;
int fen;
int miao;
};
struct guanli
{
char zh[15];
char mima[20];
}guan1={"zd1123xufei","201211632326"},guan2={"minggezhijia","zd2012cjjxx"};
enum beiz
{
    售票中,可发车,班次取消};
enum qid
{湛江};
enum zhongd
{广州,深圳,东莞,佛山,揭阳,中山,茂名,汕头};
struct banche
{
    int bianhao;        //编号
    enum qid qidian;    //出发地
    enum zhongd zhongdian;    //终点站
    int zuoweishu;        //最大载客量
    int shengyup;        //剩余可载客数
    struct time fache;    //发车时间
    enum beiz beizhu;    //备注信息:是否可购票和发车
    banche *next;
};
struct dingpiaoxx
{
    char xingming[30];
    char zheng[19];
    enum zhongd gpzd;
    struct time shijian;
    struct date riqi;
    int piaoshu;
    dingpiaoxx *NEXT;
};
banche *creat();
banche *insert(banche *head,banche *banc);
banche *charu(banche *hea);
void xiug(banche *hed);
banche *del(banche *head);
void chache(banche *head);
dingpiaoxx *CREAT();
dingpiaoxx *dingpiao(dingpiaoxx *HEAD);
void gaip(dingpiaoxx *HEAD);
void xiup(dingpiaoxx *HED );
void chapiao(dingpiaoxx *HEAD );
dingpiaoxx  *tianjia(dingpiaoxx *HEAD);
dingpiaoxx *shanc(dingpiaoxx *HEAD );
void welc();
//void chushi();
void xuanze();
void weihu();
void kehu();
int denglu();
/*********************下面是主函数******************/
int main()
{
    char key='y';
    welc();
    //chushi();
    while(key!='n'&&key!='N')
    {
    xuanze();
    int a,b;
    cin>>a;
    if(a==1)
    {
    b=denglu();
    if(b==1)
    {int gg=1;
    while(gg=1)
        {weihu();
    cout<<"是否继续?1:是 , 2:否 "<>gg;
    }}
    }
    else if(a==2)
    {
    {int gg=1;
    while(gg=1)
        {kehu();
    cout<<"是否继续?1:是 , 2:否 "<>gg;
    }}
    }
    else
    cout<<"输入错误,请按提示信息输入!"<>key;
    }
 
    return 0;
}
/********************************以下是实现各种功能的函数******************/
banche *head=creat();
banche *creat()        //建立班次信息表
{
    int a,b=1;
    char key;
banche *head,*p1,*p2;
head=NULL;
p1=new(banche);
p2=p1;
cout<<"请输入班车编号"<>p1->bianhao;
p1->qidian=qid(0);
cout<<"请输入班车到达的终点站对应的序号"<>a;
p1->zhongdian=zhongd(a);
cout<<"请输入该班次最大乘客数"<>p1->zuoweishu;
p1->shengyup = p1->zuoweishu;
cout<<"请输入班车出发时间(时、分)"<>p1->fache.shi >>p1->fache.fen ;
p1->beizhu =beiz(0);
while(b==1)
{
n++;
if(n==1)
    head=p1;
else
{
    p2->next=p1;
    p2=p1;
}
p1=new(banche);
cout<<"请输入班车编号"<>p1->bianhao;
p1->qidian=qid(0);
cout<<"请输入班车到达的终点站对应的序号"<>a;
p1->zhongdian=zhongd(a);
cout<<"请输入该班次最大乘客数"<>p1->zuoweishu;
p1->shengyup = p1->zuoweishu;
p1->beizhu =beiz(0);
cout<<"请输入班车出发时间(时、分)"<>p1->fache.shi >>p1->fache.fen ;
cout<<"是否继续,按任意键继续,按N结束"<>key;
if( key =='n'||key=='N')
b=0;
else
    b=1;
}
return head;
}
banche *insert(banche *head,banche *banc)    
{
banche *p0,*p1;
p1=head;
p0=banc;
if(head==NULL)
{
head=p0;
p0->next=NULL;
}
else
{
    head=p0;
    p0->next=p1;
}
n++;
return head;
}
banche *charu(banche *hea)        //添加班次记录
{
    int a,b=1;
    char key;
    while(b)
    {
banche *banc=new banche;
 
cout<<"请输入班车到达的终点站对应的序号"<>a;
banc->zhongdian=zhongd(a);
cout<<"请输入该班次最大乘客数"<>banc->zuoweishu;
banc->shengyup = banc->zuoweishu;
banc->beizhu =beiz(0);
cout<<"请输入班车出发时间(时、分)"<>banc->fache.shi >>banc->fache.fen ;
head=insert(hea,banc);
cout<<"按任意键继续,按“N”结束添加"<>key;
if(key=='n'||key=='N')
    b=0;
}
    return head;
}
void xiug(banche *hed)
{
    banche *p1,*p2,xiu;
    int a,b,c=1;
    cout<<"请输入要修改的班次编号"<>xiu.bianhao ;
    p1=hed;
    while(p1!=NULL||p1->bianhao !=xiu.bianhao)
    {
    p2=p1;
    p1=p1->next ;
    }
if(p1==NULL)
    cout<<"没有这个班次"<>a;
switch (a)
{
    case 1:
        cout<<"请输入新编号"<>p1->bianhao ;
            break;
    case 2:
        cout<<"不可更改信息"<>b ;
        p1->zhongdian=zhongd(b);
            break;
    case 4:
        cout<<"请输入新班次最大载客量"<>p1->zuoweishu  ;
            break;
    case 5:
        cout<<"请输入新数字"<>p1->shengyup  ;
            break;
    case 6:
        cout<<"请输入新时间"<>p1->fache.shi >>p1->fache.fen ;
            break;
    case 7:
        cout<<"请输入新信息:0.售票中,1.可发车,2.班次取消"<>b ;
        p1->beizhu =beiz(b);
            break;
    default :
        cout<<"输入错误!!"<>key;
if(key=='n'||key=='N')
        c=0;}
        cout<<"修改成功!!"<>a;
    while(a!=p1->bianhao &&p1->next !=NULL)
    {
    p2=p1;
    p1=p1->next;
    }
    if(a==p1->bianhao )
    {
        cout<<"编号\t"<<"起点\t"<<"终点\t"<<"座位数\t"<<"发车时间\t"<bianhao <<'\t'<qidian <<'\t'<zhongdian <<'\t'
            <zuoweishu <<'\t'<<" 点"<<" 分"<<'\t'<>key;
        if(key=='Y'||key=='y')
        {
            if(p1==head)
                head=p1->next;
            else
                p2->next=p1->next ;
            cout<<"删除成功!"<>a;
    if(a==1)
    {
        cout<<"编号\t"<<"出发地\t"<<"终点站\t"<<"最大载客量\t"<<"剩余可载客数\t"<<"发车时间\t"<<"备注信息\t"<bianhao <qidian <<'\t'<zhongdian <<'\t'<zuoweishu
        <<'\t' <shengyup <<'\t'<fache.shi<fache.fen <<'\t'<next ;
    }
    }
    else if(a==2)
    {
    banche cha;
    cout<<"请输入要查看班次的编号"<>cha.bianhao ;
    while(p!=NULL&&p->bianhao!=cha.bianhao )
    {
    p1=p;
    p=p->next ;
    }
    if(p==NULL)
        cout<<"该班次不存在,查看失败!!"<bianhao <qidian <<'\t'<zhongdian <<'\t'<zuoweishu
        <<'\t' <shengyup <<'\t'<fache.shi<fache.fen <<'\t'<>p1->xingming >>p1->zheng ;
cout<<"请输入要到达的目的地:"<<"0 广州;1 深圳;2 东莞;3 佛山;4 揭阳;5 中山;6 茂名;7 汕头"<>a;
p1->gpzd=zhongd (a);
cout<<"请输入所订票数(一人最多可定3张票)"<>p1->piaoshu ;
s=head;
while(s->zhongdian !=p1->gpzd&&s->next !=NULL )
s=s->next ;
if(s==NULL)
    cout<<"班次不存在,请从新操作"<shengyup -=p1->gpzd ;
while(b)
{
m++;
if(m==1)
    HEAD =p1;
else
{p2->NEXT =p1;
p2=p1;}
p1=new(dingpiaoxx );
cout<<"请输入姓名、身份证号"<>p1->xingming >>p1->zheng ;
cout<<"请输入要到达的目的地:"<<"0 广州;1 深圳;2 东莞;3 佛山;4 揭阳;5 中山;6 茂名;7 汕头"<>a;
p1->gpzd=zhongd (a);
cout<<"请输入所订票数(一人最多可定3张票)"<>p1->piaoshu ;
s=head;
while(s->zhongdian !=p1->gpzd&&s->next !=NULL )
s=s->next ;
if(s==NULL)
{cout<<"班次不存在,请从新操作"<shengyup -=p1->gpzd ;
cout<<"是否继续,Y(是),N(否)"<>key;
if(key=='n'||key=='N')
    b=0;
}
 
}}
delete p1;
p2->NEXT =NULL;
 
return HEAD ;
}
 
 
dingpiaoxx *dingpiao(dingpiaoxx *HEAD)    //订票
{
    int a,b=1;
    banche *s;
    char key;
    while(b=1)
    {
    dingpiaoxx *p1=new dingpiaoxx ;
    cout<<"请输入您的姓名及身份证号"<>p1->xingming >>p1->zheng ;
cout<<"请输入您想要到达的目的地:"<<"0 广州;1 深圳;2 东莞;3 佛山;4 揭阳;5 中山;6 茂名;7 汕头"<>a;
p1->gpzd=zhongd (a);
cout<<"请输入您想要订的票数(一人最多可定3张票)"<>p1->piaoshu ;
if(p1->piaoshu >3)
{
cout<<"操作错误,订票失败!"<zhongdian !=p1->gpzd&&s!=NULL )
s=s->next ;
if(s==NULL)
{   delete p1;
    cout<<"班次不存在,订票失败!"<>key;
    if(key=='n'||key=='N')
        b=0;
}
else
{s->shengyup -=p1->gpzd ;
p1->NEXT =HEAD ;
HEAD =p1;
cout<<"订票成功,祝您旅途愉快!"<>a;
if(a==1)
{
    cout<<"请输入要修改记录的姓名"<>gai.xingming ;
    while(p->xingming !=gai.xingming &&p->NEXT !=NULL)
        p=p->NEXT ;
    if(p->NEXT ==NULL)
        cout<<"没有此人的订票信息,请核对后输入!!"<>gai.zheng  ;
    while(p->zheng!=gai.zheng &&p->NEXT !=NULL)
        p=p->NEXT ;
    if(p->NEXT ==NULL)
        cout<<"没有此人的订票信息,请核对后输入!!"<next!=NULL&&s->zhongdian !=p1->gpzd )
            s=s->next ;    
        cout<<"姓名\t"<<"到达站\t"<<"所购票数\t"<<"车次编号\t"<<"购票日期\t"<<"购票时间\t"<<"备注信息"<xingming<<'\t'<gpzd<<'\t'<piaoshu<bianhao
        <<'\t'<<" 年"<<' 月'<<" 日"<<'\t'<<" 点"<<" 分"<<" 秒"<<'\t'<>a;
        switch (a)
        {
        case 1:cout<<"请输入姓名"<>p1->xingming ;break;
        case 2:cout<<"请输入身份证号码"<>p1->zheng ;break;
        case 3:cout<<"请输入订票数"<>p1->piaoshu ;break;
        case 4:cout<<"请输入购票日期(年、月、日)"<>p1->riqi .year >>p1->riqi .month >>p1->riqi .day  ;break;
        case 5:cout<<"请输入购票时间(时、分、秒)"<>p1->shijian .shi  >>p1->shijian .fen >>p1->shijian .miao ;break;
        case 6:cout<<"请输入备注信息:(0.售票中,1.可发车,2.班次取消)"<>k ;
            s->beizhu =beiz (k); break;
        default :
            cout<<"输入错误,请按提示输入!"<>key;
        if(key=='n'||key=='N')
            b=0;}
        cout<<"修改成功!!"<NEXT !=0)
    {
    while (s->next!=NULL&&s->zhongdian !=p1->gpzd )
            s=s->next ;
            s->shengyup -=p1->piaoshu ;
        
        cout<xingming<<'\t'<gpzd<<'\t'<piaoshu<bianhao
        <<'\t'<<" 年"<<' 月'<<" 日"<<'\t'<<" 点"<<" 分"<<" 秒"<<'\t'<>cx.xingming >>cx.zheng ;
    while(cx.xingming !=p1->xingming &&cx.zheng !=p1->zheng&&p1!=NULL )
    {
    p2=p1;
    p1=p2->NEXT ;
    }
    if(cx.xingming==p1->xingming&&cx.zheng ==p1->zheng)
        {
            s=head;
            while (s->next!=NULL&&s->zhongdian !=p1->gpzd )
            s=s->next ;
            s->shengyup -=p1->piaoshu ;
        
            cout<<"姓名\t"<<"到达站\t"<<"所购票数\t"<<"车次编号\t"<<"购票日期\t"<<"购票时间\t"<<"备注信息"<xingming<<'\t'<gpzd<<'\t'<piaoshu<bianhao
        <<'\t'<<" 年"<<' 月'<<" 日"<<'\t'<<" 点"<<" 分"<<" 秒"<<'\t'<>a;
    switch (a)
    {
    case 1:
        if(p1==HEAD )
            HEAD =p1->NEXT ;
        else
        p2->NEXT =p1->NEXT ;
        m--;
        cout<<"您已成功退票,感谢您的支持!"<xingming&&cx.zheng !=p1->zheng)
    {cout<<"姓名与身份证号不匹配,请重新输入!确定(Y)  取消(N)"<>key;
    if(key=='n'||key=='N')
    b=0;}
    else
    {cout<<"没有您的购票记录或输入信息有误,请核实后输入"<>key;
    if(key=='n'||key=='N')
    b=0;
    }
    }
    return HEAD ;
}
dingpiaoxx  *tianjia(dingpiaoxx *HEAD)    //管理员更改数据或人工售票
{
 
    return HEAD;
}
dingpiaoxx *shanc(dingpiaoxx *HEAD )    //人工退票、数据更新
{
    dingpiaoxx *p,ss;
    p=HEAD ;
    cout<<"请输入要删除的记录的姓名或身份证号:1.姓名  2.身份证号码"<>a;
    if(a==1)
    {
        cout<<"请输入删除者姓名"<>ss.xingming ;
    while( p->NEXT!=NULL && p->xingming ==ss.xingming )
        p=p->NEXT ;
    }
    return HEAD ;
}
void welc()        //欢迎界面
{
cout<<"***-。-。-。-。-。-。-。-***"<>a;
    switch (a)
    {
    case 1: chache(head);break;
    case 2: chapiao(HEAD );break;
    case 3:head=charu(head );break;
    case 4:head=del(head); break;
    case 5:HEAD =tianjia(HEAD ); break;
    case 6:HEAD=shanc (HEAD );break;
    case 7:xiug(head); break;
    case 8: gaip(HEAD );break;
    default :
        cout<<"输入错误,请输入正确的操作序号"<>a;
    switch (a)
    {
    case 1: chache(head);break;
    case 2:HEAD=dingpiao(HEAD );break;
    case 3:HEAD=tuip (HEAD);break;
    default :
        cout<<"输入错误,请按提示信息输入"<0;)
    {
        n--;
cout<<"请输入您的账号和密码"<>ff.zh >>ff.mima ;
if((ff.zh ==guan1 .zh &&ff.mima ==guan1 .mima)||(ff.zh ==guan2 .zh &&ff.mima ==guan2 .mima) )
{cout<<"恭喜:登陆成功!!"< 
 

建立链表:

C++实现班车管理系统课程设计_第1张图片

欢迎界面

C++实现班车管理系统课程设计_第2张图片

管理员主页面

C++实现班车管理系统课程设计_第3张图片

乘客查询

C++实现班车管理系统课程设计_第4张图片

对于时间和日期的问题,上网查了很多,各种方式,但都是直接输出的形式,未能找到一个能成功地将时间、日期的各个部分提取出来放入数组或变量中的方法(主要是停网之后上网极不方便,时间上受极大限制),所以,很多地方都跳过了对时间和日期的操作。

通过这次作业深刻体会到作为“程序猿”的痛苦,我知道我的程序有很多地方不够完善,有很多漏洞,与老师的要求还有一定出入,但我确实努力地做了,由于时间问题,不完善的地方只有以后慢慢修改了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(C++实现班车管理系统课程设计)