?? client.cpp
字號:
// Client.cpp: implementation of the CClient class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AviationBS.h"
#include "Client.h"
#include "UsedLine.h"
#include <stdio.h>
#include <fstream.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
extern UsedLine usedLine;
/////////////////////BuildLink Construction/Destruction/////////////////
Link* BuildLink::Find(int index)
{
if(size<(index+1))
{
for(int i=size;i<(index+1);i++){Append();size++;}
return tail;
}
Link *temp=head->next; //head為空,從第二個結點開始
for(int i=0;i<index;i++)temp=temp->next; //找到某航線所對應的地址
return temp;
}
//////////////////////
void BuildLink::Append()
{
tail=tail->next=new Link;
}
//////////////////////
void BuildLink::Append(const BLineData& item)
{
tail=tail->next=new Link(item);
}
//////////////////////////////////////////////////
void BuildLink::deleteline(int index) //刪除航線時,對應的將該航線里的客戶全部刪掉
{
Link *temp=head;
Link *temp1;
for(int i=0;i<index;i++)temp=temp->next; //找到所要刪除結點的前結點
temp1=temp->next;
temp->next=temp1->next;
if(temp1->next==NULL)tail=temp; //刪除的末結點
size--;
delete temp1;
}
//增加航線
void BuildLink::addline(int index)
{
Link *temp=head;
for(int i=0;i<index;i++)temp=temp->next; //找到所要增加結點的前結點
temp->next=new Link(temp->next);
if(temp->next->next==NULL)tail=temp->next; //增加到鏈表的末端
}
////////////////CClient Construction/Destruction///////////////////////
CClient::CClient()
{
int dayInWeek;
for(int i=0;i<7;i++)
{
dayInWeek=usedLine.GetNextNDay(i).GetDayOfWeek()-1;
BClient[dayInWeek].Date=usedLine.GetNextNDay(i);
}
}
////訂票
int CClient::InsertClient(CString Name,CString id,COleDateTime Time,int F,int T,int index)
{
int dayInWeek=Time.GetDayOfWeek()-1;
return BClient[dayInWeek].Find(index)->insert(Name,id,Time,F,T);
}
//從文件中讀取
void CClient::readFile(int day,int dayInWeek,int size)
{
//BClient[dayInWeek].Date=usedLine.GetNextNDay(day);
BClient[dayInWeek].size=size;
char FilePath[21]={'D','a','t','a','B','a','s','e','/','C','l','i','e','n','t',' ','.','d','a','t','\0'};
FilePath[15]=dayInWeek+48;
fstream file(FilePath,ios::binary | ios::in);
file.seekp(0,ios::beg);
long beg=file.tellp();
file.seekp(0,ios::end);
long end=file.tellp();
if(end!=beg)
{
BLineData temp;
file.seekp(sizeof(int),ios::beg);
file.seekp(sizeof(COleDateTime),ios::cur);
for(int i=0;i<size;i++)
{
file.read((char *)& temp,long(sizeof(BLineData)));
BClient[dayInWeek].Append(temp);
}
}
file.close();
}
///////////////////////////////////////////////////////////////////////////////
void CClient::OnCreate()
{
long beg,end;
COleDateTime Time;
int i;
for(i=6;i>=0;i--)
{
int dayInWeek=usedLine.GetNextNDay(i).GetDayOfWeek()-1;
char FilePath[21]={'D','a','t','a','B','a','s','e','/','C','l','i','e','n','t',' ','.','d','a','t','\0'};
FilePath[15]=dayInWeek+48;
fstream file(FilePath,ios::binary | ios::in);
file.seekp(0,ios::beg);
beg=file.tellp();
file.seekp(0,ios::end);
end=file.tellp();
if(beg!=end)
{
int size;
file.seekp(0,ios::beg);
file.read((char*)& size,sizeof(int));
if(size==0)continue;
file.read((char *)& Time,long(sizeof(COleDateTime)));
if(Time==BClient[dayInWeek].Date)
{readFile(i,dayInWeek,size);file.close();}
else {file.close();DeleteFile(FilePath);} //從當前開始第i天都已過期,清空文件
}
}
}
///////////////////////////////////////////////////////////////////////////////
void CClient::Save()
{
int dayInWeek;
for(int i=0;i<7;i++)
{
dayInWeek=usedLine.GetNextNDay(i).GetDayOfWeek()-1;
if(BClient[dayInWeek].size==0)continue;
char FilePath[21]={'D','a','t','a','B','a','s','e','/','C','l','i','e','n','t',' ','.','d','a','t','\0'};
FilePath[15]=dayInWeek+48;
fstream file(FilePath,ios::out | ios::binary);
file.seekp(0,ios::beg);
file.write((char *)& BClient[dayInWeek].size,sizeof(int));
file.write((char *)& BClient[dayInWeek].Date,long(sizeof(COleDateTime)));
Link *temp=BClient[dayInWeek].head->next;
while(temp!=NULL)
{
file.write((char*)& temp->LineData,long(sizeof(BLineData)));
temp=temp->next;
}
file.close();
}
}
////////////////////////////////////////////////////////////////////
//增加航線
void CClient::addLine(int index)
{
for(int i=0;i<7;i++)
if(BClient[i].size>index)BClient[i].addline(index);
}
void CClient::deleteLine(int index) //刪除航線
{
for(int i=0;i<7;i++)
if(BClient[i].size>index)BClient[i].deleteline(index);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -