C++ 机房预约系统(三):登录模块——全局文件添加、全局函数登录函数封装、学生、老师、管理员的登陆具体实现
创始人
2025-05-31 17:46:31

6、 登录模块

6.1 全局文件添加

功能描述:

  • 不同的身份可能会用到不同的文件操作,我们可以将所有的文件名定义到一个全局的文件中
  • 在头文件中添加 globalFile.h 文件,把常用文件的文件名写成纯大写的宏常量
  • 在同级目录下创建以下txt文件

代码展示:

#pragma once //管理员文件
#define ADMIN_FILE     "admin.txt"
//学生文件
#define STUDENT_FILE   "student.txt"
//教师文件
#define TEACHER_FILE   "teacher.txt"
//机房信息文件
#define COMPUTER_FILE  "computerRoom.txt"
//订单文件
#define ORDER_FILE     "order.txt"

6.2 登录函数封装

功能描述: 根据用户的选择,进入不同的身份登录

实现步骤:

  1. 在机房预约系统.cpp文件中添加全局函数 void LoginIn(string fileName, int type)
  2. 全局函数 void LoginIn(string fileName, int type)具体实现如下:
  • 创建父类指针,并初始化为空指针。利用多态原理,通过父类指针创建子类对象
  • 读取身份文件前,要判断文件是否存在,不存在则返回,存在则初始化不同身份的信息(学号/工号、姓名、密码)
  • 让用户输入信息,学生:学号、姓名、密码;老师:工号、姓名、密码;管理员:姓名、密码
  • 根据不同身份,验证身份的信息是否正确,并且提示用户
  1. 在机房预约系统.cpp文件的main函数中,每一个switch下都调用LoginIn函数,并传入对应的参数
  2. 注意包含文件名头文件、身份抽象基类头文件、文件操作头文件

LoginIn全局函数参数说明:

  • fileName — 操作的文件名,不同身份操纵的文件不一样
  • type — 登录的身份,不同身份的子菜单、权限等也不一样,设定 1代表学生、2代表老师、3代表管理员

LoginIn全局函数代码展示:

#include "Identity.h"
#include 
#include "globalFile.h"//全局函数 登录功能 参数1-操作文件名 参数2-操作身份类型
void LoginIn(string filename, int type)
{Identity* person = NULL;//父类指针,指向子类对象 创建子类对象//读文件ifstream ifs;ifs.open(filename, ios::in);//文件是否存在if (!ifs.is_open()){cout << "文件不存在!" << endl;ifs.close();return;}//接收用户信息int id = 0;string name;string password;//输入身份信息if (type == 1){cout << "请输入学号:";cin >> id;}else if (type == 2){cout << "\n请输入工号:";cin >> id;}cout << "\n请输入姓名:";cin >> name;cout << "\n请输入密码:";cin >> password;//身份验证if (type == 1){//学生身份验证}else if (type == 2){//老师身份验证}else if (type == 3){//管理员身份验证}cout << "验证登陆失败!" << endl;system("pause");system("cls");}

main函数提供不同登录接口,注意包含文件名的头文件

6.3 学生登录实现

  1. 在student.txt文件中添加两条学生信息,用于测试
  2. 在Login函数的学生分支中加入验证学生身份代码:
  • 首先读取文件记录的学生的学号、姓名、密码,再和学生输入的学号、姓名、密码进行比较,可以测试是否成功读取文件数据
  • 如果信息一致,提示用户验证成功,并创建一个学生类对象

添加信息:

  • 第一列 代表 学号
  • 第二列 代表 学生姓名
  • 第三列 代表 密码

验证学生身份代码展示:

		//身份验证if (type == 1)//学生身份验证{//读取学生文件信息int fid;string fname;string fpwd;//读一行的信息while (ifs >> fid && ifs >> fname && ifs >> fpwd){读取测试//cout << fid << endl;//cout << fname << endl;//cout << fpwd << endl;//cout << endl;//与用户输入的信息对比if (fid == id && fname == name && fpwd == password){cout << "学生登录验证成功!" << endl;system("pause");system("cls");person = new Student(id, name, password);//进入学生身份子菜单return;}}}

测试效果图

6.4 教师登录实现

  1. 在teacher.txt文件中添加一条老师信息,用于测试
  2. 在Login函数的老师分支中加入验证老师身份代码:
  • 首先读取文件记录的老师的工号、姓名、密码,再和输入的工号、姓名、密码进行比较,可以测试是否成功读取文件数据
  • 如果信息一致,提示用户验证成功,并创建一个老师类对象

添加信息:

  • 第一列 代表 教师职工编号
  • 第二列 代表 教师姓名
  • 第三列 代表 密码

验证教师身份代码展示:

else if (type == 2)//老师身份验证{//读取老师文件信息int fid;string fname;string fpwd;//读一行的信息while (ifs >> fid && ifs >> fname && ifs >> fpwd){//与用户输入的信息对比if (fid == id && fname == name && fpwd == password){cout << "教师登录验证成功!" << endl;system("pause");system("cls");person = new Teacher(id, name, password);//进入老师身份子菜单return;}}}

测试效果图

6.5 管理员登录实现

  1. 在teacher.txt文件中添加一条管理员信息,用于测试。由于只有一条管理员,因此没有添加管理员的功能
  2. 在Login函数的管理员分支中加入验证管理员身份代码:
  • 首先读取文件记录的管理员姓名和密码,再和输入的姓名、密码进行比较,可以测试是否成功读取文件数据
  • 如果信息一致,提示用户验证成功,并创建一个管理员类对象

添加信息:
在这里插入图片描述

其中:admin代表管理员用户名,123代表管理员密码

验证管理员身份代码展示:

else if (type == 3)//管理员身份验证{//读取管理员文件信息string fname;string fpwd;//读一行的信息while (ifs >> fname && ifs >> fpwd){//与用户输入的信息对比if (fname == name && fpwd == password){cout << "管理员登录验证成功!" << endl;system("pause");system("cls");person = new Manager(name, password);//进入管理员身份子菜单return;}}}

测试效果图:

相关内容

热门资讯

守护最北的日出星辰 转自:成都日报锦观江水深沉 江湾静谧守护最北的日出星辰 游客在漠河“神州北极”碑前打卡拍照,碑...
万华化学福建码头公司增资至10... 经济观察网 天眼查App显示,12月16日,万华化学(福建)码头有限公司发生工商变更,注册资本由4亿...
文旅“融”光焕发 共绘“诗与... ●兵团日报全媒体记者 姜蒙 通讯员 张培丽 胥强 仲冬时节,寒意渐浓,五师八十三团十连...
情暖援疆路 医心护健康 ●蔡伟 “医生,我的胃老是不舒服,吃了东西总不消化。”12月16日,在四师总医院可克达拉市院区...
以行践诺 服务暖心 ………… “我们将以更大力度推动‘万企兴万村’行动走深走实,团结引领兵团广大民营企业发挥优势,...