學生成績管理系統順序表實現

#include<stdio.h>
#include<stdlib.h>
#define listSize 100

//學生信息結構體
typedef  struct 
{
    long num;//學號
    char name[10];//姓名
    int score;//成績
}STUDENT;

//順序表結構體
typedef  struct  
{
    STUDENT stu[listSize];
    int length;
}LIST;

//函數前置聲明
void showMenu();
void initList(LIST * L);
void createList(LIST * L, int len);
int  insertList(LIST * L, int pos,STUDENT * stu);
void inputInfor(LIST * L);
void traverseList(LIST * L);

//展示系統菜單
void showMenu()
{
    printf("___________________________________________\n");
    printf("         歡迎使用學生成績管理系統\n");
    printf("\t    【1】創建學生信息\n");
    printf("\t    【2】插入學生信息\n");
    printf("\t    【3】刪除學生信息\n");
    printf("\t    【4】顯示學生信息\n");
    printf("\t    【5】退出系統\n");
    printf("___________________________________________\n");
    return;
}

//初始化順序表
void initList(LIST * L)
{
    L->length = 0;
    return ;
}

//完成學生信息的輸入
void  inputInfor(LIST * L,int index)
{
    printf("學號=");
    scanf("%d",&L->stu[index].num);
    printf("姓名=");
    scanf("%s",L->stu[index].name);
    printf("分數=");
    scanf("%d",&L->stu[index].score);
    return;
}

//創建班級學生信息
void createList(LIST * L, int len)
{
    int i;
    for(i = 0;i< len ;i++)
    {
        printf("請輸入第%d個學生的信息:\n",i+1);
        inputInfor(L,i);
        L->length++;
    }
    return;
}

//向順序表中插入元素
int  insertList(LIST * L, int pos,STUDENT * stu)
{
    int i;
    if(L->length == listSize)
    {
        printf("順序表已滿,不能插入元素!\n");
        return -1;
    }
    else if(pos<1||pos>L->length+1)
    {
        return 0;
    }
    else
    {
        for( i = L->length;i>=pos;i--)
        {
            L->stu[i] = L->stu[i-1];
        }
        L->stu[pos-1] = *stu;
        L->length++;
        return 1;
    }
}

//在順序表中刪除元素
int  deleteList(LIST * L, int pos,STUDENT *e)
{
    int i;
    if(L->length == 0)
    {
        printf("順序表已空,不能插入元素!\n");
        return -1;
    }
    else if(pos<1||pos>L->length)
    {
        return 0;
    }
    else
    {
        *e = L->stu[pos-1];
        for( i = pos;i<L->length;i++)
        {
            L->stu[i-1] = L->stu[i];
        }
        L->length--;
        return 1;
    }
}

//遍歷輸入順序表中元素
void traverseList(LIST * L)
{
    int i;
    if( 0 == L->length )    //檢查順序表是否爲空,不空才能遍歷
    {
        printf("順序表爲空!\n");
        return;
    }

    printf("        學號   姓名   分數 \n");
    for(i = 0;i<L->length;i++)
    {
        printf("第%d個學生     ",i+1);
        printf("%-7d%-7s%-7d\n",L->stu[i].num,L->stu[i].name,L->stu[i].score);
    }
    return;
}

//主函數
int main(void)
{
    int choice,len,pos;
    LIST stu_infor;
    STUDENT insertElem,*pInsertElem;
    initList(&stu_infor);
    while(true)
    {
        showMenu();
        printf("請輸入您的選擇:");
        scanf("%d",&choice);
        system("cls");
        switch(choice)
        {
            case 1: printf("請輸入班級學生原始人數:");
                    scanf("%d",&len);
                    createList(&stu_infor,len);
                    printf("該班級學生信息爲:\n");
                    system("cls");
                    printf("___________________________________________\n");
                    printf("        創建的學生信息顯示\n");
                    traverseList(&stu_infor);
                    printf("___________________________________________\n\n");
                    break;
            case 2: printf("請輸入待插入學生的信息:\n");
                    printf("學號=");
                    scanf("%d",&insertElem.num);
                    printf("姓名=");
                    scanf("%s",insertElem.name);
                    printf("分數=");
                    scanf("%d",&insertElem.score);
                    pInsertElem = &insertElem;
                    while( 0 == insertList(&stu_infor,pos,pInsertElem))
                    {
                       printf("___________________________________________\n");
                       printf("     插入學生前信息顯示\n");
                       traverseList(&stu_infor);
                       printf("___________________________________________\n\n");
                       printf("請輸入需要插入學生信息的位置:");
                       scanf("%d",&pos);
                       system("cls");   
                    }
                    printf("___________________________________\n");
                    printf("    您需要插入學生顯示\n");
                    printf("    學號   姓名   分數 \n");
                    printf("     %-7d%-7s%-7d\n",insertElem.num,insertElem.name,insertElem.score);
                    printf("___________________________________________\n");
                    printf("        插入學生後信息顯示\n");
                    traverseList(&stu_infor);
                    printf("___________________________________________\n\n");
                    break;
            case 3: while(0 == deleteList(&stu_infor,pos,&insertElem))
                    {
                        printf("___________________________________________\n");
                        printf("        刪除學生前信息顯示\n");
                        traverseList(&stu_infor);
                        printf("___________________________________________\n\n");
                        printf("請輸入需要刪除學生信息的位置:");
                        scanf("%d",&pos);
                        system("cls");
                    }
                    printf("___________________________________\n");
                    printf("    您需要刪除學生顯示\n");
                    printf("    學號   姓名   分數 \n");
                    printf("     %-7d%-7s%-7d\n",insertElem.num,insertElem.name,insertElem.score);
                    printf("___________________________________\n\n");
                    printf("___________________________________________\n");
                    printf("        刪除學生後信息顯示\n");
                    traverseList(&stu_infor);
                    printf("___________________________________________\n\n");
                    break;
            case 4: printf("___________________________________________\n");
                    printf("        班級學生信息顯示\n");
                    traverseList(&stu_infor);
                    printf("___________________________________________\n\n");
                    break;
            case 5:
                    exit(0);
            default:printf("您的輸入有誤!\n");
        }
    }
    return 0;
}
發佈了56 篇原創文章 · 獲贊 24 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章