使用順序表建立一個簡單的學生管理系統


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100 //存儲空間初始分配量
typedef struct{
        char num[10];//學號
        char name[20];//名字
        double grade;//成績
}student;
typedef int status;
typedef student ElemType ;

typedef struct{
        ElemType *elem;//存儲基址
        int length;//當前表長
        int listsize;//當前分配存儲容量
}SqList;
//構造一個空的順序表
status INitList_Sq(SqList &L){
        L.elem=(ElemType *)malloc( LIST_INIT_SIZE*sizeof(ElemType));
        if(!L.elem){
                exit(OVERFLOW);//存儲空間分配失敗
        }
        L.length=0;
        L.listsize=LIST_INIT_SIZE;
        return OK;
}
void Input(ElemType *e){
        printf("姓名"); scanf("%s",e->name);
        printf("學號"); scanf("%s",e->num);
        printf("成績"); scanf("%lf",&e->grade);
        printf("請輸入完成\n\n");
}
void Output(ElemType *e)
    {
        printf("姓名:%-20s\n學號:%-10s\n成績:%-10.2lf\n\n",e->name,e->num,e->grade);
    }
//訪問順序表,找到i位置,返回給e
ElemType GetElem(SqList &L,int i){
        return L.elem[i];
}
//根據名字查找,返回學生的編號
int Search(SqList &L,char str[]){
        for(int i=1;i<=L.length;i++){
                if(strcmp(L.elem[i].name,str)==0)
                        return i;
        }
        return 0;
}
//第i個位置插入某個學生信息
status ListInsert_Sq(SqList &L,int i,ElemType e){

        if((i<1)||(i>L.length+1)) return ERROR;
        if(L.length>=L.listsize)//當前空間已滿,需要增加分配
        {
                return ERROR;
        }
        for(int j=L.length;j>=i;j--)
        {
            L.elem[j+1]=L.elem[j];
        }
        L.elem[i]=e;
        ++L.length;
        return OK;
}
//刪除第i位置學生
status ListDelete_Sq(SqList &L,int i){
        if((i<1)||(i>L.length))   return ERROR;
        for(int j=i;j<=L.length;j++)
        {
            L.elem[j]=L.elem[j+1];
        }
        --L.length;
        return OK;
}
int main(){
        SqList L;
        ElemType a,b,c;
        printf("\n********************************\n\n");
        puts("1. 構造順序表");
        puts("2. 錄入學生信息");
        puts("3. 顯示學生信息");
        puts("4. 輸入姓名,查找該學生");
        puts("5. 顯示某位置該學生信息");
        puts("6. 在指定位置插入學生信息");
        puts("7. 在指定位置刪除學生信息");
        puts("8. 統計學生個數");
        puts("0. 退出");
        printf("\n********************************\n\n");
        int x,choose;
        while(1){
                puts("請選擇");
                scanf("%d",&choose);
                if(choose==0){
                        break;
                }
                switch(choose){
                        case 1:
                                if(INitList_Sq(L))
                                        printf("成功建立線性表\n\n");
                                else
                                        printf("順序建立線性表\n\n");
                                break;
                        case 2:
                                printf("請輸入要錄入學生的人數,最大為100人");
                                scanf("%d",&x);
                                for(int i=1;i<=x;i++){
                                        printf("第%d個學生:\n",i);
                                        Input(&L.elem[i]);
                                }
                                L.length=x;
                                break;
                        case 3:
                                for(int i=1;i<=x;i++){
                                        a=GetElem(L,i);
                                        Output(&a);
                                       }
                                break;
                        case 4:
                                char s[20];
                                printf("請輸入要查找的學生姓名");
                                scanf("%s",s);
                                if(Search(L,s))
                                        Output(&L.elem[Search(L,s)]);
                                else
                                        puts("對不起,查無此人");
                                break;
                        case 5:
                                printf("請輸入要查詢位置");
                                int id1;
                                scanf("%d",&id1);
                                b=GetElem(L,id1);
                                Output(&b);
                                break;
                        case 6:
                                printf("請輸入插入位置");
                                int id2;
                                scanf("%d",&id2);
                                printf("請輸入學生信息:\n");
                                Input(&c);
                                if(ListInsert_Sq(L,id2,c)){
                                        x++;
                                        puts("插入成功");
                                }else{
                                        puts("插入失敗");
                                }
                        case 7:
                                printf("請輸入要刪除的位置:");
                                int id3;
                                scanf("%d",&id3);
                                if(ListDelete_Sq(L,id3))
                                {
                                        x--;
                                        puts("刪除成功");
                                }else {
                                         puts("刪除失敗");
                                }
         break;
                 case 8:
                                 printf("已錄入的學生個數為:%d\n\n",L.length);
                                 break;
                }
        }
        printf("\n\n謝謝您的使用,請按任意鍵退出\n\n\n");
        return 0;
}




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM