C++学生管理系统

这是一个使用C++编写的经典学生管理系统,具备输入、插入、排序、查询、删除和输出功能。系统首先判断stud.dat文件是否存在,根据文件内容创建学生对象数组。通过Switch语句控制操作,新增学生时动态调整数组大小,排序功能采用冒泡排序,查询和删除功能通过函数实现。代码可在QT开发中文网上查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道非常经典的C语言题目,用C++实现

题目如下:

  1. 输入功能:由键盘输入10个学生的学号、姓名、三科成绩,并计算出平均成绩和总成绩,然后将它存入文件stud.dat。
  2. 插入功能:按学号增加一个学生信息,并将其插入到stud.dat中。
  3. 排序功能,按要求对学生信息进行排序,分为按学号和按总成绩进行排序两种情形,并输出结果。
  4. 查询功能:按要求查找学生信息,分为按学号和姓名进行查询两种情形,并输出结果。
  5. 删除功能:按要求将学生信息删除,分为按学号和姓名进行删除两种情形。
  6. 输出功能:按学号输出学生信息。

整体思路:

  1. 程序启动的时候判断文件(stu.dat)是否存在,如果文件不存在,则正常执行,如果文件存在,先获取文件中学生的个数,根据学生的个数创建对象数组,将内容创建成学生对象,保存在对象数组1里,再向下执行。
  2. 用Switch语句来判断不同的输入。
  3. 新增学生,根据 原来对象数组1储存的人数+新增的人数 来确定新的动态数组2的大小,将原本对象数组1内的内容保存在新的对象数组2里,再将新增的内容储存在后面,每次新增完,直接保存到文件。
  4. 排序学生,根据学号或者姓名,写一个数组的冒泡排序即可
  5. 查询学生,写一个函数,判断学生是否存在,如果存在返回学生所在数组的下标,根据下标输出内容
  6. 删除学生,用查询学生写的函数,根据下标删除学生
  7. cout对象数组里的内容就完事

实现代码

#include <iostream>
#include<fstream>
#include<string>
#define line for (int n = 0; n <= 100; n++) cout << "-"
#define FILENAME "stdu.dat"

using namespace std;
class student { //学生类
public:
    int Is_Exist(string stuId, int a);
    int get_student_number(); //获取文件中学生人数
    bool File_Is_Empty; //文件是否为空的标识
    student *studentArray; //将文件中的内容,以student对象方式储存在studentArray[]数组中
    int student_number; //学生人数
    string studentId; //学号
    string name;   //姓名
    float score[3];//成绩*3
    float Total;    //    总分
    int Average;//平均分

    void sort(int n=1); //排序函数
    void delete_stu(); //删除学生
    void init(); //初始化内容,将文件中的内容读到studentArray中
    void save(); //保存文件
    void show();//展示界面
    void add_stu(int number = 1); //添加学生
    void showInfo(); //展示学生信息
    void search();//搜索学生
    student() //默认构造函数,判断文件是否为空,设置File_Is_Empty值
    {
        ifstream ifs;
        ifs.open(FILENAME, ios::in);
        if (!ifs.is_open())
        {
            this->student_number = 0;
            this->studentArray = NULL;
            this->studentId = "0";
            this->name = "0";
            this->score[0] = 0;
            this->Average = 0;
            this->Total = 0;
            this->File_Is_Empty = true;
            ifs.close();
            return;
        }
        char c;
        ifs >> c;
        if (ifs.eof())
        {
            //文件空
            this->student_number = 0;
            this->studentArray = NULL;
            this->studentId = "0";
            this->name = "0";
            this->score[0] = 0;
            this->Average = 0;
            this->Total = 0;
            this->File_Is_Empty = true;
            ifs.close();
            return;
        }
        int num = this->get_student_number(); //获取文件中学生数量
        this->student_number = num;
        //cout << "现在学生人数为:" << num << endl;;
        //system("pause");
    };
    ~student() //析构函数
    {
        delete[]this->studentArray;
        this->studentArray = NULL; //防止指针变为野指针
    }
    student(string stuId,string stuName, float stuScore[3]) //带参数的构造函数
    {
        this->studentId = stuId;
        this->name = stuName;
        for (int i = 0; i < 3; i++)
            this->score[i] = stuScore[i];
        this->A
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值