C++ 学生信息管理系统

C++ 文件读写 实现简单的学生信息管理系统

写在前面:
这个程序的逻辑部分比较简单,只要对C++文件操作熟悉即可流畅地完成。
我在CSDN也看了一些其他人写的控制台信息管理系统,我认为我的程序较其他人还是有一些优点的。
比如:可对文件进行多次操作、每完成一步操作都会自动保存到文件中、功能较多、不会因为错误输入崩溃、代码、界面较简洁等。

技术环节:
编译环境:Windows VS2019

需求:
实现,对文件中的数据进行:添加、输出、根据多条件查找、根据多条件排序、插入、删除、修改、统计操作。

思路:
创建文件,循环将文件中的内容读取到list结构容器中,再根据容器中的值对数据进行处理。

在代码注释中详细标注了程序的实现步骤。

注意:
由于程序内部实现原因,由程序操作的文件的第一行,不可以被占用、必须空出来。
且文件最后一行不可以有多余的空行。
建议不要直接操作txt文件。

运行效果:
在这里插入图片描述

代码实现:
#include <iostream>	
#include <fstream>
#include <list>
#include <sstream>		//字符串转换

using namespace std;

//信息管理系统类
class Mamasys
{
   
private:
	//学生全局结构
	struct Student
	{
   //虽然学生属性都是字符串类型,但是后面对数据进行处理时,
	 //也会将部分字符串数据转换为数字类型进行操作
		string name;		//姓名
		string age;			//年龄
		string num;			//学号
		string CppScore;	//C++成绩
		string MathScore;	//高等数学成绩
	};

	list<Student> studlist;	//存储所有学生信息的容器

	string path;			//文件路径

	//将容器中所有信息写入到文件中
	void ofsallMess()
	{
   
		ofstream ofst;
		//以清空源文件内容方式打开文件
		ofst.open(path, ios::trunc);

		//判断文件是否打开成功
		if (!ofst.is_open())
		{
   
			cout << "文件打开失败" << endl;
			return;
		}

		//将容器中的所有信息写入到文件中,这里的endl必须在开头写,末尾不能写,否则会出现一系列问题
		for (list<Student>::const_iterator it = studlist.begin(); it != studlist.end(); it++)
			ofst << endl << it->num << endl << it->name << endl << it->age << endl << it->CppScore << endl << it->MathScore;
		
		//关闭文件
		ofst.close();
	}

public:
	//构造函数用于将文件中的内容按格式读取到list<Student>中
	Mamasys()
	{
   
		cout << "输入你的文件路径,加后缀名,一般为txt文件(没有则创建该文件):" << endl;
		cin >> path;

		ifstream ifstr;
		ifstr.open(path, ios::in);		//打开文件路径中的文件,如果打开失败则创建该文件
		if (!ifstr.is_open())
		{
   
			ofstream temp(path);		//创建文件
			temp.open(path,ios::out);
			if (!temp.is_open())		//检测是否创建成功
			{
   
				cout << "创建文件失败,退出程序" << endl;
				exit(-1);
			}
			//文件成功创建则关闭文件
			temp.close();
		}
	
		system("cls");

		//将文件中所有内容读取到list容器中
		ifstream ifst;
		ifst.open(path, ios::in);

		char line[14];		//这里必须是字符数组
		Student temp;
		
		//空读取一行因为新文件第一行不保存内容
		ifst.getline(line, sizeof(line));

		//成行读取文件中的内容
		//循环读取五行信息,每五行将信息插入到容器中
		while (!ifst.eof())
		{
   
			//保存到临时学生temp中
			ifst.getline(line, sizeof(line));
			temp.num = line;		//学号
			ifst.getline(line, sizeof(line));
			temp.name = line;		//姓名
			ifst.getline(line, sizeof(line));
			temp.age = line;		//年龄
			ifst.getline(line, sizeof(line));
			temp.CppScore = line;	//C++成绩
			ifst.getline(line, sizeof(line));
			temp.MathScore = line;	//高数成绩

			//将temp插入到学生容器中
			studlist.push_back(temp);
		}
		Hint();		//显示提示信息
	}

	//输出提示信息成员函数
	void Hint()
	{
   
		cout << "--------学生信息管理系统--------" << endl << 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 << endl;
		cout << "所有功能在执行完毕后,都会自动将当前信息保存进文件" << endl << endl;
	}

	//添加学生信息
	bool AddMess()
	{
   
		//创建一个学生结构
		Student student;
		
		L1:
		//输出提示信息,并输入学生信息,输入-1结束输入
		cout << "学号:		"; cin 
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值