C语言航空订票系统
RooKiChen 人气:0大一写的时候没有写注释,后来也懒得加了。在这里说一下读写文件的思路吧。
就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体中的数据保存到链表中。
以下代码可直接复制粘贴就能运行,绝对是新手的好福利!
如果有第一次写这种大作业不知道如何下手,但又不想直接复制粘贴,想搞清楚这个代码的原理的可以私信我,毕竟我当时也第一次写这种大作业时也很苦恼(我当时写的要是有这么完整的代码该多好啊,我直接就是复制粘贴运行看效果)
// 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); } } }
加载全部内容