#include <myhead.h>
typedef struct
{
char name[30];
int id;
int score;
int len;
}head,*head_p;
void insert(head_p p,int n)
{
int i=0;
while(1)
{
printf("请输入第%d个学生姓名\n",i+1);
scanf("%s",(p+i)->name);
printf("请输入第%d个学生学号\n",i+1);
scanf("%d",&(p+i)->id);
printf("请输入第%d个学生成绩\n",i+1);
scanf("%d",&(p+i)->score);
(p+i)->len=n;
if(++i==n){return;}
}
}
void show(head_p p)
{
for(int i=0;i<p->len;i++)
{
printf("姓名:%s 学号:%d 成绩:%d \n",(p+i)->name,(p+i)->id,(p+i)->score);
}
}
void del(head_p p,int num)
{
int n=p->len;
if(num>n)
{
printf("此位置还没有学生登记无法删除\n");
return;
}
for(int i=0;i<n;i++)
{
if(i==num-1)
{
for(int j=i;j<n;j++)
{
if(num==n)
{
for(int k=0;k<n-1;k++)
{
(p+i)->len-=1;
}
return;
}
strcpy( (p+i)->name,(p+i+1)->name);
(p+i)->id=(p+i+1)->id;
(p+i)->score=(p+i+1)->score;
}
}
(p+i)->len-=1;
}
}
void change_n(head_p p,int num,char *data)
{
int n=p->len;
if(num>n)
{
printf("所在位置没有学生信息无法修改\n");
return;
}
for(int i=0;i<n;i++)
{
if(i==num-1)
{
strcpy((p+i)->name,data);
return;
}
}
}
void change_i(head_p p,int num,int data)
{
int n=p->len;
if(num>n)
{
printf("所在位置没有学生信息无法修改\n");
return;
}
for(int i=0;i<n;i++)
{
if(i==num-1)
{
(p+i)->id=data;
return;
}
}
}
void change_S(head_p p,int num,int data)
{
int n=p->len;
if(num>n)
{
printf("所在位置没有学生信息无法修改\n");
return;
}
for(int i=0;i<n;i++)
{
if(i==num-1)
{
(p+i)->score=data;
return;
}
}
}
void see(head_p p,int num)
{
int n=p->len;
if(num>n)
{
printf("所在位置没有学生信息\n");
return;
}
for(int i=0;i<n;i++)
{
if(i==num-1)
{
printf("姓名:%s 学号:%d 成绩:%d \n",(p+i)->name,(p+i)->id,(p+i)->score);
}
}
}
int main(int argc, const char *argv[])
{
head stu[100];
//head_p p=stu;
printf("请输入要增加学生的个数:\n");
int n;
scanf("%d",&n);
printf("请输入你要增加的学生信息\n");
insert(stu,n);
show(stu);
printf("请问你要删除第几个学生信息\n");
int num;
scanf("%d",&num);
del(stu,num);
show(stu);
printf("请问你要修改第几个学生的信息\n");
int num2;
scanf("%d",&num2);
while(getchar()!='\n');
while(1)
{
while(getchar()!='\n');
printf("请输入你要修改的信息:N 名字,I 学号,S 成绩,Q修改完成,B不修改\n");
char str;
char name2[30];
int id2,sco;
scanf("%c",&str);
switch(str)
{
case 'N':
printf("请输入新的名字\n");
scanf("%s",name2);
change_n(stu,num2,name2); break;
case 'I':
printf("请输入新的学号\n");
scanf("%d",&id2);
change_i(stu,num2,id2);break;
case 'S':
printf("请输入新的成绩\n");
scanf("%d",&sco);
change_S(stu,num2,sco);break;
default :
printf("输入错误,请重新输入\n");break;
}
if(str=='Q'|str=='B')break;
}
show(stu);
printf("请输入你要查看的学生信息位置\n");
int num3;
scanf("%d",&num3);
see(stu,num3);
return 0;
}