📄 学生信息管理系统.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 + -