allign.cpp
来自「学生住宿管理系统 本程序用于交流方面,仅共学习交流,用于其他方面 功能欠缺」· C++ 代码 · 共 119 行
CPP
119 行
// allign.cpp: implementation of the Callign class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Dormitory.h"
#include "allign.h"
#include "student.h"
#include "objectset.h"
#include "building.h"
#include "floor.h"
#include "room.h"
#include "StuRoom.h"
#include "FurnitureAssign.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern CDormitoryApp theApp;
Callign::Callign()
{
}
IMPLEMENT_SERIAL(Callign,CObject,1)
void Callign::Serialize(CArchive &ar){
}//序列化的实现
void Callign::input(CString classno){
st=((Cstudent *)theApp.vec2)->SearchByField("grade",classno);
}
int Callign:: create(){
Cstudent*p;
CStuRoom* sr;//分配记录指针
Cbuilding*bding;
Cfloor*floor;
Croom*room;
FurnitureAssign*fa;
p=(Cstudent*)st->getFirstRecord();
for(p;p!=NULL;p=(Cstudent*)st->getNext())//为每个学生分配
{
sr=((CStuRoom*)&theApp.dm.vec3)->SearchRecord(p);
if(!sr)//该生还未分配
{
bding=(Cbuilding*)theApp.dm.vec1.getFirstRecord();//从第一栋楼开始找
while(bding&&(bding->getField("remain")=="0"))// 若该楼已住满
b: bding=(Cbuilding*)theApp.dm.vec1.getNext();
if(!bding){
AfxMessageBox("对不起!该班的学生无法全部分配");
return 0;
}
CString a;
a=bding->getField("no");
floor=(Cfloor*)bding->getFirstRecord();//从该楼的第一层开始找
CString t;
t=floor->getField("no");
t=floor->getField("remain");
t=floor->getField("sex");
t=p->getField("sex");
while(floor&&((floor->getField("remain")=="0")||((floor->getField("sex")!="")&&floor->getField("sex")!=p->getField("sex"))))
//若该层已住满或已住学生为异性
f: floor=(Cfloor*)bding->getNext();
if(!floor) goto b;//从下一栋楼开始找
room=(Croom*)(floor->getFirstRecord());//从该层的第一个房间开始分配
t=room->getField("dept");
t=p->getField("dept");
while(room&&((room->getField("remain")=="0")||((room->getField("dept")!="")&&(room->getField("dept")!=p->getField("dept")))))
//若该房间已住满或已住学生不在同一学院
room=(Croom*)floor->getNext();
if(!room) goto f;//从下一层开始找
t=room->getField("no");
fa=new FurnitureAssign();//创建家具分配对象fa
fa->Assign(*room);//分配家具
sr=new CStuRoom(room,p);//创建分配对象sr
theApp.dm.vec3.AddRecord(sr);//添加分配记录
floor->setField("sex",p->getField("sex"));//设置楼层性别
room->setField("dept",p->getField("dept"));//设置房间系别
int m=atoi(room->getField("remain"))-1;//房间可住人数减1
CString s;
s.Format("%d",m);
room->setField("remain",s);
if(room->getField("remain")=="0")//若该房间住满
{ m=atoi(floor->getField("remain"))-1;//未满房间数减1
s.Format("%d",m);
floor->setField("remain",s);
}
if(floor->getField("remain")=="0")//若该楼层住满
{
m=atoi(bding->getField("remain"))-1;
s.Format("%d",m);
bding->setField("remain",s);//未满楼层数减1
}
}//if
}//for
return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?