zoukankan      html  css  js  c++  java
  • C++ 实现简单命令行学生管理系统

    C++ 实现简单命令行学生管理系统

    预览:

    编译环境是macOS。system(“clear”) 在windows下请换成 system(“cls”)

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <cstdlib>
    using namespace std;
    
    class Student {
    public:
        static int ENGSUM;
        static int CHISUM;
        static int MATSUM;
        explicit Student(string &Nname,string &NID,string &Neng,string &Nchi,string &Nmat)
                :name(Nname),ID(NID),eng_score(Neng),chi_score(Nchi),math_score(Nmat)
        { sumup();}
        const string& getID()   const{ return ID; }
        const string& getName() const{ return name; }
        const string& getEng()  const{ return eng_score; }
        const string& getChi()  const{ return chi_score; }
        const string& getMat()  const{ return math_score; }
        const int     getsum()  const{ return scores_sum; }
        void          changeEng(string &newEng){ eng_score = newEng; }
        void          changeChi(string &newChi){ chi_score = newChi; }
        void          changeMat(string &newMat){ math_score = newMat; }
        void          changeSum(int value){ scores_sum += value; }
        void          sumup(){
            int e = stoi(eng_score); int c = stoi(chi_score); int m = stoi(math_score); scores_sum = e+c+m;
        }
    private:
        string name;
        string ID;
        string eng_score;
        string chi_score;
        string math_score;
        int scores_sum;
    };
    int Student::ENGSUM = 0;
    int Student::CHISUM = 0;
    int Student::MATSUM = 0;
    
    Student* __lookup(vector<Student *>& stus,string &target);
    void     launcher();
    void     display(int currentSize);
    void     append(vector<Student *>& stus);
    Student* displaySingleInfo(vector<Student *>& stus,string target);
    void     change(vector<Student *>& stus);
    void     del(vector<Student *>& stus);
    void     search(vector<Student *>& stus);
    void     quitSys(vector<Student *>& stus);
    void     displayAllInfos(vector<Student *>& stus);
    void     error(char choice);
    bool     comp(const Student* a,const Student* b){
        return a->getsum()>b->getsum();
    }
    
    int main(){
        launcher();
        cout<< "再见" << endl;
        return 0;
    }
    
    
    void launcher(){
        vector<Student *> stus;
        string            _input;
        display(static_cast<int>(stus.size()));
        while(cin>>_input){
            char choice = _input.at(0);
            system("clear");
            switch(choice){
                case 'A':append(stus);
                    break;
                case 'B':change(stus);
                    break;
                case 'C':del(stus);
                    break;
                case 'D':search(stus);
                    getchar();
                    break;
                case 'E':displayAllInfos(stus);
                    getchar();
                    break;
                case 'Q':quitSys(stus);
                    return;
                default: error(choice);
                    getchar();
                    break;
            }
            system("clear");
            display(static_cast<int>(stus.size()));
        }
    }
    void display(int currentSize){
        cout << "
    
     --------------------------------------------------------------------------------" << endl;
        cout << "| ~~~                            输入Q退出系统                               ~~~" << endl;
        cout << " --------------------------------------------------------------------------------" << endl;
        cout << "|
    ";
        cout << "|                           * 正在运行学生管理系统 *" << endl;
        cout << "|
    ";
        cout << " --------------------------------------------------------------------------------" << endl;
        cout << "|" << endl;
        cout << "|              * 已记录" << currentSize << "个学生的档案 *       * 你还可以录入" << 100 - currentSize
             << "个学生 *" << endl;
        cout << "|
    ";
        cout << " --------------------------------------------------------------------------------" << endl;
        cout << "|
    ";
        cout << "|                   接下来,你想进行什么操作? (输入对应序号)" << endl;
        cout << "|
    ";
        cout << "|  (A).添加       (B).修改       (C).删除       (D).查找      (E).查看所有学生档案" << endl;
        cout << "|
    ";
        cout << " --------------------------------------------------------------------------------" << endl;
        cout<< "--> ";
    }
    void append(vector<Student *>& stus){
        cout << "
    
    好的,现在开始添加学生: 
    
    ";
        cout << "请输入新学生的姓名、学号、英语成绩、语文成绩、数学成绩
    
    "
             << "例如: 小明 1704010625 129 120 134
    ";
        cout << " ------------------------------------------------------" << endl;
        cout<< "--> ";
        string n,i,e,c,m;
        cin >> n >> i >> e >> c >> m;
        Student *newStu = new Student(n,i,e,c,m);
        stus.push_back(newStu);
        Student::ENGSUM += stoi(e); Student::CHISUM += stoi(c); Student::MATSUM += stoi(m);
    }
    void change(vector<Student *>& stus){
        cout << "
    
    好的,现在开始进行修改操作: 
    
    ";
        cout << "请输入需要修改的学生的学号: 
    "<<endl;
        cout<< "--> ";
        string target;
        cin >> target;
        Student *temp = displaySingleInfo(stus,target);
        bool conti = true;
        while(temp != nullptr && conti == true){
            cout << "
    你想改动" << temp->getName() << "的哪个成绩?" << endl;
            cout << "(A).English  (B).Chinese  (C).Math" << endl;
            cout << "--> ";
            string _input;
            cin >> _input;
            char ch = _input.at(0);
            string tmp;
            if(ch == 'A'){
                cout << "请输入新的英语成绩: ";
                cin >> tmp;
                int sub = stoi(tmp) - stoi(temp->getEng());
                temp->changeSum(sub);
                Student::ENGSUM += sub;
                temp->changeEng(tmp);
            }else if(ch == 'B'){
                cout << "请输入新的语文成绩: ";
                cin >> tmp;
                int sub = stoi(tmp) - stoi(temp->getChi());
                temp->changeSum(sub);
                Student::CHISUM += sub;
                temp->changeChi(tmp);
            }else{
                cout << "请输入新的数学成绩: ";
                cin >> tmp;
                int sub = stoi(tmp) - stoi(temp->getMat());
                temp->changeSum(sub);
                Student::MATSUM += sub;
                temp->changeMat(tmp);
            }
            cout << "
    
    ------------------------------------------------------------
    搞定.输入y继续修改,输入n返回菜单
    ";
            cout << "--> ";
            string t;
            cin >> t;
            if(t.at(0)=='y')
                 conti = true;
            else conti = false;
            cout << conti << endl;
            if(conti)
                temp = displaySingleInfo(stus,target);
        }
        if(temp == nullptr)
            cout << "未查找到,按enter返回!";
    }
    void del(vector<Student *>& stus){
        cout << "
    
    好的,现在开始进行删除操作: 
    
    ";
        cout << "请输入需要删除的学生的学号: 
    "<<endl;
        cout<< "--> ";
        string target;
        cin >> target;
        vector<Student *>::iterator it;
        bool findIt = false;
        for(it = stus.begin();it != stus.end();){
            if((*it)->getID() == target){
                findIt = true;
                Student::ENGSUM -= stoi((*it)->getEng());
                Student::CHISUM -= stoi((*it)->getChi());
                Student::MATSUM -= stoi((*it)->getMat());
                it = stus.erase(it);
                break;
            }else
                ++it;
        }
        if(!findIt)
            cout << "未查找到,请重试!" << endl;
    }
    void search(vector<Student *>& stus){
        cout << "
    
    好的,现在开始进行查找操作: 
    
    ";
        cout << "请输入需要查找的学生的学号: 
    "<<endl;
        cout<< "--> ";
        string target;
        cin >> target;
        displaySingleInfo(stus,target);
        cout<< "按下enter键以继续" <<endl;
        getchar();
    }
    void quitSys(vector<Student *>& stus){
        vector<Student *>::iterator it;
        for(it = stus.begin();it != stus.end();it ++){
            delete (*it);
        }
    }
    Student* displaySingleInfo(vector<Student *>& stus,string target)
    {
        Student *temp = __lookup(stus,target);
        if(temp != nullptr){
            cout << "
    学生姓名:" << temp->getName() << "  学号:" << temp->getID() << endl;
            cout<< "--scores:"<<endl;
            cout << "English: " << temp->getEng() << " Chinese: " << temp->getChi()
                 << " Math: " << temp->getMat() << endl << endl;
        }else{
            cout << "未查找到,请重试!" << endl << endl; //TODO
            return nullptr;
        }
        return temp;
    }
    void displayAllInfos(vector<Student *>& stus){
        int rank = 1;
        int len = static_cast<int>(stus.size());
        sort(stus.begin(),stus.end(),comp);
        cout<< "
    
    
    ------------------------------------------------------------
    ";
        cout<< "                                             scores
    ";
        cout<< "rank  "<<"Name          "<<"ID           "<<"English  "<<"Chinese  "<< "Math  "<<"Sum  
    ";
        for(auto &stu : stus){
            cout.setf(ios::left);
            cout.width(6);  cout<<rank++;
            cout.width(14); cout<< stu->getName();
            cout.width(13); cout<< stu->getID();
            cout.width(9);  cout<< stu->getEng();
            cout.width(9);  cout<< stu->getChi();
            cout.width(6);  cout<< stu->getMat();
            cout<< stu->getsum()<<endl;
        }
        cout<< "
    sum                              ";
        cout.width(9); cout<<Student::ENGSUM;
        cout.width(9); cout<<Student::CHISUM;
        cout.width(6); cout<<Student::MATSUM<<endl;
        cout<< "average                          ";
        cout.width(9); cout<<Student::ENGSUM/len;
        cout.width(9); cout<<Student::CHISUM/len;
        cout.width(6); cout<<Student::MATSUM/len;
        cout<< "
    ------------------------------------------------------------
    
    ";
        cout<< "按下enter键以继续" <<endl;
        getchar();
    }
    Student* __lookup(vector<Student *>& stus,string &target){
        vector<Student *>::iterator it;
        Student *ptr = nullptr;
        for(it = stus.begin();it != stus.end();it ++){
            if((*it)->getID() == target){
                ptr = (*it); break;
            }
        }
        return ptr;
    }
    void error(char choice){
        cout<< "
    ------------------------------------------------------------
    
    ";
        cout << "抱歉,无选项 "<<choice<<" ,请重试。" << endl;
        cout<< "
    按下enter键返回" <<endl;
        cout<< "
    ------------------------------------------------------------
    
    ";
        getchar();
    }
    
    
  • 相关阅读:
    机器学习笔记-基本概念
    Java I/O工作机制
    Web请求过程
    Oracle创建表空间和增加表空间
    Oracle大数据表的分表处理
    Oracle通过PLSQL进行数据表之间的同步
    Ngnix学习笔记
    MySql基础学习-数据操作
    Image Segmentation的定义
    机器学习算法的分类
  • 原文地址:https://www.cnblogs.com/1Kasshole/p/9372607.html
Copyright © 2011-2022 走看看