📄 client.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 + -