数据结构顺序表之学生信息管理系统简单示例

用顺序表写的简单的学生管理系统,自己动手,丰衣足食!

顺序表的使用

#include
#include
#include
#define MAXSIZE 50
typedef struct{
    char name[21],num[12];
    int math,eng,comp;
}datatype;
typedef struct{
    datatype data[MAXSIZE];    //存储顺序表的元素
    int len;
}SeqList;          //顺序表的类型
void mune()
{
    printf("1-----录入学生信息\n");
    printf("2-----录入学生成绩\n");
    printf("3-----输出学生信息\n");
    printf("4-----查找学生信息\n");
    printf("5-----插入学生信息\n");
    printf("6-----修改学生成绩\n");
    printf("7-----删除学生信息\n");
    printf("0-----退出菜单\n");
}
void input1(SeqList *L)
{
    int i;
    printf("请输入学生人数!\n");
    scanf("%d",&(L->len));
    for(i=1;i<=(L->len);i++)
    {
        printf("请输入第%d个学生姓名、学号!\n",i);
        scanf("%s%s",L->data[i].name,L->data[i].num);
        L->data[i].math=L->data[i].eng=L->data[i].comp=-1;
    }
    printf("输入完毕!\n");
}
void input2(SeqList *L)
{
    char km[40];
    int i;
    printf("请输入录入成绩的科目!\n");
    scanf("%s",km);
    if(strcmp(km,"数学")==0)
    {
        for(i=1;i<=L->len;i++)
            {
                printf("请输入第%d个学生该科目的成绩!\n",i);
                scanf("%d",&L->data[i].math);
            }
            printf("学生成绩录入成功!\n");
    }
     else if(strcmp(km,"英语")==0)
    {
        for(i=1;i<=L->len;i++)
            {
                printf("请输入第%d个学生该科目的成绩!\n",i);
                scanf("%d",&L->data[i].eng);
            }
            printf("学生成绩录入成功!\n");
    }
     else if(strcmp(km,"计算机")==0)
    {
    for(i=1;i<=L->len;i++)
        {
            printf("请输入第%d个学生该科目的成绩!\n",i);
            scanf("%d",&L->data[i].comp);
        }
        printf("学生成绩录入成功!\n");
    }
    else{
    printf("请输入正确课程名!\n");
    input2(L);
    }
}
void print(SeqList *L)
{
    int i;
    if(L->len==0)
        printf("没有学生信息!\n");
    else
        {
            printf("共有%d个学生信息\n",L->len);
            for(i=1;i<=L->len;i++)
            {
                printf("%21s%12s%7s%7s%7s\n","姓名","学号","数学","英语","计算机");
                printf("%21s%12s%7d%7d%7d\n",L->data[i].name,L->data[i].num,L->data[i].math,L->data[i].eng,L->data[i].comp);
            }
            }
}
int find(SeqList *L,datatype p)
{
    int i;
    while(i<=L->len&&strcmp(L->data[i].num,p.num)!=0)
        i++;
    if(i<=L->len)
            {
                printf("%21s%12s%7s%7s%7s\n","姓名","学号","数学","英语","计算机");
                printf("%21s%12s%7d%7d%7d\n",L->data[i].name,L->data[i].num,L->data[i].math,L->data[i].eng,L->data[i].comp);
                return i;
            }
    else
    {
        printf("查无此人!\n");
        return 0;
    }
}
void insert(SeqList *L,datatype p)//按照学号的大小顺序插入
{
    int i=1,j;
    while(i<=L->len&&strcmp(L->data[i].num,p.num)<0)
        i++;
    if(L->len==MAXSIZE)
        printf("表已满!\n");
    else
    {
        for(j=L->len;j>=i;j--)
        {
            L->data[j+1]=L->data[j];
        }
        L->data[i]=p;
        L->len++;
        printf("插入已完成!\n");
    }
}
void change(SeqList *L,datatype p)
{
    int i=1;
    char km[20];
    while(i<=L->len&&strcmp(L->data[i].num,p.num)!=0)
        i++;
    if(i>L->len)
        printf("查无此人!\n");
    else
    {
        printf("请输入要修改的科目!\n");
        scanf("%s",km);
         if(strcmp(km,"数学")==0)
    {
                printf("请输入该学生该科目的成绩!\n");
                scanf("%d",&L->data[i].math);
            printf("学生成绩修改成功!\n");
    }
     else if(strcmp(km,"英语")==0)
    {
                printf("请输入该学生该科目的成绩!\n");
                scanf("%d",&L->data[i].eng);
            printf("学生成绩修改成功!\n");
    }
     else if(strcmp(km,"计算机")==0)
    {
            printf("请输入该学生该科目的成绩!\n");
            scanf("%d",&L->data[i].comp);
        printf("学生成绩修改成功!\n");
    }
    else
    {
        printf("请输入正确的课程名!\n");
        change(L,p);
    }
    }
}
void del(SeqList *L,datatype p,int q)
{
    int i;
    if(q!=0)
    {
        for(i=q;i<L->len;i++)
        {
            L->data[i]=L->data[i+1];
        }
        L->len--;
         printf("删除学生信息成功!\n");
    }
}
int main()
{
   SeqList *Stu;
   datatype x;
   int i,j=1,k;
   Stu=(SeqList *)malloc(sizeof(SeqList));
   Stu->len=0;
   for(i=1;j!=0;i++)
    {
        mune();
        printf("请输入您想进行的操作!");
        scanf("%d",&j);
        switch(j)
        {
            case 1:input1(Stu);break;
            case 2:input2(Stu);break;
            case 3:print(Stu);break;
            case 4:printf("请输入想要查找的学生学号!\n");
                   scanf("%s",x.num);
                   k=find(Stu,x);
                   break;
            case 5:printf("请输入要插入的学生姓名、学号、数学、英语、计算机\n");
                   scanf("%s%s%d%d%d",x.name,x.num,&x.math,&x.eng,&x.comp);
                   insert(Stu,x);
                   break;
            case 6:printf("请输入要修改成绩的学生学号!\n");
                   scanf("%s",x.num);
                   change(Stu,x);
                   break;
            case 7:printf("请输入要删除的学生学号!\n");
                   scanf("%s",x.num);
                   k=find(Stu,x);
                   del(Stu,x,k);
                   break;
        }
    }
   return 0;
}



你可能感兴趣的:(数据结构,数据结构顺序表,C语言,学生管理系统)