项目练习四

这个项目是教程里最后一个项目了,也是最复杂的,用了三天时间才做完,现在,做一下大致的梳理叭。

项目内容是建立一个机房预约系统,里面涉及的身份:学生代表(申请使用)、教师(审核预约申请)、管理员(给学生、教师创建账号,管理数据),机房信息(机房号、最大容量),申请(管理员每周清空申请订单,学生可以预约未来一周的机房使用,且预约周期为周一到周五,预约时需要选择预约时间段是上午还是下午,教师审核预约),预约状态(审核中、预约成功、预约失败、取消预约)

系统的具体要求如下:

1、进入登录界面

2、身份验证后进入各自的子界面

3、学生功能:

  • 申请预约
  • 查看自身的所有预约
  • 查看所有的预约
  • 取消预约
  • 注销登录

4、教师功能:

  • 查看所有预约
  • 审核预约
  • 注销登录

5、管理员功能:

  • 添加账号
  • 查看账号
  • 查看机房
  • 清空预约
  • 注销登录

首先和以前的项目不一样的是,这里不需要单独创建一个管理类来串联所有的功能,因为这里各个功能都是封装在不同的身份类中的,所以这里只需要一个主菜单界面,用来整合各个接口,实现与用户的交互。

其次,因为三种身份存在一定的共性(显示子菜单函数、登录用户名、登录密码),但同时又存在各自不同的属性和函数,所以创建一个identity类用来存放共性部分,而student类、teacher类和manager类就public继承一下,然后在各自的类里扩展功能。

管理类:

先说一下为什么要先写管理类呢,因为管理员是唯一有资格给学生和教师申请账号的,且他的工作室最复杂的,所以先写他。

  1. 显示管理员操作的菜单界面
  2. 添加账号:首先给个学生和教师各准备一个vector来存放现有的账号和密码,根据选择的添加账号类型去相应地判断此账号是否已经存在了,所以这里涉及到两个函数(init_vector()和checkrepeat()两个函数),如果不重复,则以追加的方式写进对应的文件里,并及时更新vector。
  3. 查看账号:就是简单的遍历各vector里的信息。
  4. 查看机房信息:机房信息也对应有单独的一类和单独的存放文件以及vector,这里也是init_vector以后,遍历vector就行。
  5. 清空预约记录:老套路了,用trunc的形式打开文件,记得delete掉对象,避免内存泄漏。

学生类:

  1. 显示学生操作的菜单界面
  2. 申请预约:这一部分主要就是要在规定的范围内输入,输入完成以后要及时写进文件中
  3. 查看自身预约:主要涉及对order_file文件的读操作,并且找到是自己的预约信息,然后输出出来。因为对order_file的操作对于不同的类来说都是一样的,所以单独把这个功能封装在一个ORDERFILE类中。
  4. 查看所有预约:直接读order_file文件。
  5. 取消预约:先要把所有可以取消预约的预约信息列出来,这得在查看自身预约的那些信息里面再筛选,然后选择要取消的那条信息,将它的状态信息置“0”。

教师类:

  1. 显示教师操作的菜单界面
  2. 查看所有预约:用ORDERFILE类来读取预约信息,然后输出。
  3. 审核预约:先输出待审核的预约信息,然后进行选择,将选到的信息的status位置为2或-1。

ORDERFILE类:

主要是对预约信息的一些操作。

成员参数:map<int, map<string, string>>,int m_Size(预约条数)

成员函数:构造函数、更新预约记录

这个类的难点在于构造函数里面,需要对读出的一行string作分割,放进对应的map的key和value中。

大致梳理是这样了,直接放代码了:

//头文件部分
********************************************************************************
//identity.h
********************************************************************************
#pragma once
#include<iostream>
#include<string>
#include"orderfile.h"
using namespace std;

class Identity {
public:
	//操作菜单
	virtual void operMenu() = 0;

	//用户姓名
	string m_Name;
	//用户密码
	string m_PassWord;
};
********************************************************************************
//manager.h
********************************************************************************
#pragma once
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include"identity.h"
#include"student.h"
#include"teacher.h"
#include"globalfile.h"
#include"computerroom.h"
using namespace std;

class Manager : public Identity{
public:
	//默认构造
	Manager();
	//有参构造
	Manager(string name, string pwd);
	//菜单界面
	virtual void operMenu();
	//添加账号
	void addPerson();
	//查看账号
	void showPerson();
	//查看机房信息
	void showComputer();
	//清空所有预约记录
	void cleanFile();
	//初始化容器
	void initVector();
	//检测重复
	bool checkReapet(int id, int type);//id表示学号/职工号,type表示学生还是教师
	vector<Student> vStu;
	vector<Teacher> vTea;
	vector<ComputerRoom> vCom;
};
********************************************************************************
//student.h
********************************************************************************
#pragma once
#include<iostream>
#include<vector>
#include<fstream>
#include"identity.h"
#include"computerroom.h"
#include"globalfile.h"
#include"orderfile.h"

using namespace std;

class Student : public Identity {
public:
	//构造函数
	Student();
	//有参构造
	Student(int id, string name, string pwd);
	//菜单界面
	virtual void operMenu();
	//申请预约
	void applyOrder();
	// 查看自身预约
	void showMyOrder();
	// 查看所有预约
	void showAllOrder();
	// 取消预约
	void cancelOrder();
	//学生学号
	int m_Id;
	vector<ComputerRoom> vCom;
};
********************************************************************************
//teacher.h
********************************************************************************
#pragma once
#include<iostream>
#include<string>
#include<vector>
#include"identity.h"
#include"orderfile.h"
using namespace std;

class Teacher : public Identity {
public:
	//默认构造
	Teacher();
	//有参构造
	Teacher(int id, string name, string pwd);
	//菜单界面
	virtual void operMenu();
	//查看所有预约
	void showAllOrder();
	//审核预约
	void validOrder();
	//职工号
	int m_EmpId;
};
********************************************************************************
//computerroom.h
********************************************************************************
#pragma once
#include<iostream>
using namespace std;

class ComputerRoom {
public:
	int m_ComId;//机房号
	int m_MaxNum;//机房最大容量
};
********************************************************************************
//orderfile.h
********************************************************************************
#pragma once
#include<iostream>
#include<fstream>
#include<string>
#include<map>
#include"globalfile.h"
using namespace std;

class OrderFile {
public:
	//构造函数
	OrderFile();

	//更新预约记录
	void updateOrder();

	//记录预约条数
	int m_Size;

	//记录所有预约信息的容器 key记录条数,value具体记录
	map<int, map<string, string>> m_orderDate;
};
********************************************************************************
//orderfile.h
********************************************************************************
#pragma once
#include<iostream>
#include<fstream>
#include<string>
#include<map>
#include"globalfile.h"
using namespace std;

class OrderFile {
public:
	//构造函数
	OrderFile();

	//更新预约记录
	void updateOrder();

	//记录预约条数
	int m_Size;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想要练习Spring Cloud项目,那么你可能需要以下步骤: 1. 首先,确保你已经安装了Java开发环境和Maven构建工具。 2. 创建一个新的Spring Boot项目。你可以使用Spring Initializr来快速创建一个基本的Spring Boot项目。确保在项目创建过程中选择Spring Cloud作为依赖。 3. 探索Spring Cloud的核心组件。Spring Cloud提供了许多有用的组件,如服务注册与发现(Eureka、Consul)、配置管理(Config)、负载均衡(Ribbon)、断路器(Hystrix)等。了解这些组件的基本概念和用法。 4. 创建一个服务提供者。使用Spring Cloud的服务注册与发现组件,将一个简单的REST API服务注册到服务注册中心,并通过服务注册中心进行服务发现。 5. 创建一个服务消费者。使用Spring Cloud的负载均衡组件,在消费者中调用服务提供者的API,并实现负载均衡。 6. 实现配置管理。使用Spring Cloud的配置管理组件,将配置文件集中管理,并在应用程序中动态加载配置。 7. 实现断路器模式。使用Spring Cloud的断路器组件,实现服务调用的容错和熔断机制,提高系统的稳定性和可靠性。 8. 部署和测试。使用Docker等容器化技术,将你的应用程序打包成镜像,并在本地或云平台上进行部署和测试。 记住,这只是一个简单的练习指南,你可以根据自己的需求和兴趣进一步扩展和深入学习Spring Cloud。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值