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

📄 client.h

📁 航空订票系统 学校大作业开发的
💻 H
字号:
// Client.h: interface for the CClient class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CLIENT_H__8C9E7687_141B_4CE8_8638_E552831EBF5E__INCLUDED_)
#define AFX_CLIENT_H__8C9E7687_141B_4CE8_8638_E552831EBF5E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

struct BClientData      //已订票客户的信息,以客户分,也是最小单元
{
    char name[20];    //客户姓名
    char ID[20];          //身份证号
	COleDateTime FlyTime;     //起飞时间
    int  FriCTicket;      //头等舱订票数
	int  TouCTicket;      //经济舱订票数
};

//////////////////////////////////////////////////////////////////////////////////////////////
class BLineData         //一天内一条航线的所有客户信息
{
public:
  	int size;                       //已订票的客户数
	BClientData ClientData[100];  
	BLineData(){size=0;}
};
////////////////////////////////////////////////////////////////////////////////////////////
class Link
{
public:
 BLineData 	LineData;
 Link  *next;
 Link(Link* p=NULL)
		{   next=p;LineData.size=0;   }
 Link(BLineData data,Link *p=NULL)
	{ LineData=data; next=p;}
///////
 int compare(char a[],char b[])
	{
		for(int i=0;i<20;i++)
			if(a[i]<b[i])return -1;
			  else if(a[i]>b[i])return 1;
		return 0;
	}
 int Find(CString ID,CString name)   //用于退票时查找
	{
	    char id[20],Name[20];
	    for(int i=0;i<20;i++)
		{
		 if(i<ID.GetLength())id[i]=ID.GetAt(i);
			  else id[i]=' ';
         if(i<name.GetLength())Name[i]=name.GetAt(i);
			 else Name[i]=' ';
		}
		int l=-1,r=LineData.size,mid;
		while(l+1!=r)
		{
			mid=(l+r)/2;
			if(compare(id,LineData.ClientData[mid].ID)>0)l=mid;
			 else if(compare(id,LineData.ClientData[mid].ID)<0)r=mid;
			 else {
				    if(compare(Name,LineData.ClientData[mid].name)==0)return mid;  
				       else return -1;
				  }
		}
		return -1;
	}
 int insert(CString name,CString ID,COleDateTime Time,int F,int T)    //用于订票时插入客户信息
	{
	    char Name[20],id[20];
		for(int i=0;i<20;i++)
		{
			if(i<name.GetLength())Name[i]=name.GetAt(i);
			 else Name[i]=' ';
			if(i<ID.GetLength())id[i]=ID.GetAt(i);
			 else id[i]=' ';
		}
		int l=-1,r=LineData.size,mid;
		while(l+1!=r)
		{
			mid=(l+r)/2;
			if(compare(id,LineData.ClientData[mid].ID)>0)l=mid;
			 else if(compare(id,LineData.ClientData[mid].ID)<0)r=mid;
			 //id已存在,并且是同一个航班,把所订的票加上去
			    else if(compare(Name,LineData.ClientData[mid].name)==0  
					&&Time==LineData.ClientData[mid].FlyTime)
				{
                    LineData.ClientData[mid].FriCTicket+=F;
                    LineData.ClientData[mid].TouCTicket+=T;
					return 0;
				}
				else return -1;  //id已存,但名字不同或者航班号不同
		}
		for(i=LineData.size;i>r;i--)
			LineData.ClientData[i]=LineData.ClientData[i-1];
		strcpy(LineData.ClientData[r].name,Name);
		strcpy(LineData.ClientData[r].ID,id);
		LineData.ClientData[r].FlyTime=Time;
        LineData.ClientData[r].FriCTicket=F;
		LineData.ClientData[r].TouCTicket=T;
		LineData.size++;
		return 1;
	}
  bool remove(int index)     //退票时,若全部票都退掉,需将订票记录删除
   {
	for(int i=index;i<LineData.size-1;i++)
	  LineData.ClientData[i]=LineData.ClientData[i+1];  //删除记录
	LineData.size--;
	return true;
   }
  bool modify(int index,int F,int T)    //退票时,若只退部分票,需修改订票记录
  {
	if(LineData.ClientData[index].FriCTicket==F&&LineData.ClientData[index].TouCTicket==T)
	   return remove(index);
    LineData.ClientData[index].FriCTicket-=F;   //头等舱
	LineData.ClientData[index].TouCTicket-=T;   //经济舱
	return true;
  }
};

///////////////////////////////////////////////////////////////////////////////////////////
class BuildLink
{
public:
	int size;                       //已订票的航线的最后一个航线的下标加一
	COleDateTime Date;              //日期
	Link* head;                     //head 为空,不放元素
	Link* tail;
	BuildLink()
		{head=tail=new Link;size=0;}
	~BuildLink()
	{
		Link* temp;
		while(head!=NULL){
        temp=head;
		head=head->next;
		delete temp;
		}
	}
    Link* Find(int index);
	void Append();
	void Append(const BLineData& item);
    void addline(int index);	//增加航线
	void deleteline(int index);    //删除航线
};
//////////////////////////////////////////////////////////////////////////////////////////
class CClient  //一天对应一个文件
{
public:                     
	BuildLink BClient[7];   //星期天到星期六(0-6)一一对应
	CClient();
	int InsertClient(CString Name,CString id,COleDateTime Time,int F,int T,int index);  //订票
	void readFile(int day,int dayInWeek,int size); //读文件
	void OnCreate();  //启动系统时初始化对象
	void CClient::Save(); //写文件,存储数据
	void deleteLine(int index);  //删除航线
	void addLine(int index);  //增加航线
};

#endif // !defined(AFX_CLIENT_H__8C9E7687_141B_4CE8_8638_E552831EBF5E__INCLUDED_)

⌨️ 快捷键说明

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