#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); //排序后的结果
}