我正在嘗試為我注冊的課程撰寫 C 代碼,在那里我保留了注冊該課程的學生的資訊。
我應該能夠在撰寫的用戶界面中將學生添加到 classrrom
main,方法是呼叫函式void addNewStudent(int ID, string name, string surname),在其中創建物件實體Student,以及Course在函式內部。我還應該能夠通過呼叫
void showStudent(int ID)main中的函式來按給定的ID進行搜索,其中該函式使用getStudent(ID)類的物件的方法Course我沒有寫所有的方法,但是當我嘗試除錯這段代碼時,我得到了錯誤
" Exception has occured, unknown signal error."
我的問題是:
- 這個錯誤的原因是什么?我該如何解決?
- 假設 中的用戶界面
main以及它呼叫的函式都需要使用。我是否必須在我撰寫的每個函式中再次創建一個類物件? - 根據我上面定義的面向物件原則,能否做出更有效的實作?
#include <iostream>
using namespace std;
#define MAX 10
class Student {
private:
int ID;
string name;
string surname;
public:
Student()
{
ID = 0;
string name = "" ;
string surname = "";
}
void setID(int ID_set);
int getID();
void setName(string name_set);
string getName();
void setSurName(string surname_set);
string getSurName();
};
class Course {
private:
Student students[MAX];
int num =0 ; // The current number of students in the course, initially 0.
float weightQ;
float weightHW;
float weightF;
public:
Course()
{
students[num] = {};
weightQ = 0.3;
weightHW = 0.3;
weightF = 0.4;
}
int getNum(); // Returns how many students are in the course
void addNewStudent(Student new_student);
void updateWeights(float weightQ_update, float weightHW_update, float weightF_update);
void getStudent(int ID_given);
};
// Method declerations for the class Student
void Student :: setID(int ID_set){
ID = ID_set;
}
int Student :: getID(){
return ID;
}
void Student :: setName(string name_set){
name = name_set;
}
string Student :: getName(){
return name;
}
void Student :: setSurName(string surname_set){
surname = surname_set;
}
string Student :: getSurName(){
return surname;
}
// Method declerations for the class Course
int Course :: getNum(){
return num;
}
void Course :: addNewStudent(Student new_student){
students[num] = new_student ;
num = num 1;
}
void Course :: updateWeights(float weightQ_update, float weightHW_update, float weightF_update){
weightQ = weightQ_update;
weightHW = weightHW_update;
weightF = weightF_update;
}
void Course :: getStudent(int ID_given){
for(int i = 0; i<MAX; i ){
if(ID_given == students[i].getID()){
cout << "Student Name & Surname : " << students[i].getName() << " " << students[i].getSurName()<<"\n";
}
}
}
void addNewStudent(int ID, string name, string surname){
Student student;
Course ECE101;
student.setID(ID);
student.setName(name);
student.setSurName(surname);
ECE101.addNewStudent(student);
}
void showStudent(int ID){
Course ECE101;
ECE101.getStudent(ID);
}
int main(){
Course ECE101;
cout << "Welcome to the ECE101 Classroom Interface"<<"\n";
cout << "Choose your option\n";
string option_1 = "1) Add a student ";
string option_2 = "2) Search a student by ID";
cout << "Enter your option: ";
int x;
int ID;
string name, surname;
cin >> x;
if (x == 1)
cout << "Enter the student ID ";
cin >> ID;
cout << endl;
cout << "Enter the student name ";
cin >> name;
cout << endl;
cout << "Enter the student surname " ;
cin >> surname;
addNewStudent(ID, name, surname);
return 0;
}
uj5u.com熱心網友回復:
為了使選單更具互動性,您可以添加一個接受 3 個選項的do while 陳述句:
- 登記
- 顯示資料
- 出口
int main(){
Course ECE101;
int x;
int ID;
string name, surname;
string option_1 = "1) Add a student\n";
string option_2 = "2) Search a student by ID\n";
cout << "Welcome to the ECE101 Classroom Interface\n";
cout << "Choose your option\n";
cout << option_1 << option_2;
cin >> x;
do {
if (x == 1) {
cout << "Enter the student ID ";
cin >> ID;
cout << endl;
cout << "Enter the student name ";
cin >> name;
cout << endl;
cout << "Enter the student surname " ;
cin >> surname;
addNewStudent(ID, name, surname, ECE101);
}
else {
cout << "Enter the student ID\n";
cin >> ID;
showStudent(ID, ECE101);
}
cout << "Choose your option\n";
cin >> x;
} while(x != 3);
return 0;
}
addnewStudent()和showStudent()方法現在接受一個實體Course作為引數,以便能夠添加學生。
void addNewStudent(int ID, string name, string surname, Course &course) {
Student student;
student.setID(ID);
student.setName(name);
student.setSurName(surname);
course.addNewStudent(student);
}
void showStudent(int ID, Course &course) {
course.getStudent(ID, course);
}
該函式也是從同一類修改而來的。
void Course::getStudent(int ID_given, Course &course) {
for(int i = 0; i<MAX; i ){
if(ID_given == students[i].getID()){
cout << "Student Name & Surname : " << students[i].getName() << " " << students[i].getSurName()<<"\n";
}
}
}
演示
uj5u.com熱心網友回復:
您的 addNewStudent 函式每次被呼叫時都會創建一個新課程。您可以將課程的參考作為引數傳遞給函式并呼叫 Course.addNewStudent(student)。您需要確保在定義函式時將其指定為參考,或者您只需創建課程的副本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363450.html
