?? 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 + -