30分钟做完一个满分学生成绩管理系统,工具人含泪分享!

本地AI Coding Agent搭建实战:不联网、不上传的自主编程工作流 AI Coding Agent 是一种面向语义层的智能编程范式,其核心在于理解上下文约束、识别技术债并自主构建可验证的技术方案,而非简单代码补全。它依托大语言模型(LLM)与工具链协同,在本地运行时实现需求解析→方案设计→代码生成→执行验证的闭环。相比云端AI编程助手,本地部署保障数据零外泄,适用于金融、政务等高敏场景;结合 Ollama、CodeAct、Docker 等开源组件,可在消费级硬件上构建轻量、可控、可审计的编程搭档。本文聚焦真实可落地的本地化部署路径与人机协同决策机制。 阅读详情

前言
靓仔我呢,作为一名乐于助人的“好”学长,自然对学妹要做到有求必应啦。
大二的时候,我兴冲冲地应聘了一个大一班级的导助,作为一名帅气的学长(附照片),很快就与我们计算机班级的数量众多的三个女生打成了一片,并且豪言道“有问题,找学长”。
在这里插入图片描述

没想到这拉开了我三年工具人的生涯。不过三个学妹好在都很漂亮,嘿嘿。分别是黄头发小学妹和东北大妹子以及我的老乡170小姐姐。

快毕业了,把当初为三位学妹整理的各种东西分享出来(当初自己学的时候,都没上心)。

她们大一的时候是最热情的时候,让我忘记了自己还是在工科学院的事实,作为大一上学期的学生成绩管理系统也是她们当时最为头疼的事情,我把之前自己做的课程设计发给了他们。

具体实现使用c++,dos界面,使用的技术也都是大一学的,并没有超纲,并且我和黄头发妹妹都拿了满分,建议有需要的一键三连,收藏再看嗷!

概述

利用c++或c语言等所学知识编码实现学生成绩管理系统。按照要求实现功能。

课程目的

将菜单模块,输入模块,查询模块,更新模块,输出模块,排序模块,统计模块,进行合理编写,符合学生及老师对学生成绩管理系统的基本使用要求,并在此基础上加以创新,实现更多功能。
(这里重点说明,老师为了鼓励我们有所创新,重点以创新点给分,所以诸多同学用变色、加字符图画等各种神奇套路取博得老师芳心)
我当时用下面这个图,让老师高兴地给我加上了五分创新分哈哈哈哈哈。
在这里插入图片描述

功能设计

系统使用角色设计为教师登录和学生登陆。(后来指导学妹创新,加上了管理员角色,又Get到了创新分)。
进入系统时,有俩个选项:

在这里插入图片描述
然后选择角色进入,为了用户体验感,都设置了返回上级功能(即返回上一页面)。
在这里插入图片描述

使用到了文件读写、学生类、课程类和学生链表等技术。(在大一这个阶段,这个链表应该能让你的老师眼前一亮)

教师角色

其中教师角色功能设计如下:
1.登录密码验证
2.输入学生信息(姓名、学号、性别、成绩、学院班级)
3.输出学生成绩
4.添加学生信息
5.查找学生信息(索引:姓名、学号、学院)
6.删除学生信息
7.修改学生信息
8.排序(学号、单科成绩、总成绩)
9.计算(总分、均分、通过率)
10.公共课程设置(添加删除课程)

学生角色

学生角色的功能设计比较少了,哈哈哈,难不成给你设计一个改成绩功能,嘿嘿。

功能效果:

当时学习C++,重点和难点也都是类的使用,但是当初我这个课程对类设计和使用都较好,建议现在大一的同学可以参考我的实现。
就一个登录,查看信息和成绩的功能。

教师角色

输入学生信息(姓名、学号、性别、成绩、学院班级)

在这里插入图片描述
输出学生成绩
在这里插入图片描述

添加学生信息
在这里插入图片描述
查找学生信息(索引:姓名、学号、学院)
在这里插入图片描述
删除学生信息
在这里插入图片描述

排序(学号、单科成绩、总成绩)
在这里插入图片描述计算(总分、均分、通过率)
在这里插入图片描述
公共课程设置(添加删除课程)
在这里插入图片描述

学生角色

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601140150535.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NvZGVCb3ds,size_16,color_FFFFFF,t_70

文件读写

1.课程信息
在这里插入图片描述2.学生信息
在这里插入图片描述

源码送上

//可以设置公共课程,然后是个人选修课
//私有课程设置放在修改信息中...
//无文件是的操作情况
//文件为空的时候操作情况
#include<iostream>
#include<string>
#include<fstream>						//文件的输出输出流操作
#include<iomanip>						//对齐输出
using namespace std;
const char* filename = "Student.txt";			//学生信息记录的文件名称
const char* filename_lesson = "Lesson.txt";	//公共课程信息的记录名称
const int MAX = 10;							//最多课程数量

struct Lesson_Node							//课程的结构体设置
{
	string L_name;							//课程名称
	int grade;								//课程成绩
};

class Lesson								//课程设置类
{
private:
	Lesson_Node lesson[MAX];				//课程具体信息,最多10项
	int n;									//当前的课程数量
	int Mount_s;							//成绩总和
	int Averg_s;							//平均成绩
public:
	Lesson()								//课程初始化,读取文件中公共课程的信息设置,如果没有文件就建立一个文件
	{
		ifstream ifs(filename_lesson);
		if (!ifs)
		{
			string na[4] = { "语文","数学","英语","体育" };
			n = 4;
			for (int i = 0; i<n; ++i)
			{
				lesson[i].L_name = na[i];
				lesson[i].grade = 0;
			}
			SetA_M();
			Filein_PublicL();				//如果打开失败,就写一个文件
		}
		else
		{
			ifs.close();
			Fileout_PbulicL();				//读取成功就读取当前文件中的课程设置

		}
	}
	~Lesson()								//析构
	{
		n = 0;
		Mount_s = 0;
		Averg_s = 0;
	}
	Lesson(const Lesson&rhs)				//复制构造函数
	{
		n = rhs.n;
		for (int i = 0; i<n; i++)
		{
			lesson[i].L_name = rhs.lesson[i].L_name;
			lesson[i].grade = rhs.lesson[i].grade;
			SetA_M();
		}
	}
	Lesson& operator=(const Lesson&rhs)
	{
		n = rhs.n;
		for (int i = 0; i<n; i++)
		{
			lesson[i].L_name = rhs.lesson[i].L_name;
			lesson[i].grade = rhs.lesson[i].grade;
			SetA_M();
		}
		return *this;
	}
	int ReturnMount_s()						//返回总分
	{
		return Mount_s;
	}
	int ReturnAverg_s()						//返回平均分
	{
		return Averg_s;
	}
	void Dislesson(int x = 1)					//输出当前的课程的信息
	{
		if (x == 1)							//由于需要,在没有输入参数的情况下默认是输出文件中的课程信息,在参数x不等于1则输出当前内存中修改后的课程程信息
			Fileout_PbulicL();
		int i;
		for (i = 0; i<n; i++)
		{
			cout << i + 1 << lesson[i].L_name << "  ";
		}
		cout << endl;
	}
	void Addlesson(int i = 1)					//增加课程 参数1是公共课程的添加 2是私人课程的添加
	{

		char t = '1';
		string na;
		while (t == '1')
		{
			if (n == MAX)
			{
				cout << "以达到课程上限,无法继续添加" << endl;
				return;
			}
			cout << "输入要添加的课程名称:";
			cin >> na;
			lesson[n].L_name = na;
			if (i == 1)
				lesson[n].grade = 0;
			else
			{
				cout << "输入成绩";
				cin >> na;
				lesson[n].grade = atoi(na.c_str());
			}
			n++;							//课程数量加1

			cout << "是否继续添加课程:(1.继续 0.不了)";
			cin >> t;
		}
		if (i == 1)
			Filein_PublicL();//将修改后的课程信息写入文件
	}
	void Dellesson(int i = 1)					//删除课程
	{
		int x; string tmp; char t = '1';
		while (t == '1')
		{
			cout << "请输入要删除的课程编号";
			cin >> tmp; x = atoi(tmp.c_str());
			if (x>0 && x <= n)
			{
				for (; x<n; x++)
				{
					lesson[x - 1].L_name = lesson[x].L_name;
					lesson[x - 1].grade = lesson[x].grade;
				}
				n--;
				if (i == 1)
					Dislesson(0);				//显示当前内存中的课程信息,避免一直循环删除要一直读取写入文件,所以一次性将修改好的课程写入文件
			}
			else
			{
				cout << "输入错误~~~,或已经不存在课程信息了" << endl;
			}
			cout << "是否继续删除课程信息(1.是的,0.不了) ";
			cin >> t;
		}
		if (i == 1)
			Filein_PublicL();					//写入文件
	}
	void SetA_M()							//计算平均分和总分
	{
		Mount_s = 0;
		for (int i = 0; i<n; i++)
		{
			Mount_s = Mount_s + lesson[i].grade;
		}
		Averg_s = Mount_s / n;
	}
	/*******************************************     个人选修课程设置     *********************************************/
	void SetPersonLesson()
	{
		string tmp;
		char x = '0';
		int i;
		Dislesson(2);  cout << endl;                             //输出当前学生信息中的课程信息
		cout << "a.增加课程 b.删除课程";
		cin >> x;
		switch (x)
		{
		case 'a':Addlesson(2); break;							//增加单人课程
		case 'b':Dellesson(2); break;							//删除单人课程
		default:
			i = x - '0';
			if (i>0 && i <= n)
			{
				cout << "请输入" << lesson[i - 1].L_name << "的成绩:";
				cin >> tmp;
				lesson[i - 1].grade = atoi(tmp.c_str());//成绩从字符转整形

			}
			break;
		}SetA_M();
	}
	/*******************************************     公共课程设置部分     **********************************************/

	void Filein_PublicL()				//向文件中输入公共课程的设置
	{
		ofstream ofs(filename_lesson);
		if (!ofs)
		{
			cout << "文件打开失败" << endl;
			exit(0);
		}
		ofs << n << '\t';
		for (int i = 0; i<n; i++)
		{
			ofs << lesson[i].L_name << '\t';
		}
		ofs.close();

	}
	void Fileout_PbulicL()				//从文件中读取公共课程设置信息,建立课程
	{
		int i = 0;
		ifstream ifs(filename_lesson);
		if (!ifs)
		{
			cout << "文件打开失败" << endl;
			exit(0);
		}
		ifs >> n >> ws;
		while (i<n && !ifs.eof())			//判断是否读取到文件末尾了
		{
			ifs >> lesson[i].L_name >> ws;
			i++;
		}
		ifs.close();
	}
	void SetPbulicLesson()				//设置当前的公共课程的信息
	{
		cout << "当前公共课程信息:" << endl;//显示当前的课程信息便于用来
		Dislesson();
		cout << "1.添加课程  2.删除课程  0.返回 ";
		string tmp; char t;
		cin >> t;
		switch (t)
		{
		case '1':
			Addlesson();
			break;
		case '2':
			Dellesson();
			break;
		case '0':break;
		}
	}
	friend istream& operator >> (istream& is, Lesson &rhs)//输入成绩
	{
		string tmp;
		for (int i = 0; i<rhs.n; i++)
		{
			cout << "请输入" << rhs.lesson[i].L_name << "的成绩:";
			is >> tmp;
			rhs.lesson[i].grade = atoi(tmp.c_str());//成绩从字符转整形
		}
		return is;
	}
	friend ostream& operator<<(ostream& os, Lesson &rhs)//输出成绩
	{
		for (int i = 0; i<rhs.n; i++)
		{
			cout << "|" << rhs.lesson[i].L_name << "|\t   " << rhs.lesson[i].grade << "\t";
		}
		cout << endl;
		return os;
	}
	friend class student_Node;
	friend class student_List;
};
/*****************************************************************************************************************************/
Lesson L;//***********************************************************************************公共课程变量
class student_Node		//学生的信息类,存储学生的信息,并修改信息
{
private:
	string Name;		//姓名
	long Number;		//学号
	string Sex;			//性别
	string Academy;		//学院
	string Class;		//班级
	Lesson Less;        //课程
	student_Node *next;
public:
	student_Node(string na = "空", long num = 0, string sex = "男", string aca = "空", string cla = "空")		//对成绩和姓名所以成员都进行初始化??需要优化?
		:Less(L)
	{
		SetName(na);
		SetNumber(num);
		SetSex(sex);
		SetAcademy(aca);
		SetClass(cla);
		next = NULL;
	}
	~student_Node()					//析构
	{
		Name = ""; Number = 0; Sex = ""; Academy = ""; Class = ""; next = NULL;
	}
	student_Node& operator =(const student_Node&rhs)
	{
		Name = rhs.Name;
		Number = rhs.Number;
		Sex = rhs.Sex;
		Academy = rhs.Academy;
		Class = rhs.Class;
		Less = rhs.Less;//这里又调用课程类的赋值函数
		return *this;
	}
	void SetName(string name)		//设置名字
	{
		Name = name;
	}
	void SetNumber(long num)		//设置学号
	{
		Number = num;
	}
	void SetSex(string sex)			//设置性别
	{
		Sex = sex;
	}
	void SetAcademy(string acad)	//设置学院
	{
		Academy = acad;
	}
	void SetClass(string cla)		//设置班级
	{
		Class = cla;
	}
	void SetLesson()				//单人课程设置
	{
		Less.SetPersonLesson();
	}
	friend istream& operator >> (istream&is, student_Node &rhs)//输入数据
	{
		string tmp;
		long num;
		cout << "请输入姓名:";		//输入名字,到临时变量中,然后通过设置函数设置好成员中的名字,下面的都相同
		is >> tmp;
		rhs.SetName(tmp);
		cout << "请输入学号:";
		is >> tmp;
		num = atol(tmp.c_str());		//字符型转化为长整形(解决了输入字符时会出现的bug)
		rhs.SetNumber(num);
		cout << "请输入性别:";
		is >> tmp;
		rhs.SetSex(tmp);
		cout << "请输入学院:";
		is >> tmp;
		rhs.SetAcademy(tmp);
		cout << "请输入班级:";
		is >> tmp;
		rhs.SetClass(tmp);
		is >> rhs.Less;				//输入课程
		return is;
	}
	friend ostream& operator<<(ostream&os, student_Node &rhs)//输出数据
	{
		cout << left << setw(8) << rhs.Name << left << setw(15) << rhs.Number << left << setw(8) << rhs.Sex << left << setw(10) << rhs.Academy << left << setw(10) << rhs.Class << left << setw(8) << rhs.Less.ReturnMount_s() << left << setw(8) << rhs.Less.ReturnAverg_s() << endl;

		cout << rhs.Less << endl;		//输出课程
		return os;
	}
	friend class  student_List;		//友元类设置
};
/*******************************************************************************************************************/
class student_List					//学生的信息链表类,主要进行链表的操作,查找输出
{
private:
	student_Node *head;
public:
	student_List()					//学生链表的初始化,建立头结点,并从文件中读取信息建立链表
	{
		head = new student_Node;
		head->next = NULL;
		ifstream ifs(filename);
		if (!ifs)					//如果文件不存在
		{
			Filewrite();			//建立文件
		}
	}
	~student_List()
	{
		student_Node *p = head->next, *q;
		while (p != NULL)
		{
			q = p;
			p = p->next;
			delete q;
		}
		delete head;
	}
	void Fileread()					//读取文件中的信息建立链表
	{
		ifstream ifs(filename);
		if (!ifs)
		{
			cout << "文件打开失败" << endl;
			exit(0);
		}
		student_Node *q = head;
		while (ifs.peek() != EOF)		//判断是否读取到文件末尾了 采用这个peek函数而不采用ifs.eof()是防止文件为空时还进入循环
		{
			student_Node *p = new student_Node;
			ifs >> p->Name
				>> ws
				>> p->Number
				>> ws
				>> p->Sex
				>> ws
				>> p->Academy
				>> ws
				>> p->Class
				>> ws;
			ifs >> p->Less.n >> ws;
			for (int i = 0; i<p->Less.n; i++)
				ifs >> p->Less.lesson[i].L_name >> ws >> p->Less.lesson[i].grade >> ws;
			p->Less.SetA_M();
			q->next = p;
			p->next = NULL;
			q = p;
		}
	}
	void Filewrite()				//通过文件的读写将链表中的内容写到文件中
	{
		student_Node *p = head->next;
		ofstream ofs(filename);
		if (!ofs)
		{
			cout << "文件打开失败" << endl;
			exit(0);
		}
		while (p != NULL)
		{
			ofs << p->Name << '\t'
				<< p->Number << '\t' << p->Sex << '\t' << p->Academy << '\t' << p->Class
				<< endl;
			ofs << p->Less.n;
			for (int i = 0; i<p->Less.n; i++)
				ofs << '\t' << p->Less.lesson[i].L_name << '\t' << p->Less.lesson[i].grade;
			ofs << endl;
			p = p->next;
		}
		ofs.close();
	}
	/**********************************     操作部分    ***********************************/
	void Putin(int n = 1)			//输入,参数的含义是区别与是操作1的输入还好插入函数....默认是输入函数
	{
		char x = '0';
		int i = 1;				//计数
		int num_0, num_1;//插入位置
		student_Node *q;
		if (n == 1)				//这是操作输入数据是需要的,如果插入数据则不需要
		{
			cout << "是否清空原来数据 0.是的 1.不,添加进去 3.返回 ";
			cin >> x;
			if (x == '1')//添加进去
			{
				Fileread();				//读取文件形成链表
				Putin(0);				//参数的改变,就是插入函数的调用
				return;
			}
		}
		if (x == '0')
		{
			while (x == '0')
			{
				cout << i++ << endl;
				student_Node *p = new student_Node;
				cin >> *p;
				if (n != 3)//节点的插法
				{
					p->next = head->next;
					head->next = p;
				}
				else//节点的任意位置插入
				{
					Display(2);
					cout << "----------------------------------------------------------------" << endl;
					cout << "请选择插入位置:";
					cin >> x;
					num_0 = x - '0';
					q = head;
					num_1 = 0;//寻找位置
					while (q->next != NULL)
					{
						num_1++;
						if (num_0 == num_1)
							break;
						q = q->next;
					}
					p->next = q->next;
					q->next = p;
					Display(2);
				}
				cout << "请问是要继续么?(0.是 1.不是) ";
				cin >> x;
				cout << "----------------------------------------------------------------" << endl;
			}
			Filewrite();
		}
	}
	void Display(int x = 1)				//显示输出cout<<left<<setw(40)<<"靠左输出"<<left<<setw(35)<<"靠左输出"<<endl;
	{
		if (x == 1)
			Fileread();
		cout << left << setw(5) << "·序号·" << left << setw(8) << " ·姓名·" << left << setw(15) << " ·学号·" << left << setw(8) << "·性别·" << left << setw(10) << "·学院·" << left << setw(10) << "·班级·" << left << setw(8) << "|总分|" << left << setw(8) << "|平均分|" << endl << endl;
		student_Node *p = head->next;
		int i = 1;
		while (p != NULL)
		{
			cout << left << setw(3) << " " << left << setw(3) << i++ << "    " << *p;
			p = p->next;
		}
		cin.get();
		cin.get();
	}
	void Insert()				//插入(添加)
	{
		Fileread();				//读取文件形成链表
		Putin(3);				//参数的改变,就是插入函数的调用

	}
	void Delete()				//删除
	{
		Find(2);
		Filewrite();		//写入文件
	}
	void Find(int i = 1)			//查找
	{
		Fileread();//读取文件形成链表
		char x = '0';
		while (x == '0')
		{
			cout << "选择查找方式:1.姓名  2.学号  3.学院   0.返回";
			cin >> x;
			switch (x)
			{
			case '1':
				Find_01name(i);
				break;
			case '2':
				Find_02number(i);
				break;
			case '3':
				Find_03academy(i);
				break;
			case '0':return;
			default:
				cout << "选择错误!!!";
			}
			cout << "是否继续查找 0.继续 1.不了  ";
			cin >> x;
		}
	}
	void Find_01name(int x = 1)	//查找名字 参数 1.查找 2.删除 3.修改
	{
		int i = 0;
		string na;
		char x_0 = '1';
		student_Node *p = head->next, *q = head;
		cout << "请输入要查找的姓名:";
		cin >> na;
		cout << left << setw(5) << "·序号·" << left << setw(8) << " ·姓名·" << left << setw(15) << " ·学号·" << left << setw(8) << "·性别·" << left << setw(10) << "·学院·" << left << setw(10) << "·班级·" << left << setw(8) << "|总分|" << left << setw(8) << "|平均分|" << endl << endl;
		while (p != NULL)
		{
			if (p->Name == na)
			{
				cout << left << setw(3) << " " << left << setw(3) << i++ << "    " << *p;
				if (x == 2)//删除数据
				{
					cout << "是否删除这条数据 0.是 1.否";
					cin >> x_0;
					if (x_0 == '0')
					{
						q->next = p->next;
						delete p;
						p = q;
					}
				}
				if (x == 3)//修改数据
				{
					cout << "是否修该这条数据 0.是 1.否";
					cin >> x_0;
					if (x_0 == '0')
					{
						Modify_small(p);
					}
				}
			}

			q = p;
			p = p->next;
		}cout << "-------------------------------------------------------" << endl;
		if (i == 0)
			cout << "你能认真点么,没有需要的数据" << endl;
	}
	void Find_02number(int x = 1)//学号查找
	{
		int i = 0;
		long num;
		string tmp;
		char x_0 = '1';
		student_Node *p = head->next, *q = head;
		cout << "请输入要查找的学号:";
		cin >> tmp;
		num = atol(tmp.c_str());
		cout << left << setw(5) << "·序号·" << left << setw(8) << " ·姓名·" << left << setw(15) << " ·学号·" << left << setw(8) << "·性别·" << left << setw(10) << "·学院·" << left << setw(10) << "·班级·" << left << setw(8) << "|总分|" << left << setw(8) << "|平均分|" << endl << endl;
		while (p != NULL)
		{
			if (p->Number == num)
			{
				cout << left << setw(3) << " " << left << setw(3) << i++ << "    " << *p;
				if (x == 2)//删除数据
				{
					cout << "是否删除这条数据 0.是 1.否";
					cin >> x_0;
					if (x_0 == '0')
					{
						q->next = p->next;
						delete p;
						p = q;
					}
				}
				if (x == 3)//修改数据
				{
					cout << "是否修该这条数据 0.是 1.否";
					cin >> x_0;
					if (x_0 == '0')
					{
						Modify_small(p);
					}
				}
			}
			q = p;
			p = p->next;
		}
		cout << "-------------------------------------------------------" << endl;
		if (i == 0)
			cout << "你能认真点么,没有需要的数据" << endl;
	}
	void Find_03academy(int x = 1)//学院查找
	{
		int i = 0;
		string tmp;
		char x_0 = '1';
		student_Node *p = head->next, *q = head;
		cout << "请输入要查找的学院:";
		cin >> tmp;
		cout << left << setw(5) << "·序号·" << left << setw(8) << " ·姓名·" << left << setw(15) << " ·学号·" << left << setw(8) << "·性别·" << left << setw(10) << "·学院·" << left << setw(10) << "·班级·" << left << setw(8) << "|总分|" << left << setw(8) << "|平均分|" << endl << endl;
		while (p != NULL)
		{
			if (p->Academy == tmp)
			{
				cout << left << setw(3) << " " << left << setw(3) << ++i << "    " << *p;
				if (x == 2)
				{
					cout << "是否删除这条数据 0.是 1.否";
					cin >> x_0;
					if (x_0 == '0')
					{
						q->next = p->next;
						delete p;
						p = q;
					}
				}
				if (x == 3)//修改数据
				{
					cout << "是否修该这条数据 0.是 1.否";
					cin >> x_0;
					if (x_0 == '0')
					{
						Modify_small(p);
					}
				}
			}
			q = p;
			p = p->next;
		}
		cout << "-------------------------------------------------------" << endl;
		if (i == 0)
			cout << "你能认真点么,没有需要的数据" << endl;
	}
	void Modify()		//修改             界面里加上一些划线增加美观度
	{
		Find(3);
		Filewrite();		//写入文件
	}
	void Modify_small(student_Node *p)
	{
		char a = '0';
		string tmp;
		long num;
		while (a == '0')
		{
			cout << "-------------------------------------------------------" << endl;
			cout << "请选择修改选项   1.姓名 2.学号 3.性别 4.学院 5.班级 6.成绩";
			cin >> a;
			cout << "-------------------------------------------------------" << endl;
			switch (a)
			{
			case '1':
				cout << "输入名字:";
				cin >> tmp;
				p->SetName(tmp);
				break;
			case '2':
				cout << "输入学号:";
				cin >> tmp;
				num = atol(tmp.c_str());
				p->SetNumber(num);
				break;
			case '3':
				cout << "输入性别:";
				cin >> tmp;
				p->SetSex(tmp);
				break;
			case '4':
				cout << "输入学院:";
				cin >> tmp;
				p->SetAcademy(tmp);
				break;
			case '5':
				cout << "请输入班级:";
				cin >> tmp;
				p->SetClass(tmp);
				break;
			case '6':
				p->SetLesson();//修改课程
				break;
			default:
				cout << "你可爱哦,输错啦,亲~" << endl;
			}
			cout << *p;
			cout << "-------------------------------------------------------" << endl;//美化视觉效果
			cout << "是否继续修改其他选项 0.继续 1.不了";
			cin >> a;
		}
	}
	void Sort()			//排序
	{
		Fileread();
		char t = '0';
		while (t == '0')
		{
			cout << "------------------------------------------------------------" << endl;
			cout << "1.学号 2.单科成绩 3.总成绩 0.返回";
			cin >> t;
			switch (t)
			{
			case '1':
				Sort_small(1); break;//学号排序
			case '2':
				Sort_small(2); break;//单科成绩排序
			case '3':
				Sort_small(3); break;//总成绩排序
			default:
				Filewrite();//
				return;
			}
			Display(0);
			cout << "是否继续排序 0.继续 1.不了,并保存结果";
			cin >> t;
		}
		Filewrite();		//写入文件
	}
	void Sort_small(int i = 1)//排序函数分支,根据参数的不同进行不同选项的排序1.默认学号 2.单科成绩 3.总成绩  
	{
		char t; int x;
		if (i == 2)//单科成绩排序时输出
		{
			L.Dislesson();//显示公共课程
			cin >> t;
			x = t - '0';//课程的下标
			if (x>L.n || x<0)
			{
				cout << "选择错误" << endl;
				return;
			}
		}
		cout << "1.递增 2.递减";
		student_Node *p1, *p2;
		student_Node tmp;
		int flag = 1;
		cin >> t;
		while (1)//冒泡排序
		{
			flag = 1;
			p1 = head->next; p2 = p1->next;
			while (p2 != NULL)
			{
				switch (t)
				{
				case '1':
					if (i == 3)//总分排序
						if (p1->Less.Mount_s>p2->Less.Mount_s)
						{
							tmp = *p1;
							*p1 = *p2;
							*p2 = tmp;
							flag = 0;
						}
					if (i == 2)//成绩排序
						if (p1->Less.lesson[x - 1].grade>p2->Less.lesson[x - 1].grade)
						{
							tmp = *p1;
							*p1 = *p2;
							*p2 = tmp;
							flag = 0;
						}
					if (i == 1)//学号排序
						if (p1->Number>p2->Number)
						{
							tmp = *p1;
							*p1 = *p2;
							*p2 = tmp;
							flag = 0;
						}; break;
				case '2':
					if (i == 3)//总分排序
						if (p1->Less.Mount_s<p2->Less.Mount_s)
						{
							tmp = *p1;
							*p1 = *p2;
							*p2 = tmp;
							flag = 0;
						}
					if (i == 2)//成绩排序
						if (p1->Less.lesson[x - 1].grade<p2->Less.lesson[x - 1].grade)
						{
							tmp = *p1;
							*p1 = *p2;
							*p2 = tmp;
							flag = 0;
						}
					if (i == 1)//学号排序
						if (p1->Number<p2->Number)
						{
							tmp = *p1;
							*p1 = *p2;
							*p2 = tmp;
							flag = 0;
						}; break;
				default:
					break;
				}

				p1 = p1->next;
				p2 = p2->next;
			}
			if (flag == 1)
				break;
		}
	}
	void Cal()			//计算各个学科总成绩和平均成绩   需要强大其功能
	{
		Fileread();
		cout << "-------------------------------------------------------------------" << endl;
		cout << left << setw(10) << "科目" << left << setw(10) << "总分" << left << setw(10) << "平均分" << left << setw(10) << "通过率" << endl;//三个空格
		for (int i = 0; i<L.n; i++)
			Cal_small(L.lesson[i].L_name);
		cin.get(); cin.get();
	}
	void Cal_small(string na)
	{
		student_Node *p = head->next;
		int num_1 = 0, num_n = 0, num_p = 0;
		while (p != NULL)
		{
			for (int i = 0; i<p->Less.n; ++i)
			{
				if (p->Less.lesson[i].L_name == na)
				{
					num_n++;//总人数
					num_1 = num_1 + p->Less.lesson[i].grade;
					if (p->Less.lesson[i].grade >= 60)
						num_p++;//通过人数
					break;
				}
			}
			p = p->next;
		}
		cout << left << setw(10) << na << left << setw(10) << num_1 << left << setw(10) << num_1 / num_n << left << setw(3) << (float)num_p / (float)num_n * 100 << "%" << endl;
	}
	float Grade_fail(string name, int grade)		//计算成绩打败全校的百分比
	{
		int num_1 = 0, num_2 = 0;
		float num;
		student_Node *p = head->next;
		while (p != NULL)
		{
			for (int i = 0; i<p->Less.n; i++)
			{
				if (name == p->Less.lesson[i].L_name)//计算选这门课的人
				{
					num_1++;
					if (p->Less.lesson[i].grade <= grade)
						num_2++;//比你分数差的人人数
					break;
				}
			}
			p = p->next;
		}
		num = (float)num_2 / (float)num_1 * 100;//类型转换
		return num;
	}
	void student_pass(string na, string num)		//学生登陆情况
	{
		Fileread();
		student_Node *p = head->next;
		while (p != NULL)
		{
			if (p->Name == na&&p->Number == atol(num.c_str()))
				break;
			p = p->next;
		}
		if (p == NULL)
		{
			cout << "没有这个学生啊!!!!";
			cin.get(); cin.get();
			return;
		}
		int i = 0;
		system("cls");
		cout << endl << endl << "我是" << p->Name << ",我的编号是" << p->Number << ",性别" << p->Sex << ",现在在" << p->Academy << p->Class << "班,深藏功与名~" << endl << endl;
		cout << left << setw(15) << "学科" << " 成绩" << endl;
		cout << "-------------------------------------------------------------------------" << endl;
		for (i = 0; i<p->Less.n; i++)
		{
			cout << left << setw(15) << p->Less.lesson[i].L_name << " " << p->Less.lesson[i].grade << "          我打败了全校" << Grade_fail(p->Less.lesson[i].L_name, p->Less.lesson[i].grade) << "%的人" << endl;
			cout << "-------------------------------------------------------------------------" << endl;
		}
		cin.get(); cin.get();
	}
};
const string Pass_word = "123456";//教师登陆密码
void Meue_studentpass()//学生登陆
{
	student_List B;
	string na, num;
	cout << "\n\n                           请输入学号:";
	cin >> num;
	cout << "                           请输入名字:";
	cin >> na;
	B.student_pass(na, num);
}
void Meue()				//主菜单界面
{
	while (1)
	{
		system("cls");
		cout << "\n\n\n\n\n";
		cout << "             ★★★老师我超级爱您的,为您跳大神   ★★★ " << endl;
		cout << "                    ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁" << endl;
		cout << "                    ▏                            ▕" << 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 << "                    ▏        9.计算              ▕" << endl;
		cout << "                    ▏        0.退出登陆          ▕" << endl;
		cout << "                    ▏                            ▕" << endl;
		cout << "                    ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔" << endl;
		student_List A;//建立链表,初始化
		char t;
		cin >> t;
		system("cls");
		switch (t)
		{
		case '1':
			A.Putin();
			break;
		case '2':
			A.Display();
			break;
		case '3':
			L.SetPbulicLesson();
			break;
		case '4':
			A.Insert();
			break;
		case '5':
			A.Find();
			break;
		case '6':
			A.Delete();
			break;
		case '7':
			A.Modify();
			break;
		case '8':
			A.Sort();
			break;
		case '9':
			A.Cal(); break;
		case '0':return;
		default:
			break;
		}
	}
}
void Welcome()			//开始的登陆界面
{
	system("cls");

	cout << "\n\n\n\n\n\n";
	cout << "                            ☆学生成绩管理系统☆" << endl;
	cout << "                                              anthor:Codebowl" << endl;
	cout << "                           ▇▇▇▇▇▇▇▇▇▇▇" << endl;
	cout << "                           ★                  ★" << endl;
	cout << "                           ★    1.教师登录    ★" << endl;
	cout << "                           ★    2.学生登录    ★" << endl;
	cout << "                           ★    0.退   出     ★" << endl;
	cout << "                           ★                  ★" << endl;
	cout << "                           ▇▇▇▇▇▇▇▇▇▇▇";
	char x;
	string tmp;
	cin >> x;
	switch (x)
	{
	case '0':exit(0);
	case '1':
		cout << "\n\n                           请输入密码:";
		cin >> tmp;
		if (tmp == Pass_word)					//判断是否通过密码
			Meue();
		break;
	case '2':
		Meue_studentpass();
		break;
	}
	//_sleep(2*1000);//延时命令
}
int main()
{
	while (1)
		Welcome();
	return 0;
}

获得成就

学妹好感度+10
老师好感度+5(创新分)

之后,学妹工具人CodeBowl,还会分享很多计算机相关的课程和C++的内容哦,谁让我的小学妹,问题那么多呢。

最后想一下这许诺了俩年的饭,啥时候约的上啊。
在这里插入图片描述

Virtualbox “Kernel driver not installed (rc=-1908)”问题全面解析与修复指南 本文全面解析了Virtualbox出现'Kernel driver not installed (rc=-1908)'错误的原因及修复方法。详细介绍了如何通过重新安装virtualbox-dkms、处理Secure Boot特殊情况等步骤解决该问题,并提供了预防措施与最佳实践,帮助用户避免类似错误再次发生。 阅读详情

相关推荐

Office LTSC 2021/2024专业部署:ODT+config.xml标准化实战

Office部署本质上是企业终端软件生命周期管理的关键环节,其核心原理在于通过声明式配置驱动安装、激活与组件裁剪。Office Deployment Tool(ODT)作为微软官方命令行引擎,配合config.xml这一DSL契约文件,实现可版本控制、可审计、可回滚的自动化交付。该方案技术价值突出体现在稳定性保障(如LTSC长期支持通道)、合规性强化(不绕过授权机制)及运维提效(批量部署、离线支持)。典型应用场景覆盖教育机房批量装机、政企终端标准化、医疗HIS工作站部署等对功能冻结与系统确定性要求严苛的环境

diaocuiguo2493的博客 561

十分钟带你做一个学生管理系统

1.学生管理系统 目录 1.学生管理系统 1.2 学生管理系统实现思路: 1.3 定义学生类 1.4 主界面的代码编写 1.5添加学生代码编写 1.6查看学生代码编写 1.8 删除学生代码编写 1.9 修改学生的代码编写 1.10解决删除/修改学生学号不存在问题 全部代码: 1.2 学生管理系统实现思路: 1. 定义学生类 2. 主界面的代码编写 3.添加学生代码编写 4. 查看学生代码编写 5. 删除学生代码编写 6. 修改学生代码编写 1.3 定义学生类

鱼干的博客 1万+

【动态规划】背包问题(详细总结,很全)

暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!背包问题是动态规划(Dynamic Planning) 里的非常重要的一部分,关于几种常见的背包,其关系如下:在解决背包问题的时候,我们通常都是按照如下五部来逐步分析,把这五部都搞透了,算是对动规来理解深入了。二维dp数组01背包,先遍历物品还是先遍历背包都是可以的,且第二层for循环是从小到大遍历一维dp数组01背包,只能先遍历物品再遍历背包容量,且第二层for循环是从大到小遍历。求组合数:外层遍历物品,内层遍历背包。

m0_51370744的博客 4万+

如何规划和快速完成学生信息管理系统

学生信息管理系统,是我们遇到的第一个比较完成的系统型项目。这个也是一个比较简单的一个项目,麻雀虽小五脏俱全。官方规定的完成时间是一周,但是同学们一般计划完成的时间一般都是在一个月,很少有人能在一个星期内完成这个项目。 想要快速在一个星期内完成,只需要做好这两大部就OK。 一、理清逻辑结构,按步骤划分时间 在正式开始敲代码之前,必须理清进行学生管理系统有哪几个步骤? 1.做什么(一天) 明白学生管理...

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 739

CANoe之UDS诊断自动化测试(四):创建诊断自定义Panel发送诊断(替代Session Control窗口)

通过自定义的Panel界面实现诊断发送的功能,并且还可以根据自己的测试需求添加需要的诊断信息,使用非常灵活。

weixin_69677286的博客 1905

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

552

数据库课程设计之《学生成绩管理系统》

1、技术类型 java JDBC swing mysql 2、搭建环境 windows10 maven 3.6.1 IDEA 2021.1 mysql 5.7.19 Sqlyog (也可采用sql server 、Navicat等数据库管理工具,当然在IDEA中也可进行配置mysql驱动进行管理,以上方式均可) 以上只是我的开发环境,大家不用刻意关注版本问题,基本都可运行 3、数据库准备 字段 准备两个数据库表,一个用于登录验证,一个用于学生信息展示 将下列代码在sqlyog中运行即可 -

Augenstern_QXL的博客 2万+

CAN接受和发送失败的原因有哪些---之前调试MCP2515驱动时,数据一直发不出去,三个发送邮箱都被占满.至今未解决,读寄存器-总线错误

0.CAN总线错误分析与解决–讲的最精辟的放在最前面 我们知道CAN总线上的每个节点往总线上发送数据的同时会同时读取总线上的数据,并与自己发送的数据作对比。—CAN仲裁??? CAN总线错误分别有发送和接收错误计数,计数达到一定的累计以后就会产生CAN BUS OFF, 这说明CAN总线上出现了严重的错误。如下图CAN总线产生错误后的状态转换机制 如果出现了BUS OFF,总线上的节点需要做一些动作,例如重启CAN控制器或是重新上电,但是这些都只是一些补救措施,最根本的还是需要找到引起BUS OFF的根源

dianqicyuyan的博客 2万+

《数据结构》第二章 线性表 教学设计1

一、课前预习任务 学习资料     资料1. 教材第一章Page 1-16     资料2. 辅导材料第一章Page 3-8     资料3. 三个教学个视频     资料4. 三个教学PPT文档 学习任务     根据前面学习,课前任务简化一些,将全部使用“4题制”:3个课前作业,1个课后升级作业。 1、学习资料1和资料2,即学习课本和辅导教材,看3个教学视频(视频

明哥的专栏 3242

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1684

HSM 网络安全 信息安全

HSM HSM信息安全功能 汽车电子网络安全中HSM 的应用场景 选择适合汽车电子网络安全的 HSM 符合汽车安全标准和法规要求的HSM HSM 在汽车电子网络安全中的可靠性和安全性 评估汽车电子网络的安全性 汽车 HSM(Hardware Security Module)模块开发 汽车 HSM(Hardware Security Module)模块测试

天赐好车的博客 1240

【毕设避坑指南】选题定生死!计算机专业老学长掏心窝的分享(附百个精选题目+源码)

作为一名参与过1000+计算机毕设项目的技术顾问,我见过太多学生因选题失误导致延期答辩、项目烂尾。今天不谈虚的,只讲干货——用5分钟看完这篇,让你避开毕设90%的坑!💡 先看两组真实对比:✅ 明智之选:"基于SpringBoot+Vue的智能垃圾分类系统"(技术栈成熟、数据易获取、创新点明确)❌ 作死行为:"基于量子计算的深度学习推荐系统"(概念超前、实现难度地狱级、答辩老师都看不懂)如果你现在正为选题头疼,或者担心选到"天坑项目",请花3分钟看完这篇凝聚了上百个答辩现场经验总结的终极指南!

毕业设计指南|全栈技术专栏|合作招募详情 943

s8654

The official Snapdragon Ride SX 4.0 development board provides standardized hardware support for the secondary development and functional verification of the s8654 platform.

qq_39257814的博客 6835

Python作业实战:函数封装与文件操作技巧

函数封装和文件操作是Python编程的核心基础,通过模块化设计可以提高代码复用性和可维护性。在数据处理场景中,合理的文件读写策略能有效保障数据持久化的可靠性,例如使用with语句自动管理资源、处理权限异常等典型问题。Python的字典推导式和collections模块为数据统计提供了高效工具,特别适合学生成绩分析等教育场景。本文以常见的作业项目为例,详解如何通过异常处理、输入验证和内存优化等工程实践,构建健壮的控制台应用程序。针对文件编码、依赖管理等开发痛点,给出了跨平台兼容的解决方案。

weixin_34288121的博客 354

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

二级C++模拟软件实战:从环境配置到自动化评测的完整指南

C++编程学习与考试准备中,环境配置、算法实现和调试能力是关键。理解编译原理、内存管理和自动化评测系统(OJ)的工作原理,能有效提升编程实战能力。通过模拟真实考试环境,结合自动化评测核心,学习者可以在安全沙箱中练习高频算法(如中缀表达式转后缀表达式),并掌握指针、文件操作等核心概念。本文聚焦于构建C++模拟评测系统,探讨如何利用Docker容器实现环境隔离,通过Python脚本自动化编译、执行与结果比对,从而为全国计算机等级考试二级C++提供高效的实战训练方案,帮助考生从“能运行”到“得满分”跨越。

weixin_33691700的博客 327

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

两天时间用java做了个学生管理系统

首先需要的工具是idea,然后是javase

weixin_45247609的博客 231

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

终于完成了一个小型系统---学生信息管理系统

 终于独立完成了一个小型系统   源程序下载地址:http://download.youkuaiyun.com/source/1882891<a id="contentAuthorHref" class="c_tx3 q_namecard" onclick="function onclick(){function onclick(){QZBl

rgbaflf的专栏 1876

第一次写好紧张啊!!!!作为初学者的一个学生信息管理系统,不足很多,请多多指教!!

package com.softeem.project4; import java.io.Serializable; public class Student implements Serializable{ int id; String name; String sex; int age; public Student(){ } public Student(int id

i_needknowl的博客 1482

用C写一个学生信息管理系统所要学的一些东西

首先就要去学C语言控制台程序界面编程,这个东西我一开始准备在电脑上找视频资源去学习,但由于这是一种被时代淘汰了的东西,所以网上并没有什么好的资源。 后来通过自己的百度和他人推荐的博客,慢慢的才开始学习了一些这个东西 对这个的感觉就是这是一种对C语言学习的深化,必须要先学好学踏实C才能够看懂一些东西,然后还有很多东西其实博客里讲的也不是很明白,这个又得自己花时间去百度去找C语言的实体书才能够清晰。 ...

dd121_的博客 1651

学生成绩管理系统(简易版)

写一个简单的学生成绩管理系统 为了方便,并且这个程序也不是很长,所以把所有代码写在一起了,下面是头文件和声明部分: #include<stdio.h> #include<string.h> #include<stdlib.h> #define SIZE 20 typedef struct Student * List; void over(); ...

TeqGin的博客 3626

一个简单的学生成绩管理系统(我的第一篇博客)

学生成绩管理系统Demo,android+servlet(前端+后台) 一个简单的学生成绩管理系统 Hello,这还是自己第一次写博客,有点小激动~ 一个完美的系统的展现是源于知识的积累沉淀,感觉自己还是个android知识小白,虽然这个管理系统不是那么完善,但是也花了一些时间,分享给大家,请大家多多指教哈~ 我这次使用的是androidstudio和intelliJ IDES,这个系统分为教师和...

qq_41996971的博客 3946

python:学生信息管理系统

本篇文章详细讲解学生信息管理系统制作。 首先要做一个系统首先要明确这个系统要有什么功能,需要进行怎样的设计。对于一个系统应该怎样去做: 那么先对学生信息管理系统进行一个需求分析:学生管理系统应具备的功能:系统功能结构 学生信息管理系统的七大模块 录入学生信息模块 查找学生信息模块 删除学生信息模块 修改学生信息模块 学生成绩排名模块 统计学生总人数模块 显示全部学生信息模块.........

qq_61380148的博客 3万+

学生成绩管理管理系统

学生成绩管理管理系统 一,需求分析 1、编写目的 为了明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档。本文档供项目经理、设计人员、开发人员参考。 2、项目背景 使用计算机对学生信息进行管理,拥有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、成本低等。这些优点能够极大地提高学生信息的效率,也是管理科学化、正规化的重要支撑。 学生信息管理系统能够方便地查询和变更学生的基本数据(包括学籍数据和成绩数据),节省大量工作时间,有效地提高学生信息管理的效率。而查询信息的直观显

Sumarua的博客 5万+
下一篇: 零基础用c++实现诺基亚上的贪吃蛇,我惊呼爷青回!
CodeBowl
博客等级 码龄5年 7664粉丝 67原创
评论 62
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值