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

📄 client.cpp

📁 航空订票系统 学校大作业开发的
💻 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 + -