zoukankan      html  css  js  c++  java
  • 简单的车票管理系统

    #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,用文件保存,这个是我以前没想到的。*/
  • 相关阅读:
    抽象代数学习笔记
    WC2021 游记
    简单的数学题
    前缀和公式
    杜教筛
    [模板]BZOJ4756线段树合并
    SPOJ 694
    bzoj1367 可并堆
    莫比乌斯反演(理论)
    es6 Set数据结构
  • 原文地址:https://www.cnblogs.com/heqinghui/p/2687788.html
Copyright © 2011-2022 走看看