Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 小型学生公寓管理系统(C/C++)
【标  题】:小型学生公寓管理系统(C/C++)
【关键字】:C/C++
【来  源】:http://blog.csdn.net/yhmhappy2006/archive/2006/10/05/1322308.aspx

小型学生公寓管理系统(C/C++)

Your Ad Here

 

#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;
}

作为一名程序员,你应该看一看:【上一篇】
array_insert.c:【下一篇】
【相关文章】
  • 用emacs做为C/C++集成开发环境
  • 病例:不理解C/C++的函数指针
  • C/C++编程规范
  • 几个有趣的C/C++开源库
  • [转]C/C++编程新手错误语录
  • C/C++语言之代码检查工具(PC-LINT) (ZT)
  • C/C++术语中英对照
  • 如何从C/C++ 程序 stdout 重定向到文件
  • C/C++语言参考手册CHM版[原创]
  • [转]我的一点编程体会(C/C++)
  • 【随机文章】
  • 我解释带颜色部分的就
  • Ruby官方网站换装,基于ROR
  • Lua 入门
  • proc文件系统面面谈
  • window程序设计_5