#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define OVERFLOW -2
#define FALSE 0
#define TRUE 1
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10
typedef int Status;
typedef struct
{
char name[10];
float score;
}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;
}
Status ListInser_Sq(SqList *L,int i,ElemType e)
{
ElemType *q,*p;
if(i<1 || i>L->length+1) return ERROR;
if(L->length>=L->listsize)
{
ElemType *newbase;
newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREAMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L->elem=newbase;
L->listsize+=LISTINCREAMENT;
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++L->length;
return OK;
}
Status ListDelete_Sq(SqList *L,int i,ElemType *e)
{
ElemType *p,*q;
if(i<1 || (i>L->length)) return ERROR;
p=&(L->elem[i-1]);
*e=*p;
q=L->elem+L->length-1;
for(++p;p<=q;++p)
*(p-1)=*p;
--L->length;
return OK;
}
void Traverse(SqList L)
{
int i=0;
while(i<L.length)
{
printf("%s %4.2f\n",L.elem[i].name,L.elem[i].score);
i++;
}
}
menu()
{
printf("\n\n\t\t*******************************************\n");
printf("\t\t* 学生信息管理系统 *\n");
printf("\t\t* 1.查询学生信息 *\n");
printf("\t\t* 2.增加学生信息 *\n");
printf("\t\t* 3.删除学生信息 *\n");
printf("\t\t* 4.显示全部信息 *\n");
printf("\t\t* 0.退出系统 *\n");
printf("\t\t*******************************************\n");
}
ElemType elem;
SqList L;
void add()
{
int i;
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("请输入学生姓名:");
scanf("%s",elem.name);
printf("请输入学生成绩:");
scanf("%f",&elem.score);
ListInser_Sq(&L,i,elem);
printf("插入成功! 请按任意键返回!");
getch();
}
void dele()
{
int i=0;
char name[10];
printf("请输入要删除的学生姓名:");
scanf("%s",name);
for(i=0;i<L.length;i++)
{
if(strcmp(L.elem[i].name,name)==0)
{
ListDelete_Sq(&L,i,&L.elem[i]);
printf("删除操作完成! 请按任意键返回!");
getch();
return;
}
}
printf("没有该学生! 请按任意键返回!");
getch();
}
void look()
{
char name[10];
int i;
printf("请输入学生姓名:");
scanf("%s",name);
for(i=0;i<L.listsize;i++)
{
if(strcmp(L.elem[i].name,name)==0)
{
printf("%s的成绩为%4.2f\n",L.elem[i].name,L.elem[i].score);
printf("请按任意键返回!");
getch();
return;
}
}
printf("没有查询到该学生! 请按任意键返回!");
getch();
}
void show()
{
printf("current listsize:%d,",L.listsize);
printf("current length:%d\n",L.length);
Traverse(L);
getch();
}
void main()
{
char x;
InitList_Sq(&L);
while(1)
{
system("cls");
menu();
x=getchar();
switch(x)
{
case '0':exit(0);
case '1':look();break;
case '2':add();break;
case '3':dele();break;
case '4':show();break;
default:break;
}
}
exit(0);
}