【简单项目实战】用C++实现学生成绩管理系统 | [面向对象](一)

简介: 用C++实现学生成绩管理系统

●功能介绍


用 C++设计一个程序,能提供下列功能:


1. 录入学生成绩信息。按照学号,姓名,语文,数学,英语的格式录入学生的成绩。


2.展示目前录入学生的成绩信息。以学号,姓名,语文,数学,英语的格式按列表展示。


3.查询成绩。根据学生的学号或姓名查询学生的成绩。


4.修改。通过姓名查询找到相应的学生记录并对其进行修改。


5.统计。计算学生的总分并按顺序显示输出;统计班级学生的每门课程的平均分和全班人总分的平

均分并显示;统计个人总得分小于班级总分的学生并显示为不及格学生名单。


6.删除。删除指定学生成绩信息。


7.清空。清空学生表所有成绩信息。


●案例


1.录入5个学生的信息:


       ①1001 zhangsan 80 90 70


       ②1002 lisi  60 65 75


       ③1003 wangwu 75 85 100


       ④1004 zhaoliu 50 60 40


       ⑤1005 sunqi 70 85 95


2.展示已输入5个的学生成绩信息


3.用学号去查询zhaoliu的各科成绩


4.实现统计,查看学生成绩信息和不及格学生


5.对wangwu的语文成绩进行单科修改,修改为80(若要进行整体修改,按操作提示执行即可,这里只修改其语文成绩)


6.用姓名去查询wangwu的各科成绩


7.因为lisi的成绩录入错误,所以删除他的所有信息


8.展示目前剩余学生的成绩信息


9.操作完成清空学生成绩信息


●代码展示

#include<iostream>
#include<string>
#include<vector>
using namespace std;
class student {   //父类
public:
  string id;
  string name;
  int chinese;
  int math;
  int english;
};
class information :public student {   //子类
public:
  vector<student>V;  //vector容器
  void showmenu();  //展示功能菜单
  void addinformation();  //录入学生信息
  void showperson();  //展示学生信息
  void searchperson();  //查找学生信息
  void alterperson();//修改学生信息
  void staticperson();  //统计学生信息
  void deleteperson(); //删除学生信息
  void emptyperson();  //清空学生信息
}; 
void information::showmenu()
{
  cout << "*************************" << endl;
  cout << "*****1:录入学生信息******" << endl;
  cout << "*****2:展示学生信息******" << endl;
  cout << "*****3:查找学生信息******" << endl;
  cout << "*****4:修改学生信息******" << endl;
  cout << "*****5:统计学生信息******" << endl;
  cout << "*****6:删除学生信息******" << endl;
  cout << "*****7:清空学生信息******" << endl;
  cout << "*************************" << endl;
}
//父类、子类的全局声明,以便于下面使用
student s;   
information i;
void information::addinformation()
{
  cout << "请输入学号:" << endl;
  cin >> s.id;
  cout << "请输入姓名:" << endl;
  cin >> s.name;
  cout << "请输入语文成绩:" << endl;
  cin >> s.chinese;
  cout << "请输入数学成绩:" << endl;
  cin >> s.math;
  cout << "请输入英语成绩:" << endl;
  cin >> s.english;
  i.V.push_back(s);
  cout << "<<添加成功>>" << endl;
  system("pause");
  system("cls");
}
void information::showperson()
{
  vector<student>::iterator p = i.V.begin();
  while(p!=i.V.end())
  {
  cout << "学号:" << p->id<< " "
    << "姓名:" << p->name << " "
    << "语文成绩:" << p->chinese << " "
    << "数学成绩:" << p->math << " "
    << "英语成绩:" << p->english << endl;
  p++;
  }
  system("pause");
  system("cls");
}
int isexist(string id)
{
  int count = 0;
  for (vector<student>::iterator p = i.V.begin(); p != i.V.end() ; p++)
  {
  count++;
  if (p->id == id)
  {
    return count;
  }
  }
  return -1;
}
int isexist_1(string name)
{
  int count = 0;
  for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
  {
  count++;
  if (p->name==name)
  {
    return count;
  }
  }
  return -1;
}
void information::searchperson()
{
  cout << "请输入您要查找的学生:" << endl;
  cout << "如果按照学号查找输入1" << endl;
  cout << "如果按照姓名查找输入2" << endl;
  int n;cin >> n;
  if (n==1)
  {
  string id;cin >> id;
  if (isexist(id)==-1)
  {
    cout << "此人不存在!" << endl;
  }
  else
  {
    cout << "此人存在!" << endl;
    int ret = isexist(id);
    int count = 0;
    for(vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
    {
    count++;
    if (ret == count)
    {
      cout << "学号 " << p->id << "\t";
      cout << "姓名 " << p->name << "\t";
      cout << "语文成绩 " << p->chinese<< "\t";
      cout << "数学成绩 " << p->math<< "\t";
      cout << "英语成绩 " << p->english<< "\t";
      break;
    }
    }
  }
  }
  else
  {
  string name;cin >> name;
  if (isexist_1(name) == -1)
  {
    cout << "此人不存在!" << endl;
  }
  else
  {
    cout << "此人存在!" << endl;
    int ret_1 = isexist_1(name);
    int count = 0;
    for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
    {
    count++;
    if (ret_1 == count)
    {
      cout << "学号 " << p->id << "\t";
      cout << "姓名 " << p->name << "\t";
      cout << "语文成绩 " << p->chinese << "\t";
      cout << "数学成绩 " << p->math << "\t";
      cout << "英语成绩 " << p->english << "\t";
      break;
    }
    }
  }
  }
  system("pause");
  system("cls");
}
void information::alterperson()
{
  cout << "请输入您要修改的联系人:" << endl;
  string name;cin >> name;
  if (isexist_1(name) == -1)
  {
  cout << "此人不存在!" << endl;
  }
  else
  {
  cout << "此人存在!" << endl;
  int ret_2 = isexist_1(name);
  cout << "单一修改-0" << "多数修改-1" << endl;
  int sign; cin >> sign;
  {
    if (sign == 0)
    {
    cout << "学号-1" << "姓名-2" << "语文成绩-3" << "数学成绩-4" << "英语成绩-5" << endl;
    int select; cin >> select;
    if (select == 1) {
      int count = 0;
      for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
      {
      count++;
      if (ret_2 == count) {
        cin >> p->id;
        break;
      }
      }
    }
    if (select == 2) {
      int count = 0;
      for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
      {
      count++;
      if (ret_2 == count) {
        cin >> p->name;
        break;
      }
      }
    }
    if (select == 3) {
      int count = 0;
      for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
      {
      count++;
      if (ret_2 == count) {
        cin >> p->chinese;
        break;
      }
      }
    }
    if (select == 4) {
      int count = 0;
      for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
      {
      count++;
      if (ret_2 == count) {
        cin >> p->math;
        break;
      }
      }
    }
    if (select == 5) {
      int count = 0;
      for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
      {
      count++;
      if (ret_2 == count) {
        cin >> p->english;
        break;
      }
      }
    }
    }
    if (sign == 1)
    {
    int count = 0;
    for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
    {
      count++;
      if (ret_2 == count)
      {
      cout << "请输入学号:" << endl;  cin >> p->id;
      cout << "请输入姓名:" << endl;  cin >> p->name;
      cout << "请输入语文成绩:" << endl; cin >> p->chinese;
      cout << "请输入数学成绩:" << endl; cin >> p->math;
      cout << "请输入英语成绩:" << endl; cin >> p->english;
      break;
      }
    }
    }
  }
  }
  cout << "信息修改成功!" << endl;
  system("pause");
  system("cls");
}
void information::staticperson()
{
  int allsum = 0;
  for (vector<student>::iterator p=i.V.begin();p!=i.V.end();p++)
  {
  int sum = 0;
  sum = p->chinese + p->math + p->english;
  cout << "姓名:" << p->name << "语文:" << p->chinese << " " << "数学:" << p->math << " " << "英语:" << p->english << " " << "总分:" << sum << endl;
  allsum += sum;
  }
  int sum1 = 0, sum2 = 0, sum3 = 0;
  for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
  {
  sum1 += p->chinese;
  sum2 += p->math;
  sum3 += p->english;
  }
  cout << "全班语文平均分:" << sum1 / i.V.size() << endl;
  cout << "全班数学平均分:" << sum2 / i.V.size() << endl;
  cout << "全班英语平均分:" << sum3 / i.V.size() << endl;
  cout << "全班总分的平均分:" << allsum / i.V.size() << endl;
  for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
  {
  int sum = 0;
  sum = p->chinese + p->math + p->english;
  if (sum < allsum /i.V.size() )
  {
    cout << "得分小于班级总分平均分的不及格学生:" << p->id << " " << p->name << endl;
  }
  }
  system("pause");
  system("cls");
}
void information::deleteperson()
{
  cout << "请输入您要删除的学生:" << endl;
  string name;
  cin >> name;
  if (isexist_1(name) == -1) {
  cout << "查无此人!" << endl;
  }
  else {
  cout << "找到此人!" << endl;
  int ret_3 = isexist_1(name);
  int count = 0;
    for (vector<student>::iterator p = i.V.begin(); p != i.V.end(); p++)
    {
    count++;
    if (ret_3 == count)
    {
      p=i.V.erase(p);
      break;
    }
    }
  cout << "已删除此学生信息!" << endl;
  }
  system("pause");
  system("cls");
}
void information::emptyperson()
{
  i.V.clear();
  cout << "成绩表已清空!" << endl;
  system("pause");
  system("cls");
}
void text()
{
  while(1)
  {
  i.showmenu();
  int n;
  cin >> n;
  switch (n)
  {
  case 1:
    i.addinformation();
    break;
  case 2:
    i.showperson();
    break;
  case 3:
    i.searchperson();
    break;
  case 4:
    i.alterperson();
    break;
  case 5:
    i.staticperson();
    break;
  case 6:
    i.deleteperson();
    break;
  case 7:
    i.emptyperson();
    break;
  }
  }
}
int main()
{
  text();
}


目录
相关文章
|
存储 监控 算法
员工屏幕监控系统之 C++ 图像差分算法
在现代企业管理中,员工屏幕监控系统至关重要。本文探讨了其中常用的图像差分算法,该算法通过比较相邻两帧图像的像素差异,检测屏幕内容变化,如应用程序切换等。文中提供了C++实现代码,并介绍了其在实时监控、异常行为检测和数据压缩等方面的应用,展示了其实现简单、效率高的特点。
431 15
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
287 19
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
488 13
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
412 5
|
存储 C++
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
346 5
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
322 5
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
296 4
|
设计模式 IDE 编译器
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
本项目旨在通过C++编程实现一个教学游戏,帮助小朋友认识动物。程序设计了一个动物园场景,包含Dog、Bird和Frog三种动物。每个动物都有move和shout行为,用于展示其特征。游戏随机挑选10个动物,前5个供学习,后5个用于测试。使用虚函数和多态实现不同动物的行为,确保代码灵活扩展。此外,通过typeid获取对象类型,并利用strstr辅助判断类型。相关头文件如&lt;string&gt;、&lt;cstdlib&gt;等确保程序正常运行。最终,根据小朋友的回答计算得分,提供互动学习体验。 - **任务描述**:编写教学游戏,随机挑选10个动物进行展示与测试。 - **类设计**:基类
263 3
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
233 12
|
存储 编译器 C语言
【C++】初识面向对象:类与对象详解
【C++】初识面向对象:类与对象详解
216 0