0913

机房预约系统

  • 1.1 系统简介
  • 1.2 身份简介
  • 1.3 机房简介
  • 1.4 系统具体需求:
  • 1.5程序代码分析:
    • 1.系统管理类:class ManageSystem
      • ManageSystem.h:
      • ManageSystem.cpp:
    • 2.Person基类:class Persons
      • Person.h:
      • Person.cpp:
    • 3.预约记录类:class Orders
      • Person.h:
      • Orders.cpp:
    • 4.管理员类:class Managers
      • Managers.h:
      • Managers.cpp:
    • 5.学生类:class Students
      • Students.h:
      • Students.cpp:
    • 6.教师类:class Teachers
      • Teachers.h:
      • Teachers.cpp:
  • **补充:为什么Person类中的`vector& saveToVector();`返回引用就会赋值失败???**

1.1 系统简介

学校现有几个规格不同的机房,由于使用时经常出现"撞车"现象,现开发一套机房预约系统,解决这一问题。

1.2 身份简介

分别有三种身份使用该程序:
学生申请使用机房,可以预约未来一周内的机房使用,预约的日期为周一至周五,预约时需要选择预约时段(上午、下午);
教师审核学生的预约申请,依据实际情况审核预约通过或者不通过;
管理员:给学生、教师创建账号,所有申请订单每周由管理员负责清空

1.3 机房简介

机房总共有3间:
1号机房 — 最大容量20人
2号机房 — 最多容量50人
3号机房 — 最多容量100人

1.4 系统具体需求:

首先进入登录界面,可选登录身份有:

  • 学生代表
  • 老师
  • 管理员
  • 退出

每个身份都需要进行验证后,进入子菜单

  • 学生需要输入 :学号、姓名、登录密码
  • 老师需要输入:职工号、姓名、登录密码
  • 管理员需要输入:管理员姓名、登录密码

学生具体功能:

  • 申请预约 — 预约机房
  • 查看自身的预约 — 查看自己的预约状态
  • 查看所有预约 — 查看全部预约信息以及预约状态
  • 取消预约 — 取消自身的预约,预约成功或审核中的预约均可取消
  • 注销登录 — 退出登录

教师具体功能:

  • 查看所有预约 — 查看全部预约信息以及预约状态
  • 审核预约 — 对学生的预约进行审核
  • 注销登录 — 退出登录

管理员具体功能:

  • 添加账号 — 添加学生或教师的账号,需要检测学生编号或教师职工号是否重复
  • 查看账号 — 可以选择查看学生或教师的全部信息
  • 查看机房 — 查看所有机房的信息
  • 清空预约 — 清空所有预约记录
  • 查看所有预约 — 查看全部预约信息以及预约状态
  • 注销登录 — 退出登录

1.5程序代码分析:

1.系统管理类:class ManageSystem

ManageSystem.h:

#pragma once
#include"Managers.h"
#include"Students.h"
#include"Teachers.h"#define filePath_student  "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\student.txt"
#define filePath_manage  "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\admin.txt"
#define filePath_teacher  "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\teacher.txt"class ManageSystem {public:bool flag_exit;//退出系统的标志ManageSystem();//构造函数~ManageSystem();//析构函数void showMenu();//显示菜单void controlProgress();//控制系统流程void exitSystem();//退出系统void studentModule(); //学生模块void teacherModule(); //教师模块void managerModule();//管理员模块};

补充:学生模块、教师模块、管理员模块
进入三个模块的操作界面(controlPro())都要进行验证登录makeSureLogIn(),这部分在他们的父类Person类中实现;

ManageSystem.cpp:

#include"ManageSystem.h"

2.Person基类:class Persons

类中包含的内容为所有子类所共有的信息(其实就相当于三个子类的全局变量或者全局函数放到父类中,大家继承后都可以直接调用):

Person.h:

#pragma once
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>
#include<vector>
#include<map>
#include"Orders.h"using namespace std;
class Persons {public:string name;//姓名string password;//登录密码string filePath_student = "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\student.txt";string filePath_manage = "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\admin.txt";string filePath_teacher = "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\teacher.txt";string filePath_comRoom = "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\computerRoom.txt";string filePath_reserveFile = "E:\\c++example\\0913 C++第七阶段\\机房预约系统0913\\机房预约系统0913\\reserveFile.txt";Persons();~Persons();void controlPro();//学生、老师、管理员都有各自的功能和控制流程int getNum();//获取文件中的行数void showAllBooking(); //查看所有预约vector<Orders> saveToVector(string filePath);//把文件中的所有内容保存到一个vector容器中void pritnVector(vector<Orders>& v);//打印容器vector<Orders>& vvoid saveFile(vector<Orders>& v);//保存预约记录到文件中void changeStatus(int xuhao, int newStatus);//改变文件中第xuhao行记录的状态,并且保存到文件中bool makeSureLogIn(int num, string name, string password, string filePath);//登录验证---学生、教师、管理员void saveFile(int num, string name, string password, string filePath);//保存文件:管理员创建的学生/教师信息int strToInt(string str);//string->intstring outputStatus(string status);//输出预约状态
};

补充:
一、vector saveToVector(string filePath);
读取预约记录文件,把文件中的所有内容保存到一个vector容器中,有用到这个函数的地方有:
Person类中的查看所有预约函数、改变状态函数;
Managers类中的获取机房剩余容量函数;
Teachers类中的审核预约函数;
Students类中的查看我的预约、取消预约。
二、void saveFile(vector& v);
保存预约记录到文件中,
①在申请预约的时候一次只会保存一条预约记录到文件中,且不止一次调用此成员函数,所以ofs.open(filePath_reserveFile, ios::out| ios::app);
②但在修改预约状态的时候会将文件中所有预约状态保存到vector中,相当于重写整个预约状态的文件,所以ofs.open(filePath_reserveFile, ios::out );
因此在函数中先判断参数v的大小(v.size())是否大于1,
if (v.size() > 1) {②}else{①}
三、void changeStatus(int xuhao, int newStatus);
把文件中第xuhao行的预约记录状态改为newStatus,并且保存到文件中
修改状态包括将(审核中/已通过的)预约状态改为取消状态1->0;2->0 和 将审核中的状态改为通过/未通过1->2;1->-1;,所以
//形参xuhao表示要修改的预约记录在文件中的第几行
//形参newStatus表示将预约状态改成什么(0取消、2通过、-1不通过)
四、bool makeSureLogIn(int num, string name, string password, string filePath);
登录验证—学生、教师、管理员:
形参分别是账号(学号、职工号)、用户名、密码、要验证的文件路径,在函数中对账号做个判断,是-1说明是管理员,因为管理员没有账号,所以直接输入-1
五、void saveFile(int num, string name, string password, string filePath);
保存文件:管理员创建的学生/教师信息
Managers类中的添加账号有用到,参数里包括账号(学号、职工号)、用户名、密码、要保存到的文件路径,因为只会创建学生和教师信息,所以不涉及账号有可能为-1的情况
六、int strToInt(string str);
类型转换:string->int。读取文件时都是string类型,需要把类型转换成int型才方便使用
七、string outputStatus(string status);
输出预约状态:从文件中读到的是string型数字(0、1、2、-1),先转换成int型数字,再利用switch转换成string型预约状态(已取消、审核中、已通过、未通过)。

Person.cpp:

#include"Person.h"

3.预约记录类:class Orders

预约记录文件中保存七项内容,全部放到Orders类中:

Person.h:

#pragma once
#include<iostream>
#include<string>
#include<sstream>
#include<vector>using namespace std;class Orders {public:int xuhao;           //序号int zhouji;         //周几int shangwuxiawu;   //上午下午int xuehao;           //学号string xingming;    //姓名int jifanghao;      //机房号int yuyuezhuangtai;    //预约状态Orders();Orders(int xuhao,int zhouji,int shangwuxiawu,int xuehao,string name,int jifanghao,int status);//~Orders();//输出单条记录void printSingleOrder();
};

void printSingleOrder();
输出单条记录函数在Students类中的查看我的预约Managers类中的获取机房剩余容量中有应用到。

Orders.cpp:

#include"Orders.h"
#include"Person.h"//这个不能少,因为会用到Person类

注意:Orders.cpp文件中要包含Person类的头文件,否则会报错!!!

4.管理员类:class Managers

Managers.h:

#pragma once
#include"Person.h"class Managers :public Persons {public:bool flag_writeoff = false;//是否注销登录Managers();~Managers();//管理员界面的流程控制 void controlPro();//管理员界面的菜单显示void showMenu();//注销登录void writeoff();//添加账号void addAccount();//查看所有账号void showAllAccount();//查看机房void showAllRoom();//获取机房剩余容量void getRemnant(string jifanghao,string jifnagrongliang);//清空预约void clearAllBooking();//添加账号时按学号查重、去重bool checkRepeat(int num,string filePath);//参数是用户输入的学号/职工号};

一、void addAccount();和bool checkRepeat(int num,string filePath);
添加账号时按学号查重、去重,参数是用户输入的学号/职工号和要查重的文件路径
二、void showAllRoom();和void getRemnant(string jifanghao,string jifnagrongliang);
查看机房容量的同时获取机房剩余容量,即要实时更新机房剩余容量,预约状态为已通过就把对应的机房容量减去一。

Managers.cpp:

#include"Managers.h"

5.学生类:class Students

Students.h:

#pragma once
#include"Person.h"using namespace std;class Students :public Persons {public:int num;//学号bool flag_writeoff;//是否注销登录Students();~Students();//学生界面的流程控制virtual void controlPro();//重写父类的虚函数//学生界面的菜单显示void showMenu();//注销登录void writeoff();//申请预约void applyBooking();//查看我的预约void showMyBooking();//查看所有预约//void showAllBooking();---写到父类中去,大家都能直接调用//取消预约void cancelBooking();
};

一、void applyBooking();//申请预约
每生成一条预约记录,就放到vector容器中进行保存。
二、void showMyBooking();//查看我的预约
遍历预约记录文件,判断每条记录的学号是否等于当前登录的学生学号,相等的就把单条预约记录输出。
三、void cancelBooking();//取消预约----------和Teachers类中的void checkBooking();//审核预约 相类似
编程思想:
首先遍历预约记录文件,将审核状态为1和2(审核中/已通过)且学号为当前登录的学生学号的记录筛选出来从1开始计数(num_own)并把此行记录输出,
并且把当前记录的新序号num_own和原来的序号(即在文件中的行数)组成pair放到map容器中,
然后让用户输入要取消的记录序号,遍历map容器,将用户输入的数字map容器中的m.first做比较,如果相等,就把对应的m.second和0(取消预约)传给changeStatus(it->second, 0);进行状态修改。
Teachers类中的void checkBooking();//审核预约
不同点有两处:审核状态为1(审核中) 的记录筛选出来,最后把m.second2(已通过)/-1(未通过) 传给changeStatus(it->second, 2);进行状态修改。

Students.cpp:

#include"Students.h"

6.教师类:class Teachers

Teachers.h:

#pragma once
#include"Person.h"using namespace std;class Teachers :public Persons {public:int num;//职工号bool flag_writeoff;//是否注销登录Teachers();~Teachers();//教师界面的流程控制:void controlPro();//教师界面的菜单显示void showMenu();//注销登录void writeoff();//查看所有预约//void showAllBooking();//审核预约void checkBooking();};

void checkBooking();//审核预约
(见上面Students类的第三点void cancelBooking();//取消预约)

Teachers.cpp:

#include"Teachers.h"

补充:为什么Person类中的vector<Orders>& saveToVector();返回引用就会赋值失败???

即:
vector& saveToVector();//赋值失败
vector saveToVector();//赋值成功

先看一个测试程序:

#include<iostream>
#include"Person.h"//这个头文件不需要有,整个测试代码都是基于整个Person类的//测试返回值为vector<Orders> v:
int main() {Persons p;//创建Person类对象pvector<Orders> v2;v2 = p.saveToVector(p.filePath_reserveFile);//cout << "容器v2的大小为 " << v2.size() << endl;p.pritnVector(v2);//打印system("pause");return 0;
}

解释:main函数中的第3行(p.saveToVector()p.filePath_reserveFile)和第5行(p.pritnVector(v2))都是直接调用Person类中的成员变量或成员函数,所以第1行要创建Person类对象p。
其中vector Persons::saveToVector(string filePath) 的具体代码如下:

vector<Orders> Persons::saveToVector(string filePath) {//如果返回一个引用vector<Orders>&,就会赋值失败?????vector<Orders> v1;//存放文件中的所有预约记录
//①读取文件int num = 0;//文件中的人数ifstream ifs;ifs.open(filePath, ios::in);//这里可以直接写filePath_reserveFileif (!ifs.is_open()) {cout << "文件打开错误!" << endl;system("pause");system("cls");vector<Orders> v;return v;}string line;while (getline(ifs, line)) {//按行读取num++;vector<string> v;string subStr;stringstream ss;ss << line;ss.clear();//以防下面会重复利用sswhile (getline(ss, subStr, ' ')) {v.push_back(subStr);}
//②用当前行的内容构造一个Orders类对象int xuhao = strToInt(v[0]);int zhouji = strToInt(v[1]);int shangwuxiawu = strToInt(v[2]);int xuehao = strToInt(v[3]);string name = v[4];int jifanghao = strToInt(v[5]);int zhuangtai = strToInt(v[6]);Orders order1(xuhao, zhouji, shangwuxiawu, xuehao, name, jifanghao, zhuangtai);
//③把Orders类对象尾插进v1容器中v1.push_back(order1);}//cout << "文件中的预约记录数量:" << v1.size() << endl;if (num == 0)cout << "文件为空!" << endl;return v1;
}

最主要的是问题在于函数体的返回值
vector<Orders>& saveToVector(); //赋值失败
vector<Orders> saveToVector(); //赋值成功

复习:
重新看
①C++核心编程的2、引用 + 4.2.2/4.2.3拷贝构造 + 4.3.2 this指针
②黑马程序员的C++课程P89-P94引用 + P108拷贝构造 + P115this指针
进行理解,另外在
③C++提高编程2的3.2.7 vector互换容器涉及到的匿名对象和这块内容相关。

总结:
1.先搞清楚拷贝构造和this指针:的概念和区别:
拷贝构造是构造函数的一种,函数名就是类名;
this指针是成员函数中要返回对象本身的时候return *this;

示例:

#include<iostream>
#include<string>
using namespace std;class Animals {public:string name;//姓名int age;//年龄Animals() { name = " "; age = 0;  }Animals(string name, int age) {this->name = name;this->age = age;}
};class Person {public:int age;//默认构造/无参构造Person() { this->age = 0; };//有参构造Person(int age) {this->age = age;}//拷贝构造Person(const Person& p) {this->age = p.age;}//成员函数0---增加年龄void addAge0(int age) {this->age += age;}//成员函数1---增加年龄void addAge1(const Person& p) {this->age += p.age;}//成员函数2---增加年龄Person addAge2(const Person& p) {this->age += p.age;return *this;}//成员函数3---增加年龄Person& addAge3(const Person& p) {this->age += p.age;return *this;}//成员函数4---返回Animals类对象Animals saveToAnimals(string name,int age) {//这里只能是返回Animals,不能加引用,否则会报错Animals animal(name,age);return animal;}
};

main函数代码:

int main() {//默认构造Person p1;p1.age = 10;    cout << "p1.age = " << p1.age << endl;//10
//有参构造Person p2(11);    cout << "p2.age = " << p2.age << endl;//11
//拷贝构造Person p3(p1);    cout << "p3.age = " << p3.age << endl;//10cout << endl;
//成员函数0---增加年龄p1.addAge0(10);       cout << "p1.age = " << p1.age << endl;//10+10=20
//成员函数1---增加年龄p2.addAge1(p1);       cout << "p2.age = " << p2.age << endl;//11+20=31cout << endl;
//成员函数2---返回对象p1.age = 10;p3.age = 0;cout << "p3的地址为 " << &p3 << endl;//p3的地址为 00B3FA14Person p5 = p3.addAge2(p1);//cout << "p?的地址为 " << &(p3.addAge2(p1)) << endl;//没办法获取到匿名对象的地址,会报错!!!cout << "p5的地址为 " << &p5 << endl;//p5的地址为 00B3FA08cout << "p3.age = " << p3.age << endl;//10cout << "p?.age = " << p3.addAge2(p1).age << endl;//20cout << "p3.age = " << p3.age << endl;//20???cout << "p?.age = " << p3.addAge2(p1).addAge2(p1).age << endl;//20+10+10+10=50cout << "p3.age = " << p3.age << endl;//30???cout << "p?.age = " << p3.addAge2(p1).addAge2(p1).addAge2(p1).age << endl;//20+10+10+10=50cout << "p3.age = " << p3.age << endl;//30???cout << endl;
//成员函数3---返回引用p1.age = 10;p2.age = 0;cout << "p2的地址为 " << (int)&p2 << endl;//p2的地址为 00B3FA20Person p6 = p2.addAge3(p1);cout << "p?的地址为 " << (int)&(p2.addAge3(p1)) << endl;//p?的地址为 00B3FA20cout << "p6的地址为 " << (int)&p6 << endl;//p6的地址为 00B3F9FCcout << "p2.age = " << p2.age << endl;//10cout << "p?.age = " << p2.addAge3(p1).age << endl;//20cout << "p2.age = " << p2.age << endl;//20???cout << "p?.age = " << p2.addAge3(p1).addAge3(p1).age << endl;//20+10+10+10=50cout << "p2.age = " << p2.age << endl;//50???cout << "p?.age = " << p2.addAge3(p1).addAge3(p1).addAge3(p1).age << endl;//20+10+10+10=50cout << "p2.age = " << p2.age << endl;//50???cout << endl;//成员函数2和3混着用---共八种情况Person p4;//222p1.age = p2.age = 10;cout << "p?.age = " << p4.addAge2(p1).addAge2(p2).addAge2(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//10//223p1.age = p2.age = 10;  p4 = 0;cout << "p?.age = " << p4.addAge2(p1).addAge2(p2).addAge3(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//10//232p1.age = p2.age = 10;  p4 = 0;cout << "p?.age = " << p4.addAge2(p1).addAge3(p2).addAge2(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//10//233p1.age = p2.age = 10;  p4 = 0;cout << "p?.age = " << p4.addAge2(p1).addAge3(p2).addAge3(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//10cout << endl;//333p1.age = p2.age = 10;   p4 = 0;cout << "p?.age = " << p4.addAge3(p1).addAge3(p2).addAge3(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//30//332p1.age = p2.age = 10;  p4 = 0;cout << "p?.age = " << p4.addAge3(p1).addAge3(p2).addAge2(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//30//323p1.age = p2.age = 10;  p4 = 0;cout << "p?.age = " << p4.addAge3(p1).addAge2(p2).addAge3(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//20//322p1.age = p2.age = 10;  p4 = 0;cout << "p?.age = " << p4.addAge3(p1).addAge2(p2).addAge2(p1).age << endl;//30cout << "p4.age = " << p4.age << endl;//20//成员函数4---返回Animals类对象Person p8;Animals cat;cat = p8.saveToAnimals("咪咪",3);cout << "姓名:" << cat.name << "\t年龄:" << cat.age << endl;system("pause");return 0;
}

程序分析:
1、
如果返回值加了引用,那么返回的就是调用这个函数的对象本身
如果返回值没加引用,返回的就是一个新的匿名对象
可以通过下面的程序进行验证:
①没加引用:返回的匿名对象的地址没办法输出
//成员函数2—返回对象
p1.age = 10;
p3.age = 0;
cout << "p3的地址为 " << &p3 << endl;//p3的地址为 00B3FA14
Person p5 = p3.addAge2(p1);
//cout << "p?的地址为 " << &(p3.addAge2(p1)) << endl;//没办法获取到匿名对象的地址,会报错!!!
cout << "p5的地址为 " << &p5 << endl;//p5的地址为00B3FA08

②加了引用:返回的地址和p2的地址一模一样,说明返回的就是p2,而不是匿名对象
//成员函数3—返回引用
p1.age = 10;
p2.age = 0;
cout << "p2的地址为 " << (int)&p2 << endl;//p2的地址为 00B3FA206
Person p6 = p2.addAge3(p1);
cout << "p?的地址为 " << (int)&(p2.addAge3(p1)) << endl;//p?的地址为 00B3FA20
cout << "p6的地址为 " << (int)&p6 << endl;//p6的地址为 00B3F9FC

2、通过更直观的方式来说明加引用和不加引用的区别:
加引用3和不加引用2混着用:
加了引用就还是自己,不加引用就是新的匿名对象

(333 332 323 322):
(222 223 232 233):

3、机房预约系统中的问题
vector<Orders> saveToVector();//不能加引用,否则会报错
其实是调用Person类中的成员方法saveToVector();,但返回的是另一个类Vector类的对象vector<Orders>
这和上面的程序事例Person& addAge3(const Person& p)不一样,上面是Person类对象调用Person类成员函数addAge3(const Person& p),返回的也是Person类,这时可以返回一个类对象Person addAge2(){},也可以返回一个引用Person& addAge3(){}

//成员函数4—返回Animals类对象
Person p8;
Animals cat;
cat = p8.saveToAnimals(“咪咪”,3);
//调用Person类的saveToAnimals(),返回Animals类对象
cout << “姓名:” << cat.name << “\t年龄:” << cat.age << endl;

C++笔记16:C++第七阶段:机房预约系统---返回引用vector<Orders>的bug解释相关推荐

  1. C++ 机房预约系统

    文章目录 机房预约系统 一. 系统需求 1. 系统简介 2. 身份简介 3. 机房简介 4. 申请简介 5. 系统需求 6. 创建文件 二. 创建主菜单 1. 菜单实现 2. 接口搭建 三. 退出功能 ...

  2. C++实现机房预约系统

    相关视频--黑马程序员C++(282-314) (1-83笔记)--链接 (84-146笔记)--链接 (146-166笔记)--链接 (167-263笔记)--链接 (264-281笔记)--链接 ...

  3. 机房预约系统(C++)

    各位读者朋友,大家好!本篇文章主要内容是将黑马程序员(C++)的机房预约系统的源代码展现给大家.原码的大部分与黑马程序员老师写的代码一致,我只是对其中的一小部分做了优化,比如用户输入自己的选择不再程序 ...

  4. C/C++ 机房预约系统

    我们在入门C++后都会自己设计一个系统,来检验自己的c++基础是否牢固.而博主最近在某站上跟着黑马一起看视频学习c++,其中有个机房预约系统,博主也跟着敲了一下,接下来让我们一起来看看程序吧. 在设计 ...

  5. 机房预约系统(黑马程序员)

    机房预约系统 1.机房预约系统需求 1.1 系统简介 学校现有几个规格不同的机房,由于使用时经常出现"撞车"现象,现开发一套机房预约系统,解决这一问题. 1.2 身份简介 分别有三 ...

  6. 黑马程序员C++ 案例四 机房预约系统

    源文件 机房预约系统.cpp #include<iostream> using namespace std; #include"identity.h" #include ...

  7. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记16:第七章 专用函数2——金融函数

    当前Numpy版本为:1.20 第七章 专用函数 7.9 金融函数 NumPy中有很多金融函数. Numpy 1.20之前的版本导入numpy,直接调用以下函数即可. (注意!Numpy 1.20之后 ...

  8. 【机房收费系统】——傻瓜式报表设计器制作报表模板

    一.下载安装Grid++Report5.0: 1.搜索下载Grid++Report5.0并安装:(附赠哟~但是建议大家自己去下载) 云盘分享:https://yunpan.cn/c6ggtnHFDsg ...

  9. 【C++】C++实战项目机房预约管理系统

    前言 这是C++总结性练习,主要以一个综合案例对以前学过的知识进行复习巩固,为以后编程打下基础. 1. 机房预约系统需求 1.1 系统简介 学校有几个规格不同的机房, 由于使用时经常出现"撞 ...

最新文章

  1. qhfl-5 redis 简单操作
  2. linux wc 修改文件,Linux wc命令
  3. 卸载python27_27. 移除元素(Python)
  4. css渐变颜色php,css的渐变颜色
  5. python:使用strip()去掉首尾空格
  6. ToStringBuilder用法
  7. 转:有关Forth语言
  8. java applet编程_JavaApplet编程技巧
  9. 旁路电容和去耦电容基础知识
  10. SLAM——之G2O函数库
  11. 世界过敏性疾病日 | 儿童过敏性鼻炎校园筛查启动
  12. 网卡介绍——MAC与PHY的关系分析
  13. 一张图看明白电信云解决方案架构
  14. 用spss判断正态性检验的几种方法
  15. Linux 命令之 addr2line
  16. kegg 上ko号对应的通路数据
  17. Python井字棋源代码
  18. 独秀日记:咱朋友圈的微商大佬比怨妇多,总是更好一点的,对吧
  19. Android开发实用小工具十——进制转换工具
  20. MTK 手机芯片 2014 Roadmap

热门文章

  1. 百度HTTPS一直认证不通过最有效的解决办法!前提是确认自己网站已经全部可以https访问了。
  2. window和服务器之间通过scp互传文件
  3. windows上安装Apollo
  4. 七夕特辑 | 前沿技术合集
  5. Nodejs安装时出现2503错误
  6. Fujifilm FinePix T500 Camera Features Review
  7. Race Condition(竞争条件)
  8. C 库函数 - strtol()
  9. Command ‘cnpm‘ not found解决方法
  10. Codeup墓地-2070