c++ 对象数组指针实现学生信息管理系统
目标:
使用对象数组,完成多个学生信息的增加、删除、查询和修改等功能。
重点:
通过建立对象数组,用数组的地址来作为函数参数,来达到对数据成员进行操作的效果。
感想:
其实这里的类更像结构体,因为我没有在类中建立private类型的数据成员,但搞了几天也大多实现了功能,有小小的成就感。
这里感谢一下博主“编程一只蝶”的参考,文末有他的文章链接。
效果图如下:
#include<iostream>
#include<string>
using namespace std;
#define max 5
static int num = 4;//学生数量
class Student//创建学生类
{
public:
Student()
{
SID = 0;
score = 0;
Name = "\0";
Sex = "\0";
};
Student(int a, string name, string sex, float Score)
{
SID = a;
Name = name;
Sex = sex;
score = Score;
}
void set();//修改学生信息
void show();//输出学生信息
//将数据成员也归为public,便于访问
int SID;
string Name;
string Sex;
float score;
};
void Student::set()//设置数据成员的函数
{
cout << "输入SID:";
cin >> SID;
cout << "输入姓名:";
cin >> Name;
cout << "输入性别:";
cin >> Sex;
cout << "输入成绩:";
cin >> score;
}
void Student::show()//展示数据成员的函数
{
;
cout << SID << "," << Name << "," << Sex<<","<<score<<endl;
}
int main()
{
void order_by_SID(Student s[]);
void view();
void order_by_score(Student s[]);
void view1();
void Research(Student s[], int m);
void add(Student s[]);
void Delete(Student s[], int m);
void insert(Student s[], int m);
view();
void show_all(Student s[]);//以上为函数声明
Student s[max] = { {20200001,"小张","男",70},{20200002,"小红","女",80},{20200003,"李华","男",99},{20201786,"唐葆程","男",100} };//基础成员
while (true)
{
int n=-1;
int m=-1;
int h = -1;
cout << "------------------------------------------" << endl;
cout << "请输入序号进行操作:" ;
cin >> n;
switch (n) {
case 1:
cout << "------------------------------------------" << endl;
cout << "您选择了[1.添加学生信息],下面请按照提示完成操作!" << endl;
add(s);
view1();
break;
case 2:
cout << "------------------------------------------" << endl;
cout << "您选择了[2.删除学生信息],下面请按照提示完成操作!" << endl;
cout << "要删除学生的SID为:";
cin >> m;
Delete(s, m);
view1();
break;
case 3:
cout << "------------------------------------------" << endl;
cout << "您选择了[3.查看已经录入的学生成绩]" << endl;
show_all(s);
cout << "查看完毕" << endl;
view1();
break;
case 4:
cout << "------------------------------------------" << endl;
cout << "您选择了[4.查询学生信息],下面请按照提示完成操作!" << endl;
cout << "输入要查询的学生的SID:" << endl;
cin >> m;
Research(s, m);
view1();
break;
case 5:
cout << "------------------------------------------" << endl;
cout << "您选择了[5.学生信息排序],下面请按照提示完成操作!" << endl;
cout << "\t\t请选择排序依据(降序排序):\n\t\t1.成绩\n\t\t2.学号\n\t\t3.返回上级\n输入序号进行操作:";
cin >> h;
switch (h)
{
case 1:
order_by_score(s);
break;
case 2:
order_by_SID(s);
break;
case 3:
break;
default:
cout << "------------------------------------------" << endl;
cout << "输入不合法,请重新输入:";
}
; break;
case 6:
cout << "------------------------------------------" << endl;
cout << "您选择了[6.插入学生信息],下面请按照提示完成操作!" << endl;
cout << "输入要插入在几号之后:";
cin >> m;
insert(s, m);
break;
case 0:
cout << "------------------------------------------" << endl;
cout << "您选择了[0.退出],您已退出本产品,谢谢使用!" << endl;
exit(0);
break;
default:
cout << "------------------------------------------" << endl;
cout << "输入不合法,请重新输入:";
}
}
show_all(s);
s[num+1].set();
s[num+1].show();
return 0;
}
void show_all(Student s[])//通过地址来传输对象数组
{
cout << "当前全部学生信息如下:" << endl;
int i = 0;
for (;i <num;i++)
{
cout << "序号:" << i+1<<",";
s[i].show();
}
}//展示全部学生信息
void view()//视图层
{
cout << "\t\t**********************************************************" << endl;
cout << "\t\t**\t\t欢迎进入学生信息管理系统" << "\t\t" << "**" << endl;
cout << "\t\t**\t\t1.添加学生信息" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**\t\t2.删除学生成绩" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**\t\t3.已经录入的学生成绩" << "\t\t\t" << "**" << endl;
cout << "\t\t**\t\t4.查询学生信息" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**\t\t5.学生信息排序" << "\t\t\t\t**" << endl;
cout << "\t\t**\t\t6.插入学生信息" << "\t\t\t\t**" << endl;
cout << "\t\t**\t\t0.退出系统" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**********************************************************" << endl << endl;
}//操作界面
void add(Student s[])//增加学生信息的函数
{
if (num < max)
{
int a = num;
s[a].set();
num++;
}
else cout << "超过最大学生人数!!!" << endl;
}
void Delete(Student s[], int m)//删除学生信息的函数
{
int i=0;
int a = num;
for (; i <num; i++)
{
while (s[i].SID == m)
{
int o = i;
cout << "\t\t该学生的信息为:" << endl<<"\t\t";
s[i].show();
for (; o < num; o++)
{
s[o] = s[o + 1];
}
num--;
cout << "\t\t删除成功" <<endl ;
break;
}
}
if (a== num)
{
cout << "未找到该学生" << endl;
}
}
void Research(Student s[], int m)//通过学号搜索学生信息的函数
{
int i = 0;
for (; i < num; i++)
{
while (s[i].SID == m)
{
cout << "\t\t该学生的信息为:" << endl << "\t\t";
s[i].show();
break;
}
}
}
void view1()//操作界面2
{
cout << "\t\t**********************************************************" << endl;
cout << "\t\t**\t\t欢迎继续使用学生信息管理系统" << "\t\t" << "**" << endl;
cout << "\t\t**\t\t1.添加学生信息" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**\t\t2.删除学生成绩" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**\t\t3.已经录入的学生成绩" << "\t\t\t" << "**" << endl;
cout << "\t\t**\t\t4.查询学生信息" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**\t\t5.学生信息排序" << "\t\t\t\t**" << endl;
cout << "\t\t**\t\t6.插入学生信息" << "\t\t\t\t**" << endl;
cout << "\t\t**\t\t0.退出系统" << "\t\t\t\t" << "**" << endl;
cout << "\t\t**********************************************************" << endl << endl;
}
void order_by_score(Student s[])//根据成绩用冒泡法对学生进行排序
{
int t = 0,a=num,k=0;
int i = 0, j;
Student T;
for (k = 1; k < num ; k++)
{
for (i = 0; i < a; i++)
{
j = i + 1;
if (s[i].score <= s[j].score)
{
T = s[i];
s[i] = s[j];
s[j] = T;
}
}
a--;
}
cout << "排序成功输入 3 来查看结果" << endl;
}
void order_by_SID(Student s[])//同为冒泡法
{
int t = 0, a = num, k = 0;
int i = 0, j;
Student T;
for (k = 1; k < num; k++)
{
for (i = 0; i < a; i++)
{
j = i + 1;
if (s[i].SID <= s[j].SID)
{
T = s[i];
s[i] = s[j];
s[j] = T;
}
}
a--;
}
cout << "排序成功输入 3 来查看结果" << endl;
}
void insert(Student s[], int m)//插入的学生函数
{
Student T;
if (num == max)
cout << "超过最大学生人数!!\n";
else
{
num++;
for (int i=num;i>m;i--)
{
s[i] = s[i-1 ];
}
s[m].set();
cout << "插入成功!\n\t\t输入 3 来查看结果\n";
}
}
//函数功能由本人实现,结构和界面有借鉴csdn博主:编程一只蝶
//原文链接:https ://blog.csdn.net/weixin_43691058/article/details/103662562