}while(getchar()=='\n');
}
//更新
void update(StudentList *&stuList)
{
StudentList *p = stuList->next;
char no[4];//3位学号,如用户输入4~位学号,这里关于越界的问题,大家自己处理
fflush(stdin);//还是先清空缓冲区
puts("please input student No: ");
gets(no);
//显示当前学号的学生数据
if(p==NULL)
{
puts("there is no record,please insert!!");
puts("press any key to return!!!");
getchar();
return;
}
else
{
while(p!=NULL)
{
if(!strcmp(p->no,no)){//如果查找到,则进行显示
puts("NO\tNAME\tChinese\tMath\tEnglish");
printf("%s\t%s\t%d\t%d\t%d\n",p->no,p->name,p->chinese,p->math,p->english);
break;
}
else{
p = p->next;
}
}
if(p==NULL)//未找到
{
puts("can't find this student's record!!!");
puts("press any key to return!!!");
getchar();
return;
}
}
//只能这样简单的更新了,喜欢的自己改进
puts("please update student data(Name,Chinese,Math,English):");
scanf("%10s",&p->name);
scanf("%d%d%d",&p->chinese,&p->math,&p->english);
fflush(stdin);
puts("update successful,press any key to return!!!");
getchar();
}
//删除数据
void deleteData(StudentList *stuList)
/* 前面这个部分和更新差不多,只是指针有变化,因为需要删除,
比如 a->b->c,要删除b,则需要a->c后,才free(b),
操作就是a->next=b->next
*/
StudentList *p = stuList,*q;
char no[4];//3位学号,如用户输入4~位学号,这里关于越界的问题,大家自己处理
fflush(stdin);//还是先清空缓冲区
puts("please input student No: ");
gets(no);
//显示当前学号的学生数据
if(p->next==NULL)
{
puts("there is no record !!!");
puts("press any key to return!!!");
getchar();
return;
}
else
{
while(p->next!=NULL)
{
if(!strcmp(p->next->no,no)){//如果查找到,则进行显示
puts("NO\tNAME\tChinese\tMath\tEnglish");
printf("%s\t%s\t%d\t%d\t%d\n",p->next->no,p->next->name,p->next->chinese,p->next->math,p->next->english);
break;
}
else{
p = p->next;
}
}
if(p->next==NULL)//未找到
{
puts("can't find this student's record!!!");
puts("press any key to return!!!");
getchar();
return;
}
}
puts("Are you sure delete this record press ENTER to confirm or other key to cancel!!!");
if(getchar()=='\n')//删除操作,如果这步不懂,大家可以去GOOGLE OR BAIDU链表的删除操作
{
q = p->next;
p->next = q->next;
free(q);//释放内存
}
puts("delete successful,press any key to return!!!");
getchar();
}
摘自 mzlqh的专栏