顺序表实现学生成绩管理系统

/*
  Name: 顺序表实现学生成绩管理系统 
  Description: 完成对学生成绩的建立,查找,插入,修改,删除等功能 
*/

//======================================顺序表-学生成绩管理系统=================================== 
#include<string>
#include<iostream>
using namespace std;

//======================================Student类的成员变量和成员函数=============================
class Student
{
      public:
             void Creat(Student stu[]);
             void Insert(Student stu[]);
             void Delete(Student stu[]);
             void Lookup(Student stu[]);
             void Update(Student stu[]);
             void Stat(Student stu[]);
             int Length(Student stu[]);
             void Print(Student stu[]); 
             
             Student();
             
      private:
              string name;//姓名
              long num;//学号
              float score;//成绩
              
};

//=====================================Student类的构造函数.舒适化元素数据===========================
Student::Student()
{
                  name = '?';
                  num = 0;
                  score = 0;
}
//=====================================创建学生成绩信息的线性表(数组)================================
void Student::Creat(Student stu[])
{
     cout << "请输入学生人数:";
     int n;
     cin >> n;
     cout << "姓名" << '\t' << "学号" << '\t' << "成绩" << endl;
     for(int i = 1;i <= n;i++)
     {
             string newname;
             long newnum;
             float newscore;
             
             cin >> newname;
             stu[i].name = newname;
             cin >> newnum;
             stu[i].num = newnum;
             cin >> newscore;
             stu[i].score = newscore;
     }
} 
//======================================输出线性表中所有的学生信息====================================
void Student::Print(Student stu[])
{
     cout<< "姓名" << '\t' << "学号" << '\t' << "成绩" << endl;
     int i = 1;
     while(stu[i].num)
     {
                      cout << stu[i].name << '\t' <<stu[i].num << '\t' <<stu[i].score << endl;
                      i++;
     }
     cout << '\n';
}
//======================================在线性表的某个位置上插入学生信息===============================
void Student::Insert(Student stu[])
{
     if(Student::Length(stu) == 100)
     {
                             cout << "存储空间已满,不能进行插入操作!" << '\n';
     }
     else
     {
         cout << "请输入要插入的位置:";
         int m;
         cin >> m;
         int n = Student::Length(stu);
         if(m > n + 1)
         {
              cout << "插入位置不正确,请重新输入!" << '\n';
              Student::Insert(stu);
         }
         else
         {
             for(int i = n;i >= m;i --)
             {
                     stu[i + 1].name = stu[i].name;
                     stu[i + 1].num = stu[i].num;
                     stu[i + 1].score = stu[i].score;
             }
             cout << "请依次输入姓名,学号,成绩" << '\n';
             
             string newname;
             long newnum;
             float newscore;
             
             cin >> newname;
             stu[m].name = newname;
             cin >> newnum;
             stu[m].num = newnum;
             cin >> newscore;
             stu[m].score = newscore;
         }        
     }
}
//======================================根据学号删除线性表中对应的学生信息=============================== 
void Student::Delete(Student stu[])
{
     cout << "请输入你要删除的学号:";
     long num;
     cin >> num;
     int i = 1;
     if(!stu[i].num)
     {
                    cout << "你要删除的学号不存在,请重新输入!"<< '\n';
                    Student::Delete(stu);//重新进行删除操作 
     }
     while(stu[i].num)
     {
                      if(stu[i].num == num)
                      {
                                    int n = Student::Length(stu);
                                    for(int j = i;j < n;j++)//数组中数据依次前移 
                                    {
                                            stu[j].name = stu[j + 1].name;
                                            stu[j].num = stu[i + 1].num;
                                            stu[i].score = stu[i + 1].score;
                                    }
                                    stu[n].name = '?';
                                    stu[n].num = 0;
                                    stu[n].score = 0;
                                    break;
                      }
                      i++;
     }
}
//======================================根据学号查询线性表中某个学生成绩信息=============================
void Student::Lookup(Student stu[])
{
     cout << "请输入你要查询的学号:";
     long num;
     cin >> num;
     int i = 1;
     while(stu[i].num)
     {
                      if(stu[i].num == num)
                      {
                                    cout << "姓名" << '\t' << "学号" << '\t' << "成绩" << '\n';
                                    cout << stu[i].name << '\t' <<stu[i].num << '\t' <<stu[i].score <<'\n';
                                    break;
                      }
                      i++;
     }
     if(!stu[i].num)
     {
                    cout << "你要查询的学号不存在,请重新输入!" << '\n';
                    Student::Lookup(stu);
     }
     cout << '\n';
}
//======================================修改线性表中某个位置的学生信息====================================
void Student::Update(Student stu[])
{
     cout << "请输入你要修改的位置:";
     int m;
     cin >> m;
     if(m > Student::Length(stu))
     {
          cout << "你要修改的位置不存在,请重新输入!" << '\n';
          Student::Update(stu);
     }
     else
     {
         cout << "请依次输入更改后的姓名,学号,成绩" << '\n';
         string newname;
         long newnum;
         float newscore;
         cin >> newname;
         stu[m].name = newname;
         cin >> newnum;
         stu[m].num = newnum;
         cin >> newscore;
         stu[m].score = newscore;
     }
}
//=======================================查询线性表中有效数据的长度========================================
int Student::Length(Student stu[])
{
    int i = 1;
    while(stu[i].num)
    {
                     i++;
    }
    return (i - 1);
}
//=======================================统计各成绩段的学生信息=============================================
void Student::Stat(Student stu[])
{
     cout << "不及格的学生是:" << '\n';
     cout << "姓名" << '\t' << "学号" << '\t' << "成绩" <<'\n';
     int i = 1;
     while(stu[i].num)
     {
                      if(stu[i].score < 60)
                      {
                                      cout << stu[i].name << '\t' <<stu[i].num << '\t' << stu[i].score << '\n';
                      }
                      i++;
     }
     cout << '\n';
     
     cout << "成绩为\"中\"的学生是:" << '\n';
     cout << "姓名" << '\t' << "学号" << '\t' << "成绩" <<'\n';
     i = 1;
     while(stu[i].num)
     {
		 if(stu[i].score >= 60 && stu[i].score < 75)
                      {
                                      cout << stu[i].name << '\t' <<stu[i].num << '\t' << stu[i].score << '\n';
                      }
                      i++;
     }
     cout << '\n';

     cout << "成绩为\"良\"的学生是:" << '\n';
     cout << "姓名" << '\t' << "学号" << '\t' << "成绩" <<'\n';
     i = 1;
     while(stu[i].num)
     {
		 if(stu[i].score >= 75 && stu[i].score < 90)
                      {
                                      cout << stu[i].name << '\t' <<stu[i].num << '\t' << stu[i].score << '\n';
                      }
                      i++;
     }
     cout << '\n';

     cout << "成绩为\"优\"的学生是:" << '\n';
     cout << "姓名" << '\t' << "学号" << '\t' << "成绩" <<'\n';
     i = 1;
     while(stu[i].num)
     {
                      if(stu[i].score >= 90)
                      {
                                      cout << stu[i].name << '\t' <<stu[i].num << '\t' << stu[i].score << '\n';
                      }
                      i++;
     }
     cout << '\n';
}
//====================================================界面====================================================== 
void Menu()
{
     cout << "=============================请选择相应的功能============================" <<endl;
     cout << '\n';
     cout << "-----------------------------1.插入--------------------------------------" <<endl; 
     cout << "-----------------------------2.删除--------------------------------------" <<endl; 
     cout << "-----------------------------3.查找--------------------------------------" <<endl; 
     cout << "-----------------------------4.修改--------------------------------------" <<endl; 
     cout << "-----------------------------5.统计--------------------------------------" <<endl; 
     cout << "-----------------------------0.取消操作----------------------------------" <<endl; 
     cout << '\n';
     cout << "=========================================================================" <<endl;
}
//====================================调用类Student的成员函数以实现相应功能====================================
int main()
{
     cout << "首先建立学生管理系统!" <<endl; 
     Student stu[101];
     stu[0].Creat(stu);
     stu[0].Print(stu);
     
     int j = 100;
     Menu();
     while(j)
     {
             cout << "请选择您要进行的操作:" <<endl;
             cin >> j;
             switch(j)
             {
                      case 1:
                           {
                                            stu[0].Insert(stu);
                                            stu[0].Print(stu);
                                            break;
                           }
                      case 2:
                           {
                                            stu[0].Delete(stu);
                                            stu[0].Print(stu);
                                            break;
                           }
                      case 3:
                           {
                                            stu[0].Lookup(stu);
                                            break;
                           }
                      case 4:
                           {
                                            stu[0].Update(stu);
                                            stu[0].Print(stu);
                                            break;
                           }
                      case 5:
                           {
                                            stu[0].Stat(stu);
                                            break;
                           }
                      default:
                              break;
             }
     }
     cout << "线性表中共有:" << stu[0].Length(stu) << " 个学生";
     system("pause");
     return 0;
}


转载于:https://my.oschina.net/clear/blog/53820

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值