文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++如何实现简单的学生成绩管理系统

2023-06-29 16:50

关注

这篇文章主要介绍了C++如何实现简单的学生成绩管理系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现简单的学生成绩管理系统文章都会有所收获,下面我们一起来看看吧。

manage.h

#include <iostream>#include <fstream>#include <string>using namespace std;//学生template <class T>class Student {    template <class T>    friend class StudentManage;public:    Student() {        next = NULL;    }private:    int Sid;//学生编号    string Sname;//学生姓名    string Ssex;//学生性别    int Sage;//学生年龄    int Sscore;//学生成绩    Student<T>* next;//指向下一结点的指针};template <class T>class StudentManage {public:    StudentManage();    ~StudentManage();    StudentManage<T>& SInsert(int k, const T& sid, const string& sname, const string& ssex, const T& sage, const T& sscore);//插入    bool SIsEmpty() const;//判空    int SGetLength() const;//获取长度    bool SGetData(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore);//获取数据    bool SModifyData(int k, const T& sid, const string& sname, const string& ssex, const T& sage, const T& sscore);//修改    int SFind(const int& sid);//根据id查找    StudentManage<T>& SDelete(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore);//删除    void Sort(T a[]);    void SOutPut(ostream& sout) const;//打印private:    Student<T>* shead;};//班级template <class T>class Class {    template <class T>    friend class ClassManage;public:    Class() {        next = NULL;    }private:    int Cid;//班级编号    string CName;//班级名称    string CBzrName;//班主任名称    string CXsName;//学生名称    Class<T>* next;};template <class T>class ClassManage {public:    ClassManage();    ~ClassManage();    ClassManage<T>& CInsert(int k, const T& cid, const string& cname, const string& cbzrname, const string& cxsname);//插入    bool CIsEmpty() const;//判空    int CGetLength() const;//获取长度    bool CGetData(int k, T& cid, string& cname, string& cbzrname, string& cxsname);//获取数据    bool CModifyData(int k, const T& cid, const string& cname, const string& cbzrname, const string& cxsname);//修改    int CFind(const int& cid);//根据id查找    ClassManage<T>& CDelete(int k,  T& cid, string& cname, string& cbzrname, string& cxsname);//删除    void COutPut(ostream& cout) const;//打印private:    Class<T>* chead;};//成绩template <class T>class Grade {    template <class T>    friend class GradeManage;public:    Grade() {        next = NULL;    }private:    string Gname;    int Gscore;    Grade<T>* next;};template <class T>class GradeManage {public:    GradeManage();    ~GradeManage();    GradeManage<T>& GInsert(int k, const string& gname, const T& gscore);//插入    bool GIsEmpty() const;//判空    int GGetLength() const;//获取长度    bool GGetData(int k, string& gname, T& gscore);//获取数据    bool GModifyData(int k, const string& gname, const T& gscore);//修改    int GFind(const string& gname);//根据课程名称查找    GradeManage<T>& GDelete(int k, string& gname, T& gscore);//删除    void GOutPut(ostream& gout) const;//打印private:    Grade<T>* ghead;};

manage.cpp

#include "manage.h"//学生template<class T>inline StudentManage<T>::StudentManage(){    shead = new Student<T>();}template<class T>StudentManage<T>::~StudentManage(){    delete shead;}template<class T>StudentManage<T>& StudentManage<T>::SInsert(int k, const T& sid, const string& sname, const string& ssex, const T& sage, const T& sscore){    Student<T>* p = shead;    Student<T>* newNode = new Student<T>;    newNode->Sid = sid;    newNode->Sname = sname;    newNode->Ssex = ssex;    newNode->Sage = sage;    newNode->Sscore = sscore;    int len = SGetLength();    if (k<1 || k>len + 1)        cout << "失败";    else {        for (int i = 1; i < k; i++)            p = p->next;        newNode->next = p->next;        p->next = newNode;    }    return *this;}template<class T>bool StudentManage<T>::SIsEmpty() const{    return shead->next == NULL;}template<class T>int StudentManage<T>::SGetLength() const{    int length = 0;    Student<T>* p = shead->next;    while (p) {        length++;        p = p->next;    }    return length;}template<class T>bool StudentManage<T>::SGetData(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore){    Student<T>* p = shead->next;    int index = 1;    if (k<1 || k>SGetLength())        return false;    while (p != NULL && index < k) {        index++;        p = p->next;    }    if (p == NULL)        return false;    else {        sid = p->Sid;        sname = p->Sname;        ssex = p->Ssex;        sage = p->Sage;        sscore = p->Sscore;        return true;    }}template<class T>bool StudentManage<T>::SModifyData(int k, const T& sid, const string& sname, const string& ssex, const T& sage, const T& sscore){    Student<T>* p = shead->next;    int index = 1;    if (k<1 || k>SGetLength())        return false;    while (p != NULL && index < k) {        index++;        p = p->next;    }    if (p == NULL)        return false;    else {        p->Sid = sid;        p->Sname = sname;        p->Ssex = ssex;        p->Sage = sage;        p->Sscore = sscore;        return true;    }}template<class T>int StudentManage<T>::SFind(const int& sid){    Student<T>* p = shead->next;    int index = 1;    while (p != NULL && p->Sid != sid) {        p = p->next;        index++;    }    if (p != NULL)        return index;    else        return 0;}template<class T>StudentManage<T>& StudentManage<T>::SDelete(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore){    if (SGetData(k, sid, sname, ssex, sage, sscore)) {        Student<T>* p = shead;        Student<T>* q = NULL;        for (int i = 1; i < k; i++)            p = p->next;        q = p->next;        p->next = q->next;        delete q;    }    else        cout << "失败";    return *this;}template<class T>void StudentManage<T>::Sort(T a[]){    int n = SGetLength();    T  i, j, temp;    for (i = 1; i < n; i++) {        if (a[i] < a[i - 1]) {            temp = a[i];            for (j = i - 1; j >= 0 && a[j] > temp; --j)                a[j + 1] = a[j];            a[j + 1] = temp;        }    }    }template<class T>void StudentManage<T>::SOutPut(ostream& sout) const{    Student<T>* p = shead->next;    while (p != NULL) {        sout << "学生编号:" << p->Sid << "学生姓名:" << p->Sname << "学生性别:" << p->Ssex << "学生年龄:" << p->Sage << "学生总分:" << p->Sscore <<" " << endl;        p = p->next;    }}template <class T>ostream& operator<<(ostream& sout, StudentManage<T>& x) {    x.SOutPut(sout);    return sout;}//班级template<class T>inline ClassManage<T>::ClassManage(){    chead = new Class<T>();}template<class T>ClassManage<T>::~ClassManage(){    delete chead;}template<class T>ClassManage<T>& ClassManage<T>::CInsert(int k, const T& cid, const string& cname, const string& cbzrname, const string& cxsname){    Class<T>* p = chead;    Class<T>* newNode = new Class<T>;    newNode->Cid = cid;    newNode->CName = cname;    newNode->CBzrName = cbzrname;    newNode->CXsName = cxsname;    int len = CGetLength();    if (k<1 || k>len + 1)        cout << "失败";    else {        for (int i = 1; i < k; i++)            p = p->next;        newNode->next = p->next;        p->next = newNode;    }    return *this;}template<class T>bool ClassManage<T>::CIsEmpty() const{    return chead->next == NULL;}template<class T>int ClassManage<T>::CGetLength() const{    int length = 0;    Class<T>* p = chead->next;    while (p) {        length++;        p = p->next;    }    return length;}template<class T>bool ClassManage<T>::CGetData(int k, T& cid, string& cname, string& cbzrname, string& cxsname){    Class<T>* p = chead->next;    int index = 1;    if (k<1 || k>CGetLength())        return false;    while (p != NULL && index < k) {        index++;        p = p->next;    }    if (p == NULL)        return false;    else {        cid = p->Cid;        cname = p->CName;        cbzrname = p->CBzrName;        cxsname = p->CXsName;        return true;    }}template<class T>bool ClassManage<T>::CModifyData(int k, const T& cid, const string& cname, const string& cbzrname, const string& cxsname){    Class<T>* p = chead->next;    int index = 1;    if (k<1 || k>CGetLength())        return false;    while (p != NULL && index < k) {        index++;        p = p->next;    }    if (p == NULL)        return false;    else {        p->Cid = cid;        p->CName = cname;        p->CBzrName = cbzrname;        p->CXsName = cxsname;        return true;    }}template<class T>int ClassManage<T>::CFind(const int& cid){    Class<T>* p = chead->next;    int index = 1;    while (p != NULL && p->Cid != cid) {        p = p->next;        index++;    }    if (p != NULL)        return index;    else        return 0;}template<class T>ClassManage<T>& ClassManage<T>::CDelete(int k,  T& cid, string& cname, string& cbzrname, string& cxsname){    if (CGetData(k, cid, cname, cbzrname, cxsname)) {        Class<T>* p = chead;        Class<T>* q = NULL;        for (int i = 1; i < k; i++)            p = p->next;        q = p->next;        p->next = q->next;        delete q;    }    else        cout << "失败";    return *this;}template<class T>void ClassManage<T>::COutPut(ostream& cout) const{    Class<T>* p = chead->next;    while (p != NULL) {        cout << "班级编号:" << p->Cid << "班级:" << p->CName << "班主任姓名:" << p->CBzrName << "学生姓名:" << p->CXsName <<" " << endl;        p = p->next;    }}template <class T>ostream& operator<<(ostream& cout, ClassManage<T>& x) {    x.COutPut(cout);    return cout;}//成绩template<class T>inline GradeManage<T>::GradeManage(){    ghead = new Grade<T>();}template<class T>GradeManage<T>::~GradeManage(){    delete ghead;}template<class T>GradeManage<T>& GradeManage<T>::GInsert(int k, const string& gname, const T& gscore){    Grade<T>* p = ghead;    Grade<T>* newNode = new Grade<T>;    newNode->Gname = gname;    newNode->Gscore = gscore;    int len = GGetLength();    if (k<1 || k>len + 1)        cout << "失败";    else {        for (int i = 1; i < k; i++)            p = p->next;        newNode->next = p->next;        p->next = newNode;    }    return *this;}template<class T>bool GradeManage<T>::GIsEmpty() const{    return ghead->next == NULL;}template<class T>int GradeManage<T>::GGetLength() const{    int length = 0;    Grade<T>* p = ghead->next;    while (p) {        length++;        p = p->next;    }    return length;}template<class T>bool GradeManage<T>::GGetData(int k, string& gname, T& gscore){    Grade<T>* p = ghead->next;    int index = 1;    if (k<1 || k>GGetLength())        return false;    while (p != NULL && index < k) {        index++;        p = p->next;    }    if (p == NULL)        return false;    else {        gname = p->Gname;        gscore = p->Gscore;        return true;    }}template<class T>bool GradeManage<T>::GModifyData(int k, const string& gname, const T& gscore){    Grade<T>* p = ghead->next;    int index = 1;    if (k<1 || k>GGetLength())        return false;    while (p != NULL && index < k) {        index++;        p = p->next;    }    if (p == NULL)        return false;    else {        p->Gname = gname;        p->Gscore = gscore;        return true;    }}template<class T>int GradeManage<T>::GFind(const string& gname){    Grade<T>* p = ghead->next;    int index = 1;    while (p != NULL && p->Gname != gname) {        p = p->next;        index++;    }    if (p != NULL)        return index;    else        return 0;}template<class T>GradeManage<T>& GradeManage<T>::GDelete(int k, string& gname, T& gscore){    if (GGetData(k, gname, gscore)) {        Grade<T>* p = ghead;        Grade<T>* q = NULL;        for (int i = 1; i < k; i++)            p = p->next;        q = p->next;        p->next = q->next;        delete q;    }    else        cout << "失败";    return *this;}template<class T>void GradeManage<T>::GOutPut(ostream& gout) const{    Grade<T>* p = ghead->next;    while (p != NULL) {        gout << "课程名称:" << p->Gname << "课程成绩:" << p->Gscore<<" " << endl;        p = p->next;    }}template <class T>ostream& operator<<(ostream& gout, GradeManage<T>& x) {    x.GOutPut(gout);    return gout;}int main() {    ofstream outfile;//终端输入--内存--文本    //学生    StudentManage<int> stud;    stud.SInsert(1, 1, "小明", "男", 23, 290);    stud.SInsert(2, 2, "张三", "男", 22, 280);    stud.SInsert(3, 3, "小红", "女", 21, 270);    stud.SInsert(4, 4, "李四", "男", 24, 260);    int sid; string sname; string ssex; int sage; int sscore;    int sid1; string sname1; string ssex1; int sage1; int sscore1;    int sid2; string sname2; string ssex2; int sage2; int sscore2;    //班级    ClassManage<int> cla;    cla.CInsert(1, 1, "一班", "李主任", "王麻子");    cla.CInsert(2, 2, "一班", "李主任", "王五");    cla.CInsert(3, 3, "二班", "李主任", "达摩");    int cid; string cname, cbzrname, cxsname;    int cid1; string cname1, cbzrname1, cxsname1;    int cid2; string cname2, cbzrname2, cxsname2;    //成绩    GradeManage<int> gra;    gra.GInsert(1, "c++", 90);    gra.GInsert(1, "java", 90);    string gname; int gscore;    string gname1; int gscore1;    string gname2; int gscore2;    //主界面    cout << "欢迎来到学生成绩管理系统!" << endl;    cout << "选择1,进入学生信息管理"<<endl;    cout << "选择2,进入班级信息管理" << endl;    cout << "选择3,进入成绩信息管理" << endl;    cout <<"输入999退出" << endl;    int n; cout << "请输入选项:"; cin >> n;    while (n != 999) {        switch (n)        {        case 1:cout << "欢迎来到学生信息管理,输入999退出" << endl;               cout << "1、查看学生信息\n2、增加学生信息\n3、修改学生信息\n4、删除学生信息\n5、保存学生信息\n6、读取学生信息\n7、学生按总成绩排序*" << endl;            int s; cout << "请输入选项:"; cin >> s;                        while(s!=999){                switch (s)                {                case 1:cout << "查看学生信息" << endl;                       cout << stud << endl;                       break;                case 2:cout << "增加学生信息" << endl;                        int k;                        cout << "请输入学生位置" << endl; cin >> k;                        cout << "请输入编号:"; cin >> sid;                        cout << "请输入姓名:"; cin >> sname;                        cout << "请输入性别:"; cin >> ssex;                        cout << "请输入年龄:"; cin >> sage;                        cout << "请输入总分:"; cin >> sscore;                        stud.SInsert(k, sid, sname, ssex, sage, sscore);                        break;                case 3:cout << "修改学生信息" << endl;                        int k1;                        cout << "请输入要修改的学生位置" << endl; cin >> k1;                        cout << "请输入要修改的编号:"; cin >> sid1;                        cout << "请输入要修改的姓名:"; cin >> sname1;                        cout << "请输入要修改的性别:"; cin >> ssex1;                        cout << "请输入要修改的年龄:"; cin >> sage1;                        cout << "请输入要修改的总分:"; cin >> sscore1;                        stud.SModifyData(k1, sid1, sname1, ssex1, sage1, sscore1);                        break;                case 4:cout << "删除学生信息" << endl;                        int k2;                        cout << "请输入要删除的学生位置" << endl; cin >> k2;                        cout << "请输入要删除的编号:"; cin >> sid2;                        cout << "请输入要删除的姓名:"; cin >> sname2;                        cout << "请输入要删除的性别:"; cin >> ssex2;                        cout << "请输入要删除的年龄:"; cin >> sage2;                        cout << "请输入要删除的总分:"; cin >> sscore2;                        stud.SDelete(k2, sid2, sname2, ssex2, sage2, sscore2);                        break;                case 5:cout << "保存学生信息" << endl;                        outfile.open("F:\student.txt");                        outfile << stud << endl;                        outfile.close();                    break;                case 6:cout << "读取学生信息" << endl;                {                    ifstream in("F:\student.txt", ios::in);                    if (!in.fail())                    {                        while (!in.eof())                        {                            string str5;                            in >> str5;                            cout << str5 << endl;                        }                    }                }                    break;                case 7:cout << "学生按总成绩排序" << endl;                    break;                default:                    break;                }                cout << "请输入选项:"; cin >> s;                }            break;        case 2:cout << "欢迎来到班级信息管理,输入999退出" << endl;            cout << "1、查看班级信息\n2、增加班级信息\n3、修改班级信息\n4、删除班级信息\n5、保存班级信息\n6、读取班级信息" << endl;            int c; cout << "请输入选项:"; cin >> c;            while (c != 999) {                switch (c)                {                case 1:cout << "查看班级信息" << endl;                    cout << cla << endl;                    break;                case 2:cout << "增加班级信息" << endl;                    int k;                    cout << "请输入班级位置" << endl; cin >> k;                    cout << "请输入班级编号:"; cin >> cid;                    cout << "请输入班级名称:"; cin >> cname;                    cout << "请输入班主任名称:"; cin >> cbzrname;                    cout << "请输入学生名字:"; cin >> cxsname;                    cla.CInsert(k, cid, cname, cbzrname, cxsname);                    break;                case 3:cout << "修改班级信息" << endl;                    int k1;                    cout << "请输入班级位置" << endl; cin >> k1;                    cout << "请输入班级编号:"; cin >> cid1;                    cout << "请输入班级名称:"; cin >> cname1;                    cout << "请输入班主任名称:"; cin >> cbzrname1;                    cout << "请输入学生名字:"; cin >> cxsname1;                    cla.CModifyData(k1, cid1, cname1, cbzrname1, cxsname1);                    break;                case 4:cout << "删除班级信息" << endl;                    int k2;                    cout << "请输入班级位置" << endl; cin >> k2;                    cout << "请输入班级编号:"; cin >> cid2;                    cout << "请输入班级名称:"; cin >> cname2;                    cout << "请输入班主任名称:"; cin >> cbzrname2;                    cout << "请输入学生名字:"; cin >> cxsname2;                    cla.CDelete(k2, cid2, cname2, cbzrname2, cxsname2);                    break;                case 5:cout << "保存班级信息" << endl;                    outfile.open("F:\class.txt");                    outfile << cla << endl;                    outfile.close();                    break;                case 6:cout << "读取班级信息" << endl;                {                    ifstream in("F:\class.txt", ios::in);                    if (!in.fail())                    {                        while (!in.eof())                        {                            string str5;                            in >> str5;                            cout << str5 << endl;                        }                    }                }                    break;                default:                    break;                }                cout << "请输入选项:"; cin >> c;            }            break;        case 3:cout << "欢迎来到成绩信息管理,输入999退出" << endl;            cout << "1、查看成绩信息\n2、增加成绩信息\n3、修改成绩信息\n4、删除成绩信息\n5、保存成绩信息\n6、读取成绩信息" << endl;            int g; cout << "请输入选项:"; cin >> g;            while (g != 999) {                switch (g)                {                case 1:cout << "查看成绩信息" << endl;                    cout << gra << endl;                    break;                case 2:cout << "增加成绩信息" << endl;                    int k;                    cout << "请输入成绩位置" << endl; cin >> k;                    cout << "请输入课程名称:"; cin >> gname;                    cout << "请输入课程成绩:"; cin >> gscore;                    gra.GInsert(k, gname, gscore);                    break;                case 3:cout << "修改成绩信息" << endl;                    int k1;                    cout << "请输入成绩位置" << endl; cin >> k1;                    cout << "请输入课程名称:"; cin >> gname1;                    cout << "请输入课程成绩:"; cin >> gscore1;                    gra.GModifyData(k1, gname1, gscore1);                    break;                case 4:cout << "删除成绩信息" << endl;                    int k2;                    cout << "请输入成绩位置" << endl; cin >> k2;                    cout << "请输入课程名称:"; cin >> gname2;                    cout << "请输入课程成绩:"; cin >> gscore2;                    gra.GDelete(k2, gname2, gscore2);                    break;                case 5:cout << "保存成绩信息" << endl;                    outfile.open("F:\grade.txt");                    outfile << gra << endl;                    outfile.close();                    break;                case 6:cout << "读取成绩信息" << endl;                {                    ifstream in("F:\grade.txt", ios::in);                    if (!in.fail())                    {                        while (!in.eof())                        {                            string str5;                            in >> str5;                            cout << str5 << endl;                        }                    }                }                    break;                default:                    break;                }                cout << "请输入选项:"; cin >> g;            }            break;        default:            break;        }        cout << "请输入选项:"; cin >> n;    }        return 0;}

关于“C++如何实现简单的学生成绩管理系统”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C++如何实现简单的学生成绩管理系统”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯