c++學生管理系統

想要實現的功能

1,可以增加學生的信息,包括(姓名,學號,c++成績,高數成績,英語成績)

2,可以刪除學生信息

3,修改學生信息

4,顯示所有學生信息

5,查詢學生信息

6,把所有學生根據平均成績進行排名

注意:以下寫作流程是按照思考的順序書寫的,如果想看完整代碼,看最后!!!

大致思路:

首先創建一個Student類,這類里面包含學生的姓名,學號,c++成績,高數成績,英語成績。在創建一個班級類,將學生類作為成員變量,這樣每一個學生就可以放到班級類這個里面。

class Student {
private:
?? ?string _name;
?? ?string _stuNum;
?? ?double _gradeC;
?? ?double _gradeM;
?? ?double _gradeE;
public:

?? ?Student(string name = "", string stuNum = "", double gradeC = 0, double gradeM = 0, double gradeE = 0)
?? ??? ?:_name(name)
?? ??? ?, _stuNum(stuNum)
?? ??? ?, _gradeC(gradeC)
?? ??? ?, _gradeM(gradeM)
?? ??? ?, _gradeE(gradeE)
?? ?{}

}

————————————————————————————————————

class StudentClass {
private:
?? ?Student* _arr;
?? ?int _useSize;
?? ?int _capacity;
public:
?? ?StudentClass(int capacity = 4) {
?? ??? ?
?? ??? ?_arr = new Student[capacity];
?? ??? ?_useSize = 0;
?? ??? ?_capacity = capacity;? ?

?}

————————————————————————————————————

然后寫運行的大致框架:首先,實例化一個班級。打印出一個菜單,菜單上有各種那個操作。然后寫一個循環(do-while循環:最少循環一次)然后輸入要進行的操作,通過(switch)語句,對應到相應操作的語句。

void menu() {
?? ?cout << "1,學生信息錄入" << endl;
?? ?cout << "2,刪除學生信息" << endl;
?? ?cout << "3,修改學生信息" << endl;
?? ?cout << "4,顯示所有學生信息" << endl;
?? ?cout << "5,查詢學生成績" << endl;
?? ?cout << "6,成績排名" << endl;
?? ?cout << "0,退出系統" << endl;
}

int main() {

?? ?StudentClass studentClass(1);
?? ?do
?? ?{
?? ??? ?menu();
?? ??? ?cout << "請輸入操作選項:" << endl;
?? ??? ?int choice;
?? ??? ?cin >> choice;
?? ??? ?switch (choice) {
?? ??? ?case 1://學生信息錄入
?? ??? ?{
?? ??? ??? ?GetIn(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?case 2://刪除學生信息
?? ??? ?{
?? ??? ??? ?Delete(studentClass);
?? ??? ??? ?break;
?? ??? ?}?
?? ??? ?case 3://修改學生信息
?? ??? ?{
?? ??? ??? ?Amend(studentClass);
?? ??? ??? ??? ?break;
?? ??? ?}
?? ??? ?case 4://顯示所有學生信息
?? ??? ?{
?? ??? ??? ?Print(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?case 5://查詢學生成績
?? ??? ?{
?? ??? ??? ?Search(studentClass);
?? ??? ??? ?break;
?? ??? ?}

?? ????case 6://成績排名
?? ??? ?{ ? Order(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?case 0:
?? ??? ??? ?cout << " 退出系統" << endl;
?? ??? ??? ?exit(0);
?? ??? ?default:
?? ??? ??? ?cout << "輸入錯誤,重新輸入:" << endl;
?? ??? ??? ?break;
?? ??? ?}
?? ?} while (1);

?? ?return 0;
}

達到這種效果:

________________________________________________________________

第一個操作對應的功能:

分別輸入姓名,學號,c++成績,高數成績,英語成績,然后實例化一個學生的引用。將這些作為構造函數是參數。然后將這個“學生”放到“班級”里面。想要實現這個操作就要在班級這個類里面寫一個成員函數。把這個學生對象放到班級類指定的空間里面。這時就需要考慮班級這個類在初始化的時候開辟的空間是否夠用。如果不夠放下這個“學生”就要考慮擴容。

void GetIn(StudentClass& studentClass) {
?? ?cout << "請輸入學生信息->" << endl;
?? ?cout << "姓名:" << endl;
?? ?string name;
?? ?cin >> name;
?? ?cout << "學號:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?cout << "C語言成績:" << endl;
?? ?double a;
?? ?cin >> a;
?? ?cout << "高數成績:" << endl;
?? ?double b;
?? ?cin >> b;
?? ?cout << "英語成績:" << endl;
?? ?double c;
?? ?cin >> c;
?? ?Student stu(name, stuNum, a, b, c);
?? ?studentClass.putin(stu);

}

————————————————————

注意:這是在班級這個類開辟的空間上,把學生這個對象放進去,所以這個函數是班級的成員函數

void putin(Student s) {
?? ?if (_useSize == _capacity) {

?? ??? ?_capacity = _capacity == 0 ? _capacity = 4 : _capacity * 2;?
?? ??? ?Student* temp = new Student[_capacity];?
?? ??? ?for (int i = 0; i < _useSize; i++) {
?? ??? ??? ?temp[i] = _arr[i];?
?? ??? ?}
?? ??? ?delete[]_arr;?
?? ??? ?_arr = temp;?
?? ?}
?? ?_arr[_useSize] = s;
?? ?_useSize++;
}

效果如圖所示:

————————————————————————————————

第二個操作對應的功能:

刪除學生信息,我們需要輸入學生的姓名或者學號,如果沒找到不作操作,如果找到了這位學生,按照如下圖思路將其覆蓋,也就是刪除

void Delete(StudentClass& studentClass) {
?? ?cout << "請輸入學生的學號/姓名:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?studentClass.del(stuNum);
}

————————————————————

班級的成員函數:

void del(string num) {
?? ?int x = getUseSize();
?? ?int i;
?? ?for (i = 0;i < x;i++) {
?? ??? ?if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?if (i==x) {
?? ??? ?cout << "查無此人! 刪除失敗!!!" << endl;
?? ??? ?return;
?? ?}else{
?? ??? ?for (;i < _useSize - 1;i++) {
?? ??? ??? ?_arr[i] = _arr[i + 1];
?? ??? ?}
?? ??? ?_useSize--;
?? ??? ?cout << " 刪除成功" << endl;
?? ??? ?return;
?? ?}
}
int getUseSize() {
?? ?return _useSize;
}

——————————————————————————

學生的成員函數(因為名字和學號都是私有,所以要有一個函數是的讓這些數據可以得到,這樣做的目的是不讓成員變量隨意被更改)

string getStuNum() {
?? ?return _stuNum;
}
string getStuName() {
?? ?return _name;
}

效果如圖所示:

——————————————————————————————

第三個操作對應的功能:

修改學生信息首先輸入學號或者姓名,找到這個學生。然后打印一個目錄,上面為要修改的信息選項,然后選擇要修改的內容做出修改

void fix(string num) {
?? ?int x = getUseSize();
?? ?int i = 0;
?? ?for ( i = 0;i < x;i++) {
?? ??? ?if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
?? ??? ??? ?_arr[i].print();
?? ??? ??? ?do
?? ??? ??? ?{
?? ??? ??? ??? ?menu();
?? ??? ??? ??? ?int choice;
?? ??? ??? ??? ?cin >> choice;
?? ??? ??? ??? ?switch (choice) {
?? ??? ??? ??? ?case 1:
?? ??? ??? ??? ??? ?cout << "請輸入修改后的名字:" << endl;
?? ??? ??? ??? ??? ?_arr[i].fixname(Cin("a"));
?? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 2:
?? ??? ??? ??? ??? ?cout << "請輸入修改后的學號:" << endl;
?? ??? ??? ??? ??? ?_arr[i].fixnum(Cin("a"));
?? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 3:
?? ??? ??? ??? ??? ?cout << "請輸入修改后的C語言成績:" << endl;
?? ??? ??? ??? ??? ?_arr[i].fixC(Cin(1.1));
?? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 4:
?? ??? ??? ??? ??? ?cout << "請輸入修改后的高數成績:" << endl;
?? ??? ??? ??? ??? ?_arr[i].fixM(Cin(1.1));
?? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 5:
?? ??? ??? ??? ??? ?cout << "請輸入修改后的英語成績:" << endl;
?? ??? ??? ??? ??? ?_arr[i].fixE(Cin(1.1));
?? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case 0:
?? ??? ??? ??? ??? ?cout << "完成修改" << endl;
?? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ?default:
?? ??? ??? ??? ??? ?cout << "輸入錯誤,重新輸入:" << endl;
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}

?? ??? ??? ?} while (1);
?? ??? ?}

?? ?}
?? ?if (i == x) {
?? ??? ?cout << "查無此人! 修改失敗!!!" << endl;
?? ??? ?return;
?? ?}
}

void menu() {
?? ?cout << "1,修改姓名" << endl;
?? ?cout << "2,修改學號" << endl;
?? ?cout << "3,修改C語言成績" << endl;
?? ?cout << "4,修改高數成績" << endl;
?? ?cout << "5,修改英語成績" << endl;
?? ?cout << "0,完成修改" << endl;
}
string Cin(string) {
?? ?string s;
?? ?cin >> s;
?? ?return s;
}
double Cin(double) {
?? ?double s;
?? ?cin >> s;
?? ?return s;
}

——————————————————————————————————————

void fixname(string s) {
?? ?_name = s;
}
void fixnum(string s) {
?? ?_stuNum = s;
}
void fixC(double x) {
?? ?_gradeC = x;
}
void fixM(double x) {
?? ?_gradeM = x;
}
void fixE(double x) {
?? ?_gradeE = x;
}

void print() {
?? ?cout << "姓名: " << _name << " ?學號:" << _stuNum << " ?C語言成績:" << _gradeC << " ?高數成績"
?? ??? ?<< _gradeM << " ?英語成績:" << _gradeE << endl;
}

效果如下:

————————————————————————————————————

第四個操作對應的功能:

顯示所以信息,只需要for循環班級指向的空間,將所有學生打印出來即可

void Print(StudentClass& studentClass) {
?? ?studentClass.print();

}

————————————————

班級的成員函數:

void print() {
?? ?int x = getUseSize();
?? ?for (int i = 0;i < x;i++) {
?? ??? ?_arr[i].print();
?? ?}
}

實現效果:

第五個操作對應的功能:

查詢學生信息,for循化找到該學生然后打印這個學生的信息

void Search(StudentClass& studentClass) {
?? ?cout << "請輸入學生的學號/姓名:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?studentClass.grade(stuNum);

}

————————————————————————————

班級成員函數:

void grade(string num) {
?? ?int x = getUseSize();
?? ?int i = 0;
?? ?for (i = 0;i < x;i++) {
?? ??? ?if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
?? ??? ??? ?_arr[i].getgrade();
?? ??? ??? ?return;
?? ??? ?}
?? ?}
?? ?if (i == x) {
?? ??? ?cout << "查無此人!" << endl;
?? ??? ?return;
?? ?}
}

——————————————————————————————————

學生成員函數:

void getgrade() {
?? ?cout << "姓名:" << _name << endl;
?? ?cout << endl;
?? ?cout << " C語言成績:" << _gradeC << " ?高數成績" << _gradeM << " ?英語成績:" << _gradeE << " ?平均成績:" << everage() << endl;
}

效果如下:

第六個操作對應的功能:

排序,實例化一個臨時班級對象,將原來的班級拷貝到這個臨時對象上面,對臨時對象進行排序(冒泡排序),然后依次打印

StudentClass(StudentClass& stuclass) {
?? ?
?? ??? ?_arr = (Student*)malloc(sizeof(Student) * stuclass._capacity);
?? ??? ?if (NULL == _arr) {
?? ??? ??? ?perror("申請空間失敗");
?? ??? ??? ?return;
?? ??? ?}
?? ??? ?memcpy(_arr, stuclass._arr, sizeof(Student) * stuclass._useSize);
?? ??? ?_useSize = stuclass._useSize;
?? ??? ?_capacity = stuclass._capacity;
?? ?
}

-------------------------------------------------——————————————

void Order(StudentClass& studentClass) {
?? ?StudentClass stuclass = studentClass;
?? ?studentClass.order(stuclass);
?? ?stuclass.print1();
}

————————————————————————————————

班級成員變量:

void swap(Student& p1, Student& p2) {
?? ?Student tmp = p2;
?? ?p2 = p1;
?? ?p1 = tmp;
}

void order(StudentClass& stuclass) {
?? ?int x = getUseSize();
?? ?for (int i = 0;i < x;i++) {
?? ??? ?for (size_t j = 0; j < x-i-1; j++)
?? ??? ?{
?? ??? ??? ?if (stuclass._arr[j].everage() < stuclass._arr[j+1].everage()) {
?? ??? ??? ??? ?swap(stuclass._arr[j], stuclass._arr[j + 1]);
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ?}

}

——————————————————————————————

學生成員變量:

void getordergrade() {
?? ?cout << "姓名: " << _name << " ?學號:" << _stuNum << " ?C語言成績:" << _gradeC << " ?高數成績"
?? ??? ?<< _gradeM << " ?英語成績:" << _gradeE << " ?平均成績:" << everage()<< endl;
?? ?
}

效果:

全部代碼:

#include<iostream>
#include<string>
using namespace std;


class Student {
private:
?? ?string _name;
?? ?string _stuNum;
?? ?double _gradeC;
?? ?double _gradeM;
?? ?double _gradeE;
public:

?? ?Student(string name = "", string stuNum = "", double gradeC = 0, double gradeM = 0, double gradeE = 0)
?? ??? ?:_name(name)
?? ??? ?, _stuNum(stuNum)
?? ??? ?, _gradeC(gradeC)
?? ??? ?, _gradeM(gradeM)
?? ??? ?, _gradeE(gradeE)
?? ?{}
?? ?void print() {
?? ??? ?cout << "姓名: " << _name << " ?學號:" << _stuNum << " ?C語言成績:" << _gradeC << " ?高數成績"
?? ??? ??? ?<< _gradeM << " ?英語成績:" << _gradeE << endl;
?? ?}
?? ?string getStuNum() {
?? ??? ?return _stuNum;
?? ?}
?? ?string getStuName() {
?? ??? ?return _name;
?? ?}
?? ?void getgrade() {
?? ??? ?cout << "姓名:" << _name << endl;
?? ??? ?cout << endl;
?? ??? ?cout << " C語言成績:" << _gradeC << " ?高數成績" << _gradeM << " ?英語成績:" << _gradeE << " ?平均成績:" << everage() << endl;
?? ?}
?? ?void getordergrade() {
?? ??? ?cout << "姓名: " << _name << " ?學號:" << _stuNum << " ?C語言成績:" << _gradeC << " ?高數成績"
?? ??? ??? ?<< _gradeM << " ?英語成績:" << _gradeE << " ?平均成績:" << everage()<< endl;
?? ??? ?
?? ?}
?? ?double everage() {
?? ??? ?return (_gradeC + _gradeM + _gradeE) / 3;
?? ?}
?? ?void fixname(string s) {
?? ??? ?_name = s;
?? ?}
?? ?void fixnum(string s) {
?? ??? ?_stuNum = s;
?? ?}
?? ?void fixC(double x) {
?? ??? ?_gradeC = x;
?? ?}
?? ?void fixM(double x) {
?? ??? ?_gradeM = x;
?? ?}
?? ?void fixE(double x) {
?? ??? ?_gradeE = x;
?? ?}
};


class StudentClass {
private:
?? ?Student* _arr;
?? ?int _useSize;
?? ?int _capacity;
public:
?? ?StudentClass(StudentClass& stuclass) {
?? ??? ?
?? ??? ??? ?_arr = (Student*)malloc(sizeof(Student) * stuclass._capacity);
?? ??? ??? ?if (NULL == _arr) {
?? ??? ??? ??? ?perror("申請空間失敗");
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ??? ?memcpy(_arr, stuclass._arr, sizeof(Student) * stuclass._useSize);
?? ??? ??? ?_useSize = stuclass._useSize;
?? ??? ??? ?_capacity = stuclass._capacity;
?? ??? ?
?? ?}
?? ?StudentClass(int capacity = 4) {
?? ??? ?
?? ??? ?_arr = new Student[capacity];
?? ??? ?_useSize = 0;
?? ??? ?_capacity = capacity;
?? ??? ?

?? ?}
?? ?void putin(Student s) {
?? ??? ?if (_useSize == _capacity) {

?? ??? ??? ?_capacity = _capacity == 0 ? _capacity = 4 : _capacity * 2;?
?? ??? ??? ?Student* temp = new Student[_capacity];?
?? ??? ??? ?for (int i = 0; i < _useSize; i++) {
?? ??? ??? ??? ?temp[i] = _arr[i];?
?? ??? ??? ?}
?? ??? ??? ?delete[]_arr;?
?? ??? ??? ?_arr = temp;?
?? ??? ?}
?? ??? ?_arr[_useSize] = s;
?? ??? ?_useSize++;
?? ?}

?? ?void del(string num) {
?? ??? ?int x = getUseSize();
?? ??? ?int i;
?? ??? ?for (i = 0;i < x;i++) {
?? ??? ??? ?if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if (i==x) {
?? ??? ??? ?cout << "查無此人! 刪除失敗!!!" << endl;
?? ??? ??? ?return;
?? ??? ?}else{
?? ??? ??? ?for (;i < _useSize - 1;i++) {
?? ??? ??? ??? ?_arr[i] = _arr[i + 1];
?? ??? ??? ?}
?? ??? ??? ?_useSize--;
?? ??? ??? ?cout << " 刪除成功" << endl;
?? ??? ??? ?return;
?? ??? ?}
?? ?}
?? ?int getUseSize() {
?? ??? ?return _useSize;
?? ?}

?? ?void print() {
?? ??? ?int x = getUseSize();
?? ??? ?for (int i = 0;i < x;i++) {
?? ??? ??? ?_arr[i].print();
?? ??? ?}
?? ?}
?? ?void print1() {
?? ??? ?int x = getUseSize();
?? ??? ?for (int i = 0;i < x;i++) {
?? ??? ??? ?_arr[i].getordergrade();
?? ??? ?}
?? ?}
?? ?void grade(string num) {
?? ??? ?int x = getUseSize();
?? ??? ?int i = 0;
?? ??? ?for (i = 0;i < x;i++) {
?? ??? ??? ?if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
?? ??? ??? ??? ?_arr[i].getgrade();
?? ??? ??? ??? ?return;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if (i == x) {
?? ??? ??? ?cout << "查無此人!" << endl;
?? ??? ??? ?return;
?? ??? ?}
?? ?}
?? ?void menu() {
?? ??? ?cout << "1,修改姓名" << endl;
?? ??? ?cout << "2,修改學號" << endl;
?? ??? ?cout << "3,修改C語言成績" << endl;
?? ??? ?cout << "4,修改高數成績" << endl;
?? ??? ?cout << "5,修改英語成績" << endl;
?? ??? ?cout << "0,完成修改" << endl;
?? ?}
?? ?string Cin(string) {
?? ??? ?string s;
?? ??? ?cin >> s;
?? ??? ?return s;
?? ?}
?? ?double Cin(double) {
?? ??? ?double s;
?? ??? ?cin >> s;
?? ??? ?return s;
?? ?}
?? ?void fix(string num) {
?? ??? ?int x = getUseSize();
?? ??? ?int i = 0;
?? ??? ?for ( i = 0;i < x;i++) {
?? ??? ??? ?if (_arr[i].getStuNum() == num || _arr[i].getStuName() == num) {
?? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ?do
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?menu();
?? ??? ??? ??? ??? ?int choice;
?? ??? ??? ??? ??? ?cin >> choice;
?? ??? ??? ??? ??? ?switch (choice) {
?? ??? ??? ??? ??? ?case 1:
?? ??? ??? ??? ??? ??? ?cout << "請輸入修改后的名字:" << endl;
?? ??? ??? ??? ??? ??? ?_arr[i].fixname(Cin("a"));
?? ??? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case 2:
?? ??? ??? ??? ??? ??? ?cout << "請輸入修改后的學號:" << endl;
?? ??? ??? ??? ??? ??? ?_arr[i].fixnum(Cin("a"));
?? ??? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case 3:
?? ??? ??? ??? ??? ??? ?cout << "請輸入修改后的C語言成績:" << endl;
?? ??? ??? ??? ??? ??? ?_arr[i].fixC(Cin(1.1));
?? ??? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case 4:
?? ??? ??? ??? ??? ??? ?cout << "請輸入修改后的高數成績:" << endl;
?? ??? ??? ??? ??? ??? ?_arr[i].fixM(Cin(1.1));
?? ??? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case 5:
?? ??? ??? ??? ??? ??? ?cout << "請輸入修改后的英語成績:" << endl;
?? ??? ??? ??? ??? ??? ?_arr[i].fixE(Cin(1.1));
?? ??? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case 0:
?? ??? ??? ??? ??? ??? ?cout << "完成修改" << endl;
?? ??? ??? ??? ??? ??? ?_arr[i].print();
?? ??? ??? ??? ??? ??? ?return;
?? ??? ??? ??? ??? ?default:
?? ??? ??? ??? ??? ??? ?cout << "輸入錯誤,重新輸入:" << endl;
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?}

?? ??? ??? ??? ?} while (1);
?? ??? ??? ?}

?? ??? ?}
?? ??? ?if (i == x) {
?? ??? ??? ?cout << "查無此人! 修改失敗!!!" << endl;
?? ??? ??? ?return;
?? ??? ?}
?? ?}

?? ?void swap(Student& p1, Student& p2) {
?? ??? ?Student tmp = p2;
?? ??? ?p2 = p1;
?? ??? ?p1 = tmp;
?? ?}

?? ?void order(StudentClass& stuclass) {
?? ??? ?int x = getUseSize();
?? ??? ?for (int i = 0;i < x;i++) {
?? ??? ??? ?for (size_t j = 0; j < x-i-1; j++)
?? ??? ??? ?{
?? ??? ??? ??? ?if (stuclass._arr[j].everage() < stuclass._arr[j+1].everage()) {
?? ??? ??? ??? ??? ?swap(stuclass._arr[j], stuclass._arr[j + 1]);
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}

?? ?}
};


void menu() {
?? ?cout << "1,學生信息錄入" << endl;
?? ?cout << "2,刪除學生信息" << endl;
?? ?cout << "3,修改學生信息" << endl;
?? ?cout << "4,顯示所有學生信息" << endl;
?? ?cout << "5,查詢學生成績" << endl;
?? ?cout << "6,成績排名" << endl;
?? ?cout << "0,退出系統" << endl;
}

void GetIn(StudentClass& studentClass) {
?? ?cout << "請輸入學生信息->" << endl;
?? ?cout << "姓名:" << endl;
?? ?string name;
?? ?cin >> name;
?? ?cout << "學號:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?cout << "C語言成績:" << endl;
?? ?double a;
?? ?cin >> a;
?? ?cout << "高數成績:" << endl;
?? ?double b;
?? ?cin >> b;
?? ?cout << "英語成績:" << endl;
?? ?double c;
?? ?cin >> c;
?? ?Student stu(name, stuNum, a, b, c);
?? ?studentClass.putin(stu);

}
void Delete(StudentClass& studentClass) {
?? ?cout << "請輸入學生的學號/姓名:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?studentClass.del(stuNum);
}

void Amend(StudentClass& studentClass) {
?? ?cout << "請輸入學生的學號/姓名:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?studentClass.fix(stuNum);
}

void Print(StudentClass& studentClass) {
?? ?studentClass.print();

}

void Search(StudentClass& studentClass) {
?? ?cout << "請輸入學生的學號/姓名:" << endl;
?? ?string stuNum;
?? ?cin >> stuNum;
?? ?studentClass.grade(stuNum);

}

void Order(StudentClass& studentClass) {
?? ?StudentClass stuclass = studentClass;
?? ?studentClass.order(stuclass);
?? ?stuclass.print1();
}

int main() {

?? ?StudentClass studentClass(1);
?? ?do
?? ?{
?? ??? ?menu();
?? ??? ?cout << "請輸入操作選項:" << endl;
?? ??? ?int choice;
?? ??? ?cin >> choice;
?? ??? ?switch (choice) {
?? ??? ?case 1://學生信息錄入
?? ??? ?{
?? ??? ??? ?GetIn(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ??? ?
?? ??? ?case 2://刪除學生信息
?? ??? ?{
?? ??? ??? ?Delete(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ??? ?
?? ??? ?case 3://修改學生信息
?? ??? ?{
?? ??? ??? ?Amend(studentClass);
?? ??? ??? ??? ?break;
?? ??? ?}
?? ??? ??? ?
?? ??? ?case 4://顯示所有學生信息
?? ??? ?{
?? ??? ??? ?Print(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ??? ?
?? ??? ?case 5://查詢學生成績
?? ??? ?{
?? ??? ??? ?Search(studentClass);
?? ??? ??? ?break;
?? ??? ?}

?? ??? ?case 6://成績排名
?? ??? ?{ ? Order(studentClass);
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?case 0:
?? ??? ??? ?cout << " 退出系統" << endl;
?? ??? ??? ?exit(0);
?? ??? ?default:
?? ??? ??? ?cout << "輸入錯誤,重新輸入:" << endl;
?? ??? ??? ?break;
?? ??? ?}
?? ?} while (1);

?? ?return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21191.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

支持AMD GPU的llm.c

anthonix/llm.c: LLM training in simple, raw C/HIP for AMD GPUs (github.com) llm.c for AMD devices This is a fork of Andrej Karpathys llm.c with support for AMD devices. 性能 在單個7900 XTX顯卡上使用默認設置&#xff0c;目前的訓練步驟耗時約為79毫秒&#x…

Docker的安裝、啟動和配置鏡像加速

前言&#xff1a; Docker 分為 CE 和 EE 兩大版本。CE 即社區版&#xff08;免費&#xff0c;支持周期 7 個月&#xff09;&#xff0c;EE 即企業版&#xff0c;強調安全&#xff0c;付費使用&#xff0c;支持周期 24 個月。 而企業部署一般都是采用Linux操作系統&#xff0c;而…

【軟件設計師】2022年上半年真題解析

??馮諾依曼計算機體系結構的基本特點是&#xff1a; A. 程序指令和數據都采用二進制表示 - 這是正確的&#xff0c;因為馮諾依曼架構下的計算機使用二進制形式來表示和處理所有信息&#xff0c;包括指令和數據。 B. 程序指令總是存儲在主存中&#xff0c;而數據則存儲在高速…

Java基礎語法詳解——入門學習教程

Java 基礎 目錄 一、數據類型 基本類型包裝類型緩存池 二、String 概覽不可變的好處String, StringBuffer and StringBuilder String Poolnew String(“abc”) 三、運算 參數傳遞float 與 double隱式類型轉換switch 四、關鍵字 finalstatic 五、Object 通用方法 概覽equals()ha…

深入解析 MongoDB Map-Reduce:強大數據聚合與分析的利器

Map-Reduce 是一種用于處理和生成大數據集的方法&#xff0c;MongoDB 支持 Map-Reduce 操作以執行復雜的數據聚合任務。Map-Reduce 操作由兩個階段組成&#xff1a;Map 階段和 Reduce 階段。 基本語法 在 MongoDB 中&#xff0c;可以使用 db.collection.mapReduce() 方法執行…

IsoBench:多模態基礎模型性能的基準測試與優化

隨著多模態基礎模型的快速發展&#xff0c;如何準確評估這些模型在不同輸入模態下的性能成為了一個重要課題。本文提出了IsoBench&#xff0c;一個基準數據集&#xff0c;旨在通過提供多種同構&#xff08;isomorphic&#xff09;表示形式的問題&#xff0c;來測試和評估多模態…

算法(十三)回溯算法---N皇后問題

文章目錄 算法概念經典例子 - N皇后問題什么是N皇后問題&#xff1f;實現思路 算法概念 回溯算法是類似枚舉的深度優先搜索嘗試過程&#xff0c;主要是再搜索嘗試中尋找問題的解&#xff0c;當發生不滿足求解條件時&#xff0c;就會”回溯“返回&#xff08;也就是遞歸返回&am…

enum4linux一鍵查詢SMB信息(KALI工具系列十六)

目錄 1、KALI LINUX簡介 2、enum4linux工具簡介 3、在KALI中使用enum4linux 3.1 目標主機IP&#xff08;win&#xff09; ?編輯 3.2 KALI的IP 4、操作示例 4.1 運行工具 4.2 列出用戶名 4.3 提取用戶名 4.4 使用自定義RID范圍 4.5 列出組 4.6 列出共享文件夾 4.7…

【筆記小記】掌握市場脈動:全營銷解決方案的力量

前面雖然說了這個模型&#xff0c;而且是分章說的&#xff0c;那么在此以筆記小記的形式再說一下&#xff0c;企業面臨的挑戰與日俱增&#xff0c;消費者需求的多樣化、技術的不斷進步、全球化的深入以及社會責任的日益重要&#xff0c;這些因素共同塑造了市場的現狀和未來&…

網絡監聽技術

網絡監聽技術 網絡監聽概述網絡監聽環境 流量劫持網絡環境共享式網絡監聽原理交換式網絡監聽交換機的工作方式交換網絡監聽&#xff1a;交換機集線器交換網絡監聽&#xff1a;端口鏡像交換網絡監聽&#xff1a;MAC洪泛交換網絡監聽&#xff1a;MAC洪泛交換網絡監聽&#xff1a;…

【Unix】消息類的格式與使用

本文給出一個MacOS操作系統中的消息類的使用過程示例&#xff08;結合gencat命令&#xff0c;<nl_types.h>頭文件以及catopen,catgets,catclose3個函數&#xff09; 首先根據對應的操作系統&#xff0c;查看gencat命令 man gencat 可以詳細看到其中對于輸入文件&#x…

Typescript高級: 深入理解extends keyof語法

概述 在TypeScript中&#xff0c;extends關鍵字是類型系統中一個極其重要的組成部分它不僅用于類的繼承&#xff0c;也是類型兼容性檢查和泛型約束的關鍵機制特別是當它與keyof關鍵字結合&#xff0c;形成K extends keyof T的結構時它為類型系統帶來了強大的靈活性和表達能力&…

動態SQL where, choose語句

where語句就一個<where>標簽, 很簡單, 不再過多贅述 接下來我們來看 choose語句的使用 其實choose語句就像java里的swith語句 , 如果語句前面的生效 , 后面的就不會生效了 可以定義查詢的優先級

讀人工智能時代與人類未來筆記19_讀后總結與感想兼導讀

1. 基本信息 人工智能時代與人類未來 (美)亨利基辛格,(美)埃里克施密特,(美)丹尼爾胡滕洛赫爾 著 中信出版社,2023年6月出版 1.1. 讀薄率 書籍總字數145千字&#xff0c;筆記總字數39934字。 讀薄率39934145000≈27.5% 1.2. 讀厚方向 千腦智能 腦機穿越 未來呼嘯而來 …

【工具】 MyBatis Plus的SQL攔截器自動翻譯替換“?“符號為真實數值

【工具】 MyBatis Plus的SQL攔截器自動翻譯替換"?"符號為真實數值 使用MyBatis的配置如下所示&#xff1a; mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl調用接口&#xff0c;sql日志打印如下&#xff1a; 參數和sql語句不…

Spring Boot配置MySQL數據庫連接數

1.如何在Spring Boot中配置MySQL數據庫的連接數 1.1主要配置 在Spring Boot中配置MySQL數據庫連接數通常涉及到兩個主要的配置&#xff1a; &#xff08;1&#xff09;數據源配置&#xff1a;這通常是在application.properties或application.yml文件中完成的&#xff0c;用于…

頂底背離的終極猜想和運用

這幾天圈內都在傳底蓓離什么的。作為嚴肅的量化自媒體&#xff0c;我們就不跟著吃這波瓜了。不過&#xff0c;我一直很關注技術指標的頂背離和底背離&#xff0c;一直在追問它的成因如何&#xff0c;以及如何預測。 底蓓離把我目光再次吸引到這個領域來&#xff0c;于是突然有…

Java如何實現二維數組行列轉換

二維數組行列轉換就是行號和列號互換 public class Erweishuzubianli {public static void main(String[] args) {int array[][]new int[][]{{8,75,23},{21,55,34},{15,23,20}};int temp;for(int i0;i<array.length;i){for(int j0;j<array[i].length;j){temparray[i][j]…

LitCTF 2024(公開賽道)——WP

目錄 Misc 涐貪戀和伱、甾―⑺d毎兮毎秒 你說得對&#xff0c;但__ 盯幀珍珠 Everywhere We Go 關鍵&#xff0c;太關鍵了! 女裝照流量 原鐵&#xff0c;啟動&#xff01; 舔到最后應有盡有 The love Web exx 一個....池子&#xff1f; SAS - Serializing Authent…

MySQL—函數—日期函數(基礎)

一、引言 接下來討論和學習關于函數的第三個方面——日期函數。 常見的MySQL當中的日期函數。 注意&#xff1a; 1、CURDATE()&#xff1a;cur&#xff1a;current 當前的&#xff0c;返回的是當前日期。 2、CURTIME()&#xff1a;當前時間。 3、NOW&#xff1a;當前的日期和…