为了加深对自己所学到的C++相关知识的理解,熟悉C++程序设计语言编程以及调试的基本技能,锻炼自己利用C++语言程序设计进行简单软件设计的基本思路和方法,提高运用高级语言解决实际问题的能力。我用C++做了一个学生成绩信息管理系统,下面介绍它所实现的功能以及具体的代码。
主要实现功能:数据录入、数据删除、数据浏览、数据查询等。
本次界面直接在控制台窗口中显示(即黑框框显示),主要涉及到三个操作:
成绩管理系统中涉及到两个角色:管理员 和 老师
vs2013
所包含的头文件以及定义的宏
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<cstdlib>
#include<sstream>
#include<fstream>
using namespace std;
#define PASSWARD "1"
创建一个学生类用于存放学生的相关信息
//学生的信息
class student {
public:
student( string name = "张三", string lesson = "1", const string id = "111111111")
:_name(name)
, _lesson(lesson)
, _id(id)
{}
void stuscore(const string crouse, const vector<float>& score)
{
_stuscore[crouse] = score;
}
string _name;
string _id;//学号
string _lesson;//班级号(方便用于文件存储)
//map<课程名,成绩> _stuscore;
map<string, vector<float>> _stuscore;//存储学生的课程以及它对应的成绩
};
用创建老师类对学生信息进行管理
class Teacher {
public:
Teacher(const string name = "张三", const string passward = "111")
: _name(name)
, _passward(passward)
{}
void AddGrade();//增
void LookGrade();//浏览学生成绩
void FindStudentGrade();//查
void ModifyStudentGrade();//改
void DeleteGrede();//删
void Save();//保存至文件
string _name;//姓名
string _passward ;//密码
//map<学生ID,学生信息> _stuinfo;
map<string, student> _stuinfo;//学生信息
};
创建管理员类,对老师信息进行管理。
class Admini {
public:
Admini(string name = "张三")
:_name(name)
{
_passward = PASSWARD;
}
void AddTeacher();//添加老师
void DelTeacher();//删除老师
void LookTeacher();//浏览老师信息成绩
void FindTeacher();//查找老师信息
string _name;
string _passward;
Teacher _teach;//创建一个默认的老师对象方便对学生信息进行操作
//vector<pair<老师姓名,老师密码>> teachinfo;
map<string, string> _teachinfo;//老师信息
};
void Menu();//主界面
void AdmMenu();//管理员的操作界面
void TeachMenu();//老师的操作界面
void Admini::AddTeacher()
{
string name, passward;
cout << "请输入老师姓名:>" << endl;
cin >> name;
cout << "请输入老师密码:>" << endl;
cin >> passward;
_teachinfo[name] = passward;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
void Admini::DelTeacher()
{
cout << "请输入要删除的老师姓名:>" << endl;
string name;
cin >> name;
if (_teachinfo.find(name) == _teachinfo.end())
{
cout << "查无此人" << endl;
}
else
{
_teachinfo.erase(name);
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
void Admini::LookTeacher()
{
if (_teachinfo.size())
{
cout << "------老师信息------" << endl;
cout << "老师姓名 老师密码" << endl;
for (auto e : _teachinfo)
{
cout << " " << e.first << " " << e.second << endl;
cout << "--------------------" << endl;
}
}
else
{
cout << "暂无人员信息" << endl;
}
system("pause");
system("cls");
}
void Admini::FindTeacher()
{
cout << "请输入要查找的老师姓名" << endl;
string name;
cin >> name;
if (_teachinfo.find(name) != _teachinfo.end())
{
cout << "------老师信息------" << endl;
cout << "老师姓名 老师密码" << endl;
cout << " " << name << " " << _teachinfo[name] << endl;
cout << "--------------------" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//增
void Teacher::AddGrade()
{
//创建一个学生
string name;
cout << "请输入学生姓名:>" << endl;
cin >> name;
int year, grade,lesson, id;
cout << "请输入学生入学年份(4位数):>" << endl;
cin >> year;
while (year > 10000 || year < 1000)
{
cout << "年份输入错误,请重新输入:" << endl;
cin >> year;
break;
}
cout << "请输入学生年级(1位数):>" << endl;
cin >> grade;
while (grade > 10)
{
cout << "年级输入错误,请重新输入:" << endl;
cin >> grade;
break;
}
cout << "请输入学生班级(2位数):>" << endl;
cin >> lesson;
while (lesson > 100)
{
cout << "班级输入错误,请重新输入:" << endl;
cin >> lesson;
break;
}
cout << "请输入学生在班级的编号(2位):>" << endl;
cin >> id;
while (id > 100)
{
cout << "学生在班级的编号输入错误,请重新输入:" << endl;
cin >> id;
break;
}
string ID;
ID += to_string(year);
ID += to_string(grade);
if (lesson < 10)//如果不足2位就给它补0
{
ID += '0';
}
ID += to_string(lesson);
if (id < 10)
{
ID += '0';
}
ID += to_string(id);
student stu(name, to_string(lesson), ID);
//每个学生学习的课程有语文,英语,数学,物理,化学,生物。
vector<string> crouse{"语文", "英语", "数学", "物理", "化学", "生物"};
cout << "请输入学生成绩信息" << endl;
for (auto it : crouse)
{
cout << "请输入" << it << "的成绩"<<endl;
vector<float> score(3);
cout << "平时成绩:>";
cin >> score[0];
while (score[0] > 100)
{
cout << "成绩输入有误,请重新输入!" << endl;
cout << "平时成绩:>";
cin >> score[0];
}
cout << "期末成绩:>" ;
cin >> score[1];
while (score[1] > 100)
{
cout << "成绩输入有误,请重新输入!" << endl;
cout << "期末成绩:>";
cin >> score[1];
}
score[2] = score[0] * 3 / 10 + score[1] * 7 / 10;//总成绩
stu.stuscore(it, score);
}
_stuinfo[ID] = stu;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
void Teacher::LookGrade()
{
if (_stuinfo.size())
{
cout << "-------------------------成绩总表-------------------------" << endl;
cout << " " << "学号" << " " << "姓名" << " " << "课程名" << " " << "平时成绩" << " " << "期末成绩" << " " << "总评成绩" << endl;
//成绩总表结构约定为(学号,姓名,课程名,平时成绩,期末成绩,总评成绩)
string pre;
for (auto it : _stuinfo)
{
for (auto e : it.second._stuscore)
{
if (pre != it.first)
{
cout << it.first << " " << _stuinfo[it.first]._name << " ";
pre = it.first;
}
else
{
cout << " ";
}
cout << e.first << " ";
printf("%f %f %f\n", e.second[0], e.second[1], e.second[2]);
cout << "----------------------------------------------------------" << endl;
}
}
}
else
{
cout << "暂无人员信息" << endl;
}
system("pause");
system("cls");
}
//查
void Teacher::FindStudentGrade()
{
cout << "请输入要查询的学生ID" << endl;
string ID;
cin >> ID;
if (_stuinfo.find(ID) == _stuinfo.end())
{
cout << "查无此人" << endl;
}
else
{
cout << "查询成功" << endl;
cout << "-------------------------学生信息-------------------------" << endl;
cout << " " << "学号" << " " << "姓名" << " " << "课程名" << " " << "平时成绩" << " " << "期末成绩" << " " << "总评成绩" << endl;
//for (auto e : _stuinfo[ID]._stuscore)
//{
// cout << ID << " " << _stuinfo[ID]._name << " " << e.first << " " << e.second[0] << " " << e.second[1] << " " << e.second[2] << endl;
// cout << "----------------------------------------------------------" << endl;
//}
string pre;
for (auto e : _stuinfo[ID]._stuscore)
{
if (pre != ID)
{
cout << ID << " " << _stuinfo[ID]._name << " ";
pre = ID;
}
else
{
cout << " ";
}
cout << e.first << " ";
printf("%f %f %f\n", e.second[0], e.second[1], e.second[2]);
cout << "----------------------------------------------------------" << endl;
}
}
system("pause");
system("cls");
}
//删
void _DeleteGrede(map<string, student>& _stuinfo, string ID)
{
_stuinfo.erase(_stuinfo.find(ID));
}
void Teacher::DeleteGrede()
{
cout << "请输入要删除的学生ID" << endl;
string ID;
cin >> ID;
if (_stuinfo.find(ID) == _stuinfo.end())
{
cout << "查无此人" << endl;
}
else
{
_DeleteGrede(_stuinfo, ID);
cout << "删除成功" << endl;
}
system("pause");
system("cls");
}
//改
void Teacher::ModifyStudentGrade()
{
cout << "请输入要修改的学生ID" << endl;
string ID;
cin >> ID;
if (_stuinfo.find(ID) == _stuinfo.end())
{
cout << "查无此人" << endl;
}
else
{
cout << "该学生信息如下:";
cout << "---------------------------学生信息---------------------------" << endl;
cout << " " << "学号" << " " << "姓名" << " " << "课程名" << " " << "平时成绩" << " " << "期末成绩" << " " << "总评成绩" << endl;
string pre;
for (auto e : _stuinfo[ID]._stuscore)
{
if (pre != ID)
{
cout << ID << " " << _stuinfo[ID]._name << " ";
pre = ID;
}
else
{
cout << " ";
}
cout << e.first << " ";
printf("%f %f %f\n", e.second[0], e.second[1], e.second[2]);
cout << "--------------------------------------------------------------" << endl;
}
cout << "是否需要修改?(1.修改/0.不修改)";
int n = 0;
cin >> n;
if (n)
{
_DeleteGrede(_stuinfo, ID);//删除学生信息
cout << "请重新输入学生信息" << endl;
AddGrade();//新增学生信息
cout << "修改成功" << endl;
}
}
system("pause");
system("cls");
}
struct ConfigManager
{
public:
ConfigManager(const char* filename)
:_filename(filename)
{}
void WriteText(const map<string, student>& info, const string& crou,const string& less)
{
ofstream ofs(_filename);
ofs << "-------------------------学生信息-------------------------" << endl;
ofs << " " << "学号" << " " << "姓名" << " " << "课程名" << " " << "平时成绩" << " " << "期末成绩" << " " << "总评成绩" << endl;
ofs << "----------------------------------------------------------" << endl;
for (auto it : info)
{
if (it.second._lesson == less)
{
string pre;
for (auto e : it.second._stuscore)
{
if (e.first == crou)
{
if (pre != it.second._name)
{
ofs << it.second._id << " " << it.second._name << " ";
pre = it.second._name;
}
else
{
ofs << " ";
}
ofs << e.first << " " << e.second[0] << " " << e.second[1] << " " << e.second[2] << endl;
ofs << "----------------------------------------------------------" << endl;
}
}
}
}
}
private:
string _filename; // 配置文件
};
//保存至文件
void Teacher::Save()
{
//每个班级每门课程的成绩可以从学生的成绩总表提取出子表并存储成一个文本文件。该文本文件名由班级号
//和课程名拼音字符串构成。输入班级号和课程名字符串后自动生成文件名。如1班,语文,则文件名为:c1yuwen.txt。
string filename;
string less, crou;//班级号,课程名
cout << "请输入班级号:>";
cin >> less;
filename += 'c';
filename += less;
int flag = 1;
while (flag)
{
flag = 0;
cout << "请输入课程名:>";
cin >> crou;
if (crou == "语文")
{
filename += "yuwen";
}
else if (crou == "数学")
{
filename += "shuxue";
}
else if (crou == "英语")
{
filename += "yingyu";
}
else if (crou == "物理")
{
filename += "wuli";
}
else if (crou == "化学")
{
filename += "huaxue";
}
else if (crou == "生物")
{
filename += "shengwu";
}
else
{
cout << "输入课程名错误,请重新输入!" << endl;
flag = 1;
}
}
filename += ".txt";
ConfigManager file(filename.c_str());
file.WriteText(_stuinfo, crou,less);
cout << "保存成功" << endl;
system("pause");
system("cls");
}
void Menu() {
cout << "***********************************************" << endl;
cout << "********* 欢迎来到学生成绩管理系统! *********" << endl;
cout << "********* 请选择您的身份 *********" << endl;
cout << "********* 1.管理员 *********" << endl;
cout << "********* 2.老师 *********" << endl;
cout << "********* 0.退出系统 *********" << endl;
cout << "***********************************************" << endl;
}
void AdmMenu(){
cout << "*********************************" << endl;
cout << "********* 1、添加老师 *********" << endl;
cout << "********* 2、浏览老师 *********" << endl;
cout << "********* 3、查询老师 *********" << endl;
cout << "********* 4、删除老师 *********" << endl;
cout << "********* 0、退出系统 *********" << endl;
cout << "*********************************" << endl;
}
void TeachMenu() {
cout << "*************************************" << endl;
cout << "********* 1、学生成绩录入 *********" << endl;
cout << "********* 2、浏览学生成绩 *********" << endl;
cout << "********* 3、查询学生成绩 *********" << endl;
cout << "********* 4、删除学生成绩 *********" << endl;
cout << "********* 5、修改学生成绩 *********" << endl;
cout << "********* 6、保存学生数据 *********" << endl;
cout << "********* 0、退出系统 *********" << endl;
cout << "*************************************" << endl;
}
enum oper//操作的枚举
{
ADD = 1,
LOOK,
FIND,
DELETE,
MODIFY,
SAVE,
};
int main()
{
while (1)
{
Menu();
int n = 0;
cin >> n;
system("cls");
if (n == 1)//管理员
{
cout << "**********************管理员**********************" << endl;
cout << "管理员您好,请输入您的姓名:>" << endl;
string name,id;
cin >> name;
cout << "请输入您的密码:>" << endl;
cin >> id;
system("cls");
if (id != PASSWARD)
{
cout << "**********************管理员**********************" << endl;
cout << "密码有误,请重新登录!" << endl;
}
else
{
Admini adm(name);
int input = 1;
while (input)
{
cout << "**********************管理员**********************" << endl;
AdmMenu();
cout << "请选择您要进行的操作:>" << endl;
cin >> input;
system("cls");
cout << "**********************管理员**********************" << endl;
switch (input)
{
case ADD:
adm.AddTeacher();
break;
case LOOK:
adm.LookTeacher();
break;
case FIND:
adm.FindTeacher();
break;
case DELETE:
adm.DelTeacher();
break;
case 0:
break;
default:
cout << "非法输入!" << endl;
break;
}
}
}
}
else if (n == 2)//老师
{
cout << "**********************老师**********************" << endl;
cout << "老师您好,请输入您的姓名:>" << endl;
string name, id;
cin >> name;
cout << "请输入您的密码:>" << endl;
cin >> id;
system("cls");
if (id != PASSWARD)
{
cout << "**********************老师**********************" << endl;
cout << "密码有误,请重新登录!" << endl;
}
else
{
Teacher tch(name,id);
int input = 1;
while (input)
{
cout << "**********************老师**********************" << endl;
TeachMenu();
cout << "请选择您要进行的操作:>" << endl;
cin >> input;
system("cls");
cout << "**********************老师**********************" << endl;
switch (input)
{
case ADD:
tch.AddGrade();
break;
case LOOK:
tch.LookGrade();
break;
case FIND:
tch.FindStudentGrade();
break;
case DELETE:
tch.DeleteGrede();
break;
case MODIFY:
tch.ModifyStudentGrade();
break;
case SAVE:
tch.Save();
break;
case 0:
break;
default:
cout << "非法输入!" << endl;
break;
}
}
}
}
else if(n == 0)//退出系统
{
break;
}
else
{
cout << "非法输入!" << endl;
}
system("cls");
}
return 0;
}
以上就是今天要讲的内容,本文主要介绍了用C++实现的一个学生成绩信息管理系统,主要介绍它所实现功能以及具体实现的代码,大家可以根据代码自行此时。本文作者目前也是正在学习C++相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。 最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!