⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 管理员.cpp

📁 此程序完成飞机订票
💻 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 + -