p->data.total=p->data.egrade + p->data.cgrade + p->data.mgrade; *计算总分*
p->data.ave=(float)(p->data.total3); *计算平均分* p->data.mingci=0;
p->next=NULL; *表明这是链表的尾部结点* r->next=p; *将新建的结点加入链表尾部中* r=p;
saveflag=1; *在main()有对该全局变量的判断,若为1,则进行存盘操作* } return ; }
void Qur(Link l) *按学号或姓名,查询学生记录* {
int select; *1:按学号查,2:按姓名查,其他:返回主界面(菜单)* char searchinput[20]; *保存用户输入的查询内容* Node *p;
if(!l->next) *若链表为空* {
system(\
printf(\ getchar(); return; }
system(\
printf(\ =====>1 Search by number =====>2 Search by name\\n\
printf(\ please choice[1,2]:\ scanf(\ if(select==1) *按学号查询* {
stringinput(searchinput,10,\
p=Locate(l,searchinput,\在l中查找学号为searchinput值的节点,并返回节点的指针*
if(p) *若p!=NULL* {
printheader(); printdata(p); printf(END);
printf(\ getchar(); } else
Nofind(); getchar(); }
else if(select==2) *按姓名查询* {
stringinput(searchinput,15,\ p=Locate(l,searchinput,\ if(p) {
printheader(); printdata(p); printf(END);
printf(\ getchar(); } else
Nofind(); getchar(); } else
Wrong(); getchar(); }
void Del(Link l) *删除学生记录:先找到保存该学生记录的节点,然后删除该节点* {
int sel; Node *p,*r; char findmess[20]; if(!l->next) {
system(\
printf(\ getchar();
return; }
system(\ Disp(l);
printf(\ =====>1 Delete by number =====>2 Delete by name\\n\
printf(\ please choice[1,2]:\ scanf(\ if(sel==1) {
stringinput(findmess,10,\ p=Locate(l,findmess,\ if(p) *p!=NULL* { r=l;
while(r->next!=p) r=r->next;
r->next=p->next;*将p所指节点从链表中去除* free(p); *释放内存空间*
printf(\ getchar(); saveflag=1; } else
Nofind();

