1. 程式人生 > >學生成績管理系統順序表實現

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

#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; }