数据结构实验--学生成绩管理,要求建立学生成绩表,用单链表实现

2024-11-08 01:43:14
推荐回答(1个)
回答(1):

#include
#include
#include
typedef struct
{
char name[20];
char num[10];
float score;
}Grade;
typedef struct Lnode
{
Grade mark;
struct Lnode *next;
}Lnode,*Linklist;
Linklist create()
{
int flag=1;
Linklist p,head;
head=NULL;
while(flag!=0)
{
p=(Linklist)malloc(sizeof(Lnode));
printf("请输入学生的姓名、学生的学号以及学生的成绩\n");
scanf("%s%s%f",p->mark.name,p->mark.num,&p->mark.score);
fflush(stdin);
p->next=head;
head=p;
printf("请输入flag的值,为0或者为1,0代表结束输入、1代表继续输入\n");
scanf("%d",&flag);
fflush(stdin);
}
return head;
}
void output(Linklist head)
{
Linklist p;
p=(Linklist)malloc(sizeof(Lnode));
printf("学生姓名、学号、成绩分别为:\n");
for(p=head;p!=NULL;p=p->next)
printf("%s %s %.2f\n",p->mark.name,p->mark.num,p->mark.score);
}
void search(Linklist head,char *num)
{
Linklist p;
p=(Linklist)malloc(sizeof(Lnode));
for(p=head;p!=NULL && strcmp(p->mark.num,num)!=0;p=p->next);
printf("查询的结果为\n");
printf("%s %s %.2f\n",p->mark.name,p->mark.num,p->mark.score);
}
void insert(Linklist head,Grade mark,char *num)//在学号num之前插入一条学生成绩记录
{
Linklist p,q;
p=(Linklist)malloc(sizeof(Lnode));
q=(Linklist)malloc(sizeof(Lnode));
for(p=head;p!=NULL && strcmp(p->next->mark.num,num)!=0;p=p->next);
strcpy(q->mark.name,mark.name);
strcpy(q->mark.num,mark.num);
q->mark.score=mark.score;
q->next=p->next;
p->next=q;
}
void delet(Linklist head,char *num)
{
Linklist p;
p=(Linklist)malloc(sizeof(Lnode));
for(p=head;p!=NULL && strcmp(p->next->mark.num,num)!=0;p=p->next);
p->next=p->next->next;
}
void main()
{
Linklist head;
Grade mark;
head=(Linklist)malloc(sizeof(Lnode));
head=NULL;
head=create();
printf("请输入姓名、学号、成绩");
scanf("%s%s%f",mark.name,mark.num,&mark.score);
output(head);
search(head,"03");
insert(head,mark,"02");
output(head);
delet(head,"03");
output(head);
}