zoukankan      html  css  js  c++  java
  • 飞机订票系统(文档)

    1.功能介绍

    1.显示各航班信息(1,显示航班信息。2,显示客户信息)
    2.查询各航班信息 (1,航班号查询。2,出发城市查询。3,终点城市查询。)
    3.订 票 (如果没有相关航班,则提供其他选项)
    4.退 票
    5.修改各航班信息 (1,增加航班。2,删除航班。3,修改航班信息)

    2.代码

    //使用链表完成系统,航班信息一个链表,乘客信息一个链表// 
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    char tep[500];char title[500];
    //乘客信息结构体// 
    struct passenger
    {
    	char airnum[8];//航班号
    	char name[20];//客户姓名 
    	char DID[6];//身份证号 
    	int  amount;//订票数量
    	struct passenger *next;//指向下一个结点// 
    };
    //航班信息结构体// 
    struct airplane
    {
    	char air[8];//航班号
    	char start[6];//出发地
    	char end[6];//目的地
    	char sche[6];//飞行日
    	char time1[8];//出发时间
    	char time2[8];//到达时间
    	char mode[5];//机型
    	int  price;//票价
    	int  full;//乘客定额
    	int  remain;//余票
    	struct airplane *front;//指向下一个结点//
    };
    //读取航班信息//
    struct airplane *readair(struct airplane *a)
    {
    	struct airplane *r=NULL;
    	FILE *fp;//定义文件指针
    	a=(struct airplane *)malloc(sizeof(struct airplane));
    	a->front=NULL;
    	if ((fp = fopen("航班信息.txt", "r")) == NULL)
    		printf("航班文件不存在 
    ");
    	else
    	{   
    		fgets(tep, 500, fp);//读取第一行说明:航班号  起点  终点 略..;
    		while (!feof(fp))//如果文件没有读取结束,继续读取// 
    		{
    			r=(struct airplane *)malloc(sizeof(struct airplane));
    			//读取正确的信息;
    			fscanf(fp,"%s%s%s%s%s%s%s%d%d%d",&r->air,&r->start,&r->end,&r->sche,&r->time1,&r->time2,&r->mode,&r->price,&r->full,&r->remain);
    			r->front=a->front;
    			a->front=r;
    		}
    	}
    	fclose(fp);
    	return a;	
    }
    //读取乘客信息// 
    struct passenger *readpassenger(struct passenger *p)
    {
    	struct passenger *r=NULL;
    	FILE *fp;//定义文件指针
    	p=(struct passenger *)malloc(sizeof(struct passenger));
    	p->next=NULL;
    	if ((fp = fopen("乘客信息.txt", "r")) == NULL)  //以只读的方式打开
    		printf("乘客信息.txt文件不存在 
    ");
    	else
    	{
    		fgets(title, 500, fp);
    		while (!feof(fp))  //C提供了一个测试文件状态的函数feof(pf),当文件未结束时feof函数的值为0,否则为非0值。使用函数feof来判断文件是否结束既可用于文本文件,还可用于二进制文件
    		{
    			r=(struct passenger *)malloc(sizeof(struct passenger));
    			fscanf(fp,"%s%s%s%d",&r->airnum,&r->name,&r->DID,&r->amount);
    			r->next=p->next;
    			p->next=r;
    		}
    	}
    	fclose(fp);
    	return p;
    }
    //显示所有航班信息//
    void showair(struct airplane *a)
    {
    	struct airplane *r=NULL;
    	int t=0;
    	r=a->front;
    	printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    	while(r!=NULL)
    	{
    		printf("%s	%s	%s	%s	%s		%s		%s	%d	%d		%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    		r=r->front;
    		t=1;
    	}
    	if(t==0)
    		printf("没有航班!
    ");
    	printf("
    ");
    }
    //显示所有客户信息//
    int showpassenger(struct passenger *p) 
    {
    	struct passenger *r=NULL;
    	int s,t;
    	int q=0;
    	printf("显示内容涉及隐私
    ");
    	while(1)
    	{
    		printf("请输入密码:");
    		scanf("%d",&t);
    		if(t==123)
    		{
    			printf("密码正确
    ");
    			break;
    		}
    		else
    		{
    			printf("密码错误
    ");
    			printf("请选择1.放弃,返回;2.重新输入密码;
    ");
    			printf("请输入选项(点击任意键,继续输入密码):");
    			scanf("%d",&s);
    			switch(s)
    			{
    				case 1:
    					return 0;
    				default:
    					break;
    			}
    		}
    	}
    	r=p->next;
    	printf("航班号	客户姓名	身份证号	订票数量
    ");
    	while(r!=NULL)
    	{
    		printf("%s	%s		%s		%d
    ",r->airnum,r->name,r->DID,r->amount);
    		r=r->next;
    		q=1;
    	}
    	if(q==0)
    		printf("没有客户!
    ");
    	printf("
    ");
    	return 0;	
    }
    int show(struct airplane *a,struct passenger *p)
    {
    	int i;
    	while(1)
    	{
    		printf("
    
    ");
    		printf("*        显示各航班信息       *
    ");
    		printf("*     1.显示所有航班信息      *
    ");
    		printf("*     2.显示所有客户信息      *
    ");
    		printf("*     3.返回主菜单            *
    ");
    		printf("*请输入选项:");
    		scanf("%d",&i);
    		switch(i)
    		{
    			case 1:
    				showair(a);
    				break;
    			case 2:
    				showpassenger(p);
    				break;
    			case 3:
    				return 0;
    			default :
    				printf("输入选项非法,请重新输入!
    ");
    				break;
    		}
    	}
    }
    //按航班号查询//
    int findair(struct airplane *a)
    {
    	int i,t;
    	struct airplane *r=NULL;
    	char s[8];
    	char c;
    	while(1)
    	{
    		r=a->front;
    		printf("请输入已知航班号:");
    		gets(s);
    		t=0;
    		while(r!=NULL)
    		{
    			if(strcmp(r->air,s)==0)
    			{
    				t=1;
    				printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    				printf("%s	%s	%s	%s	%s		%s		%s	%d	%d		%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    				break;
    			}
    			else
    				r=r->front;
    		}
    		if(t==0)
    			printf("没有查询到此航班的信息!
    ");
    		printf("请选择  1.继续查询;2.退出;
    ");
    		printf("请输入选项(点击任意键,继续查询):");
    		scanf("%d",&i);
    		c=getchar();
    		switch(i)
    		{
    			case 2:
    				return 0;
    			default :
    				break;
    		}
    	}
    	
    }
    //按出发城市查询//
    int findstart(struct airplane *a)
    {
    	int i,t;
    	struct airplane *r=NULL;
    	char s[6];
    	char c;
    	while(1)
    	{	
    		r=a->front;
    		printf("请输入出发城市:");
    		gets(s);
    		t=0;
    		while(r!=NULL)
    		{
    			if(strcmp(r->start,s)==0)
    			{
    				if(t==0)
    				{
    					printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    					t=1;
    				}	
    				printf("%s	%s	%s	%s	%s	%s	%s	%d	%d	%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    				r=r->front;
    			}
    			else
    				r=r->front;
    		}
    		if(t==0)
    			printf("没有查询到此航班的信息!
    ");
    		printf("请选择  1.继续查询;2.退出;
    ");
    		printf("请输入选项(点击任意键,继续查询):");
    		scanf("%d",&i);
    		c=getchar();
    		switch(i)
    		{
    			case 2:
    				return 0;
    			default :
    				break;
    		}
    	}
    }
    //按终点城市查询// 
    int findend(struct airplane *a)
    {
    	int i,t;
    	struct airplane *r=NULL;
    	char s[6];
    	char c;
    	while(1)
    	{
    		r=a->front;
    		printf("请输入终点城市:");
    		gets(s);
    		t=0;
    		while(r!=NULL)
    		{
    			if(strcmp(r->end,s)==0)
    			{
    				if(t==0)
    				{
    					printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    					t=1;
    				}	
    				printf("%s	%s	%s	%s	%s	%s	%s	%d	%d	%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    				r=r->front;
    			}
    			else
    				r=r->front;
    		}
    		if(t==0)
    			printf("没有查询到此航班的信息!
    ");
    		printf("请选择  1.继续查询;2.退出;
    ");
    		printf("请输入选项(点击任意键,继续查询):");
    		scanf("%d",&i);
    		c=getchar();
    		switch(i)
    		{
    			case 2:
    				return 0;
    			default :
    				break;
    		}
    	}
    }
    int find(struct airplane *a)
    {
    	int i;
    	char c;
    	while(1)
    	{
    		printf("*    请选择查询方式:   *
    ");
    		printf("   1.已知航班号查询;   
    ");
    		printf("   2.已知出发地查询;   
    ");
    		printf("   3.已知目的地查询;   
    ");
    		printf("   4.返回主菜单         
    ");
    		printf("请输入选项:");
    		scanf("%d",&i);
    		c=getchar();
    		switch(i)
    		{
    			case 1:
    				findair(a);
    				break;
    			case 2:
    				findstart(a);
    				break;
    			case 3:
    				findend(a);
    				break;
    			case 4:
    				return 0;
    			default:
    				printf("输入选项不存在,请重新输入!
    ");
    				break;
    		} 
    	}	
    }
    //保存修改的航班信息到文本//
    void saveairplane(struct airplane *a)
    {
    	struct airplane *r=NULL;
    	FILE *fp;//定义文件指针
    	r=a->front;
    	fp=fopen("航班信息1.txt","w+");
    	fputs(tep,fp);
    	while(r!=NULL)
    	{
    		fprintf(fp,"
    %s	%s	%s	%s	%s	%s	%s	%d	%d	%d",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    		r=r->front;
    	}
    	fclose(fp);
    }
    //保存修改的乘客信息到文本// 
    void savepassenger(struct passenger *p)
    {
    	struct passenger *r=NULL;
    	FILE *fp;
    	r=p->next;
    	fp=fopen("乘客信息1.txt","w+");
    	fputs(title,fp);
    	while(r!=NULL)
    	{
    		fprintf(fp,"
    %s	%s	%s	%d",r->airnum,r->name,r->DID,r->amount);
    		r=r->next;
    	}
    	fclose(fp);
    }
    //订票//
    struct passenger *reserve(struct airplane *a,struct passenger *p)
    {
    	int i,t,k,flag=1;
    	char c;
    	struct passenger *q=NULL;
    	struct airplane *r=NULL,*f=NULL;
    	while(1)
    	{
    		r=a->front;
    		f=a->front;
    		if(flag)
    			q=(struct passenger *)malloc(sizeof(struct passenger));	
    		printf("请输入航班号:");
    		gets(q->airnum);
    		t=0;
    		while(r!=NULL)
    		{
    			if(strcmp(r->air,q->airnum)==0)
    			{
    				t=1;
    				printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    				printf("%s	%s	%s	%s	%s		%s		%s	%d	%d		%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    				if(r->remain<=0)
    				{
    					printf("此航班没有余票
    ");
    					t=0;
    					break;
    				}
    				printf("请输入订票数量:");
    				scanf("%d",&q->amount);
    				c=getchar();
    				while(q->amount>r->remain)
    				{
    					printf("余票不足!请重新订票!
    ");
    					printf("请输入订票数量:");
    					scanf("%d",&q->amount);
    					c=getchar();
    				}
    				r->remain=r->remain-q->amount;
    				saveairplane(a);
    				printf("请输入姓名:");
    				gets(q->name);
    				printf("请输入身份证号:");
    				gets(q->DID);
    				q->next=p->next;
    				p->next=q;
    				printf("订票成功!
    ");
    				flag=1;
    				savepassenger(p);
    				break;
    			}
    			else
    				r=r->front;
    		}
    		if(t==0)
    		{
    			k=0;
    			flag=0;
    			printf("没有查询到有用的信息!
    ");
    			printf("为你提供其他航班:
    ");
    			printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    			while(f!=NULL)
    			{
    				if(f->remain>0)
    				{	
    					printf("%s	%s	%s	%s	%s		%s		%s	%d	%d		%d
    ",f->air,f->start,f->end,f->sche,f->time1,f->time2,f->mode,f->price,f->full,f->remain);
    					k=1;
    				}
    				f=f->front;
    			}
    			if(k==0)
    				printf("对不起,没有可用航班!
    ");
    		}
    		printf("请选择  1.继续订票;2.退出;
    ");
    		printf("请输入选项(点击任意键,继续查询):");
    		scanf("%d",&i);	
    		c=getchar();
    		switch(i)
    		{
    			case 2:
    				return p;
    			default :
    				break;
    		}
    	}
    	
    }
    //退票// 
    struct passenger *recede(struct passenger *p,struct airplane *a)
    {
    	int t=1,k;
    	struct airplane *w=NULL;
    	struct passenger *r=NULL,*q=NULL;
    	char s[20];
    	q=p;
    	r=q->next;
    	w=a->front;
    	printf("请输入姓名:");
    	gets(s);
    	while(r!=NULL)
    	{
    		if(strcmp(r->name,s)==0)
    		{
    			printf("请核实信息!
    ");
    			printf("航班号	客户姓名	身份证号	订票数量
    ");
    			printf("%s	%s	%s	%d
    ",r->airnum,r->name,r->DID,r->amount);
    			printf("1.确定退票;2.退出
    ");
    			printf("请输入选项(按任意键退出):");
    			scanf("%d",&k);
    			switch(k)
    			{
    				case 1:
    					while(w!=NULL)
    					{
    						if(strcmp(r->airnum,w->air)==0)
    						{
    							w->remain=w->remain+r->amount;
    							break;
    						}
    						w=w->front;
    					}
    					q->next=r->next;
    					free(r);
    					printf("退票成功!
    ");
    					savepassenger(p);
    					saveairplane(a);
    					break;
    				default :
    					return p;
    			}
    			t=0;
    			break;
    		}
    		q=q->next;
    		r=q->next;
    	}
    	if(t)
    		printf("您没有订票!
    "); 
    	return p;
    }
    //增加航班//
    struct airplane *add(struct airplane *a)
    {
    	char c;int i;
    	struct airplane *r=NULL;
    	while(1)
    	{
    		r=(struct airplane *)malloc(sizeof(struct airplane));
    		printf("请输入航班号:");
    		gets(r->air);
    		printf("起点:");
    		gets(r->start);
    		printf("终点:");
    		gets(r->end);
    		printf("飞行日:");
    		gets(r->sche);
    		printf("起飞时间:");
    		gets(r->time1);
    		printf("到达时间:");
    		gets(r->time2);
    		printf("机型:");
    		gets(r->mode);
    		printf("价格:");
    		scanf("%d",&r->price);
    		printf("乘员定额:");
    		scanf("%d",&r->full);
    		printf("余票量:");
    		scanf("%d",&r->remain);
    		r->front=a->front;
    		a->front=r;
    		saveairplane(a);
    		printf("航班添加完成!
    ");
    		printf("请选择:1.继续增加航班。2.退出!
    ");
    		printf("请输入选项(点击任意键继续增加航班):");
    		scanf("%d",&i);
    		c=getchar();
    		switch(i)
    		{
    			case 2:
    				return a;
    			default :
    				break;
    		}
    	}
    	
    }
    //删除航班//
    struct airplane *Remove(struct airplane *a)
    {
    	int t=1,k;
    	struct airplane *r=NULL,*q=NULL;
    	char s[8];
    	char c;
    	while(1)
    	{
    		printf("为你显示所有航班信息:
    ");
    		showair(a);
    		q=a;
    		r=q->front;
    		printf("请输入航班号:");
    		gets(s);
    		while(r!=NULL)
    		{
    			if(strcmp(r->air,s)==0)
    			{
    				printf("请核实信息!
    ");
    				printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    				printf("%s	%s	%s	%s	%s		%s		%s	%d	%d		%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    				printf("1.确定删除航班;2.退出
    ");
    				printf("请输入选项(按任意键退出):");
    				scanf("%d",&k);
    				c=getchar();
    				switch(k)
    				{
    					case 1:
    						q->front=r->front;
    						free(r);
    						printf("航班删除成功!
    ");
    						saveairplane(a);
    						return a;
    					default :
    						return a;
    				}
    			}
    			q=q->front;
    			r=q->front;
    		}
    		if(t)
    			printf("航班号输入错误!");
    	}
    }	
    //修改航班信息// 
    struct airplane *recompose(struct airplane *a)
    {
    	int t=1,k;
    	char c;
    	struct airplane *r=NULL,*q=NULL,*m=NULL;
    	char s[8];
    	while(1)
    	{
    		printf("为你显示所有航班信息:
    ");
    		showair(a);
    		q=a;
    		r=q->front;
    		printf("请输入航班号:");
    		gets(s);
    		while(r!=NULL)
    		{
    			if(strcmp(r->air,s)==0)
    			{
    				printf("航班号	起点	终点	飞行日	起飞时间	到达时间	机型	价格	乘员定额	余票量
    ");
    				printf("%s	%s	%s	%s	%s		%s		%s	%d	%d		%d
    ",r->air,r->start,r->end,r->sche,r->time1,r->time2,r->mode,r->price,r->full,r->remain);
    				m=(struct airplane *)malloc(sizeof(struct airplane));
    				printf("请输入新信息:
    ");
    				printf("航班号:");
    				gets(m->air);
    				printf("起点:");
    				gets(m->start);
    				printf("终点:");
    				gets(m->end);
    				printf("飞行日:");
    				gets(m->sche);
    				printf("起飞时间:");
    				gets(m->time1);
    				printf("到达时间:");
    				gets(m->time2);
    				printf("机型:");
    				gets(m->mode);
    				printf("价格:");
    				scanf("%d",&m->price);
    				printf("乘员定额:");
    				scanf("%d",&m->full);
    				printf("余票量:");
    				scanf("%d",&m->remain);
    				printf("1.确定修改信息;2.退出
    ");
    				printf("请输入选项(按任意键退出):");
    				scanf("%d",&k);
    				c=getchar();
    				switch(k)
    				{
    					case 1:
    						m->front=r->front;
    						q->front=m;
    						free(r);
    						printf("信息修改成功!
    ");
    						saveairplane(a);
    						return a;
    					default :
    						return a;
    				}
    			}
    			q=q->front;
    			r=q->front;
    		}
    		if(t)
    			printf("航班号输入错误!");
    	}
    }
    struct airplane *adjust(struct airplane *a)
    {
    	struct airplane *r=NULL;
    	int s,t;char c;
    	int q=0;
    	printf("修改航班信息需要权限
    ");
    	while(1)
    	{
    		printf("请输入密码:");
    		scanf("%d",&t);
    		if(t==123)
    		{
    			printf("密码正确
    ");
    			break;
    		}
    		else
    		{
    			printf("密码错误
    ");
    			printf("请选择1.放弃,返回;2.重新输入密码;
    ");
    			printf("请输入选项(点击任意键,继续输入密码):");
    			scanf("%d",&s);
    			switch(s)
    			{
    				case 1:
    					return a;
    				default:
    					break;
    			}
    		}
    	}
    	while(1)
    	{
    		printf("*    航班信息修改目录    *
    ");
    		printf("*    1.增加航班          *
    ");
    		printf("*    2.删除航班          *
    ");
    		printf("*    3.修改航班信息      *
    ");
    		printf("*    4.返回主菜单        *
    ");
    		printf("请输入选项:");
    		scanf("%d",&s);
    		c=getchar();
    		switch(s)
    		{
    			case 1:
    				a=add(a);
    				break;
    			case 2:
    				a=Remove(a);
    				break;
    			case 3:
    				a=recompose(a);
    				break;
    			case 4:
    				return a;
    			default :
    				printf("输入错误选项请重新输入!
    ");
    				break;
    		}
    	}	
    		
    }
    int main()
    {
    	int e;
    	char c;
    	struct airplane *a=NULL;
    	struct passenger *p=NULL;
    	a=readair(a);//读取航班信息// 
    	p=readpassenger(p);//读取乘客信息//
    	while (1)
    	{  
    		printf("*     欢迎进入航班订票系统
    ");
    		printf("*****************************
    ");
    		printf("*       航空订票客运系统    *
    ");
    		printf("*      1.显示各航班信息     *
    ");//1,显示航班信息。2,显示客户信息// 
    		printf("*      2.查询各航班信息     *
    ");//1,航班号查询。2,出发城市查询。3,终点城市查询。// 
    		printf("*      3.订          票     *
    ");//如果没有相关航班,则提供其他选项// 
    		printf("*      4.退          票     *
    ");
    		printf("*      5.修改各航班信息     *
    ");//1,增加航班。2,删除航班。3,修改航班信息// 
    		printf("*      6.退  出  系  统     *
    ");
    		printf("*****************************
    ");
    		printf("请输入你的选择:");
    		scanf("%d",&e);
    		c=getchar();
    		switch(e)
    		{
    			case 1:
    				show(a,p);
    				break;
    			case 2:
    				find(a);
    				break;
    			case 3:
    				p=reserve(a,p);
    				break;
    			case 4:
    				p=recede(p,a);
    				break;
    			case 5:
    				a=adjust(a);
    				break;
    			case 6:
    				return 0;
    			default:
    				printf("输入的选项错误,请重新输入!
    ");
    				break;
    			}
    				
    		}	
    }
    
    

    3.辅助文档


    4.运行界面

  • 相关阅读:
    GBPR: Group Preference Based Bayesian Personalized Ranking for One-Class Collaborative Filtering-IJACA 2013_20160421
    BPR: Bayesian Personalized Ranking from Implicit Feedback-CoRR 2012——20160421
    基于矩阵分解的推荐算法
    svmlight使用说明
    论文笔记Outline
    Libliner 中的-s 参数选择:primal 和dual
    查询日志方法
    集合 Vector ArrayList 集合一
    c语言 常用知识点
    简单的c语言小程序 回光返照
  • 原文地址:https://www.cnblogs.com/Jean1225/p/14758663.html
Copyright © 2011-2022 走看看