功能
(1)学生信息包括:姓名、学号、年龄、性别、学院、年级等
(2)宿舍信息包括:宿舍编号、宿舍楼名、楼层号、宿舍类型(二人间、四人间、六 人间、八人间) 、收费标准等。
(3)住宿信息包括:学生、宿舍、入住时间、是否欠费等。
(4)完成以下的操作:学生信息和宿舍信息的添加、修改、浏览、删除和查询。 (5)完成以下的操作:学生入住、缴费;住宿信息浏览、学生住宿信息查询、宿舍住 宿信息浏览与查询。 2、提示: (1)增加必要的数据成员、成员函数或类; (2)对象指针(住宿信息类的对象指针成员可以指向相关的宿舍、对象指针数组成员可 以表示该宿舍的学生们)
代码:
#include <iostream>
#include <string>
using namespace std;
//定义学生和宿舍的最大数量
#define MAXSTU 50
#define MAXDOR 20
//定义学生类
class Student
{
private:
int mXuehao; //学号
char* mName; //名字
int mAge; //年龄
char mSex; //性别
char* mPartment;//学院
int mGrade; //年级
public:
Student(){mName = 0;mPartment = 0;}
Student(int id,const char* name,int age,char sex,const char* par,int grade)
{
mXuehao = id;
mName = new char[strlen(name)+1];
memcpy(mName,name,strlen(name));
mName[strlen(name)] = '\0';
mAge = age;
mSex = toupper(sex);
mPartment = new char[strlen(par)+1];
memcpy(mPartment,par,strlen(par));
mPartment[strlen(par)] = '\0';
mGrade = grade;
}
~Student()
{
if (mName)
{
delete[] mName;
mName = 0;
}
if (mPartment)
{
delete[] mPartment;
mPartment = 0;
}
}
//设置类属性
void setId(int id){mXuehao = id;}
void setName(const char* name)
{
if (mName != 0)
{
delete[] mName;
mName = 0;
}
mName = new char[strlen(name)+1];
memcpy(mName,name,strlen(name));
mName[strlen(name)] = '\0';
}
void setSex(char sex){mSex = toupper(sex);}
void setAge(int age){mAge = age;}
void setPartment(const char* par)
{
if(mPartment)
delete []mPartment;
mPartment = new char[strlen(par)+1];
memcpy(mPartment,par,strlen(par));
mPartment[strlen(par)] = '\0';
}
void setGrade(int g){mGrade = g;}
//获取类属性
int getId(){return mXuehao;}
char* getName(){return mName;}
char getSex(){return mSex;}
int getAge(){return mAge;}
char* getPartment(){return mPartment;}
int getGrade(){return mGrade;}
void display()
{
cout.setf(ios::left);//设置左对齐
cout << mXuehao << " " ;
cout.fill(' '); //设置不足位填充方式
cout.width(10); //设置宽度,只对下一条有作用
cout << mName ;
cout << " " << mSex << " ";
cout << mAge << " " ;
cout.fill(' ');
cout.width(20);
cout<< mPartment ;
cout<< " " << mGrade << endl;
cout.unsetf(ios::left); //取消左对齐
}
};
//定义宿舍类型
enum EDomType
{
e_dorm_two=1,
e_dorm_four,
e_dorm_six,
e_dorm_eight
};
//定义宿舍类
class Dormatory
{
private:
int mSusheId; //宿舍号
char* mDorName; //宿舍楼名
int mLayer; //楼层号
EDomType mEtype;//类型
int mPrice; //价格
public:
Dormatory(){mDorName = 0;}
Dormatory(int id,const char* name,int layer,EDomType e,int price)
{
mSusheId = id;
mDorName = new char[strlen(name)+1];
memcpy(mDorName,name,strlen(name));
mDorName[strlen(name)] = '\0';
mLayer = layer;
mEtype = e;
mPrice = price;
}
~Dormatory()
{
if(mDorName)
{
delete[] mDorName;
mDorName = 0;
}
}
//设置类属性
void setId(int id){mSusheId = id;}
void setName(const char* name)
{
if(mDorName) delete[] mDorName;
mDorName = new char[strlen(name)+1];
memcpy(mDorName,name,strlen(name));
mDorName[strlen(name)] = '\0';
}
void setLayer(int layer){mLayer = layer;}
void setDormType(EDomType e){mEtype = e;}
void setPrice(int p){mPrice = p;}
//获取类属性
int getId(){return mSusheId;}
char* getName(){return mDorName;}
int getLayer(){return mLayer;}
EDomType getType(){return mEtype;}
int getPrice(){return mPrice;}
void display()
{
cout.setf(ios::left);
cout<< mSusheId << " ";
cout.fill(' ');
cout.width(10); //名字最多5个汉子或者10个英文字符
cout << mDorName;
cout << " " << mLayer << " ";
if(e_dorm_two == mEtype)
cout << "二人间" ;
else if(e_dorm_four == mEtype)
cout << "四人间" ;
else if(e_dorm_six == mEtype)
cout << "六人间" ;
else
cout << "八人间" ;
cout << " " << mPrice << endl;
cout.unsetf(ios::left);
}
};
//定义时间类
struct Date
{
int year;
int month;
int day;
};
//住宿信息
class HomeInfo
{
private:
Dormatory* mDormatory; //宿舍对象指针
Student* mStu[8]; //学生指针数组
bool mbqf[8]; //是否欠费,true欠费,否则不欠费
Date mHomeDate[8]; //入住时间
int mCurrentNmb;//当前已入住人数
char mDormSex; //当前宿舍的性别
public:
HomeInfo()
{
for (int i =0;i< 8;i++)
{
mStu[i] = 0;
mbqf[i] = true;
}
mDormatory = 0;
mCurrentNmb = 0;
mDormSex = 'n'; //表示该宿舍尚未分配
}
void setDormatory(Dormatory* p){mDormatory = p;}
void setSex(char sex){mDormSex = sex;}
Dormatory* getDormatory(){return mDormatory;}
char getSex(){return mDormSex;}
int getCurrentNmb(){return mCurrentNmb;}
//查看某个学生是否在该房间
bool isIn(Student* stu)
{
for (int i=0;i<mCurrentNmb;i++)
{
if(mStu[i] == stu)
return true;
}
return false;
}
//是否已经注满
bool isFull()
{
if(e_dorm_eight == mDormatory->getType() && mCurrentNmb == 8)
return true;
else if(e_dorm_six == mDormatory->getType() && mCurrentNmb == 6)
return true;
else if(e_dorm_four == mDormatory->getType() && mCurrentNmb == 4)
return true;
else if(e_dorm_two == mDormatory->getType() && mCurrentNmb == 2)
return true;
return false;
}
//办理入住
bool Home(Student *stu