学生类和老师类可以在数据类里查看增添删除信息。
只实现了简单的很小一部分。
staff.h:
#pragma once
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct information{
string name;
int id;
string subject;
int score;
int gpa;
};
struct user{
string passwd;
int id;
};
class Staff{
private:
int id;
string passwd;
public:
Staff(int a,string b):id(a),passwd(b){}
virtual ~Staff(){}
int getid(){return id;}
string getpasswd(){return passwd;}
};
class Student : public Staff{
private:
string name;
public:
Student(int a,string b,string c):Staff(a,b),name(c){}
~Student(){}
void check();
void connect();
};
class Teacher : public Staff{
public:
Teacher(int a,string b):Staff(a,b){}
~Teacher(){}
void insert();
// void delete();
void check();
void connect();
};
class Database {
private:
vector<information> table;
vector<user> usertable;
Database(){
user root;
root.id = 1;
root.passwd = "westbrook0";
vector<user>::iterator it;
it = usertable.begin();
usertable.insert(it,root);
}
~Database(){
delete Instance;
}
static Database* Instance;
public:
static Database* getInstance(){
return Instance;
}
friend class Student;
friend class Teacher;
};
staff.cpp:
#include "stuff.h"
Database* Database::Instance = new Database;
void Student::check(){
Database* pInstance = Database::getInstance();
vector<user>::iterator it = pInstance->usertable.begin();
cout<<"usertable: "<<endl;
while(it!=pInstance->usertable.end())
{
cout<<it->id<<" "<<it->passwd<<" "<<endl;
it++;
}
cout<<"information table: "<<endl;
vector<information>::iterator it2;
it2 = pInstance->table.begin();
while(it2!=pInstance->table.end())
{
cout<<it2->name<<" "<<it2->id<<" "<<it2->subject<<" "<<it2->score<<" "<<it2->gpa<<" "<<endl;
it2++;
}
}
void Teacher::check(){
Database* pInstance = Database::getInstance();
vector<user>::iterator it = pInstance->usertable.begin();
cout<<"usertable: "<<endl;
while(it!=pInstance->usertable.end())
{
cout<<it->id<<" "<<it->passwd<<" "<<endl;
it++;
}
cout<<"information table: "<<endl;
vector<information>::iterator it2;
it2 = pInstance->table.begin();
while(it2!=pInstance->table.end())
{
cout<<it2->name<<" "<<it2->id<<" "<<it2->subject<<" "<<it2->score<<" "<<it2->gpa<<" "<<endl;
it2++;
}
}
void Student::connect(){
Database* pInstance = Database::getInstance();
vector<user>::iterator it = pInstance->usertable.begin();
bool flag=false;
while(it!=pInstance->usertable.end())
{
if((it->id==getid())&&(it->passwd==getpasswd()))
{
flag=true;
break;
}
it++;
}
if(flag==true)
cout<<"connect success!!"<<endl;
else
cout<<"connect error!"<<endl;
}
void Teacher::connect(){
Database* pInstance = Database::getInstance();
vector<user>::iterator it = pInstance->usertable.begin();
bool flag=false;
while(it!=pInstance->usertable.end())
{
if((it->id==getid())&&(it->passwd==getpasswd()))
{
flag=true;
break;
}
it++;
}
if(flag==true)
cout<<"connect success!!"<<endl;
else
cout<<"connect error!"<<endl;
}
void Teacher::insert(){
information t;
cout<<"input name,id,subject,score,gpa"<<endl;
cin>>t.name>>t.id>>t.subject>>t.score>>t.gpa;
Database* pInstance = Database::getInstance();
pInstance->table.push_back(t);
}
main.cpp:
#include "stuff.h"
int main()
{
string x="student1";
string y="teacher1";
string c="ddk";
int x1 = 1;
int y1 = 1;
Student a(x1,x,c);
Teacher b(y1,y);
cout<<"student check() : "<<endl;
a.check();
cout<<endl;
cout<<"teacher check() : "<<endl;
b.check();
cout<<endl;
}
后来做的:
Cmd.h
#pragma once
enum CourseCmd
{
Cmd_PrintHelp = 0,
Cmd_PrintCourse = 1,
Cmd_PrintCourseNum = 2,
Cmd_PrintLongName = 3,
Cmd_RemoveLastCourse = 4,
Cmd_Exit = 5,
};
CmdManager.cpp
#include "CmdManager.h"
void CmdManager::Init()
{
manager.AddCourse("Linux");
cmdMap.insert(pair<CourseCmd,string>(Cmd_PrintHelp,"Help Info"));
}
bool CmdManager::HandleCmd(const CourseCmd cmd)
{
auto iter = cmdMap.find(cmd);
if(iter == cmdMap.end())
{
cout<<"Not found"<<endl;
return true;
}
switch(cmd)
{
case
Cmd_PrintHelp:
PrintAllHelp();
break;
case
Cmd_PrintCourse:
manager.PrintAllCourse();
break;
case
Cmd_PrintCourseNum:
cout<<manager.GetCourseNum()<<endl;
break;
case
Cmd_PrintLongName:
manager.PrintLongNameCourse();
break;
case
Cmd_RemoveLastCourse:
manager.RemoveLast();
break;
case
Cmd_Exit:
return false;
default:
break;
}
return true;
}
CmdManager.h
#pragma once
#include "Cmd.h"
#include "CourseManager.h"
#include <iostream>
#include <map>
using namespace std;
class CmdManager
{
private:
CourseManager manager;
map<CourseCmd ,string>cmdMap;
public:
CmdManager()=default;
void Init();
void PrintAllHelp()const{}
void PrintCmdHelp(const CourseCmd cmd)const{}
bool HandleCmd(const CourseCmd cmd){}
CourseManager& GetCourseManager()
{return manager;}
};
Course.cpp
#include "Course.h"
int Course::currentId = 1;
Course::Course()
{
id = currentId++;
name="";
}
ostream& operator<<(ostream& os,const Course& course)
{
os<<"Course: "<<course.id<<":"<<course.name;
return os;
}
Course::Course(const Course& course)
{
id=currentId++;
name=course.name;
}
Course.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Course
{
private:
int id;
string name;
static int currentId;
friend void read(istream& inputStream,Course &course);
public:
Course();
Course(const string& cName):name(cName){}
Course(const Course& course);
inline virtual void PrintInfo()const { cout<<name<<endl;}
inline string Getname()const{return name; }
inline void SetName(const string& newName){name = newName;}
inline const int GetId()const {return id;}
friend ostream& operator<<(ostream& out,const Course& course);
};
class ProjectCourse:public Course
{
public:
inline void SetTag(const string& newTag){tag = newTag;}
inline string GetTag()const {return tag;}
virtual void PrintInfo()const override;
private:
string tag;
};
CourseManager.cpp
#include "CourseManager.h"
#include <assert.h>
CourseManager::CourseManager(const vector<Course>& courseVect)
{
courseList=courseVect;
}
void CourseManager::AddCourse(const Course& course)
{
courseList.push_back(course);
}
void CourseManager::AddCourse(const string& courseName)
{
Course course(courseName);
courseList.push_back(course);
}
void CourseManager::PrintAllCourse()
{
for(auto curs=courseList.begin();curs!=courseList.end();++curs)
{
cout<<curs->Getname()<<" "<<curs->GetId()<<endl;
}
}
void CourseManager::RemoveLast()
{
assert(!courseList.empty());
courseList.pop_back();
}
void CourseManager::RemoveById(int id)
{
int index=-1;
for(auto curs=courseList.begin();curs!=courseList.end();++curs)
{
if(curs->GetId()==id){
index++;
break;
}
index++;
}
if(index==-1)
cout<<"Not found"<<endl;
else
courseList.erase(courseList.begin()+index);
}
CourseManager.h
#pragma once
#include <iostream>
#include <vector>
#include "Course.h"
using namespace std;
class CourseManager
{
private:
vector<Course>courseList;
public:
CourseManager() = default;
CourseManager(const vector<Course>& courseVect);
inline int GetCourseNum(){return courseList.size();}
void AddCourse(const Course& course);
void AddCourse(const string& courseName);
void RemoveLast();
void RemoveByName(const string& name);
void RemoveById(int id);
void PrintAllCourse();
void PrintCourse(const string& name);
void PrintCourse(int id);
void PrintLongNameCourse(){}
};
main.cpp:
#include "CmdManager.h"
int main()
{
int cmd;
CmdManager cmdManager;
cmdManager.Init();
cmdManager.PrintAllHelp();
cout<<"New Command:";
while(cin>>cmd)
{
if(cin.good())
{
bool exitCode = cmdManager.HandleCmd((CourseCmd)cmd);
if(!exitCode)
return 0;
}
}
cout<<"-------------------------------------"<<endl;
cout<<"New Command: ";
cin .clear();
cin.ignore();
}