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 ();}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安全错误
数据库的锁怎样保障安全
建代理服务器
晋城商城分销软件开发多少钱
数据库技术和支持平台基本概念
机房服务器管理方案
网络安全知识防范
mysql查看数据库语句
工会到企业宣传网络安全
群晖USB打印服务器
保证网络安全的主要因素是
天津调度服务器安装虚拟主机
广州网络技术公司怎么样
学软件开发需要学五笔
龙岩网络安全支撑公示
c3p0连接数据库增删改查
二手服务器 家用
软件实施转软件开发
电信新加坡无服务器
黄浦区品牌软件开发厂家价格
学习计算机网络技术的方法
全民奇迹服务器数据库名字
青浦区上门软件开发制造价格
软件开发需要聪明吗
腾讯云服务器安全检查在哪里
小皮打不开数据库
vlan 认证服务器
数据库缺少字段
数据库管理系统的选择属于
四川省ipfs云服务器虚拟主机
网络安全风险评估提升监管能力
t3系统管理如何添加服务器