小学生成绩管理系统C++

小学生成绩管理系统C++

一 系统功能

采用菜单和文件实现学生信息管理
功能有:

  1. 信息维护:
    学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息
  2. 信息查询:
    查询时可按姓名查询或按学号查询
  3. 成绩统计:
    输入任意的一个课程名(如数学)和一个分数段(如60–70),统计出在此分数段的学生人数及百分比。
  4. 排序:
    对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果。

二 系统数据结构

使用一个结构体存放单个学生的信息, 其中:

name为姓名, id为学号, score数组中分别存储语文 数学 英语 成绩

// 存放信息的结构体
typedef struct Data {
    string name;
    string id;
    float score[3];
} DATA;

使用vector容器存储所有学生的信息:

vector<Data> datas;

三 系统模块讲解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VAlTJDKt-1674285668328)(C:\Users\He\AppData\Roaming\Typora\typora-user-images\image-20221230201328808.png)]

定义Manage类用于存储学生信息和对应的增删改查操作

class Manage {
private:
    vector<Data> datas;
    string file_name;
public:
    Manage(string file_name);
    vector<Data> get_data();
    void read_file(string file_name); // 从文件读取内容
    void write_file(string file_name, vector<Data> &datas); // 将datas写入文件
    void print(vector<Data> &data); // 打印内容
    int search(string content); // 查询返回查询值的下标或 -1
    void sort_data(int a, int b); // 排序 a按: 语文0 数学1 英语2,  b: 0 升序 1降序
    Data add_data(); // 增添一个数据
    void delete_data(string content); // 删除内容
    void modify_data(string content); // 修改内容
    void add_data_func(); // 添加内容
    void statis_data(int a, double score1, double score2); //a按: 语文0 数学1 英语2
};

定义Menu函数用于菜单的打印和用户选择的获取:

int Menu() {
    int n;
    do {
        system("cls");
        cout << endl << "小学生成绩管理系统  " << endl;
        cout << "1、添加学生成绩   " << endl;
        cout << "2、显示学生成绩   " << endl;
        cout << "3、修改学生信息   " << endl;
        cout << "4、排序学生成绩" << endl;
        cout << "5、删除学生成绩   " << endl;
        cout << "6、查询学生成绩" << endl;
        cout << "7、统计学生成绩" << endl;
        cout << "8、保存并退出   " << endl;
        cout << "请选择: ";
        cin >> n;
    } while (n < 1 || n > 8);
    return n;
}

在主函数中分别调用相应的模块完成功能:

while (true) {
        ch = Menu();
        switch (ch) {
        case 1:
            cout << "1、添加学生成绩   " << endl;
            m.add_data_func();
            getch();
            break;
        case 2:
            cout << "2、显示学生成绩   " << endl;
            m.read_file(file_name);
            aa = m.get_data();
            m.print(aa);
            getch();
            break;
        case 3:
            cout << "3、修改学生信息   " << endl;
            cout << "请输入要修改的学生的姓名或者学号: " << endl;
            cin >> cont;
            m.modify_data(cont);
            getch();
            break;
        case 4:
            cout << "4、排序学生成绩" << endl;
            cout << "输入要按升序 0, 降序 1 排序:" << endl;
            // 排序 a按 : 语文0 数学1 英语2, b : 0 升序 1降序
            cin >> b;
            cout << "输入要按语文 0, 数学 1, 英语 2 排序:" << endl;
            cin >> a;
            m.sort_data(a, b);
            aa = m.get_data();
            m.print(aa);
            getch();
            break;
        case 5:
            cout << "5、删除学生成绩   " << endl;
            cout << "请输入要删除的学生的姓名或者学号: " << endl;
            cin >> cont;
            m.delete_data(cont);
            getch();
            break;
        case 6:
            cout << "6、查询学生成绩" << endl;
            cout << "请输入要查询的学生的姓名或者学号: " << endl;
            cin >> cont;
            search_id = m.search(cont);
            bl = m.get_data();
            al.push_back(bl[search_id]);
            m.print(al);
            getch();
            break;
        case 7:
            cout << "7、统计学生成绩" << endl;
            cout << "输入要按语文 0, 数学 1, 英语 2 统计:" << endl;
            cin >> b;
            cout << "输入分数区间 score1 score2" << endl;
            cin >> score1 >> score2;
            m.statis_data(b, score1, score2);
            getch();
            break;
        case 8:
            exit(0);
            break;
        }
    }

四 系统测试

  1. 添加学生成绩
  2. 显示学生成绩
  3. 修改学生信息
  4. 排序学生成绩
  5. 删除学生成绩
  6. 查询学生成绩
  7. 统计学生成绩

五 系统代码

// vector_demo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#pragma warning(disable:4996)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include<conio.h>//使用getch()函数
using namespace std;

// 存放信息的结构体
typedef struct Data {
    string name;
    string id;
    float score[3];
} DATA;
int sort_id;

bool LessSort(DATA a, DATA b)
{
    return (a.score[sort_id] > b.score[sort_id]);
}
bool GreaterSort(DATA a, DATA b) {
    return (a.score[sort_id] < b.score[sort_id]);
}


class Manage {
private:
    vector<Data> datas;
    string file_name;
    
public:
    Manage(string file_name);
    vector<Data> get_data();
    void read_file(string file_name); // 从文件读取内容
    void write_file(string file_name, vector<Data> &datas); // 将datas写入文件
    void print(vector<Data> &data); // 打印内容
    int search(string content); // 查询返回查询值的下标或 -1
    void sort_data(int a, int b); // 排序 a按: 语文0 数学1 英语2,  b: 0 升序 1降序
    Data add_data(); // 增添一个数据
    void delete_data(string content); // 删除内容
    void modify_data(string content); // 修改内容
    void add_data_func(); // 添加内容
    void statis_data(int a, double score1, double score2); //a按: 语文0 数学1 英语2
};
void Manage::statis_data(int a, double score1, double score2) {
    read_file(file_name);
    sort_data(a, 0); // 对数据按升序排列
    int m = 0;
    
    for (int i = 0; i < datas.size(); i++) {
        if (datas[i].score[a] < score1 || datas[i].score[a] > score2) {
            m++;
        }
    }
    int k = datas.size() - m;
    cout << "在此成绩区间的学生人数为: " << k << "占总人数的"<< k * 100.0 / datas.size() <<"%"<< endl;
}
void Manage::add_data_func() {
    read_file(file_name);
    datas.push_back(add_data());
    write_file(file_name, datas);
}
Data Manage::add_data() {
    DATA temp;
    cout << "请依此输入 姓名 学号 语文成绩 数学成绩 英语成绩 按回车: " << endl;
    cin >> temp.name >> temp.id >> temp.score[0] >> temp.score[1] >> temp.score[2];
    return temp;
}
void Manage::modify_data(string content) {
    int search_id = search(content);
    if (search_id == -1) {
        cout << "该内容不存在" << endl;
    }
    else {
        cout << "要修改的内容为: " << endl;
        vector<Data> a;
        a.push_back(datas[search_id]);
        print(a);
        datas[search_id] = add_data();
        
        cout << "修改完成" << endl;
        print(datas);
        write_file(file_name, datas);
    }
    
}
void Manage::delete_data(string content) {
    int search_id = search(content);
    if (search_id == -1) {
        cout << "该内容不存在" << endl;
    }
    else {
        datas.erase(datas.begin() + search_id);
    }
    write_file(file_name, datas);
}

void Manage::sort_data(int a, int b) {
    sort_id = a;
    read_file(file_name);
    if (b == 0) {
        sort(datas.begin(), datas.end(), GreaterSort);
    }
    else {
        sort(datas.begin(), datas.end(), LessSort);
    }
    
}
Manage::Manage(string file_name) {
    this->file_name = file_name;
}

vector<Data> Manage::get_data() {
    return this->datas;
}

int Manage::search(string content) {
    // 读文件
    read_file(this->file_name);

    for (int i = 0; i < datas.size(); i++) {
        if (datas[i].id == content || datas[i].name == content) {
            return i;
        }
    }

    return -1;

}

void Manage::write_file(string file_name, vector<Data>& datas) {

    ofstream ofs(file_name, ios::out);
    
    for (int i = 0; i < datas.size(); i++)
    {
        ofs << datas[i].name << " " << datas[i].id << " ";
        ofs << datas[i].score[0] << " " << datas[i].score[1] << " " << datas[i].score[2] << endl;
    }

   ofs.close();
   
}

void Manage::read_file(string file_name) {

    ifstream ifs;
    ifs.open(file_name, ios::in);
    if (!ifs.is_open()) {
        cout << "文件打开失败" << endl;
    }
    datas.clear();
    DATA data;
    while (ifs >> data.name >> data.id >> data.score[0] >> data.score[1] >> data.score[2]) {
        datas.push_back(data); 
    }
    ifs.close();
}

void Manage::print(vector<Data>& data) {
    cout << "姓名\t学号\t语文\t数学\t英语" << endl;
    for (int i = 0; i < data.size(); i++)
    {
        cout << data[i].name << "\t" << data[i].id << "\t";
        cout << data[i].score[0] << "\t" << data[i].score[1] << "\t" << data[i].score[2] << endl;
    }
}


void test01()
{
    string file_name = "data.txt";
    Manage m(file_name);
    m.delete_data("张明明");
    vector<Data> a = m.get_data();
    m.print(a);
}

int Menu() {
    int n;
    do {
        system("cls");
        cout << endl << "小学生成绩管理系统  " << endl;
        cout << "1、添加学生成绩   " << endl;
        cout << "2、显示学生成绩   " << endl;
        cout << "3、修改学生信息   " << endl;
        cout << "4、排序学生成绩" << endl;
        cout << "5、删除学生成绩   " << endl;
        cout << "6、查询学生成绩" << endl;
        cout << "7、统计学生成绩" << endl;
        cout << "8、保存并退出   " << endl;
        cout << "请选择: ";
        cin >> n;
    } while (n < 1 || n > 8);
    return n;
}

int main()
{
    string file_name = "data.txt";
    Manage m(file_name);
    vector<Data> aa;
    int ch = 0;
    int b, a;
    int search_id;
    string cont;
    vector<Data> al, bl;
    double score1, score2;
    while (true) {
        ch = Menu();
        switch (ch) {
        case 1:
            cout << "1、添加学生成绩   " << endl;
            m.add_data_func();
            getch();
            break;
        case 2:
            cout << "2、显示学生成绩   " << endl;
            m.read_file(file_name);
            aa = m.get_data();
            m.print(aa);
            getch();
            break;
        case 3:
            cout << "3、修改学生信息   " << endl;
            cout << "请输入要修改的学生的姓名或者学号: " << endl;
            cin >> cont;
            m.modify_data(cont);
            getch();
            break;
        case 4:
            cout << "4、排序学生成绩" << endl;
            cout << "输入要按升序 0, 降序 1 排序:" << endl;
            // 排序 a按 : 语文0 数学1 英语2, b : 0 升序 1降序
            cin >> b;
            cout << "输入要按语文 0, 数学 1, 英语 2 排序:" << endl;
            cin >> a;
            m.sort_data(a, b);
            aa = m.get_data();
            m.print(aa);
            getch();
            break;
        case 5:
            cout << "5、删除学生成绩   " << endl;
            cout << "请输入要删除的学生的姓名或者学号: " << endl;
            cin >> cont;
            m.delete_data(cont);
            getch();
            break;
        case 6:
            cout << "6、查询学生成绩" << endl;
            cout << "请输入要查询的学生的姓名或者学号: " << endl;
            cin >> cont;
            search_id = m.search(cont);
            bl = m.get_data();
            al.push_back(bl[search_id]);
            m.print(al);
            getch();
            break;
        case 7:
            cout << "7、统计学生成绩" << endl;
            cout << "输入要按语文 0, 数学 1, 英语 2 统计:" << endl;
            cin >> b;
            cout << "输入分数区间 score1 score2" << endl;
            cin >> score1 >> score2;
            m.statis_data(b, score1, score2);
            getch();
            break;
        case 8:
            exit(0);
            break;
        }
    }
    
    
}
       getch();
        break;
    case 7:
        cout << "7、统计学生成绩" << endl;
        cout << "输入要按语文 0, 数学 1, 英语 2 统计:" << endl;
        cin >> b;
        cout << "输入分数区间 score1 score2" << endl;
        cin >> score1 >> score2;
        m.statis_data(b, score1, score2);
        getch();
        break;
    case 8:
        exit(0);
        break;
    }
}

}


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为实现用户需求,从需求分析阶段的数据流图出发,根据小组讨论后确定的最佳方案。本系统主要包括两大功能模块:学生信息和成绩信息两个系统。其中学生信息系统划分为七个模块,学生成绩划分为四个模块。然后在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据结构。在测试过程中,先对单个模块进行测试,然后把模块连接起来进行测试。测试完成后书写文档,最后小组成员和用户在一块审查和复审。 1、 课题陈述 一方面,在时下这个飞速发展的信息社会中,直到今天仍然没有一套完善可行的学生信息管理系统出现在学校里。每年,从大专生、本科生到硕士生、博士生,几千人的入学、升学、毕业,全要由教务处和各系老师人工管理。信息量之巨大,工作量之繁重,是难以想象的。因此,学校和各个系都要安排多名教师专门负责学生学籍管理,浪费了大量的人力资源。然而,即使这样,管理仍然谈不上井井有条。举一个最简单的真实例子,一个同学的姓名在花名册里印错了,就一错错了三年,一直没能改正。同学想去改,却不知道是应该找系里,还是去找教务处。还有,当学生的基本信息,比如家庭住址、电话等变更后,无法及时在档案中修改,使得老师与同学无法联系沟通。 另一方面,从社会这方面讲,随着计算机的普及,越来越多的学校利用计算机来处理日常事务。面对众多的数据资料,很多管理者常常感到无从下手。在数字化的今天,我们需要一个学生管理系统,使我们的整体管理水平上一个档次,与如今这个高科技的信息社会接轨。 因此,如何有效的管理学生信息,帮助学校和老师管理和掌握这些情况,这就是学生信息管理系统需要完成的任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值