⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学生信息管理系统.cpp

📁 简易学生信息管理系统 程序实现思路: 先创建一个学生元素类
💻 CPP
字号:
/*******************************************************************
 课程名称:C++课程设计[2008-01-15] 

 课程设计题目:学生信息管理系统

 姓名:骆炎堂 

 专业:信息安全(专升本)

 年级:06级

 学号:260680551


 *******************************************************************/
#include <iostream> 
#include <string> 
#define MaxHEAP 100 
using namespace std; 
//学生元素类,用于存放学生的各种数据
class Elem
{ 
private: 
	string objectID; //学号
	int priority; //优先级,优先级越高排越前面
	string proName; //姓名
public: 
	Elem(string objectID="0",int priority=0);//构造函数,初始化变量
	string getID();//获取学号
	int getPri();//获取优先级
	string getProN();//获取姓名
	void setID(string id);//设置学号
	void setPri(int pri);//设置优先级
	void setProN(string s);//设置姓名
};

Elem::Elem(string objectID,int priority)
{ 
	setID(objectID); 
	setPri(priority); 
	setProN(proName); 
} 

string Elem::getID()
{ 
	return objectID; 
} 

int Elem::getPri()
{ 
	return priority; 
} 

string Elem::getProN()
{ 
	return proName; 
} 

void Elem::setID(string id)
{ 
	objectID=id; 
} 

void Elem::setPri(int pri)
{ 
	priority=pri; 
} 

void Elem::setProN(string s) 
{ 
	proName=s; 
} 
//class Elem结束

//Heap类,把数据以堆的形式存储,可便进行堆排序
class Heap 
{ 
private: 
	Elem items[MaxHEAP]; //学生元素类对象数组
	int size;//数组大小
public : 
	Heap();//构造函数,初始化变量
	void setSize(int sz);//设置对象数组大小
	int heapIsEmpty();//判断堆是否为空
	void heapInsert(Elem newItem);//向堆插入数据
	Elem heapDelete(string ID);//从堆删除数据
	void heapInit();//清空堆中数据
	void heapView();//查看堆中数据
	void search(string ID);//在堆中查找数据
	void sift(int i,int m);//堆排序中要用到的一个子函数
	void heapRebuild(int root);//跟据优先级大小进行堆排序
};

Heap::Heap()
{ 
	Elem items[MaxHEAP]; 
	setSize(0);
} 

void Heap::setSize(int sz) 
{
	size=sz;
} 

int Heap::heapIsEmpty()
{ 
	return size==0; 
} 

void Heap::heapInsert(Elem newItem) 
{
	if(size<MaxHEAP) 	items[size++]=newItem; 
	cout<<"\n学生数据添加成功!";
} 

Elem Heap::heapDelete(string ID) 
{ 
	int k=0;//k用于标识删除操作是否成功,1:成功,0:失败
	Elem rootItem; //用于存放被删除项
	if(!heapIsEmpty()) 
	{ 
		for(int i=0;i<size;i++) 
			if(items[i].getID()==ID) 
			{
				rootItem=items[i]; 
				swap(items[i],items[0]); //swap(参数1,参数2)函数用于交换参数1和参数2
				items[0]=items[--size]; 
				k=1;
			}
			else	k=0;
		if(k!=1)	cout<<"\n删除失败,找不到该学生"<<endl;
		else	cout<<"\n学生数据删除成功!";
	} 
	else cout<<"\n错误:当前学生数据为空,请添加..."<<endl; 
	return rootItem; //返回被删除项
} 

void Heap::heapInit()
{ 
	setSize(0); 
	cout<<"学生数据清除成功!"<<endl<<endl;
	cout<<"当前学生数据为空,请添加..."<<endl;
} 

void Heap::heapView()
{ 
	heapRebuild(0); 
	if(size==0)
	{ 
		cout<<"当前学生数据为空,请添加..."<<endl; 
	} 
	else
	{ 
		cout<<"共有学生数据: "<<size<<"条"<<endl<<endl; 
		for(int ct=size-1;ct>=0;ct--)
		{ 
			cout<<"学号: "<<items[ct].getID()<<" 姓名: " <<items[ct].getProN()<<" 优先级: "<<items[ct].getPri()<<endl; 
		} 
	} 
} 

void Heap::search(string ID) 
{ 
	int N=0; 
	for(int i=0;i<size;i++) 
	if(items[i].getID()==ID) 
	{
		N++; 
		cout<<"学号: "<<items[i].getID()<<" 姓名: " <<items[i].getProN()<<" 优先级: "<<items[i].getPri()<<endl;
	} 
	if(!N) cout<<"未找到匹配的数据!"<<endl; 
} 

void Heap::sift(int i,int m)//筛堆算法(大根堆)
{
	int k=2*i+1;
	Elem temp=items[i];
	while(k<=m)
	{
		if((k+1<=m) && (items[k].getPri()<items[k+1].getPri()))	k++;
		if(items[k].getPri()>temp.getPri())
		{
			items[i]=items[k];
			i=k;
			k=2*i+1;
		}
		else break;
	}
	items[i]=temp;
}
	
void Heap::heapRebuild(int root) //堆排序(小到大)
{ 
	int i=0;
	Elem temp;
	for(i=size/2;i>=0;i--)	sift(i,size-1);//初始化堆
	for(i=size-1;i>0;i--)
	{
		temp=items[0];
		items[0]=items[i];
		items[i]=temp;
		sift(0,i-1);//筛根
	}
} 
//class Heap 结束

//用于包装Heap类
class priQueue 
{
private: 
	Heap h; 
public: 
	priQueue();
	int priIsEmpty();
	void priInit();
	void priInsert(Elem newItem);
	Elem priDelete(string ID);
	void priView();
	void search(string ID);
};
priQueue::priQueue()
{ 
	Heap(); 
} 

int priQueue::priIsEmpty()
{ 
	return h.heapIsEmpty(); 
} 

void priQueue::priInit()
{ 
	h.heapInit(); 
} 

void priQueue::priInsert(Elem newItem)
{ 
	h.heapInsert(newItem); 
} 

Elem priQueue::priDelete(string ID)
{ 
	return h.heapDelete(ID); 
} 

void priQueue::priView()
{
	h.heapView(); 
} 

void priQueue::search(string ID) 
{ 
	h.search(ID); 
} 
//class priQueue 结束

void showMenu()//显示操作菜单
{ 
  	cout<<"|------------------------------------------------|"<<endl;   
	cout<<"|-----C++课程设计[06级信息安全[2]班  骆炎堂]-----|"<<endl; 
	cout<<"|----------------学生信息管理系统----------------|"<<endl; 
	cout<<"|------------------------------------------------|"<<endl; 
	cout<<"|            1.清空:清除所有学生数据            |"<<endl; 
	cout<<"|            2.添加:插入一条学生数据            |"<<endl; 
	cout<<"|            3.删除:删除指定学生数据            |"<<endl; 
	cout<<"|            4.查找:查找指定学生数据            |"<<endl; 
	cout<<"|            5.显示:显示所有学生数据            |"<<endl; 
	cout<<"|            0.退出:安全的退出本系统            |"<<endl; 
	cout<<"|------------------------------------------------|"<<endl; 
} 

void showTip()//显示操作完成提示
{ 
	cout<<"\n-------------------操作完成---------------------"<<endl; 
	cout<<"-----------------选择0-5继续-------------------"<<endl; 
	cout<<"请选择:"; 
} 

//主函数
int main()
{ 
	string i="-1"; 
	string ID;
	int PRI; 
	string proName; 
	Elem in; 
	priQueue PQ; 
	system("cls"); //清除屏幕
	showMenu(); 
//	cout<<"选择菜单中相应的数字以便处理数据..."<<endl; 
	cout<<"选择对应数字进行操作,请选择:"; 
	cin>>i; 
	system("cls"); 
	while(i!="0") //依照用户的输入选择对应的操作函数进行操作
	{ 
		if(i=="1") 
		{ 
			system("cls"); 
			showMenu(); 
			cout<<"你选择了1,数据将全部清空:"<<endl; 
			PQ.priInit(); 
			showTip(); 
		} 
		else if(i=="2") 
		{
			system("cls"); 
			showMenu(); 
			cout<<"你选择了2,输入学号,姓名,优先级"<<endl; 
			cout<<"输入学号:"; 
			cin>>ID; 
			cout<<"输入姓名:"; 
			cin>>proName; 
			cout<<"输入优先级:"; 
			cin>>PRI; 
			in.setID(ID); 
			in.setPri(PRI); 
			in.setProN(proName); 
			PQ.priInsert(in); 
			showTip(); 
		} 
		else if(i=="3") 
		{
			system("cls"); 
			showMenu(); 
			cout<<"你选择了3,请输入要删除的学号:"; 
			cin>>ID; 
			PQ.priDelete(ID); 
			showTip(); 
		} 
		else if(i=="4") 
		{
			system("cls"); 
			showMenu(); 
			cout<<"你选择了4,请输入要查找的学号:"; 
			cin>>ID; 
			PQ.search(ID); 
			showTip(); 
		} 
		else if(i=="5") 
		{
			system("cls"); 
			showMenu(); 
			cout<<"你选择了5,学生数据显示如下:"<<endl; 
			PQ.priView(); 
			showTip(); 
		} 
		else 
		{ 
			system("cls"); 
			showMenu(); 
			cout<<"无效输入!"<<endl;
			showTip();
		} 
		cin>>i; 
		system("cls"); 
	} 
	return 0; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -