#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct Student
{
string ID;
string Name;
string Sex;
string Dept_name;
string _Class;
void describe();
void set(string id,string name,string sex,string dept_name,string _class);
void Help();
};
void Student::describe()
{
cout<<setw(15)<<ID;
cout<<setw(15)<<Name;
cout<<setw(15)<<Sex;
cout<<setw(15)<<Dept_name;
cout<<setw(15)<<_Class<<endl;
}
void Student::set(string id,string name,string sex,string dept_name,string _class)
{
ID = id;
Name = name;
Sex = sex;
Dept_name = dept_name;
_Class = _class;
}
void Student::Help()
{
string id;
string name;
string sex;
string dept_name;
string _class;
cout<<"学号:"<<endl;
cin>>id;
cout<<"姓名:"<<endl;
cin>>name;
cout<<"性别:"<<endl;
cin>>sex;
cout<<"系名:"<<endl;
cin>>dept_name;
cout<<"班级:"<<endl;
cin>>_class;
set(id,name,sex,dept_name,_class);
}
class SqList
{
private:
int count;
int maxsize;
Student *students;
public:
SqList(int size=40);
virtual~SqList();
void Clear();
void Traverse()const;
bool Insert();
bool Delete(string id);
bool modify(string id); //修改
bool inquiry(string id,Student &e)const; //查找
Student* getarr();
int getcount();
int Partition(Student *students,int low,int high);
void QuickSortHelp(Student *students,int low,int high);
};
SqList::SqList(int size)
{
maxsize = size;
students = new Student[maxsize];
count = 0;
}
SqList::~SqList()
{
delete []students;
}
void SqList::Clear()
{
count = 0;
}
bool SqList::Insert()
{
if(count == maxsize)
{
cout<<"内存空间不足!"<<endl;
return false;
}
Student tmp;
cout<<"请输入学生相关信息:"<<endl;
tmp.Help();
students[count++] = tmp;
cout<<"添加成功!"<<endl;
return true;
}
bool SqList::inquiry(string id,Student &e)const
{
int i;
for(i=0; i<count; i++)
{
if(students[i].ID == id)
{
e = students[i];
return true;
}
}
cout<<"尚无此学生信息!"<<endl;
return false;
}
bool SqList::modify(string id)
{
int i;
for(i=0; i<count; i++)
{
if(students[i].ID ==id)
{
cout<<"请重新输入相关数据:"<<endl;
students[i].Help();
return true;
}
}
cout<<"暂无此学生信息!"<<endl;
return false;
}
bool SqList::Delete(string id)
{
int i;
for(i=0; i<count; i++)
{
if(students[i].ID == id)
break;
}
if(i == count)
{
cout<<"暂无此学生信息!"<<endl;
return false;
}
for(int j=i+1; j<count; j++)
{
students[i] = students[j];
}
cout<<"删除成功!"<<endl;
return true;
}
void SqList::Traverse()const
{
for(int i=0; i<count; i++)
{
students[i].describe();
cout<<endl;
}
}
Student* SqList::getarr()
{
return students;
}
int SqList::getcount()
{
return count;
}
int SqList::Partition(Student *students,int low,int high)
{
while(low<high)
{
while(low<high&&students[high].ID>=students[low].ID)
{
high--;
}
swap(students[low],students[high]);
while(low<high&&students[low].ID<=students[high].ID)
{
low++;
}
swap(students[low],students[high]);
}
return low;
}
void SqList::QuickSortHelp(Student *students,int low,int high)
{
if(low<high)
{
int pivotLoc = Partition(students,low,high);
QuickSortHelp(students,low,pivotLoc-1);
QuickSortHelp(students,pivotLoc+1,high);
}
}
void menu()
{
cout<<"|--------------------------------------------------|"<<endl;
cout<<"| 1.添加学生相关信息 |"<<endl;
cout<<"| 2.删除同学相关信息 |"<<endl;
cout<<"| 3.编辑同学相关信息 |"<<endl;
cout<<"| 4.查找同学相关信息 |"<<endl;
cout<<"| 5.展示全部学生信息 |"<<endl;
cout<<"| 6.删除全部联系信息 |"<<endl;
cout<<"| 7.退 出 |"<<endl;
cout<<"|--------------------------------------------------|"<<endl;
}
int main()
{
cout<<setw(30)<<"学生信息管理系统"<<endl;
int i,flag;
SqList table(40);
Student e;
while (1)
{
menu();
cout<<"请输入你的操作:"<<endl;
cin>>i;
string id;
switch (i)
{
case 1:
system("cls");
table.Insert();
break;
case 2:
system("cls");
cout<<"请输入所删除学生的序号:"<<endl;
cin>>id;
system("cls");
table.inquiry(id,e);
cout<<"请确认是否删除此学生信息?"<<endl;
e.describe();
cout<<"删除请按1,返回请按任意数字"<<endl;
cin>>flag;
if(flag == 1)
{
table.Delete(id);
break;
}
break;
case 3:
system("cls");
cout<<"请输入需要修改的学生的序号:"<<endl;
cin>>id;
table.modify(id);
break;
case 4:
system("cls");
cout<<"请输入查找学生的序号:"<<endl;
cin>>id;
system("cls");
table.inquiry(id,e);
e.describe();
break;
case 5:
system("cls");
cout<<"按1选择序列化输出,按任意键乱序输出"<<endl;
cin>>flag;
if(flag == 1)
{
table.QuickSortHelp(table.getarr(),0,table.getcount()-1);
table.Traverse();
break;
}
table.Traverse();
break;
case 6:
system("cls");
table.Clear();
cout<<"全部清除成功!"<<endl;
break;
case 7:
system("cls");
cout<<"谢谢使用!"<<endl;
return 0;
default:
system("cls");
cout<<"输入错误!"<<endl;
break;
}
}
}
线性表 学生信息管理系统
于 2019-12-15 17:49:45 首次发布