在完成对C语言的学习后,我最近开始了对C++和Java的学习,目前跟着视频学习了一些语法,也跟着敲了一些代码,有了一定的掌握程度。现在将跟着视频做的笔记进行整理。本篇博客是整理C++知识点的第三十四篇博客。
本篇博客用C++实现了机房预约系统,本文是上部分。
本系列博客所有C++代码都在Visual Studio 2022环境下编译运行。程序为64位。
目录
接下来用C++实现一个机房预约系统,由于内容很长,分为三篇博客。本篇博客是第一部分。
有三种身份:
学生代表申请使用机房。
教师审核学生的预约申请。
管理员给学生和教师创建账号。
机房有三间,其中1号机房最多容纳20人,2号机房最多容纳50人,3号机房最多容纳100人。
申请的订单由管理员负责清空。
学生可以预约未来一周内的机房使用,时间为周一至周五,要选择是上午还是下午。
教师审核预约,根据实际情况给出通过还是不通过。
首先进入登录界面,可选身份是学生代表,老师,管理员,或退出。
每个身份都要验证后进入子菜单,学生要输入学号姓名和密码,老师要输入编号姓名和密码,管理员要输入姓名和密码。
学生的功能有:
申请预约,查看自己的预约,查看所有的预约,取消预约和注销登录。
教师的功能有:
查看所有预约,审核预约和注销登录。
管理员的功能有:
添加账号,查看账号,查看机房,清空预约和注销登录。
identity.h存放identity类的所有内容。administrator.h和administrator.cpp存放administrator类所有内容。student.cpp和student.h存放student类的所有内容。teacher.h和teacher.cpp存放teacher类所有内容。room.h存放room类所有内容。globalfile.h存放了几个关于文件名称的宏。reservesystem.cpp存放了控制程序流程的内容。
- int main(void)
- {
- while (true) {
- show_totalmenu();
- int choice;
- cin >> choice;
-
- switch (choice) {
- case 1:
- log_in(STUDENT_FILE, 1);
- break;
- case 2:
- log_in(TEACHER_FILE, 2);
- break;
- case 3:
- log_in(ADMINISTRATOR_FILE, 3);
- break;
- case 0:
- cout << "exit" << endl;
- break;
- default:
- cout << "Please enter 0,1,2 or 3" << endl;
- system("pause");
- system("cls");
- break;
- }
- if (choice == 0) {
- break;
- }
- }
- return 0;
- }
这一部分在文件reservesystem.cpp中。
程序用死循环控制流程,首先展示菜单,然后要求用户输入选项。输入1 2 3都会进入log_in函数进行登录,但是参数会不一样,第一个参数是globalfile.h存放的关于文件名的宏。输入0提示退出程序并结束循环。输入其他选项要求重新输入。
- void show_totalmenu(void)
- {
- cout << "***Welcome to use our reverse system!***" << endl;
- cout << "*************** 1. student *************" << endl;
- cout << "*************** 2. teacher *************" << endl;
- cout << "*************** 3. administrator *******" << endl;
- cout << "*************** 0. exit ****************" << endl;
- cout << "Please enter your choice" << endl;
- }
这一部分在文件reservesystem.cpp中。输出菜单。
- #pragma once
- #include
- #include
- using namespace std;
- class identity
- {
- public:
- string name;
- string password;
- virtual void show_menu() = 0;
- };
这是identity.h的内容,实现了identity类,是对学校人员的抽象。name成员表示姓名,password成员表示登陆密码。show_menu函数是展示菜单,设置为纯虚函数,留给子类实现。
- #pragma once
- #include
- #include
- #include"room.h"
- #include"identity.h"
- using namespace std;
- class student :public identity
- {
- public:
- int id;
- vector
vroom; - student();
- student(int id, string name, string password);
- void show_menu();
- void make_reverse(void);
- void look_my_reverse(void);
- void look_all_reverse(void);
- void cancel_reverse();
- };
这是student.h的内容,实现了student类。id表示学号,vroom存放room类对象。下面的函数在后面介绍。
- #pragma once
- #include
- #include
- #include"identity.h"
- using namespace std;
- class teacher :public identity
- {
- public:
- int id;
- teacher();
- teacher(int id, string name, string password);
- void show_menu();
- void look_reverse(void);
- void audit_reverse(void);
- };
这是teacher.h的内容,实现了teacher类。id表示教师编号。成员函数在后面介绍。
- #pragma once
- #include
- #include
- #include
- #include"student.h"
- #include"teacher.h"
- #include"identity.h"
- #include"room.h"
- using namespace std;
-
- class administrator :public identity
- {
- public:
- administrator();
- administrator(string name, string password);
- void show_menu();
- void init_vector(void);
- bool check_repeat(int id, int type);
-
- void add_account(void);
- void look_account(void);
- void look_room(void);
- void clear_record(void);
-
- vector
vstudent; - vector
vteacher; - vector
vroom; - };
这是administrator.h的内容,实现了administrator类。vroom存放room类对象,vstudent存放student类对象,vteacher存放teacher类对象。成员函数在后文介绍。
- #include
- #include
- using namespace std;
- #define ADMINISTRATOR_FILE "administrator.txt"
- #define STUDENT_FILE "student.txt"
- #define TEACHER_FILE "teacher.txt"
- #define ROOM_FILE "room.txt"
- #define REVERSE_FILE "reverse.txt"
这是globalfile.h的内容,将很多用到文件的名称字符串定义为宏。
- void log_in(string filename, int type)
- {
- identity* person = NULL;
- ifstream ifs;
- ifs.open(filename, ios::in);
-
- if (ifs.is_open() == false) {
- cout << "The file does not exist" << endl;
- return;
- }
-
- int id;
- string name;
- string password;
-
- if (type == 1) {
- cout << "Please enter the id" << endl;
- cin >> id;
- }
- else if(type == 2) {
- cout << "Please enter the id" << endl;
- cin >> id;
- }
- cout << "Please enter the name" << endl;
- cin >> name;
- cout << "Please enter the password" << endl;
- cin >> password;
-
- if (type == 1) {
- int rid;
- string rname;
- string rpassword;
-
- while (ifs >> rid && ifs >> rname && ifs >> rpassword) {
- if (rid == id && rname == name && rpassword == password) {
- cout << "Succeed to log in" << endl;
- person = new student(id, name, password);
- system("pause");
- system("cls");
-
- do_student(person);
- system("pause");
- system("cls");
- return;
- }
- }
- }
- else if (type == 2) {
- int rid;
- string rname;
- string rpassword;
-
- while (ifs >> rid && ifs >> rname && ifs >> rpassword) {
- if (rid == id && rname == name && rpassword == password) {
- cout << "Succeed to log in" << endl;
- person = new teacher(id, name, password);
- system("pause");
- system("cls");
-
- do_teacher(person);
- system("pause");
- system("cls");
- return;
- }
- }
- }
- else if (type == 3) {
- string rname;
- string rpassword;
-
- while (ifs >> rname && ifs >> rpassword) {
- if (rname == name && rpassword == password) {
- cout << "Succeed to log in" << endl;
- system("pause");
- system("cls");
-
- person = new administrator(name, password);
- do_administrator(person);
- system("pause");
- system("cls");
- return;
- }
- }
- }
-
- cout << "Fail to log in " << endl;
- system("pause");
- system("cls");
- }
这一部分在文件reservesystem.cpp中。首先要求用户输入密码和姓名(学生还需要输入学号,教师还需要输入教师编号)。如果是要处理学生,则从文件中获取信息,如果检测到一致就提示登录成功,用信息构建一个对象,随后作为参数传递给do_student函数(后面介绍),否则提示登录失败。如果要处理教师,则从文件获取信息,检测到一致就提示登录成功,用信息构建一个对象,作为参数传递给do_teacher函数(后面)介绍,否则提示登陆失败。如果是要处理管理员,就从文件中获取信息,如果检测到一致就提示登录成功,用信息创建一个对象,随后作为参数传递给do_administrator函数(后面介绍),否则提示登录失败。