C++学生管理系统

这篇具有很好参考价值的文章主要介绍了C++学生管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

系统要求

实现简介及其优点

C++代码

头文件

Student头文件

User头文件

源文件

Student源文件

User源文件

主函数源文件

结果展示

代码改进方法


系统要求

  1. 学生成绩管理系统中不同使用单位(用户)的学生人数事先无法确定。
  2. 该学生成绩管理系统要求有学生成绩录入,查询,修改,删除,保存文件。
  3. 系统使用文字菜单,用户通过选择菜单项的编号,实现系统对子模块的调用。也可用windows界面下的菜单栏、弹出式菜单、下拉菜单。
  4. 每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件。该文本文件名由班级号和课程名拼音字符串构成。输入班级号和课程名字符串后自动生成文件名。如1班,语文,则文件名为:c1yuwen.txt。
  5. 每个学生学习的课程有语文,英语,数学,物理,化学,生物。
  6. 学生的成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评成绩).总评成绩由程序自动计算,总评成绩=平时成绩×30%+期末成绩×70%。
  7. 学号是一个9位整数构成的字符串, 学号的编码规则:入学年份+在读年级+在读班级+班内编号;入学年份用4位整数构成字符串,如2015年入学则表示为:”2015”;在读年级用1位整数构成字符串,如正在1年级读书则表示为:”1”;在读班级用2位整数构成字符串,如正在1班读书则表示为:”01”;班内编号用2位整数构成字符串,如在班内编号为23号则表示为:”23”。

实现简介及其优点

       本次设计主要采用类,结构体和链表结合的方式实现。结构体,作用一,因为有多个学科,例如语文,数学,英语等等,每个学科里面又包含了平时成绩,期末成绩和总成绩,十分复杂,所以利用结构体的方式以学科为单位,用struct结构体进行封装,结构体学科内部包含平时成绩,期末成绩和计算机计算的总成绩;作用二,由于系统需要账号才可以访问,所以创建一个结构体,以单个老师/管理员为单位,对注册的老师/管理员信息进行封装。类,分别定义了student类和user类,student封装学生的信息,封装了需要实现的功能,例如添加学生,删除学生,查询学生成绩等功能。类的形式使得代码整体看起来更加简洁,思路更加清晰;user类主要为了封装管理员和教师信息和创建管理员功能,如添加教师,删除教师,查询教师信息等功能。链表,为了分别记录学生,教师,管理员信息,分别创建链表,将信息链接起来,访问时,遍历即可,链表的优点在于只要是内存足够,可以无限添加学生信息,如果是采用数组的方式将定义固定创建的数量,如果想扩充,还需要利用copy函数,将数组扩容,此外,如果利用数组进行删除学生、或者教师信息时,会造成内存资源的浪费,如果将数组数据移动,则会影响效率,综上,选择了链表进行储存信息。在录入完成全部的信息后利用fstream库将信息保存到记事本中。

C++代码

头文件

Student头文件

#ifndef Student_h
#define Student_h

#include <string>
#include <fstream>
using namespace std;

struct couse
{
	string cousename;
	int usual_performance;   //平时成绩
	int end_performance;     //期末成绩
	double fin_performance;    //总成绩
	double intfin_performance(couse &a);     //计算总成绩   平时成绩30%+期末成绩70%
};


typedef struct student {
	unsigned stu_id;    //学号
	string stu_name;    //姓名

	string couse;             //课程名
	struct couse Chinese;
	struct couse math;
	struct couse English;
	struct couse physics;
	struct couse chemistry;
	struct couse biology;

	student *stu_next = NULL;    //射线结构链表
} student;

class Student
{
public:
	Student();     //构造函数
	~Student();    //析构函数

	//录入学生信息
	student *createByStdin(int model, student &tmp); // 从标准输入中创建学生,model = 1: 不读取学号,2:不读取姓名,其他,读取所有信息。
	void logon(); // 连续录入学生信息


	//查找
	void Query() const; // 查询学生信息
	student *findById(unsigned id) const; // 根据学号查找
	student *findByName(const string &name) const; // 根据姓名查找


	//删除
	void deleteBy(); // 删除
	bool deleteById(unsigned &id); // 根据学号删除
	bool deleteByName(string &name); // 根据姓名删除

	//修改
	void modify(); // 修改
	bool modifyById(); // 根据学号修改
	bool modifyByName(); // 根据姓名修改


	//显示
	void Show() const; // 列出学生信息

	//文件操作
	void saveToFile(); // 保存到文件
	void readFile(); // 读取文件
	bool Student::insert(const student &astu);

	unsigned headCount() const;

	void findcouse();       //调出单科成绩

private:
	student *head;   //进入链表的指针
};
#endif 

User头文件

#ifndef USER_H
#define USER_H
#include<string>
using namespace std;

typedef struct user
{
	string m_name;              //用户名
	string m_password;          //密码
	user *next_user;            //链表
}user;

class User
{
public:
	User()
	{
		head = new user;
		head->m_name = "admin";
		head->m_password = "123";
		head->next_user = NULL;

	}
	~User()
	{
		user *p = head, *q;
		while (p)
		{
			q = p;
			p = q->next_user;
			delete q;
		}
	}
	user *findByName(const string &name) const;      //查找文件中的用户名
	void readFile();             //读取文件
	void saveFile();             //保存文件
	void login();                //注册函数
	bool logon();                //登陆函数
	unsigned headCount();          //结构计数函数
	bool insert(const user &astu);        //插入函数
	int deleteByName();      //删除函数
	void show();              //显示函数
	void findtailshowname(const string &name) const;          //根据姓名,发现具体老师
	void showtailshowname();                                   //输入姓名,查询具体老师
	user* FindByname(string &name);
	void data();                                                  //导出学科数据
	/*bool menutea();*/
private:
	user *head;
	//User *Head;
};

#endif 

源文件

Student源文件

#include "Student.h"
#include<iostream>
using namespace std;

string filename("untitled");
void show(student *p);
void Student::findcouse()
{
	cout << "请输入需要导出数据的科目名称" << endl;
	string name;
	cin >> name;
	if (name == "语文")
	{
		student *p;
		string new_file;
		cout << "请输入欲保存的文件名: ";
		cin >> new_file;
		fstream file;
		file.open(new_file.c_str(), ios::out);
		if (file.bad())
		{
			cout << "文件打开失败. " << endl;
			return;
		}
		int len = headCount();
		file << len << endl;
		student *pHead = head->stu_next;
		for (p = head; p->stu_next != NULL; p = p->stu_next)
		{

			file << pHead->stu_name << " ";
			file << "平均成绩:" << pHead->Chinese.usual_performance <<
				"期末成绩:" << pHead->Chinese.end_performance << " "
				<< "总成绩" << pHead->Chinese.fin_performance << endl;
		}
		file.close();
		cout << "录入完成" << endl;
	}
	if (name == "数学")
	{
		student *p;
		string new_file;
		cout << "请输入欲保存的文件名: ";
		cin >> new_file;
		fstream file;
		file.open(new_file.c_str(), ios::out);
		if (file.bad())
		{
			cout << "文件打开失败. " << endl;
			return;
		}
		int len = headCount();
		file << len << endl;
		student *pHead = head->stu_next;
		for (p = head; p->stu_next != NULL; p = p->stu_next)
		{

			file << pHead->stu_name << " ";
			file << "平均成绩:" << pHead->math.usual_performance <<
				"期末成绩:" << pHead->math.end_performance << " "
				<< "总成绩" << pHead->math.fin_performance << endl;
		}
		file.close();
		cout << "录入完成" << endl;
	}
	if (name == "英语")
	{
		student *p;
		string new_file;
		cout << "请输入欲保存的文件名: ";
		cin >> new_file;
		fstream file;
		file.open(new_file.c_str(), ios::out);
		if (file.bad())
		{
			cout << "文件打开失败. " << endl;
			return;
		}
		int len = headCount();
		file << len << endl;
		student *pHead = head->stu_next;
		for (p = head; p->stu_next != NULL; p = p->stu_next)
		{

			file << pHead->stu_name << " ";
			file << "平均成绩:" << pHead->English.usual_performance <<
				"期末成绩:" << pHead->English.end_performance << " "
				<< "总成绩" << pHead->English.fin_performance << endl;
		}
		file.close();
		cout << "录入完成" << endl;
	}
	if (name == "物理")
	{
		student *p;
		string new_file;
		cout << "请输入欲保存的文件名: ";
		cin >> new_file;
		fstream file;
		file.open(new_file.c_str(), ios::out);
		if (file.bad())
		{
			cout << "文件打开失败. " << endl;
			return;
		}
		int len = headCount();
		file << len << endl;
		student *pHead = head->stu_next;
		for (p = head; p->stu_next != NULL; p = p->stu_next)
		{

			file << pHead->stu_name << " ";
			file << "平均成绩:" << pHead->physics.usual_performance <<
				"期末成绩:" << pHead->physics.end_performance << " "
				<< "总成绩" << pHead->physics.fin_performance << endl;
		}
		file.close();
		cout << "录入完成" << endl;
	}
	if (name == "化学")
	{
		student *p;
		string new_file;
		cout << "请输入欲保存的文件名: ";
		cin >> new_file;
		fstream file;
		file.open(new_file.c_str(), ios::out);
		if (file.bad())
		{
			cout << "文件打开失败. " << endl;
			return;
		}
		int len = headCount();
		file << len << endl;
		student *pHead = head->stu_next;
		for (p = head; p->stu_next != NULL; p = p->stu_next)
		{

			file << pHead->stu_name << " ";
			file << "平均成绩:" << pHead->chemistry.usual_performance <<
				"期末成绩:" << pHead->chemistry.end_performance << " "
				<< "总成绩" << pHead->chemistry.fin_performance << endl;
		}
		file.close();
		cout << "录入完成" << endl;
	}
	if (name == "生物")
	{
		student *p;
		string new_file;
		cout << "请输入欲保存的文件名: ";
		cin >> new_file;
		fstream file;
		file.open(new_file.c_str(), ios::out);
		if (file.bad())
		{
			cout << "文件打开失败. " << endl;
			return;
		}
		int len = headCount();
		file << len << endl;
		student *pHead = head->stu_next;
		for (p = head; p->stu_next != NULL; p = p->stu_next)
		{

			file << pHead->stu_name << " ";
			file << "平均成绩:" << pHead->biology.usual_performance <<
				"期末成绩:" << pHead->biology.end_performance << " "
				<< "总成绩" << pHead->biology.fin_performance << endl;
		}
		file.close();
		cout << "录入完成" << endl;

	}
}

double couse::intfin_performance(couse &a)
{
	return (a.usual_performance*0.3 + a.end_performance*0.7);
}


Student::Student()
{
	head = new student;
	head->stu_id = 0;
	head->stu_name = "No name";
	head->stu_next = NULL;
}
Student::~Student()
{
	student *p = head, *q;
	while (p)
	{
		q = p;
		p = q->stu_next;
		delete q;
	}
}

//注册函数
void Student::logon()
{
	student tmp;
	cout << "学号 (0 结束输入 ): ";
	cin >> tmp.stu_id;

	while (tmp.stu_id)
	{
		if (findById(tmp.stu_id) == NULL)
		{
			tmp.Chinese.cousename = "语文";
			tmp.math.cousename = "数学";
			tmp.math.cousename = "英语";
			tmp.physics.cousename = "物理";
			tmp.chemistry.cousename = "化学";
			tmp.biology.cousename = "生物";

			cout << "姓    名: " << endl;
			cin >> tmp.stu_name;
			cout << "语    文: " << endl;
			cout << "平时成绩:" << endl;
			cin >> tmp.Chinese.usual_performance;
			cout << "期末成绩:" << endl;
			cin >> tmp.Chinese.end_performance;
			tmp.Chinese.fin_performance = tmp.Chinese.intfin_performance(tmp.Chinese);
			cout << "总成绩为:" << tmp.Chinese.fin_performance << endl;

			cout << endl;
			cout << "数    学: " << endl;
			cout << "平时成绩:" << endl;
			cin >> tmp.math.usual_performance;
			cout << "期末成绩:" << endl;
			cin >> tmp.math.end_performance;
			tmp.math.fin_performance = tmp.math.intfin_performance(tmp.math);
			cout << "总成绩为:" << tmp.math.fin_performance << endl;
			cout << endl;

			cout << "英    语 : " << endl;
			cout << "平时成绩:" << endl;
			cin >> tmp.English.usual_performance;
			cout << "期末成绩:" << endl;
			cin >> tmp.English.end_performance;
			tmp.English.fin_performance = tmp.English.intfin_performance(tmp.English);
			cout << "总成绩为:" << tmp.English.fin_performance << endl;
			cout << endl;

			cout << "物    理: " << endl;
			cout << "平时成绩:" << endl;
			cin >> tmp.physics.usual_performance;
			cout << "期末成绩:" << endl;
			cin >> tmp.physics.end_performance;
			tmp.physics.fin_performance = tmp.physics.intfin_performance(tmp.physics);
			cout << "总成绩为:" << tmp.physics.fin_performance << endl;
			cout << endl;
			cout << "化    学:" << endl;
			cout << "平时成绩:" << endl;
			cin >> tmp.chemistry.usual_performance;
			cout << "期末成绩:" << endl;
			cin >> tmp.chemistry.end_performance;
			tmp.chemistry.fin_performance = tmp.chemistry.intfin_performance(tmp.chemistry);
			cout << "总成绩为:" << tmp.chemistry.fin_performance << endl;
			cout << endl;
			cout << "生    物:" << endl;
			cout << "平时成绩:" << endl;
			cin >> tmp.biology.usual_performance;
			cout << "期末成绩:" << endl;
			cin >> tmp.biology.end_performance;
			tmp.biology.fin_performance = tmp.biology.intfin_performance(tmp.biology);
			cout << "总成绩为:" << tmp.biology.fin_performance << endl;
			cout << endl;

			insert(tmp);
		}
		else cout << "重复的学号: " << tmp.stu_id << endl;
		cout << "添加成功" << endl;
		cout << "学号 (0 结束输入): ";
		cin >> tmp.stu_id;
	}

}

//查找函数
void Student::Query() const {
	int select;
	unsigned id;
	string name;
	string sex;
	string email;
	student *p;
	cout << "1、按学号查询\n2、按姓名查询\n3、返回\n";
	cin >> select;
	switch (select)
	{
	case 1: cout << "请输入学号: "; cin >> id;
		if ((p = findById(id))) show(p->stu_next);
		break;
	case 2: cout << "请输入姓名: "; cin >> name;
		if ((p = findByName(name))) show(p->stu_next);
		break;
	case 3: return;
	default: cout << "选择错误. \n";
	}
}

student *Student::findByName(const string &name) const {
	student *p;
	for (p = head; p->stu_next; p = p->stu_next)
	if (p->stu_next->stu_name == name) return p;
	cout << "没有找到输入的姓名" << endl;
	return NULL;
}
student *Student::findById(unsigned id)  const
{
	student *p;
	for (p = head; p->stu_next; p = p->stu_next)
	if (p->stu_next->stu_id == id) return p;
	return NULL;
}

//删除函数
void Student::deleteBy() {
	int select;
	unsigned id;
	string name;
	cout << "1、按学号删除\n2、按姓名删除\n0、返回\n";
	cin >> select;
	switch (select)
	{
	case 1: cout << "请输入学号: "; cin >> id;
		deleteById(id);
		break;
	case 2: cout << "请输入姓名: "; cin >> name;
		deleteByName(name);
		break;
	case 0: return;
	default: cout << "选择错误. \n";
	}
}
bool Student::deleteById(unsigned &id) {
	student *q, *p;
	p = findById(id);
	if (p == NULL)
	{
		cout << "没有找到学号是 \"" << id << "\" 的学生,删除失败! \n";
		return false;
	}
	q = p->stu_next;
	p->stu_next = q->stu_next;
	delete q;
	cout << "成功删除 " << id << " 的信息. \n";
	return true;
}
bool Student::deleteByName(string &name) {
	student *q, *p;
	p = findByName(name);
	if (p == NULL) {
		cout << "没有找到姓名是 \"" << name << "\" 的学生, 删除失败! \n";
		return false;
	}
	q = p->stu_next;
	p->stu_next = q->stu_next;
	delete q;
	cout << "成功删除 " << name << " 的信息. \n";
	return true;
}

//修改函数
void Student::modify() {
	int select;
	cout << "1、按学号修改\n2、按姓名修改\n0、返回\n";
	cin >> select;
	switch (select) {
	case 1: if (modifyById()) cout << "修改成功. \n"; break;
	case 2: if (modifyByName()) cout << "修改成功. \n"; break;
	case 0: return;
	default: cout << "选择错误. \n";
	}
}
bool Student::modifyById()
{
	student *p;
	unsigned id;
	cout << "输入要修改的学号: ";
	cin >> id;
	p = findById(id);
	if (p == NULL)
	{
		cout << "没有找到学号是 \"" << id << "\" 的学生, 修改失败! \n";
		return false;
	}
	createByStdin(1, *(p->stu_next));
	return true;
}
bool Student::modifyByName()
{
	student *p;
	string name;
	cout << "输入要修改人的姓名: ";
	cin >> name;
	p = findByName(name);
	if (p == NULL) {
		cout << "没有找到姓名是 \"" << name << "\" 的学生, 修改失败! \n";
		return false;
	}
	createByStdin(2, *(p->stu_next));
	return true;
}
student *Student::createByStdin(int model, student &tmp)
{
	if (model != 1) { cout << "学    号: "; cin >> tmp.stu_id; }
	if (model != 2) { cout << "姓    名: "; cin >> tmp.stu_name; }

	cout << "语    文: " << endl;
	cout << "平时成绩:" << endl;
	cin >> tmp.Chinese.usual_performance;
	cout << "期末成绩:" << endl;
	cin >> tmp.math.end_performance;
	tmp.Chinese.fin_performance = tmp.Chinese.intfin_performance(tmp.Chinese);
	cout << "总成绩为:" << tmp.Chinese.fin_performance << endl;
	cout << endl;
	cout << "数    学: " << endl;
	cout << "平时成绩:" << endl;
	cin >> tmp.math.usual_performance;
	cout << "期末成绩:" << endl;
	cin >> tmp.math.end_performance;
	tmp.math.fin_performance = tmp.math.intfin_performance(tmp.math);
	cout << "总成绩为:" << tmp.math.fin_performance << endl;
	cout << endl;

	cout << "英    语: " << endl;
	cout << "平时成绩:" << endl;
	cin >> tmp.English.usual_performance;
	cout << "期末成绩:" << endl;
	cin >> tmp.English.end_performance;
	tmp.English.fin_performance = tmp.English.intfin_performance(tmp.math);
	cout << "总成绩为:" << tmp.English.fin_performance << endl;
	cout << endl;

	cout << "物    理: " << endl;
	cout << "平时成绩:" << endl;
	cin >> tmp.physics.usual_performance;
	cout << "期末成绩:" << endl;
	cin >> tmp.physics.end_performance;
	tmp.physics.fin_performance = tmp.physics.intfin_performance(tmp.physics);
	cout << "总成绩为:" << tmp.physics.fin_performance << endl;
	cout << endl;
	cout << "化    学:" << endl;
	cout << "平时成绩:" << endl;
	cin >> tmp.chemistry.usual_performance;
	cout << "期末成绩:" << endl;
	cin >> tmp.chemistry.end_performance;
	tmp.chemistry.fin_performance = tmp.chemistry.intfin_performance(tmp.chemistry);
	cout << "总成绩为:" << tmp.chemistry.fin_performance << endl;
	cout << endl;
	cout << "生    物:" << endl;
	cout << "平时成绩:" << endl;
	cin >> tmp.biology.usual_performance;
	cout << "期末成绩:" << endl;
	cin >> tmp.biology.end_performance;
	tmp.biology.fin_performance = tmp.biology.intfin_performance(tmp.biology);
	cout << "总成绩为:" << tmp.biology.fin_performance << endl;
	cout << endl;
	return &tmp;
}


//文件操作函数
void Student::saveToFile()
{
	string new_file;
	cout << "请输入欲保存的文件名: ";
	cin >> new_file;
	fstream file;
	file.open(new_file.c_str(), ios::out);
	if (file.bad())
	{
		cout << "文件打开失败. " << endl;
		return;
	}
	int len = headCount();
	file << len << endl;
	student *pHead = head->stu_next;
	while (pHead != NULL)
	{
		file << pHead->stu_id << endl;
		file << pHead->stu_name << endl;

		file << pHead->Chinese.cousename << endl;
		file << pHead->Chinese.usual_performance << endl;
		file << pHead->Chinese.end_performance << endl;
		file << pHead->Chinese.fin_performance << endl;

		file << pHead->English.cousename << endl;
		file << pHead->English.usual_performance << endl;
		file << pHead->English.end_performance << endl;
		file << pHead->English.fin_performance << endl;

		file << pHead->math.cousename << endl;
		file << pHead->math.usual_performance << endl;
		file << pHead->math.end_performance << endl;
		file << pHead->math.fin_performance << endl;

		file << pHead->physics.cousename << endl;
		file << pHead->physics.usual_performance << endl;
		file << pHead->physics.end_performance << endl;
		file << pHead->physics.fin_performance << endl;

		file << pHead->chemistry.cousename << endl;
		file << pHead->chemistry.usual_performance << endl;
		file << pHead->chemistry.end_performance << endl;
		file << pHead->chemistry.fin_performance << endl;

		file << pHead->biology.cousename << endl;
		file << pHead->biology.usual_performance << endl;
		file << pHead->biology.end_performance << endl;
		file << pHead->biology.fin_performance << endl;


		pHead = pHead->stu_next;
	}
	file.close();
	cout << "保存成功. " << endl;
	filename = new_file;
	return;
}
void Student::readFile()
{
	string new_file;
	cout << "请输入欲读取的文件名: ";
	cin >> new_file;
	fstream file;
	file.open(new_file.c_str(), ios::in);
	if (file.bad())
	{
		cout << "文件打开失败. " << endl;
		return;
	}
	int len = 0;
	file >> len;
	if (!len)
	{
		cout << "文件数据异常. " << endl;
		return;
	}
	student pHead;
	file.get();
	while (len--)
	{
		file >> pHead.stu_id;
		file >> pHead.stu_name;

		file >> pHead.Chinese.cousename;
		file >> pHead.Chinese.usual_performance;
		file >> pHead.Chinese.end_performance;
		file >> pHead.Chinese.fin_performance;

		file >> pHead.math.cousename;
		file >> pHead.math.usual_performance;
		file >> pHead.math.end_performance;
		file >> pHead.math.fin_performance;

		file >> pHead.English.cousename;
		file >> pHead.English.usual_performance;
		file >> pHead.English.end_performance;
		file >> pHead.English.fin_performance;

		file >> pHead.physics.cousename;
		file >> pHead.physics.usual_performance;
		file >> pHead.physics.end_performance;
		file >> pHead.physics.fin_performance;

		file >> pHead.chemistry.cousename;
		file >> pHead.chemistry.usual_performance;
		file >> pHead.chemistry.end_performance;
		file >> pHead.chemistry.fin_performance;

		file >> pHead.biology.cousename;
		file >> pHead.biology.usual_performance;
		file >> pHead.biology.end_performance;
		file >> pHead.biology.fin_performance;


		insert(pHead);
	}
	file.close();
	cout << "文件读入成功. " << endl;
	filename = new_file;
	return;
}
bool Student::insert(const student &astu)
{
	student *newnode, *p = head;
	if (p->stu_next == NULL)    //当没有下一个数据,则新建一个空间来储存修改数据
	{
		p->stu_next = new student(astu);   //用传入的已修改结构初始化
		p->stu_next->stu_next = NULL;      //NULL处理再下一个堆
		return true;
	}
	while (p->stu_next)           //当存在下一个堆
	{
		if (p->stu_next->stu_id == astu.stu_id)    //判重
		{
			cout << "重复的学号, 插入失败! \n";
			return false;
		}
		if (p->stu_next->stu_id > astu.stu_id)    //如果下一个堆的id大于传入id
		{
			newnode = new student(astu);           //newnode指向初始修改结构
			newnode->stu_next = p->stu_next;
			p->stu_next = newnode;               // 移位
			return true;
		}
		p = p->stu_next;    //既不大于也不重复就后移添加
	}
	p->stu_next = new student(astu);
	p->stu_next->stu_next = NULL;
	return true;
}

//显示函数
void Student::Show() const {
	student *p;
	cout << "----------------------------------------------------------\n";
	for (p = head->stu_next; p; p = p->stu_next)
	{
		show(p);
	}
	cout << "----------------------------------------------------------\n";
}
void show(student *p)
{

	cout << "  学号:" << p->stu_id << endl;
	cout << "  姓名: " << p->stu_name << endl;
	cout << "  语文: 平时成绩:" << p->Chinese.usual_performance
		<< "  期末成绩:" << p->Chinese.end_performance
		<< "  总评成绩:" << p->Chinese.fin_performance << endl;

	cout << "  英语: 平时成绩:" << p->English.usual_performance
		<< "  期末成绩:" << p->English.end_performance
		<< "  总评成绩:" << p->English.fin_performance << endl;

	cout << "  数学: 平时成绩:" << p->math.usual_performance
		<< "  期末成绩:" << p->math.end_performance
		<< "  总评成绩:" << p->math.fin_performance << endl;

	cout << "  物理: 平时成绩:" << p->physics.usual_performance
		<< "  期末成绩:" << p->physics.end_performance
		<< "  总评成绩:" << p->physics.fin_performance << endl;

	cout << "  化学: 平时成绩:" << p->chemistry.usual_performance
		<< "  期末成绩:" << p->chemistry.end_performance
		<< "  总评成绩:" << p->chemistry.fin_performance << endl;

	cout << "  生物: 平时成绩:" << p->biology.usual_performance
		<< "  期末成绩:" << p->biology.end_performance
		<< "  总评成绩:" << p->biology.fin_performance << endl;

}

unsigned Student::headCount() const
{
	unsigned cnt = 0;
	student *p;
	for (p = head->stu_next; p; p = p->stu_next, ++cnt);
	return cnt;
}

User源文件

#include"user.h"
#include<fstream>
#include<iostream>
using namespace std;

void User::readFile()
{
	string new_file = "user";
	fstream file;
	file.open(new_file.c_str(), ios::in);
	if (file.bad())
	{
		cout << "文件打开失败. " << endl;
		return;
	}
	int len = 0;
	file >> len;
	if (!len)
	{
		cout << "已新建管理员数据文件,请注册管理员账号。 " << endl;
		login();
		return;
	}
	user pHead;
	file.get();
	while (len--)
	{
		file >> pHead.m_name;
		file >> pHead.m_password;
		insert(pHead);
	}
	file.close();
	cout << "请输入管理员账号以登陆. " << endl;
	return;
}

void User::saveFile()
{
	string new_file = "user";

	fstream file;
	file.open(new_file.c_str(), ios::out);
	if (file.bad())
	{
		cout << "文件打开失败. " << endl;
		return;
	}
	int len = headCount() - 1;
	file << len << endl;
	user *pHead = head->next_user;
	while (pHead != NULL)
	{
		file << pHead->m_name << endl;
		file << pHead->m_password << endl;
		pHead = pHead->next_user;
	}
	file.close();
	return;
}

bool User::insert(const user &astu)
{
	user *p = head;
	if (p->next_user == NULL)    //当没有下一个数据,则新建一个空间来储存修改数据
	{
		p->next_user = new user(astu);   //用传入的已修改结构初始化
		p->next_user->next_user = NULL;     
		return true;
	}
	while (p->next_user)           
	{
		if (p->next_user->m_name == astu.m_name)    //判重
		{
			cout << "重复的用户名, 插入失败! \n";
			return false;
		}
		p = p->next_user;    //既不大于也不重复就后移添加
	}
	p->next_user = new user(astu);
	p->next_user->next_user = NULL;
	return true;
}

unsigned User::headCount()
{
	unsigned cnt = 0;
	user *p;
	for (p = head; p; p = p->next_user, ++cnt);
	return cnt;

}

user* User::FindByname(string &name)
{
	user *p;
	for (p = head; p != NULL; p = p->next_user)
	if (p->m_name == name) return p;
	return NULL;
}


user *User::findByName(const string &name) const
{
	user *p;
	for (p = head; p->next_user != NULL; p = p->next_user)
	if (p->next_user->m_name == name) return p;
	return NULL;
}

int User::deleteByName()
{
	user *q, *p, *w;
	cout << "请输入用户名" << endl;
	string name;
	cin >> name;
	p = findByName(name);
	if (p == NULL)
	{
		cout << "没有找到账号 \"" << name << "\" ,删除失败! \n";
		return 0;

	}
	q = p;
	w = p->next_user;
	p->next_user = w->next_user;
	delete w;
	cout << "成功删除 " << name << " 的账号. \n";
	saveFile();
	return 0;
}

void User::findtailshowname(const string &name)const
{
	user *p;
	for (p = head; p->next_user != NULL; p = p->next_user)
	{
		if (p->next_user->m_name == name)
		{
			cout << "账号:" << p->next_user->m_name << "  密码:" << p->next_user->m_password << endl;
		}
	}

}

void User::showtailshowname()
{
	cout << "请输入需要查询老师的姓名" << endl;
	string name;
	cin >> name;
	findtailshowname(name);

}

void User::show()
{
	user *p;
	cout << "----------------------------------------------------------\n";
	for (p = head->next_user; p; p = p->next_user)
	{
		cout << "  用户名:" << p->m_name << "  密码: " << p->m_password << endl;
	}
	cout << "----------------------------------------------------------\n";

}

void User::login()
{
	user tmp;
	cout << "新用户名: ";
	cin >> tmp.m_name;

	if (findByName(tmp.m_name) == NULL)
	{
		cout << "新密码: ";
		cin >> tmp.m_password;
		insert(tmp);
	}
	else
	{
		cout << "重复的用户名: " << tmp.m_name << endl;
		login();
	}
	saveFile();

}

bool User::logon()
{
	cout << "  登录" << endl;
	cout << "用户名:";
	string name;
	cin >> name;
	user *p;
	if (findByName(name))
	{
		p = findByName(name);
		cout << "密码:";
		string password;
		cin >> password;
		if (p->next_user->m_password == password)
		{

			cout << "登陆成功" << endl;
			return true;
		}
		else
		{
			cout << "密码输入错误" << endl;
			logon();
		}
	}
	else
	{
		cout << "没有找到相关用户名!" << endl;
		logon();
	}
	return 0;
}

主函数源文件

#include<iostream>
#include "Student.h"
#include "User.h"
using namespace std;

void Menutea()
{
	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 << "**             0、退出                     **" << endl;
	cout << "*********************************************" << endl;
	cout << endl;


}

void usemenu()
{
	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 << "**             0、退出                     **" << endl;
	cout << "*********************************************" << endl;
	cout << endl;
}

void menu() {
	cout << endl;
	cout << "+-----------------------------------------------+\n";
	cout << "|                   学生信息管理系统            |\n";
	cout << "+---------------------------------------------+\n";
	cout << "|   1、添加老师账号      |  6、添加新学生信息   |\n";
	cout << "|   2、查看老师账号      |  7、修改学生信息     |\n";
	cout << "|   3、删除老师账号      |  8、显示学生信息     |\n";
	cout << "|   4、读取学生信息      |  9、查询学生信息     |\n";
	cout << "|   5、保存学生信息      | 10、删除学生信息     |\n";
	cout << "+-----------------------------------------------+\n";
	cout << "|                     0、退出                   |\n";
	cout << "+-----------------------------------------------+\n";
	cout << endl;
}


void showtea()
{

}

int main()
{

	cout << "学生成绩管理系统" << endl;
	cout << "请输入您的身份(管理员/教师)" << endl;
	string name;
	cin >> name;


	User u1;
	u1.readFile();
	if (u1.logon())
	{

		Student m_stu;
		int choice;
		char str[20];
		if (name == "教师")
		{
			cout << "欢迎来到学生成绩管理教师系统" << endl;
			Menutea();
			do {
				cout << "请输入指令:";
				cin >> choice;
				while (!cin)                //判断choice是否输入的是整数,如果是正确类型,cin=0
				{
					cin.clear();                //清空cin流
					cin >> str;                  //赋值错误输入到str
					cout << "请输入正确的指令:" << endl;
					cin >> choice;
				}
				switch (choice) {
				case 1: m_stu.readFile(); 	Menutea(); break;
				case 2: m_stu.saveToFile(); Menutea(); break;
				case 3: m_stu.logon(); Menutea(); break;
				case 4: m_stu.modify(); Menutea(); break;
				case 5: m_stu.Show(); Menutea(); break;
				case 6: m_stu.Query(); Menutea(); break;
				case 7: m_stu.deleteBy(); Menutea(); break;
				case 8:m_stu.findcouse(); Menutea(); break;
				case 0:; break;
				default: cout << "请输入正确的选项" << endl;
					menu(); break;
				}
			} while (choice);
			return 0;

		}
		else if (name == "管理员")
		{
			cout << "欢迎来到学生成绩管理管理员系统" << endl;
			usemenu();
			do {
				cout << "请输入指令:";
				cin >> choice;
				while (!cin)                //判断choice是否输入的是整数,如果是正确类型,cin=0
				{
					cin.clear();                //清空cin流
					cin >> str;                  //赋值错误输入到str
					cout << "请输入正确的指令:" << endl;
					cin >> choice;
				}
				switch (choice)
				{
				case 1: m_stu.readFile(); 	usemenu(); break;
				case 2: m_stu.saveToFile(); usemenu(); break;
				case 3: u1.login(); usemenu(); break;
				case 4: u1.show(); usemenu(); break;
				case 5: u1.deleteByName(); usemenu(); break;
				case 6: m_stu.Query(); usemenu(); break;
				case 7:u1.showtailshowname(); usemenu; break;
				case 8: m_stu.Show(); usemenu; break;
				case 0: break;
				default: cout << "请输入正确的选项" << endl;
					menu(); break;
				}
			} while (choice);
			return 0;

		}
	}
}

结果展示

这里展示部分运行结果

C++学生管理系统C++学生管理系统

 C++学生管理系统C++学生管理系统

 C++学生管理系统C++学生管理系统

代码改进方法

       该系统基本功能已经实现,但是由于时间的原因,当时写的时候面对错误操作,没有报异常,而是直接使得程序崩溃,为了使代码更加完善,可以使用try-catch语句进行一个错误操作的异常提示,重新操作。此代码由于当时学习的知识不够完善,实现还可以使用STL库函数进行链表的操作,储存,实现该系统,使用STL库会使得代码更加简洁,简单,避免自己敲写链表而出现的失误,造成bug。文章来源地址https://www.toymoban.com/news/detail-507219.html

到了这里,关于C++学生管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++实现:学生管理系统(详细解析)

    目录 1.题目要求 2.需求分析 3.整体设计 4.详细设计 主函数设计  学科科目类 主菜单 读取文件与写入文件  效果如下  添加学生信息 删除学生信息 ​编辑 修改学生信息 显示信息列表 显示学生列表 将学生列表按学号升序排列 将学生列表按平均分降序排列,平均分相同的再按

    2023年04月11日
    浏览(41)
  • C++之学生成绩信息管理系统

    为了加深对自己所学到的C++相关知识的理解,熟悉C++程序设计语言编程以及调试的基本技能,锻炼自己利用C++语言程序设计进行简单软件设计的基本思路和方法,提高运用高级语言解决实际问题的能力。我用C++做了一个学生成绩信息管理系统,下面介绍它所实现的功能以及具

    2024年02月03日
    浏览(37)
  • 基于C++实现的学生信息管理系统

    点击获取(源码+课程设计报告文档+截图) 学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如

    2024年02月04日
    浏览(43)
  • C++学习笔记(七)——学生信息管理系统

    前言 大致功能概况 具体代码实现 登录学生系统模块 创建学生信息模块 显示学生信息模块 保存学生信息模块 读取学生信息模块 增添学生信息模块 删除学生信息模块 查找学生信息模块 修改学生信息模块 插入学生信息模块 学生成绩排序模块 前面已经学了C++的类和对象,对

    2024年02月11日
    浏览(41)
  • 手撕学生管理系统超详解——【c++】

    题目要求:设计一个学生成绩管理程序,实现按班级完成对学生成绩信息的录入和修改,并用文件保存。 实现按班级输出学生的成绩单;实现按学号和姓名进行查询,按平均成绩进行排序功能。 问题描述 该程序的目标是提供一个简单且易于使用的学生成绩管理工具,以便教育

    2024年02月11日
    浏览(33)
  • 玩转学生信息管理系统——【c++】

    设计一个管理系统实现对学生的基本信息(至少包括姓名、学号、性别、出生日期、宿舍号年龄(通过计算得到)的管理;),具有数据的录入、显示、保存、查询(按学号查查询或姓名查询)、修改和删除等功能。 一.问题描述 c++ 设计一个管理系统实现对学生基本信息(

    2024年02月08日
    浏览(64)
  • (c++)简易学生成绩管理系统(超简单)

    摘要: 一个简单的学生成绩管理系统自然要包括增删改查。学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。此代码是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改

    2024年02月11日
    浏览(34)
  • 使用C++实现的学生成绩管理系统(附完整代码)

    学生成绩管理系统可以录入、查询、修改学生的成绩,它包括:信息条目序号、学生姓名、课程名称、课程学分数、学生该课程的成绩(百分制成绩, 等级制成绩,绩点)。学生成绩管理系统能够提供以下功能: 1)录入学生的成绩信息:从键盘输入数据,依次输入:学生姓

    2024年02月06日
    浏览(37)
  • 学生信息管理系统(c++,可视化界面,文件操作)

    大一期末作业,老师要求设计一个学生信息管理系统,还要可视化界面。说实话,之前从来没接触过可视化界面,一直都是黑窗口,还以为可视化界面离我还远,直到我开始去了解,去网上查资料,搜索自学,才发现…额,原来这么简单,只要会写程序就可以做,只是老师从

    2024年02月12日
    浏览(42)
  • 34基于Java的学生选课系统或学生课程管理系统

    本系统是基于Java的学生选课信息管理系统,可以有效的对学生选课信息、学生个人信息、教师个人信息等等进行管理。 摘要:基于java的学生课程管理系统,基于java的学生选课系统,javaWeb的学生选课系统,学生成绩管理系统,课表管理系统,学院管理系统,大学生选课系统

    2024年02月03日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包