学生信息管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student* Input(struct Student *pArr,int length);//录入学生信息
void Change(struct Student *pArr,int length);//修改学生信息
void Output(struct Student *pArr,int length);//输出学生信息
void Delete(struct Student *pArr,int length);//删除学生信息
void Search(struct Student *pArr,int length);//查找学生信息
void Add(struct Student *pArr,int length);//添加学生信息
void AvgAge(struct Student *pArr,int length);//排序学生年龄
void AvgZjd(struct Student *pArr,int length);//排序学生绩点
void name(struct Student *pArr,int length);//排序学生姓名
void Num1(struct Student *pArr,int length);//排序学生学号

struct Student
{
	char name[9];		//姓名
	double Num1;		//学号
	char sex[3];		//性别
	int age;			//年龄
	float jd;		//绩点
	float avgzjd;		//平均绩点
	float avgage;		//平均年龄
};

int i,p,num,j;
int Num(void);		//得到人数

int main()
{
	int num,Item;
	struct Student *pArr=NULL;
	struct Student *p=NULL;
	printf("**欢迎使用学生档案管理系统**\n\n");
	printf("按任意键进入学生档案管理系统!\n");
	getchar();
	system("cls");
	printf("请选择要进行的操作:\n");
	printf("********************\n");
	printf("**按1 录入学生信息**\n");
	printf("**按2 修改学生信息**\n");
	printf("**按3 输出学生信息**\n");
	printf("**按4 删除学生信息**\n");
	printf("**按5 查找学生信息**\n");
	printf("**按6 添加学生信息**\n");
	printf("**按7 按学生学号排序**\n");
	printf("**按8 按学生姓名排序**\n");
	printf("**按9 按学生绩点排序**\n");
	printf("**按0 按学生年龄排序**\n");
	printf("**********************\n");

	while(1)
	{
M:		printf("请输入要进行的操作的序号:");
		scanf("%d",&Item);
		switch(Item)
		{
		case 1:			//录入学生信息
			{
				system("cls");
				num=Num();
				p=Input(pArr,num);
			}
			break;
		case 2:			//修改学生信息
			{
				system("cls");
				Change(p,num);
			}
			break;
		case 3:			//输出学生信息
			{
				system("cls");
				Output(p,num);
			}
			break;
		case 4:			//删除学生信息
			{
				system("cls");
				Delete(p,num);
			}
			break;
		case 5:			//查找学生信息
			{
				system("cls");
				Search(p,num);
			}
			break;
		case 6:			//添加学生信息
			{
				system("cls");
				Add(p,num);
			}
			break;
		case 7:			//按学生学号排序
			{
				system("cls");
				Num1(p,num);
			}
			break;
		case 8:			//按学生姓名排序
			{
				system("cls");
				name(p,num);
			}
			break;
		case 9:			//按学生绩点排序
			{
				system("cls");
				AvgZjd(p,num);
			}
			break;
		case 0:			//按学生学号排序
			{
				system("cls");
				AvgAge(p,num);
			}
			break;
		default:
			{
				printf("输入错误请从新输入!");
				goto M;
			}
		}
	}
	return 0;
}

int Num(void)			//学生人数
{
	printf("请输入学生人数:");
	scanf("%d",&num);
	return num;
}

struct Student* Input(struct Student *pArr,int length)			//录入学生信息
{
	pArr=(struct Student*)malloc(length*sizeof(struct Student));		//学生信息分配内存
	int i;
	for (i=0;i<length;i++)
	{
		printf("请输入第%d个学生的学号\t\t姓名\t性别\t年龄\t绩点:\n\t\t",i+1);		//输入学生信息
		scanf("%lf%s%s%d%f",&pArr[i].Num1,pArr[i].name,pArr[i].sex,&pArr[i].age,&pArr[i].jd);
	}
	return pArr;
}

void Change(struct Student *pArr,int length)		//修改学生信息
{
	char name[9];
	printf("请输入需要修改学生的姓名:");
	scanf("%s",name);
	int i,num;
	for(i=0;i<length;i++)
	{
		if(0==strcmp(pArr[i].name,name))		//查找编号
		{
			num=i;
		}
	}
		printf("请输入第%d个学生的学号\t\t姓名\t性别\t年龄\t绩点:\n\t\t",i+1);		//输入学生信息
		scanf("%lf%s%s%d%f",&pArr[i].Num1,pArr[i].name,pArr[i].sex,&pArr[i].age,&pArr[i].jd);

		Output(pArr,length);		//输出学生信息
}

void Output(struct Student *pArr,int length)			//输出学生信息
{
	int i;
	printf("学号\t\t姓名\t性别\t年龄\t绩点\n");
	for(int i=0;i<length;i++)
	{
		printf("%.0lf\t%s\t%s\t%d\t%0.2f\n",pArr[i].Num1,pArr[i].name,pArr[i].sex,pArr[i].age,pArr[i].jd);
	}
}

void Delete(struct Student *pArr,int length)			//删除学生信息
{
	int i,num;
	char name[9];
	printf("输入想要删除学生信息的姓名:");
	scanf("%s",name);
	for(i=0;i<length;i++)								//学生编号
	{
		if(0==strcmp(pArr[i].name,name))
		{
			num=i;
		}
	}

	for(i=num;i<length;i++)
{
	pArr[i-1]=pArr[i];
}
Output(pArr,length-1);
}

void Search(struct Student *pArr,int length)			//查找学生的信息
{
	int i,num;
	char name[9];
	printf("请输入需要查找的学生的姓名:");
	scanf("%s",name);
	for(i=0;i<length;i++)
	{
		if(0==strcmp(pArr[i].name,name))
		{
			num=i;
		}
	}
	Output(&pArr[num],1);
}

void Add(struct Student *pArr,int length)			//增加学生的信息
{
	int num,i;
	printf("请输入要添加学生信息的人数:");
	scanf("%d",&num);
	struct Student *p=NULL;		//给分配num个内存空间
	p=(struct Student*)malloc(sizeof(struct Student)*num);
	for(i=0;i<num;i++)
		{
			printf("学号\t\t姓名\t性别\t年龄\t绩点\n");
			scanf("%lf\t%s\t%s\t%d\t%f\n",&pArr[i].Num1,pArr[i].name,pArr[i].sex,&pArr[i].age,&pArr[i].jd);
		}
			Output(pArr,length);
		Output(p,num);
}

void AvgAge(struct Student *pArr,int length)			//对学生年龄的排序
{
	struct Student temp;		//中间变量
	for(int i=0;i<length-1;i++)		//冒泡排序
	{
		for(int j=0;j<length;j++)
		{
		
			if(pArr[j].age<pArr[j+1].age)		//对年龄排序
			{
			temp=pArr[j];
			pArr[j]=pArr[j+1];
			pArr[j+1]=temp;
			}
		}
	}
	Output(pArr,length);			//排序后的结果
}

void AvgZjd(struct Student *pArr,int length)		//对绩点的排序
{
	int j;
	struct Student temp;		//中间变量
	for(int i=0;i<length-1;i++)		//冒泡排序
	{
		for(int j=0;j<length;j++)
		{
		
			if(pArr[j].jd<pArr[j+1].jd)		//对绩点排序
			{
			temp=pArr[j];
			pArr[j]=pArr[j+1];
			pArr[j+1]=temp;
			}
		}
	}
	Output(pArr,length);			//排序后的结果
}

void name(struct Student *pArr,int length)			//对姓名排序
{
	struct Student temp;		//中间变量
	for(int i=0;i<length-1;i++)		//冒泡排序
	{
		for(int j=0;j<length;j++)
		{
		
			if(pArr[j].name<pArr[j+1].name)		//对姓名排序
			{
			temp=pArr[j];
			pArr[j]=pArr[j+1];
			pArr[j+1]=temp;
			}
		}
	}
	Output(pArr,length);			//排序后的结果
}

void Num1(struct Student *pArr,int length)			//对学号排序
{
	struct Student temp;		//中间变量
	for(int i=0;i<length-1;i++)		//冒泡排序
	{
		for(int j=0;j<length;j++)
		{
		
			if(pArr[j].Num1<pArr[j+1].Num1)		//对学号排序
			{
			temp=pArr[j];
			pArr[j]=pArr[j+1];
			pArr[j+1]=temp;
			}
		}
	}
	Output(pArr,length);			//排序后的结果
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值