线性表 学生信息管理系统

#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;
        }
    }
}
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值