高分悬赏!!!谁会用c++编写一个 排考场座位系统 啊!!!

功能要求:假设考场有8×8的座位,本程序可自动对考生进行座位安排,每当一个考生进入考场就为他安排座位。
循环显示如下图所示的主菜单:
选择1,为新来的考生安排座位,其方法是:用户输入准考证号和姓名,然后系统随机产生该考生座位的行号和列号,要求做到一个考生只有一个座位,而且在已有考生的位置上不能再安排新的考生;
选择2,取消某人考场座位;
选择3,要求输入座位的行号和列号,然后显示该座位学生的信息;
选择4,要求输入某考生准考证号,然后显示该学生的座位;
选择5,显示考场座次表,要求再每个座位对应的行列上显示该考生的准考证号。

为了学习编程,我硬是写了一遍。经过运行调试,已基本无大碍!

#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

/********************************************/
class student
{
public:
student(){ stestnum=""; sname=="";}
void setmessage()
{
cin>>stestnum>>sname;
}
string stestnum;//考号
string sname;//姓名
};
student cstu[64];

/********************************************/
const int row=8, col=8; //座位行和列

/********************************************/
void arrange_seat(int seat[][col]);
void cancel_seat(int seat[][col]);
void find_student(int seat[][col]);
void find_seat(int seat[][col]);
void display_seats(int seat[][col]);

/********************************************/
void main()
{
int choose, seat[row][col],i,j;
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
seat[i][j] = 0; //0表示座位为空
}
}
do
{
cout<<"-------------------------------------------"<<endl
<<"----输入:1------安排座位给新考生"<<" ---"<<endl
<<"---- 2------取消某人考场座位"<<" ---"<<endl
<<"---- 3------根据座位查询考生信息"<<" ---"<<endl
<<"---- 4------根据准考证查询考生座位"<<" ---"<<endl
<<"---- 5------输出考场座次表"<<" ---"<<endl
<<"---- 0------退出!"<<" ---"<<endl
<<"-------------------------------------------"<<endl;
cin>>choose;
if (1 == choose) arrange_seat(seat);
else if (2 == choose) cancel_seat(seat);
else if (3 == choose) find_student(seat);
else if (4 == choose) find_seat(seat);
else if (5 == choose) display_seats(seat);
else exit(1);
} while( choose );
}

/********************************************/
//选择1,为新来的考生安排座位,方法:用户输入准考证号和姓名,系统随机产生
//-------该考生座位的行号和列号,要求做到一个考生只有一个座位,而且在已有考生的位
//-------置上不能再安排新的考生;
void arrange_seat(int seat[][col])
{
time_t t;
int newseat,r=0,c=0;
srand((unsigned int)time(&t));
for ( r=0; r<row; r++)
{
for ( c=0; c<col; c++)
{
if (seat[r][c] == 0)break; //有空位子
if (r==row && c==col)
{
cout<<"本教室考生已满!"<<endl;
return ;
}
}
}
//---------------------------------//
do
{
newseat = rand()%64; //产生座位号
r = newseat/8; //行
c = newseat - r*8 ;//列
}while ( seat[r][c] != 0); //座位已经有人重先产生座位号
//---------------------------------//
seat[r][c]=newseat;
cout<<"请输入准考证号和姓名:";
cstu[newseat].setmessage(); //把信息存储到学生类中
for (int i=0; i<64; i++)
{
if ( i != newseat) //相同准考证号不能重复申请位子
{
if ( cstu[newseat].stestnum == cstu[i].stestnum )
{
cout<<"对不起!该准考证号已申请过座位,请您核对后再输入:";
cstu[newseat].setmessage(); //
i--;
}
}
}
cout<<"操作成功!"<<endl;
}

/********************************************/
//选择2,取消某人考场座位(假设取消后的座位别人能坐)
void cancel_seat(int seat[][col])
{
string name;
int i,r,c;
cout<<"输入要取消的考生姓名:";
cin>>name;
for (i=0; i<64; i++)
{
if (cstu[i].sname == name)
{
r = i/8; //行
c = i - r*8 ;//列
seat[r][c]=0; //赋值为0代表此座位无人
cstu[i].stestnum = "";//清空存储信息
cstu[i].sname = "";
cout<<"操作成功!"<<endl;
return ;
}
}
cout<<"该考场没有此人!"<<endl;
cout<<endl;
}

/********************************************/
//选择3,要求输入座位的行号和列号,然后显示该座位学生的信息;
void find_student(int seat[][col])
{
int r,c;
cout<<"请输入行号row和列号col:";
cin>>r>>c;
r = r-1;
c = c-1;
if ( cstu[r*8+c].stestnum =="" || cstu[r*8+c].sname == "")
{
cout<<"该座位目前为空."<<endl;
}
else
{
cout<<"准考证:"<<cstu[r*8+c].stestnum<<", 姓名:"<<cstu[r*8+c].sname<<endl;
}
cout<<endl;
}

/********************************************/
//选择4,要求输入某考生准考证号,然后显示该学生的座位;
void find_seat(int seat[][col])
{
int r,c;
string textnum;
cout<<"请输入准考证号:";
cin>>textnum;
for ( r=0; r<row; r++)
{
for (c=0; c<col; c++)
{
if (textnum == cstu[r*8+c].stestnum)
{
cout<<"查询结果: "<<"row:"<<r+1<<","<<"col:"<<c+1<<endl;
return ;
}
}
}
cout<<"准考证错误!"<<endl;
cout<<endl;
}

/********************************************/
//选择5,显示考场座次表,要求再每个座位对应的行列上显示该考生的准考证号。
void display_seats(int seat[][col])
{
int r,c;
cout<<"本考场座位占用情况如下(*代表无人,数字代表准考证号):"<<endl;
for ( r=0; r<row; r++)
{
for (c=0; c<col; c++)
{
if (seat[r][c] != 0) //不为0则有人
{
//输出的行左对齐,列宽10
cout.setf(ios::left);
cout<<setw(10)<<(cstu[r*8+c].stestnum);//有人输出准考证号
}
else
{
cout.setf(ios::left);
cout<<setw(10)<<"********";//无人输出*******
}
}
}
cout<<endl<<endl;
}
/********************************************/
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-10
你这道题没100分是没人肯动脑的,至少得150分才有人肯做~
第2个回答  2009-03-10
有挑战性,我尝试一下。
第3个回答  2009-03-10
分太少了,多点还可以帮你
第4个回答  2009-03-10
hjhgjhgjhghjg
相似回答
大家正在搜