顺序表构建学生信息管理系统(C++)

顺序表构建学生信息管理系统–C++样例

对于本文的任何建议和问题都可留言,我们共同探讨,进步和提高。

上次编写了根据单链表进行构建学生管理系统的C++样例,本次使用顺序表进行构建。单链表与顺序表各有利弊,顺序表能够快速的进行定位,但是必须事先指定表的大小,不利于数据动态增减;而单链表可以有效的进行动态增减,但进行查询时需要进行遍历。两者之间的使用视实际情况而定。
同样本文中的内容和代码比较简单,都是基础的运用,但对于初学者来说有利于加深对于顺序表原理的理解,我本人能力不高,仅供交流和参考。

因时间问题,对于功能函数没有进行具体解释,争取在将来进行完善。



头文件声明

本文中用到的头文件与上一篇文章中完全一致,简单的用法介绍请参见上一篇文章——单链表构建学生管理系统(C++样例)

所需头文件分别是iostreamconio.hiomanip

结构体

所需结构体有两个,分别为 学生结构体顺序表结构体

学生结构体STD

typedef struct
{
    char name[10];//姓名
    float score;//成绩

}STD;//学生结构体

顺序表结构体SqList

typedef struct
{
    STD *data;
    int listsize; //记录顺序表大小
    int length;  //记录存储个数
}SqList;//顺序链表结构体

功能函数

本程序中用到的功能函数主要有:

  • 菜单功能 menu()
  • 顺序录入/插入 insertList()
  • 修改信息 updateList()
  • 删除信息 deleteList()
  • 显示信息 无具体函数,在case中实现

详细实现参见源代码。

源代码

#include "conio.h"
#include "iostream"
#include "iomanip"
using namespace std;

typedef struct
{
    char name[10];
    float score;

}STD;//学生结构体

typedef struct
{
    STD *data;
    int listsize;
    int length;
}SqList;//顺序链表结构体


//菜单栏选择
int menu()
{
    int n;
    while(1)
    {
        system("cls");
        cout<<"***欢迎使用学生信息管理系统***"<<endl;
        cout<<"1.录入学生信息  2.插入学生数据"<<endl;
        cout<<"3.修改学生信息  4.删除学生信息"<<endl;
        cout<<"5.显示学生信息  0.退出"<<endl;
        cout<<"******************************"<<endl;
        cout<<"请选择编号:";
        cin>>n;
        if(n<0||n>5)
            cout<<"选择错误,请重新输入:";
        else
            return n;
    }

}

//初始化 
int initList(SqList *L,int max)
{
    L->data = (STD *)malloc(max * sizeof(STD));
    if(L->data==NULL)
    {
        cout<<"error!"<<endl;
        return 0;
    }
    L->listsize=max;
    L->length=0;
    return 1;
}

//插入 
int insertList(SqList *L,int i,STD s)
{
    if(i<1 || i>L->length+1)
    {
        cout<<"插入位置错误!"<<endl;
        return 0;
    }
    if(L->length==L->listsize)
    {
        cout<<"容量不够!"<<endl;
        return 0;
    }

    for(int m=L->length;m>i-1;m--)
    {
        L->data[m]=L->data[m-1];
    }
    L->data[i-1]=s;
    L->length++;
    return 1;
}


//更新修改 
int updateList(SqList *L,int k,STD s)
{
    if(L->length==0){cout<<"无数据,不可修改!"<<endl;return 0;}
    if(k<1 || k>L->length)
    {
        cout<<"修改位置有误,请重新输入:";
        return 0;
    }
    L->data[k-1]=s;
    return 1;

}


//删除 
int deleteList(SqList *L,int k)
{
    if(k<1 || k>L->length){cout<<"删除位置有误,请重新输入:"<<endl;return 0;}
    if(L->length==0){cout<<"无数据,不可删除!"<<endl; return 0;}
    for(int m=k-1;m<L->length-1;m++)
    {
        L->data[m]=L->data[m+1];
    }
    L->length--;
    return 1;
}

int main()
{
    SqList L;
    STD stu;
    //string choise;
    int n,maxSize,k;

    while(1)
    {
        n=menu();
        switch(n)
        {
        case 1:
            cout<<"输入需要创建的学生人数:";
            cin>>maxSize;
            initList(&L,maxSize);

            char judge;
            while(1)
            { 
                cout<<"-------------------------"<<endl;
                cout<<"请输入学生姓名和成绩:"<<endl;

                cin>>stu.name>>stu.score;
                //n++;
                insertList(&L,L.length+1,stu);

                cout<<"是否继续输入(y/n):";
                cin>>judge;
                if(judge!='y')  
                    break;          
            }


            cout<<"按任意键继续:";
            getch();
            break;
        case 2:
            cout<<"输入插入位置:";
            cin>>k; 
            cout<<"请输入需插入的学生姓名和成绩:"<<endl;
            cin>>stu.name>>stu.score;
            insertList(&L,k,stu);

            cout<<"按任意键继续:";
            getch();
            break;
        case 3:
            //int k;
            cout <<"请输入需修改的位置:";
            cin>>k;
            cout<<"请输入修改学生信息:"<<endl;
            cin>>stu.name>>stu.score;
            updateList(&L,k,stu);

            cout<<"按任意键继续:";
            getch();
            break;
        case 4:
            cout <<"请输入需删除的位置:";
            cin>>k;
            if(deleteList(&L,k)){cout<<"删除成功!"<<endl;}
            cout<<"按任意键继续:";
            getch();
            break;

        case 5:
            cout<<"学生姓名   学生成绩"<<endl;
            for(int m=0;m<L.length;m++)
            {
                cout<<setw(8)<<setiosflags(ios::left)<<L.data[m].name<<"   "<<L.data[m].score<<endl;
            }
            cout<<"按任意键继续:";
            getch();
            break;
        case 0:
            cout<<"******************************"<<"\n感谢您的使用!\n"<<"******************************"<<endl;
            exit(0);

        }//switch

    }//while

    return 1;

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值