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 << "\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++ 实现简单命令行学生管理系统的更多相关文章
- GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载
GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html 内容提要: ...
- git base 简单命令行
记录几个简单的命令 1:克隆-把线上的文件复制到本地 git clone 线上地址 2:检查状态 git status 3:放入待仓储 git add.文件名 git add * (全部文件,简单粗暴 ...
- 《鸟哥的Linux私房菜》笔记——04. 简单命令行
键入命令 [dmtsai@study ~]$ command [-options] parameter1 parameter2 ... 指令 選項 參數(1) 參數(2) 注意:有时也可以使用 + 放 ...
- GitHub简单命令行# 使用命令行传代码到GitHub
第一次提交代码到Github 第一步: 建立本地仓库cd到你的本地项目根目录下,执行git命令 cd到本地项目 git init 第二步: 将本地项目工作区的所有文件添加到暂存区 git add . ...
- Shiro 系列: 简单命令行程序示例
在本示例中, 使用 INI 文件来定义用户和角色. 首先学习一下 INI 文件的规范. =======================Shiro INI 的基本规范================== ...
- Kubernetes集群部署及简单命令行操作
三个阶段部署docker:https://www.cnblogs.com/rdchenxi/p/10381631.html 环境准备 [root@master ~]# hostnamectl set- ...
- 【IOS开发笔记02】学生管理系统
端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一 ...
- 使用 getopt() 进行命令行处理
引言 在早期的 UNIX® 中,其命令行环境(当时的唯一用户界面)包含着数十种小的文本处理工具.这些工具非常小,通常可很好地完成一项工作.这些工具通过较长的命令管道链接在一起,前面的程序将其输出传递给 ...
- Linux 编程学习笔记----命令行参数处理
转载请注明出处.http://blog.csdn.net/suool/article/details/38089001 问题引入----命令行參数及解析 在使用linux时,与windows最大的不同 ...
随机推荐
- Kafka简介、基本原理、执行流程与使用场景
一.简介 Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发,Linkedin于201 ...
- Linux内存管理 (13)回收页面
专题:Linux内存管理专题 关键词:LRU.活跃/不活跃-文件缓存/匿名页面.Refault Distance. 页面回收.或者回收页面也即page reclaim,依赖于LRU链表对页面进行分类: ...
- 错误: after element list
SyntaxError: missing ] after element list note: [ opened at line 18, column 16 可能出现重复引用
- HTML页面全屏/退出全屏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- jeecg字典表-系统字典
新建字典 录入字典信息 添加类型 录入完类型后效果 新建列表用户 保存 同步数据库 同步完之后,对应的数据库中会创建对应的表. 测试表功能 保存之后,数据库保存对应的字段 生成代码 刷新工程之后,生成 ...
- python的设计原则及设计模式
python的设计原则及设计模式 七大设计原则 单一职责原则 [SINGLE RESPONSIBILITY PRINCIPLE] 一个类负责一项职责. 里氏替换原则 [LISKOV SUBSTITUT ...
- 【学习总结】GirlsInAI ML-diary day-14-function函数
[学习总结]GirlsInAI ML-diary 总 原博github链接-day14 认识函数function 函数相当于一个固定的公式,一个映射.有输入,有输出. 1-python内置函数 max ...
- 【学习总结】GirlsInAI ML-diary day-11-while循环
[学习总结]GirlsInAI ML-diary 总 原博github链接-day11 认识while循环执行 对于while/break/continue的认识 新值替换变量 一般while语句 无 ...
- CodeForces 219D Choosing Capit
题目链接:http://codeforces.com/contest/219/problem/D 题目大意: 给定一个n个节点的数和连接n个节点的n - 1条有向边,现在要选定一个节点作为起始节点,从 ...
- Maven 建立的项目resource对应的实际位置
如图,springmvc-servlet.xml在项目中实际位置为: WEB-INF/classes/config/springmvc/springmvc-servlet.xml 在配置项 ...