基于C++实现的学生信息管理系统


前言

  • 系统主要任务是实现对学生的基本信息进行管理,如查询、修改、增加、删除、排序等。本设计中所定义学生信息有学号、姓名、性别、籍贯、专业、高数成绩、大英成绩、大物成绩、总分。
  • 设计的主要功能模块有“增加学生信息、显示学生信息、删除学生信息、修改学生信息、查找学生信息、排序学生信息、清空所有文档、输出excel表格、还原备份数据、退出管理程序”十大功能。
  • 设计主要采取单链表和排序树的数据结构暂存学生数据、txt文本储存本地数据,并利用面向对象的方法以及 C++的编程思想实现不同功能模块的开发,并对每一项功能的实现进行了函数封装,以便于代码重用。

一、系统介绍

本系统包含设计模块:

  • 第一类(功能模块):增加学生信息、显示学生信息、删除学生信息、修改学生信息、查找学生信息、排序学生信息、清空所有文档、输出excel表格、还原备份数据、退出管理程序;
  • 第二类(辅助模块):写入文件、输出文件、建立排序树、数据备份等;
其中细分功能又包括有“删除模块—以学号为索引的精准删除、模糊多行删除;查找模块—以学号为索引的精准查找、模糊查找、以性别-籍贯-专业为索引的联级查找;排序模块—以不同成绩、学号为索引对数据进行的有序排序”。系统设计的用户菜单操作页面采取菜单递进的形式展示。

二、系统设计

1.数据结构:

(1)数据结构的定义:

  • 对学生信息数据的储存采取单链表的形式(并且定义全局变量Max记录学生个数),当需要对数据进行排序和精准查找时便使用学生数据建立排序二叉树来辅助实现相应功能需求。学生类及学生信息管理系统类结构的定义如下:

代码如下:

//学生类
struct student
{
	string name;
	string ID;
	string sex;
	int age;
	string nativePlace;
	string major;
	string mark=";";
	string checkMark;
	
	float math;
	float english;
	float physics;
	float sum;
};

//学生节点类
class Node {
public:
	student data;
	Node* next;
};

//二叉树学生类
struct point {
	student data;
	point* left, * right;
};
//学生信息管理系统
class StudentsManager
{
public:

	//输出文件
	void OutputFile();

	//输入txt
	void InputFile();
	//输出表格
	void InputFile1();

	//构造函数
	StudentsManager();

	//展示菜单
	void ShowMenu();

	//显示数据
	void display();

	//录入信息
	void inputStudent();

	//删除信息
	void DeleteStudent();
	//精准删除—学号
	void AccurateDelete();
	//多行删除—支持对性别、籍贯、专业进行删除
	void FuzzyDelete();

	//查找信息
	void SeachStudent();
	//精准查找
	void AccurateSearch();
	point* SearchBST(point* bt,string id);
	//模糊查找
	void FuzzySearch();
	//联级查找
	void MultitageSearch();

	//更改信息
	void ChangeInformation();

	//排序信息
	void OrderingInformation();

	//清空文档
	void Empty();

	//退出系统
	void exitSystem();

	//文件损坏处理
	void Clean();
	void Restore();
	void Backup();

	//析构函数
	~StudentsManager();

	//测试
	void text();

	//排序树操作
	void treelink();
	void createbitree(student data, point*& p);
	void preordertraverse(point*& t);
	void TraverseTree(point*& t);
	//1.以学号为索引
	void treelink_id();
	void CreatebiTree_id(student data, point*& p);
	//1.以高数成绩为索引
	void treelink_math();
	void CreatebiTree_math(student data, point*& p);
	//1.以大英成绩为索引
	void treelink_english();
	void CreatebiTree_english(student data, point*& p);
	//3.以大物成绩为索引
	void treelink_physics();
	void CreatebiTree_physics(student data, point*& p);
	//3.以总分成绩为索引
	void treelink_sum();
	void CreatebiTree_sum(student data, point*& p);

private:
	Node* first;
	Node* tempFirst;
	int Max = 0;
	int tempMax = 0;
};

2.辅助模块介绍:

  1. 文件操作模块
    ①输入文件:读取文件数据并储存到程序链表中。
    ②写入文件:把链表数据写入到文件中。
  2. 矫正输入模块
    调用时对用户的string类型输入的字符串做验证(主要作用于主菜单和功能模块菜单的选择以及涉及其它有关数字输入的部分页面,以下涉及数字的输入矫正不再做过多的叙述),若输入内容为非数字则提醒用户输入错误,然后要求用户重新输入。
// 矫正选择菜单输入的稳定性
string Select(string choice) {
	string choiceVerify = choice;
	while (true)
	{
		if (!AllisNum(choiceVerify)) {
			cout << "输入操作错误,请重新输入;" << endl;
			cin >> choiceVerify;
			continue;
		}
		else {
			break;
		}
	}
	return choiceVerify;
}
bool AllisNum(string str)
{
	for (int i = 0; i < str.size(); i++)
	{
		int tmp = (int)str[i];
		if (tmp >= 48 && tmp <= 57)
		{
			continue;
		}
		else
		{
			return false;
		}
	}
	return true;
}

3.功能模块介绍:

  1. 退出管理程序模块
    当用户在主界面输入“0”时便可调用该功能函数,该功能函数中使用exit(0)正常退出程序。

  2. 打印学生信息模块
    当用户在主界面输入“2”时便可调用该功能函数,该功能函数中首先会调用输入文件模块以更新数据,然后通过指针遍历输出链表数据。

  3. 增加学生信息模块:
    当用户在主界面输入“1”时便可调用该功能函数。函数提示用户输入相应的学生信息,当用户正确输入完学生信息后便调用写入文件模块对链表数据重新写入文件达到本地储存效果。

  4. 查找学生信息模块
    当用户在主界面输入“5”时便可调用该功能函数。
    ①精准查找—学号:在查找界面输入“1”可跳入精准查找,程序以学号大小顺序为索引建立排序二叉树,在排序树中对用户输入的学号进行精准查找。
    ②模糊查找—性别、姓名、籍贯、专业:在查找界面输入“2”可跳入模糊查找,程序对用户输入的关键字字符串进行逐字切割,并逐一匹配每一项学生信息中是否含有切割后的字符,若某一项数据全包含切割的字符则返回该项数据。
    ③多条件联级查询—性别+籍贯+专业:在查找界面输入“3”可跳入联级查找,程序对用户输入的一段话做检验,若该段话全包含某一项的学生数据(性别+籍贯+专业)则返回该项数据。
    ④输入“0”可返回主界面。

  5. 删除学生信息模块
    当用户在主界面输入“3”时便可调用该功能函数。删除模块又分为基于精准搜索实现的精准删除和基于模糊搜索实现的多行删除。在删除界面输入“1”可跳入精准删除,输入“2”可跳入多行删除,输入“0”可返回主界面。

  6. 修改学生信息模块
    当用户在主界面输入“4”时便可调用该功能函数。程序提示用户输入需删除的学生学号,随后系统基于精准查找函数实现对用户输入的学号进行查找,查找成功后便提醒用户输入所要修改的信息,修改后调用写入文件函数保存数据;查找失败则提醒用户不存在本学生并返回主界面。

  7. 排序学生信息模块
    当用户在主界面输入“6”时便可调用该功能函数。
    ①以高数成绩为索引:在排序界面输入“1”可以高数成绩高低进行降序排序,程序以每一项学生的高数成绩建立排序树,并且中序遍历输出排序树。
    ②以大英成绩为索引:在排序界面输入“2”可以大英成绩高低进行降序排序,程序以每一项学生的大英成绩建立排序树,并且中序遍历输出排序树。
    ③以大物成绩为索引:在排序界面输入“3”可以大物成绩高低进行降序排序,程序以每一项学生的大物成绩建立排序树,并且中序遍历输出排序树。
    ④以学生学号为索引:在排序界面输入“4”可以学生学号大小进行升序序排序,程序以每一项学生的学生学号建立排序树,并且中序遍历输出排序树。
    ⑤输入“0”可返回主界面。

  8. 清空文档信息模块
    当用户在主界面输入“7”时便可调用该功能函数。程序自动检验是否存在txt数据文件,若存在这删除该文件并新建同名txt文件以达到文件清空覆盖的效果。在执行清空操作时提醒用户是否确认清空,输入“1”为确认;输入“0”为取消。

  9. 输出excel表格模块
    当用户在主界面输入“8”时便可调用该功能函数。程序先执行输入文件函数更新链表数据,随后创建表格(文件位置位于该项目根目录)并输入链表数据。

  10. 还原备份数据模块
    当用户在主界面输入“9”时便可调用该功能函数。在本程序根目录存在备份文件,在每次成功添加学生和成功修改学生数据后备份文件便可更新数据。本模块的功能主要是对文件学生数据丢失或、用户误删学生数据以及清空文档数据的情况下提供数据可恢复功能。调用时程序读取备份文件,将备份文件数据储存于辅助单链表,然后把辅助单链表数据重新写入学生数据文件以达到数据恢复目的。

资源下载

链接:https://pan.baidu.com/s/1frc6961CWnOGxGki9ZqSzQ 提取码:2gwv


提示:文章到此结束,本文仅为个人看法,若有不足欢迎各位指出。

  • 14
    点赞
  • 216
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值