2,184
社区成员




#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct NODELIST
{
char name[20];
int number;
int math;
int eng;
struct NODELIST* next;
}NODE;
typedef NODE* LIST;
void add(NODE* head);
void print(NODE* head);
void del(NODE* head);
void main()
{
NODE* head=(NODE*)malloc(sizeof(NODE));
int selection;
int running=1;
if(head==NULL)
return;
head->next=NULL;
while(running)
{
selection=0;//需要将selection的值重置 以免给它赋予一个字母别的什么的时候 selection保持上一操作的值
printf("1 添加学生信息\n2 删除学生信息\n3 打印所有学生信息\n4 退出\n请选择:");
fflush(stdin);
scanf("%d",&selection);
switch(selection)
{
case 1:
{
add(head);
break;
}
case 2:
{
del(head);
break;
}
case 3:
{
print(head);
break;
}
case 4:
{
running=0;
break;
}
default:
break;
}
}
// free(head);
}
void add(NODE *head)
{
NODE* temp=(NODE*)malloc(sizeof(NODE));
NODE* tempnext;
NODE* node=head;
temp->next=NULL;
// NODE* temp;
if(temp==NULL)
return;
tempnext=node->next;
while(tempnext!=NULL)
{
// temp=(NODE*)malloc(sizeof(NODE));
tempnext=tempnext->next;
node=node->next;
}
tempnext=temp;
printf("请输入学生姓名 学号 数学和英语成绩(中间用分号隔开)\n");
scanf("%s %d %d %d",tempnext->name,&tempnext->number,&tempnext->math,&tempnext->eng);
node->next=tempnext;
// free(temp);
}
void print(NODE* head)
{
NODE* temp;
temp=(head)->next;
while(temp!=NULL)
{
printf("%s %d %d %d\n",temp->name,temp->number,temp->math,temp->eng);
temp=temp->next;
}
}
void del(NODE* head)
{
NODE* temp;
// NODE* tempnext;
char name[20];
int i=0;
int flag=0;
temp=head;//为何传递不进来头指针
printf("请输入你想要删除的学生姓名:");
scanf("%s",name);
while(temp!=NULL)
{
flag=0;
if(strlen((temp->next)->name)==strlen(name))
for(i=0;i<strlen((temp->next)->name);i++)
if((temp->next)->name[i]!=name[i])
{
flag=0;
break;
}
else
flag=1;
if(flag)
{
temp->next=temp->next->next;
break;
}
temp=temp->next;
}
}