c++学习笔记-STL案例-机房预约系统3-登录模块

前言

衔接上一篇“c++学习笔记-STL案例-机房预约系统2-创建身份类”,本文主要设计登录模块,建立globalFile.h头文件定义使用的文件名字符串,登录函数封装,并对学生登录、老师登录、管理员登录进行了具体实现。


目录

6 登录模块

6.1 全局文件添加

6.1.1 功能描述

6.1.2 创建文件

6.2 登录函数封装

6.2.1 功能描述

6.2.2 添加全局函数LoginIn

6.2.3 不同身份登录接口

6.2.4 实现代码

总结


6 登录模块

6.1 全局文件添加

6.1.1 功能描述

  • 不同身份可能会用到不同的文件操作,我们可以将所有的文件名定义到一个全局的文件中
  • 在头文件中添加globalFile.h文件

c++学习笔记-STL案例-机房预约系统3-登录模块_第1张图片

  • 并添加如下代码:

宏定义字符串,使用时添加#include"globalFile.h"头文件

#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.1.2 创建文件

同级目录下,创建这几个文件:

c++学习笔记-STL案例-机房预约系统3-登录模块_第2张图片

6.2 登录函数封装

6.2.1 功能描述

  • 根据用户的选择,进入不同的身份登录

6.2.2 设计实现

(1)在预约系统的.cpp文件中添加全局函数 void LoginIn(string fileName,int type)参数:

  • fileName---操作的文件名
  • type---登录的身份(1代表学生  2代表老师  3代表管理员)

(2)在main函数的不同分支,填入不同的登录接口

6.2.3 实现代码

预约系统的.cpp新增LoginIn函数以及新增main()函数不同分支登录接口代码如下:

#include
using namespace std;
#include"identity.h"
#include
#include
#include"globalFile.h"

//登录功能  fileName是操作文件的文件名  type是操作身份类型
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 pwd;

	//判断身份
	if (type == 1)  //学生身份
	{
		cout << "请输入你的学号:" << endl;
		cin >> id;
	}
	else if(type == 2)
	{
		cout << "请输入您的职工号:" << endl;
		cin >> id;
	}

	cout << "请输入用户名:" << endl;
	cin >> name;

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

	if (type == 1)
	{
		//学生身份验证

	}
	else if (type == 2)
	{
		//教师身份验证

	}
	else if (type == 3)
	{
		//管理员身份验证

	}

	cout << "验证登录失败" << endl;
	system("pause");
	system("cls");
	return;

}

int main()
{
	int select = 0;//用于接收用户的选择

	while (true)
	{
		cout << "========================= 欢迎来到机房预约系统 =========================" << endl;
		cout << endl << "请输入您的身份" << 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|                 0.退    出                      |\n";
		cout << "\t\t|                                                 |\n";
		cout << "\t\t -------------------------------------------------" << endl;
		cout << "输入您的选择:";

		cin >> select;//接受用户的选择
		switch (select)
		{
		case 1:  //学生身份
			LoginIn(STUDENT_FILE, 1);
			break;
		case 2:  //老师身份
			LoginIn(TEACHER_FILE, 2);
			break;
		case 3:  //管理员身份
			LoginIn(ADMIN_FILE, 3);
			break;
		case 0:  //退出系统
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
			break;
		default:
			cout << "输入有误,请重新选择!" << endl;
			system("pause");
			system("cls");
			break;
		}
	}

	system("pause");
	return 0;

}

6.2.4 测试实现

c++学习笔记-STL案例-机房预约系统3-登录模块_第3张图片

因为此时的实现分支都是空实现,所以验证登录失败,测试代码无报错

总结

  • 不同身份具有不同的成员变量,学生有学号Id,老师有职工号Id,管理员无Id,需要分支判断
  • 学生、老师、管理员共同有用户名、密码
  • 学生、老师、管理员验证登录成功后,有不同的菜单界面,需要加分支判断
  • LoginIn(fileName,type),fileName是#include"globalFile.h"头文件定义的宏,是全局文件名字符串,使用时需要添加“lobalFile.h"头文件,type是1、2、3分别代表学生、老师、管理员

你可能感兴趣的:(c++,learning,notes,学习,笔记,c++)