#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<string.h>
#define LISTINCREAMNET 10
typedef struct
{
char xh[15];
char xm[20];
char bj[20];
float score1;
float score2;
float score3;
}STD;
typedef struct
{
STD *data;
int listSize;
int length;
}SqList;
void createSqList(SqList *L,int maxsize);
int insertSqList(SqList *L,int i,STD x);
int deleteSqList(SqList *L,int i,STD *x);
int updateSqLis(SqList *L,int i,STD x);
int locationSqList(SqList L,char *xh);
void findEnglishSqList(SqList L,float x);
void findMathSqList(SqList L,float x);
void findTotalSqList(SqList L);
int dispSqList();
int menu();
int initSqList(SqList *L,int max);
void main()
{
int n,maxSize;
float fs;
char xh[15];
SqList L;
STD s;
while(1)
{
n=menu();
switch(n)
{
case 1:
printf("请输入要创建的新生人数:");
scanf("%d",&maxSize);
createSqList(&L,maxSize);
printf("按任意键继续!\n");
getch();
break;
case 2:
printf("请输入需要插入的新生学号、姓名、班级、英语、数学、总成绩,用空格隔开:\n");
scanf("%s%s%s%f%f%f",s.xh,s.xm,s.bj,&s.score1,&s.score2,&s.score3);
insertSqList(&L,L.length+1,s);
printf("请按任意键继续!\n");
getch();
break;
case 3:
printf("请输入需要删除的新生的学号:");
scanf("%s",s.xh);
n=locationSqList(L,s.xh);
deleteSqList(&L,n,&s);
printf("删除的学生数据为:%s %s %s %7.2f %7.2f %7.2f\n",s.xh,s.xm,s.bj,s.score1,s.score2,s.score3);
printf("请按任意键继续!");
getch();
break;
case 4:
printf("请输入修改后的新生学号、姓名、班级、英语、数学、总成绩,用空格隔开:\n");
scanf("%s%s%s%f%f%f",s.xh,s.xm,s.bj,&s.score1,&s.score2,&s.score3);
n=locationSqList(L,s.xh);
updateSqList(&L,n,s);
printf("请按任意键继续!");
getch();
break;
case 5:
printf("请输入需要查询的学号:");
scanf("%s",xh);
n=locationSqList(L,xh);
if(n)printf("%s %s % s %7.2f %7.2f %7.2f\n",L.data[n-1].xh,L.data[n-1].xm,
L.data[n-1].bj,L.data[n-1].score1,L.data[n-1].score2,L.data[n-1].score3);
else printf("数据不存在!\n");
printf("请按任意键继续!");
getch();
break;
case 6:
printf("请输入英语成绩:");
scanf("%f",&fs);
findEnglishSqList(L,fs);
printf("请按任意键继续!");
getch();
break;
case 9:
printf("新生成绩如下:\n");
dispSqList(L);
printf("请按任意键继续!");
getch();
break;
case 0:exit(0);
}
}
}
int menu()
{
int n;
while(1)
{
system("cls");
printf("*****欢迎使用新生成绩管理系统********\n");
printf("1.创建新生数据表 2.插入新生数据\n");
printf("3.删除新生数据表 4.修改新生数据\n");
printf("5.根据学号查询 6.查询英语成绩\n");
printf("7.查询数学成绩 8.查询总成绩\n");
printf("9.显示新生数据 0.退出\n");
printf("*************************************\n");
printf("请选择功能编号0~9:");
scanf("%d",&n);
getchar();
if(n<0||n>9)
{
printf("输入有误,重新选择,按任意键继续!\n");
getch();
}
else return n;
}
}
int initSqList(SqList *L,int max)
{
L->data=(STD *)malloc(max*sizeof(STD));
if(L->data==NULL) {printf("空间申请失败!\n");return 0;}
L->listSize=max;
L->length=0;
return 1;
}
int insertSqList(SqList *L,int i,STD x)
{
STD *newbase;
int k;
if(i<1 || i>L->length+1)
{
printf("插入位置异常!\n");
return 0;
}
if(L->length>=L->listSize)
{
printf("容量不够! 系统将为你分配...\n");
newbase=(STD *)realloc(L->data,(L->listSize+LISTINCREAMNET)*sizeof(STD));
if(!newbase)
{
printf("空间申请失败!\n");
return 0;
}
L->listSize+=LISTINCREAMNET;
}
for(k=L->length;k>=i;k--)
{
L->data[k]=L->data[k-1];
}
L->data[i-1]=x;
L->length=L->length+1;
return 1;
}
int deleteSqList(SqList *L,int i,STD *x)
{
int k;
if(L->length==0)
{
printf("没有数据,不能删除!\n");
return 0;
}
if(i<=0 || i>L->length)
{
printf("位置异常!\n");
return 0;
}
*x=L->data[i-1];
for(k=i;k<L->length;k++)
{
L->data[k-1]=L->data[k];
}
L->length=L->length-1;
return 1;
}
int updateSqList(SqList *L,int i,STD x)
{
if(L->length==0)
{
printf("没有数据,不能更新!\n");
return 0;
}
if(i<1||i>L->length)
{
printf("位置不合理!\n");
return 0;
}
L->data[i-1]=x;
return 1;
}
int getSqList(SqList L,int i,STD *x)
{
if(L.length==0){printf("没有数据!\n");return 0;}
if(i<1||i>L.length){printf("位置不合理!\n");return 0;}
*x=L.data[i-1];
return 1;
}
int locationSqList(SqList L,char *x)
{
int i;
if(L.length==0){printf("没有数据!\n");return 0;}
for(i=0;i<L.length;i++)
if(strcmp(L.data[i].xh,x)==0) return i+1;
return 0;
}
int dispSqList(SqList L)
{
int i;
if(L.length==0){printf("没有数据!\n");return 0;}
for(i=0;i<L.length;i++)
printf("%s %s %s %7.2f %7.2 %7.2f %7.2f\n",L.data[i].xh,L.data[i].xm,L.data[i].bj,
L.data[i].score1,L.data[i].score2,L.data[i].score3);
return 1;
}
void createSqList(SqList *L,int maxsize)
{
int n=0;
STD x;
char yn;
initSqList(L,maxsize);
do{
printf("请输入第%d个学生的学号,姓名、班级、英语分数、数学分数、总成绩用空格隔开\n",n+1);
scanf("%s%s%s%f%f%f",x.xh,x.xm,x.bj,&x.score1,&x.score2,&x.score3);
getchar();
insertSqList(L,n+1,x);
n++;
printf("%d",n);
printf("继续输入吗?Y/N:");yn=getchar();
}while(yn=='Y'||yn=='y');
}
void findEnglishSqList(SqList L,float x)
{
int i;
for(i=0;i<L.length;i++)
if(L.data[i].score1>=x)
printf("%s %s %s %7.2f\n",L.data[i].xh,L.data[i].xm,L.data[i].bj,L.data[i].score1);
}