#include <iostream>//标准的输入输出流
using namespace std;
int main()
{
system("pause");
return 0;
}
#include <iostream>//标准的输入输出流
using namespace std;
int main()
{
char role;
cout << "请选择" << endl;
cout << "A:学生 B:老师 C:家长" << endl;
while (true)
{
cin >> role;
switch (role)
{
case 'A':
break;
case 'B':
break;
case'C':
break;
default:
cout << "请重新选择" << endl;
break;
}
}
system("pause");
return 0;
}
#pragma once//防止头文件重复包含
#include <iostream>
using namespace std;
class Identity//基类
{
public:
virtual void operMenu() = 0;//纯虚函数
string m_name;
string m_pwd;
};
#pragma once
#include <iostream>
using namespace std;
#include "Identity.h"
//学生类
class Student :public Identity
{
public:
//默认构造
//有参构造
virtual void operMenu() = 0;//?菜单界面?
//学生学号
//申请预约
//。。。
};
#pragma once
#include <iostream>
using namespace std;
#include "Identity.h"
//学生类
class Student :public Identity
{
public:
Student();
Student(int id, string name, string pwd);
virtual void operMenu();
int m_id;
void applyOrder();
void showMyOrder();
void cancelOrder();
};
#include "student.h"
Student::Student(){
}
Student::Student(int id, string name, string pwd) {
}
void Student::operMenu() {
}
void Student::applyOrder() {
}
void Student::showMyOrder() {
}
void Student::cancelOrder() {
}
#pragma once
#include <iostream>
using namespace std;
#include "Identity.h"
class Teacher :public Identity
{
public:
Teacher();//默认构造函数
Teacher(int empId,string name, string pwd);//有参构造
int m_EmpId; //职工号
virtual void operMenu();//菜单
void shoeAllOrder();//查看所有预约
void validOrder();//审核预约
};
#include "teacher.h"
Teacher::Teacher() {
}
Teacher::Teacher(int empId, string name, string pwd) {
}
void Teacher::operMenu() {
}
void Teacher::shoeAllOrder() {
}
void Teacher::validOrder() {
}
#pragma once
#include <iostream>
using namespace std;
#include "Identity.h"
class Manger :public Identity
{
public:
Manger();
Manger(string name, string pwd);
virtual void operMenu();//菜单
void addPerson();
void showPerson();
void showComputer();
};
#include "manger.h"
Manger::Manger() {
}
Manger::Manger(string name, string pwd) {
}
void Manger::operMenu() {
}
void Manger::addPerson() {
}
void Manger::showPerson() {
}
void Manger::showComputer() {
}
#pragma once
//管理员文件
#define ADMIN_FILE "admin.txt"
//学生文件
#define STUDENT_FILE "student.txt"
//教师文件
#define TEACHER_FILE "teacher.txt"
//机房信息文件
#define COMPUTER_FILE "computer.txt"
//订单文件
#define ORDER_FILE "order.txt"
#include "globalFile.h"
#include <fstream>
#include <string>
#include "Identity.h"
//全局函数-登录函数
//传入的是-----操纵的文件名和身份类型
void LoginIn(string fileName, char role)
{
//父类指针,用于指向子类对象
Identity* person = NULL;
//读文件
ifstream ifs;
ifs.open(fileName, ios::in);
//判断文件是否存在
if (!ifs.is_open())
{
cout << "文件不存在" << endl;
ifs.close();
return;
}
//准备用户信息
int id = 0;
string name;
string pwd;
//判断身份
if (role == 'A')
{
cout << "输入学号:" << endl;
cin >> id;
}
else if (role == 'B')
{
cout << "输入职工号:" << endl;
cin >> id;
}
cout << "用户名:" << endl;
cin >> name;
cout << "密码:" << endl;
cin >> pwd;
if (role == 'A')
{
//学生身份验证
}
else if (role == 'B')
{
//教师身份验证
}
else if (role == 'C')
{
//管理员身份验证
}
cout << "验证失败" << endl;
return;
}
//学生身份验证
int fId;//从文件中读取ID号
string fName;
string fPwd;
while (ifs >> fId && ifs >> fName && ifs >> fPwd)
{
//比对
}
#include "student.h"
#include "teacher.h"
#include "manger.h"
//比对
if (fId == id && fName == name && fPwd == pwd)
{
cout << "学生验证成功" << endl;
person = new Student(id, name, pwd);
//进入学生系统
return;
}
//教师身份验证
int fId;//从文件中读取ID号
string fName;
string fPwd;
while (ifs >> fId && ifs >> fName && ifs >> fPwd)
{
//比对
if (fId == id && fName == name && fPwd == pwd)
{
cout << "学生验证成功" << endl;
person = new Student(id, name, pwd);
//进入学生系统
return;
}
}
//管理员身份验证
while (ifs >> fName && ifs >> fPwd)
{
//比对
if (fName == name && fPwd == pwd)
{
cout << "管理员验证成功" << endl;
person = new Manger(name, pwd);
//进入管理系统
return;
}
}
1、首先在管理员类【manger.cpp】里
//Manger类的构造函数,初始化管理员信息
//有参构造
Manger::Manger(string name, string pwd) {
//记录管理员自己的姓名和密码
this->m_name = name;
this->m_pwd = pwd;
}
//添加账号,查看账号,查看机房,清空预约,注销登录
void Manger::operMenu() {
cout << "欢迎管理员" << this->m_name << "登录!" << endl;
cout << "1.添加账号" << endl;
cout << "2.查看账号" << endl;
cout << "3.查看机房" << endl;
cout << "4.清空预约" << endl;
cout << "0.注销登录" << endl;
}
2、在主函数里添加一个全局函数用父类的指针接收,用于进入子菜单
需要注意如果不提前声明这个函数,注意在调用的时候的先后顺序。
//全局函数-子菜单界面
void managerMenu(Identity*& manager)
{
while (true)
{
//首先打开管理员子菜单
manager->operMenu();
Manger* man = (Manger*)manager;
int select = 0;
cin >> select;
if (select == 1)
{
cout << "添加账号" << endl;
man->addPerson();
}
else if (select == 2)
{
cout << "查看账号" << endl;
man->showPerson();
}
else if (select == 3)
{
cout << "查看机房" << endl;
man->showComputer();
}
else if (select == 3)
{
cout << "清空预约" << endl;
man->clearFile();
}
else
{
delete manager;
cout << "注销成功" << endl;
return;
}
}
}
3【manger.cpp】继续完善
#include "globalFile.h"
#include <fstream>
void Manger::addPerson() {
cout << "添加学生请按1,添加教师请按2" << endl;
int select = 0;
cin >> select;
string filename;
string tip;
if (select==1)
{
filename = STUDENT_FILE;
tip = "请输入学号";
}
else if (select == 2)
{
filename = TEACHER_FILE;
tip = "请输入职工编号";
}
else
{
return;
}
ofstream ofs;
ofs.open(filename, ios::out | ios::app);
int id;
string name;
string pwd;
cout << tip << endl;
cin >> id;
cout << "请输入姓名" << endl;
cin >> name;
cout << "请输入密码" << endl;
cin >> pwd;
ofs << id << " " << name << " " << pwd << " " << endl;
cout << "添加成功" << endl;
ofs.close();
}
4.去重操作。使用到了容器。在【manger.h】的类{ class Manger :public Identity }中添加
#include <vector>
#include "student.h"
#include "teacher.h"
//初始化容器
void initVector();
//学生容器
vector<Student>vStu;
//教师容器
vector<Teacher>vTea;
5.在【manger.cpp】里完善void initVector()初始化函数
//初始化容器
void Manger::initVector() {
//清空容器
vStu.clear();
vTea.clear();
//读取信息
ifstream ifs;
ifs.open(STUDENT_FILE, ios::in);//用ios冒号冒号in的方式打开
if (!ifs.is_open())
{
cout << "学生文件读取失败" << endl;
return;
}
Student s;
while (ifs >> s.m_id && ifs >> s.m_name && ifs >> s.m_pwd)
{
vStu.push_back(s);
}
cout << "当前学生数量" << vStu.size() << endl;
ifs.close();
ifs.open(TEACHER_FILE, ios::in);//用ios冒号冒号in的方式打开
if (!ifs.is_open())
{
cout << "教师文件读取失败" << endl;
return;
}
Teacher t;
while (ifs >> t.m_name && ifs >> t.m_pwd)
{
vTea.push_back(t);
}
cout << "当前教师数量" << vTea.size() << endl;
ifs.close();
}
去重,检测是否有重复(类型,ID)返回bool,这个函数应该添加到
添加账号{void Manger::addPerson()}函数里面
//检测是否有重
bool checkRepeat(int type, int id);
bool Manger::checkRepeat(int type, int id) {
if (type == 2)
{
for (vector<Teacher>::iterator ti = vTea.begin(); ti != vTea.end(); ti++)
{
if (id == ti->m_EmpId)
{
return true;
}
}
}
else
{
for (vector<Student>::iterator ti = vStu.begin(); ti != vStu.end(); ti++)
{
if (id == ti->m_id)
{
return true;
}
}
}
return false;
}
把cin >> id;换成如下检测代码
while (true)
{
cin >> id;
bool ret = checkRepeat(select, id);
if (ret)//为真有重复
{
cout << errortip << endl;
}
else
{
break;
}
}
对于容器---c++的STL面向对象(封装继承和多态),泛型编程
容器+算法+迭代器,,,仿函数
vector ,list , deque , set, map用来存放数据【数据结构】
sort, find, copy, for_each 等
迭代器类似于指针
遍历查看for_each(vStu.begin(), vStu.end(), printStudent);
#include <algorithm>
//打印信息
void printStudent(Student& s){
cout << "学号:" << s.m_id << "\t姓名:" << s.m_name << endl;
}
void printTeacher(Teacher& t) {
cout << "职工号:" << t.m_EmpId << "\t姓名:" << t.m_name << endl;
}
void Manger::showPerson() {
cout << "查看所有学生请按1,查看所有老师请安2" << endl;
int select = 0;
cin >> select;
if (select == 1)
{
cout << "学生信息如下:" << endl;
for_each(vStu.begin(), vStu.end(), printStudent);
}
else
{
cout << "教师信息如下:" << endl;
for_each(vTea.begin(), vTea.end(), printTeacher);
}
system("pause");
}
6.机房的类【computerROOM.h】头文件
#pragma once//防止重复命名
#include <iostream>//标准io流
using namespace std;//标准命名空间
class ComputerRoom
{
public:
int m_ComID;
int m_MaxNum;
};
//机房初始化
void Manger::initComputerROOM() {
ifstream ifs;
ifs.open(COMPUTER_FILE, ios::in);
ComputerRoom com;//初始化一个机房的类
while (ifs >> com.m_ComID && ifs >> com.m_MaxNum)
{
vCom.push_back(com);
}
ifs.close();
cout << "-------------------机房的数量" << vCom.size() << endl;
}
void Manger::showComputer() {
cout << "机房信息如下" << endl;
int AllNum = 0;
for (vector<ComputerRoom>::iterator ti = vCom.begin(); ti != vCom.end(); ti++)
{
cout << "机房编号=" << ti->m_ComID << ":机房最大容量=" << ti->m_MaxNum << endl;
AllNum = AllNum + ti->m_MaxNum;
}
cout << "总机位=" << AllNum << endl;
}
7.学生子菜单
//全局函数-学生子菜单
void studentMenu(Identity*& student) {
while (true)
{
student->operMenu();//调用学生子菜单
Student* stu = (Student*)student;
int select = 0;
cin >> select;
if (select == 1) {
stu->applyOrder();//申请预约
}
else if (select == 2) {
stu->showMyOrder();//查看个人预约
}
else if (select == 3) {
stu->showAllOrder();//查看所有人预约
}
else if (select == 4) {
stu->cancelOrder();
}
else
{
delete student;
cout << "注销成功" << endl;
return;
}
}
}
第一次了解c++的类
#include <iostream>
using namespace std;
//设计一个类 名称
//类的属性,行为(成员属性-变量,成员函数-方法)
class Circle
{
//访问权限
//保护权限:父类中的保护权限子类可以也使用
//私有权限:子类也不可访问
public://公共权限
//属性
int r;//半径
//行为
double calculateZC()//计算圆的周长
{
return 2 * PI * r;
}
protected://保护权限
int d = 2 * r;
private://私有权限
const double PI = 3.14;
};
int main()
{
//实例化
Circle Yuan;//通过圆类,创建一个具体对象
cout << "圆的半径:";
cin >> Yuan.r;//给这个对象赋值
cout << Yuan.calculateZC() << endl;
return 0;
}
一个完整的代码:用到了结构体,类(属性和动作)
#include <iostream>
#include "string"
using namespace std;
//定义一个结构
struct triple
{
int l, h, w;
};
//立方体的类
class Cube
{
public:
int m_id;
//设置长
void setLHW(int l, int h, int w,int id)
{
m_l= l;
m_h = h;
m_w = w;
m_id = id;
}
//获取长
triple getLHW()
{
C.l = m_l;
C.h = m_h;
C.w = m_w;
return C;
}
//获取体积
int getV()
{
return m_l*m_h*m_w;
}
//获取面积
int getS()
{
return 2 * m_l * m_h + 2 * m_h * m_w + 2 * m_l * m_w;
}
//利用成员函数判断是否是相同立方体
bool isSameCube(Cube & c)
{
if (c.getLHW().l == m_l && c.getLHW().h == m_h && c.getLHW().w == m_w)
{
return true;
}
return false;
}
private:
int m_l, m_h, m_w;
triple C;
};
//全局函数比较两者大小
void compare(Cube& c1, Cube& c2)
{
if (c1.getV() > c2.getV()) { cout <<"第"<< c1.m_id << "个体积较大"; }
else if (c1.getV() < c2.getV()) { cout << "第" << c2.m_id << "个体积较大"; }
else
{
cout << "一样大,并且";
cout << "第" << c1.m_id << "个的面积是" << c1.getS();
cout << "第" << c2.m_id << "个的面积是" << c2.getS();
}
}
void main()
{
Cube cube1;
int l, h, w;
cout << "长度=";
cin >> l;
cout << "高度=";
cin >> h;
cout << "宽度=";
cin >> w;
cube1.setLHW(l,h,w,1);
cout << "体积="<<cube1.getV() << endl;
cout << "面积=" << cube1.getS() << endl;
cout << "下一个" << endl;
Cube cube2;
cout << "长度=";
cin >> l;
cout << "高度=";
cin >> h;
cout << "宽度=";
cin >> w;
cube2.setLHW(l, h, w,2);
cout << "体积=" << cube2.getV() << endl;
cout << "面积=" << cube2.getS() << endl;
bool ret = cube2.isSameCube(cube1);
cout << ret<<endl;
//比较
compare(cube1, cube2);
return;
}
学习了类的析构函数和构造函数
#include <iostream>
using namespace std;
//设计一个类 名称
//类的属性,行为(成员属性-变量,成员函数-方法)
class Circle
{
//
//访问权限,默认权限是私有权限。
//保护权限:父类中的保护权限子类可以也使用
//私有权限:子类也不可访问
public://公共权限
//构造函数:没有返回值,自动调用,只调用一次
Circle()
{
cout << "调用构造函数" << endl;
}
//析构函数:
~Circle()
{
cout << "调用析构函数" << endl;
}
//属性
int r;//半径
//行为
double calculateZC()//计算圆的周长
{
return 2 * PI * r;
}
protected://保护权限
int d = 2 * r;
private://私有权限
const double PI = 3.14;
};
void testXiGouFun()
{
Circle circle;//局部变量,创建在栈区。
//执行完后会自动释放
}
int main()
{
//实例化
Circle Yuan;//通过圆类,创建一个具体对象
cout << "圆的半径:";
cin >> Yuan.r;//给这个对象赋值
cout << Yuan.calculateZC() << endl;
//测试析构函数
cout << "-----测试析构函数-----" << endl;
testXiGouFun();
return 0;
}
继承
//子类
//如何继承---public 加继承类的名称
//继承方式:公共继承【公共还是公共,保护还是保护,私有不能访问】,
//保护继承【除了私有内容不能访问,其他都变成了保护权限】,
//私有继承【除了私有内容不能访问,其他都变成了私有权限】
class ellipse :public Circle
{
public:
double a = r;//你看!这就直接访问到父类的r了
double b = 2 * r;
double calculatS()
{
return a * b * PI;
}
};
//更改父类 PI的访问权限
protected://保护权限
const double PI = 3.14;
private://私有权限
int d = 2 * r;
多态