千家信息网

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

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍了C++如何实现简单的学生成绩管理系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现简单的学生成绩管理系统文章都会有所收获,下面我们一起来看
千家信息网最后更新 2025年02月02日C++如何实现简单的学生成绩管理系统

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

manage.h

#include #include #include using namespace std;//学生template class Student {    template     friend class StudentManage;public:    Student() {        next = NULL;    }private:    int Sid;//学生编号    string Sname;//学生姓名    string Ssex;//学生性别    int Sage;//学生年龄    int Sscore;//学生成绩    Student* next;//指向下一结点的指针};template class StudentManage {public:    StudentManage();    ~StudentManage();    StudentManage& 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& SDelete(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore);//删除    void Sort(T a[]);    void SOutPut(ostream& sout) const;//打印private:    Student* shead;};//班级template class Class {    template     friend class ClassManage;public:    Class() {        next = NULL;    }private:    int Cid;//班级编号    string CName;//班级名称    string CBzrName;//班主任名称    string CXsName;//学生名称    Class* next;};template class ClassManage {public:    ClassManage();    ~ClassManage();    ClassManage& 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& CDelete(int k,  T& cid, string& cname, string& cbzrname, string& cxsname);//删除    void COutPut(ostream& cout) const;//打印private:    Class* chead;};//成绩template class Grade {    template     friend class GradeManage;public:    Grade() {        next = NULL;    }private:    string Gname;    int Gscore;    Grade* next;};template class GradeManage {public:    GradeManage();    ~GradeManage();    GradeManage& 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& GDelete(int k, string& gname, T& gscore);//删除    void GOutPut(ostream& gout) const;//打印private:    Grade* ghead;};

manage.cpp

#include "manage.h"//学生templateinline StudentManage::StudentManage(){    shead = new Student();}templateStudentManage::~StudentManage(){    delete shead;}templateStudentManage& StudentManage::SInsert(int k, const T& sid, const string& sname, const string& ssex, const T& sage, const T& sscore){    Student* p = shead;    Student* newNode = new Student;    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;}templatebool StudentManage::SIsEmpty() const{    return shead->next == NULL;}templateint StudentManage::SGetLength() const{    int length = 0;    Student* p = shead->next;    while (p) {        length++;        p = p->next;    }    return length;}templatebool StudentManage::SGetData(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore){    Student* 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;    }}templatebool StudentManage::SModifyData(int k, const T& sid, const string& sname, const string& ssex, const T& sage, const T& sscore){    Student* 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;    }}templateint StudentManage::SFind(const int& sid){    Student* p = shead->next;    int index = 1;    while (p != NULL && p->Sid != sid) {        p = p->next;        index++;    }    if (p != NULL)        return index;    else        return 0;}templateStudentManage& StudentManage::SDelete(int k, T& sid, string& sname, string& ssex, T& sage, T& sscore){    if (SGetData(k, sid, sname, ssex, sage, sscore)) {        Student* p = shead;        Student* 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;}templatevoid StudentManage::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;        }    }    }templatevoid StudentManage::SOutPut(ostream& sout) const{    Student* p = shead->next;    while (p != NULL) {        sout << "学生编号:" << p->Sid << "学生姓名:" << p->Sname << "学生性别:" << p->Ssex << "学生年龄:" << p->Sage << "学生总分:" << p->Sscore <<" " << endl;        p = p->next;    }}template ostream& operator<<(ostream& sout, StudentManage& x) {    x.SOutPut(sout);    return sout;}//班级templateinline ClassManage::ClassManage(){    chead = new Class();}templateClassManage::~ClassManage(){    delete chead;}templateClassManage& ClassManage::CInsert(int k, const T& cid, const string& cname, const string& cbzrname, const string& cxsname){    Class* p = chead;    Class* newNode = new Class;    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;}templatebool ClassManage::CIsEmpty() const{    return chead->next == NULL;}templateint ClassManage::CGetLength() const{    int length = 0;    Class* p = chead->next;    while (p) {        length++;        p = p->next;    }    return length;}templatebool ClassManage::CGetData(int k, T& cid, string& cname, string& cbzrname, string& cxsname){    Class* 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;    }}templatebool ClassManage::CModifyData(int k, const T& cid, const string& cname, const string& cbzrname, const string& cxsname){    Class* 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;    }}templateint ClassManage::CFind(const int& cid){    Class* p = chead->next;    int index = 1;    while (p != NULL && p->Cid != cid) {        p = p->next;        index++;    }    if (p != NULL)        return index;    else        return 0;}templateClassManage& ClassManage::CDelete(int k,  T& cid, string& cname, string& cbzrname, string& cxsname){    if (CGetData(k, cid, cname, cbzrname, cxsname)) {        Class* p = chead;        Class* 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;}templatevoid ClassManage::COutPut(ostream& cout) const{    Class* p = chead->next;    while (p != NULL) {        cout << "班级编号:" << p->Cid << "班级:" << p->CName << "班主任姓名:" << p->CBzrName << "学生姓名:" << p->CXsName <<" " << endl;        p = p->next;    }}template ostream& operator<<(ostream& cout, ClassManage& x) {    x.COutPut(cout);    return cout;}//成绩templateinline GradeManage::GradeManage(){    ghead = new Grade();}templateGradeManage::~GradeManage(){    delete ghead;}templateGradeManage& GradeManage::GInsert(int k, const string& gname, const T& gscore){    Grade* p = ghead;    Grade* newNode = new Grade;    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;}templatebool GradeManage::GIsEmpty() const{    return ghead->next == NULL;}templateint GradeManage::GGetLength() const{    int length = 0;    Grade* p = ghead->next;    while (p) {        length++;        p = p->next;    }    return length;}templatebool GradeManage::GGetData(int k, string& gname, T& gscore){    Grade* 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;    }}templatebool GradeManage::GModifyData(int k, const string& gname, const T& gscore){    Grade* 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;    }}templateint GradeManage::GFind(const string& gname){    Grade* p = ghead->next;    int index = 1;    while (p != NULL && p->Gname != gname) {        p = p->next;        index++;    }    if (p != NULL)        return index;    else        return 0;}templateGradeManage& GradeManage::GDelete(int k, string& gname, T& gscore){    if (GGetData(k, gname, gscore)) {        Grade* p = ghead;        Grade* 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;}templatevoid GradeManage::GOutPut(ostream& gout) const{    Grade* p = ghead->next;    while (p != NULL) {        gout << "课程名称:" << p->Gname << "课程成绩:" << p->Gscore<<" " << endl;        p = p->next;    }}template ostream& operator<<(ostream& gout, GradeManage& x) {    x.GOutPut(gout);    return gout;}/*int main() {    //学生    StudentManage s;    s.SInsert(1, 1, "小明", "男",23 , 290);    s.SInsert(2, 2, "张三", "男", 22, 280);    s.SInsert(3, 3, "小红", "女", 21, 270);    s.SInsert(4, 4, "李四", "男", 24, 260);    cout << s;    int n = s.SGetLength();    cout << "共有" << n << "条数据" << endl;    s.SModifyData(3, 3, "小丽", "女", 21, 270);    cout << s;    int sid, sage, sscore; string sname, ssex;    int sid1, sage1, sscore1; string sname1, ssex1;    s.SGetData(1, sid,  sname,ssex, sage, sscore);    cout << "学生编号:" << sid << " 学生姓名:" << sname << " 学生性别:" << ssex << " 学生年龄:" << sage << " 学生总分:" << sscore << endl;    s.SDelete(2, sid1, sname1, ssex1, sage1, sscore1);    cout << "删除学生编号:" << sid1 << " 学生姓名:" << sname1 << " 学生性别:" << ssex1 << " 学生年龄:" << sage1 << " 学生总分:" << sscore1 << endl;    cout << s;    //班级    ClassManage c;    c.CInsert(1,1,"一班","李主任","王麻子");    c.CInsert(2, 2,"一班", "李主任", "十大");    c.CInsert(3, 3,"一班", "李主任", "的撒");    cout << c;    int x = c.CGetLength();    cout << "共有" << x << "条数据" << endl;    c.CModifyData(3, 3, "一班", "张主任", "的撒");    cout << c;    int cid; string cname, cbzrname,cxsname;    c.CGetData(1, cid, cname, cbzrname, cxsname);    cout << "班级编号:" << cid << " 班级:" < g;    g.GInsert(1, "c++", 90);    g.GInsert(1, "java", 90);    cout << g;    int t = g.GGetLength();    cout << "共有" << t << "条数据" << endl;    g.GModifyData(2,  "python", 92);    cout << g;    string gname;int gscore;    g.GGetData(1, gname, gscore);    cout << "课程名称:" << gname << " 课程成绩:" << gscore << endl;    return 0;}*/int main() {    ofstream outfile;//终端输入--内存--文本    //学生    StudentManage 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 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 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,进入学生信息管理"<> 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;    }    /*    ofstream outfile;//终端输入--内存--文本    outfile.open("F:\student.txt", ios::binary | ios::app | ios::in | ios::out);//注意,里面有iOS::app,表示打开文件后,在写入的文件不会覆盖原文件中的内容,也就是原来文件中的数据会得到保存。    //outfile << "学生编号:" << sid << "  学生姓名: " << sname << "  学生性别:" << ssex << "  学生年龄:" << sage << "  学生总分:" << sscore << endl;    outfile << stud << endl;    outfile.close();*/    return 0;}

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

0