C++如何实现简单的学生成绩管理系统
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要介绍了C++如何实现简单的学生成绩管理系统的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++如何实现简单的学生成绩管理系统文章都会有所收获,下面我们一起来看
千家信息网最后更新 2025年11月14日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 ();}template StudentManage ::~StudentManage(){ delete shead;}template StudentManage & 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;}template bool StudentManage ::SIsEmpty() const{ return shead->next == NULL;}template int StudentManage ::SGetLength() const{ int length = 0; Student * p = shead->next; while (p) { length++; p = p->next; } return length;}template bool 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; }}template bool 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; }}template int 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;}template StudentManage & 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;}template void 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; } } }template void 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;}//班级template inline ClassManage ::ClassManage(){ chead = new Class ();}template ClassManage ::~ClassManage(){ delete chead;}template ClassManage & 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;}template bool ClassManage ::CIsEmpty() const{ return chead->next == NULL;}template int ClassManage ::CGetLength() const{ int length = 0; Class * p = chead->next; while (p) { length++; p = p->next; } return length;}template bool 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; }}template bool 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; }}template int 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;}template ClassManage & 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;}template void 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;}//成绩template inline GradeManage ::GradeManage(){ ghead = new Grade ();}template GradeManage ::~GradeManage(){ delete ghead;}template GradeManage & 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;}template bool GradeManage ::GIsEmpty() const{ return ghead->next == NULL;}template int GradeManage ::GGetLength() const{ int length = 0; Grade * p = ghead->next; while (p) { length++; p = p->next; } return length;}template bool 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; }}template bool 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; }}template int 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;}template GradeManage & 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;}template void 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++如何实现简单的学生成绩管理系统"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
学生
信息
成绩
班级
输入
管理
位置
姓名
主任
数据
名称
管理系统
系统
年龄
性别
课程
C++
总分
文件
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
芜湖手机软件开发公司哪家比较好
服务器ip入侵
软件开发一般多少劳务费合适
搜狗号码通 数据库
工业互联网软件开发
浪潮服务器管理口做raid
服务器接口
神佑释放怎么去好友服务器
长虹万达 网络安全
中兴服务器管理口用户
关于网络安全的内容200字
暗区突围服务器什么时候能好
数据库单选按钮标签显示内容
嵌入式软件开发方法有哪些
网络安全工程师老师
韩国服务器
永大服务器怎么用
数据库原理 视频下载
重庆oa软件开发教程
网络通 但无法连接数据库
云浮软件开发多少钱
网络安全与信息化办公室好吗
服务器 硬盘背板生厂商
奔驰互联网科技
达州软件开发优缺点
关于网络安全的内容200字
网络安全反诈骗演讲稿500字
上海做软件开发一个月多少钱
教师网络安全教育怎么做
kcl的网络技术