📄 airsys.cpp
字号:
//////////////////////////////////////////////////////////////////////////
// 航空客运售票系统核心类(airsys.cpp) //
//////////////////////////////////////////////////////////////////////////
#include "stdafx.h" //MFC支持库
#include "string.h" //字符串函数库
#include "airsys.h" //结构体和类定义
//////////////////////////////////////////////////////////////////////////
// 类成员函数实现 //
//////////////////////////////////////////////////////////////////////////
personlist::personlist()
{
first=NULL;
}
personlist::~personlist()
{
clear();
}
void personlist::clear()
{
short a,b;
while(first) //循环删除第一个客户
delperson(first->name,a,b);
}
person *personlist::addperson(char *vname,short vnum,short vlevel)
{
static long nowindex=0;
person *p=first,*np=new person,*pp; //pp是p的前一个结点
if(np==NULL) return NULL; //无法申请空间则返回NULL
strncpy(np->name,vname,11);
np->name[10]=NULL;
np->num=vnum;
np->level=vlevel;
np->index=++nowindex;
while(p)
{
// if(strcmp(vname,p->name)==0)
// return NULL; //已经有此结点则返回NULL
if(strcmp(vname,p->name)<0)
break;
pp=p;
p=(person *)p->next;
}
np->next=p;
if(p==first)
first=np;
else
pp->next=np;
return np; //插入后返回1
}
int personlist::delperson(char *vname,short &vnum,short &vlevel)
{
person *p=first,*pp; //pp是p的前一个结点
while(p)
{
if(strcmp(vname,p->name)==0)
{
if(p==first)
first=(person *)p->next;
else
pp->next=p->next;
vnum=p->num;
vlevel=p->level;
delete p;
return 1; //删除后返回1
}
pp=p;
p=(person *)p->next;
}
return 0; //查找无结点则返回0
}
//////////////////////////////////////////////////////////////////////////
personqueue::personqueue()
{
first=NULL;
num=0;
}
personqueue::~personqueue()
{
clear();
}
void personqueue::clear()
{
while(first) //循环删除队头客户
delperson();
}
person *personqueue::addperson(char *vname,short vnum,short vlevel)
{
person *p=first,*np=new person;
if(np==NULL)
return NULL; //无法申请空间则返回0
num++;
strncpy(np->name,vname,11);
np->name[10]=NULL;
np->num=vnum;
np->level=vlevel;
np->next=NULL;
if(p==NULL)
first=np;
else
{
while(p->next)
p=(person *)p->next;
p->next=np;
}
return np;
}
int personqueue::delperson()
{
person *p=first;
if(p==NULL)
return 0;
first=(person *)p->next;
num--;
delete p;
return 1;
}
int personqueue::delperson(char *vname) //算法同personlist::delperson()
{
person *p=first,*pp; //pp是p的前一个结点
while(p)
{
if(strcmp(vname,p->name)==0)
{
if(p==first)
first=(person *)p->next;
else
pp->next=p->next;
num--;
delete p;
return 1; //删除后返回1
}
pp=p;
p=(person *)p->next;
}
return 0; //查找无结点则返回0
}
person *personqueue::popperson()
{
person *p=first;
if(p)
{
num--;
first=(person *)p->next;
}
return p;
}
//////////////////////////////////////////////////////////////////////////
flight::flight()
{
short i,j;
for(i=0;i<3;i++)
for(j=0;j<=1000;j++)
pos[i][j]=0;
}
flight::~flight()
{
clear();
}
void flight::clear()
{
pay.clear();
wait.clear();
space[0]=num[0];
space[1]=num[1];
space[2]=num[2];
}
short flight::getpos(short vlevel)
{
for(short i=1;i<=num[vlevel];i++)
if(pos[vlevel][i]==0)
return i;
return 0;
}
long flight::getn(char *vname)
{
person *p=pay.first;
while(p)
{
if(strcmp(p->name,vname)==0)
return p->index;
p=(person *)p->next;
}
return 0;
}
person *flight::addperson(char *vname,short vnum,short vlevel)
{
if(space[vlevel]>=vnum)
{
person *p=pay.addperson(vname,vnum,vlevel);
if(p)
space[vlevel]-=vnum;
for(short i=0;i<vnum;i++)
pos[vlevel][getpos(vlevel)]=getn(vname);
return p;
}
return NULL;
}
int flight::delperson(char *vname)
{
short tnum,tlevel;
long n=getn(vname);
int r=pay.delperson(vname,tnum,tlevel);
if(r)
{
space[tlevel]+=tnum;
for(short i=1;i<=num[tlevel];i++)
if(pos[tlevel][i]==n)
pos[tlevel][i]=0;
}
else
return wait.delperson(vname);
return 1;
}
void flight::movewtop()
{
short i;
person *p;
for(i=0;i<wait.num;i++)
{
p=wait.popperson();
addperson(p->name,p->num,p->level);
delete p;
}
}
person *flight::getpay(short n)
{
if(n<0)
return NULL;
person *p=pay.first;
while(p&&n--)
p=(person *)p->next;
return p;
}
person *flight::getwait(short n)
{
if(n<0)
return NULL;
person *p=wait.first;
while(p&&n--)
p=(person *)p->next;
return p;
}
short flight::findpay(person *p)
{
short n=0;
person *pp=pay.first;
while(pp!=p && pp!=NULL)
{
pp=(person *)pp->next;
n++;
}
if(pp==NULL)
return -1;
return n;
}
short flight::findwait(person *p)
{
short n=0;
person *pp=wait.first;
while(pp!=p && pp!=NULL)
{
pp=(person *)pp->next;
n++;
}
if(pp==NULL)
return -1;
return n;
}
//////////////////////////////////////////////////////////////////////////
city::city()
{
first=NULL;
}
city::~city()
{
clear();
}
void city::clear()
{
while(first)
delflight(first->name);
}
flight *city::addflight(char *vcname,char *vfname,char *vpname,short vday,short vnum1,short vnum2,short vnum3)
{
flight *f=first,*nf=new flight;
if(nf==NULL)
return NULL;
strncpy(nf->cname,vcname,11);
nf->cname[10]=NULL;
strncpy(nf->name,vfname,11);
nf->name[10]=NULL;
strncpy(nf->pname,vpname,11);
nf->pname[10]=NULL;
nf->day=vday;
nf->num[0]=nf->space[0]=vnum1;
nf->num[1]=nf->space[1]=vnum2;
nf->num[2]=nf->space[2]=vnum3;
nf->next=NULL;
if(f==NULL)
first=nf;
else
{
while(f->next)
f=f->next;
f->next=nf;
}
return nf;
}
int city::delflight(char *vfname)
{
flight *p=first,*pp; //pp是p的前一个结点
while(p)
{
if(strcmp(vfname,p->name)==0)
{
if(p==first)
first=p->next;
else
pp->next=p->next;
delete p;
return 1; //删除后返回1
}
pp=p;
p=p->next;
}
return 0; //查找无结点则返回0
}
flight *city::get(short n)
{
if(n<0)
return NULL;
flight *f=first;
while(f&&n--)
f=f->next;
return f;
}
short city::find(flight *f)
{
short n=0;
flight *ff=first;
while(ff!=f && ff!=NULL)
{
ff=ff->next;
n++;
}
if(ff==NULL)
return -1;
return n;
}
//////////////////////////////////////////////////////////////////////////
airsystem::airsystem()
{
first=NULL;
}
airsystem::~airsystem()
{
clear();
}
void airsystem::clear()
{
while(first)
delcity(first->name);
}
city *airsystem::addcity(char *vname)
{
city *c=first,*nc=new city;
if(nc==NULL)
return NULL;
strncpy(nc->name,vname,11);
nc->name[10]=NULL;
nc->next=NULL;
if(c==NULL)
first=nc;
else
{
while(c->next)
c=c->next;
c->next=nc;
}
return nc;
}
int airsystem::delcity(char *vname)
{
city *p=first,*pp; //pp是p的前一个结点
while(p)
{
if(strcmp(vname,p->name)==0)
{
if(p==first)
first=p->next;
else
pp->next=p->next;
delete p;
return 1; //删除后返回1
}
pp=p;
p=p->next;
}
return 0; //查找无结点则返回0
}
city *airsystem::get(short n)
{
if(n<0)
return NULL;
city *c=first;
while(c&&n--)
c=c->next;
return c;
}
short airsystem::find(city *c)
{
short n=0;
city *cc=first;
while(cc!=c && cc!=NULL)
{
cc=cc->next;
n++;
}
if(cc==NULL)
return -1;
return n;
}
//////////////////////////////////////////////////////////////////////////
// The End //
//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -