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