一个简单的管理系统

学生类和老师类可以在数据类里查看增添删除信息。

只实现了简单的很小一部分。

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();
}

猜你喜欢

转载自blog.csdn.net/ziggyPLAYguitar/article/details/82356058