1 /**
2 * 项目名称:机房预约系统
3 * 时 间:2021-08
4 * 作 者:Bytezero!·zhenglei
5 *
6 * 系统简介:
7 * 学校有几个规格不同的机房,由于使用时经常出现“撞车”的现象,开发一套系统,解决这一问题
8 * 身份简介:
9 * 学生代表:申请使用机房
10 * 教 师:审核学生的预约申请
11 * 管 理 员:给学生,教师创建账号
12 * 机房简介:
13 * 1号机房 ----- 最大容量20人
14 * 2号机房 ----- 最多容量50人
15 * 3号机房 ----- 最多容量100人
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 **/

//运行界面


 
  1 ComputerizedRoomReservationSystem.cpp
2 #include<iostream>
3 #include"Identity.h"
4 #include<fstream>
5 #include<string>
6 #include"global.h"
7 #include"manager.h"
8 #include"teacher.h"
9 #include"student.h"
10 using namespace std;
11
12
13
14
15
16
17 //进入学生子菜单界面
18 void studentMenu(Identity * &student)
19 {
20 while (true)
21 {
22 //调用学生子菜单
23 student->operMenu();
24
25 Student* stu = (Student*)student;
26
27 int select = 0;
28 cin >> select; //接收用户的选择
29
30 if (select == 1) //申请预约
31 {
32 stu->applyOrder();
33
34 }
35 else if (select == 2)//查看自身预约
36 {
37 stu->showMyOrder();
38 }
39 else if (select == 3) //查看所有人预约
40 {
41 stu->showAllOrder();
42 }
43 else if (select == 4) //取消预约
44 {
45 stu->cancelOrder();
46 }
47 else
48 {
49 //注销登录
50 delete student;
51 cout << "注销成功!" << endl;
52 system("pause");
53 system("cls");
54
55 return;
56
57 }
58
59 }
60 }
61
62 //进入教师子菜单界面
63 void teacherMenu(Identity*& teacher)
64 {
65 while (true)
66 {
67 //调用子菜单界面
68 teacher->operMenu();
69
70 Teacher* tea = (Teacher*)teacher;
71
72 int select = 0; //接收用户选择
73
74 cin >> select;
75 if (select == 1) //查看所有预约
76 {
77 tea->showAllOrder();
78 }
79 else if (select == 2) //审核预约
80 {
81 tea->validOrder();
82 }
83 else
84 {
85 delete teacher;
86 cout << "注销成功!!" << endl;
87 system("pause");
88 system("cls");
89 break;
90 }
91 }
92 }
93
94
95
96
97
98
99
100
101
102
103
104 //进入管理员的子菜单
105 void managerMenu(Identity*& manager)
106 {
107 while (true)
108 {
109 //调用管理员子菜单
110 manager->operMenu();
111
112 //将父类指针转换为 子类的指针 调用子类其他接口
113 Manager* man = (Manager*)manager;
114
115 int select = 0;
116 //接收用户的选择
117 cin >> select;
118
119 if (select == 1)
120 {
121 //添加账号
122 cout << "添加账号" << endl;
123 man->addPerson();
124
125 }
126 else if (select == 2) //查看账号
127 {
128 cout << "查看账号" << endl;
129 man->showPerson();
130 }
131 else if (select == 3) //查看机房信息
132 {
133 cout << "查看机房" << endl;
134 man->showComputer();
135 }
136 else if (select == 4)//清空预约
137 {
138 cout << "清空预约" << endl;
139 man->cleanFile();
140 }
141 else if (select == 0) //注销登录
142 {
143 delete manager; //销毁堆区对象
144 cout << "注销成功!" << endl;
145 system("pause");
146 system("cls");
147 return;
148 }
149 else //输入有误!
150 {
151 cout << "您输入有误,请重新输入!" << endl;
152 system("pause");
153 system("cls");
154
155 }
156
157 }
158 }
159
160 //登录功能 参数1 操做文件名 参数2 操作身份类型
161 void LoginIn(string fileName, int type)
162 {
163 //父类指针 用于 指向子类对象
164 Identity* person = NULL;
165
166 //读文件
167 ifstream ifs;
168 ifs.open(fileName,ios::in);
169
170 //判断文件是否存在
171 if (!ifs.is_open())
172 {
173 cout << "文件不存在!" << endl;
174 ifs.close();
175 return;
176 }
177
178 //准备接收用户信息
179 int id = 0;
180 string name;
181 string pwd;
182
183
184 //判断身份
185 if (type == 1) //学生身份
186 {
187 cout << "请输入你的学号:" << endl;
188 cin >> id;
189 }
190 else if (type == 2) //老师身份
191 {
192 cout << "请输入您的职工号:" << endl;
193 cin >> id;
194
195 }
196 cout << "请输入用户名:" << endl;
197 cin >> name;
198
199 cout << "请输入密码:" << endl;
200 cin >> pwd;
201
202 if (type == 1)
203 {
204 //学生身份验证
205 int fId; //从文件中读取的id号
206 string fName; //从文件中获取的姓名
207 string fPwd; //从文件中获取的密码
208
209 while (ifs >> fId && ifs >> fName && ifs >> fPwd )
210 {
211 //cout << fId << endl;
212 //cout << fName << endl;
213 //cout << fPwd << endl;
214 //cout << endl;
215 //与用户输入的信息做对比
216 if (id == fId && name == fName && pwd == fPwd)
217 {
218 cout << "学生验证登录成功!" << endl;
219 system("pause");
220 system("cls");
221
222 person = new Student(id,name,pwd);
223
224 //进入学生身份的子菜单
225 studentMenu(person);
226
227
228 return;
229 }
230
231
232 }
233
234
235 }
236 else if (type == 2)
237 {
238 //教师身份验证
239 int fId;
240 string fName;
241 string fPwd;
242
243 while (ifs>>fId && ifs>>fName&&ifs>>fPwd)
244 {
245 if (fId == id && fName == name && fPwd == pwd)
246 {
247 cout << "教师登录验证成功!" << endl;
248 system("pause");
249 system("cls");
250
251 person = new Teacher(id, name, pwd);
252
253 //进入教师子菜单
254 teacherMenu(person);
255 return;
256
257 }
258
259
260
261 }
262
263
264
265
266 }
267 else if (type == 3)
268 {
269 //管理员身份验证
270 string fName;
271 string fPwd;
272 while (ifs >> fName && ifs>>fPwd)
273 {
274 if (name == fName && pwd == fPwd)
275 {
276 cout << "管理员登录验证成功!" << endl;
277 system("pause");
278 system("cls");
279
280 person = new Manager(name, pwd);
281
282 //进入管理员子菜单
283 managerMenu(person);
284
285 return;
286 }
287 }
288
289
290
291 }
292
293
294
295 cout << "验证登录失败!" << endl;
296
297 system("pause");
298 system("cls");
299
300 // return;
301
302
303
304
305 }
306
307 int main()
308 {
309
310 int select = 0; //用于接收用户的选择
311 while (true)
312 {
313 cout << "=================================== 欢迎来到(Bytezero!·zhenglei)计算机房预约系统 ===================================" << endl;
314 cout << endl << "亲爱的用户:\n 根据下面提示的信息,请输入您的身份:\n" << endl;
315 cout << "\t\t\t\t\t --------------------------------\n";
316 cout << "\t\t\t\t\t| |\n";
317 cout << "\t\t\t\t\t| 1.学生代表 |\n";
318 cout << "\t\t\t\t\t| |\n";
319 cout << "\t\t\t\t\t| 2.老 师 |\n";
320 cout << "\t\t\t\t\t| |\n";
321 cout << "\t\t\t\t\t| 3.管 理 员 |\n";
322 cout << "\t\t\t\t\t| |\n";
323 cout << "\t\t\t\t\t| 0.退 出 |\n";
324 cout << "\t\t\t\t\t| |\n";
325 cout << "\t\t\t\t\t| |\n";
326 cout << "\t\t\t\t\t --------------------------------\n";
327 cout << " \n请输入您的选择:";
328
329 cin >> select; //接受用户的选择
330
331 switch (select) //根据用户选择 实现不同的接口
332 {
333 case 1: //学生身份
334 LoginIn(STUDENT_FILE, 1);
335 break;
336 case 2: //老师身份
337 LoginIn(TEACHER_FILE, 2);
338 break;
339 case 3: //管理员身份
340 LoginIn(ADMIN_FILE,3);
341 break;
342 case 0: //退出系统
343 cout << "\t欢迎下一次使用,再见!" << endl;
344 system("pause");
345 return 0;
346 break;
347 default: //输入有误
348 cout << "输入有误,请重新选择!" << endl;
349 system("pause");
350 system("cls");
351 break;
352 }
353
354 }
355
356
357
358
359
360
361
362
363 system("pause");
364 return 0;
365 }
  1 manager.cpp
2 #include"manager.h"
3
4 //默认构造
5 Manager::Manager()
6 {
7
8 }
9
10 //有参构造
11 Manager::Manager(string name, string pwd)
12 {
13
14 //初始化管理员信息
15 this->m_Name = name;
16 this->m_Pwd = pwd;
17
18 //初始化容器 获取到所有文件中 老师 学生信息
19 this->inttVector();
20
21 //初始化机房的信息
22 ifstream ifs;
23 ifs.open(COMPUTER_FILE, ios::in);
24
25 ComputerRoon com;
26 while (ifs >> com.m_ComId && ifs >> com.m_MaxNum)
27 {
28 vCom.push_back(com);
29 }
30 ifs.close();
31 cout << "当前机房的数量为:" << vCom.size() << endl;
32 }
33
34 //菜单构造
35 void Manager::operMenu()
36 {
37 cout << "=============================================== 欢迎管理员:"<<this->m_Name <<" 登录 =============================================== " << endl;
38 cout << endl << "亲爱的用户:\n 根据下面提示的信息,请输入您的身份:\n" << endl;
39 cout << "\t\t\t\t\t --------------------------------\n";
40 cout << "\t\t\t\t\t| |\n";
41 cout << "\t\t\t\t\t| 1.添加账号 |\n";
42 cout << "\t\t\t\t\t| |\n";
43 cout << "\t\t\t\t\t| 2.查看账号 |\n";
44 cout << "\t\t\t\t\t| |\n";
45 cout << "\t\t\t\t\t| 3.查看机房 |\n";
46 cout << "\t\t\t\t\t| |\n";
47 cout << "\t\t\t\t\t| 4.清空预约 |\n";
48 cout << "\t\t\t\t\t| |\n";
49 cout << "\t\t\t\t\t| 0.注销登录 |\n";
50 cout << "\t\t\t\t\t| |\n";
51 cout << "\t\t\t\t\t --------------------------------\n";
52 cout << " \n请输入您的选择:";
53 }
54
55 //添加账号
56 void Manager::addPerson()
57 {
58 cout << "请输入添加的账号类型:" << endl;
59 cout << "1 --- 添加学生" << endl;
60 cout << "2 --- 添加老师" << endl;
61
62 string fileName; //操作文件名
63 string tip; //提示Id号
64 string errorTip; //重复错误提示
65
66 ofstream ofs; //文件操作对象
67
68 int select = 0;
69 cin >> select; //接收用户的选项
70 while (true)
71 {
72 if (select == 1)
73 {
74 //添加的是学生
75 fileName = STUDENT_FILE;
76 tip = "请输入学号:";
77 errorTip = "学号重复,请重新输入!";
78
79 }
80 else if (select == 2)
81 {
82 //添加教师
83 fileName = TEACHER_FILE;
84 tip = "请输入职工号:";
85 errorTip = "职工号重复,请重新输入!";
86
87 }
88 else
89 {
90 cout << "您输入有误,请重新输入!" << endl;
91 system("pause");
92 system("cls");
93 return;
94 }
95
96 //利用追加的方式 写文件
97 ofs.open(fileName, ios::out | ios::app);
98
99 int id; //学号 或者 职工号
100 string name; //姓名
101 string pwd; //密码
102
103 cout << tip << endl;
104
105 while (true)
106 {
107 cin >> id;
108 bool ret = checkRepeat(id, select);
109 if (ret) //有重复
110 {
111 cout << errorTip << endl;
112 }
113 else
114 {
115 break;
116 }
117 }
118
119
120
121
122 cout << "请输入姓名:" << endl;
123 cin >> name;
124
125 cout << "请输入密码:" << endl;
126 cin >> pwd;
127
128 //文件中添加数据
129 ofs << id << " " << name << " " << pwd << " " << endl;
130 cout << "添加成功!!!" << endl;
131
132 system("pause");
133 system("cls");
134
135 ofs.close();
136
137 //初始化信息 重新获取文件中的数据
138 this->inttVector();
139
140 return;
141
142
143 }
144
145
146
147 }
148 //打印学生
149 void printStudent(Student& s)
150 {
151 cout << "学号:" << s.m_Id << "\t姓名:" << s.m_Name << "\t密码:" << s.m_Pwd << endl;
152
153 }
154
155 //打印老师
156 void printTeacher(Teacher& t)
157 {
158 cout << "职工号:" << t.m_EmpId << "\t姓名:" << t.m_Name << "\t密码:" << t.m_Pwd << endl;
159
160 }
161
162 //查看账号
163 void Manager::showPerson()
164 {
165 cout << "请选择查看的内容:" << endl;
166 cout << "1 --- 查看所有的学生" << endl;
167 cout << "2 --- 查看所有的老师" << endl;
168
169 int select = 0; //接收用户的选择
170
171 cin >> select;
172 if (select == 1)
173 {
174 //查看学生
175 cout << "查看所有学生信息如下:" << endl;
176 for_each(vStu.begin(), vStu.end(), printStudent);
177 }
178 else
179 {
180 //查看教师
181 cout << "查看所有教师信息如下:" << endl;
182 for_each(vTea.begin(), vTea.end(), printTeacher);
183 }
184 system("pause");
185 system("cls");
186
187 }
188
189
190 //查看机房信息
191 void Manager::showComputer()
192 {
193 cout << "机房的信息如下:" << endl;
194 for (vector<ComputerRoon>::iterator it = vCom.begin(); it != vCom.end(); it++)
195 {
196 cout << "机房编号:" << it->m_ComId << "\t机房最大容量:" << it->m_MaxNum << endl;
197 }
198 system("pause");
199 system("cls");
200 }
201
202
203
204
205 //清空预约记录
206 void Manager::cleanFile()
207 {
208
209 cout << "确定要清空吗?" << endl;
210 cout << "1 --- 确定" << endl;
211 cout << "2 --- 返回" << endl;
212
213 int select = 0;
214 cin >> select;
215
216 if (select == 1)
217 {
218 ofstream ofs(ORDER_FILE, ios::trunc);
219 ofs.close();
220 cout << "清空成功!" << endl;
221 system("pause");
222 system("cls");
223
224 }
225 else if (select == 2)
226 {
227
228 system("pause");
229 system("cls");
230 return;
231 }
232 else
233 {
234 cout << "输入有误,请重新输入!" << endl;
235 system("pause");
236 system("cls");
237 return;
238 }
239
240 }
241
242 //初始化容器
243 void Manager::inttVector()
244 {
245 //确保容器清空状态
246 vStu.clear();
247 vTea.clear();
248
249 //读取信息 学生
250 ifstream ifs;
251 ifs.open(STUDENT_FILE, ios::in);
252 if (!ifs.is_open())
253 {
254 cout << "文件读取失败!" << endl;
255 return;
256 }
257
258 Student s;
259 while (ifs>>s.m_Id&&ifs>>s.m_Name&&ifs>>s.m_Pwd)
260 {
261 vStu.push_back(s);
262 }
263 cout << "当前学生数量为:" << vStu.size() << endl;
264 ifs.close();
265
266 //读取信息 老师
267 ifs.open(TEACHER_FILE, ios::in);
268 Teacher t;
269 while (ifs >> t.m_EmpId && ifs >> t.m_Name && ifs >> t.m_Pwd)
270 {
271 vTea.push_back(t);
272 }
273
274 cout << "当前老师数量为:" << vTea.size() << endl;
275 ifs.close();
276
277
278
279 }
280
281 //检测重复 参数1 检测 学号/职工号 参数2 检测类型
282 bool Manager::checkRepeat(int id, int type)
283 {
284 if (type == 1)
285 {
286 //检测学生
287 for (vector<Student>::iterator it = vStu.begin(); it != vStu.end(); it++)
288 {
289 if (id == it->m_Id)
290 {
291 return true;
292 }
293 }
294 }
295 else
296 {
297 //检测老师
298 for (vector<Teacher>::iterator it = vTea.begin(); it != vTea.end(); it++)
299 {
300 if (id == it->m_EmpId)
301 {
302 return true;
303 }
304 }
305
306 }
307
308 return false;
309 }
  1 orderFile.cpp
2 #include"orderFile.h"
3
4
5 //构造函数
6 OrderFile::OrderFile()
7 {
8 ifstream ifs;
9 ifs.open(ORDER_FILE, ios::in);
10
11 string date; //日期
12 string interval; //时间段
13 string stuId; //学生编号
14 string stuName; //学生姓名
15 string roomId; //机房编号
16 string status; //预约状态
17
18 this->m_Size = 0; //记录条数
19
20 while (ifs >> date && ifs >> interval && ifs
21 >> stuId && ifs >> stuName && ifs
22 >> roomId && ifs >> status)
23 {
24 //cout << date << endl;
25 //cout << interval << endl;
26 //cout << stuId<< endl;
27 //cout << stuName << endl;
28 //cout << roomId << endl;
29 //cout << status << endl;
30
31
32
33 //date : 1
34
35 string key;
36 string value;
37 map<string, string>m;
38
39 //cout << date << endl;
40 //截取日期
41 int pos = date.find(":"); // 4
42 if (pos != -1)
43 {
44 key = date.substr(0, pos);
45 value = date.substr(pos + 1, date.size() - pos - 1); //size = 9 pos = 4 size-pos = 5
46
47 m.insert(make_pair(key, value));
48
49 }
50
51 //cout << "key = " << key << endl;
52 //cout << "value = " << value << endl;
53
54 //cout << interval << endl;
55 //截取时间段
56 pos = interval.find(":"); // 4
57 if (pos != -1)
58 {
59 key = interval.substr(0, pos);
60 value = interval.substr(pos + 1, interval.size() - pos - 1); //size = 9 pos = 4 size-pos = 5
61
62 m.insert(make_pair(key, value));
63
64 }
65 //cout << stuId<< endl;
66 //截取学生Id
67 pos = stuId.find(":"); // 4
68 if (pos != -1)
69 {
70 key = stuId.substr(0, pos);
71 value = stuId.substr(pos + 1, stuId.size() - pos - 1); //size = 9 pos = 4 size-pos = 5
72
73 m.insert(make_pair(key, value));
74
75 }
76
77 //cout << stuName << endl;
78 //截取学生姓名
79 pos = stuName.find(":"); // 4
80 if (pos != -1)
81 {
82 key = stuName.substr(0, pos);
83 value = stuName.substr(pos + 1, stuName.size() - pos - 1); //size = 9 pos = 4 size-pos = 5
84
85 m.insert(make_pair(key, value));
86
87 }
88
89
90 //cout << roomId << endl;
91 //截取机房Id
92
93 pos = roomId.find(":"); // 4
94 if (pos != -1)
95 {
96 key = roomId.substr(0, pos);
97 value = roomId.substr(pos + 1, roomId.size() - pos - 1); //size = 9 pos = 4 size-pos = 5
98
99 m.insert(make_pair(key, value));
100
101 }
102
103 //cout << status << endl;
104 //截取预约状态
105 pos = status.find(":"); // 4
106 if (pos != -1)
107 {
108 key = status.substr(0, pos);
109 value = status.substr(pos + 1, status.size() - pos - 1); //size = 9 pos = 4 size-pos = 5
110
111 m.insert(make_pair(key, value));
112
113 }
114
115 //将小 map 容器 放入 大的 map容器中
116 this->m_orderData.insert(make_pair(this->m_Size, m));
117 this->m_Size++;
118
119
120 }
121 ifs.close();
122
123 //测似 最大map容器
124 //for (map<int, map<string, string>>::iterator it = m_orderData.begin(); it != m_orderData.end(); it++)
125 //{
126 // cout << "条数为: = " << it->first << "\tvalue = " << endl;
127 // for (map<string, string>::iterator mit = (*it).second.begin(); mit != it->second.end(); mit++)
128 // {
129 // cout << " key = " << mit->first << " value = " << mit->second << " ";
130
131
132 // }
133 // cout << endl;
134 //}
135
136 }
137
138 //更新预约记录
139 void OrderFile::updateOrder()
140 {
141 if (this->m_Size == 0)
142 {
143 return; //预约记录为条,直接 return
144 }
145
146 ofstream ofs(ORDER_FILE, ios::out | ios::trunc);
147 for (int i = 0; i < this->m_Size; i++)
148 {
149 ofs << "date:" << this->m_orderData[i]["date"] << " ";
150 ofs << "interval:" << this->m_orderData[i]["interval"] << " ";
151 ofs << "stuId:" << this->m_orderData[i]["stuId"] << " ";
152 ofs << "stuName:" << this->m_orderData[i]["stuName"] << " ";
153 ofs << "roomId:" << this->m_orderData[i]["roomId"] << " ";
154 ofs << "status:" << this->m_orderData[i]["status"] << endl;
155
156
157 }
158 ofs.close();
159 }
  1 student.cpp
2 #include"student.h"
3
4
5 //默认构造
6 Student::Student()
7 {
8
9 }
10
11 //有参构造 参数 学号 姓名 密码
12 Student::Student(int id, string name, string pwd)
13 {
14 //初始化属性
15 this->m_Id = id;
16 this->m_Name = name;
17 this->m_Pwd = pwd;
18
19 //初始化机房信息
20 ifstream ifs;
21 ifs.open(COMPUTER_FILE, ios::in);
22
23 ComputerRoon com;
24 while (ifs >> com.m_ComId && ifs >> com.m_MaxNum)
25 {
26 //将读取的信息放入到 容器中
27 vCom.push_back(com);
28 }
29 ifs.close();
30 }
31
32
33 //菜单界面
34 void Student::operMenu()
35 {
36 cout << "============================================= 欢迎学生用户:" << this->m_Name << " 登录 ============================================= " << endl;
37 cout << endl << "亲爱的学生用户:\n 根据下面提示的信息,请输入您的选择:\n" << endl;
38 cout << "\t\t\t\t\t --------------------------------\n";
39 cout << "\t\t\t\t\t| |\n";
40 cout << "\t\t\t\t\t| 1.申请预约 |\n";
41 cout << "\t\t\t\t\t| |\n";
42 cout << "\t\t\t\t\t| 2.查看我的预约 |\n";
43 cout << "\t\t\t\t\t| |\n";
44 cout << "\t\t\t\t\t| 3.查看所有预约 |\n";
45 cout << "\t\t\t\t\t| |\n";
46 cout << "\t\t\t\t\t| 4.取消预约 |\n";
47 cout << "\t\t\t\t\t| |\n";
48 cout << "\t\t\t\t\t| 0.注销登录 |\n";
49 cout << "\t\t\t\t\t| |\n";
50 cout << "\t\t\t\t\t --------------------------------\n";
51 cout << " \n请输入您的选择:";
52 }
53
54
55 //申请预约
56 void Student::applyOrder()
57 {
58 cout << "机房开放时间为:周一至周五!" << endl;
59 cout << "请输入申请预约的时间:" << endl;
60 cout << "1 ··· 周一" << endl;
61 cout << "2 ··· 周二" << endl;
62 cout << "3 ··· 周三" << endl;
63 cout << "4 ··· 周四" << endl;
64 cout << "5 ··· 周五" << endl;
65
66 int date = 0; //日期
67 int interval = 0; //时间段
68 int room = 0; //机房编号
69
70 while (true)
71 {
72 cin >> date;
73 if (date >= 1 && date <= 5)
74 {
75 break;
76 }
77 cout << "输入日期有误,请重新输入" << endl;
78 }
79
80 cout << "请输入申请预约的时间段:" << endl;
81 cout << "1 --- 上午" << endl;
82 cout << "2 --- 下午" << endl;
83
84 while (true)
85 {
86 cin >> interval;
87 if (interval >= 1 && interval <= 2)
88 {
89 break;
90 }
91 cout << "输入时间段有误,请重新输入" << endl;
92 }
93
94 cout << "请选择机房:" << endl;
95 for (int i = 0; i < vCom.size(); i++)
96 {
97 cout << vCom[i].m_ComId << "号机房容量为:" << vCom[i].m_MaxNum << endl;
98
99 }
100
101 while (true)
102 {
103 cin >> room;
104 if (room >= 1 && room <= 3)
105 {
106 break;
107 }
108 cout << "机房输入有误,请重新输入!" << endl;
109 }
110 cout << "预约成功,审核中" << endl;
111
112 ofstream ofs;
113 ofs.open(ORDER_FILE,ios::app);
114
115 ofs << "date:" << date << "\t";
116 ofs << "interval:" << interval << "\t";
117 ofs << "stuId:" << this->m_Id << "\t";
118 ofs << "stuName:" << this->m_Name << "\t";
119 ofs << "roomId:" << date << "\t";
120 ofs << "status:" << 1 << endl;
121
122 ofs.close();
123 system("pause");
124 system("cls");
125
126
127 }
128
129 //查看自身的预约
130 void Student::showMyOrder()
131 {
132 OrderFile of;
133 if (of.m_Size == 0)
134 {
135 cout << "没有预约记录!" << endl;
136 system("pause");
137 system("cls");
138 return;
139 }
140
141 for (int i = 0; i < of.m_Size; i++)
142 {
143 //找到自身预约
144 //sting 装 int
145 //stting 利用 .c_str() 转 const char *
146 //利用 atoi (const char *)转 int
147 if (this->m_Id == atoi(of.m_orderData[i]["stuId"].c_str()))
148 {
149 cout << "预约日期:周" << of.m_orderData[i]["date"];
150 cout << "\t时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
151 cout << "\t机房编号:" << of.m_orderData[i]["roomId"];
152 string status = "\t状态:";
153 //1.审核中 2.已预约 -1 预约失败 0取消预约
154 if (of.m_orderData[i]["status"] == "1")
155 {
156 status += "审核中";
157 }
158 else if (of.m_orderData[i]["status"] == "2")
159 {
160 status += "预约成功";
161 }
162 else if (of.m_orderData[i]["status"] == "3")
163 {
164 status += "预约失败,审核未通过!";
165 }
166 else
167 {
168 status += "预约已取消!!";
169 }
170 cout << status << endl;
171
172 }
173 }
174 system("pause");
175 system("cls");
176
177
178 }
179
180
181 //查看所有预约
182 void Student::showAllOrder()
183 {
184
185 OrderFile of;
186 if (of.m_Size == 0)
187 {
188 cout << "无预约记录!" << endl;
189
190 system("pause");
191 system("cls");
192 return;
193 }
194 for (int i = 0; i < of.m_Size; i++)
195 {
196 cout << i + 1 << "、";
197 cout << "预约的日期: 周" << of.m_orderData[i]["date"];
198 cout << "\t时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
199 cout << "\t学号:" << of.m_orderData[i]["stuId"];
200 cout << "\t姓名:" << of.m_orderData[i]["stuName"];
201 cout << "\t机房编号:" << of.m_orderData[i]["roomId"];
202 string status = "状态:";
203
204 //1. 审核中 2.已预约 -1预约失败 0取消预约
205 if (of.m_orderData[i]["status"] == "1")
206 {
207 status += "审核中";
208 }
209 else if (of.m_orderData[i]["status"] == "2")
210 {
211 status += "预约成功!";
212 }
213 else if (of.m_orderData[i]["status"] == "-1")
214 {
215 status += "预约失败,审核未通过!";
216 }
217 else
218 {
219 status += "预约已取消!!";
220 }
221 cout << status << endl;
222 }
223 system("pause");
224 system("cls");
225
226
227 }
228
229
230 //取消预约
231 void Student::cancelOrder()
232 {
233 OrderFile of;
234 if (of.m_Size == 0)
235 {
236 cout << "无预约记录" << endl;
237 system("pause");
238 system("cls");
239 return;
240 }
241 cout << "审核中或者预约成功的记录可以取消,请输入取消的记录" << endl;
242 vector<int>v; //存放在最大容器中的下标编号
243 int index = 1;
244 for (int i = 0; i < of.m_Size; i++)
245 {
246 //判断是自身的学号
247 if (this->m_Id == atoi(of.m_orderData[i]["stuId"].c_str()))
248 {
249 //再筛选状态 审核中 或者 预约成功
250 if (of.m_orderData[i]["status"] == "1" || of.m_orderData[i]["stuId"] == "2")
251 {
252 v.push_back(i);
253 cout << index++ << "、 ";
254 cout << "预约日期: 周" << of.m_orderData[i]["date"];
255 cout << "\t时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
256 cout << "\t机房编号:" << of.m_orderData[i]["roomId"];
257
258 string status = "状态:";
259 if (of.m_orderData[i]["status"] == "1")
260 {
261 status += "审核中";
262 }
263 else if (of.m_orderData[i]["status"] == "2")
264 {
265 status += "预约成功!";
266 }
267 cout << status<<endl;
268
269
270 }
271
272
273 }
274 }
275
276 cout << "请输入取消的记录,0代表返回" << endl;
277 int select = 0;
278 while (true)
279 {
280 cin >> select;
281 if (select >= 0 && select <= v.size())
282 {
283 if (select == 0)
284 {
285 break;
286 }
287 else
288 {
289 of.m_orderData[v[select - 1]]["status"] = "0";
290
291 of.updateOrder();
292
293 cout << "已取消预约!!" << endl;
294 break;
295
296 }
297
298 }
299
300 cout << "输入有误,重新输入!" << endl;
301 }
302
303 system("pause");
304 system("cls");
305 }
  1 teacher.cpp
2 #include"teacher.h"
3
4
5 //默认构造
6 Teacher::Teacher()
7 {
8
9 }
10
11
12 //有参构造
13 Teacher::Teacher(int empId, string name, string pwd)
14 {
15 //初始化属性
16 this->m_EmpId = empId;
17 this->m_Name = name;
18 this->m_Pwd = pwd;
19
20 }
21
22 //菜单界面
23 void Teacher::operMenu()
24 {
25 cout << "============================================= 欢迎教师用户:" << this->m_Name << " 登录 ============================================= " << endl;
26 cout << endl << "亲爱的教师用户:\n 根据下面提示的信息,请输入您的选择:\n" << endl;
27 cout << "\t\t\t\t\t --------------------------------\n";
28 cout << "\t\t\t\t\t| |\n";
29 cout << "\t\t\t\t\t| 1.查看所有预约 |\n";
30 cout << "\t\t\t\t\t| |\n";
31 cout << "\t\t\t\t\t| |\n";
32 cout << "\t\t\t\t\t| |\n";
33 cout << "\t\t\t\t\t| 2.审核预约 |\n";
34 cout << "\t\t\t\t\t| |\n";
35 cout << "\t\t\t\t\t| |\n";
36 cout << "\t\t\t\t\t| |\n";
37 cout << "\t\t\t\t\t| 0.注销登录 |\n";
38 cout << "\t\t\t\t\t| |\n";
39 cout << "\t\t\t\t\t --------------------------------\n";
40 cout << " \n请输入您的选择:";
41 }
42
43
44 //查看所有预约
45 void Teacher::showAllOrder()
46 {
47 OrderFile of;
48 if (of.m_Size == 0)
49 {
50 cout << "无预约记录!" << endl;
51 system("pause");
52 system("cls");
53 return;
54 }
55 for (int i = 0; i < of.m_Size; i++)
56 {
57 cout << i + 1 << "、 ";
58 cout << "预约日期:周" << of.m_orderData[i]["date"];
59 cout << "\t时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
60 cout << "\t学号:" << of.m_orderData[i]["stuId"];
61 cout << "\t姓名:" << of.m_orderData[i]["stuName"];
62 cout << "\t机房编号:" << of.m_orderData[i]["roomId"];
63
64 string status = "\t状态: ";
65 //1 审核中 2已预约 -1预约失败 0取消预约
66 if (of.m_orderData[i]["status"] == "1")
67 {
68 status += "审核中";
69 }
70 else if (of.m_orderData[i]["status"] == "2")
71 {
72 status += "预约成功!!";
73 }
74 else if (of.m_orderData[i]["status"] == "-1")
75 {
76 status += "预约失败,审核未通过!!";
77 }
78 else
79 {
80 status += "预约已经取消!!";
81 }
82 cout << status << endl;
83
84 }
85 system("pause");
86 system("cls");
87 }
88
89 //审核预约
90 void Teacher::validOrder()
91 {
92 OrderFile of;
93 if (of.m_Size == 0)
94 {
95 cout << "无预约记录" << endl;
96 system("pause");
97 system("cls");
98
99 return;
100 }
101
102 vector<int>v;
103 int index = 0;
104 cout << "待审核的预约记录如下:" << endl;
105
106 for (int i = 0; i < of.m_Size; i++)
107 {
108 if (of.m_orderData[i]["status"] == "1")
109 {
110 v.push_back(i);
111 cout << ++index << " 、";
112 cout << "预约日期:周" << of.m_orderData[i]["date"];
113 cout << "\t时间段:" << (of.m_orderData[i]["interval"] == "1" ? "上午" : "下午");
114 cout << "\t学生编号:" << of.m_orderData[i]["stuId"];
115 cout << "\t学生姓名:" << of.m_orderData[i]["stuName"];
116 cout << "\t机房编号:" << of.m_orderData[i]["roomId"];
117
118 string status = "\t状态:审核中!!!";
119
120 cout << status << endl;
121
122 }
123 }
124
125 cout << "请输入审核的预约记录: 0代表返回!" << endl;
126 int select = 0; //接收用户选择的预约记录
127 int ret = 0; //接收预约结果记录
128
129 while (true)
130 {
131 cin >> select;
132 if (select >= 0 && select <= v.size())
133 {
134 if (select == 0)
135 {
136 break;
137 }
138 else
139 {
140 cout << "请输入审核结果:" << endl;
141 cout << "1、通过" << endl;
142 cout << "2、不通过" << endl;
143 cin >> ret;
144 if (ret == 1)
145 {
146 //通过
147 of.m_orderData[v[select - 1]]["status"] = "2";
148 }
149 else
150 {
151 //不通过
152 of.m_orderData[v[select - 1]]["status"] = "-1";
153
154 }
155 of.updateOrder(); //更新预约记录
156 cout << "审核完毕!!!" << endl;
157 break;
158 }
159
160 }
161 cout << "输入有误,请重新输入!!" << endl;
162 }
163 system("pasue");
164 system("cls");
165 }
  1 computerRoom.h
2 #pragma once
3 #include <iostream>
4 using namespace std;
5
6 //机房类
7 class ComputerRoon
8 {
9 public:
10
11
12 int m_ComId; //机房id号
13
14 int m_MaxNum; //机房最大容量
15 };
16
17
18
19
20
21
22
23 global.h
24 #pragma once
25
26 //管理员文件
27 #define ADMIN_FILE "admin.txt"
28
29 //学生文件
30 #define STUDENT_FILE "student.txt"
31
32 //教师文件
33 #define TEACHER_FILE "teacher.txt"
34
35 //机房信息文件
36 #define COMPUTER_FILE "computer.txt"
37
38 //订单文件
39 #define ORDER_FILE "order.txt"
40
41
42
43
44
45
46 Identity.h
47 #pragma once
48 #include<iostream>
49
50 using namespace std;
51
52 //身份抽象类
53 class Identity
54 {
55 public:
56
57 //操作菜单 纯虚函数
58 virtual void operMenu() = 0;
59
60
61 //用户名
62 string m_Name;
63
64
65 //密码
66 string m_Pwd;
67
68 };
69
70
71
72
73
74
75 manager.h
76 #pragma once
77
78 #include<iostream>
79 using namespace std;
80 #include"Identity.h"
81 #include<string>
82 #include<fstream>
83 #include"global.h"
84 #include<vector>
85 #include"student.h"
86 #include"teacher.h"
87 #include<algorithm>
88 #include"computerRoom.h"
89
90 //管理员的类
91 class Manager:public Identity
92 {
93 public:
94
95 //默认构造
96 Manager();
97
98 //有参构造
99 Manager(string name,string pwd);
100
101 //菜单构造
102 virtual void operMenu();
103
104 //添加账号
105 void addPerson();
106
107 //查看账号
108 void showPerson();
109
110
111 //查看机房信息
112 void showComputer();
113
114 //清空预约记录
115 void cleanFile();
116
117 //初始化容器
118 void inttVector();
119
120 //检测重复 参数1 检测 学号/职工号 参数2 检测类型
121 bool checkRepeat(int id, int type);
122
123 //学生容器
124 vector<Student>vStu;
125
126 //教师容器
127 vector<Teacher>vTea;
128
129 //机房信息
130 vector<ComputerRoon>vCom;
131
132
133 };
134
135
136
137
138
139
140
141
142
143
144 orderFile.h
145 #pragma once
146 #include<iostream>
147 using namespace std;
148 #include"global.h"
149 #include<fstream>
150 #include<map>
151 #include<string>
152
153 class OrderFile
154 {
155
156 public:
157
158 //构造函数
159 OrderFile();
160
161 //更新预约记录
162 void updateOrder();
163
164 //记录预约条数
165 int m_Size;
166
167 //记录所有预约信息的容器 key记录条数 value具体记录 键值对信息
168 map<int, map<string, string>>m_orderData;
169
170
171
172 };
173
174
175
176
177
178
179 student.h
180 #pragma once
181 #include<iostream>
182 using namespace std;
183 #include"Identity.h"
184 #include<vector>
185 #include"computerRoom.h"
186 #include<fstream>
187 #include"global.h"
188 #include"orderFile.h"
189
190
191 //学生类
192 class Student :public Identity
193 {
194 public:
195
196 //默认构造
197 Student();
198
199 //有参构造 参数 学号 姓名 密码
200 Student(int id, string name, string pwd);
201
202
203 //菜单界面
204 virtual void operMenu();
205
206
207 //申请预约
208 void applyOrder();
209
210 //查看自身的预约
211 void showMyOrder();
212
213
214 //查看所有预约
215 void showAllOrder();
216
217
218 //取消预约
219 void cancelOrder();
220
221 //学生学号
222 int m_Id;
223
224 //机房容器
225 vector<ComputerRoon>vCom;
226
227
228 };
229
230
231
232
233
234
235
236 teacher.h
237
238 #pragma once
239 #include<iostream>
240 using namespace std;
241 #include"Identity.h"
242 #include"orderFile.h"
243 #include<vector>
244
245
246 //老师类
247 class Teacher :public Identity
248 {
249 public:
250
251 //默认构造
252 Teacher();
253
254
255 //有参构造
256 Teacher(int empId, string name, string pwd);
257
258 //菜单界面
259 virtual void operMenu();
260
261
262 //查看所有预约
263 void showAllOrder();
264
265 //审核预约
266 void validOrder();
267
268
269
270 //职工号
271 int m_EmpId;
272
273
274 };

//后台给出管理员的 用户名和密码  +登录  (如果添加相同Id,会提示添加失败)

3.管理员  登录错误

管理员登录正确

并进入下一页

可以添加账号  老师 和 学生

//添加学生

//显示学生账号   没有会有提示

//注册教师账号+显示

3.机房信息

0.注销登录

1.学生登录

0

//申请

//2查看

3查看所有

4.取消预约

0.注销登录

3.教师登录

登录教师子界面

//查看预约

2审核预约

//通过 (结果老师 学生 均可看见)

//学生角度

//不通过

//学生角度

C++ 总结大项目:机房预约系统项目(数据结构 +指针+class(类操作)+面向对象三大特性[继承+多态+封装]+文件(读,写,保存,重写,重建,清空)+string(比较,截取,追加),+容器多个操作,嵌套+算法+清空数据)的更多相关文章

  1. VB.NET 机房收费系统项目总结

    VB.NET机房收费系统项目总结 从2013年5月3日——2013年8月20日历时三个多月的.NET机房收费系统终于完成了.项目做完了,真有一种如释重负的感觉. 下面我将从文档.UML图,代码这三个方 ...

  2. 毕业设计java实验室预约管理系统SSH机房预约系统javaweb机房实验室排课系统mysql机房管理系统 实验室管理系统 课程设计 代码讲解 调试运行

    毕业设计java实验室预约管理系统SSH机房预约系统javaweb机房实验室排课系统mysql机房管理系统 实验室管理系统 课程设计 代码讲解 调试运行 注意:该项目只展示部分功能,如需了解,评论区咨 ...

  3. day20面向对象三大特性 , 类嵌套

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.简述面向对象三大特性并用代码表示."""封装:class Account: ...

  4. 机房收费系统中的Grid++Report报表设计器的应用

    在进行账单查询功能的时候我应用了Grid++Report报表设计器,下面我就为大家介绍一下,还望大家多多指点. 首先,在Grid++Report报表设计器中进行报表界面的设置.在属性编辑窗口中这里对报 ...

  5. 大数据技术之_25_手机APP信息统计系统项目_01_APP 数据生成模块 + 数据收集模块 + 数据处理模块框架搭建 + 业务需求处理 + 数据展示模块 +项目总结 + 问题总结

    一 项目概述1.1 角色1.2 业务术语1.3 项目效果展示二 项目需求三 项目概要3.1 项目技术架构3.2 项目目录结构3.3 项目技术选型3.4 项目整体集群规划3.5 创建项目工程四 APP ...

  6. crm 系统项目(二) admin 后台操作表格

    crm 系统项目(二) admin 后台操作表格 1. app下创建 templates  运行的时候 先找全局的templates——> 按照app的注册顺序找templates中的文件 2. ...

  7. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

  8. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

  9. Hadoop Web项目--Friend Find系统

    项目使用软件:Myeclipse10.0,JDK1.7,Hadoop2.6,MySQL5.6.EasyUI1.3.6.jQuery2.0,Spring4.1.3. Hibernate4.3.1,str ...

  10. SSH2项目网上书店系统手把手教学_Struts2+Spring+Hibernate整合开发

    一 序言 鉴于目前J2EE的火热程度,SSH2是每个学生毕业前都必须掌握的一门技术,所以在这里我就使用SSH2技术做一个小型项目,和大家一起学习. SSH2技术的基础概论就不再提了,直接说特点吧. 1 ...

随机推荐

  1. 【发现一个问题】使用 fastcgo 导致额外的 `runtime._System` 调用的消耗

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 为了避免 cgo 调用浪费太多资源,因此使用了 fastc ...

  2. Qt 信号重载问题

    Qt信号重载问题 例如QComBox的currentIndexChanged信号,包括 void QComboBox::currentIndexChanged(const QString &t ...

  3. [1] 以逆向的角度来看流程控制语句——if

    [1] 以逆向的角度来看流程控制语句--if 1. if语句(单分支) ​ if语句转换的条件跳转指令与if语句的判断结果是相反的, 因为C语言是根据代码行的位置决定编译后二进制代码地址高低的,即低行 ...

  4. 微信小程序-页面生命周期

    官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page-life-cycle.html

  5. C/C++ 反汇编:函数与结构体

    反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...

  6. locate命令找不到,但是实际文件存在的情况

      locate和find命令都是linux下常用的搜索命令,但是locate命令是从一个数据库里面搜索的,它的速度比find查找要快上不少.如果存在某个文件用locate查不到的话,那么可以用upd ...

  7. 佳翼M2X16 PCIE4.0X16转4盘M.2NVME固态硬盘 - 我的硬件配置

  8. 2022 多益网络hr面

    不知道为啥 我的一面是hr面试,面试官是一个小姐姐,整个面试过程还是比较轻松的 废话不多说,直接上题目 自我介绍(巴拉巴拉巴拉...) 有参与过什么团队协作项目吗,担任了一个什么样的角色,怎么分配任务 ...

  9. pandas教程01: pandas的安装和基本操作

      pandas是Python中常用的数据处理库,主要用来处理表格数据,类似于下面这种: 好好干文化有限公司员工薪资表 姓名 年龄 性别 年薪 奖金 久九刘 35 男 182600 42000 傅儿待 ...

  10. 设计模式 - 创建型模式 - 单例模式(C++)

    1.前言 单例模式属于创建型模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方 ...