c++学习笔记-STL案例-机房预约系统4-管理员模块

这篇具有很好参考价值的文章主要介绍了c++学习笔记-STL案例-机房预约系统4-管理员模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

衔接上一篇“c++学习笔记-STL案例-机房预约系统3-登录模块”,本文主要设计管理员模块,从管理员登录和注销、添加账号、显示账号、查看机房、清空预约五个功能进行分析和实现。


目录

7 管理员模块

7.1 管理员登录和注销

7.1.1 构造函数

​编辑7.1.2 管理员子菜单

7.1.3 菜单功能实现

​编辑

7.1.4 接口对接

7.4.5 测试结果

7.2 添加账号

7.2.1 添加账号

7.2.2 添加功能实现

7.2.3 测试结果

7.2.4 去重操作

7.2.4.1 获取文件中学生和老师信息

7.2.4.2 去重函数封装

7.2.4.3 添加去重操作

7.2.4.4 bug解决

 7.3 显示账号

7.3.1 显示功能实现

7.3.2 测试结果

7.4 查看机房

7.4.1 添加机房信息

7.4.2 机房类创建

7.4.3 初始话机房信息

7.4.4 显示机房信息

7.4.5 测试结果

7.5 清空预约

7.51. 清空功能实现

7.5.2 确认清除判断

7.5.3 测试结果

总结


7 管理员模块

7.1 管理员登录和注销

7.1.1 构造函数

  • 在manager类的构造函数中,初始化管理员信息,代码如下:

//有参构造 参数:管理员姓名、密码
Manager::Manager(string name, string pwd)
{
	//初始化管理员信息
	this->m_Name = name;
	this->m_Pwd = pwd;
}

添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记7.1.2 管理员子菜单

  • 在机房预约系统.cpp中,当用户登录的是管理员,添加管理员菜单接口
  • 将不同的分支提供出来:

        添加账号

        查看账号

        查看机房

        清空预约

        注销登录

实现注销功能

  • 添加全局函数 void managerMenu(Identity * &manager),代码如下:
//进入管理员子菜单
void managerMenu(Identity*& manager)
{
	while (true)
	{
		//调用管理员子菜单
		manager->operMenu();//父类指针创建子类对象,调用共同接口

		//将父类指针 转为子类对象指针,调用子类的其他接口
		Manager* man = (Manager*)manager;  // (Manager*)是强制转换

		int select = 0;

		//接收用户选择
		cin >> select;

		if (select == 1)
		{
			//添加账号
			cout << "添加账号" << endl;
			man->addPerson();

		}
		else if (select == 2)
		{
			//查看账号
			cout << "查看账号" << endl;
			man->showPerson();
		}
		else if (select == 3)
		{
			//查看机房
			cout << "查看机房" << endl;
			man->showComputer();
		}
		else if (select == 4)
		{
			//清空预约
			cout << "清空预约" << endl;
			man->clearFile();
		}
		else
		{
			//注销登录
			delete manager;//销毁堆区对象
			cout << "注销成功" << endl;
			system("pause");
			return;
		}

	}
}

 添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

         其中,void managerMenu(Identity * &manager), “  Identity * 父类指针接收,前面创建人时用父类指针创建的具体人;
        Manager* man = (Manager*)manager;  // (Manager*)是强制转换,将父类指针 转为子类对象指针,调用子类的其他接口

7.1.3 菜单功能实现

  • 在实现成员函数void Manager::operMenu()代码如下:
//manager子菜单界面
void Manager::operMenu()
{
	cout << "欢迎管理员"<<this->m_Name<<"登录!" << endl;
	cout << "\t\t -------------------------------------------------" << endl;
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 1.添加账号                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 2.查看账号                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 3.查看机房                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 4.清空预约                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t|                 0.注销登录                      |\n";
	cout << "\t\t|                                                 |\n";
	cout << "\t\t -------------------------------------------------" << endl;
	cout << "请选择您的操作:" << endl;
}

添加位置如图:  

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.1.4 接口对接

  • 管理员成功登录后,调用管理员子菜单界面
  • 在管理员登录验证分支中,添加代码:
				//进入管理员身份子菜单
				managerMenu(person);

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.4.5 测试结果

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

登录成功

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

 选1-4后会重复出现管理员子菜单,因为管理员功能还未实现,但是显示“添加账号”表示成功进入添加账号分支:c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.2 添加账号

7.2.1 添加账号

(1) 功能描述:

  • 给学生或教师添加新的账号

(2) 功能要求:

  • 添加学生学号不能重复、教师职工号不能重复

7.2.2 添加功能实现

在Manager.h中添加"globalFile.h"引入文件的宏定义,添加"fstream"做文件写出到txt相关操作,如下图所示:
c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

在Manager.cpp的addPerson()成员函数中,实现添加新账号功能,代码如下:

//添加账号
void Manager::addPerson()
{
	cout << "请输入添加账号的类型:" << endl;
	cout << "1、添加学生" << endl;
	cout << "2、添加老师" << endl;

	string fileName;//操作文件名
	string tip;//提示id号

	ofstream ofs;//文件操作对象

	int select = 0;
	cin >> select;//接受用户选项
	if (select == 1)
	{
		//添加的是学生
		fileName = STUDENT_FILE;
		tip = "请输入学号:";
	}
	else
	{
		//添加的是学生
		fileName = TEACHER_FILE;
		tip = "请输入职工号:";
	}

	//利用追加的方式写文件
	ofs.open(fileName, ios::out | ios::app);

	int id;  //学号或者职工号
	string name;
	string pwd;

	cout << tip << endl;
	cin >> id;

	cout << "请输入您的姓名:" << endl;
	cin >> name;

	cout << "请输入密码:" << endl;
	cin >> pwd;

	//向文件中添加数据
	ofs << id << " " << name << " " << pwd << endl;
	cout << "添加成功" << endl;

	system("pause");
	system("cls");

	ofs.close();

}

其中,app追加的方式写文件 ofs.open(fileName, ios::out | ios::app),可以实现在原有信息上添加新的信息。

添加位置如图: 

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.2.3 测试结果

登录管理员账号:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

添加学生账号:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

添加老师账号:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.2.4 去重操作

7.2.4.1 获取文件中学生和老师信息
  • 要去除重复的账号,首先要将学生和老师的账号信息获取到程序中,方可检测

  • 在manager.h中,添加两个容器,用于存放学生和教师信息
  • 添加一个新的成员函数 void initVector()  初始化容器

(1)添加头文件#include<vector>、#include"student.h"、#include"teacher.h";添加vStu、vTea、initVector()

	//学生容器
	vector<Student> vStu;

	//老师容器
	vector<Teacher> vTea;

	//初始化容器
	void initVector();

添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

(2)实现initVector():

void Manager::initVector()
{
	//确保容器清空状态
	vStu.clear();
	vTea.clear();

	//读取信息  学生、老师
	ifstream ifs;
	ifs.open(STUDENT_FILE, ios::in);
	if (!ifs.is_open())
	{
		cout << "文件读取失败" << endl;
		return;
	}

	Student s;
	while (ifs >> s.m_Id && ifs >> s.m_Name && ifs >> s.m_Pwd)
	{
		vStu.push_back(s);
	}

	cout << "当前学生数量为:" << vStu.size() << endl;
	ifs.close();

	ifs.open(TEACHER_FILE, ios::in);
	Teacher t;
	while (ifs >> t.m_EmpId && ifs >> t.m_Name && ifs >> t.m_Pwd)
	{
		vTea.push_back(t);
	}

	cout << "当前老师数量为:" << vTea.size() << endl;
	ifs.close();
}

添加位置如图: 

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

(3)测试结果:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.2.4.2 去重函数封装

(1)在manager.h文件中添加成员函数bool checkRepeat(int id,int type);c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

(2)在manager.cpp文件中实现成员函数bool checkRepeat(int id,int type);

//检测重复 参数:(传入id,传入类型)  返回:(true 代表重复;false 代码不重复)
bool Manager::checkRepeat(int id, int type)
{
	if (type == 1)
	{
		//检测学生
		for (vector<Student>::iterator it = vStu.begin(); it != vStu.end(); it++)
		{
			if (id == it->m_Id)
			{
				return true;
			}
		}
	}
	else
	{
		//检测老师
		for (vector<Teacher>::iterator it = vTea.begin(); it != vTea.end(); it++)
		{
			if (id == it->m_EmpId)
			{
				return true;
			}
		}
	}
	return false;
}

 添加位置如图: 

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.2.4.3 添加去重操作

在manager.cpp的void Manager::addPerson()函数中增加如下代码:

if (select == 1)
	{
		//添加的是学生
		fileName = STUDENT_FILE;
		tip = "请输入学号:";
		errorTip = "学号重复,请重新输入";
	}
	else
	{
		//添加的是学生
		fileName = TEACHER_FILE;
		tip = "请输入职工号:";
		errorTip = "职工号重复,请重新输入";
	}

	//利用追加的方式 写文件
	ofs.open(fileName, ios::out | ios::app);

	int id;  //学号或者职工号
	string name;    //姓名 
	string pwd;     //密码

	cout << tip << endl;
	while (true)
	{
		cin >> id;
		bool ret = checkRepeat(id, select);
		if (ret)//有重复
		{
			cout << errorTip << endl;
		}
		else
		{
			break;
		}
	}

 添加位置如图: 

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

测试结果:

(1)控制台显示“添加成功”

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

 (2)txt文本中新增了王五的数据:c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.2.4.4 bug解决

(1)bug描述:

  • 虽然可以检测到重复的账号,但是刚添加的账号由于没有更新到容器中,因此不会被检查
  • 导致刚加入的账号的学号或者职工号,再次添加时依然会重复

(2)解决方案:

  • 在每次添加新账号时,重新初始化容器

在添加完毕后加入代码:

//初始化容器
	this->initVector();

添加位置如图: 

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

 7.3 显示账号

功能描述:显示学生信息或教师信息

7.3.1 显示功能实现

在manager.h添加#include<algorithm>

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

在manager.cpp的showPerson()成员函数中,实现显示账号功能,代码如下:

//打印学生信息
void printStudent(Student& s)
{
	cout << "学号:" << s.m_Id << "  姓名:" << s.m_Name << "  密码:" << s.m_Pwd << endl;
}

//打印老师信息
void printTeacher(Teacher& t)
{
	cout << "职工号:" << t.m_EmpId << "  姓名:" << t.m_Name << "  密码:" << t.m_Pwd <<endl;
}

//查看账号
void Manager::showPerson()
{
	cout << "请选择要查看的内容" << endl;
	cout << "1、查看所有的学生" << endl;
	cout << "2、查看所有的老师" << endl;

	int select = 0;//接收用户的选择
	cin >> select;

	if (select == 1)
	{
		//查看学生
		cout << "所有学生的信息如下:" << endl;
		for_each(vStu.begin(), vStu.end(), printStudent);

	}
	else
	{
		//查看老师
		cout << "所有老师的信息如下:" << endl;
		for (vTea.begin(), vTea.end(), printTeacher);
	}

	system("pause");
	system("cls");
}

添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

复习一下:managerMenu函数管理子菜单中,添加了showPerson()函数,可以调用这里的查看函数,显示查看所有学生信息或老师信息的结果

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.3.2 测试结果

查看学生:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

查看老师:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.4 查看机房

7.4.1 添加机房信息

在案例需求中,机房一共有三个,其中1号机房容量20台机器,2号50台机器,3号100台机器

在comnputerRoom.txt中添加三条信息:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.4.2 机房类创建

在头文件下,创建新的文件computerRoom.h

并添加如下代码:

#pragma once
#include<iostream>
using namespace std;

//机房类
class ComputerRoom
{
public:
	int m_Comid; //机房id
	int m_MaxNum; //机房最大容量
};

添加位置如图:

7.4.3 初始话机房信息

在Manager管理员类下,添加机房的容器,用于保护机房信息

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

在Manager.cpp 有参构造函数中,追加如下代码,初始化机房信息:

//初始化机房信息
	this->initComVector();
void Manager::initComVector()
{
	//获取机房信息
	ifstream ifs;
	ifs.open(COMPUTER_FILE, ios::in);

	ComputerRoom c;
	while (ifs >> c.m_Comid && ifs >> c.m_MaxNum)
	{
		this->vCom.push_back(c);
	}
	cout << "当前机房数量:" << vCom.size() << endl;

	ifs.close();
}

添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.4.4 显示机房信息

在manager类的showComputer成员函数中添加如下代码:

//查看机房
void Manager::showComputer()
{
	cout << "机房的信息如下:" << endl;
	for_each(vCom.begin(), vCom.end(), printComputerRoom);
	system("pause");
	system("cls");
}

添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.4.5 测试结果

登录管理员账号后,当前机房数量为3,查看机房具体信息:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.5 清空预约

功能描述:清空生成的order.txt预约文件

7.51. 清空功能实现

(1)实现思路

ofstream ofs(ORDER_FILE, ios::trunc);

trunc的方式打开:如果文件存在,删除后重新创建

(2)在Manager的cleanFile成员函数中添加如下代码:

//清空预约记录
void Manager::clearFile()
{
	ofstream ofs(ORDER_FILE, ios::trunc);
	ofs.close();
	
	cout << "清空成功!" << endl;
	system("pause");
	system("cls");
}

 添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.5.2 确认清除判断

在机房预约系统.cpp中void managerMenu(Identity*& manager)函数的分支4下添加如下代码:

	else if (select == 4)
		{
			//清空预约
			cout << "确认清空?" << endl;
			cout << "1 确认" << endl;
			cout << "2 取消" << endl;
			cin >> selectConcret;
			if (selectConcret == 1)
			{
				cout << "清空预约" << endl;
				man->clearFile();
			}
			system("pause");
			system("cls");
		}

  添加位置如图:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

7.5.3 测试结果

在order.txt添加如下测试信息:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

 登录管理员账号后选择“清空预约”:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

再次打开order.txt文件后清空了信息:

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记

 还可以选择“取消”,则信息不会被清空。


总结

        本文围绕管理员账号的功能:添加账号、查看账号、查看机房、清空预约、注销登录,进行了实现与测试,主要运用了c++中的文件流fstream、容器vector、算法algorithm,main函数调用LogIn函数登录管理员账号,LogIn的分支3为管理员身份验证,验证成功就通过managerMenu进入管理员身份子菜单,子菜单接受用户输入的操作选项:1 添加账号;2 查看账号;3 查看机房;4 清空预约;5 注销登录。

c++学习笔记-STL案例-机房预约系统4-管理员模块,c++,学习,笔记文章来源地址https://www.toymoban.com/news/detail-805974.html

到了这里,关于c++学习笔记-STL案例-机房预约系统4-管理员模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【信息安全案例】——系统软件安全(学习笔记)

    📖 前言:操作系统是管理系统资源、控制程序执行、提供良好人机界面和各种服务的一种系统软件,是连接计算机硬件与上层软件和用户之间的桥梁。因此,操作系统是其他系统软件、应用软件运行的基础,操作系统的安全性对于保障其他系统软件和应用软件的安全至关重

    2024年02月02日
    浏览(43)
  • C++笔记-effective stl

    熟悉stl本身 慎重选择stl容器,每一种stl容器对应不同的使用场景,比如deque往往比vector更加合适 封装stl容器,积极的使用stl,可以高效的使用它 积极使用其对应迭代器使用的函数,比如做相加运算使用accumulate替代for循环,可以更加高效 调用对应的函数的时候,不使用过于复

    2024年01月18日
    浏览(42)
  • 案例127:基于微信小程序的预约挂号系统

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 目录 前言 系统展示 管理员模块的实现 用户信息管理 医生信息管理 科室信息

    2024年01月21日
    浏览(56)
  • C++ 笔记 20 (STL函数对象)

    1. 函数对象 1.1 函数对象概念 概念: 重载 函数调用操作符 的类,其对象常称为函数对象; 函数对象使用重载的()时,行为类似函数调用,也叫仿函数。 本质: 函数对象(仿函数)是一个类,不是一个函数。 1.2 函数对象的使用 特点: 函数对象在使用时,可以像普通函数

    2024年02月02日
    浏览(43)
  • 案例237:基于微信小程序的医院挂号预约系统

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 前言 系统展示 用户管理 医院管理 医生管理 公告资讯管理 科室信息管理 预约

    2024年02月03日
    浏览(54)
  • 案例144:基于微信小程序的自修室预约系统

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 前言 系统展示 管理员模块的实现 学生信息管理 公告通知管理 自修室管理 座

    2024年02月03日
    浏览(45)
  • 案例071:基于微信小程序的汽车预约维修系统

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 目录 前言 系统展示 后台模块的实现 用户信息管理 技师管理 用户预约管理 小程序

    2024年02月03日
    浏览(58)
  • 【C++学习】STL容器——list

    目录 一、list的介绍及使用 1.1 list的介绍  1.2 list的使用 1.2.1 list的构造  1.2.2  list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比 一、list的介绍及使用 1.1 list的介绍 list的文档介绍

    2024年02月14日
    浏览(39)
  • 【C++】学习STL中的list

            大家好!,今天为大家带来的一篇博客是关于STL中的list,内容主要包括list的介绍使用、list的模拟实现。以及list与vector的对比。         首先,让我们看看list的文档介绍: list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向

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

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

    2024年02月11日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包