zoukankan      html  css  js  c++  java
  • 数据结构课设作业-----飞机订票系统

    #include <iostream>
    #include<iomanip>
    #include<stdio.h>
    #include<string.h>
    #include<fstream>
    #include<stdlib.h>
    #include <conio.h>
    using namespace std;
    FILE *fp;
    int count=0;
    int user=0;
    int inf=0;
    struct plane {
        int ID;
        char time[20];
        char data[10];
        char start[10];
        char end[10];
        int pnum;
        int price;
    data[100];
    struct people {
        int bill;
        char name[10];
        char card[10];
        int ticket;
        int airID;
    pass[100];

    void Login();
    void Search();
    void Book();
    void Back();
    void bill();
    void drop();
    void menu();
    void admire();
    void input();
    void fix();
    void Delete();
    void Search_end();
    void Search_id();
    int readData();
    void passager();
    int userData();
    int userWrite();
    int account;
    void admire() {
        int n;
        printf("-------欢迎使用订票管理系统-------- ");
        printf("|           1.航班信息录入      | ");
        printf("|           2.航班信息修改      | ");
        printf("|           3.航班乘客信息      | ");
        printf("|           4.返回主菜单        | ");
        printf("|           0.退出              | ");
        printf("+----------------------------------+ ");
        printf("请输入操作指令:");
        cin>>n;
        switch(n) {
            case 1:
                input();
                break;
            case 2:
                fix();
                break;
            case 3:
                passager();
                break;
            case 4:
                menu();
                break;
            case 0:
                drop();
                break;
            default:
                printf("输入错误,请重新输入");
                admire();
                break;
        }
    }
    int userData() {
        int i=0;
        if((fp=fopen("user.txt","r+"))==NULL) {
            return 0;
        }
        while(fscanf(fp,"%d %s %s %d %d",&pass[i].bill,pass[i].name,pass[i].card,&pass[i].ticket,&pass[i].airID)) {
            i++;
            user++;
        }
        fclose(fp);
        return 0;
    }
    int readData() {
        int i=0;
        if((fp=fopen("plane.txt","r+"))==NULL) {
            return 0;
        }
        while(fscanf(fp,"%d %s %s %s %s %d %d",&data[i].ID,data[i].time,data[i].data,data[i].start,data[i].end,&data[i].pnum,&data[i].price)) {
            i++;
            count++;
        }
        fclose(fp);
        return 0;
    }
    int writeData() {
        int i;
        if((fp=fopen("plane.txt","w"))==NULL) {
            return 0;
        }
        for(i=0; i<count; i++) {
            fprintf(fp,"%d %s %s %s %s %d %d ",data[i].ID,data[i].time,data[i].data,data[i].start,data[i].end,data[i].pnum,data[i].price);
        }
        fclose(fp);
        return 0;
    }
    int userWrite() {
        int i;
        if((fp=fopen("user.txt","w"))==NULL) {
            return 0;
        }
        for(i=0; i<user; i++) {
            fprintf(fp,"%d %s %s %d %d ",pass[i].bill,pass[i].name,pass[i].card,pass[i].ticket,pass[i].airID);
        }
        fclose(fp);
        return 0;
    }
    void menu() {
        account=0;
        int n;
        printf("------欢迎使用飞机订票系统-------- ");
        printf("|             1.查询机票          | ");
        printf("|             2.订购机票          | ");
        printf("|             3.退票业务          | ");
        printf("|             4.订单查询          | ");
        printf("|             5.退出系统          | ");
        printf("|             0.管理员入口        | ");
        printf("--------------------------------- ");
        printf("请输入操作指令:");
        scanf("%d",&n);
        switch(n) {
            case 0:
                Login();
                break;
            case 1:
                Search();
                break;
            case 2:
                Book();
                break;
            case 3:
                Back();
                break;
            case 4:
                bill();
                break;
            case 5:
                drop();
                break;
            default:
                printf("输入错误,请重新输入");
                menu();
                break;
        }
    }
    void Login() {
        int i;
        printf("请输入账号:");
        scanf("%d",&account);
        if (account==1) {
            printf(" ");
            admire();
        }
    }
    void Search() {
        int choice;
        int air_id,i=0,sum=0;
        printf("*************************************************** ");
        printf("        1、按航班号查询     2、按抵达地点查询       ");
        printf("*************************************************** ");
        printf("请输入查询方式:");
        cin>>choice;
        if(choice==1)  Search_id();
        else if(choice==2)  Search_end();
        else {
            printf("请重新选择 ");
            system("cls");
            Search();
        }
    }
    int binary_research(int low,int high,int element) {
        while(low<=high) {
            int mid = (low+high)/2;
            if(data[mid].ID>element) {
                high = mid - 1;
            } else if(data[mid].ID<element) {
                low = mid + 1;
            } else {
                return mid;
            }
        }
    }
    void Search_id() {
        int id,c=count;
        int i=-1, w = 0;
        printf("请您输入要查询的飞机航班号:");
        cin>>id;
        system("cls");
        i=binary_research(0,c,id);
        if (i== -1)
            printf("没有您想查询的航班! ");
        if (i<-1)
            printf("航班号错误! ");
            else {
                cout<<"航班ID"<<setw(10)<<"起降时间"<<setw(10)<<"起飞日期"<<setw(10)<<"起点"<<setw(8)<<" 终点"<<setw(8)<<"价格"<<setw(8)<<"剩余票数"<<endl; 
                cout<<data[i].ID<<setw(10)<<data[i].time<<setw(10)<<data[i].data<<setw(10)<<data[i].start<<setw(8)<<data[i].end<<setw(8)<<data[i].pnum<<setw(8)<<data[i].price<<endl;
            }
        system("pause");
        menu();
    }
    void Search_end() {
        char area[20];
        int i, w = 0;
        printf("请您输入要前往的目的地:");
        scanf("%s", area);
        cout<<"航班ID"<<setw(10)<<"起降时间"<<setw(10)<<"起飞日期"<<setw(10)<<"起点"<<setw(8)<<" 终点"<<setw(8)<<"价格"<<setw(8)<<"剩余票数"<<endl; 
        for(i=0; i<count; i++) {
            if(strcmp(area,data[i].end)==0) {
                w=1;
                cout<<data[i].ID<<setw(10)<<data[i].time<<setw(10)<<data[i].data<<setw(10)<<data[i].start<<setw(8)<<data[i].end<<setw(8)<<data[i].pnum<<setw(8)<<data[i].price<<endl;
            }
        }
        printf(" ");
        if (w==0)
            printf("没有您想查询的航班! ");
        menu();
    }
    void Book() {
        char end[20];
        char name[10];
        char card[10];
        int i, w = 0,p,num,s;
        printf("请您输入要前往的目的地:");
        scanf("%s", end);
        cout<<"航班ID"<<setw(10)<<"起降时间"<<setw(10)<<"起飞日期"<<setw(10)<<"起点"<<setw(8)<<" 终点"<<setw(8)<<"价格"<<setw(8)<<"剩余票数"<<endl; 
        for(i=0; i<count; i++) {
            if(strcmp(end,data[i].end)==0&&data[i].pnum!=0) {
                w=1;
                cout<<data[i].ID<<setw(10)<<data[i].time<<setw(10)<<data[i].data<<setw(10)<<data[i].start<<setw(8)<<data[i].end<<setw(8)<<data[i].pnum<<setw(8)<<data[i].price<<endl;
            }
        }
        if(w!=0) {
            printf("请选择您的航班ID:");
            cin>>p;
            for(i=0; i<count; i++) {
                if(p==data[i].ID) {
                    printf("请输入你的名字:");
                    cin>>pass[user].name;
                    printf("请输入你的证件号:");
                    cin>>pass[user].card;
                    printf("请输入购票数");
                    cin>>num;
                    printf("确认购票请支付%d元,请按1确认:",data[i].price*num);
                    cin>>s;
                    if(s==1) {
                        cout<<"购买成功!"<<endl;
                    }
                    while(s!=1) {
                        cout<<"输入错误,请重新输入! ";
                        cin>>s;
                        if(s==1) {
                            cout<<"购买成功!"<<endl;
                            break;
                        }
                    }
                    data[i].pnum-=num;
                    writeData();
                    pass[user].bill=user+1009;
                    pass[user].ticket=num;
                    pass[user].airID=data[i].ID;
                    user++;
                    userWrite();
                }
            }
        }
        printf(" ");
        if (w==0)
            printf("没有您想查询的航班! ");
        system("pause");
        menu();
    }
    void Back() {
        char name[10];
        char card[10];
        int b,y;
        int i,w=0;
        printf("请输入您的姓名:");
        cin>>name;
        printf("请输入您的证件号:");
        scanf("%s",card);
        for(i=0; i<user; i++)
            if(strcmp(name,pass[i].name)==0&&pass[i].ticket!=0&&strcmp(card,pass[i].card)==0) {
                if(w==0)
                cout<<"乘客订单"<<setw(10)<<"姓名"<<setw(8)<<"身份证号"<<setw(10)<<"票数"<<setw(8)<<"航班号"<<endl;
                cout<<pass[i].bill<<setw(10)<<pass[i].name<<setw(8)<<pass[i].card<<setw(10)<<pass[i].ticket<<setw(8)<<pass[i].airID<<endl;
                w++;
            }
        if(w==0) {
            printf("对不起,不存在该乘客! ");
        } else {
            printf("请输入订单:");
            cin>>b;
            int j,t;
            for(i=0; i<user; i++)
                if(b==pass[i].bill) {
                    t=i;
                    printf("输入1确认退票:");
                    cin>>y;
                    if(y==1) {
                        for(j=0; j<count; j++) {
                            if(data[j].ID==b) {
                                data[j].pnum+=pass[i].ticket;
                                writeData();
                            }
                        }
                        pass[t].ticket=0;
                        pass[t].airID=0;
                        userWrite();
                        printf("退票成功! ");
                    }
                }
        }
        menu();
    }
    void bill() {
        char name[10];
        char card[10];
        int i,w=0;
        printf("请输入您的姓名:");
        cin>>name;
        printf("请输入您的证件号:");
        scanf("%s",card);
        for(i=0; i<user; i++)
            if(strcmp(name,pass[i].name)==0&&pass[i].ticket!=0&&strcmp(card,pass[i].card)==0) {
                if(w==0)
                    cout<<"乘客订单"<<setw(10)<<"姓名"<<setw(8)<<"身份证号"<<setw(10)<<"票数"<<setw(8)<<"航班号"<<endl;
                    cout<<pass[i].bill<<setw(10)<<pass[i].name<<setw(8)<<pass[i].card<<setw(10)<<pass[i].ticket<<setw(8)<<pass[i].airID<<endl;
                w=1;
            }
        if(w==0) {
            printf("对不起,不存在该乘客! ");
        }
        printf(" ");
        menu();
    }
    void drop() {
        printf("|+---------------------------+| ");
        printf("|         感谢您的使用        | ");
        printf("|+---------------------------+| ");
    }

    void input() {
        int next,i;
        inf++;
        printf("请输入航班号 ");
        scanf("%d",&data[count].ID);
        for(i=0;i<count;i++){
            if(data[count].ID==data[i].ID){
                cout<<"该航班已经存在,请重新输入!"<<endl;
                input();
            }
        }
        printf("请输入起降时间 ");
        scanf("%s",data[count].time);
        printf("请输入日期 ");
        scanf("%s",data[count].data);
        printf("请输入起点 ");
        scanf("%s",data[count].start);
        printf("请输入终点 ");
        scanf("%s",data[count].end);
        printf("请输入余票 ");
        scanf("%d",&data[count].pnum);
        printf("请输入票价 ");
        scanf("%d",&data[count].price);
        count++;
        writeData();
        printf("%d个数据录入完毕 ",inf);
        printf("按1继续录入,按0结束操作 ");
        scanf("%d",&next);
        system("cls");
        if(next==0)
            admire();
        else if(next==1)
            input();
    }
    void fix() {
        int p_id,t=-1,i;
        printf("请输入需操作的航班ID:");
        scanf("%d",&p_id);
        for(i=0; i<count; i++) {
            if(data[i].ID==p_id) {
                t=i;
                break;
            }
        }
        if(t==-1) {
            printf("对不起,无此次航班。重新操作请按1,返回请按0 ");
            int s;
            scanf("%d",&s);
            if(s==1)
                fix();
            if(s==0)
                admire();
        } else {
            printf("请输入起降时间 ");
            scanf("%s",data[t].time);
            printf("请输入日期 ");
            scanf("%s",data[t].data);
            printf("请输入起点 ");
            scanf("%s",data[t].start);
            printf("请输入终点 ");
            scanf("%s",data[t].end);
            printf("请输入票价 ");
            scanf("%d",&data[t].pnum);
            printf("请输入剩余票数 ");
            scanf("%d",&data[t].price);
            writeData();
            printf("修改成功! ");
            admire();
        }
    }
    void passager() {
        int i;
        if(user==0) {
            printf("没有乘客可查看 ");
            admire();
        }
        cout<<"乘客订单"<<setw(10)<<"姓名"<<setw(8)<<"身份证号"<<setw(10)<<"票数"<<setw(8)<<"航班号"<<endl;
        for(i=0; i<user; i++)
            if(pass[i].ticket!=0)
                cout<<pass[i].bill<<setw(10)<<pass[i].name<<setw(8)<<pass[i].card<<setw(10)<<pass[i].ticket<<setw(8)<<pass[i].airID<<endl;
        printf(" ");
        admire();
    }
    int main() {
        readData();
        userData();
        menu();
    }
  • 相关阅读:
    Oracle11g聚合函数
    和为S的连续正数数列,动态规划,C++
    统计一个数组在排序数组中出现的次数,C++,二分查找
    寻找两个链表的第一个公共子节点,C++
    二维数组中的查找
    数组中的逆序对,C++,分治算法
    得到从小到大的第N个丑数的三种方式(C++)一维动态规划
    连续字数组的最大和(Java)一个int数组,求其中的最大的连续数的和
    n个整数,求这中间最小的k个整数(Java)
    两个字符串的最长公共子串求法(C++、动态规划)
  • 原文地址:https://www.cnblogs.com/Eterna1ly/p/12276067.html
Copyright © 2011-2022 走看看