t");//是否继续录入 }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的专栏
|