學生成績管理系統順序表實現
阿新 • • 發佈:2019-01-22
#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;
}