顺序表实现新生成绩管理系统version1.0

在这里插入图片描述

#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;  //english socre;
	float score2;  //math score;
	float score3;  //total score;
}STD;
typedef struct
{
	STD *data;
	int listSize;
	int length;
}SqList;

//(1)创建新生数据
void createSqList(SqList *L,int maxsize);
//(2)插入新生数据
int insertSqList(SqList *L,int i,STD x);
//(3)删除新生数据
int deleteSqList(SqList *L,int i,STD *x);
//(4)修改新生数据
int updateSqLis(SqList *L,int i,STD x);
//(5)根据学号查询
int locationSqList(SqList L,char *xh);
//(6)查询英语成绩
void findEnglishSqList(SqList L,float x);
//(7)查询数学成绩
void findMathSqList(SqList L,float x);
//(8)查询总成绩
void findTotalSqList(SqList L);
//(9)显示新生数据
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;
	}
}
//1.初始化操作
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;
}
//2.插入操作,最坏情况i=1,O(n),最好情况i=n+1,O(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;
}
//3.删除操作,最坏情况i=1,O(n),最好情况i=n,O(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;
}
//4.更新操作,该算法不涉及循环,均为顺序执行,O(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;
}
//5.获取操作
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;
}
//6.定位操作
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;
}
//7.遍历操作
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;
}
//1~7为基本操作

//8.创建学生数据表
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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值