我正在创建一个图书馆管理系统,在该系统中,我需要拥有四种不同类型的用户,
我将Admin类设为基类,并从Admin类继承了所有其他用户。 现在,我的下一个任务是定义类的成员函数及其功能。仅作为示例,以下是我的学生班级的头文件
class Student:public Admin
{
public:
Student();
Student(string, string);
void addStudent();
void editStudent();
void deleteStudent();
void updateStudent();
void saveStudent();
void searchStudent();
void CheckStudentSave();
void DisplayRecord();
void Set_Student_Id(string);
void Set_Student_College_Id(string);
void Set_Student_Name(string);
void Set_Student_Mobile(string);
void Set_Student_Email(string);
void Set_Student_Username(string);
void Set_Student_Password(string);
void Set_Student_Address(string);
private:
string student_id;
string student_college_id;
string student_name;
string student_mobile;
string student_email;
string student_username;
string student_password;
string student_address;
};
因此,基本上,此程序将涉及很多文件处理。现在,我已经定义了不同功能的功能,并且为Admin帐户创建了一个功能,管理员可以从中添加新学生并显示现有学生的数据。
通过这种方式,我为Student数据成员创建了2D动态数组,
Admin **student = NULL;
int studentsize = 0 // This will be used to control the size of student
student = new Admin*[1];
student[0] = NULL;
因此,基本上,studentsize将控制此数组的大小,并且每增加一个Student,它都会添加一个新的Admin指针。然后,该指针将指向一个Student Datatype变量。
我已经在addstudent()函数中获取了Student Class的所有数据成员的输入,然后通过使用saveStudent()函数来保存它们,如下所示,
void Student::saveStudent()
{
ofstream WriteStudent;
try
{
WriteStudent.open("Student Data.FILE", ios::out | ios::app);
WriteStudent << student_id << "\n";
WriteStudent << student_college_id << "\n";
WriteStudent << student_name << "\n";
WriteStudent << student_mobile << "\n";
WriteStudent << student_email << "\n";
WriteStudent << student_username << "\n";
WriteStudent << student_password << "\n";
WriteStudent << student_address << "\n";
WriteStudent.close();
cout << "Success! Data has been Saved!\n";
}
catch (exception X)
{
cout << "File Failed to load. \n";
}
cout << "Press Enter to Continue...";
getchar();
}
以下是管理员菜单代码
void AdminMenu()
{
system("cls");
cout << setw(50) << "****ADMINISTRATION ACCOUNT****";
cout << endl << endl << endl;
cout << "1) Add a new Student\n"
<< "2) Display All Students Record\n"
<< "3) Log out\n\n"
<< "Your choice: ";
int choice;
cin >> choice;
cin.ignore();
switch (choice)
{
case 1:
student = resizeuser(student, studentsize);
student[studentsize - 1] = new Student;
student[studentsize - 1]->addStudent();
break;
case 2:
LoadStudent();
for (int i = 0; i < studentsize-1; i++)
student[i]->DisplayRecord();
break;
case 3:
return;
}
cout << "Press Enter to Continue...";
getchar();
AdminMenu();
}
如您所见,在“情况1”中,我正在调整数组的大小,然后使用已调整大小的数组调用addstudent函数。 SaveStudent函数本身将在addStudent函数中调用。此功能对我来说非常理想。 这是我的调整大小功能,
Admin **resizeuser(Admin **arr, int &size)
{
Admin **temp = new Admin*[size + 1];
for (int i = 0; i < size; i++)
temp[i] = arr[i];
delete[]arr;
size++;
return temp;
}
(请注意,我不能在此使用向量,因为不允许我们使用尚未研究的任何东西)
这是“加载学生功能”的代码
void LoadStudent()
{
ifstream LoadStuff;
LoadStuff.open("Student Data.FILE", ios::in);
Admin **ptr = new Admin*[1];
string temp;
while (1)
{
ptr = resizeuser(ptr, studentsize);
ptr[studentsize - 1] = new Student;
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Id(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_College_Id(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Name(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Mobile(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Email(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Username(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Password(temp);
getline(LoadStuff, temp);
ptr[studentsize - 1]->Set_Student_Address(temp);
if (LoadStuff.eof())
break;
}
student = new Admin*[studentsize];
for (int i = 0; i < studentsize; i++)
{
student[i] = new Student;
student[i] = ptr[i];
}
delete[]ptr;
LoadStuff.close();
}
这显然也很完美。但是我面临一些困难。
但是,如果您添加一个学生记录,然后“不关闭程序”要求它显示记录,则会在第二行显示错误,
for (int i = 0; i < studentsize-1; i++)
student[i]->DisplayRecord(); // This line causes a RunTime error.
我不知道为什么会这样,而且我也无法找出问题所在。它在这里中断程序。谁能帮助我,也许可以告诉我我在这里面临的问题?
(注意:如果有人愿意的话,我也可以共享所有Header / CPP文件的所有代码。我没有添加所有代码,因为那样会使一篇文章读起来太长了,实际上它已经拥有了已经成为)