航班售票管理系统
功能图如下
源码如下
#include<stdio.h>
#include"conio.h"
#include<stdlib.h>
#include<string.h>
int c;
struct flight
{
char m_num[10];
char m_beginspace[10];
char m_endspace[10];
char m_begintime[20];
char m_endtime[20];
int m_price;
int m_vetos;
int m_revetos;
int m_buyvetos;
flight* next;
};
struct manager
{
char m_accountname[20];
char m_account[20];
char m_passcard[20];
char m_Idcard[20];
int m_num;
manager* next;
};
struct Users
{
char m_accountname[20];
char m_account[20];
char m_passcard[20];
char m_Idcard[20];
int m_num;
Users* next;
};
struct MANAGERMENT
{
int flights = 0;
int managers = 0;
int loginchiose();
void managerment();
void managermenu();
void managerment1();
void managermenu1();
void managerment2();
void managermenu2();
void managerment3();
void managermenu3();
int Login();
void managerLoad();
void managersave();
void managershow();
void manageradd();
void managerdelete();
void managerflightsave();
void managerflightload();
void managerflightadd();
void managerflightdelete();
void managerflightmodify();
void managerflightshow();
void managerfind();
void managerflightfind();
void manageruseradd();
void managerusershow();
void manageruserdelete();
void manageryserfind();
};
struct USERMANAGER
{
int uflights = 0;
int users = 0;
void userment();
void userregister();
void usermenu();
void usersave();
void userload();
void userlogout(char account[]);
void userbuytickets();
void userreturnticket();
void userflightshow();
void userticketssave(char account[]);
void userticketsload(char account[]);
void userbuyflightshow();
};
manager* head = NULL;
Users* uhead = NULL;
flight* fhead = NULL;
flight* ufhead = NULL;
Users USER;
MANAGERMENT m;
USERMANAGER u;
int main()
{
MANAGERMENT m;
USERMANAGER u;
m.managerLoad();
m.managerflightload();
u.userload();
int c = m.loginchiose();
switch (c)
{
case 1:m.managerment(); break;
case 2:u.userment(); break;
}
return 0;
}
int MANAGERMENT::loginchiose()
{
printf("+-------------------------------+\n");
printf("|\t航班售票管理软件\t|\n");
printf("+-------------------------------+\n");
printf("|\t 请选择功能列表\t\t|\n");
printf("+-------------------------------+\n");
printf("|\t 1.注册账号\t\t|\n");
printf("|\t 2.登录账号\t\t|\n");
printf("+-------------------------------+\n");
printf("请选择:");
char p = _getch();
while (p < '1' || p>'2')p = _getch();
switch (p - '0')
{
case 1:u.userregister();
case 2:c = m.Login(); break;
default:break;
}
return c;
}
//管理员条件分支控制
void MANAGERMENT::managerment()
{
char use = 1;
while (use)
{
system("cls");
m.managermenu();
use = _getch() - '0';
switch (use) {
case 1:m.managerment1(); break;
case 2:m.managerment2(); break;
case 3:m.managerment3(); break;
case 4:u.userment(); break;
default:break;
}
}
}
//管理员菜单
void MANAGERMENT::managermenu()
{
printf("+-------------------------------+\n");
printf("|\t航班售票管理软件\t|\n");
printf("+-------------------------------+\n");
printf("|\t 请选择功能列表\t\t|\n");
printf("+-------------------------------+\n");
printf("|\t1.管理员账户管理\t|\n");
printf("|\t2.航班信息管理\t\t|\n");
printf("|\t3.用户信息管理\t\t|\n");
printf("|\t4.售票系统访问\t\t|\n");
printf("|\t0.退出系统\t\t|\n");
printf("+-------------------------------+\n");
}
//管理员条件分支控制子类管理
void MANAGERMENT::managerment1()
{
char use = 1;
while (use)
{
system("cls");
m.managermenu1();
use = _getch() - '0';
switch (use) {
case 1:m.manageradd(); m.managersave(); break;
case 2:m.managerdelete(); m.managersave(); break;
case 3:m.managershow(); break;
case 4:m.managerfind(); break;
default:break;
}
if (use != 0) system("pause");
}
}
//管理员菜单子类管理
void MANAGERMENT::managermenu1()
{
printf("+-------------------------------+\n");
printf("|\t航班售票管理软件\t|\n");
printf("+-------------------------------+\n");
printf("|\t 请选择功能列表\t\t|\n");
printf("+-------------------------------+\n");
printf("|\t1.添加管理员账户\t|\n");
printf("|\t2.删除管理员账户\t|\n");
printf("|\t3.展示管理员信息\t|\n");
printf("|\t4.查询管理员信息\t|\n");
printf("|\t0.退出系统\t\t|\n");
printf("+-------------------------------+\n");
}
//管理员条件分支控制子类航班
void MANAGERMENT::managerment2()
{
char use = 1;
while (use)
{
system("cls");
m.managermenu2();
use = _getch() - '0';
switch (use) {
case 1:m.managerflightadd(); m.managerflightsave(); break;
case 2:m.managerflightdelete(); m.managerflightsave(); break;
case 3:m.managerflightshow(); break;
case 4:m.managerflightfind(); break;
case 5:m.managerflightmodify(); m.managerflightsave(); break;
default:break;
}
if (use != 0) system("pause");
}
}
//管理员菜单子类航班
void MANAGERMENT::managermenu2()
{
printf("+-------------------------------+\n");
printf("|\t航班售票管理软件\t|\n");
printf("+-------------------------------+\n");
printf("|\t 请选择功能列表\t\t|\n");
printf("+-------------------------------+\n");
printf("|\t1.添加航班信息\t\t|\n");
printf("|\t2.删除航班信息\t\t|\n");
printf("|\t3.展示航班信息\t\t|\n");
printf("|\t4.查询航班信息\t\t|\n");
printf("|\t5.修改航班信息\t\t|\n");
printf("|\t0.退出系统\t\t|\n");
printf("+-------------------------------+\n");
}
//管理员条件分支控制子类用户
void MANAGERMENT::managerment3()
{
char use = 1;
while (use)
{
system("cls");
m.managermenu3();
use = _getch() - '0';
switch (use) {
case 1:m.managerusershow();
m.manageruseradd();
u.userload(); break;
case 2:m.manageruserdelete();
u.usersave(); break;
case 3:m.managerusershow(); break;
case 4:m.manageryserfind(); break;
default:break;
}
if (use != 0) system("pause");
}
}
//管理员菜单子类用户
void MANAGERMENT::managermenu3()
{
printf("+-------------------------------+\n");
printf("|\t航班售票管理软件\t|\n");
printf("+-------------------------------+\n");
printf("|\t 请选择功能列表\t\t|\n");
printf("+-------------------------------+\n");
printf("|\t1.添加用户信息\t\t|\n");
printf("|\t2.删除用户信息\t\t|\n");
printf("|\t3.展示用户信息\t\t|\n");
printf("|\t4.查询用户信息\t\t|\n");
printf("|\t0.退出系统\t\t|\n");
printf("+-------------------------------+\n");
}
//用户登录
int MANAGERMENT::Login()
{
manager* p1 = head;
Users* p2 = uhead;
char account[20], passward[20], root[20] = "root";
system("cls");
printf("+-------------登录-------------+\n");
printf("账号:");
scanf("%s", &account);
printf("密码:");
char a = 0;
int n = 0;
while (a != '\r') {
a = _getch();
if (a == '\b' && n > 0) {
printf("\b \b"); n--;
}
else if (a != '\r' && a != '\b') {
printf("*");
passward[n++] = a;
}
}
printf("\n");
passward[n] = '\0';
//scanf("%s", &passward);
if (!strcmp(account, root) && !strcmp(passward, root)) {
strcpy(USER.m_account, "root");
return 1;
}
while (p1 != NULL)
{
if ((strcmp(p1->m_account, account) == 0) && (strcmp(p1->m_passcard, passward) == 0)) {
strcpy(USER.m_account, p1->m_account);
return 1;
}
p1 = p1->next;
}
while (p2 != NULL)
{
if ((!strcmp(p2->m_account, account)) && (!strcmp(p2->m_passcard, passward))) {
USER = *p2;
return 2;
}
p2 = p2->next;
}
system("cls");
printf("账号或密码错误,请重试\n");
system("pause");
Login();
}
//管理员信息读取
void MANAGERMENT::managerLoad()
{
FILE* fp;
manager* p1 = NULL, * p2 = NULL, que;
que.next = NULL;
if ((fp = fopen("manager.text", "r")) == NULL) return;
while (fscanf(fp, "%s%s%s%s%d", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard, &que.m_num) != EOF)
{
p1 = (manager*)malloc(sizeof(manager));
*p1 = que;
p1->next = NULL;
if (managers == 0) {
head = p1;
p2 = p1;
managers++;
}
else {
head = p1;
head->next = p2;
p2 = head;
managers++;
}
}
fclose(fp);
}
//管理员信息保存
void MANAGERMENT::managersave()
{
manager* p1 = head;
FILE* fp = fopen("manager.text", "w");
while (p1 != NULL)
{
fprintf(fp, "%s\t%s\t%s\t%s\t%d\n", p1->m_accountname, p1->m_account, p1->m_passcard, p1->m_Idcard, p1->m_num);
p1 = p1->next;
}
fclose(fp);
}
//管理员信息展示
void MANAGERMENT::managershow()
{
system("cls");
manager* p1 = head;
printf("+-----------------------------------------------------------------+\n");
while (p1 != NULL)
{
printf("用户名:%-10s账号:%-10s密码:%-10sIDcard:%-10s\n", p1->m_accountname,p1->m_account, p1->m_passcard, p1->m_Idcard);
p1 = p1->next;
}
printf("+-----------------------------------------------------------------+\n");
}
//管理员信息添加
void MANAGERMENT::manageradd()
{
system("cls");
manager* p1 = (manager*)malloc(sizeof(manager)), * p2 = head, que;
que.next = NULL;
printf("请依次输入管理员的账户名、账号、密码、IDcard(用空格分离)\n");
scanf("%s%s%s%s", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard);
while (p2 != NULL)
{
if (!strcmp(p2->m_account, que.m_account))
{
system("cls");
printf("该账号已存在,请重新输入\n");
printf("请依次输入管理员的账户名、账号、密码、IDcard(用空格分离)\n");
scanf("%s%s%s%s", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard);
p2 = head;
}
p2 = p2->next;
}
*p1 = que;
p1->next = head;
head = p1;
managers++;
p1->m_num = managers;
}
//管理员信息删除
void MANAGERMENT::managerdelete()
{
system("cls");
char account[20];
m.managershow();
printf("请输入需要删除的账户:");
scanf("%s", &account);
manager* p1 = head;
manager* p2 = head;
while (p1 != NULL)
{
if (!strcmp(account, p1->m_account)) {
if (p1 == head) {
head = p1->next;
free(p1);
printf("删除成功\n");
return;
}
else {
while (p2->next != p1)p2 = p2->next;
p2->next = p1->next;
free(p1);
printf("删除成功\n");
return;
}
}
p1 = p1->next;
}
printf("该账户不存在\n");
}
//航班信息保存
void MANAGERMENT::managerflightsave()
{
flight* p1 = fhead;
FILE* fp = fopen("flight.text", "w");
while (p1 != NULL)
{
fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos);
p1 = p1->next;
}
fclose(fp);
}
//航班信息读取
void MANAGERMENT::managerflightload()
{
FILE* fp;
flight* p1 = NULL, * p2 = NULL,que;
que.next = NULL;
if ((fp = fopen("flight.text", "r")) == NULL) return;
while (fscanf(fp, "%s%s%s%s%s%d%d%d", que.m_num, que.m_beginspace, que.m_endspace, que.m_begintime, que.m_endtime, &que.m_price, &que.m_vetos, &que.m_revetos) != EOF)
{
p1 = (flight*)malloc(sizeof(flight));
*p1 = que;
p1->next = NULL;
p1->m_buyvetos = 0;
if (flights == 0) {
fhead = p1;
p2 = p1;
flights++;
}
else {
fhead = p1;
fhead->next = p2;
p2 = fhead;
flights++;
}
}
fclose(fp);
}
//航班信息添加
void MANAGERMENT::managerflightadd()
{
system("cls");
flight* p1 = (flight*)malloc(sizeof(flight)), * p2 = fhead, que;
que.next = NULL;
printf("请依次输入该航班的编号、始发地、目的地、出发时间、落地时间、价格、总票数、余票数(用空格分离)\n");
scanf("%s%s%s%s%s%d%d%d", que.m_num, que.m_beginspace, que.m_endspace, que.m_begintime, que.m_endtime, &que.m_price, &que.m_vetos, &que.m_revetos);
while (p2 != NULL)
{
if (!strcmp(p2->m_num, que.m_num))
{
system("cls");
printf("该编号已存在,请重新输入\n");
printf("请依次输入该航班的编号、始发地、目的地、出发时间、落地时间、价格、总票数、余票数(用空格分离)\n");
scanf("%s%s%s%s%s%d%d%d", que.m_num, que.m_beginspace, que.m_endspace, que.m_begintime, que.m_endtime, &que.m_price, &que.m_vetos, &que.m_revetos);
p2 = fhead;
}
p2 = p2->next;
}
*p1 = que;
p1->next = fhead;
p1->m_buyvetos = 0;
fhead = p1;
flights++;
}
//航班信息删除
void MANAGERMENT::managerflightdelete()
{
system("cls");
char num[20];
m.managerflightshow();
printf("请输入需要删除的航班编号:");
scanf("%s", &num);
flight* p1 = fhead;
flight* p2 = fhead;
while (p1 != NULL)
{
if (!strcmp(num, p1->m_num)) {
if (p1 == fhead) {
fhead = p1->next;
free(p1);
printf("删除成功\n");
return;
}
else {
while (p2->next != p1)p2 = p2->next;
p2->next = p1->next;
free(p1);
printf("删除成功\n");
return;
}
}
p1 = p1->next;
}
printf("该账户不存在\n");
}
//航班信息修改
void MANAGERMENT::managerflightmodify()
{
system("cls");
char num[20];
int ok = 0;
m.managerflightshow();
printf("请输入需要修改的航班编号:");
scanf("%s", &num);
flight* p1 = fhead;
flight* p2 = fhead;
while (p1 != NULL)
{
if (!strcmp(num, p1->m_num)) {
if (p1 == fhead) {
fhead = p1->next;
free(p1);
ok = 1;
break;
}
else {
while (p2->next != p1)p2 = p2->next;
p2->next = p1->next;
free(p1);
ok = 1;
break;
}
}
p1 = p1->next;
}
if (ok == 1) {
flight* p1 = (flight*)malloc(sizeof(flight)), * p2 = fhead, que;
que.next = NULL;
printf("请依次输入该航班始发地、目的地、出发时间、落地时间、价格、总票数、余票数(用空格分离)\n");
scanf("%s%s%s%s%d%d%d", que.m_beginspace, que.m_endspace, que.m_begintime, que.m_endtime, &que.m_price, &que.m_vetos, &que.m_revetos);
while (p2 != NULL)
{
if (!strcmp(p2->m_num, que.m_num))
{
system("cls");
printf("该编号已存在,请重新输入\n");
printf("请依次输入该航班的始发地、目的地、出发时间、落地时间、价格、总票数、余票数(用空格分离)\n");
scanf("%s%s%s%s%s%d%d%d", que.m_beginspace, que.m_endspace, que.m_begintime, que.m_endtime, &que.m_price, &que.m_vetos, &que.m_revetos);
p2 = fhead;
}
p2 = p2->next;
}
strcpy(que.m_num, num);
*p1 = que;
p1->next = fhead;
p1->m_buyvetos = 0;
fhead = p1;
flights++;
printf("修改成功");
return;
}
printf("无此航班,修改失败");
}
//航班信息展示
void MANAGERMENT::managerflightshow()
{
system("cls");
flight* p1 = fhead;
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
while (p1 != NULL)
{
printf("航班编号:%-10s始发地:%-10s目的地:%-10s出发时间:%-20s到达时间:%-20s价格:%-5d总票数:%-5d余票数:%-5d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos);
p1 = p1->next;
}
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
}
//管理员信息查询
void MANAGERMENT::managerfind()
{
int d = 0;
system("cls");
char account[20];
m.managershow();
printf("请输入需要查询的账户或用户名:");
scanf("%s", &account);
manager* p1 = head;
printf("+-----------------------------------------------------------------+\n");
while (p1 != NULL) {
if (strcmp(p1->m_accountname, account) == 0 || strcmp(p1->m_account, account) == 0) {
printf("用户名:%-10s账号:%-10s密码:%-10sIDcard:%-10s\n", p1->m_accountname, p1->m_account, p1->m_passcard, p1->m_Idcard);
d++;
}
p1 = p1->next;
}
if (d == 0)printf("无\n");
printf("+-----------------------------------------------------------------+\n");
}
//航班信息查询
void MANAGERMENT::managerflightfind()
{
int d = 0;
system("cls");
char account[20];
m.managerflightshow();
printf("请输入需要查询的航班编号或目的地或始发地:");
scanf("%s", &account);
flight* p1 = fhead;
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
while (p1 != NULL) {
if (strcmp(p1->m_beginspace, account) == 0 || strcmp(p1->m_endspace, account) == 0 || strcmp(p1->m_num, account) == 0) {
printf("航班编号:%-10s始发地:%-10s目的地:%-10s出发时间:%-20s到达时间:%-20s价格:%-5d总票数:%-5d余票数:%-5d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos);
}
p1 = p1->next;
}
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
}
//添加用户
void MANAGERMENT::manageruseradd()
{
u.userregister();
}
//用户展示
void MANAGERMENT::managerusershow()
{
system("cls");
Users* p1 = uhead;
printf("+-----------------------------------------------------------------+\n");
while (p1 != NULL)
{
printf("用户名:%-10s账号:%-10s密码:%-10sIDcard:%-10s\n", p1->m_accountname,
p1->m_account, p1->m_passcard, p1->m_Idcard);
p1 = p1->next;
}
printf("+-----------------------------------------------------------------+\n");
}
//注销用户
void MANAGERMENT::manageruserdelete()
{
system("cls");
char account[20];
m.managerusershow();
printf("请输入需要注销的账号:");
scanf("%s", &account);
Users* p1 = uhead;
Users* p2 = uhead;
while (p1 != NULL)
{
if (!strcmp(account, p1->m_account)) {
if (p1 == uhead) {
uhead = p1->next;
free(p1);
printf("注销成功\n");
return;
}
else {
while (p2->next != p1)p2 = p2->next;
p2->next = p1->next;
free(p1);
printf("注销成功\n");
return;
}
}
p1 = p1->next;
}
printf("该账户不存在\n");
}
//查询用户
void MANAGERMENT::manageryserfind()
{
int d = 0;
system("cls");
char account[20];
m.managerusershow();
printf("请输入需要查询的账户或用户名:");
scanf("%s", &account);
manager* p1 = head;
printf("+-----------------------------------------------------------------+\n");
while (p1 != NULL) {
if (strcmp(p1->m_accountname, account) == 0 || strcmp(p1->m_account, account) == 0) {
printf("用户名:%-10s账号:%-10s密码:%-10sIDcard:%-10s\n", p1->m_accountname, p1->m_account, p1->m_passcard, p1->m_Idcard);
}
p1 = p1->next;
}
printf("+-----------------------------------------------------------------+\n");
}
//用户条件分支控制
void USERMANAGER::userment()
{
u.userticketsload(USER.m_account);
u.usersave();
char use = 1;
while (use)
{
system("cls");
u.usermenu();
use = _getch() - '0';
switch (use) {
case 1:u.userflightshow(); break;
case 2:u.userbuytickets();
u.userticketssave(USER.m_account);
m.managerflightsave(); break;
case 3:u.userreturnticket();
u.userticketssave(USER.m_account);
m.managerflightsave();
break;
case 4:u.userbuyflightshow();
break;
case 5:if (c == 1) {
printf("管理员账户无法注销\n");
break;
}
u.userlogout(USER.m_account);
use = 0;
u.usersave();
break;
default:break;
}
if (use != 0) system("pause");
}
}
//用户注册
void USERMANAGER::userregister()
{
system("cls");
Users* p1 = (Users*)malloc(sizeof(Users)), * p2 = uhead, que;
manager* p3 = head;
que.next = NULL;
printf("请依次输入自己的账户名、账号、密码、IDcard(用空格分离)\n");
scanf("%s%s%s%s", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard);
while (p2 != NULL)
{
if (!strcmp(p2->m_account, que.m_account))
{
system("cls");
printf("该账号已存在,请重新输入\n");
printf("请依次输入账号的账户名、账号、密码、IDcard(用空格分离)\n");
scanf("%s%s%s%s", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard);
p2 = uhead;
}
p2 = p2->next;
}
while (p3 != NULL)
{
if (!strcmp(p3->m_account, que.m_account))
{
system("cls");
printf("该账号已存在,请重新输入\n");
printf("请依次输入账号的账户名、账号、密码、IDcard(用空格分离)\n");
scanf("%s%s%s%s", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard);
p3 = head;
}
p3 = p3->next;
}
*p1 = que;
p1->next = uhead;
uhead = p1;
users++;
p1->m_num = users;
u.usersave();
}
//用户菜单
void USERMANAGER::usermenu()
{
printf("+-------------------------------+\n");
printf("|\t航班售票管理软件\t|\n");
printf("+-------------------------------+\n");
printf("|\t 请选择功能列表\t\t|\n");
printf("+-------------------------------+\n");
printf("|\t1.航班展示\t\t|\n");
printf("|\t2.购票系统\t\t|\n");
printf("|\t3.退票系统\t\t|\n");
printf("|\t4.购票信息\t\t|\n");
printf("|\t5.账号注销\t\t|\n");
printf("|\t0.退出系统\t\t|\n");
printf("+-------------------------------+\n");
}
//用户信息保存
void USERMANAGER::usersave()
{
Users* p1 = uhead;
FILE* fp = fopen("user.text", "w");
while (p1 != NULL)
{
fprintf(fp, "%s\t%s\t%s\t%s\t%d\n", p1->m_accountname,p1->m_account, p1->m_passcard, p1->m_Idcard, p1->m_num);
p1 = p1->next;
}
fclose(fp);
}
//用户信息读取
void USERMANAGER::userload()
{
FILE* fp;
Users* p1 = NULL, * p2 = NULL, que;
que.next = NULL;
if ((fp = fopen("user.text", "r")) == NULL) return;
while (fscanf(fp, "%s%s%s%s%d", que.m_accountname, que.m_account, que.m_passcard, que.m_Idcard, &que.m_num) != EOF)
{
p1 = (Users*)malloc(sizeof(Users));
*p1 = que;
p1->m_num = users+1;
if (users == 0) {
uhead = p1;
p2 = p1;
users++;
}
else {
uhead = p1;
uhead->next = p2;
users++;
}
}
fclose(fp);
}
//用户注销
void USERMANAGER::userlogout(char account[])
{
system("cls");
Users* p1 = uhead;
Users* p2 = uhead;
while (p1 != NULL)
{
if (!strcmp(account, p1->m_account)) {
if (p1 == uhead) {
uhead = p1->next;
free(p1);
printf("注销成功\n");
return;
}
else {
while (p2->next != p1)p2 = p2->next;
p2->next = p1->next;
free(p1);
printf("注销成功\n");
return;
}
}
p1 = p1->next;
}
}
//用户购票
void USERMANAGER::userbuytickets()
{
flight* p1 = fhead;
char num[10];
int n = 0;
u.userflightshow();
printf("请输入航班编号:");
scanf("%s", num);
while (p1 != NULL) {
if (!strcmp(p1->m_num, num)) {
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
printf("航班编号:%-10s始发地:%-10s目的地:%-10s出发时间:%-20s到达时间:%-20s价格:%-5d总票数:%-5d余票数:%-5d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos);
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
printf("请输入需要的购票数:");
scanf("%d", &n);
while (n > p1->m_revetos)
{
printf("数量大余余票,请重新输入:");
scanf("%d", &n);
}
p1->m_revetos -= n;
flight* p3 = (flight*)malloc(sizeof(flight)), * p4 = ufhead;
*p3 = *p1;
p3->next = ufhead;
ufhead = p3;
ufhead->m_buyvetos = n;
printf("购买成功\n");
return;
}
p1 = p1->next;
}
printf("无此航班\n");
}
//用户退票
void USERMANAGER::userreturnticket()
{
flight* p1 = fhead, * p2 = ufhead, * p3 = ufhead;
char num[10];
int n = 0;
u.userbuyflightshow();
printf("请输入航班编号:");
scanf("%s", num);
while (p2 != NULL) {
if (!strcmp(p2->m_num, num)) {
while (p1 != NULL) {
if (!strcmp(p1->m_num, num)) {
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
printf("航班编号:%-10s始发地:%-10s目的地:%-10s出发时间:%-20s到达时间:%-20s价格:%-5d总票数:%-5d余票数:%-5d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos);
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
p1->m_revetos += p2->m_buyvetos;
if (p2 == ufhead) {
ufhead = p2->next;
free(p2);
printf("退票成功\n");
return;
}
else {
while (p3->next != p2)p3 = p3->next;
p3->next = p2->next;
free(p2);
printf("退票成功\n");
return;
}
}
p1 = p1->next;
}
}
p2 = p2->next;
}
}
//航班展示
void USERMANAGER::userflightshow()
{
m.managerflightshow();
}
//购票信息保存
void USERMANAGER::userticketssave(char account[])
{
flight* p1 = ufhead;
FILE* fp = fopen(account, "w");
while (p1 != NULL)
{
fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\t%d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos, p1->m_buyvetos);
p1 = p1->next;
}
fclose(fp);
}
//购票信息读取
void USERMANAGER::userticketsload(char account[])
{
FILE* fp;
flight* p1 = NULL, * p2 = NULL, que;
que.next = NULL;
if ((fp = fopen(account, "r")) == NULL) return;
while (fscanf(fp, "%s%s%s%s%s%d%d%d%d", que.m_num, que.m_beginspace, que.m_endspace, que.m_begintime, que.m_endtime, &que.m_price, &que.m_vetos, &que.m_revetos, &que.m_buyvetos) != EOF)
{
p1 = (flight*)malloc(sizeof(flight));
*p1 = que;
if (uflights == 0) {
ufhead = p1;
uflights++;
}
else {
ufhead = p1;
fhead->next = p2;
p2 = fhead;
uflights++;
}
}
fclose(fp);
}
//用户已购票信息展示
void USERMANAGER::userbuyflightshow()
{
system("cls");
flight* p1 = ufhead;
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
while (p1 != NULL)
{
printf("航班编号:%-10s始发地:%-10s目的地:%-10s出发时间:%-20s到达时间:%-20s价格:%-5d总票数:%-5d余票数:%-5d购票数:%-5d\n", p1->m_num, p1->m_beginspace, p1->m_endspace, p1->m_begintime, p1->m_endtime, p1->m_price, p1->m_vetos, p1->m_revetos,p1->m_buyvetos);
p1 = p1->next;
}
printf("+-------------------------------------------------------------------------------------------------------------------------------------------------+\n");
}
修改条件可常考https://blog.csdn.net/barafaw/article/details/135760762?spm=1001.2014.3001.5502 的更改条件