c++ 对象数组指针实现学生信息管理系统

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值