C语言实现航空订票系统课程设计

本文为大家分享了C语言实现航空订票系统的具体代码,供大家参考。

大一写的时候没有写注释,后来也懒得加了。在这里说一下读写文件的思路吧。

就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体中的数据保存到链表中。

以下代码可直接复制粘贴就能运行,绝对是新手的好福利!

如果有第一次写这种大作业不知道如何下手,但又不想直接复制粘贴,想搞清楚这个代码的原理的可以私信我,毕竟我当时也第一次写这种大作业时也很苦恼(我当时写的要是有这么完整的代码该多好啊,我直接就是复制粘贴运行看效果)

// author:吴泽琛
// nylg
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <iostream>
#define PRINTF "%s\t\t%d\t\t%s\t\t\t%s\t\t星期%d\t\t\t%d\n",airlinep->airlinenum,airlinep->airplanenum,airlinep->dep,airlinep->des,airlinep->time,airlinep->ticks
using namespace std;
typedef class mange
{
    public:
    char mangername[20];
    char scert[20];
    char securityscert[20];
    class mange *next;
}manger;
typedef class use
{
    public:
//    char userairlinenum[20];//航班号
//    int userairplanenum;//飞机号 
//    char userdes;//目的地 
//    char userdep;//出发时间 
//    int usertime;//起飞时间 
    int ticks;//票数 
    int bookcnt;//订票次数 
    char username[20];
    char scert[20];
    char securityscert[20];
    char bookticks[2000][2000];//机票名字 
    class use *next;
}user;
typedef class airline
{
    public:
    char airlinenum[20];//航班号
    int airplanenum;//飞机号
    char dep[1000];//出发地点
    char des[1000];//目的地
    int time;//飞行时间(星期几)
    int ticks;//票数
    class airline *next;
}airline;

manger* mhead = NULL, *mend = NULL;
user *uhead = NULL, *uend = NULL;
airline *ahead = NULL, *aend = NULL;
airline *ahead1 = (airline*)malloc(sizeof(airline));
int mcnt, ucnt, acnt;
char mscert[200] = {"wsgly"};

void load();
void main1();
void changemenu();
void mainmenu();
void Registermenu();
void Loginmenu();
void mlmenu();
void ulmenu();
void Login();
void Register();
void uRegister();
void mRegister();
void mLogin();
void uLogin();
void userfunction();
void search();
void searchmenu();
void printairline();
void printdes();
void printtime();
void printticks();
void airlinesort();
void dessort();
void bookticks(user *userp);
void returnticks(user *userp);
void findairline(user *userp); 
void mangerfunction();
void deleteusernum(char *airlinenum);
void addairline();
void deletenum();
void changeairline();
void searchuser();
void changeuserairline(char *userbookticks, char *bookticks);
void rmanger(manger *mhead);
void rairline(airline *ahead);
void ruser(user *uhead);
void readmangerfile();
void readuserfile();
void readairlinefile();
void title();
void date();
void cls();
void over();
void writefile(int flag);
int exist(char *name, int flag);
void hualihushao1();
void hualihushao2();
void searchscert();
void searchmangerscert();
void searchuserscert();
void changescert();
void changemangerscert();
void changeuserscert();
void print_message();

int main()
{
    //hualihushao1();
    system("color F6");
    title();
    mhead = (manger*)malloc(sizeof(manger));
    uhead = (user*)malloc(sizeof(user));
    ahead = (airline*)malloc(sizeof(airline));
    ahead1->next = ahead;
    
    ruser(uhead);
    rmanger(mhead);
    rairline(ahead);
    //                            test
//    user *q = uhead;
//    while (q)
//    {
//        printf("%d %s %s %d %s\n",q->ticks,q->username,q->scert,q->bookcnt,q->securityscert);
//        q = q->next;
//    }
    airline *p = ahead;
    while (p)
    {
        printf("%s %d %s %s %d %d\n",p->airlinenum,p->airplanenum,p->dep,p->des,p->time,p->ticks);
        p = p->next;
    }
    main1();
    return 0;
}
void main1()
{
    int choose;
    int sign;
    
    while (1)
    {
        cls();
        date();
        mainmenu();
    
        char choose = getch(); 
        switch(choose)
        {
            case '1':
                    cls();
                    Login();
                    break;
            case '2':
                    cls();
                    Register(); 
                    break;
            case '3':
                    cls();
                    searchscert();
                    break;
            case '4':
                    cls();
                    changescert();
                    break;
            case '5':
                    cls();
                    over();
                    cls();
                    break;
            default :
                    printf("输入无效!");
                    break;
        }
    }
    
}
void Login() 
{
    int sign;
    while (1)
    {
        cls();
        date();
        Loginmenu();
        char choose = getch();
    switch(choose)
    {
        case '1':
                cls();
                mLogin();
                break;
        case '2':
                cls();
                uLogin(); 
                break;
        case '3':
                sign = 1;
                break;
        case '4':
                cls();
                over();
                break;
        default :
                printf("输入无效!");
                break;
                
                
    }
        if (sign)
        {
            break;
        }
    }
    
}
void Register()
{
    int sign;
    
    while (1)
    {
        cls();
        date();
        Registermenu();
        char choose = getch();
    switch(choose)
    {
        case '1':
                cls();
                mRegister();
                break;
        case '2':
                cls();
                uRegister();
                break;
        case '3':
                sign = 1;
                cls();
                break;
        case '4':
                cls();
                over();
                cls();
                break;
        default :
                printf("输入无效!");
                break;
    }
    if (sign)
    {
        break;
    }
    }
    
}

void userfunction(user *userp)
{    
    int sign;
    
    while (1)
    {
        cls();
        date();
    ulmenu();
    char choose = getch();
    switch(choose)
    {
        case '1':
                cls();
                bookticks(userp);
                break;
        case '2':
                cls();
                returnticks(userp);
                break;
        case '3':
                cls();
                findairline(userp);
                break;
        case '4':
                cls();
                search();
                break;
        case '5':
                sign = 1;
                cls();
                break;
        case '6':
                cls();
                over();
                cls();
                break;
        default :
                printf("输入无效!");
                break;
    }
        if (sign)
        {
            break;
        }
    }
    
}

void mangerfunction()
{
    int sign = 0;
    int choose ;
    while (1)
    {
        cls();
        date();
    mlmenu();
    char choose = getch();
    switch(choose)
    {
        case '1':
                cls();
                addairline();
                break;
        case '2':
                cls();
                deletenum();
                break;
        case '3':
                cls();
                changeairline();
                break;
        case '4':
                cls();
                searchuser();
                break;
        case '5':
                cls();
                search();
                break;
        case '6':
                sign = 1;
                cls();
                break;
        case '7':
                cls();
                over();
                cls();
                break;
        default :
                printf("输入无效!");
                break;
    }
        if (sign)
        {
            break;
        }
    }
    
}
void mlmenu()
{
    printf("                                                 管理员页面\n");
    printf("                              **************************************************\n");
    printf("                              **               1.增加航班信息                 **\n"); 
    printf("                              **                                              **\n");
    printf("                              **               2.删除航班信息                 **\n");
    printf("                              **                                              **\n");
    printf("                              **               3.修改航班信息                 **\n");
    printf("                              **                                              **\n");
    printf("                              **               4.查看客户信息                 **\n");
    printf("                              **                                              **\n");
    printf("                              **               5.浏览航班信息                 **\n");
    printf("                              **                                              **\n");
    printf("                              **               6.返回                         **\n");
    printf("                              **                                              **\n");    
    printf("                              **               7.退出                         **\n");
    printf("                              **************************************************\n");
    printf("请按键选择:");
}

void ulmenu()
{
    printf("                                                  乘客页面\n");
    printf("                              **************************************************\n");
    printf("                              **               1.订票                         **\n"); 
    printf("                              **                                              **\n");
    printf("                              **               2.退票                         **\n");
    printf("                              **                                              **\n");
    printf("                              **               3.查看已订机票                 **\n");
    printf("                              **                                              **\n");
    printf("                              **               4.浏览航班信息                 **\n");
    printf("                              **                                              **\n");
    printf("                              **               5.返回                         **\n");
    printf("                              **                                              **\n");
    printf("                              **               6.退出                         **\n");
    printf("                              **************************************************\n");
    printf("请按键选择:");
}

void mainmenu()
{
    printf("\n\n");
    printf("                                        欢 迎 使 用 航 空 管 理 系 统 !\n");
    printf("                              **************************************************\n");
    printf("                              **                    1.登录                    **\n");
    printf("                              **                                              **\n");
    printf("                              **                    2.注册                    **\n");
    printf("                              **                                              **\n");
    printf("                              **                    3.找回密码                **\n");
    printf("                              **                                              **\n");
    printf("                              **                    4.修改密码                **\n");
    printf("                              **                                              **\n");
    printf("                              **                    5.退出                    **\n");
    printf("                              **************************************************\n");
    printf("请按键选择:");
}

void Registermenu()
{
    printf("                                                   注册页面\n");
    printf("                              **************************************************\n");
    printf("                              **                 1.管理员注册                 **\n");
    printf("                              **                                              **\n");
    printf("                              **                 2.乘客注册                   **\n");
    printf("                              **                                              **\n");
    printf("                              **                 3.返回                       **\n");
    printf("                              **                                              **\n");
    printf("                              **                 4.退出                       **\n");
    printf("                              **************************************************\n");
    printf("请按键选择:");
}

void Loginmenu()
{
    printf("                                                   登录页面\n");
    printf("                              **************************************************\n");
    printf("                              **                 1.管理员登录                 **\n");
    printf("                              **                                              **\n");
    printf("                              **                 2.用户登录                   **\n");
    printf("                              **                                              **\n");
    printf("                              **                 3.返回                       **\n");
    printf("                              **                                              **\n");
    printf("                              **                 4.退出                       **\n");
    printf("                              **************************************************\n");
    printf("请按键选择:");
}

void changemenu()
{
        printf("\n\n");
        printf("\t\t\t\t*******************************\n");
        printf("\t\t\t\t**      1.修改航班号         **\n");
        printf("\t\t\t\t**                           **\n");
        printf("\t\t\t\t**      2.修改飞机号         **\n");
        printf("\t\t\t\t**                           **\n");
        printf("\t\t\t\t**      3.修改出发地点       **\n");
        printf("\t\t\t\t**                           **\n");
        printf("\t\t\t\t**      4.修改目的地         **\n");
        printf("\t\t\t\t**                           **\n");
        printf("\t\t\t\t**      5.修改起飞时间       **\n");
        printf("\t\t\t\t**                           **\n");
        printf("\t\t\t\t**      6.修改票数           **\n");
        printf("\t\t\t\t**                           **\n");
        printf("\t\t\t\t**      7.返回               **\n");
        printf("\t\t\t\t*******************************");
        printf("\n\n");
}
void searchmenu()
{
    printf("\n\n\n\n");
    printf("\t\t\t\t***********************************\n");
    printf("\t\t\t\t**         1.查看航班信息        **\n");
    printf("\t\t\t\t**                               **\n");
    printf("\t\t\t\t**         2.按航班号浏览        **\n");
    printf("\t\t\t\t**                               **\n");
    printf("\t\t\t\t**         3.按起飞时间浏览      **\n");
    printf("\t\t\t\t**                               **\n");
    printf("\t\t\t\t**         4.按机票数浏览        **\n");
    printf("\t\t\t\t**                               **\n");
    printf("\t\t\t\t**         5.返回                **\n");
    printf("\t\t\t\t**                               **\n");
    printf("\t\t\t\t**         6.退出                **\n");
    printf("\t\t\t\t***********************************\n");
    printf("请按键选择:");
}

void ruser(user *uhead)
{
    FILE *fp;
    fp = fopen("user","a+");
    ucnt = fread(uhead,sizeof(user),1,fp);
    fclose(fp);
    uend = uhead;
    readuserfile();
}
void rmanger(manger *mhead)
{
    FILE *fp;
    fp = fopen("manger","a+");
    mcnt = fread(mhead,sizeof(manger),1,fp);
    fclose(fp);
    mend = mhead;
    readmangerfile();
}
void rairline(airline *ahead)
{
    FILE *fp;
    fp = fopen("airline","a+");
    acnt = fread(ahead,sizeof(airline),1,fp);
    fclose(fp);
    aend = ahead;
    readairlinefile();
}
void uRegister()
{
    date();
    user *p;
    char username[1000];
    char scert[1000];
    char securityscert[2000];
    FILE *fp;

    if (ucnt == 0)          //第一次添加
    {
        printf("\n\n\n\n\n\n\n");
        printf("-------------请输入账户(按0退出):");
        while (gets(username))
        {
            if (strcmp(username,"0") == 0)
            {
                return ;
            }
            if (strlen(username) <= 16 && !exist(username, 0))
                break;
            else if (exist(username, 0))
            {
                printf("-------------该账户已存在!请重新输入(按0退出):");
            }
            else
            {
                printf("-------------请输入长度为1到16位的账户:");
            }
        }
        strcpy(uhead->username, username);
        printf("-------------请输入密码:");
        while (gets(scert))
        {
            if (strlen(scert) <= 16)
                break;
            else
                printf("-------------请输入长度为1到16的密码:");
        }
        strcpy(uhead->scert, scert);
        printf("-------------请输入您的密保:");
        while (gets(securityscert))
        {
            if (strlen(securityscert) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的密保:");
            }
        }
        strcpy(uhead->securityscert,securityscert);
        uhead->bookcnt = 0;
        uend = uhead;
        uend->next = NULL;
 
    }
    else
    {
        p = (user*)malloc(sizeof(user));
        printf("\n\n\n\n\n\n\n");
        printf("-------------请输入账户(按0退出):");
        while (gets(username))
        {
            if (strcmp(username,"0") == 0)
            {
                return ;
            }
            if (strlen(username) <= 16 && !exist(username, 0))
                break;
            else if (exist(username, 0))
            {
                printf("-------------该账户已存在!请重新输入(按0退出):");
            }
            else
            {
                printf("-------------请输入长度为1到16位的账户:");
            }
        }
        strcpy(p->username, username);
        printf("-------------请输入密码:");        
        while (gets(scert))
        {
            if (strlen(scert) <= 16)
                break;
            else
                printf("-------------请输入长度为1到16的密码:");
        }
        strcpy(p->scert, scert);
        printf("-------------请输入您的密保:");
        while (gets(securityscert))
        {
            if (strlen(securityscert) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的密保:");
            }
        }
        strcpy(p->securityscert,securityscert);
        p->bookcnt = 0;
        uend->next = p;
        uend = p;
        uend->next = NULL;
    }
    ucnt++;
    writefile(0);
    cls();
        printf("\n\n\n\n\n\n\n");
        printf("\t\t\t\t\t*******************************\n"); 
        printf("\t\t\t\t\t**                           **\n");
        printf("\t\t\t\t\t       乘客%s创建成功!                                      \n",uend->username);
        printf("\t\t\t\t\t**     即将跳转至主页面...   **\n");
        printf("\t\t\t\t\t**                           **\n");
        printf("\t\t\t\t\t*******************************\n");
    Sleep(3000);
}

int exist(char *name, int flag)//1 为存在   0 为不存在 
{
    if (flag == 0)
    {
        user *p = uhead;
        while (p != NULL && ucnt != 0)
        {
            if (strcmp(name,p->username) == 0)
            {
                return 1;
            }
            p = p->next;
        }
    }
    else if (flag == 1)
    {
        manger *p = mhead;
        while (p != NULL)
        {
            if (strcmp(name,p->mangername) == 0)
            {
                return 1;
            }
            p = p->next; 
        }
    }
    return 0;
}

void uLogin() 
{
    date();
    int cnt = 4;
    int flag = 0;
    int k = 0;
    int i;
    char c;
    user *p = uhead;
    char username[2000];
    char scert[2000];
    printf("\n\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("user","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无乘客账号信息!!\n-------------请先前往注册!");
        getchar();
        return ;
    }
    
    printf("-------------请输入您的账户(按0退出):");
//    gets(username);
//    getch(); 
    while (gets(username))
    {
        if (strcmp(username,"0") == 0)
        {
            return ;
        } 
        if (strlen(username) <= 16)
        {
            break;
        } else 
        {
            printf("-------------请输入长度为1到16位的账户:");
        }
    }
    printf("-------------请输入您的密码(按0退出):");
//    gets(scert
        for (i = 0; (c = getch()) != '\r';)
        {
            if (c == '0')
            {
                return ;
            }
            if (i <= 15 && isprint(c))
            {
                scert[i] = c;
                i ++;
                k ++;
                printf("*");
            }
            if ( k > 0 && c > 0 && c == '\b')
            {
                i --;
                k --;
                printf("\b");
                printf(" ");
                printf("\b");
            }
        }
    scert[i] = '\0';
    printf("\n");
    while (p != NULL)
    {
        if (strcmp(p->username,username) == 0)
        {
            flag = 1;
            while (strcmp(p->scert,scert) != 0)
            {
                cnt --;
                if (cnt == 1)
                {
                    cls();
                    printf("\n\n\n\n\n\n\n");
                    printf("-------------密码输入次数已用完!\n-------------即将退出登录页面...");
                    Sleep(3000);
                    cls();
                    return ;
                }
                printf("-------------密码错误!您还有%d次机会!\n",cnt - 1);
                printf("-------------请重新输入:"); 
                gets(scert);
            }
            printf("-------------乘客%s登录成功!\n-------------即将跳转至乘客页面...",p->username);
            Sleep(3000);
            cls();
            userfunction(p);
        }
        p = p->next;
    }
    if (flag == 0)
    {
        printf("-------------不存在此账号!\n-------------请先前往注册!\n");
        printf("-------------即将跳转至主页面...");
        Sleep(2000);
    }
}

void mLogin()
{
    date();
    int cnt = 4;
    int flag = 0;
    int k = 0;
    int i;
    char c;
    manger *p = mhead;
    char mangername[2000];
    char scert[2000];
    printf("\n\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("manger","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无管理员账号信息!!\n-------------请先前往注册!");
        getchar();
        return ; 
    }
    printf("-------------请输入您的账户(按0退出):");
    while (gets(mangername))
    {
        if (strcmp(mangername,"0") == 0)
        {
            return ;
        }
        if (strlen(mangername) <= 16)
        {
            break;
        } else 
        {
            printf("-------------请输入长度为1到16位的账户:");
        }
    }
    
    printf("-------------请输入您的密码(按0退出):");
    for (i = 0; (c = getch()) != '\r';)
    {
        if (c == '0')
        {
            return ;
        }
        if (i <= 15 && isprint(c))
        {
            scert[i] = c;
            i ++;
            k ++;
            printf("*");
        }
        if ( k > 0 && c > 0 && c == '\b')
        {
            i --;
            k --;
            printf("\b");
            printf(" ");
            printf("\b");
        }
    }
    scert[i] = '\0';
    printf("\n");
    
    while (p)
    {
        if (strcmp(p->mangername,mangername) == 0)
        {
            
            flag = 1;
            while (strcmp(p->scert,scert) != 0)
            {
                cnt --;
                if (cnt == 1)
                {
                    cls();
                    printf("\n\n\n\n\n\n\n");
                    printf("-------------密码输入次数已用完!\n-------------即将退出登录页面...");
                    Sleep(3000);
                    cls();
                    return ;
                }
                printf("-------------密码错误!您还有%d次机会!\n",cnt - 1);
                printf("-------------请重新输入:"); 
//                gets(scert);
for (i = 0; (c = getch()) != '\r';)
    {
        if (c == '0')
        {
            return ;
        }
        if (i <= 15 && isprint(c))
        {
            scert[i] = c;
            i ++;
            k ++;
            printf("*");
        }
        if ( k > 0 && c > 0 && c == '\b')
        {
            i --;
            k --;
            printf("\b");
            printf(" ");
            printf("\b");
        }
    }
    scert[i] = '\0';
    printf("\n");
            }
            printf("-------------管理员%s登录成功!\n-------------即将跳转至管理员页面...",p->mangername);
//            load();
            //cls();
            mangerfunction();
            return ;
        }
        p = p->next;
    }
    if (flag == 0)
    {
        printf("-------------不存在此账号!\n-------------请先前往注册!\n");
        printf("-------------即将跳转至主页面...");
        Sleep(2000);
    }
}

void mRegister()
{
    date();
    FILE *fp;
    char mangerscert[1000];
    char mname[1000];
    char scert[1000];
    char securityscert[2000];
    printf("\n\n\n\n\n\n\n");
    printf("-------------请输入管理员验证码:");
//    getchar();
    gets(mangerscert);
    int cnt = 2;
    while (--cnt >= 0)
    {
        if (strcmp(mangerscert,mscert) == 0)
        {
            printf("-------------管理员验证成功!!\n-------------即将进入注册页面...");
            Sleep(1000);
            cls();
            break;
        } else 
        {
            printf("-------------管理员验证失败!!\n-------------您还有%d次机会!!\n",cnt + 1);
            printf("-------------请重新输入:");
            gets(mangerscert);
        }
        if (cnt == 0)
        {
            printf("-------------输入次数已用完!!\n-------------即将退出管理员注册系统...");
            Sleep(2000);
            cls();
            return ;
        }
    }

    manger *p;
    if (mcnt == 0)
    {
        printf("\n\n\n\n\n\n\n");
        printf("-------------请输入账户(按0退出):");
        while (gets(mname))
        {
            if (strcmp(mname,"0") == 0)
            {
                return ;
            }
            if (strlen(mname) <= 16 )
            {
                break;
            } else
            {
                printf("-------------请输入长度为1到16位的账户:");
            }
        }
        strcpy(mhead->mangername,mname);
        printf("-------------请输入密码:");
        while (gets(scert))
        {
            if (strlen(scert) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位密码:");
            }
        }
        strcpy(mhead->scert,scert);
        printf("-------------请输入您的密保:");
        while (gets(securityscert))
        {
            if (strlen(securityscert) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的密保:");
            }
        }
        strcpy(mhead->securityscert,securityscert);
        mend = mhead;
        mend->next = NULL;
    }
    else 
    {
        p = (manger*)malloc(sizeof(manger));
        printf("\n\n\n\n\n\n\n");
        printf("-------------请输入账户(按0退出):");
        while (gets(mname))
        {
            if (strcmp(mname,"0") == 0)
            {
                return ;
            } 
            if (strlen(mname) <= 16 && !exist(mname,1))
            {
                break;
            }
            else if (exist(mname,1))
            {
                printf("-------------该账户已存在!请重新输入!(按0退出)"); 
            } else
            {
                printf("-------------请输入长度为1到16位的账户:");
            }
        }
        strcpy(p->mangername,mname);
        printf("-------------请输入密码:");
        while (gets(scert))
        {
            if (strlen(scert) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的密码:");
            }
        }
        strcpy(p->scert,scert);
        printf("-------------请输入您的密保:");
        while (gets(securityscert))
        {
            if (strlen(securityscert) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的密保:");
            }
        }
        strcpy(p->securityscert,securityscert);
        mend->next = p;
        mend = p;
        mend->next = NULL;
    }
    mcnt ++;
    
    writefile(1);
    cls();
        printf("\n\n\n\n\n\n\n");
        printf("\t\t\t\t\t*******************************\n"); 
        printf("\t\t\t\t\t**                           **\n");
        printf("\t\t\t\t\t       管理员%s创建成功!      \n",mend->mangername);
        printf("\t\t\t\t\t**     即将跳转至主页面...   **\n");
        printf("\t\t\t\t\t**                           **\n");
        printf("\t\t\t\t\t*******************************\n");
    Sleep(3000);
}
void title()
{
    system("color F2");
    system("title **************************************************************************欢迎使用航空订票系统****************************************************************************"); 
}
void date()
{
    system("date/t");
    system("time/t");
}

void cls()
{
    system("cls");
}

void over()
{
    //hualihushao2();
    cls();
    system("color 6");
    int time = 6;
    printf("\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t\t\t感谢您的使用!!\n\n\n\n\n");
    printf(" 程序即将关闭...");
    while (--time >= 1)
    {
        printf("\r%d",time);
        printf("\b");
        Sleep(1000);
    }
    cls();
    exit(0);
    
}
void readuserfile()
{
    user *p = uhead;
    FILE *fp = fopen("user","ab+");
    while (fread(p,sizeof(user),1,fp))
    {
        if (p->next != NULL)
        {
            p = (user*)malloc(sizeof(user));
            uend->next = p;
            uend = p;
            uend->next = NULL;
        }
    }
}
void readmangerfile()
{
    manger *p;
    FILE *fp;
 
    p = mhead;
    fp = fopen("manger", "ab+");
    while (fread(p, sizeof(manger), 1, fp))
    {
        if (p->next != NULL)
        {
            p = (manger*)malloc(sizeof(manger));
 
            mend->next = p;
            mend = p;
            mend->next = NULL;
        }
    }
}
void readairlinefile()
{
    airline *p;
    FILE *fp;
    
    p = ahead;
    fp = fopen("airline","ab+");
    while (fread(p,sizeof(airline),1,fp))
    {
        if(p->next != NULL)
        {
            p = (airline*)malloc(sizeof(airline));
            aend->next = p;
            aend = p;
            aend->next = NULL;
        }
    }
}
void addairline()
{
    FILE *fp;
    airline *p;
    char airlinenum[2000];
    if (acnt == 0)
    {
        printf("-------------请输入航班号(按0返回):");
//        getchar();
        while (gets(airlinenum))
        {
            if (strcmp(airlinenum,"0") == 0)
            {
                return ;
            }
            if (strlen(airlinenum) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的航班号:");
            }
        }
        strcpy(ahead->airlinenum,airlinenum);
        printf("-------------请输入飞机号:");
//        getchar();
        long long int airplanenum;
        while (scanf("%lld",&airplanenum))
        {
            if (airplanenum <= 0)
            {
                printf("-------------请输入正确格式的飞机号:");
            } else if (airplanenum > 999999)
            {
                printf("-------------请输入长度为1-6位的飞机号:");
            } else
            {
                ahead->airplanenum = airplanenum;
                break;
            }
        }
        printf("-------------请输入出发地点:");
        getchar();
        char dep[1000];
        while (gets(dep))
        {
            if (strlen(dep) <= 16)
            {
                strcpy(ahead->dep,dep);
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的出发地点:");
            }
        }
//        getchar();
        printf("-------------请输入目的地:");
        
        char des[1000];
        while (gets(des))
        {
            if (strlen(des) <= 16)
            {
                strcpy(ahead->des,des);
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的目的地:");
            }
        };
        printf("-------------请输入机票数:");
        int ticks;
        while (scanf("%d",&ticks))
        {
            if (ticks <= 0)
            {
                printf("-------------请输入正确格式的机票数!");
            } else if (ticks > 999)
            {
                printf("-------------请输入0-999以内的机票数!");
            } else 
            {
                ahead->ticks = ticks;
                break;
            }
        }
        int time;
        printf("-------------请输入起飞时间(1-7):");
        while (scanf("%d",&time))
        {
            if (time < 1 || time > 7)
            {
                printf("-------------请输入正确的起飞时间(周一到周日用1-7表示):");
            } else 
            {
                ahead->time = time;
                break;
            }
             
        }
        aend = ahead;
        aend->next = NULL;
    } else
    {
        printf("-------------请输入航班号(按0返回):");
        getchar();
        while (gets(airlinenum))
        {
            if (strcmp(airlinenum,"0") == 0)
            {
                return ;
            }
            if (strlen(airlinenum) <= 16)
            {
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的航班号:");
            }
        }
        int flag = 0;
        p = ahead;
        while (p)
        {
            if (strcmp(p->airlinenum,airlinenum) == 0)
            {
                flag = 1;
                break;
            }
            p = p->next;
        }
        if(flag == 1)
        {
            int ticks;
            printf("-------------请输入要增加票的数量:");
            while (scanf("%d",&ticks))
            {
                if (ticks <= 0)
                {
                    printf("-------------请输入正确格式的机票数!");
                } else if (ticks > 999)
                {
                    printf("-------------请输入0-999以内的机票数!");
                } else 
                {
                    p->ticks += ticks;
                    printf("-------------航班号%s票数添加成功!",p->airlinenum);
                    break;
                }
            }
        } else
        {
        p = (airline*)malloc(sizeof(airline));
        strcpy(p->airlinenum,airlinenum);
        printf("-------------请输入飞机号:");
        long long int airplanenum;
        while (scanf("%lld",&airplanenum))
        {
            if (airplanenum <= 0)
            {
                printf("-------------请输入正确格式的飞机号:");
            } else if (airplanenum > 999999)
            {
                printf("-------------请输入长度为1-6位的飞机号:");
            } else 
            {
                p->airplanenum = airplanenum;
                break;
            }
        }
        printf("-------------请输入出发地点:");
        getchar();
        char dep[1000];
        while (gets(dep))
        {
            if (strlen(dep) <= 16)
            {
                strcpy(p->dep,dep);
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的出发地点:");
            }
        }
        
        printf("-------------请输入目的地:");
        char des[1000];
        while (gets(des))
        {
            if (strlen(des) <= 16)
            {
                strcpy(p->des,des);
                break;
            } else 
            {
                printf("-------------请输入长度为1到16位的目的地:");
            }
        }
        printf("-------------请输入机票数:");
        int ticks;
        while (scanf("%d",&ticks))
        {
            if (ticks < 0)
            {
                printf("-------------请输入正确格式的机票数!");
            } else if (ticks > 999)
            {
                printf("-------------请输入0-999以内的机票数!");
            } else 
            {
                p->ticks = ticks; 
                break;
            }
        }
        int time;
        printf("-------------请输入起飞时间(1-7):");
        while (scanf("%d",&time))
        {
            if (time < 1 || time > 7)
            {
                printf("-------------请输入正确的起飞时间(周一到周日用1-7表示):");
            } else 
            {
                p->time = time;
                break;
            } 
        }
        getchar();
        aend->next = p;
        aend = p;
        aend->next = NULL; 
        }
    }
    acnt ++;
    writefile(2);
    cls();
    printf("\n\n\n\n\n\n");
    printf("\t\t\t\t\t********************************\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t       航班号%s添加成功!       \n",aend->airlinenum);
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t********************************\n");
    printf("页面即将跳转...");
    Sleep(2000);
    
}
void writefile(int flag)// 0 写用户 1 写管理员 2 写航班 
{
    user *userp = uhead;
    manger *mangerp = mhead;
    airline *airlinep = ahead;
    FILE *fp;
    
    if (flag == 0)
    {
        fp = fopen("user","w");
        while (userp)
        {
            fwrite(userp,sizeof(user),1,fp);
            userp = userp->next;
        }
    } else if(flag == 1)
    {
        fp = fopen("manger","w");
        while (mangerp)
        {
            fwrite(mangerp,sizeof(manger),1,fp);
            mangerp = mangerp->next;
        }
    } else if(flag == 2)
    {
        fp = fopen("airline","w");
        while (airlinep)
        {
            fwrite(airlinep,sizeof(airline),1,fp);
            airlinep = airlinep->next;
        }
    }
    fclose(fp);
}
void deletenum()
{
    airline *p, *sign;
    p = ahead;
    char airlinenum[1000];
    int flag = 0;
    
    FILE *fp;
    fp = fopen("airline","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("\n\n\n\n\n\n\n");
        printf("-------------暂无航班信息!!");
        getchar();
        printf("pause");
        return ;
    }
    
    printf("-------------请输入您要删除的航班号(按0退出):");
    while (scanf("%s",airlinenum))
    {
        if (strcmp("0",airlinenum) == 0)
        {
            getchar();
            return ;
        }
        while (p)
        {
            if (strcmp(p->airlinenum,airlinenum) == 0)
            {
                flag = 1;
                break;
            }
            p = p->next;
        }
        if (flag == 0)
        {
            printf("-------------查无此航班!");
            printf("请重新输入(按0退出):");
            p = ahead;
        } else 
        {
            break;
        }
    }
    deleteusernum(airlinenum);
    p = ahead;
    if (strcmp(ahead->airlinenum,airlinenum) == 0)
    {
        sign = ahead;
        strcpy(sign->airlinenum,ahead->airlinenum);
        ahead = ahead->next;
        ahead1->next = ahead;
    }
    while (p->next != NULL)
    {
        if (strcmp(p->next->airlinenum,airlinenum) == 0)
        {
            sign = p->next;
            strcpy(sign->airlinenum,p->next->airlinenum);
            p->next = p->next->next;
            break;
        }
        p = p->next;
    } 
    getchar();
    printf("\n\n\n\n\n\n");
    printf("-------------航班号%s删除成功!\n",sign->airlinenum);
    printf("-------------页面即将跳转...");
    Sleep(1000);
//    free(sign);
    writefile(2);
}

void deleteusernum(char *airlinenum)
{
    user *userp = uhead;
    int flag;
    
    while (userp)
    {
        flag = 1;
        for (int i = 0; i < userp->bookcnt; i ++)
        {
            if (strcmp(userp->bookticks[i],airlinenum) == 0)
            {
                flag = i;
                break;
            }
        }
        if (flag != 1)
        {
            for (int j = flag; j < userp->bookcnt - 1; j ++)
            {
                strcpy(userp->bookticks[j],userp->bookticks[j + 1]);
            }
            userp->bookcnt --;
        }
        userp = userp->next;
    }
    writefile(0);
}
void changeairline()
{
    airline *airlinep = ahead1->next;
    char airlinenum[2000];
    int airplanenum, time, ticks;
    char dep[2000], des[2000];
    int exist = 0;
    int flag = 0;
    
    
    printf("\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("airline","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("\n\n\n\n\n\n\n");
        printf("-------------暂无航班信息!!");
        getchar();
        getchar();
        return ;
    }
    printf("航班号\t\t飞机号\t\t出发地点\t\t目的地\t\t出发时间\t\t票数\n");
    while (airlinep)
    {
        printf(PRINTF);
        airlinep = airlinep->next;
    }
    airlinep = ahead;
    printf("-------------请输入您要修改的航班号(按0返回):");
//    getchar();
    while (gets(airlinenum))
    {
        if (strcmp("0",airlinenum) == 0)
        {
            return ;
        }
        while (airlinep)
        {
            if (strcmp(airlinep->airlinenum,airlinenum) == 0)
            {
                exist = 1;
                break;
            }
            airlinep = airlinep->next;
        }
        if (!exist)
        {
            airlinep = ahead;
            printf("-------------未查询到该航班!请重新输入:");
        } else 
        {
            break;
        }
    }
    if (!exist)
    {
        return ;
    } else 
    {
        int  choose ;
        cls();
        changemenu();
        while (1)
        {
            printf("-------------请输入您要进行的操作:");
            scanf("%d",&choose);
            switch(choose)
            {
                case 1:
                        printf("-------------请输入修改后的航班号:");
                        scanf("%s",airlinenum);
                        changeuserairline(airlinep->airlinenum,airlinenum);
                        strcpy(airlinep->airlinenum,airlinenum);
                        break;
                case 2:
                        printf("-------------请输入修改后的飞机号:");
                        scanf("%lld",&airplanenum);
                        airlinep->airplanenum = airplanenum;
                        break;
                case 3:
                        printf("-------------请输入修改后的出发地点:");
                        scanf("%s",dep);
                        strcpy(airlinep->dep,dep);
                        break;
                case 4:
                        printf("-------------请输入修改后的目的地:");
                        scanf("%s",des);
                        strcpy(airlinep->des,des);
                        break;
                case 5:
                        printf("-------------请输入修改后的起飞时间:");
                        while (scanf("%d",&time))
                        {
                            if (time < 1 || time > 7)
                        {
                            printf("-------------请输入正确的起飞时间(周一到周日用1-7表示):");
                        } else 
                        {
                            airlinep->time = time;
                            break;
                        }
             
                        }
                        break;
                case 6:
                        printf("-------------请输入修改后的机票数:");
                        while (scanf("%d",&ticks))
                        {
                            if (ticks <= 0)
                            {
                                printf("-------------请输入正确格式的机票数!");
                            } else if (ticks > 999)
                        {
                            printf("-------------请输入0-999以内的机票数!");
                            } else 
                            {
                                airlinep->ticks = ticks;
                                break;
                            }
                        }
                        break;
                case 7:
                        flag = 1;
                        break;
            }
            if (flag)
            {
                break;
            }
        }
    }
    writefile(2);
}
void changeuserairline(char *userbookticks, char *bookticks)
{
    user *userp = uhead;
    while (userp)
    {
        for (int i = 0; i < userp->bookcnt; i ++)
        {
            if (strcmp(userp->bookticks[i],userbookticks) == 0)
            {
                strcpy(userp->bookticks[i],bookticks);
            }
        }
        userp = userp->next;
    }
    writefile(0);
}
void searchuser()
{
    user *userp = uhead;
    char username[2000];
    int flag = 0;
    
    printf("-------------请输入您要查询的乘客名(按0退出):");
    gets(username);
    if (strcmp(username,"0") == 0)
        {
            return ;
        } 
    while (userp)
    {
        if (strcmp(userp->username,username) == 0)
        {
            flag = 1;
            break;
        }
        userp = userp->next;
    }
    if (!flag)
    {
        cls();
        printf("\n\n\n\n\n\n\n");
        printf("\t\t\t\t\t*******************************\n"); 
        printf("\t\t\t\t\t**                           **\n");
        printf("\t\t\t\t\t**     不存在该乘客信息!    **\n");
        printf("\t\t\t\t\t**     即将跳转至上一页面... **\n");
        printf("\t\t\t\t\t**                           **\n");
        printf("\t\t\t\t\t*******************************\n");
        Sleep(2000);
        return ; 
    } else 
    {
        long long int sign;
        while (1)
        {
            cls();
            printf("\n\n");
            printf("\t\t\t\t\t  乘客%s的个人信息\n",userp->username);
            printf("\t\t\t\t***********************************\n");
            printf("\t\t\t\t           乘客账号:");
            puts(userp->username);
            printf("\t\t\t\t**                               **\n");
            printf("\t\t\t\t           乘客密码:");
            puts(userp->scert);
            printf("\t\t\t\t**                               **\n");
            printf("\t\t\t\t           订票次数:");
            printf("%d\n",userp->bookcnt);
            printf("\t\t\t\t**                               **\n");
            if (userp->bookcnt)
            {
                printf("\t\t\t\t           订票航班号:");
                for (int i = 0; i < userp->bookcnt; i ++) 
                {
                    printf("%s ",userp->bookticks[i]);
                }
                printf("\n");
                printf("\t\t\t\t**                               **\n");
            } else
            {
                printf("\t\t\t             此乘客还未预订任何航班!\n");
            }
            printf("请输入0返回上一页面!");
            while (scanf("%lld",&sign))
            {
                if (sign == 0)
                {
                    return ;
                } else 
                {
                    printf("无效的输入!请重新输入:");
                }
            }
             
        }
    }
}

void bookticks(user *userp)
{
    char airlinenum[2000];
    airline *airlinep = ahead1->next;
    
    int exist = 0;
    int sign = 1;
    
    printf("\n\n\n\n\n\n");

    FILE *fp;
    fp = fopen("airline","r"); 
    char ch;
    ch =  fgetc(fp);
    if (ch == EOF)
    {
        printf("-------------暂无航班信息!!");
        getchar();
        return ;
    }
    printf("航班号\t\t飞机号\t\t出发地点\t\t目的地\t\t出发时间\t\t票数\n");
    while (airlinep)
    {
        printf(PRINTF);
        airlinep = airlinep->next;
    }
    printf("-------------请输入您要预订的航班号(按0退出):");
    getchar();
    gets(airlinenum);
    airlinep = ahead;
    if (strcmp("0",airlinenum) == 0)
        {
            return ;
        }
    while (airlinep)
    {
        
        if (strcmp(airlinep->airlinenum,airlinenum) == 0)
        {
            if (airlinep->ticks == 0)
            {
                printf("-------------此航班无余票!\n");
                sign = 0;
            } else
            {
                int n;
                printf("-------------请输入要预订的机票数量:");
                while (scanf("%d",&n))
                {
                    if (airlinep->ticks < n)
                    {
                        printf("-------------机票数量不够!请重新输入:");
                    } else if (airlinep->ticks >= n)
                    {
                        userp->ticks += n; 
                        airlinep->ticks -= n;
                        break;
                    }
                }
                userp->bookcnt ++;
                strcpy(userp->bookticks[userp->bookcnt - 1],airlinenum);
//                userp->usertime = airlinep->time;
                writefile(0);
                writefile(2);
                exist = 1;
                break;
            }
        }
        airlinep = airlinep->next;
    }
    if (exist == 0 && sign == 1)
    {
        printf("-------------不存在此航班!\n");
    } else if (exist == 1)
    {
        printf("-------------航班%s订票成功!\n",airlinep->airlinenum);
    }
    printf("-------------页面即将跳转...");
    Sleep(2000);
}
void returnticks(user *userp)
{
    airline *airlinep = ahead;
    char airlinenum[2000];
    int exist = 0;
    int flag = 0;
    int cnt = userp->bookcnt;
    if (cnt == 0)
    {
        printf("\n\n\n\n\n\n\n");
        printf("\t\t\t\t\t\t您还未预订任何航班!");
        getchar();
        return ;
    }
    
    printf("\n\n\n\n\n\n");
    
    for (int i = 0; i < cnt; i ++)
    {
        printf("-------------第%d次预订的航班号:",i + 1);
        printf("%s\n",userp->bookticks[i]);
    }
    printf("-------------请输入要退还机票的航班号(按0退出):");
    
    getchar();
    while (gets(airlinenum))
    {
        if (strcmp(airlinenum,"0") == 0)
        {
            return ;
        }
        for (int i = 0; i < userp->bookcnt; i ++)
        {
            if (strcmp(airlinenum,userp->bookticks[i]) == 0)
            {
                flag = i;
                exist = 1;
                break;
            }
        }
        if (!exist)
        {
            printf("-------------为查询到该航班号!\n");
            printf("-------------请重新输入航班号(按0退出):");
        } else 
        {
            break;
        }
    }
    int n;
    while (airlinep)
    {
        if (strcmp(airlinep->airlinenum,airlinenum) == 0)
        {
            printf("-------------请输入要退订票数量:");
            while (scanf("%d",&n))
            {
                if (userp->ticks < n)
                {
                    printf("-------------您未持有此数量票量!\n");
                    printf("-------------请重新输入:");
                } else if (userp->ticks >= n)
                {
                    userp->ticks -= n;
                    airlinep->ticks += n;
                    break;
                }
            }
        }
        airlinep = airlinep->next;
    }
    
    if (userp->ticks == 0)
    {
        for (int i = flag; i < userp->bookcnt - 1; i ++)
        {
            strcpy(userp->bookticks[i],userp->bookticks[i + 1]);
        }
            userp->bookcnt --;
    }

    writefile(0);
    writefile(2);
    printf("-------------%s号航班退票成功!\n",userp->bookticks[flag]);
    printf("-------------即将返回上一页面...");
    Sleep(2000);
}
void findairline(user *userp)
{
    int cnt = userp->bookcnt;
    long long  sign;
    if (cnt == 0)
    {
        printf("\n\n\n\n\n\n\n");
        printf("\t\t\t\t\t\t您还未预订任何航班!\n");
    }
    printf("\n\n\n\n\n\n");

    
    for (int i = 0; i < cnt; i ++)
    {
        printf("\t\t\t\t\t\t第%d次预订的航班号:%s\t第%d预定航班的票数:%d\n",i + 1, userp->bookticks[i], i+1, userp->ticks);
    }
    printf("\n\n请输入0退出:");
    while (scanf("%lld",&sign))
    {
        if (sign == 0)
        {
            break;
        } else
        {
            printf("-------------无效的输入!请重新输入!");
        }
    }
}
void search()
{
    int sign;
    while (1)
    {
        cls();
        date();
        searchmenu();
        char choose = getch();
        switch(choose)
        {
            case '1':
                    cls();
                    print_message();
                    break;
            case '2':
                    cls();
                    printairline();
                    break;
            case '3':
                    cls();
                    printtime();
                    break;
            case '4':
                    cls();
                    printticks();
                    break; 
            case '5':
                    cls();
                    sign = 1;
                    break;
            case '6':
                    cls();
                    over();
                    cls();
            default :
                    break;
        }
        if (sign)
        {
            break;
        }
    }
}

void airlinesort()
{
    airline *f, *x, *y, *p;
    f = NULL;
    if (ahead1->next == NULL || ahead1->next->next == NULL)
    {
        return ;
    }
    while (f != ahead1->next->next)
    {
        for (p = ahead1; p->next->next != f; p = p->next)
        {
            if (strcmp(p->next->airlinenum,p->next->next->airlinenum) > 0)
            {
                x = p->next;
                y = p->next->next;
                p->next = y;
                x->next = y->next;
                y->next = x;
            }
        }
        f = p->next;
    }
    return ;
}


void timesort()
{
    airline *f, *x, *y, *p;
    f = NULL;
    if (ahead1->next == NULL || ahead1->next->next == NULL)
    {
        return ;
    }
    while (f != ahead1->next->next)
    {
        for (p = ahead1; p->next->next != f; p = p->next)
        {
            if (p->next->time > p->next->next->time)
            {
                x = p->next;
                y = p->next->next;
                p->next = y;
                x->next = y->next;
                y->next = x;
            }
        }
        f = p->next;
    }
    return ;
}
void tickssort()
{
    airline *f, *x, *y, *p;
    f = NULL;
    if (ahead1->next == NULL || ahead1->next->next == NULL)
    {
        return ;
    }
    while (f != ahead1->next->next)
    {
        for (p = ahead1; p->next->next != f; p = p->next)
        {
            if (p->next->ticks > p->next->next->ticks)
            {
                x = p->next;
                y = p->next->next;
                p->next = y;
                x->next = y->next;
                y->next = x;
            }
        }
        f = p->next;
    }
    return ;
}
void printairline()
{
    date();
    airlinesort();
    airline *airlinep = ahead1->next;
    printf("\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("airline","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无航班信息!!");
        getchar();
        return ;
    }

    printf("航班号\t\t飞机号\t\t出发地点\t\t目的地\t\t出发时间\t\t票数\n");
    while (airlinep)
    {
        printf(PRINTF);
        airlinep = airlinep->next;
    }
    system("pause");
}

void printticks()
{
    date();
    tickssort();
    airline *airlinep = ahead1->next;
    printf("\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("airline","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无航班信息!!");
        getchar();
        return ;
    }
    printf("航班号\t\t飞机号\t\t出发地点\t\t目的地\t\t出发时间\t\t票数\n");
    while (airlinep)
    {
//        printf("666\n");
        printf(PRINTF);
        airlinep = airlinep->next;
    }
    system("pause");
}
void printtime()
{
    date();
    timesort();
    airline *airlinep = ahead1->next;
    printf("\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("airline","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无航班信息!!");
        getchar();
        return ;
    }
    printf("航班号\t\t飞机号\t\t出发地点\t\t目的地\t\t出发时间\t\t票数\n");
    while (airlinep)
    {
        printf(PRINTF);
        airlinep = airlinep->next;
    }
    system("pause");
}
void searchscert()
{
    printf("\n\n\n\n\n\n");
    printf("\t\t\t\t\t********************************\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t**      1.管理员找回密码      **\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t**      2.乘客找回密码        **\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t**      3.返回                **\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t********************************\n");
    printf("请按键选择:");
    int sign = 0;
    char choose = getch();
    while (1)
    {
        cls();
        
        switch (choose)
        {
            case '1':
                    cls();
                     searchmangerscert();
                     sign = 1;
                    break;
            case '2':
                    cls();
                    searchuserscert();
                    sign = 1;
                    break;
            case '3':
                    sign = 1;
                    break;
            default :
                    printf("输入无效!");
                    break;
        }
        if (sign)
        {
            break;
        }
    }
}
void searchmangerscert()
{
    date();
    manger *p = mhead;
    char mangername[2000];
    int flag = 0;
    int sign = 0;
    printf("\n\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("manger","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无管理员账号!!\n-------------请先前往注册!");
        getchar();
        return ;
    }
    printf("-------------请输入您的账号(按0退出):");
//    getchar();
    while (gets(mangername))
    {
        if (strcmp(mangername,"0") == 0)
        {
            return ;
        }
        while (p)
        {
            if (strcmp(p->mangername,mangername) == 0)
            {
                flag = 1;
                break;
            }
            p = p->next; 
        }
        if (flag)
        {
            break;
        } else
        {
            printf("-------------此账号不存在!请重新输入(按0退出):");
            p = mhead;
        }
    }
    if (flag)
    {
        p = mhead;
        char securityscert[2000];
        printf("-------------请输入您设置的密保(按0退出):");
        while (gets(securityscert))
        {
            if (strcmp(securityscert,"0") == 0)
            {
                return ;
            }
            while (p)
            {
                if (strcmp(p->securityscert,securityscert) == 0)
                {
                    sign = 1;
                    break;
                }
                p = p->next;
            }
            if (sign)
            {
                printf("-------------密保输入正确!\n");
                printf("-------------您的密码为%s\n",p->scert);
                getchar();
                return ;
            } else 
            {
                printf("-------------密保输入错误!请重新输入(按0退出):");
                p = mhead;
            }
        }
    }
}
void searchuserscert()
{
    date();
    user *p = uhead;
    char username[2000];
    int flag = 0;
    int sign = 0;
    printf("\n\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("user","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无乘客账号!!\n-------------请先前往注册!");
        getchar();
        return ;
    }
    printf("-------------请输入您的账号(按0退出):");
//    getchar();
    while (gets(username))
    {
        if (strcmp(username,"0") == 0)
        {
            return ;
        }
        while (p)
        {
            if (strcmp(p->username,username) == 0)
            {
                flag = 1;
                break;
            }
            p = p->next; 
        }
        if (flag)
        {
            break;
        } else
        {
            printf("-------------此账号不存在!请重新输入(按0退出):");
            p = uhead;
        }
    }
    if (flag)
    {
        p = uhead;
        char securityscert[2000];
        printf("-------------请输入您设置的密保(按0退出):");
        while (gets(securityscert))
        {
            if (strcmp(securityscert,"0") == 0)
            {
                return ;
            }
            while (p)
            {
                if (strcmp(p->securityscert,securityscert) == 0)
                {
                    sign = 1;
                    break;
                }
                p = p->next;
            }
            if (sign)
            {
                printf("-------------密保输入正确!\n");
                printf("-------------您的密码为%s\n",p->scert);
                getchar();
                return ;
            } else 
            {
                printf("-------------密保输入错误!请重新输入(按0退出):");
                p = uhead;
            }
        }
    }
}
void changescert()
{
    printf("\n\n\n\n\n\n");
    printf("\t\t\t\t\t********************************\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t**      1.管理员修改密码      **\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t**      2.乘客修改密码        **\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t**      3.返回                **\n");
    printf("\t\t\t\t\t**                            **\n");
    printf("\t\t\t\t\t********************************\n");
    printf("请按键选择:");
    char choose = getch();
    int sign = 0; 
    while (1)
    {
        cls();
        switch (choose)
        {
            case '1':
                    cls();
                     changemangerscert();
                     sign = 1;
                    break;
            case '2':
                    cls();
                    changeuserscert();
                    sign = 1;
                    break;
            case '3':
                    sign = 1;
                    break;
            default :
                    printf("输入无效!");
                    break;
        }
        if (sign)
        {
            break;
        }
    }
}
void changemangerscert()
{
    date();
    manger *p = mhead;
    char mangername[2000];
    char scert[2000];
    int flag = 0;
    int sign = 0;
    char securityscert[2000];
    FILE *fp;
    fp = fopen("manger","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无管理员账号信息!!\n-------------请先前往注册!");
        getchar();
        return ; 
    }
    printf("\n\n\n\n\n\n\n");
    printf("-------------请输入您的账号(按0退出):");
    while (gets(mangername))
    {
        if (strcmp(mangername,"0") == 0)
        {
            return ;
        }
        while (p)
        {
            if (strcmp(p->mangername,mangername) == 0)
            {
                flag = 1;
                break;
            }
            p = p->next; 
        }
        if (flag)
        {
            break;
        } else
        {
            printf("-------------此账号不存在!请重新输入:");
            p = mhead;
        }
    }
    if (flag)
    {
        p = mhead;
        printf("-------------请输入您设置的密保(按0退出):");
        while (gets(securityscert))
        {
            if (strcmp(securityscert,"0") == 0)
            {
                return ;
            }
            while (p)
            {
                if (strcmp(p->securityscert,securityscert) == 0)
                {
                    sign = 1;
                    break;
                }
                p = p->next;
            }
            if (sign)
            {
                printf("-------------请输入修改后的密码(按0退出):");
                while (gets(scert))
                {
                    if (strcmp(scert,"0") == 0)
                    {
                        return ;
                    } 
                    if (strlen(scert) <= 16)
                    {
                        break;
                    } else 
                    {
                        printf("-------------请输入1到16位的密码:");
                    }
                }
                strcpy(p->scert,scert);
                printf("-------------密码修改成功!");
                writefile(1);
                getchar();
                return ;
            } else 
            {
                printf("-------------密保输入错误!请重新输入:");
                p = mhead;
            }
        }
    }
}
void changeuserscert()
{
    date();
    user *p = uhead;
    char username[2000];
    char scert[2000];
    char securityscert[2000];
    int flag = 0;
    int sign = 0;
    FILE *fp;
    fp = fopen("user","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无管理员账号信息!!\n-------------请先前往注册!");
        getchar();
        return ; 
    }
    printf("\n\n\n\n\n\n\n");
    printf("-------------请输入您的账号(按0退出):");
    while (gets(username))
    {
        if (strcmp(username,"0") == 0)
        {
            return ;
        }
        while (p)
        {
            if (strcmp(p->username,username) == 0)
            {
                flag = 1;
                break;
            }
            p = p->next; 
        }
        if (flag)
        {
            break;
        } else
        {
            printf("-------------此账号不存在!请重新输入:");
            p = uhead;
        }
    }
    if (flag)
    {
        p = uhead;
        printf("-------------请输入您设置的密保(按0退出):");
        while (gets(securityscert))
        {
            if (strcmp(securityscert,"0") == 0)
            {
                return ;
            }
            while (p)
            {
                if (strcmp(p->securityscert,securityscert) == 0)
                {
                    sign = 1;
                    break;
                }
                p = p->next;
            }
            if (sign)
            {
                printf("-------------请输入修改后的密码(按0退出):");
                while (gets(scert))
                {
                    if (strcmp(scert,"0") == 0)
                    {
                        return ;
                    } 
                    if (strlen(scert) <= 16)
                    {
                        break;
                    } else 
                    {
                        printf("-------------请输入1到16位的密码:");
                    }
                }
                strcpy(p->scert,scert);
                printf("-------------密码修改成功!");
                writefile(0);
                getchar();
                return ;
            } else 
            {
                printf("-------------密保输入错误!请重新输入:");
                p = uhead;
            }
        }
    }
}

void print_message()
{
    date();
    airline *airlinep = ahead1->next;
    printf("\n\n\n\n\n\n");
    FILE *fp;
    fp = fopen("airline","r");
    char ch;
    ch = fgetc(fp);
    rewind(fp);
    if (ch == EOF)
    {
        printf("-------------暂无航班信息!!");
        getchar();
        return ;
    }
    printf("航班号\t\t飞机号\t\t出发地点\t\t目的地\t\t出发时间\t\t票数\n");
    while (airlinep)
    {
//        printf("666\n");
        printf(PRINTF);
        airlinep = airlinep->next;
    }
    system("pause");
}

void hualihushao1()
{
    printf("\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t\t\t即将进入订票系统...");
    system("color 40");
    Sleep(250);
    system("color 04");
    Sleep(250);
    system("color 60");
    Sleep(250);
    system("color 24");
    Sleep(250);
    system("color AF");
    Sleep(250);
    system("color 92");
    Sleep(250);
    system("color 57");
    Sleep(250);
    system("color F4");
    Sleep(250);
    system("color F4");
    Sleep(250);
}
void hualihushao2()
{
    printf("\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\t\t\t\t\t\t订票系统即将关闭...");
    system("color 40");
    Sleep(250);
    system("color 04");
    Sleep(250);
    system("color 60");
    Sleep(250);
    system("color 24");
    Sleep(250);
    system("color AF");
    Sleep(250);
    system("color 92");
    Sleep(250);
    system("color 57");
    Sleep(250);
    system("color F4");
    Sleep(250);
    system("color F4");
    Sleep(250);
}

void load()
{
    system("color 8b"); //F1
    cout << "\n\n\n\n\n\n\n\n\n\n\n\n";
    cout << "\t\t\t\t\t正在进入系统..请稍等...";
    for (int i = 0; i <= 100; i += 2)
    {
        cout << "\r\t\t\t\t\t\t\t\t" << i << "%";
        Sleep(50);
        if (i == 48)
        {
            Sleep(1000);
        }
        if (i == 76)
        {
            Sleep(800);
        }
        if (i == 100)
        {
            Sleep(500);
        }
    }
}

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

本文为大家分享了C++实现图书管理系统的具体代码,供大家参考。直接上代码#include <stdafx.h>#include <iostream>#include <string& ...