• 某马机房预约系统 C++项目(二) 完结


    8.4、查看机房

    8.4.1、添加机房信息

    根据案例,我们还是先在computerRoom.txt中直接添加点数据

    //几机房  机器数量
    1 20
    2 50
    3 100
    
    • 1
    • 2
    • 3
    • 4

    image-20231019212836474

    8.4.2、机房类创建

    ​ 同样我们在头文件下新建一个computerRoom.h文件

    添加如下代码:

    #pragma once
    #include
    using namespace std;
    
    class ComputerRoom {
    public:
    	//机房id
    	int m_ComId;
    	//机房最大容量
    	int m_MaxNum;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    8.4.3、初始化机房信息并显示

    在Manager管理类下,添加机房的容器,用于保存信息

    //机房容器
    #include "computerRoom.h"
    vector vCom;
    
    • 1
    • 2
    • 3

    在Manager有参构造函数中,追加如下代码,初始化机房信息

    image-20231020204646730

    //获取机房信息
    void Manager::getComputerNumber()
    {
    	// 文件名
    	string computerFile = COMPUTER_FILE; // 替换为机房文件名
    
    	ifstream  ifs;
    	ifs.open(COMPUTER_FILE, ios::in);
    
    	ComputerRoom c;
    
    	while (ifs>>c.m_ComId && ifs>>c.m_MaxNum)
    	{
    		vCom.push_back(c);
    	}
    
    	cout << "当前机房数量为: " << vCom.size() << endl;
    
    	ifs.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    然后我们修改showComputer成员方法

    void Manager::showComputer()
    {
    	cout << "机房信息如下: " << endl;
    	for (vector::iterator it = vCom.begin(); it != vCom.end();it++) {
    		cout << "机房编号:" << it->m_ComId << " 机房最大容量:" << it->m_MaxNum << endl;
    	}
    
    	system("pause");
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    效果图:

    image-20231020205146979

    8.5、清空预约功能

    接着我们来实现cleanFile成员方法

    由于我们order文件中没有东西,如果需要测试可以自己添加一点

    //清空预约系统
    void Manager::clearFile()
    {
    	ofstream ofs(ORDER_FILE, ios::trunc);
    	ofs.close();
    
    	cout << "清空成功!" << endl;
    	system("pause");
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    9、学生模块

    9.1、初始化信息

    接下来我们对学生有参构造进行实现

    student.cpp

    //有参构造
    Student::Student(int id, string name, string pwd)
    {
    	this->m_Id = id;
    	this->m_Name = name;
    	this->m_Pwd = pwd;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    9.2、菜单实现

    首先添加一个学生菜单函数,在机房预约系统.cpp中添加

    void studentMenu(Indentity*& student);
    
    • 1

    然后我们来实现一下具体的步骤

    void Student::studentMenu(Indentity*& student)
    {
    	while (true)
    	{
    		//学生菜单
    		student->operMenu();
    		Student* stu = (Student*)student;
    
    		//接受用户选项
    		int select = 0;
    	
    		cin >> select;
    		switch (select)
    		{
    		case 1: //申请预约
    			cout << "申请预约" << endl;
    			stu->applyOrder();
    			break;
    		case 2://查看预约
    			cout << "查看预约" << endl;
    			stu->showMyOrder();
    			break;
    		case 3://查看所有预约
    			cout << "查看所有预约" << endl;
    			stu->showAllOrder();
    			break;
    		case 4://取消预约
    			cout << "取消预约" << endl;
    			stu->cancelOrder();
    			break;
    		default:
    			//注销登录
    		//销毁掉堆区对象
    			delete student;
    			cout << "注销成功" << endl;
    			system("pause");
    			system("cls");
    			return;
    
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    接着我们来添加一下菜单,回到student.cpp

    void Student::operMenu()
    {
    	cout << "欢迎:" << this->m_Name << "同学登录!" << endl;
    	cout << endl;
    	cout << "--------------       1、申请预约      -----------------" << endl;
    	cout << endl;
    	cout << "--------------       2、查看预约      -----------------" << endl;
    	cout << endl;
    	cout << "--------------       3、查看所有预约  -----------------" << endl;
    	cout << endl;
    	cout << "--------------       4、取消预约      -----------------" << endl;
    	cout << endl;
    	cout << "--------------    输入其他数字退出    -----------------" << endl;
    	cout << "-------------------------------------------------------" << endl;
    	cout << "请输入序号进行操作:";
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    然后回到机房预约系统.cpp

    image-20231020212638755

    在这里添加方法,测试一下

    image-20231020212616382

    9.3、申请预约实现

    然后我们也要来获取一下机房信息,在studen.h中

    #include"computerRoom.h"
    #include "globalFile.h"
    #include
    //机房信息
    vector vCom;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    回到student.cpp中的学生构造中填一下以下代码

    //有参构造
    Student::Student(int id, string name, string pwd)
    {
    	this->m_Id = id;
    	this->m_Name = name;
    	this->m_Pwd = pwd;
    
    	// 文件名
    	string computerFile = COMPUTER_FILE; // 替换为机房文件名
    
    	ifstream  ifs;
    	ifs.open(COMPUTER_FILE, ios::in);
    
    	ComputerRoom c;
    
    	while (ifs >> c.m_ComId && ifs >> c.m_MaxNum)
    	{
    		vCom.push_back(c);
    	}
    
    	ifs.close();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    然后我们来实现预约功能在applyOrder()中实现

    void Student::applyOrder()
    {
    	cout << "机房开放时间为周一到周五!" << endl;
    	cout << "请输入预约时间!" << endl;
    	cout << "1、周一!" << endl;
    	cout << "2、周二!" << endl;
    	cout << "3、周三!" << endl;
    	cout << "4、周四!" << endl;
    	cout << "5、周五!" << endl;
    	int date = 0;
    	int interval = 0;
    	int room = 0;
    
    	while (true)
    	{
    		cin >> date;
    		if (date>=1&&date<=5)
    		{
    			break;
    		}
    		cout << "输入有误,请重新输入" << endl;
    	}
    
    	cout << "请输入申请预约时间段" << endl;
    	cout << "1、上午" << endl;
    	cout << "2、下午" << endl;
    
    	while (true)
    	{
    		cin >> interval;
    		if (interval >= 1 && interval <= 2)
    		{
    			break;
    		}
    		cout << "输入有误,请重新输入" << endl;
    	}
    
    	cout << "请选择机房:" << endl;
    	cout << "1号机房容量:" <> room;
    		if (room>=1&&room<=3)
    		{
    			break;
    		}
    		cout << "输入有误,请重新输入" << endl;
    	}
    
    	cout << "预约成功!等待审核" << endl;
    
    	ofstream ofs(ORDER_FILE, ios::app);
    	ofs << "data:" << date << " ";
    	ofs << "interval:" << interval << " ";
    	ofs << "stuId:" << this->m_Id << " ";
    	ofs << "stuName:" << this->m_Name << " ";
    	ofs << "roomId:" << room << " ";
    	ofs << "status:" << 1 << endl;;
    
    	ofs.close();
    	system("pause");
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    image-20231020214550545

    9.4、显示预约

    接着我们来创建一个预约类,用于获取所有记录和显示,以及更新

    文件名为orderFile.h 和 orderFile.cpp文件

    orderFile.h

    #pragma once
    #include
    #include
    #include "globalFile.h"
    #include
    using namespace std;
    
    class OrderFile {
    public:
    
    	//构造函数
    	OrderFile();
    
    	//更新预约记录
    	void updateOrder();
    
    	//记录容器 key 记录条数 value -- 具体记录的键值对
    	map>m_orderData;
    
    	//记录预约的条数
    	int m_size;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    orderFile.cpp

    OrderFile::OrderFile()
    {
    	ifstream ifs;
    	ifs.open(ORDER_FILE, ios::in);
    
    	string date; //日期
    	string interval; //时间段
    	string stuId; //学生编号
    	string stuName; //学生姓名
    	string roomId; //机房号
    	string status; //预约状态
    
    	this->m_size = 0; //记录条数
    
    	while (ifs>>date && ifs >> interval&&
    			ifs>>stuId&&ifs>>stuName&&ifs>>roomId
    			&&ifs>>status)
    	{
    		map m;
    		insertInfo(m, date);
    		insertInfo(m, interval);
    		insertInfo(m, stuId);
    		insertInfo(m, stuName);
    		insertInfo(m, roomId);
    		insertInfo(m, status);
    
    		//将小mpa容器放到大的map容器中
    		this->m_orderData.insert(make_pair(this->m_size, m));
    		this->m_size++;
    		//清空小容器
    		m.clear();
    	}
    	ifs.close();
    	//测试代码
    	for (map>::iterator it = m_orderData.begin(); it != m_orderData.end(); it++) {
    		cout << "条数为:" << it->first << "value = " << endl;
    		for (map::iterator mit = (*it).second.begin(); mit != it->second.end(); mit++) {
    			cout << "key = " << mit->first << " value = " << mit->second << " ";
    		}
    		cout << endl;
    	}
    }
    //截取字符串
    void OrderFile::insertInfo(map &m,string keys) {
    	string key;
    	string value;
    	int pos = keys.find(":");
    	if (pos != -1)
    	{
    		key = keys.substr(0, pos);
    		value = keys.substr(pos + 1);
    		m.insert(make_pair(key, value));
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    9.4.1、查看自身预约

    student.cpp

    void Student::showMyOrder()
    {
    	OrderFile of;
    	if (of.m_size == 0) {
    		cout << "无预约记录!" << endl;
    		system("pause");
    		system("cls");
    		return;
    	}
    
    	for (int i = 0; i < of.m_size; i++) {
    		//找到自身预约
    		if (this->m_Id == stoi(of.m_orderData[i]["stuId"].c_str())) {
    			cout << "预约的日期:周" << of.m_orderData[i]["date"];
    			cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
    			cout << " 机房号:" << of.m_orderData[i]["roomId"];
    			string status = " 状态: ";
    			//1.审核中 2.已预约 - 1 预约失败 0 取消预约
    			if (of.m_orderData[i]["status"]=="1")
    			{
    				status += "审核中";
    			}
    			else if (of.m_orderData[i]["status"] == "2") {
    				status += "预约成功";
    
    			}
    			else if (of.m_orderData[i]["status"] == "-1") {
    				status += "预约失败,审核未通过";
    			}else{
    				status += "预约已经取消";
    			}
    			cout << status << endl;
    		}
    	}
    	system("pause");
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    9.4.2、显示所有预约

    //查看所有预约
    void Student::showAllOrder()
    {
    	OrderFile of;
    	if (of.m_size == 0) {
    		cout << "无预约记录!" << endl;
    		system("pause");
    		system("cls");
    		return;
    	}
    	for (int i = 0; i < of.m_size; i++) {
    		cout << "预约的日期:周" << of.m_orderData[i]["date"];
    		cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
    		cout << " 学号:" << of.m_orderData[i]["stuId"];
    		cout << " 姓名:" << of.m_orderData[i]["stuName"];
    		cout << " 机房号:" << of.m_orderData[i]["roomId"];
    		string status = " 状态: ";
    		//1.审核中 2.已预约 - 1 预约失败 0 取消预约
    		if (of.m_orderData[i]["status"] == "1")
    		{
    			status += "审核中";
    		}
    		else if (of.m_orderData[i]["status"] == "2") {
    			status += "预约成功";
    
    		}
    		else if (of.m_orderData[i]["status"] == "-1") {
    			status += "预约失败,审核未通过";
    		}
    		else {
    			status += "预约已经取消";
    		}
    		cout << status << endl;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    9.5、取消预约

    student.cpp

    //取消预约
    void Student::cancelOrder()
    {
    	OrderFile of;
    	if (of.m_size == 0)
    	{
    		cout << "无预约记录" << endl;
    		system("pause");
    		system("cls");
    	}
    	cout << "审核中或预约成功的记录可以取消,请输入取消的记录" << endl;
    	vector v;
    	int index = 1;
    	for (int i = 0; i< of.m_size; i++)
    	{
    		if (this->m_Id == stoi(of.m_orderData[i]["stuId"])) {
    			//再筛选状态 审核中或预约成功的
    			if (of.m_orderData[i]["status"]=="1"||of.m_orderData[i]["Status"]=="2")
    			{
    				v.push_back(i);
    				cout << index++ << "、";
    				cout << "预约的日期:周" << of.m_orderData[i]["date"];
    				cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
    				cout << " 机房号:" << of.m_orderData[i]["roomId"];
    				string status = " 状态: ";
    				//1.审核中 2.已预约 - 1 预约失败 0 取消预约
    				if (of.m_orderData[i]["status"] == "1")
    				{
    					status += "审核中";
    				}
    				else if (of.m_orderData[i]["status"] == "2") {
    					status += "预约成功";
    
    				}
    				else if (of.m_orderData[i]["status"] == "-1") {
    					status += "预约失败,审核未通过";
    				}
    				else {
    					status += "预约已经取消";
    				}
    				cout << status << endl;
    			}
    		}
    	}
    
    	cout << "请输入取消的记录,0代表返回" << endl;
    	int select = 0;
    	while (true)
    	{
    		cin >> select;
    		if (select>=0 && select<=v.size())
    		{
    			if (select==0)
    			{
    				break;
    			}
    			else {
    				of.m_orderData[v[select - 1]]["status"] = "0";
    				of.updateOrder();
    				cout << "已经取消预约" << endl;
    				break;
    			}
    
    		}
    		cout << "输入有误,请重新输入" << endl;
    	}
    	system("pause");
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69

    10、教师模块

    10.1、教师登录和注销

    10.1.1、构造函数

    • 在Teacher类的构造函数中,初始化教师信息,代码如下:
    //有参构造
    Teacher::Teacher(int empId, string name, string pwd)
    {
    	//初始化属性
    	this->m_EmpId = empId;
    	this->m_Name = name;
    	this->m_Pwd = pwd;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    10.1.2、教师子菜单
    • 在机房预约系统.cpp中,当用户登录的是教师,添加教师菜单接口
    • 将不同的分支提供出来
      • 查看所有预约
      • 审核预约
      • 注销登录
    • 实现注销功能

    首先我们还是回到机房预约系统.cpp中,创建一个teacherMenu方法,同样的在LoginIn中创建类并链接此方法

    //老师子菜单界面
    void teacherMenu(Indentity*& teacher)
    {
    	while (true)
    	{
    		//学生菜单
    		teacher->operMenu();
    		Teacher* tea = (Teacher*)teacher;
    
    		//接受用户选项
    		int select = 0;
    
    		cin >> select;
    		switch (select)
    		{
    		case 1: //查看所有预约
    			cout << "查看所有预约" << endl;
    			tea->showAllOrder();
    			break;
    		case 2://审核预约
    			cout << "审核预约" << endl;
    			tea->validOrder();
    			break;
    		default:
    			//注销登录
    		//销毁掉堆区对象
    			delete teacher;
    			cout << "注销成功" << endl;
    			system("pause");
    			system("cls");
    			return;
    
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    image-20231023214742818

    teacher.cpp中 operMenu()

    	cout << "欢迎:" << this->m_Name << "老师!" << endl;
    	cout << endl;
    	cout << "--------------       1、查看所有预约      -----------------" << endl;
    	cout << endl;
    	cout << "--------------       2、审核预约          -----------------" << endl;
    	cout << endl;
    	cout << "--------------      输入其他数字退出      -----------------" << endl;
    	cout << "-------------------------------------------------------" << endl;
    	cout << "请输入序号进行操作:";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    10.1.2、审核预约

    根据学生的申请进行审核

    teacher.cpp

    //审核预约
    void Teacher::validOrder()
    {
    	OrderFile of;
    	if (of.m_size == 0)
    	{
    		cout << "无预约记录" << endl;
    		system("pause");
    		system("cls");
    	}
    	cout << "审核中或预约成功的记录可以取消,请输入取消的记录" << endl;
    	vector v;
    	int index = 1;
    	for (int i = 0; i < of.m_size; i++)
    	{
    			//再筛选状态 审核中或预约成功的
    			if (of.m_orderData[i]["status"] == "1")
    			{
    				v.push_back(i);
    				cout << index++ << "、";
    				cout << "预约的日期:周" << of.m_orderData[i]["date"];
    				cout << " 时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
    				cout << " 机房号:" << of.m_orderData[i]["roomId"];
    				string status = " 状态: ";
    				//1.审核中 2.已预约 - 1 预约失败 0 取消预约
    				if (of.m_orderData[i]["status"] == "1")
    				{
    					status += "审核中";
    				}
    
    				cout << status << endl;		
    			}
    	}
    	cout << "请输入审核的预约记录,0代表返回" << endl;
    	int select = 0;
    	int ret = 0;
    	while (true)
    	{
    		cin >> select;
    		if (select >= 0 && select <= v.size())
    		{
    			if (select == 0)
    			{
    				break;
    			}
    			else {
    				cout << "请输入审核结果" << endl;
    				cout << "1.通过" << endl;
    				cout << "2.不通过" << endl;
    				cin >> ret;
    				
    				if (ret == 1)
    				{
    					of.m_orderData[v[select - 1]]["status"] = "2";
    				}
    				else {
    					of.m_orderData[v[select - 1]]["status"] = "-1";
    				}
    				of.updateOrder();
    				cout << "审核完毕!" << endl;
    				break;
    			}
    		}
    		cout << "输入有误,请重新输入" << endl;
    	}
    	system("pause");
    	system("cls");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
  • 相关阅读:
    MinIO (三) 使用Webhook实时同步文件
    Unrecognized option ‘stream_loop‘.(版本不匹配,利用make编译安装)
    SPA单页面应用
    Spark零基础入门实战(一)Scala安装
    SAP HANA 体系结构,LandScape,规模调整:完整教程
    阿里云3M固定带宽服务器速度快吗?是否够用?
    2022-04-16 对于加班的感悟
    电力通信规约CDT/Modbus/101/103/104/DL/T645应用分析
    极光发送短信验证码
    记阿里云mysql丢表丢数据的实践记录
  • 原文地址:https://blog.csdn.net/NITIQ/article/details/134000673