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

📄 hkdpxt.cpp

📁 用vc设计一个航空客运订票系统
💻 CPP
字号:

#include <stdio.h> 
#include <string.h> 
#include <conio.h>
#include <ctype.h> 
#include <stdlib.h> 
#include <malloc.h> 
#include <math.h>
#define MAX 100

typedef struct Bookcustomer  //创建已订票客户信息 
{
	char name[15];
	int number;              //已订票数量
	int rank;                //舱位等级
	struct Bookcustomer *next1; 
}Bookcustomer,*Link;
 
typedef struct Preorder    //创建预订票客户信息
{ 
	char name[15];
	int amount;             // 要订票数量 
	struct Preorder *next2; //下一个链队结点指针 
}Preorder,*Qptr;
 
typedef struct 
{ 
	Qptr front; 
	Qptr rear; 
}linkQueue; 

typedef struct Flight{      //创建航线信息 
	char Flightnum[15];      //航班号
	char Planenum[15];       //飞机号 
	int Flightdata;          //飞机周日 
	int Customernum;         //乘员定额
	int Freeamount;          //余票量 
	char Addname[15];        //终点站名 
	struct Flight *next;
	struct Bookcustomer *Bookname;//订票的客户名单 
	struct Preorder *Prename;    //等候替补的客户名单
}Flight,*Linklist; 

struct Flight *L=NULL; 
struct Bookcustomer *H;  //为已订票客户链队来申请空间 
linkQueue Q;

Linklist InitLinklist()  //初始化航班信息链
{
	L=(Linklist)malloc(sizeof(Flight)); 
	if(!L) exit(0); 
	L->next=NULL;     //建立一个带有头结点的单链表 
	return (L); 
} 

int InsertLinklist(Linklist &); //函数声明不需要&一定加个(变量)标识符

void Input()          //录入功能 
{ 
 int j=1,m; 
	do{ 
		if(!InsertLinklist((Linklist)L)) //向其中加入航班信息 
	    //由于此处用到InsertLinklist()函数所以上面要声明一下
		{ 
			printf("内存已满\n"); exit(0); 
		} 
		printf("\t是否要输入下一个航线记录?\n"); 
		printf("\t是请输入1\n"); 
		printf("\t否请输入2\n\t"); 
		scanf("%d",&m); 
	}while(m==1); 
} 

int InsertLinklist(Linklist &L)//向航线链表添加新的结点 引用的用法保证对其操作
{ 
	Linklist p; 
	p=(Linklist)malloc(sizeof(Flight)); //为一个新的结点分配空间 
	if(!p) exit(0); 
	printf("\t请依次输入以下内容:\n\n");
	printf("航班号\n"); 
    getchar(); 
	gets(p->Flightnum);
	printf("飞机号\n"); 
	gets(p->Planenum); 
	printf("终点站\n"); 
	gets(p->Addname); 
	printf("飞行日期\n"); 
	scanf("%d",&p->Flightdata); 
	printf("乘员定额\n"); 
	scanf("%d",&p->Customernum); 
	printf("余票量\n"); 
	scanf("%d",&p->Freeamount); 
	p->Bookname=(struct Bookcustomer*)malloc(sizeof(Bookcustomer)); 
	p->Prename=Q.front=Q.rear=(Qptr)malloc(sizeof(Preorder));
	p->next=L->next;   
	L->next=p;  //L只做头结点不做信息存储             
	//这二句是链表中的头插法插入一个结点 
	return (1); 
} 

void Search_Flightnum();   //通过航班号查询 
void Search_Addname();     //通过目的地查询 
void Search();             //查询功能 
void Booking();            //订票功能 
void Refund();             //退票功能 
void main() 
{ 
	H=(struct Bookcustomer*)malloc(sizeof(Bookcustomer)); 
	Q.front=Q.rear=(Qptr)malloc(sizeof(Preorder)); 
	InitLinklist(); 
    int n; 
	do{       //打印主界面 
		printf("\t 欢迎使用航空客运订票系统\n"); 
		printf("\t+++++++++++++++++++++++++++++\n"); 
		printf("\t==>1. 录入功能 ==\n"); 
		printf("\t==>2. 查询功能 ==\n"); 
		printf("\t==>3. 订票功能 ==\n"); 
		printf("\t==>4. 退票功能 ==\n"); 
		printf("\t==>5. 退出 ==\n"); 
		printf("\t+++++++++++++++++++++++++++++\n"); 
		printf("\t请选择:"); 
		scanf("%d",&n);
		printf("\n"); 
		switch(n) 
		{ 
		case 1: Input(); 
		break; 
		case 2: Search();
		break; 
		case 3: Booking();
		break; 
		case 4:Refund();
		break; 
		default :exit(0);//退出 
		} 
	}while(n==1||n==2||n==3||n==4); 
} 

void Search()       //查询功能
{ 
	int n; 
	printf("\t 查询航线信息 \n"); 
	printf("\t+++++++++++++++++++++++++++++\n"); 
	printf("\t==>1. 通过终点站查询 ==\n"); 
	printf("\t==>2. 通过航班号查询 ==\n"); 
	printf("\t+++++++++++++++++++++++++++++\n"); 
	printf("\t请选择:"); 
	scanf("%d",&n); 
	printf("\n");
	switch(n) 
	{ 
	case 1:Search_Addname(); 
	break; 
	case 2:Search_Flightnum(); 
	break; 
	default :break; 
	} 
} 

void Search_Addname()     //通过终点站查询 
{ 
	char c[15]; 
	int m; 
	Linklist p=L; 
	printf("\t请输入要查询的终点站:"); 
	gets(c);
	gets(c);
	do{ 
	p=p->next; //第一次取头结点后的第一个记录 
	if(p) //到最后信息了自然会跳出循环
	{ 
		m=strcmpi((*p).Addname,c);
		if(m==0) 
		{ 
			printf("\t航班信息:\n"); 
			printf("\t航班号:%s\n",p->Flightnum); 
			printf("\t飞机号:%s\n",p->Planenum); 
			printf("\t飞机周日:周%d\n",p->Flightdata); 
			printf("\t余票量:%d\n",p->Freeamount); 
		} 
	} 
	else 
	{
		printf("\t对不起,没有你要找的目的地!\n\n"); 
		m=0; 
	} 
	}while(m!=0); 
} 

void Search_Flightnum()     //通过航班号查询 
{ 
	char c[15]; 
	int m; 
	Linklist p=L; 
	printf("\t请输入要查询的航班号:"); 
	gets(c); 
	gets(c);
	printf("\n"); 
	do{ 
	p=p->next; 
	if(p) 
	{ 
		m=strcmpi((*p).Flightnum,c); 
		if(m==0) 
		{ 
			printf("\t航班信息:\n"); 
			printf("\t飞机号:%s\n",p->Planenum); 
			printf("\t飞机周日:周%d\n",p->Flightdata); 
			printf("\t余票量:%d\n\n",p->Freeamount); 
		} 
	} 
	else 
	{ 
		printf("\t对不起,没有你要找的航班号!\n");
		m=0; 
	} 
	}while(m!=0); 
}

void Booking()          //订票功能
{ 
	Linklist p=L;        //Linklist类型的L来指向链表头 
	Bookcustomer *h=H,*h1;
	linkQueue q=Q;
	char c[15]; 
	int m=1,ticket,number=0,n,rank; 
	printf("请输入要定的航班的终点站名:");
	gets(c);  
	gets(c);
	printf("\n"); 
	p=L->next; 
	if(p) 
		{ 
			do{
			if(!p) 
			{ 
				printf("对不起,没有您要找的航班:\n\n"); 
				goto loop1; 
			} 
			m=strcmpi(p->Addname,c); 
				if(m==0)  //找到此航班输出其信息
				{ 
					printf("航班信息:\n"); 
					printf("航班号:%s\n",p->Flightnum); 
					printf("飞机号:%s\n",p->Planenum); 
					printf("飞机周日:周%d\n",p->Flightdata); 
					printf("余票量:%d\n",p->Freeamount);
				} 
				else
					p=p->next; 
			}while(m!=0); 
		if(m==0) //找到进行订票
			{ 
				do
				{ 
				printf("\n请选择舱位等级:");
				scanf("%d",&rank);
				if(rank>3)
					printf("\n选择错误,请重新输入:");
                scanf("%d",&rank);
			    printf("\n请输入您要订的票数:"); 
				scanf("%d",&ticket); 
				if(ticket<=p->Freeamount) 
				{ 
					h=p->Bookname; 
					if(h) 
					{ 
						h1=h; 
						h=h->next1; 
			h=(struct Bookcustomer*)malloc(sizeof(Bookcustomer)); 
						printf("请输入您的姓名:"); 
						gets(h->name); 
						gets(h->name);
						h->number=ticket; 
						h->next1=h1->next1; 
						h1->next1=h; 
						p->Freeamount=p->Freeamount-ticket; 
						printf("订票成功:\n"); m=2; 
					} 
				} 
				else 
				{
					printf("余票量:%d\n",p->Freeamount); 
					printf("对不起,余票 %d 张不足,不能完成订票\n\n",p->Freeamount); 
					printf(" 是否要重新订票?\n"); 
					printf("需要请输入1 否则请按2 预订请输入3 : "); 
					scanf("%d",&m); 
					printf("\n"); 
					if(m==3) goto loop3; 
				} 
				}while(m==1); 
			} 
		} 
	else 
		if(!p) 
		{ 
			loop3: struct Preorder *q3; 
			printf("对不起,该航班的票已售完\n");
			q.front=p->Prename; 
			if(q.front==q.rear) printf("没有人预订票,是否要预订?\n"); 
			else 
			if(q.front!=q.rear) printf("已有人预订票,是否继续预订?\n"); 
			printf("预订请输入1 否则输入2 : "); 
			scanf("%d",&n); 
			printf("\n"); 
			if(n==1) 
			{ 
				q3=(Qptr)malloc(sizeof(Preorder)); 
				printf("请输入您的姓名");
				gets(q3->name); 
				printf("请输入订票数"); 
				scanf("%d",&q3->amount); 
				q3->next2=NULL; 
				q.rear->next2=q3; 
				q.rear=q3; 
				printf(" 你已经预订了 !\n"); 
			} 
		} 
		loop1:; 
} 

void Refund()       //退票功能
{ 
	Linklist p=L; 
	Bookcustomer *h=H,*h1,*h2; 
	//linkQueue q=Q; 
	char c[15],name1[15]; 
	int m=1,ticket,tick;
	gets(c);
	printf("请输入航班号:"); 
	gets(c); 
	p=L;
if(p) 
{ 
		do
		{  //使用do while来查找是否有此航班 
			if(!p) 
			{  //如果是到了表尾且没有匹配,goto至再输入航班号 
				printf("\n对不起,没有你要找的航班:\n"); 
				goto loop1; 
			} 
			m=strcmpi(p->Flightnum,c);//如果匹配的话,m=0 
			if(m==0) 
			{ 
				printf("\t航班信息:\n"); 
				printf("航班号:%s\n",p->Flightnum); 
				printf("飞机号:%s\n",p->Planenum); 
				printf("飞机周日:周%d\n",p->Flightdata); 
				printf("余票量:%d\n",p->Freeamount);} 
				else 
				p=p->next; 
		}while(m!=0);
		if(m==0) 
		{       //如果找到了,就来给他退票 
			do{ 
					h=p->Bookname; 
					if(h) 
					{ 
						printf("请输入您的姓名:"); 
						gets(name1); //gets(name1); 可允许多次退票只要操作合法!
						printf("请输入您已订的票数:"); 
						scanf("%d",&ticket); 
						printf("请输入您要退票的票数:");
						scanf("%d",&tick);
						printf("\n"); 
						h1=h; 
						h=h->next1; 
	if(strcmpi(h->name,name1)==0&&h->number==ticket&&tick<=ticket)
							//如果名字和订的票数相等,则就给他取消订票 
						{ 
							p->Freeamount+=tick;
							h->number =h->number -tick;
							if(tick==ticket) 
							{
								h2=h; 
								h1->next1=h->next1; 
								free(h2);
							} 
							printf("您已成功退票!\n\n"); 
							} 
						else if(strcmpi(h->name,name1)!=0)
						{ //如果没有找到,即系统中没有该人的信息,提示是否来重新查找 
							printf("对不起,该航班没有人订票或者是你没有订该航班的票\n"); 
							printf("是否要重新查找并取消订票?\n"); 
							printf("需要重新退票请输入1 否则请按2 "); 
							scanf("%d",&m); 
							printf("\n"); 
						} 
					} 
			}while(m==1); 
		} 
} 
else 
{printf("票已售空或是目前没有航班信息记录!\n");}
  loop1:  ; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -