栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ | C++实现学校机房预约系统(文件操作)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ | C++实现学校机房预约系统(文件操作)

文章目录
    • 头文件
    • 源文件

头文件

globalFile.h

#pragma once	

 
#define TEACH_FILE "teacher.txt"


#define STU_FILE "student.txt"


#define ADMIN_FILE "admin.txt"


#define ORDER_FILE "order.txt"


#define ROOM_INFO "room.txt"


enum STATUS{
	REVIEWING,	// 审核中
	SUCCESS,	// 成功
	APPOIFAIL,	// 预约失败
	APPOICANCEL	// 取消预约
};


enum level {
	STU,	
	T,		
	A		
};

identify.h

#pragma once
#include 
#include 
#include "globalFile.h"
#include 

class Identify
{
public:
	
	virtual void openMenu() = 0;

	
	virtual void changePwd() = 0;

	
	virtual void sysExit() = 0;

	
	virtual void select(int) = 0;

	std::string m_name;
	std::string m_pwd;
	bool isExit = false;
	std::string roomInfo[20];
};


machineManager.h

#pragma once
#include 
#include 
#include "globalFile.h"


class MachineManager
{
public:

	MachineManager();
	
	
	void menu_init();

	
	void sys_exit();

	
	void user_login(level);

	bool login(const std::string, const std::string, const std::string, const int id = 0);

	
	bool isEqual(const std::string, const std::string);
	
	~MachineManager();


};


Manager.h

#pragma once
#include "identify.h"

class Manager: public Identify
{
public:

	Manager();

	
	Manager(std::string name, std::string pwd);

	
	void sysExit();

	
	void openMenu();

	
	void changePwd();

	
	void addAccount(int);

	
	void applyAcount(const std::string);

	
	void showAccount();

	
	void showAppoiInfo();

	
	void clearAppoi();

	
	void select(int);

	
	bool checkUniqueId(const std::string, int, std::string);

};


student.h

#pragma once
#include "identify.h"

class Student: public Identify
{
public:
	Student();
	
	Student(int id, std::string name, std::string pwd);

	
	void openMenu();

	
	void sysExit();

	
	void changePwd();

	
	void applyAppoi();

	
	void showAppoiInfo();

	
	void showAppoiAll();

	
	void cancelApppoi();

	
	void select(int);

	int m_id;
};


teach.h

#pragma once
#include 
#include "identify.h"


class Teacher : public Identify
{
public:
	
	Teacher();

	
	Teacher(int id, std::string name, std::string pwd);

	
	void sysExit();

	
	void openMenu();

	
	void changePwd();

	
	void checkAppoi();

	
	void showAppoiAll();

	
	void select(int);

	int m_id;
};


源文件

machinaManager.cpp

#define _CRT_SECURE_NO_WARNINGS
#include "machineManager.h"
#include "identify.h"
#include "Manager.h"
#include "student.h"
#include "teach.h"


void MachineManager::menu_init()
{
	std::cout << "====================== 欢迎来到校园机房预约系统 ====================== " << std::endl;
	std::cout << "ttt1. 学 生 用 户" << std::endl;
	std::cout << "ttt2. 教 师 用 户" << std::endl;
	std::cout << "ttt3. 管   理   员  " << std::endl;
	std::cout << "ttt0. 退       出" << std::endl;
	std::cout << "请输入您的选择:";
}


void MachineManager::sys_exit()
{
	std::cout << "欢迎下次使用..." << std::endl;
	system("pause");
	exit(0);
}



void MachineManager::user_login(level l)
{
	char name[30], pwd[30];
	int id;

	std::cout << "请输入id:";
	std::cin >> id;

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

	std::cout << "请输入密码:";
	std::cin >> pwd;
	Identify *user = NULL;

	switch (l)
	{
	case STU:
		if (login(STU_FILE, name, pwd, id))
			user = new Student(id, name, pwd);
		else
		{
			std::cout << "用户名或密码不正确请重新输入..." << std::endl;
			return;
		}

		break;
	case T:
		if (login(TEACH_FILE, name, pwd, id))
			user = new Teacher(id, name, pwd);
		else
		{
			std::cout << "用户名或密码不正确请重新输入..." << std::endl;
			return;
		}
		break;
	case A:
		if (login(ADMIN_FILE, name, pwd, id))
			user = new Manager(name, pwd);
		else
		{
			std::cout << "用户名或密码不正确请重新输入..." << std::endl;
			return;
		}
		break;
	default:
		std::cout << "没有该用户,无法登录..." << std::endl;
		return;
		break;
	}

	int choice = 0;

	while (true)
	{
		if (user->isExit)
			break;
		user->openMenu();
		std::cin >> choice;
		user->select(choice);
	}
}


bool MachineManager::login(const std::string fileName, const std::string name, const std::string pwd, const int id)
{
	std::ifstream fp;
	std::string m_name, m_pwd;
	int m_id = 0;
	fp.open(fileName, std::ios::in);
	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return false;
	}
	char buf[128];
	while (fp.getline(buf, 128))
	{
		char *t_id = strtok(buf, " ");
		if (atoi(t_id) == id)
		{
			char *t_name = strtok(NULL, " ");		// 获取用户名
			std::cout << t_name << std::endl;
			if (this->isEqual(t_name, name))
			{
				char *t_pwd = strtok(NULL, " ");	// 获取密码
				if (this->isEqual(t_pwd, pwd))
				{
					std::cout << "用户【" < 

main.cpp

#define _CRT_SECURE_NO_WARNINGS
#include 
#include "machineManager.h"

void test()
{
	MachineManager manager;

	int choice = 0;
	while (1)
	{
		manager.menu_init();
		std::cin >> choice;

		switch (choice)
		{
		case 0:	// 退出
			manager.sys_exit();
			break;
		case 1:	// 学生
			manager.user_login(STU);
			break;
		case 2:	// 教师
			manager.user_login(T);
			break;
		case 3:	// 管理员
			manager.user_login(A);
			break;
		default:
			std::cout << "输入有误,请重新输入:";
			break;
		}
		system("pause");
		system("cls");
	}
}

void test01()
{
	char i = '0', o = '0';
	char a = i | o;
	std::cout << a << std::endl;
}



void main()
{
	test01();

	system("pause");
}

Manager.cpp

#define _CRT_SECURE_NO_WARNINGS
#include "Manager.h"


Manager::Manager(std::string name, std::string pwd)
{
	this->m_name = name;
	this->m_pwd = pwd;
	this->isExit = false;
	
}


void Manager::openMenu()
{
	system("cls");
	std::cout << "========================= 用户【" << this->m_name << "】 ========================= " << std::endl;
	std::cout << "ttt1. 添 加 账 号" << std::endl;
	std::cout << "ttt2. 查看所有账号  " << std::endl;
	std::cout << "ttt3. 查看机房信息" << std::endl;
	std::cout << "ttt4. 清空预约记录" << std::endl;
	std::cout << "ttt0. 退       出" << std::endl;
	std::cout << "请输入您的选择:";
}


void Manager::changePwd()
{
}


void Manager::addAccount(int s)
{
	switch (s)	
	{
	case 1:	 // 添加学生账户
		this->applyAcount(STU_FILE);
		break;

	case 2:	// 添加老师账户
		this->applyAcount(TEACH_FILE);
		break;
	default:
		break;
	}
}



void Manager::applyAcount(const std::string fileName)
{
	std::ofstream fp;
	int id;
	std::string m_name, m_pwd;

	fp.open(fileName, std::ios::out | std::ios::app);
	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}
	
	while (true)
	{
		std::cout << "请输入用户id:";
		std::cin >> id;
		std::cout << "请输入用户名:";
		std::cin >> m_name;
		std::cout << "请输入密码:";
		std::cin >> m_pwd;
		if (this->checkUniqueId(fileName, id, m_name))
			break;
	}
	 
	fp << id << " " << m_name << " " << m_pwd << std::endl;
	std::cout << "用户【" << m_name << "】添加成功..." << std::endl;
	fp.close();
	system("pause");
}


bool Manager::checkUniqueId(const std::string fileName, int id, std::string name)
{
	std::ifstream fp;
	fp.open(fileName, std::ios::in);
	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return NULL;
	}
	int t_id;
	char t_name[20];
	char t_pwd[20];
	
	while (fp >> t_id && fp >> t_name && fp >> t_pwd)
	{
		if (t_id == id || t_name == name)		// 判断是否相同
		{
			std::cout << "该用户名被注册...." << std::endl;
			return false;
		}
	}
	return true;
}


void Manager::showAccount()
{
	std::ifstream fp_stu, fp_t, fp_a;
	fp_stu.open(STU_FILE, std::ios::in);
	fp_t.open(TEACH_FILE, std::ios::in);
	fp_a.open(ADMIN_FILE, std::ios::in);
	if (!fp_stu.is_open() || !fp_t.is_open() || !fp_a.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}

	int m_id;
	char m_name[20];
	char m_pwd[20];
	std::cout << "============学生用户============" << std::endl;
	while (fp_stu >> m_id && fp_stu >> m_name && fp_stu >> m_pwd)
		std::cout << "用户id:" << m_id << "  用户名:" << m_name << "  用户密码:" << m_pwd << std::endl;

	std::cout << std::endl;
	std::cout << "============教师用户============" << std::endl;
	while (fp_t >> m_id && fp_t >> m_name && fp_t >> m_pwd)
		std::cout << "用户id:" << m_id << "  用户名:" << m_name << "  用户密码:" << m_pwd << std::endl;
	std::cout << std::endl;
	std::cout << "============管理员用户============" << std::endl;
	while (fp_a >> m_id && fp_a >> m_name && fp_a >> m_pwd)
		std::cout << "用户id:" << m_id << "  用户名:" << m_name << "  用户密码:" << m_pwd << std::endl;

	system("pause");
	
}


void Manager::showAppoiInfo()
{
	std::ifstream fp;
	int i = 0;
	fp.open(ROOM_INFO, std::ios::in);

	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}

	std::string a, e, o, u, r;
	while (fp >> a &&fp >> e && fp >> o && fp >> u && fp >> r)
	{
		if (i == 0)
			std::cout << "    上午  " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
		else
			std::cout << "    下午  " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
	}

	fp.close();
	system("pause");
}


void Manager::clearAppoi()
{
	std::ofstream fp;
	int i = 0;
	fp.open("room.txt", std::ios::out);
	fp << "0t 0t 0t 0t 0" << std::endl;
	fp << "0t 0t 0t 0t 0" << std::endl;
	fp.close();
	std::cout << "预约已清空..." << std::endl;
	system("pause");
}


void Manager::sysExit()
{
	this->isExit = true;
	std::cout << "欢迎用户【" << this->m_name << "】下次使用..." << std::endl;
}


void Manager::select(int choice)
{
	int s = 0;
	switch (choice)
	{
	case 1:	// 添加用户
		std::cout << "请输入【1.添加学生账户 2.添加教师账户】:";
		std::cin >> s;
		this->addAccount(s);
		break;
	case 2:	// 查看所有用户
		this->showAccount();
		break;
	case 3:	// 清空预约记录
		this->showAppoiInfo();
		break;
	case 4:
		this->clearAppoi();
		break;
	case 0:	// 退出
		sysExit();
		break;
	default:
		std::cout << "没有该选项,请重新选择..." << std::endl;
		break;
	}
}

student.cpp

#define _CRT_SECURE_NO_WARNINGS
#include "student.h"



Student::Student(int id, std::string name, std::string pwd)
{
	this->m_id = id;
	this->m_name = name;
	this->m_pwd = pwd;
	this->isExit = false;
}


void Student::openMenu()
{
	system("cls");
	std::cout << "======================== 欢迎用户【"<< this->m_name <<  "】 ======================== " << std::endl;
	std::cout << "ttt1. 申 请 预 约" << std::endl;
	std::cout << "ttt2. 查看自身预约" << std::endl;
	std::cout << "ttt3. 查看所有预约  " << std::endl;
	std::cout << "ttt4. 取 消 预 约" << std::endl;
	std::cout << "ttt5. 修 改 密 码" << std::endl;
	std::cout << "ttt0. 退       出" << std::endl;
	std::cout << "请输入您的选择:";
}


void Student::changePwd()
{
	int i = 0, record = -1;
	std::string m_pwd;
	std::ifstream fp_r;
	std::ofstream fp_w;

	std::cout << "请输入要修改的密码:";
	std::cin >> m_pwd;

	
	fp_r.open(STU_FILE, std::ios::in | std::ios::app);
	if (!fp_r.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}

	char buf[128];
	std::string data[1024];
	std::string t_id;
	
	while (fp_r.getline(buf, 128))
	{
		data[i] = buf;
		int lpos = data[i].find(" ");			// 获取用户id
		t_id = data[i].substr(0, lpos);
		
		if (atoi(t_id.c_str()) == this->m_id)
		{
			record = i;
		}
		i++;
	}
	fp_r.close();

	
	fp_w.open(STU_FILE, std::ios::out || std::ios::app);
	if (!fp_w.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}


	
	for (int j = 0; j < i; ++j)
	{
		if (j == record)
			fp_w <<  this->m_id  <<  " " + this->m_name + " " + m_pwd << std::endl;
		else
			fp_w << data[j] << std::endl;
	}

	fp_w.close();
	std::cout << "密码修改成功..." << std::endl;
	system("pause");
	system("cls");
}


void Student::applyAppoi()
{
	std::ofstream fp;
	std::string day, lday, room;
	std::cout << "请选择【星期一~五】:";
	std::cin >> day;
	std::cout << "请选择【上午/下午】:";
	std::cin >> lday;
	std::cout << "请选择机房号【1~3】:";
	std::cin >> room;

	fp.open(ORDER_FILE, std::ios::app);
	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}
	fp << this->m_name + " " + day + " " + lday;

	std::cout << "预约申请已提交,等待审核..." << std::endl;
}


void Student::showAppoiInfo()
{
	std::ifstream fp;
	int i = 0;
	fp.open("room.txt", std::ios::in);

	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}
	char buf[128];
	while (fp.getline(buf, 128))
	{
		this->roomInfo[i] = buf;
		i++;
	}
}


void Student::showAppoiAll()
{
	std::ifstream fp;
	int i = 0;
	fp.open(ROOM_INFO, std::ios::in);

	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}

	std::string a, e, o, u, r;
	while (fp >> a &&fp >> e && fp >> o && fp >> u && fp >> r)
	{
		if (i == 0)
			std::cout << "    上午  " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
		else
			std::cout << "    下午  " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
	}

	fp.close();
	system("pause");
}


void Student::cancelApppoi()
{
	
}


void Student::sysExit()
{
	this->isExit = true;
	std::cout << "欢迎用户【" << this->m_name << "】下次使用..." << std::endl;
}


void Student::select(int choice)
{
	switch (choice)
	{
	case 1:		// 申请预约
		this->applyAppoi();
		break;
	case 2:		// 查看自身预约
		this->showAppoiInfo();
		break;
	case 3:		// 查看所有预约
		this->showAppoiAll();
		break;
	case 4:		// 取消预约
		this->cancelApppoi();
		break;	
	case 5:		// 修改密码
		this->changePwd();
		break;
	case 0:		// 退出
		this->sysExit();
		break;
	default:
		break;
	}
}

teacher.cpp

#include "teach.h"



Teacher::Teacher(int id, std::string name, std::string pwd)
{
	this->m_id = id;
	this->m_name = name;
	this->m_pwd = pwd;
	this->isExit = false;
}


void Teacher::openMenu()
{
	system("cls");
	std::cout << "========================= 用户【" << this->m_name << "】 ========================= " << std::endl;
	std::cout << "ttt1. 审 核 预 约" << std::endl;
	std::cout << "ttt2. 查看所有预约  " << std::endl;
	std::cout << "ttt3. 修 改 密 码" << std::endl;
	std::cout << "ttt0. 退       出" << std::endl;
	std::cout << "请输入您的选择:";
}


void Teacher::changePwd()
{
	int i = 0, record = -1;
	std::string m_pwd;
	std::ifstream fp_r;
	std::ofstream fp_w;

	std::cout << "请输入要修改的密码:";
	std::cin >> m_pwd;

	
	fp_r.open(TEACH_FILE, std::ios::in | std::ios::app);
	if (!fp_r.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}

	char buf[128];
	std::string data[1024];
	std::string t_id;
	
	while (fp_r.getline(buf, 128))
	{
		data[i] = buf;
		int lpos = data[i].find(" ");			// 获取用户id
		t_id = data[i].substr(0, lpos);
		
		if (atoi(t_id.c_str()) == this->m_id)
		{
			record = i;
		}
		i++;
	}
	fp_r.close();

	
	fp_w.open(TEACH_FILE, std::ios::out || std::ios::app);
	if (!fp_w.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}


	
	for (int j = 0; j < i; ++j)
	{
		if (j == record)
			fp_w << this->m_id << " " + this->m_name + " " + m_pwd << std::endl;
		else
			fp_w << data[j] << std::endl;
	}

	fp_w.close();
	std::cout << "密码修改成功..." << std::endl;
	system("pause");
	system("cls");

}


void Teacher::checkAppoi()
{
	char arr[5][2] = { 0 };
	std::ifstream fp;
	fp.open(ORDER_FILE, std::ios::in);
	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}
	
	
	std::string t_name;
	std::string day;
	std::string lday;
	
	while (fp >> t_name && fp >> day && fp >> lday)
	{
		std::cout << "【" << t_name << "】预约时间: " << day << "," << lday << std::endl;
		int checked = 0;
		std::cout << "请审核是否通过:【0/1】";
		std::cin >> checked;
		if (checked == 1)
		{
			if (lday == "上午")
			{
				if (day == "星期一")
					arr[0][0] = '1';
				else if (day == "星期二")
					arr[1][0] = '1';
				else if (day == "星期三")
					arr[2][0] = '1';
				else if (day == "星期四")
					arr[3][0] = '1';
				else if (day == "星期五")
					arr[4][0] = '1';
			}
			else
			{
				if (day == "星期一")
					arr[0][1] = '1';
				else if (day == "星期二")
					arr[1][1] = '1';
				else if (day == "星期三")
					arr[2][1] = '1';
				else if (day == "星期四")
					arr[3][1] = '1';
				else if (day == "星期五")
					arr[4][1] = '1';
			}
		}
	}
	
	std::ifstream fp_r;
	fp_r.open(ROOM_INFO, std::ios::in);

	if (!fp_r.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}
	char buf[128];
	int j = 0;
	while (fp_r.getline(buf, 128))
	{
		for (int i = 0; i < 5; ++i)
		{
			arr[j][i] |= buf[i * 2];
		}
		j++;
	}

	
	std::ofstream fp_w;
	fp_w.open(ROOM_INFO, std::ios::out);

	if (!fp_w.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}

	for (int i = 0; i < 2; ++i)
		fp_w << arr[i] << std::endl;
}



void Teacher::showAppoiAll()
{
	std::ifstream fp;
	int i = 0;
	fp.open(ROOM_INFO, std::ios::in);

	if (!fp.is_open())
	{
		std::cout << "文件打开失败..." << std::endl;
		return;
	}
	std::cout << "t星期一  星期二  星期三  星期四  星期五" << std::endl;
	std::string a, e, o, u, r;
	while (fp >> a &&fp >> e && fp >> o && fp >> u && fp >> r)
	{
		if (i == 0)
			std::cout << "    上午  " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
		else
			std::cout << "    下午  " << "t " << a << "t " << e << "t " << o << "t " << u << "t " << r << std::endl;
	}

	fp.close();
	system("pause");
}


void Teacher::sysExit()
{
	this->isExit = true;
	std::cout << "欢迎用户【" << this->m_name << "】下次使用..." << std::endl;
}


void Teacher::select(int choice)
{
	switch (choice)
	{
	case 1:		// 审核预约
		this->checkAppoi();
		break;
	case 2:		// 查看所有预约
		this->showAppoiAll();
		break;
	case 3:		// 取消预约
		this->changePwd();
		break;
	case 0:		// 退出
		this->sysExit();
		break;
	default:
		break;
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433550.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号