C++ 实现学生信息管理系统


cpp 实现学生信息管理系统

此笔记线更新地址

cpp 笔记和代码库

考试题目:

A:学生信息存储(40 分)

  1. 业务描述:

    • 某学校的学生信息包括:学号、姓名、性别、学院。

    • 其中学号是整数;性别用单个大写字母表示,F 表示女性,M 表示男性;姓名是字符串类型。

    • 学生学号固定长度 6 位,前两位表示学院,例如计算机学院编码 11,则首两位编码是 11;

      中间两位表示入学年份,例如学生是 2019 年入学,则中间编码为 19:最后两位是自动按序编号,例如学生是 2019 年入学计算机学院的第 56 号学生,则学号为 111956。

    • 假设学校有三个学院:

      • 计算机学院编码 11,
      • 管理学院编码 22,
      • 土木学院编码 33。
  2. 程序开发要求:

    1. 要求使用 cpp 语言与面对对象设计思想实现开发。
    2. 定义一个学生类,包含上述学生信息。
    3. 在学生类中,定义输出函数 Print ,输出一个学生对象的信息。
    4. 定义学号生成函数 GenID,根据学生所属的学院、入学年份、学院顺序号,生成学生的学号。
    5. 学生类中,可以根据需要增加成员函数,但不能增加数据成员。
    6. 在主函数中,创建三个对象数组,对应三个学院,分别存储三个学院的学生对象。
  3. 输入:

    1. 第一行输入 t,表示有 t 个学生。
    2. 接着输入 t 行,每行输入一个学生信息共五个参数,包括姓名、性别、学院、入学年份和学院顺序号,数据之间用空格隔开。其中学院用缩写表示,CS 表示计算机学院,MA 表示管理学院,BU 表示土木学院。
    3. 每输入一个学生信息,就调用函数 GenID 生成学生学号,并创建一个新的学生对象。然后根据学院缩写,把新学生插入到对应对象数组的末尾。
    4. 数据输入的具体格式参考输入样例。

B:学生信息操作(50 分)

  1. 业务描述:

    • 在前一题的基础上:加入增加、删除、查询的信息操作
    • 某学核的学生信息包括:学号、姓名、性别、学院。其中学号是整数;性别用单个大写字母表示,F 示女性,M 示男性;姓名是字符串类型。假设学校有三个学院:计算机字院编码 11,管理学院编码 22,土木学院编码 33。
    • 编写一个程序完成学生信息的插入、存储、输出、增加、删除、查询等功能
  2. 程序开发要求:

    1. 要求使用 cpp 语言与面向对象设计思想实现开发。
    2. 定义一个学生类,不仅包含上述学生信息,还要增加静态数据成员 total,表示学生总数。要求静态数据成员必须是 private。
    3. 在学生中定义输出函数 Print,输出一个学生对象的信息。
    4. 学生类中可以根据需要增加成员函数,但不能增加据成员
  3. 在主函数中,完成以下要求:

    1. 创建三个对象数组,对应三个学院,分别存储三个学院的学生对象

    2. 定义插入函数 Ins,先创建一个新学生对象,根据学院缩写把新学生插入到对应数组的指定位置;插入前,指定位置上的原学生对象以及后面的学生对象都要往后移动一位。

      提示:无需考虑插入位置非法的问题;题目的插入数组位置从 1 开始计算;每增加一个新学生,学生总数加 1。

    3. 定义删除函数 Del,根据提供的学号先找到学生对象,删除对应数组的对应学生对象;刪除后,刪除位置后面的学生对象都要往前移动一位。

      提示:每删除一个学生,学生总数减 1。

    4. 定义查询函数 Query,根据提供的学号,查询学生是否存在,并调用输出的数 Print 信息作输出。

    5. 学生总数的所有操作都必须使用学生类的静态数据 total 来进行,不能在类外使用其他函数或变量进行统计。

C:学生学号排序(10 分)

  1. 业务描述:
    • 现在需要对学号进行排序。设有一个数组存储了所有学院所有学生的对象,采用简单选择排序法,实现所有学生对象学号从小到大排序。
    • 简单选择排序算法说明
      • 假设 n 为待排序记录数,每一趟(例如第 i 趟,i=1,2,...,n-1)有 n-i+1 个待排序记录,
      • 在第 i 趟中,通过 n-i 次比较,选出关键字最小的记录,与第 i 个记录交换。
  2. 程序开发要求:
    1. 必须使用简单选择排序实现学生排序。
    2. 不允许使用第三方对象或函数实现排序,学生必须写出完整的排序算法。
    3. 无需考虑学号相同的情况。

功能实现:

A:输入文字模板

张三 M CS 2019 11

杨六 M CS 2018 11

胡七 M CS 2017 11

李四 M MA 2020 22

王五 F BU 2019 33

B:功能设计

    cout << "1:输入学生信息\n" << endl;
    cout << "2:打印学生信息\n" << endl;
    cout << "3:插入学生信息\n" << endl;
    cout << "4:查找学生信息\n" << endl;
    cout << "5:修改学生信息\n" << endl;
    cout << "6:删除学生信息\n" << endl;
    cout << "7:读取学生信息\n" << endl;
    cout << "8:保存学生信息\n" << endl;
    cout << "9:按学号从小到大排序\n" << endl;
    cout << "0:退出\n" << endl;
    cout << "请输入对应的序号:" << endl;

C:实现代码

普通数组版:

  • 要求静态数据成员必须是 private。
  • 不能在类外使用其他函数或变量进行统计。
  • 不能增加数据成员。
Student.h
#pragma once
using namespace std;

class Student
{
private:
    static int total;
public:
    int studNum = 0;
    char name[20] = "0";
    char sex = '0';
    char college[3] = "0";
    int year = 0;
    int colNum = 0;
    Student() {};
    Student(char name[20], char sex, char college[3], int year, int colNum);
    void GenID(int count);
    void print();
    int Total();
    void setTotal(int total);
};
Student.cpp
#include "Student.h"
#include <iostream>
using namespace std;

int Student::total = 0;
Student::Student(char name[20], char sex, char college[3], int year, int colNum) {
    strcpy_s(this->name, name);
    strcpy_s(this->college, college);
    this->sex = sex;
    this->year = year;
    this->colNum = colNum;
    this->total++;
}

void Student::GenID(int count) {
    studNum = colNum * 10000 + year % 100 * 100 + count;
}
void Student::print() {
    cout << "学号:" << studNum << "  姓名:" << name << "  性别:" << sex << "  学院:" << college << "  入学年份:" << year << "  学院顺序号:" << colNum << endl;
}

int Student::Total() {
    return total;
}

void Student::setTotal(int total) {
    this->total = total;
}
StudIMS.cpp
#include "Student.h"
#include <iostream>
#include <fstream>
#define M 30

using namespace std;

void display() {
    cout << "1:输入学生信息\n" << endl;
    cout << "2:打印学生信息\n" << endl;
    cout << "3:插入学生信息\n" << endl;
    cout << "4:查找学生信息\n" << endl;
    cout << "5:统计学生信息\n" << endl;
    cout << "6:删除学生信息\n" << endl;
    cout << "7:读取学生信息\n" << endl;
    cout << "8:保存学生信息\n" << endl;
    cout << "9:按学号从小到大排序\n" << endl;
    cout << "0:退出\n" << endl;
    cout << "请输入对应的序号:" << endl;
};

int main() {
    Student CSarr[M]; // 学生数组
    Student MAarr[M];
    Student BUarr[M];
    int CScount = 0; // 学号顺序号:只增不减
    int MAcount = 0;
    int BUcount = 0;
    int CSi = 0; // 学生数组下标位置
    int MAi = 0;
    int BUi = 0;
    while (true) {
        display();
        int cho;
        cin >> cho;
        switch (cho) {
        case 1: { // 输入学生信息
            system("cls");
            int t = 0;
            cout << "输入录入人数:" << endl;
            cin >> t;
            cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
            for (int i = 0; i < t; i++) {
                char name[20];
                char college[3];
                char sex;
                int year;
                int colNum;
                cin >> name >> sex >> college >> year >> colNum;
                Student stud(name, sex, college, year, colNum);
                switch (colNum) {
                case 11: {
                    stud.GenID(++CScount);
                    CSarr[CSi++] = stud;
                    break;
                };
                case 22: {
                    stud.GenID(++MAcount);
                    MAarr[MAi++] = stud;
                    break;
                };
                case 33: {
                    stud.GenID(++BUcount);
                    BUarr[BUi++] = stud;
                    break;
                };
                default:
                    break;
                }
            }
            system("cls");
            break;
        }
        case 2: { // 打印学生信息
            system("cls");
            for (int i = 0; i < M; i++) {
                if (CSarr[i].studNum > 0) {
                    CSarr[i].print();
                }
                else {
                    //break; // 打印插入位置非法的学生
                }
            }
            for (int i = 0; i < M; i++) {
                if (MAarr[i].studNum > 0) {
                    MAarr[i].print();
                }
                else {
                    //break;
                }
            }
            for (int i = 0; i < M; i++) {
                if (BUarr[i].studNum > 0) {
                    BUarr[i].print();
                }
                else {
                    //break;
                }
            }
            system("pause");
            system("cls");
            break;
        }
        case 3: { // 插入学生信息
            system("cls");
            cout << "输入插入位置:" << endl;
            int num;
            cin >> num;
            num = num - 1;
            cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
            char name[20];
            char college[3];
            char sex;
            int year;
            int colNum;
            cin >> name >> sex >> college >> year >> colNum;
            Student stud(name, sex, college, year, colNum);
            Student studTmp;
            switch (colNum) {
            case 11: {
                stud.GenID(++CScount);
                for (int i = num; i < M; i++) { // 插入位置超过当前输入队列长度,再次输入时会被覆盖;M改成CSi可解决
                    studTmp = CSarr[i];
                    CSarr[i] = stud;
                    stud = studTmp;
                }
                CSi++; // 数组下标增加
                break;
            };
            case 22: {
                stud.GenID(++MAcount);
                for (int i = num; i < M; i++) {
                    studTmp = MAarr[i];
                    MAarr[i] = stud;
                    stud = studTmp;
                }
                MAi++;
                break;
            };
            case 33: {
                stud.GenID(++BUcount);
                for (int i = num; i < M; i++) {
                    studTmp = BUarr[i];
                    BUarr[i] = stud;
                    stud = studTmp;
                }
                BUi++;
                break;
            };
            default:
                break;
            }
            system("pause");
            system("cls");
            break;
        }
        case 4: { // 查找学生信息
            system("cls");
            cout << "输入查询学号:" << endl;
            int num;
            cin >> num;
            int colNum = num / 10000;
            switch (colNum) {
            case 11: {
                for (int i = 0; i < M; i++) {
                    if (CSarr[i].studNum == num) {
                        CSarr[i].print();
                        break;
                    }
                }
            }
            case 22: {
                for (int i = 0; i < M; i++) {
                    if (MAarr[i].studNum == num) {
                        MAarr[i].print();
                        break;
                    }
                }
            }
            case 33: {
                for (int i = 0; i < M; i++) {
                    if (BUarr[i].studNum == num) {
                        BUarr[i].print();
                        break;
                    }
                }
            }
            }
            system("pause");
            system("cls");
            break;
        }
        case 5: { // 统计学生信息
            system("cls");
            Student stud;
            cout << "总人数:" << stud.Total() << endl;
            cout << "计算机学院人数:" << CSi << endl;
            cout << "管理学院人数:" << MAi << endl;
            cout << "土木学院人数:" << BUi << endl;
            system("pause");
            system("cls");
            break;
        }
        case 6: { // 删除学生信息
            system("cls");
            Student stud;
            cout << "输入删除的学号:" << endl;
            int num;
            cin >> num;
            int colNum = num / 10000;
            switch (colNum) {
            case 11: {
                for (int i = 0; i < M; i++) {
                    if (CSarr[i].studNum == num) {
                        for (int j = i; j < M - 1; j++) {
                            CSarr[j] = CSarr[j + 1];
                        }
                        CSi--;
                        stud.setTotal(stud.Total() - 1);
                        cout << "删除成功" << endl;
                        break;
                    }
                }
            }
            case 22: {
                for (int i = 0; i < M; i++) {
                    if (MAarr[i].studNum == num) {
                        for (int j = i; j < M - 1; j++) {
                            MAarr[j] = MAarr[j + 1];
                        }
                        MAi--;
                        stud.setTotal(stud.Total() - 1);
                        cout << "删除成功" << endl;
                        break;
                    }
                }
            }
            case 33: {
                for (int i = 0; i < M; i++) {
                    if (BUarr[i].studNum == num) {
                        for (int j = i; j < M - 1; j++) {
                            BUarr[j] = BUarr[j + 1];
                        }
                        BUi--;
                        stud.setTotal(stud.Total() - 1);
                        cout << "删除成功" << endl;
                        break;
                    }
                }
            }
            default:
                break;
            }
            system("pause");
            system("cls");
            break;
        }
        case 7: { // 读取学生信息
            system("cls");
            Student stud;
            int i = 0;
            // CS
            ifstream fileCS("CS.dat", ios::in | ios::binary);
            while (fileCS.read((char*)&stud, sizeof(Student))) {
                stud.print();
                CSarr[i] = stud;
                i++;
            }
            CScount = stud.studNum % 100;// 读最后一个对象的学号,作为起始值;乱序插入后有bug
            CSi = i;// 初始化数组下标
            i = 0;
            fileCS.close();
            // MA
            ifstream fileMA("MA.dat", ios::in | ios::binary);
            while (fileMA.read((char*)&stud, sizeof(Student))) {
                stud.print();
                MAarr[i] = stud;
                i++;
            }
            MAcount = stud.studNum % 100;
            MAi = i;
            i = 0;
            fileMA.close();
            // BU
            ifstream fileBU("BU.dat", ios::in | ios::binary);
            while (fileBU.read((char*)&stud, sizeof(Student))) {
                stud.print();
                BUarr[i] = stud;
                i++;
            }
            BUcount = stud.studNum % 100;
            BUi = i;
            stud.setTotal(CScount + MAcount + BUcount);
            fileBU.close();
            cout << "读取成功!" << endl;
            system("pause");
            system("cls");
            break;
        }
        case 8: { // 保存
            system("cls");
            ofstream fileCS("CS.dat", ios::out | ios::binary);
            for (int i = 0; i < M; i++) {
                if (CSarr[i].studNum > 0) {
                    fileCS.write((char*)&CSarr[i], sizeof(Student));
                }
            }
            fileCS.close();
            ofstream fileMA("MA.dat", ios::out | ios::binary);
            for (int i = 0; i < M; i++) {
                if (MAarr[i].studNum > 0) {
                    fileMA.write((char*)&MAarr[i], sizeof(Student));
                }
            }
            fileMA.close();
            ofstream fileBU("BU.dat", ios::out | ios::binary);
            for (int i = 0; i < M; i++) {
                if (BUarr[i].studNum > 0) {
                    fileBU.write((char*)&BUarr[i], sizeof(Student));
                }
            }
            fileBU.close();
            cout << "保存成功!" << endl;
            system("pause");
            system("cls");
            break;
        }
        case 9: { // 按学号从小到大排序
            system("cls");
            Student studs[M * 3];
            int index = 0;
            for (int i = 0; i < M; i++) {
                if (CSarr[i].studNum > 0) {
                    studs[index] = CSarr[i];
                    index++;
                }
                if (MAarr[i].studNum > 0) {
                    studs[index] = MAarr[i];
                    index++;
                }
                if (BUarr[i].studNum > 0) {
                    studs[index] = BUarr[i];
                    index++;
                }
            }
            int less = 0;
            Student studTmp;
            Student studTmpSec;
            for (int i = 0; i < M * 3; i++) {
                if (studs[i].studNum > 0) {
                    for (int j = i + 1; j < M * 3; j++) {
                        if (studs[j].studNum > 0 && studs[i].studNum - studs[j].studNum > less) {
                            less = studs[i].studNum - studs[j].studNum;
                            index = j;
                        }
                    }
                    if (less) {
                        // 插入到i位置 然后后移
                        studTmp = studs[i];
                        studs[i] = studs[index];
                        for (int j = i + 1; j < M * 3; j++) {
                            studTmpSec = studs[j];
                            studs[j] = studTmp;
                            studTmp = studTmpSec;
                        }
                        // 删除 然后前移
                        for (int j = index + 1; j < M * 3 - 1; j++) {
                            studs[j] = studs[j + 1];
                        }
                        // studs[index].print();
                        less = 0;
                    }
                }
            }
            for (int i = 0; i < M * 3; i++) {
                if (studs[i].studNum > 0) {
                    studs[i].print();
                }
            }
            system("pause");
            system("cls");
            break;
        }
        case 0: { // 退出
            cout << "已退出" << endl;
            return 0;
        }
        default: {
            cout << "输入不正确!" << endl;
            system("pause");
            system("cls");
            break;
        }
        }
    }
    return 0;
}

STL vector 动态数组版:

  • 静态数据成员公有。
    • total 私有
  • 增加数据成员学号。
    • 未改进:静态数据不会存入对象二进制文件中,写入文件存储更方便复原。
  • 修改学生信息功能。
Student.h
#pragma once
using namespace std;

class Student
{
private:
    static int total;
public:
    static int csCount; // 学号,只增不减
    static int maCount;
    static int buCount;
    int studNum = 0;
    char name[20] = "1";
    char sex = 'F';
    char college[3] = "1";
    int year = 0;
    int colNum = 0;
    Student() {};
    Student(char name[20], char sex, char college[3], int year, int colNum);
    void GenID();
    void print();
    int Total();
    void setTotal(int total);
};
Student.cpp
#include "Student.h"
#include <iostream>
using namespace std;

int Student::total = 0;
int Student::csCount = 0;
int Student::maCount = 0;
int Student::buCount = 0;
Student::Student(char name[20], char sex, char college[3], int year, int colNum) {
    strcpy_s(this->name, name);
    strcpy_s(this->college, college);
    this->sex = sex;
    this->year = year;
    this->colNum = colNum;
    this->total++;
    switch (colNum) {
    case 11: {
        csCount++;
        break;
    };
    case 22: {
        maCount++;
        break;
    };
    case 33: {
        buCount++;
        break;
    };
    default:
        break;
    }
}

void Student::GenID() {
    int count = 0;
    switch (colNum) {
    case 11: {
        count = csCount;
        break;
    };
    case 22: {
        count = maCount;
        break;
    };
    case 33: {
        count = buCount;
        break;
    };
    default:
        break;
    }
    studNum = colNum * 10000 + year % 100 * 100 + count;
}
void Student::print() {
    cout << "学号:" << studNum << "  姓名:" << name << "  性别:" << sex << "  学院:" << college << "  入学年份:" << year << "  学院顺序号:" << colNum << endl;
}
int Student::Total() {
    return total;
}

void Student::setTotal(int total) {
    this->total = total;
}
myfunc.h
#pragma once

void input();
void display();
void printAll();
void Query();
void Del();
void Ins();
void modify();
void Sort();
void Save();
void Read();
stuInfoMS.cpp
#include <iostream>
#include <vector>
#include <fstream>
#include "Student.h"
#include "myfunc.h"

using namespace std;

vector<Student> CSarr;
vector<Student> MAarr;
vector<Student> BUarr;
int main() {
    while (true) {
        display();
        int cho;
        cin >> cho;
        switch (cho) {
        case 1: { // 输入学生信息
            input();
            system("cls");
            break;
        }
        case 2: { // 打印学生信息
            system("cls");
            printAll();
            system("pause");
            system("cls");
            break;
        }
        case 3: { // 插入学生信息
            Ins();
            system("cls");
            break;
        }
        case 4: { // 查找学生信息
            Query();
            system("pause");
            system("cls");
            break;
        }
        case 5: { // 修改学生信息
            modify();
            system("pause");
            system("cls");
            break;
        }
        case 6: { // 删除学生信息
            Del();
            system("cls");
            break;
        }
        case 7: { // 读取学生信息
            system("cls");
            Read();
            cout << "读取成功!" << endl;
            system("pause");
            system("cls");
            break;
        }
        case 8: { // 保存
            Save();
            cout << "保存成功!" << endl;
            system("pause");
            system("cls");
            break;
        }
        case 9: { // 按学号从小到大排序
            system("cls");
            Sort();
            system("pause");
            system("cls");
            break;
        }
        case 0: { // 退出
            cout << "已退出" << endl;
            return 0;
        }
        default: {
            cout << "输入不正确!" << endl;
            system("pause");
            system("cls");
            break;
        }
        }
    }
    return 0;
}

void display() {
    cout << "1:输入学生信息\n" << endl;
    cout << "2:打印学生信息\n" << endl;
    cout << "3:插入学生信息\n" << endl;
    cout << "4:查找学生信息\n" << endl;
    cout << "5:修改学生信息\n" << endl;
    cout << "6:删除学生信息\n" << endl;
    cout << "7:读取学生信息\n" << endl;
    cout << "8:保存学生信息\n" << endl;
    cout << "9:按学号从小到大排序\n" << endl;
    cout << "0:退出\n" << endl;
    cout << "请输入对应的序号:" << endl;
}
void input() {
    int t = 0;
    cout << "输入学生人数:";
    cin >> t;
    cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
    for (int i = 0; i < t; i++) {
        char name[20];
        char college[3];
        char sex;
        int year;
        int colNum;
        cin >> name >> sex >> college >> year >> colNum;
        Student stud(name, sex, college, year, colNum);
        stud.GenID();
        switch (colNum) {
        case 11: {
            CSarr.push_back(stud);
            break;
        };
        case 22: {
            MAarr.push_back(stud);
            break;
        };
        case 33: {
            BUarr.push_back(stud);
            break;
        };
        default:
            break;
        }
    }
}
void printAll() {
    Student stud;
    cout << "总人数:" << stud.Total() << endl;
    cout << "计算机学院人数:" << CSarr.size() << endl;
    cout << "管理学院人数:" << MAarr.size() << endl;
    cout << "土木学院人数:" << BUarr.size() << endl;
    cout << endl;
    // 输入学院 或 打印全部
    cout << "计算机学院:" << endl;
    for (int i = 0; i < CSarr.size(); i++) {
        CSarr[i].print();
    }
    cout << "\n管理学院:" << endl;
    for (int i = 0; i < MAarr.size(); i++) {
        MAarr[i].print();
    }
    cout << "\n土木学院:" << endl;
    for (int i = 0; i < BUarr.size(); i++) {
        BUarr[i].print();
    }
    cout << endl;
}

void Ins() {
    int t = 0, x = 0;
    cout << "输入插入位置:";
    cin >> x;
    cout << "输入学生人数:";
    cin >> t;
    cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
    for (int i = 0; i < t; i++) {
        char name[20];
        char college[3];
        char sex;
        int year;
        int colNum;
        cin >> name >> sex >> college >> year >> colNum;
        Student stud(name, sex, college, year, colNum);
        stud.GenID();
        switch (colNum) {
        case 11: {
            if (CSarr.size() >= x) {
                CSarr.insert(CSarr.begin() + x - 1, stud);
            }
            else {
                cout << "插入位置大于数组长度" << endl;
            }
            break;
        };
        case 22: {
            if (MAarr.size() >= x) {
                MAarr.insert(MAarr.begin() + x - 1, stud);
            }
            else {
                cout << "插入位置大于数组长度" << endl;
            }
            break;
        };
        case 33: {
            if (BUarr.size() >= x) {
                BUarr.insert(BUarr.begin() + x - 1, stud);
            }
            else {
                cout << "插入位置大于数组长度" << endl;
            }
            break;
        };
        default:
            break;
        }
    }
}
void Query() {
    int num;
    cout << "输入查询的学号:" << endl;
    cin >> num;
    int    colNum = num / 10000;
    switch (colNum) {
    case 11: {
        for (int i = 0; i < CSarr.size(); i++) {
            if (CSarr[i].studNum == num)
            {
                CSarr[i].print();
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    case 22: {
        for (int i = 0; i < MAarr.size(); i++) {
            if (MAarr[i].studNum == num)
            {
                MAarr[i].print();
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    case 33: {
        for (int i = 0; i < BUarr.size(); i++) {
            if (BUarr[i].studNum == num)
            {
                BUarr[i].print();
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    default:
        break;
    }
}
void Del() {
    int num;
    cout << "输入删除的学号:" << endl;
    cin >> num;
    int    colNum = num / 10000;
    switch (colNum) {
    case 11: {
        for (int i = 0; i < CSarr.size(); i++) {
            if (CSarr[i].studNum == num)
            {
                CSarr[i].setTotal(CSarr[i].Total() - 1);
                CSarr.erase(CSarr.begin() + i);
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    case 22: {
        for (int i = 0; i < MAarr.size(); i++) {
            if (MAarr[i].studNum == num)
            {
                MAarr[i].setTotal(MAarr[i].Total() - 1);
                MAarr.erase(MAarr.begin() + i);
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    case 33: {
        for (int i = 0; i < BUarr.size(); i++) {
            if (BUarr[i].studNum == num)
            {
                BUarr[i].setTotal(BUarr[i].Total() - 1);
                BUarr.erase(BUarr.begin() + i);
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    default:
        break;
    }
}

void modify() {
    int num;
    cout << "输入修改的学号:" << endl;
    cin >> num;
    int    colNum = num / 10000;
    switch (colNum) {
    case 11: {
        for (int i = 0; i < CSarr.size(); i++) {
            if (CSarr[i].studNum == num)
            {
                CSarr[i].print();
                cout << endl;
                char name[20];
                char college[3];
                char sex;
                int year;
                int colNum;
                cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
                cin >> name >> sex >> college >> year >> colNum;
                strcpy_s(CSarr[i].name, name);
                strcpy_s(CSarr[i].college, college);
                CSarr[i].sex = sex;
                CSarr[i].year = year;
                CSarr[i].colNum = colNum;
                CSarr[i].GenID();
                CSarr[i].print();
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    case 22: {
        for (int i = 0; i < MAarr.size(); i++) {
            if (MAarr[i].studNum == num)
            {
                MAarr[i].print();
                cout << endl;
                char name[20];
                char college[3];
                char sex;
                int year;
                int colNum;
                cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
                cin >> name >> sex >> college >> year >> colNum;
                strcpy_s(MAarr[i].name, name);
                strcpy_s(MAarr[i].college, college);
                MAarr[i].sex = sex;
                MAarr[i].year = year;
                MAarr[i].colNum = colNum;
                MAarr[i].GenID();
                MAarr[i].print();
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    case 33: {
        for (int i = 0; i < BUarr.size(); i++) {
            if (BUarr[i].studNum == num)
            {
                BUarr[i].print();
                cout << endl;
                char name[20];
                char college[3];
                char sex;
                int year;
                int colNum;
                cout << "输入:名字 性别 学院字母 入学年份 学院代码" << endl;
                cin >> name >> sex >> college >> year >> colNum;
                strcpy_s(BUarr[i].name, name);
                strcpy_s(BUarr[i].college, college);
                BUarr[i].sex = sex;
                BUarr[i].year = year;
                BUarr[i].colNum = colNum;
                BUarr[i].GenID();
                BUarr[i].print();
                return;
            }
        }
        cout << "未找到" << endl;
        break;
    };
    default:
        break;
    }
}

void Sort() {
    cout << endl;
    cout << "简单选择排序算法,从小到大排序:" << endl;
    vector<Student> studs;
    int temp = 0;
    int less = 0;
    for (int i = 0; i < CSarr.size(); i++) {
        studs.push_back(CSarr[i]);
    }
    for (int i = 0; i < MAarr.size(); i++) {
        studs.push_back(MAarr[i]);
    }
    for (int i = 0; i < BUarr.size(); i++) {
        studs.push_back(BUarr[i]);
    }
    if (studs.size() > 0) {
        for (int i = 0; i < studs.size(); i++) {
            for (int j = i + 1; j < studs.size(); j++) {
                if (studs[i].studNum - studs[j].studNum > less) {
                    less = studs[i].studNum - studs[j].studNum;
                    temp = j;
                }
            }
            if (less) {
                studs.insert(studs.begin() + i, studs[temp]);
                studs.erase(studs.begin() + temp + 1);
                less = 0;
            }
        }
    }
    else {
        cout << "没有数据" << endl;
    }
    cout << endl;
    for (int i = 0; i < studs.size(); i++) {
        studs[i].print();
    }
}

void Save() {
    ofstream fileCS("CS.dat", ios::out | ios::binary);
    for (int i = 0; i < CSarr.size(); i++) {
        fileCS.write((char*)&CSarr[i], sizeof(Student));
    }
    ofstream fileMA("MA.dat", ios::out | ios::binary);
    for (int i = 0; i < MAarr.size(); i++) {
        fileMA.write((char*)&MAarr[i], sizeof(Student));
    }
    ofstream fileBU("BU.dat", ios::out | ios::binary);
    for (int i = 0; i < BUarr.size(); i++) {
        fileBU.write((char*)&BUarr[i], sizeof(Student));
    }
    fileCS.close();
    fileMA.close();
    fileBU.close();
}
void Read() {
    Student stud;
    // CS
    ifstream fileCS("CS.dat", ios::in | ios::binary);
    while (fileCS.read((char*)&stud, sizeof(Student))) {
        stud.print();
        CSarr.push_back(stud);
    }
    Student::csCount = stud.studNum % 100; // 初始化学号起始位置;最后一个对象的学号,乱序插入后有bug
    // MA
    ifstream fileMA("MA.dat", ios::in | ios::binary);
    while (fileMA.read((char*)&stud, sizeof(Student))) {
        stud.print();
        MAarr.push_back(stud);
    }
    Student::maCount = stud.studNum % 100;
    // BU
    ifstream fileBU("BU.dat", ios::in | ios::binary);
    while (fileBU.read((char*)&stud, sizeof(Student))) {
        stud.print();
        BUarr.push_back(stud);
    }
    Student::buCount = stud.studNum % 100;
    stud.setTotal(CSarr.size() + MAarr.size() + BUarr.size());
    fileCS.close();
    fileMA.close();
    fileBU.close();
}

文章作者: iKnow
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iKnow !
评论
 上一篇
hexo prism 代码高亮问题 hexo prism 代码高亮问题
hexo prism 代码高亮问题hexo-prism-plugin 代码标注只支持小写英文,不支持符号、大写。 prism 支持的语言: https://prismjs.com/#languages-list 小写 #include
2021-07-02
下一篇 
使用FTP软件和USB线进行文件传输 使用FTP软件和USB线进行文件传输
准备的软件 手机端:实简FTP(Android) 电脑端:FlashFxp(Windows) 逐字稿:介绍:大家好!这里是:We Know。 今天来给大家介绍一种,电脑和手机之间快速传输文件的方法。 传输速度平均40MB/S,是我目前发现
  目录