软讯网络 > 编程语言 > C/C++ > 小型学生公寓管理系统(C/C++)
【标 题】:小型学生公寓管理系统(C/C++)
【关键字】:
C/C++
【来 源】:http://blog.csdn.net/yhmhappy2006/archive/2006/10/05/1322308.aspx
小型学生公寓管理系统(C/C++)
#include <iostream>

using namespace std;

const int ROOM_NUM = 4;
const int STU_NUM_EACH_ROOM = 4;


enum OP...{RESIDEIN=1, OUT, QUERY, QUIT};

enum QUER...{BYNO=1, BYNAME, BYROOMNO, ALL, BACK};//查询方式


typedef struct Room...{
int roomNo;
int sNum; //该房间现住人数
int sNo[STU_NUM_EACH_ROOM]; //房间里住的学生的学号
struct Room* next;
}Room, *PRoom;


typedef struct Student...{
int sNo;
char sName[20];
int roomNo;
struct Student* next;
}Student, *PStudent;

void printMessage(const char* mess)

...{
cout << mess;
}
void makeRooms(PRoom& prs)

...{
prs = new Room[ROOM_NUM];
if(prs)

...{
for(int i=0; i<ROOM_NUM; ++i)

...{
prs[i].roomNo = i+1;
prs[i].sNum = 0;
memset(prs[i].sNo,0,sizeof(prs[i].sNo));
prs[i].next = NULL;
}
}
else

...{
printMessage("宿舍没盖成功,可能是资金的问题! ");
exit(1);
}
}
int getRoomNo(PRoom& prs)

...{
for(int i=0; i<ROOM_NUM; ++i)

...{
if(prs[i].sNum < STU_NUM_EACH_ROOM)
return prs[i].roomNo;
}
return 0;
}
PStudent checkSno(PStudent& pslh, int sno)

...{
for(PStudent ps=pslh->next; ps; ps=ps->next)

...{
if(ps->sNo == sno)
return ps;
}
return NULL;
}
void resideIn(PStudent& pslh, PRoom& prs)

...{
cin.clear();
int roomNo = getRoomNo(prs);
if(roomNo != 0)

...{
Student* psNew = new Student;
printMessage("输入学号,姓名: ");
if(cin >> psNew->sNo >> psNew->sName)

...{
if(!checkSno(pslh, psNew->sNo))

...{
psNew->roomNo = roomNo;
psNew->next = NULL;

PStudent pst = pslh;
while(pst->next)
pst = pst->next;
pst->next = psNew;

for(int i=0; i<STU_NUM_EACH_ROOM; ++i)
if(prs[roomNo-1].sNo[i] == 0)

...{
prs[roomNo-1].sNo[i] = psNew->sNo;
break;
}

prs[roomNo-1].sNum++;

pslh->sNo ++;//保存总人数
cout << "入住手续办完,旅途愉快,您的房间是: " << roomNo <<endl;
}
else

...{
printMessage("该生学号不正确! ");
delete psNew;
}
}
else

...{
cin.clear();
delete psNew;
}
}
else

...{
printMessage("对不起,客满 ");
}
}
void resideOut(PStudent& pslh, PRoom& prs)

...{
printMessage("输入退房者学号: ");
int sno;
cin >> sno;
PStudent pst = checkSno(pslh,sno);
if(pst)

...{
PStudent ps = pslh;
while(ps->next != pst)
ps = ps->next;
ps->next = pst->next;

int roomNo = pst->roomNo;

for(int i=0; i<STU_NUM_EACH_ROOM; ++i)
if(prs[roomNo-1].sNo[i] == pst->sNo)

...{
prs[roomNo-1].sNo[i] =0;
break;
}

prs[roomNo-1].sNum--;
pslh->sNo --;
delete pst;
printMessage("退房成功! ");
}
else

...{
printMessage("该生不存在! ");
}
}
void queryByNo(PStudent& pslh, PRoom& prs)

...{
printMessage(" 输入学号: ");
int sno;
cin >> sno;
PStudent pst = checkSno(pslh,sno);
cout << " 查询结果:" << endl;
if(pst)

...{
cout << " 学号:" << sno << endl;
cout << " 姓名:" << pst->sName << endl;
cout << " 房间:" << pst->roomNo << endl;
cout << " ===============" << endl;
}
else

...{
printMessage(" 该生不存在! ");
}
}
void queryByName(PStudent& pslh, PRoom& prs)

...{
printMessage(" 输入姓名: ");
char sname[20];
cin >> sname;
bool found=false;
cout << " 查询结果:" << endl;
for(PStudent ps = pslh->next; ps; ps = ps->next)

...{
if(strcmp(ps->sName, sname) == 0)

...{
cout << " 学号:" << ps->sNo << endl;
cout << " 姓名:" << ps->sName << endl;
cout << " 房间:" << ps->roomNo << endl;
cout << " ===============" << endl;
found = true;
}
}

if(!found)
printMessage(" 该生不存在! ");
}
void queryByRoomNo(PStudent& pslh, PRoom& prs)

...{
printMessage(" 输入房间号: ");
int roomNo;
cin >> roomNo;
cout << " 查询结果:" << endl;
if(roomNo >= ROOM_NUM)

...{
printMessage(" 无此房间! ");
}
else

...{
cout << " 房间号:" << roomNo << endl;
cout << " 学生数:" << prs[roomNo-1].sNum <<endl;
for(int i=0; i<STU_NUM_EACH_ROOM; ++i)
if(prs[roomNo-1].sNo[i] != 0)

...{
cout << " 学号:" << prs[roomNo-1].sNo[i] << endl;
}
}
}
void queryAll(PStudent& pslh, PRoom& prs)

...{
bool found = false;
cout << " 查询结果:" << endl;
for(PStudent ps = pslh->next; ps; ps = ps->next)

...{
cout << " 学号:" << ps->sNo << endl;
cout << " 姓名:" << ps->sName << endl;
cout << " 房间:" << ps->roomNo << endl;
cout << " ===============" << endl;
found = true;
}
if(!found)
printMessage(" 无记录 ");
}
void query(PStudent& pslh, PRoom& prs)

...{
int queryBy;
printMessage(" 选择查询方式: ");
cin.clear();
while(cin >> queryBy)

...{
if(queryBy == BACK)
break;

switch(queryBy)

...{
case BYNO:
queryByNo(pslh, prs);
break;
case BYNAME:
queryByName(pslh, prs);
break;
case BYROOMNO:
queryByRoomNo(pslh, prs);
break;
case ALL:
queryAll(pslh, prs);
break;
default:
printMessage(" 选择方式错误,请重新选择! ");
break;
}
printMessage(" 选择查询方式: ");
}
cin.clear();
}
int main()

...{
PRoom pRooms = NULL;
makeRooms(pRooms);
PStudent pStuLinkHeader = new Student;
pStuLinkHeader->sNo = 0;
pStuLinkHeader->next = NULL;
int op;
printMessage("1.入住 ");
printMessage("2.退房 ");
printMessage("3.查询 ");
printMessage("4.退出程序 ");
printMessage("选择服务: ");
while(cin >> op)

...{
if(op == QUIT)
break;
switch(op)

...{
case RESIDEIN:
resideIn(pStuLinkHeader, pRooms);
break;
case OUT:
resideOut(pStuLinkHeader,pRooms);
break;
case QUERY:
printMessage(" 1.按学号 ");
printMessage(" 2.按名字 ");
printMessage(" 3.按房间号 ");
printMessage(" 4.列出所有 ");
printMessage(" 5.返回上层 ");
query(pStuLinkHeader, pRooms);
break;
default:
printMessage("选择错误,请重新选择! ");
break;
}
printMessage("选择服务: ");
cin.clear();
}
return 0;
}
