航空客运订票系统


210牛逼!!


#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string>
#include<cstring>
#include<malloc.h>
#define NONE 0
#define PUSHED 1
#define DEL -1
using namespace std;
typedef int Status;
class airline;
class client;
struct Hash_Node {
   	//存在于每个 airline 元素中,key值可以不存进txt,但必须要定义计算key值的函数
	/*哈希表结点模板--针对不同情景建立不同的哈希表*/
	Status ANS = NONE;		//节点状态 PUSHED /NONE /DEL
	int key;		//每个节点的函数结果(哈希值)		不需要初始化
	airline* nearby = NULL;	//每个节点对应的 具有相同Hash值的 邻近的下一个airline节点
	int times = 0;	//被计算的key的权值(倍数)
/*public:
	Hash_Node() 
	{
		nearby = NULL;
		times=0;
	}*/
};

struct CHash_Node {
   	//存在于每个 client 元素中,key值可以不存进txt,但必须要定义计算key值的函数
	/*哈希表结点模板--针对不同情景建立不同的哈希表*/
	Status ANS = NONE;		//节点状态 PUSHED /NONE /DEL
	int key;		//每个节点的函数结果(哈希值)		不需要初始化
	client* nearby = NULL;	//每个节点对应的 具有相同Hash值的 邻近的下一个client节点
};

struct client   
{
    /*客户*/
	char name[20];          /*姓名*/   //Hash
	int ordering_number;    /*订票量*/
	int grade;             /*舱位等级*/
	/*缺少联系方式  变量*/   /*可以创新发展 手机 的方式*/
	char cellphone[12];			/* 新添-- 联系方式--手机号码*/
	char id_number[19];		/* 新添-- 身份证号*/
	client *next;          /*用了链表存储结构保存client*/
	CHash_Node node;		/* client类的Hash节点 */
public:
	void get_key();			/*Hash节点的key值计算--姓名*/
};
void client::get_key()
{
   //client类 姓名--key值计算
	/*字符串哈希实现*/
}
class airline
{
    /*航班信息*/
private:
	char end_station[20];   /*终点站名*/	//Hash
	char air_num[10];       /*航班号*/  //(可依照排序)	//Hash
	char plane_num[10];     /*飞机型号*/	
	string day;            /* 更改-- 飞行日期(例如:2020年01月05日)*/	//我觉得可以不Hash
	char time[5];			/* 新添-- 飞行时间(例如:17:15)*/
	int people_quota;       /*乘员定额*/
	double price;           /*票价*/
	int more_ticket;        /*余票量*/
	char passenger_list[50];   /*客户名单*/
	char waiting_list[50];     /*等候替补的客户名单*/     
	Hash_Node node;		/* airline类的Hash节点 */
	static int number;       /*航班总数*/    //静态常量
public:
	void print()
	{
   /*打印航班信息*/
	    cout<<"  终点站名:"<<end_station<<"\t 航班号:"<<air_num<<"\t  飞机号:"<<plane_num << "\t   日期:"<<day
			<<"\t   时间:"<<time<<"\t  乘员定额:"<<people_quota<<"\t  票价:"<<price<<"\t 余票量:"<<more_ticket<<"\n\n";
	} 
	void get_station_key();			/*Hash节点的key值计算--终点站名*/
	void get_num_key();			/*Hash节点的key值计算--航班号*/
	friend airline* get_airline();                   /*读取文件中的航班信息*/     //定位航班指针的函数
	friend void client_list();		//查看某航班乘客名单(管理员操作)
	friend void put_airline(airline*);		//输出修改后的航班信息
	friend void print_airline();		//打印所有航班信息(管理员操作)
	friend void search();		//查询操作
	friend void booking();		//订票操作            /*这些都是接下来下面的具体函数,只不过这些函数都是airline的友元函数*/
	friend void refund();		//退票操作            /*有更高的对其私有成员的访问权限*/
	friend client* get_passenger(airline);  /* 读取某航班乘客信息/返回某航班乘客的指针 */		// 1
	friend client* get_wait(airline);       /* 读取某航班等候替补名单 */						// 2
	friend void put_passenger(airline,client*);/* 输出乘客信息到文件 */							// 1
	friend void put_wait(airline,client*);		/* 输出等候替补名单 */							// 2
	friend void re_price();	//修改某航班票价(管理员操作)
	friend airline* Get_num_Hash_Map(airline* line);	//建立Hash表(Hash操作)
//	friend void app_airline();	//增加航班(管理员操作)
};



int airline::number=0;       /*静态常量类外定义实现*/
char Name[20]="";            /*用于用户登录的姓名,并初始化为空白*/
char Id_number[19] = "";	 /*用于用户登录的身份证号码,并初始化为空白*/
char Cellphone[12] = "";	 /*用于用户登录的手机号码,并初始化为空白*/
airline *L;                  /*全局变量,飞机航线头指针*/      


airline* Get_num_Hash_Map(airline* line)
{
   	//建立Hash表
	int num = (line->number/3)+1;// (line->number/3)+1 = 7 是哈希函数 的MOD,是个变量
	//int num = 7;	
	airline *numline = (airline*)malloc(num*sizeof(airline));		//建立动态数组

	for (int i = 0; i < num; i++)
	{
   
		line[i].get_num_key();
		if (numline[line[i].node.key].node.ANS == NONE)
		{
   /*Hash_Map该数组元素未占用,则把元素的指针指向该airline[i]的地址*/
			numline[line[i].node.key] = line[i];
			numline[line[i].node.key].node.ANS = PUSHED;//改变节点状态值,为其他if判断做条件
		}
			
		else if (numline[line[i].node.key].node.ANS == PUSHED)
		{
   /*Hash_Map该数组元素被占用,则把元素对应的ailine.anode.nearby是NULL的节点的指向该airline[i]的地址*/

			/*开辟新的节点(node的内部操作)或者 再取值寻找一个空闲的地址*/
			/*我们认为开辟新节点更容易,但是更要求在查找的时候要做好 一一对应 的算法*/

			airline* p;//临时指针
			p = &numline[line[i].node.key];
			while (p)
				p = p->node.nearby;
			/*line[i]嵌入*/
			*p = line[i];		//*p是 p指针指向的nearby ,而p是 p指针指向的nearby 的地址,不能等于line[i],要注意!

		}
		else if (numline[line[i].node.key].node.ANS == DEL)
		{
   
			/*删除复原操作*/
		}
	}
	return numline;
	/*Hash_Node* numlist,*p,*q;
	p = numlist;
	int hashnum = line->number;*/
	/*for (int i = 0; i < hashnum; i++)
	{//建立纵向链表
		q = new Hash_Node;//开辟新空间给下一个节点,并让q指针指向之
		p->ANS = PUSHED;//数据元素1 -- 状态
		p->key = NULL;//数据元素2 -- hash值
		p->nextnode=q;
		//Hash操作中,相同的hash值右开辟的条件是if(nearby)
		p = p->nextnode;//p移位到下一个节点
	}
	p = numlist;
	p->nearby = NULL;*/
}

void airline::get_station_key()
{
   /*Hash节点的key值计算--终点站名*/
	/*字符串哈希实现*/
}
void airline::get_num_key()
{
   /*Hash节点的key值计算--航班号*/
	/*一般常量哈希实现*/
	this->node.key = (atoi(this->air_num)-48) % 7;	//num Key值计算  // Hash函数 1	//注意atoi()函数的使用!!
	this->node.times = (atoi(this->air_num) - 48) / 7;	//num node.times (倍数)计算
}

void app_client(client 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值