简单的车票管理系统

#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<fstream>
#include<string.h>
using namespace std;
#define N 20
#define Max 100
int n=10,m=10;
struct Car//汽车路线
{
    char checi[N];//车次
    char Sname[N];//始发站
    char Lname[N];//终点站
    char type[N];//车辆类型
    long length;//里程
    double Stime;//出站时间
    double Ltime;//到站时间
    int price;//票价
    int zuonum;//座位数
}car1[100];    
struct Ticket//票务信息
{
    char checi[N];//车次
    double timelong;//时间
    int sellticketnum;//已订票数
    int Nsellticketnum;//剩余票数
}ticket1[100];
struct information//订票信息
{
    char name[N];//姓名
    char identity[N];//身份证号
    char checi[N];//车次
    char Date[N];//日期
    int zuoNum;//座位号
}number[100];
void inputCar()//汽车路线数据读入
{
    ifstream iofile("checi.txt",ios::in);
    for(int i=0;i<m;i++)
        iofile>>car1[i].checi>>car1[i].Sname>>car1[i].Lname>>car1[i].type
                >>car1[i].length>>car1[i].Stime>>car1[i].Ltime>>car1

[i].price>>car1[i].zuonum;
    iofile.close();
}
void outputcar1()//汽车路线数据输出
{
    for(int i=0;i<m;i++)
        cout<<car1[i].checi<<" "<<car1[i].Sname<<" "<<car1[i].Lname<<" "<<car1

[i].type
                <<" "<<car1[i].length<<" "<<car1[i].Stime<<" "<<car1[i].Ltime<<" 

"<<car1[i].price<<" "<<car1[i].zuonum<<endl;
}
void inputTicket()//票务信息数据输入
{
    ifstream iofile("ticket1.txt",ios::in);
    for(int i=0;i<m;i++)
        iofile>>ticket1[i].checi>>ticket1[i].timelong>>ticket1

[i].sellticketnum>>ticket1[i].Nsellticketnum;
    iofile.close();
}
void outputTicket()//票务信息数据输出
{
    for(int i=0;i<m;i++)
        cout<<ticket1[i].checi<<" "<<ticket1[i].timelong<<" "<<ticket1

[i].sellticketnum<<" "<<ticket1[i].Nsellticketnum<<endl;
}
void Inquire_Ticket()//车次查询
{
    information number1;
    cout<<"请输入要查询的车次"<<endl;
    cin>>number1.checi;
    for(int i=0;i<m;i++)
    {
        if(strcmp(number1.checi,ticket1[i].checi)==0)
        {
            cout<<"信息如下:"<<endl;
            cout<<"车次: "<<ticket1[i].checi<<" 历时: "<<ticket1[i].timelong<<" 

已售票数: "<<ticket1[i].sellticketnum
                <<" 剩余票数: "<<ticket1[i].Nsellticketnum<<endl
                <<" 出站地点: "<<car1[i].Sname<<" 到站地点: "<<car1[i].Lname<<"

辆类型: "<<car1[i].type<<" 路程: "<<endl
                <<car1[i].length<<"千米  开始时间: "<<car1[i].Stime<<"小时  

到站时间: "<<car1[i].Ltime<<"小时  票价: "
                <<car1[i].price<<"元  总座位数: "<<car1[i].zuonum<<endl;
            break;
        }
    }
    if(i==m)
        cout<<"无此车次"<<endl;
}
void outputTicket_file()//票务信息用文件输出    
{
    ofstream outfile;
    outfile.open("ticket1.txt",ios::out);
    for(int i=0;i<m;i++)
       outfile<<ticket1[i].checi<<" "<<ticket1[i].timelong<<" "<<ticket1

[i].sellticketnum<<" "<<ticket1[i].Nsellticketnum<<" "<<endl;
    outfile.close();
}
void inputinformation()//订票信息数据输入
{
    ifstream iofile("number.txt",ios::in);
    for(int i=0;i<n;i++)
        iofile>>number[i].name>>number[i].identity>>number[i].checi>>number

[i].Date>>number[i].zuoNum;
    iofile.close();
}
void outputinformation()//订票信息数据输出
{
    for(int i=0;i<n;i++)
    cout<<number[i].name<<" "<<number[i].identity<<" "<<number[i].checi<<" "<<number

[i].Date<<" "<<number[i].zuoNum<<endl;
}
void outputinformation_file()//订票信息用文件输出
{
    ofstream outfile("number.txt",ios::out);
       for(int j=0;j<n;j++)//将数组的信息读到文件里,更新数据
        outfile<<number[j].name<<" "<<number[j].identity<<" "<<number[j].checi<<" 

"<<number[j].Date<<" "<<number[j].zuoNum<<endl;
    outfile.close();
}
void Book_ticket()//建立订票功能
{
    information number1;
    cout<<"请输入订票信息:(姓名,身份证号,车次,日期,座位号)"<<endl;
    cin>>number1.name>>number1.identity>>number1.checi>>number1.Date>>number1.zuoNum;
    for(int i=0;i<n;i++)
    {
        if(strcmp(number1.checi,ticket1[i].checi)==0)
        {
            if(ticket1[i].Nsellticketnum==0)
                cout<<"对不起,客户已满"<<endl;
            else
            {
                cout<<"订票成功"<<endl<<endl;
                strcpy(number[n].name,number1.name);//复制信息到数组里
                strcpy(number[n].identity,number1.identity);
                strcpy(number[n].checi,number1.checi);
                strcpy(number[n].Date,number1.Date);
                number[n].zuoNum=number1.zuoNum;
                n++;//长度加1
                outputinformation_file();
                ticket1[i].sellticketnum++;//已定票数加1
                ticket1[i].Nsellticketnum--;//未定票数减1
                outputTicket_file();
                //outputinformation();
            }
            break;
        }
    }
}
void Return_ticket()//退票功能
{
    int i,j;
    information number1;
    cout<<"请输入退票信息:(姓名,身份证号,车次,日期,座位号)"<<endl;
    cin>>number1.name>>number1.identity>>number1.checi>>number1.Date>>number1.zuoNum;
    for(i=0;i<n;i++)
    {
        if(strcmp(number1.name,number[i].name)==0)
            break;
    }
    if(i==n)
    {
        cout<<"退票不成功:"<<endl;
        return;
    }
    for(j=0;j<m;j++)
    {
        if(strcmp(number1.checi,ticket1[j].checi)==0)
            break;
    }
    for(;i<n;i++)
    {
        strcpy(number[i].name,number[i+1].name);//复制信息到数组里
        strcpy(number[i].identity,number[i+1].identity);
        strcpy(number[i].checi,number[i+1].checi);
         strcpy(number[i].Date,number[i+1].Date);
        number[i].zuoNum=number[i+1].zuoNum;
    }
    n--;
    outputinformation_file();
    ticket1[j].sellticketnum--;//已定票数加1
    ticket1[j].Nsellticketnum++;//未定票数减1
    outputTicket_file();
    cout<<"恭喜你,退票成功"<<endl<<endl;
}
void AddCarData()//路线增添
{
    ofstream outfile("checi.txt",ios::out);
    cout<<"请输入增添的路线(车次,路程,开始时间,到站时间,票价,始点站,终点站,车辆

类型,座位数):"<<endl;
    cin>>car1[m].checi>>car1[m].Sname>>car1[m].Lname>>car1[m].type>>car1

[m].length>>car1[m].Stime>>car1[m].Ltime>>car1[m].price>>car1[m].zuonum;
    strcpy(ticket1[m].checi,car1[m].checi);
    ticket1[m].Nsellticketnum=car1[m].zuonum;
    ticket1[m].sellticketnum=0;
    ticket1[m].timelong=car1[m].Ltime-car1[m].Stime;
    m++;
    for(int i=0;i<m;i++)
        outfile<<car1[i].checi<<" "<<car1[i].Sname<<" "<<car1[i].Lname<<" "<<car1

[i].type<<" "<<car1[i].length
                <<" "<<car1[i].Stime<<" "<<car1[i].Ltime<<" "<<car1[i].price<<" 

"<<car1[i].zuonum<<endl;
    outputTicket_file();
    outfile.close();
}
void DeleteCarData()//路线删除
{
    Car cartemp;
    int i;
    cout<<"请输入删除的车次"<<endl;
    cin>>cartemp.checi;
    for(i=0;i<m;i++)
        if(strcmp(cartemp.checi,car1[i].checi)==0)
            break;
    if(i==m)
    { cout<<m<<endl;
        cout<<"找不到该车次,删除失败。"<<endl;
        return;
    }
    m--;
    for(;i<m;i++)
    {
        strcpy(car1[i].checi,car1[i+1].checi);//比较函数跟复制函数写混了啊
        car1[i].length=car1[i].length;
        strcpy(car1[i].Sname,car1[i+1].Sname);
        strcpy(car1[i].Lname,car1[i+1].Lname);
        car1[i].Stime=car1[i+1].Stime;
        car1[i].Ltime=car1[i+1].Ltime;
        car1[i].price=car1[i+1].price;
        strcmp(car1[i].type,car1[i+1].type);
        car1[i].zuonum=car1[i+1].zuonum;
        strcpy(ticket1[i].checi,ticket1[i+1].checi);
        ticket1[i].Nsellticketnum=ticket1[i+1].Nsellticketnum;
        ticket1[i].sellticketnum=ticket1[i+1].sellticketnum;
        ticket1[i].timelong=ticket1[i+1].timelong;
    }
    ofstream outfile("checi.txt",ios::out);
    for(i=0;i<m;i++)
        outfile<<car1[i].checi<<" "<<car1[i].Sname<<" "<<car1[i].Lname<<" "<<car1

[i].type
                <<" "<<car1[i].Stime<<" "<<car1[i].Ltime<<" "<<car1[i].price<<" 

"<<car1[i].zuonum<<endl;
    outputTicket_file();
    outfile.close();
    cout<<"删除成功!!!"<<endl<<endl;
}
void UpCarData()//路线更改
{
    Car cartemp;
    int i;
    cout<<"请输入要更改的车次"<<endl;
    cin>>cartemp.checi;
    for(i=0;i<m;i++)
        if(strcmp(cartemp.checi,car1[i].checi)==0)
            break;
    if(i==m)
    {
        cout<<"找不到该车次,更改失败。"<<endl;
        return;
    }
    cout<<"请输入新的路线(车次,路程,开始时间,到站时间,票价,始点站,终点站,车辆类

型,座位数):"<<endl;
    cin>>car1[i].checi>>car1[i].Sname>>car1[i].Lname>>car1[i].type>>car1

[i].length>>car1[i].Stime>>car1[i].Ltime>>car1[i].price>>car1[i].zuonum;
    strcpy(ticket1[i].checi,car1[i].checi);
    ticket1[i].Nsellticketnum=car1[i].zuonum;
    ticket1[i].sellticketnum=0;
    ticket1[i].timelong=car1[i].Ltime-car1[i].Stime;
    ofstream outfile("checi.txt",ios::out);
    for(i=0;i<m;i++)
        outfile<<car1[i].checi<<" "<<car1[i].Sname<<" "<<car1[i].Lname<<" "<<car1

[i].type<<" "<<car1[i].length
                <<" "<<car1[i].Stime<<" "<<car1[i].Ltime<<" "<<car1[i].price<<" 

"<<car1[i].zuonum<<endl;
    outputTicket_file();
    outfile.close();
    cout<<"更改成功!!!"<<endl<<endl;
}
void Change_Car()
{
    int i;
    cout<<"请选择操作:(1.增添路线,2.删除路线,3.更改路线)"<<endl;
    cin>>i;
    switch(i)
    {
    case 1:AddCarData();break;
    case 2:DeleteCarData();break;
    case 3:UpCarData();break;
    }
}
void Copyfile()//将三个文本文档的数据还原,借用临时文档
{
    int i=0;
    m=10;
    n=10;
    ifstream infile;//,infile2,infile3;
    ofstream outfile;
    infile.open("checi2.txt",ios::in);
    for(i=0;i<m;i++)
        infile>>car1[i].checi>>car1[i].Sname>>car1[i].Lname>>car1[i].type
               >>car1[i].length>>car1[i].Stime>>car1[i].Ltime>>car1[i].price>>car1

[i].zuonum;
    infile.close();
    //outputcar1();
    infile.clear();//没加之前就乱码啊,什么指针的啊,
    outfile.open("checi.txt",ios::out);
    for(i=0;i<m;i++)
        outfile<<car1[i].checi<<" "<<car1[i].Sname<<" "<<car1[i].Lname<<" "<<car1

[i].type
            <<" "<<car1[i].length<<" "<<car1[i].Stime<<" "<<car1[i].Ltime<<" "<<car1

[i].price<<" "<<car1[i].zuonum<<endl;
    outfile.close();
    infile.open("ticket2.txt",ios::in);
    for(i=0;i<m;i++)
        infile>>ticket1[i].checi>>ticket1[i].timelong>>ticket1

[i].sellticketnum>>ticket1[i].Nsellticketnum;
    //outputTicket();
    outputTicket_file();
       infile.close();
    infile.clear();
    infile.open("number2.txt",ios::in);
    for(i=0;i<n;i++)
        infile>>number[i].name>>number[i].identity>>number[i].checi>>number

[i].Date>>number[i].zuoNum;
    outputinformation_file();
    infile.close();
    //outputinformation();
}
void main()
{
    int i;
    char a[7],b[7]={'y','a','n','y','a','n'};//自动加反斜杠0
    bool flag=true;
    system("color FC");
    inputCar();
    //outputcar1();
    inputTicket();
    //outputTicket();
    inputinformation();
    //outputinformation();
    system("title 简单车票管理系统-myth");
    system("color 98");
    printf("                        --------------------------------------------        

                        \n");
    printf("                        |                                          |            

                    \n");
    printf("                        |           Welcome to MIS of Tickrt       |            

                    \n");
    printf("                        |                myth                      |            

                    \n");
    printf("                        --------------------------------------------            

                    \n");

    printf("                         Please input a number(0..9) to continue!");
    scanf("%d",&i);
    system("cls");
    cout<<"请输入登陆密码(由6个字符组成):"<<endl;
    while(flag)
    {
        
        for(i=0;i<6;i++)
        {
            a[i]=getch();
            putch('*');
        }
        a[6]='\0';//不会自动加反斜杠0啊,自己来
        cout<<endl;
        if(strcmp(a,b)==0)
        {
            cout<<"恭喜你,密码正确"<<endl<<endl;
            flag=0;
        }
        else
            cout<<"So bad!!!请重新输入密码(由6个字符组成):"<<endl;
    }
    int select;
    do
    {
        cout<<"请选择:"<<endl;
        cout<<"1.定购车票"<<endl;
        cout<<"2.退票"<<endl;
        cout<<"3.票价查询"<<endl;
        cout<<"4.修改路线"<<endl;
        cout<<"5.退出:"<<endl;
        cin>>select;
        switch(select)
        {
        case 1:
            Book_ticket();
            break;
        case 2:
            Return_ticket();
            break;
        case 3:
            Inquire_Ticket();
            break;
        case 4:
            Change_Car();
            break;
        }
    }while(select!=5);
    Copyfile();
    getch();
    cout<<"谢谢使用!"<<endl;
}
/*checi
k_6150 nanchang chongqing changtu 3500000 0 24.3 170 103
k_6151 nanchang chongqing changtu 3500000 1 25.3 171 103
k_6152 nanchang chongqing changtu 3500000 2 26.3 172 103
k_6153 nanchang chongqing changtu 3500000 3 27.3 173 103
k_6154 nanchang chongqing changtu 3500000 4 28.3 174 103
k_6155 nanchang chongqing changtu 3500000 5 29.3 175 103
k_6156 nanchang chongqing changtu 3500000 6 30.3 176 103
k_6157 nanchang chongqing changtu 3500000 7 31.3 177 103
k_6158 nanchang chongqing changtu 3500000 8 32.3 178 103
k_6159 nanchang chongqing changtu 3500000 9 33.3 179 103
*/
/*number
myth 0113470 k_6150 2012/5/6 45
liua 0113471 k_6151 2012/5/6 46
shen 0113472 k_6152 2012/5/6 47
huge 0113473 k_6153 2012/5/6 48
ting 0113474 k_6154 2012/5/6 49
lili 0113475 k_6155 2012/5/6 60
yanz 0113476 k_6156 2012/5/6 61
zhou 0113477 k_6157 2012/5/6 62
chen 0113478 k_6158 2012/5/6 66
bing 0113479 k_6159 2012/5/6 68
*/
/*ticket1
k_6150 24.3 45 68 
k_6151 24.3 46 67 
k_6152 24.3 47 66 
k_6153 24.3 48 65 
k_6154 24.3 49 64 
k_6155 24.3 60 53 
k_6156 24.3 61 52 
k_6157 24.3 62 51 
k_6158 24.3 66 47 
k_6159 24.3 68 45 
*/
/*要建立6个文件,checi,number,ticket1;checi2,number2,ticket2.后三个文件是用来复制前三个文

件的,保持原来的数据,其实也可以不需要手动建立文件,不过我就不写了,重要的是要把变化的数组

长度m,n,用文件保存,这个是我以前没想到的。*/

 

posted @ 2012-09-16 20:12  myth_HG  阅读(621)  评论(0编辑  收藏  举报