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 << "\n\n --------------------------------------------------------------------------------" << endl;
cout << "| ~~~ 输入Q退出系统 ~~~" << endl;
cout << " --------------------------------------------------------------------------------" << endl;
cout << "|\n";
cout << "| * 正在运行学生管理系统 *" << endl;
cout << "|\n";
cout << " --------------------------------------------------------------------------------" << endl;
cout << "|" << endl;
cout << "| * 已记录" << currentSize << "个学生的档案 * * 你还可以录入" << 100 - currentSize
<< "个学生 *" << endl;
cout << "|\n";
cout << " --------------------------------------------------------------------------------" << endl;
cout << "|\n";
cout << "| 接下来,你想进行什么操作? (输入对应序号)" << endl;
cout << "|\n";
cout << "| (A).添加 (B).修改 (C).删除 (D).查找 (E).查看所有学生档案" << endl;
cout << "|\n";
cout << " --------------------------------------------------------------------------------" << endl;
cout<< "--> ";
}
void append(vector<Student *>& stus){
cout << "\n\n好的,现在开始添加学生: \n\n";
cout << "请输入新学生的姓名、学号、英语成绩、语文成绩、数学成绩\n\n"
<< "例如: 小明 1704010625 129 120 134\n";
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 << "\n\n好的,现在开始进行修改操作: \n\n";
cout << "请输入需要修改的学生的学号: \n"<<endl;
cout<< "--> ";
string target;
cin >> target;
Student *temp = displaySingleInfo(stus,target);
bool conti = true;
while(temp != nullptr && conti == true){
cout << "\n你想改动" << 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 << "\n\n------------------------------------------------------------\n搞定.输入y继续修改,输入n返回菜单\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 << "\n\n好的,现在开始进行删除操作: \n\n";
cout << "请输入需要删除的学生的学号: \n"<<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 << "\n\n好的,现在开始进行查找操作: \n\n";
cout << "请输入需要查找的学生的学号: \n"<<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 << "\n学生姓名:" << 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<< "\n\n\n------------------------------------------------------------\n";
cout<< " scores\n";
cout<< "rank "<<"Name "<<"ID "<<"English "<<"Chinese "<< "Math "<<"Sum \n";
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<< "\nsum ";
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<< "\n------------------------------------------------------------\n\n";
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<< "\n------------------------------------------------------------\n\n";
cout << "抱歉,无选项 "<<choice<<" ,请重试。" << endl;
cout<< "\n按下enter键返回" <<endl;
cout<< "\n------------------------------------------------------------\n\n";
getchar();
}

C++ 实现简单命令行学生管理系统的更多相关文章

  1. GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载

    GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html 内容提要: ...

  2. git base 简单命令行

    记录几个简单的命令 1:克隆-把线上的文件复制到本地 git clone 线上地址 2:检查状态 git status 3:放入待仓储 git add.文件名 git add * (全部文件,简单粗暴 ...

  3. 《鸟哥的Linux私房菜》笔记——04. 简单命令行

    键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...

  4. GitHub简单命令行# 使用命令行传代码到GitHub

    第一次提交代码到Github 第一步: 建立本地仓库cd到你的本地项目根目录下,执行git命令 cd到本地项目 git init 第二步: 将本地项目工作区的所有文件添加到暂存区 git add . ...

  5. Shiro 系列: 简单命令行程序示例

    在本示例中, 使用 INI 文件来定义用户和角色. 首先学习一下 INI 文件的规范. =======================Shiro INI 的基本规范================== ...

  6. Kubernetes集群部署及简单命令行操作

    三个阶段部署docker:https://www.cnblogs.com/rdchenxi/p/10381631.html 环境准备 [root@master ~]# hostnamectl set- ...

  7. 【IOS开发笔记02】学生管理系统

    端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...

  8. 使用 getopt() 进行命令行处理

    引言 在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具.这些工具非常小,通常可很好地完成一项工作.这些工具通过较长的命令管道链接在一起,前面的程序将其输出传递给 ...

  9. Linux 编程学习笔记----命令行参数处理

    转载请注明出处.http://blog.csdn.net/suool/article/details/38089001 问题引入----命令行參数及解析 在使用linux时,与windows最大的不同 ...

随机推荐

  1. 黑客游戏榜中榜 第一期writeup

    [榜中榜 第一期传送门] 注:作者对游戏过程中右键点击进行了限制,下文所提到的"查看源代码",均通过在url头前加上"view-source:"来实现 第一题 ...

  2. 【实战代码】PHP实现读取一个1G的文件大小

    本文地址:http://www.cnblogs.com/aiweixiao/p/7535351.html 欢迎关注我的微信公众号哈 “ 程序员的文娱情怀” http://t.cn/RotyZtu [背 ...

  3. 【Python 24】52周存钱挑战4.0(函数)

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  4. linux安装成功后怎么调出终端

    一.Ubuntu 桌面如下,点击搜索 二.输入terminal 终端 三.锁定到菜单栏 四.接下来就可以练习linux下的常用命令,如:ls  mkdir  cat    touch 等等 这些命令后 ...

  5. 查看jar包的jdk版本

  6. Linux(CentOS)下设置nginx开机自动启动(2个办法)

    首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令: vim /etc/init.d/nginx 在脚本中添加如下命令: #!/bin/sh # # nginx - ...

  7. Nodejs OracleDB详细解读

    //导入oracledb模块 //基于版本@3.0.1 安装指令npm install oracledb //node访问oracleDB需要搭建访问环境,否则无法正常访问 //创建Oracle对象 ...

  8. Cesium如何通过addImageryProvider方法加载SkylineGlobe Server发布的WMS服务

    某某某单位用SkylineGlobeServer7版本发布了好些服务,然后让我们在Cesium里都加载进来展示. 其实只要符合OGC标准的,加进来还是很容易的. 示例代码如下: function te ...

  9. 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。

    哎,不得不说最近见得键盘侠客太多了,做程序员没两天总是喜欢上嘴唇触天,下嘴唇碰地的吹. 自己分明都没用过几门语言,就对各门语言评头论足说三道四,这么语言多好那门语言有多烂. 可能是随着时间也变得没那么 ...

  10. ondaHTTPError: HTTP 000 CONNECTION FAILED for url

    可能是网络问题,换网络. 可能是获取库的IP无法链接到,换库的IP,如添加清华镜像IP等.