小型学生公寓管理系统(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;
}

你可能感兴趣的:(C/C++,struct,each,query,null,iostream,include)