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 + -
显示快捷键?