求个C++大神帮小女子度过难关啊! 不然就要挂科挂科滴干活啦😭😭&

求个C++大神帮小女子度过难关啊!
不然就要挂科挂科滴干活啦😭😭😭
帮我编个程序然后我自己改好嘛好嘛
自己来的话想了好久不知道怎么开始

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

#include<iostream>
#include<fstream>
#include<time.h>
#include<string>
#include<stdlib.h>
#include<sstream>
#include<Windows.h>
using namespace std;
struct Student{
char num[10];
char name[10];
};
class TestRoom{
public:
TestRoom(int l = 8, int c = 8);
void SetDesk(char*, char*);
void DelDesk(int, int);
void ShowInformation(int, int);
void ShowDesk(char*);
void Print();
int Reline(){ return line; }
int Recolumn(){ return column; }
void Presevation(ofstream&);
bool IsEmpty();
void Load(ifstream&);
~TestRoom();
private:
bool CheckNum(char*);
Student**p;
int line;
int column;
};
bool TestRoom::CheckNum(char*num){
for (int i = 0; i < line; i++)
for (int j = 0; j < column; j++){
if (strcmp(p[i][j].num, num) == 0)
return false;
}
return true;
}
TestRoom::TestRoom(int l, int c) :line(l), column(c){
p = new Student*[line];
int i, j;
for (i = 0; i < line; i++)
p[i] = new Student[column];
for (i = 0; i < line; i++)
for (j = 0; j < column; j++){
strcpy(p[i][j].name, "\0");
strcpy(p[i][j].num, "\0");
}
}
void TestRoom::SetDesk(char*num, char*name){
int i, j;
if (!CheckNum(num)){
cout << "该学号已经存在,本次设置座位无效" << endl;
return;
}
while (1)
{
i = rand() % line;
j = rand() % column;
if (strcmp(p[i][j].num, "\0") == 0)
break;
}

strcpy(p[i][j].num, num);
strcpy(p[i][j].name, name);
}
void TestRoom::DelDesk(int l, int c){
if (l < 0 || l > line || c < 0 || c >column){
cout << "输入的位置有误,删除函数未正常退出" << endl;
return;
}
else if (strcmp(p[l - 1][c - 1].num, "\0") == 0){
cout << "该位置本来未有学生安排入座" << endl;
return;
}
cout << "已经移除名字为:" << p[l - 1][c - 1].name << ",学号为:" << p[l - 1][c - 1].num << "在该座位入座" << endl;
strcpy(p[l - 1][c - 1].name, "\0");
strcpy(p[l - 1][c - 1].num, "\0");
}
void TestRoom::ShowInformation(int l, int c){
if (l < 0 || l > line || c < 0 || c > column){
cout << "输入的位置有误,输出函数未正常退出" << endl;
return;
}
else if (strcmp(p[l - 1][c - 1].num, "\0") == 0){
cout << "该位置本来未有学生安排入座" << endl;
return;
}
cout << "位置为:" << l << "行" << c << "列的学生信息是:" << endl;
cout << "名字:" << p[l - 1][c - 1].name << " 学号:" << p[l - 1][c - 1].num << endl;
}
void TestRoom::ShowDesk(char*num){
int i, j;
for (i = 0; i < line; i++)
for (j = 0; j < column; j++)
if (strcmp(p[i][j].num, "\0") != 0 && strcmp(p[i][j].num, num) == 0){
cout << "学号为:" << num << "的学生在" << i + 1 << "行" << j + 1 << "列的位置" << endl;
return;
}
cout << "没有该学号的学生" << endl;
}
void TestRoom::Print(){
cout << "\t";
int i, j;
for (i = 0; i < column; i++)
cout << i + 1 << "\t";

for (i = 0; i < line; i++){
cout << endl << i + 1 << "名字\t";
for (j = 0; j < column; j++){
if (strcmp(p[i][j].name, "\0") == 0){
cout << "暂为空\t";
continue;
}
cout << p[i][j].name << "\t";
}
cout << endl << " 学号\t";
for (j = 0; j < column; j++){
if (strcmp(p[i][j].num, "\0") == 0){
cout << "暂为空\t";
continue;
}
cout << p[i][j].num << "\t";
}
cout << endl;
}
cout << endl;
}
void TestRoom::Presevation(ofstream&out){
out << "\t";
int i, j;
for (i = 0; i < column; i++)
out << i + 1 << "\t";

for (i = 0; i < line; i++){
out << endl << i + 1 << "名字\t";
for (j = 0; j < column; j++){
if (strcmp(p[i][j].name, "\0") == 0){
out << "暂为空\t";
continue;
}
out << p[i][j].name << "\t";
}
out << endl << " 学号\t";
for (j = 0; j < column; j++){
if (strcmp(p[i][j].num, "\0") == 0){
out << "暂为空\t";
continue;
}
out << p[i][j].num << "\t";
}
out << endl;
}
out << endl;
}
bool TestRoom::IsEmpty(){
for (int i = 0; i < line; i++)
for (int j = 0; j < line; j++){
if (strcmp(p[i][j].num, "\0") == 0)
return true;
}
return false;
}
void TestRoom::Load(ifstream&in){
string cs;
string word;
getline(in, cs);
int j, i;
for (i = 0; i < line; i++){
getline(in, cs);
stringstream ss(cs);
ss >> word;
for (j = 0; j < column; j++){
ss >> p[i][j].name;
if (strcmp(p[i][j].name, "暂为空") == 0)
strcpy(p[i][j].name, "\0");
}
getline(in, cs);
ss.clear();
ss.str(cs);
ss >> word;
for (j = 0; j < column; j++){
ss >> p[i][j].num;
if (strcmp(p[i][j].num, "暂为空") == 0)
strcpy(p[i][j].num, "\0");
}
getline(in, cs);
}
}
TestRoom::~TestRoom(){
for (int i = 0; i < line; i++)
delete[]p[i];
}
void Break(){
char c;
cout << "输入1返回" << endl;
while (cin >> c){
cin.sync();
if (c == '1')
break;
}
}
void ShowOption(){
cout << "1.设定考场座位" << endl;
cout << "2.取消考场座位" << endl;
cout << "3.显示某座位考生信息" << endl;
cout << "4.查找考生座位" << endl;
cout << "5.显示考场座次表" << endl;
cout << "6.退出" << endl;
}
void Set(TestRoom&testroom){
char c;
char name[10], num[10];
if (!testroom.IsEmpty()){
cout << "所有座位已经安排满,需要移除后才能再安排" << endl;
Break();
return;
}
cout << "要设置座位的学生的名字是:" << endl;
cin >> name;
cout << "该学生的学号是:" << endl;
cin >> num;
testroom.SetDesk(num, name);
cout << "如果要继续设置座位请输入1,否则输入其他" << endl;
cin >> c;
cin.sync();
if (c == '1')
Set(testroom);
else
return;
}
void Del(TestRoom&testroom){
int line, column;
char c;
cout << "要删除的学生所在位置的行数是:" << endl;
cin >> line;
cout << "所在的列数是:" << endl;
cin >> column;
testroom.DelDesk(line, column);
cout << "如果要继续删除位置的设置请输入1,否则输入其他" << endl;
cin >> c;
cin.sync();
if (c == '1')
Del(testroom);
else
return;
}
void ShowInformation(TestRoom&testroom){
int line, column;
cout << "要显示的学生所在位置的行数是:" << endl;
cin >> line;
cout << "该学生所在列数是:" << endl;
cin >> column;
testroom.ShowInformation(line, column);
Break();
}
void ShowDesk(TestRoom&testroom){
char num[10];
cout << "输入要查找的学生的学号:" << endl;
cin >> num;
testroom.ShowDesk(num);
Break();
}
void ShowAll(TestRoom&testroom){
testroom.Print();
Break();
}
void Choice(TestRoom&testroom){
char c;
ShowOption();
bool bo = false;
while (cin >> c){
cin.sync();
system("cls");
switch (c){
case'1':Set(testroom); break;
case'2':Del(testroom); break;
case'3':ShowInformation(testroom); break;
case'4':ShowDesk(testroom); break;
case'5':ShowAll(testroom); break;
case'6':bo = true; break;
default:cout << "输入有误" << endl; Choice(testroom);
}
if (bo)
break;
system("cls");
ShowOption();
}
}
void Presevation(TestRoom&testroom){
char filename[20];
cout << "请输入要保存到的txt文件的文件名,不需要输入后缀名" << endl;
cout << "或输入1表示把内容覆盖到文件名为“考室座次安排.txt”文件中" << endl;
cin >> filename;
ofstream out;
if (strcmp(filename, "1") == 0)
strcpy(filename, "考室座次安排");
strcat(filename, ".txt");
out.open(filename);

testroom.Presevation(out);
cout << "数据已成功保存在主文件所在的文件夹中的“" << filename << "”" << endl;
}
void On(TestRoom&testroom){
ifstream in;
char filename[20];
cout << "输入1表示读取“考室座次安排.txt的内容”" << endl;
cout << "输入2表示不读取文件内容" << endl;
cout << "输入文件名表示读取该文件的内容,需确保该文件为本代码曾保存的文件之一,无需后缀名" << endl;
cin >> filename;
if (strcmp(filename, "2") == 0){
system("cls");
return;
}
else if (strcmp(filename, "1") == 0)
strcpy(filename, "考室座次安排");
strcat(filename, ".txt");
in.open(filename);
testroom.Load(in);
system("cls");
for (int i = 0; i < 3; i++){
cout << "即将进入主页..." << 3 - i << endl;
Sleep(1000);
system("cls");
}
}
int main(){
srand(time(NULL));
TestRoom room;
On(room);
Choice(room);
Presevation(room);
}追问

有些看不懂😭😭

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-29
说白了这个程序不是很复杂。可以自己尝试做做,如果不想做的话,me我,有劳酬的。程序代码+文档分析。需要多长时间完成本回答被网友采纳
相似回答