求讲解代码,我很多都不懂,QQ2513348408
#include <stdio.h>#include <malloc.h>
#include <string.h>
struct Student
{
char xuehao[100];
char name[100];
char sex[100];
int age;
float score;
};
void menu(int *n)
{
printf("\t\t\t------------------------------------------------\n");
printf("\t\t\t\t\t1.创建数据\n");
printf("\t\t\t\t\t2.添加数据\n");
printf("\t\t\t\t\t3.删除数据\n");
printf("\t\t\t\t\t4.查找数据\n");
printf("\t\t\t\t\t5.按成绩进行排序\n");
printf("\t\t\t\t\t6.退出\n");
printf("\t\t\t------------------------------------------------\n");
printf("请输入数字1-6:");
scanf("%d",n);
}
void scanfstudent(struct Student * p,int len)//输入学生的信息 学号 姓名 性别 年龄 得分
{
int i;
for(i = 0; i < len; i++)
{
printf("请输入第%d学生的信息:\n",i+1);
printf("学号:");
scanf("%s",p[i].xuehao);
printf("姓名:");
scanf("%s",p[i].name);
printf("性别:");
scanf("%s",p[i].sex);
printf("年龄:");
scanf("%d",&p[i].age);
printf("得分:");
scanf("%f",&p[i].score);
printf("\n");
}
}
void printfstudent(struct Student *p,int len)//对学生的信息进行输出
{
int i;
printf("学号\t\t姓名\t\t性别\t\t年龄\t\t分数\n\n");
for (i = 0; i < len; i++)
{
printf("%s\t\t",p[i].xuehao);
printf("%s\t\t",p[i].name);
printf("%s\t\t",p[i].sex);
printf("%d\t\t",p[i].age);
printf("%.2f\n",p[i].score);
}
}
void createdata(struct Student *p,int *len)
{
int n;
printf("请输入学生个数:");
scanf("%d",&n);
scanfstudent(p,n);
*len = n;
printfstudent(p,*len);
}
void add(struct Student *p,int *len)//增加一个学生的信息。并且按照顺序排列
{
// int i,j;
//int pos = 0;
int c = 1;
while(c == 1)
{
int mylen = *len;
struct Student st;
printf("请输入要添加学生的信息:\n");
printf("学号:");
scanf("%s",st.xuehao);
printf("姓名:");
scanf("%s",st.name);
printf("性别:");
scanf("%s",st.sex);
printf("年龄:");
scanf("%d",&st.age);
printf("得分:");
scanf("%f",&st.score);
printf("\n");
p[mylen] = st;
*len = mylen+1;
printfstudent(p,*len);
printf("\n");
printf("是否继续添加?输入:\n1.继续\n2.退出\n");
scanf("%d",&c);
}
}
void Sort(struct Student *p,int len)//按照分数从大到小排列选择排序法
{
struct Student st;
int i,j;
for(i = 0; i < len - 1; i++)
{
for(j = i + 1 ; j < len; j++)
if(p[i].score < p[j].score)
{
st = p[i];
p[i] = p[j];
p[j] = st;
}
}
printfstudent(p,len);
}
/*if(myp->score >= p[0].score)//
{
for(i = mylen; i > 0 ; i--)
p[i] = p[i-1];
p[0] = *myp;
}
else if(myp->score <= p[mylen-1].score)
{
p[mylen] = *myp;
}
*/
//else
//{
/*for(i = 0; i < mylen; i++)
{
if(myp->score >= p[i].score)
break;
}
pos = i;
for(j = mylen; j > pos; j--)
{
p[j] = p[j-1];
}
p[pos] = *myp;
*len = mylen+1;
}*/
void del(struct Student *p,int *len)//删除学生的信息
{
int i,j;
char p1[1024];
int c = 1;
while(c == 1)
{
int mylen=*len;
printf("请输入要删除学生的学号:");
scanf("%s",p1);
for(i = 0; i < *len; i++)
{
if(strcmp(p[i].xuehao,p1)==0)
break;
}
if(i == 0)//删除的是第一个元素
{
for(j = 0; j < (*len)-1; j++)
p[j] = p[j+1];
}
else if(i>0 && i<(*len)-1)//删除中间的元素
{
for(j = i;j<(*len) -1;j++)
p[j] = p[j+1];
}
else if(i == (*len)-1)
;
else
printf("error,学号输入有误!\n");
*len =mylen-1;//数组长度减少一个
printfstudent(p,*len);
printf("\n");
printf("是否继续删除?输入:\n1.继续\n2.退出\n");
scanf("%d",&c);
}
}
void serch(struct Student *p,int len)//按学号或者姓名查找学生信息
{
int i,j;
int flat = 0;
char num[100];
char name1[100];
printf("请输入1或2,1按学号查找,2按姓名查找:");
scanf("%d",&i);
if(i == 1)
{
printf("请输入要查找的学号:");
scanf("%s",num);
for(j = 0; j <len; j++)
{
if(strcmp(p[j].xuehao,num) == 0)
{
flat ++;
break;
}
}
if(!flat)
{
printf("学号输入有误!\n");
}
else
{
printf("学号:%s,姓名:%s,性别:%s,年龄:%d,得分:%.2f\n",p[j].xuehao,p[j].name,p[j].sex,p[j].age,p[j].score);
}
}
else if(i == 2)
{
flat = 0;
printf("请输入要查找的姓名:");
scanf("%s",name1);
for(j = 0; j <len; j++)
{
if(strcmp(p[j].name,name1) == 0)
{
flat ++;
printf("学号:%s,姓名:%s,性别:%s,年龄:%d,得分:%.2f\n",p[j].xuehao,p[j].name,p[j].sex,p[j].age,p[j].score);
break;
}
}
if(!flat)
{
printf("姓名输入有误!\n");
}
}
}
/*int main(void)
{
int len;
int c;
// char c;
// char xuehao11[1024];
// struct Student *p;
//静态构造结构数组
struct Student p[1024];
printf("请输入学生的个数:");
scanf("%d",&len);
// p = (struct Student*)malloc(sizeof(struct Student)*len);动态构造一个结构数组
scanfstudent(p,len);
Sort(p,len);
printfstudent(p,len);
do
{
struct Student st;
printf("\n请输入增加的学生的信息:\n");
printf("学号:");
scanf("%s",st.xuehao);
printf("姓名:");
scanf("%s",st.name);
printf("性别:");
scanf("%s",st.sex);
printf("年龄:");
scanf("%d",&st.age);
printf("得分:");
scanf("%f",&st.score);
// serch(p,len);
printf("\n");
//printf("请输入要删除的学生的学号:");
printf("\n");
//scanf("%s",xuehao11);
add(p,&st,&len);
// del(p,xuehao11,&len);删除一个学生的信息
printfstudent(p,len);
printf("是否继续添加?\n1:是\n2不添加\n");
scanf("%d",&c);
}
while(c==1);
}*/
int main(void)
{
int n;
struct Student p[1024];
int len = 0;
while(1)
{
menu(&n);
switch(n)
{
case 1:createdata(p,&len);break;
case 2:add(p,&len);break;
case 3:del(p,&len);break;
case 4:serch(p,len);break;
case 5:Sort(p,len);break;
case 6:printf("谢谢您的使用!\n\n");break;
default:printf("输入有误重新输入!\n\n");break;
}
if(n == 6)
break;
}
return 0;
}