网站右下角代码,网站制作公司 哪家好,《设计》完整版,高德地图导航下载前言
衔接上一篇“c学习笔记-STL案例-机房预约系统3-登录模块”#xff0c;本文主要设计管理员模块#xff0c;从管理员登录和注销、添加账号、显示账号、查看机房、清空预约五个功能进行分析和实现。 目录 7 管理员模块
7.1 管理员登录和注销
7.1.1 构造函数 编辑7.1.2…前言
衔接上一篇“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;
}
添加位置如图
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;}}
} 添加位置如图 其中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;
}
添加位置如图 7.1.4 接口对接
管理员成功登录后调用管理员子菜单界面在管理员登录验证分支中添加代码 //进入管理员身份子菜单managerMenu(person); 7.4.5 测试结果 登录成功 选1-4后会重复出现管理员子菜单因为管理员功能还未实现但是显示“添加账号”表示成功进入添加账号分支
7.2 添加账号
7.2.1 添加账号
(1) 功能描述
给学生或教师添加新的账号
(2) 功能要求
添加学生学号不能重复、教师职工号不能重复
7.2.2 添加功能实现
在Manager.h中添加globalFile.h引入文件的宏定义添加fstream做文件写出到txt相关操作如下图所示
在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)可以实现在原有信息上添加新的信息。
添加位置如图 7.2.3 测试结果
登录管理员账号 添加学生账号 添加老师账号 7.2.4 去重操作
7.2.4.1 获取文件中学生和老师信息 要去除重复的账号首先要将学生和老师的账号信息获取到程序中方可检测 在manager.h中添加两个容器用于存放学生和教师信息添加一个新的成员函数 void initVector() 初始化容器
1添加头文件#includevector、#includestudent.h、#includeteacher.h添加vStu、vTea、initVector() //学生容器vectorStudent vStu;//老师容器vectorTeacher vTea;//初始化容器void initVector();
添加位置如图 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();
}添加位置如图 3测试结果 7.2.4.2 去重函数封装
1在manager.h文件中添加成员函数bool checkRepeat(int id,int type);
2在manager.cpp文件中实现成员函数bool checkRepeat(int id,int type);
//检测重复 参数:(传入id,传入类型 返回:(true 代表重复;false 代码不重复)
bool Manager::checkRepeat(int id, int type)
{if (type 1){//检测学生for (vectorStudent::iterator it vStu.begin(); it ! vStu.end(); it){if (id it-m_Id){return true;}}}else{//检测老师for (vectorTeacher::iterator it vTea.begin(); it ! vTea.end(); it){if (id it-m_EmpId){return true;}}}return false;
} 添加位置如图 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;}} 添加位置如图 测试结果
1控制台显示“添加成功” 2txt文本中新增了王五的数据
7.2.4.4 bug解决
1bug描述
虽然可以检测到重复的账号但是刚添加的账号由于没有更新到容器中因此不会被检查导致刚加入的账号的学号或者职工号再次添加时依然会重复
2解决方案
在每次添加新账号时重新初始化容器
在添加完毕后加入代码
//初始化容器this-initVector();
添加位置如图 7.3 显示账号
功能描述显示学生信息或教师信息
7.3.1 显示功能实现
在manager.h添加#includealgorithm 在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);
}
添加位置如图 复习一下managerMenu函数管理子菜单中添加了showPerson()函数可以调用这里的查看函数显示查看所有学生信息或老师信息的结果 7.3.2 测试结果
查看学生 查看老师 7.4 查看机房
7.4.1 添加机房信息
在案例需求中机房一共有三个其中1号机房容量20台机器2号50台机器3号100台机器
在comnputerRoom.txt中添加三条信息 7.4.2 机房类创建
在头文件下创建新的文件computerRoom.h
并添加如下代码
#pragma once
#includeiostream
using namespace std;//机房类
class ComputerRoom
{
public:int m_Comid; //机房idint m_MaxNum; //机房最大容量
};
添加位置如图 7.4.3 初始话机房信息
在Manager管理员类下添加机房的容器用于保护机房信息 在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();
}
添加位置如图 7.4.4 显示机房信息
在manager类的showComputer成员函数中添加如下代码
//查看机房
void Manager::showComputer()
{cout 机房的信息如下 endl;for_each(vCom.begin(), vCom.end(), printComputerRoom);system(pause);system(cls);
}
添加位置如图 7.4.5 测试结果
登录管理员账号后当前机房数量为3查看机房具体信息 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);
} 添加位置如图 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);} 添加位置如图 7.5.3 测试结果
在order.txt添加如下测试信息 登录管理员账号后选择“清空预约” 再次打开order.txt文件后清空了信息 还可以选择“取消”则信息不会被清空。 总结 本文围绕管理员账号的功能添加账号、查看账号、查看机房、清空预约、注销登录进行了实现与测试主要运用了c中的文件流fstream、容器vector、算法algorithmmain函数调用LogIn函数登录管理员账号LogIn的分支3为管理员身份验证验证成功就通过managerMenu进入管理员身份子菜单子菜单接受用户输入的操作选项1 添加账号2 查看账号3 查看机房4 清空预约5 注销登录。