📄 管理员.cpp
字号:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
typedef struct local
{
int year;
int month;
int day;
int hour;
int minute;
int second;
}local;
typedef struct flight
{
char num[10];
char jumpingoff[20];
char goal[20];
int tickets;
local data;
}flight;
typedef struct node
{
flight fly;
node *next;
}node,*linklist;
typedef struct user
{
char identitycard[20];
char name[20];
char telphone[20];
char play[10];
int gread;
local usetime;
flight contracted;
}user;
typedef struct lnode
{
user use;
lnode *link;
}lnode,*link;
char password[5]={'1','2','3','4','5'};
FILE *fp,*rp;
int judge(linklist &p)
{
int i=0;
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
if((now->tm_year+1900)>=(p->fly.data.year)&&(now->tm_mon+1)>(p->fly.data.month))
{
i++;
}
if((now->tm_year+1900)==(p->fly.data.year)&&((now->tm_mon+1)==(p->fly.data.month))&&((now->tm_mday)>=(p->fly.data.day)))
{
i++;
}
if(i>0){return 1;}
else {return 0;}
}
void book(linklist &head,link &lhead)/*订票*/
{
link m,q;
m=lhead->link;
if(m==NULL){m=lhead;}
else
{
while(m->link!=NULL)
{
m=m->link;
}
}
char number[10];
int i=1;
int j;
while(i!=0)
{
int count=0;
linklist p;
p=head->next;
printf("输入您要订的航班编号:");
scanf("%s",&number);
while(p!=NULL)
{
if(strcmp(number,p->fly.num)==0)
{
count++;
break;
}
p=p->next;
}
if(count==0)
{
printf("没有此班飞机!\n");
}
else
{
char ch;
printf("您需要订这班飞机吗?y/n:");
scanf("%s",&ch);
if(ch=='y')
{
if(p->fly.tickets==0)
{
system("cls");
printf("此航班票已售完! ");
linklist a;
a=head->next;
while(a!=NULL)
{
if(strcmp(a->fly.goal,p->fly.goal)==0&&(a!=p))
{
system("cls");
printf("我们为您推荐此航班:\n");
printf("时间:%d.%d.%d %d:%d ",a->fly.data.year,a->fly.data.month,a->fly.data.day,a->fly.data.hour,a->fly.data.minute);
printf("航班编号:%s\n",a->fly.num);
}
a=a->next;
}
}
else
{
system("cls");
q=(link)malloc(sizeof(user));
printf("请输入您要订的票数:");
scanf("%d",&q->use.gread);
if(q->use.gread>p->fly.tickets)
{
printf("此航班仅剩%d张,请减少票数或选择其它航班!\n",p->fly.tickets);
break;
}
printf("请输入您的姓名:");
scanf("%s",&q->use.name);
printf("请输入您的身份证号码:");
scanf("%s",&q->use.identitycard);
printf("请输入您的电话号码:");
scanf("%s",&q->use.telphone);
if(q->use.gread>p->fly.tickets)
{
printf("此航班仅剩%d张,请减少票数或选择其它航班!\n",p->fly.tickets);
break;
}
time_t tval;
struct tm *now;
tval = time(NULL);
now = localtime(&tval);
q->use.usetime.year=now->tm_year+1900;
q->use.usetime.month=now->tm_mon+1;
q->use.usetime.day=now->tm_mday;
q->use.usetime.hour=now->tm_hour;
q->use.usetime.minute=now->tm_min;
q->use.usetime.second=now->tm_sec;
strcpy(q->use.play,p->fly.num);
strcpy(q->use.contracted.goal,p->fly.goal);
strcpy(q->use.contracted.jumpingoff ,p->fly.jumpingoff);
p->fly.tickets=p->fly.tickets-q->use.gread;
m->link=q;
m=q;
q->link=NULL;
}
}
}
printf("输入0退出:");
scanf("%d",&j);
i=j;
system("cls");
}
}
void returnticket(linklist &head,link &lhead)/*退票*/
{
int i=1;
int j;
link p,q;
linklist n;
char number[10];
char usename[10];
while(i!=0)
{
n=head->next;
p=lhead;
q=p->link;
int count=0;
printf("输入你的姓名:");
scanf("%s",&usename);
printf("输入您要退订的航班编号:");
scanf("%s",&number);
while(q!=NULL)
{
if(strcmp(number,q->use.play)==0&&strcmp(usename,q->use.name)==0)
{
count++;
break;
}
p=q;
q=p->link;
}
if(count==0){printf("对不起,您没有订此班飞机!\n");}
else
{
char ch;
printf("您确信要退订这班飞机吗?y/n:");
scanf("%s",&ch);
if(ch=='y')
{
while(n!=NULL)
{
if(strcmp(n->fly.num,q->use.play)==0)
{
if(judge(n)){printf("对不起,日期已过,您无法退票!\n");break;}
else {n->fly.tickets=n->fly.tickets+q->use.gread;p->link=q->link;printf("退票已成功!\n");break;}
}
else
{
n=n->next;
}
}
}
}
printf("输入0退出:");
scanf("%d",&j);
i=j;
system("cls");
}
}
void add(linklist &head)/*管理员增加*/
{
linklist p,q;
p=head;
if(p==NULL){p=head;}
else
{
while(p->next!=NULL)
{
p=p->next ;
}
}
int i=1;
int j;
while(p->next!=NULL)
{
p=p->next;
}
while(i!=0)
{
q=(linklist)malloc(sizeof(node));
printf("输入增加的航班编号:");
scanf("%s",&q->fly.num);
printf("输入航班的起飞时间:");
scanf("%d %d %d %d %d",&q->fly.data.year,&q->fly.data.month,&q->fly.data.day,&q->fly.data.hour,&q->fly.data.minute);
printf("输入航班的起点:");
scanf("%s",&q->fly.jumpingoff);
printf("输入航班的终点:");
scanf("%s",&q->fly.goal);
printf("输入此航班的机票数目:");
scanf("%d",&q->fly.tickets);
printf(" 输入0后退出!");
scanf("%d",&j);
p->next=q;
p=q;
p->next=NULL;
i=j;
system("cls");
}
}
void choose(linklist &head)/*管理员选择*/
{
int i=1;
int j;
linklist p;
char number[10];
while(i!=0)
{
int count=0;
p=head->next;
printf("输入你要查询的航班编号:");
scanf("%s",&number);
while(p!=NULL)
{
if(strcmp(number,p->fly.num)==0)
{
printf("%s ",p->fly.num);
printf("%d.%d.%d %d:%d ",p->fly.data.year,p->fly.data.month,p->fly.data.day,p->fly.data.hour,p->fly.data.minute);
printf("%s ",p->fly.jumpingoff);
printf("%s ",p->fly.goal);
printf("%d\n",p->fly.tickets);
count++;
}
p=p->next;
}
if(count==0)
{
printf("对不起,没有这班飞机!\n");
}
printf("输入0后退出:");
scanf("%d",&j);
i=j;
system("cls");
}
}
void rework(linklist &head)/*管理员修改*/
{
int i=1;
int j;
char number[10];
while(i!=0)
{
int count=0;
linklist p;
p=head->next;
printf("输入要修改的航班编号:");
scanf("%s",&number);
while(p!=NULL)
{
if(strcmp(number,p->fly.num)==0)
{
printf("输入新的时间:");
scanf("%d %d %d %d %d",&p->fly.data.year,&p->fly.data.month,&p->fly.data.day,&p->fly.data.hour,&p->fly.data.minute);
printf("输入新的机票数:");
scanf("%d",&p->fly.tickets);
count++;
break;
}
p=p->next;
}
if(count==0)
{
printf("对不起,没有这班飞机!\n");
}
printf("输入0后退出:");
scanf("%d",&j);
i=j;
system("cls");
}
}
void print(linklist &head)/*管理员文件输出*/
{
linklist p;
p=head->next;
while(p!=NULL)
{
printf("%s ",p->fly.num);
printf("%d.%d.%d %d:%d ",p->fly.data.year,p->fly.data.month,p->fly.data.day,p->fly.data.hour,p->fly.data.minute);
printf("%s ",p->fly.jumpingoff);
printf("%s ",p->fly.goal);
printf("%d\n",p->fly.tickets);
p=p->next;
}
}
void newprint(link &lhead)/*用户文件输出*/
{
link p;
p=lhead->link;
while(p!=NULL)
{
printf("订票时间:%d.%d.%d %d:%d:%d\n", p->use.usetime.year, p->use.usetime.month, p->use.usetime.day,
p->use.usetime.hour, p->use.usetime.minute, p->use.usetime.second);
printf("身份证号:%s ",p->use.identitycard );
printf("姓名:%s ",p->use.name);
printf("电话:%s ",p->use.telphone );
printf("所定航班编号:%s ",p->use.play);
printf("订票数:%d\n",p->use.gread);
p=p->link;
}
}
void delet(linklist &head)/*管理员删除*/
{
linklist p,q,s;
char number[10];
int i=1;
int j;
while(i!=0)
{
int count=0;
p=head;
q=p->next;
printf("输入你要删除的航班号:");
scanf("%s",&number);
while(q!=NULL)
{
if(strcmp(number,q->fly.num)==0)
{
s=q;
p->next=s->next;
free(s);
count++;
break;
}
else
{
p=q;
q=q->next;
}
}
if(count==0)
{
printf("对不起,没有这班飞机!\n");
}
printf("输入0后退出:");
scanf("%d",&j);
i=j;
system("cls");
}
}
void creat(linklist &head,link &lhead)/*读取*/
{
linklist p,q;
link m,n;
head=(linklist)malloc(sizeof(node));
lhead=(link)malloc(sizeof(lnode));
p=head;
m=lhead;
if((fp=fopen("flight.txt","rb"))==NULL)
{
printf("文件读取失败!\n");
}
while(!feof(fp))
{
q=(linklist)malloc(sizeof(node));
if (fread(q,sizeof(node),1,fp)==1)
{
p->next=q;
p=q;
}
p->next=NULL;
}
if((rp=fopen("user.txt","rb"))==NULL)
{
printf("文件读取失败!\n");
}
while(!feof(rp))
{
n=(link)malloc(sizeof(lnode));
if (fread(n,sizeof(lnode),1,rp)==1)
{
m->link=n;
m=n;
}
m->link=NULL;
}
fclose(rp);
fclose(fp);
}
void save(linklist &head,link &lhead)/*保存*/
{
linklist p;
link m;
p=head->next;
m=lhead->link;
if((fp=fopen("flight.txt","wb"))==NULL)
{
printf("文件读取失败!\n");
return ;
}
while(p!=NULL)
{
fwrite(p,sizeof(node),1,fp);
p=p->next;
}
if((rp=fopen("user.txt","wb"))==NULL)
{
printf("文件读取失败!\n");
return ;
}
while(m!=NULL)
{
fwrite(m,sizeof(lnode),1,rp);
m=m->link;
}
fclose(rp);
fclose(fp);
}
void main()
{
linklist head;
link lhead;
creat(head,lhead);
print(head);
newprint(lhead);
book(head,lhead);
returnticket(head,lhead);
print(head);
newprint(lhead);
save(head,lhead);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -