{ printf(\ flag1=1; }
a = q->ptr.tp; flag2 = 0;
while(TRUE) /* 本科生范畴 */ {
if(a == NULL) break; if(flag2) printf(\ else { printf(\ flag2 = 1; }
a = a->ptr.hp; }
if(flag2) printf(\
if(q->type==1 ||( q->ptr.hp==NULL)) printf(\ q = q->ptr.hp; }
printf(\ p = p->ptr.hp; }
printf(\}
GList *StudentInsert(GList *head)/* 插入学生 */ {
char slen[100],teacher[100],graduate[100]; GList *Slen,*p,*q; int i,j; p = head;
printf(\请输入待插入学生信息,如:李刚-二班-1\\n\ scanf(\
if(!(Slen =(GList *)malloc(sizeof(GList)))) exit(1);
for(i=0,j=0;slen[i] != '-';)
Slen->name[j++] = slen[i++]; Slen->name[j] = '\\0'; for(j=0,++i;slen[i] != '-';)
Slen->prof[j++] = slen[i++];
Slen->prof[j] = '\\0';
Slen->type = slen[++i] - 48;
Slen->ptr.hp = Slen->ptr.tp = NULL; if(Slen->type==2) { printf(\请输入所属导师:\\n\ scanf(\ while(strcmp(p->name,teacher)) { p = p->ptr.hp; if(p == NULL) break; } if(p == NULL) printf(\不存在此导师!\\n\ else { if(p->ptr.tp==NULL||p->ptr.tp->type==2) { Slen->ptr.hp=p->ptr.tp; p->ptr.tp=Slen; printf(\插入成功!\\n\ } else { printf(\请输入所属研究生:\\n\ scanf(\ q = p->ptr.tp; while(strcmp(q->name,graduate)) { q = q->ptr.hp; if(q == NULL) break; } if(q == NULL) printf(\该研究生不存在,不能插入!\\n\ else { Slen->ptr.hp = q->ptr.tp; q->ptr.tp = Slen; printf(\插入成功!\\n\ } } } } else
{ printf(\请输入所属导师:\\n\ scanf(\ while(strcmp(p->name,teacher)) { p = p->ptr.hp; if(p == NULL) break; } if(p == NULL) printf(\不存在此导师!\\n\ else { if(p->ptr.tp==NULL||p->ptr.tp->type==1) { Slen->ptr.hp=p->ptr.tp; p->ptr.tp=Slen; printf(\插入成功!\\n\ } else { Slen->ptr.tp = p->ptr.tp;/* printf(\该导师只能带本科生,因此不能将研究生插入!\\n\ p->ptr.tp = Slen; } } }
printf(\ return head; }
GList *StudentDelete(GList *head)/* 删除学生 */ {
char slen[100];
GList *Slen,*p,*q,*a,*m; int i,j;
int flag =FALSE;/* 标记是否删除成功 */ char ch; p = head;
printf(\请输入待删除学生信息,如:李刚-二班-1\\n\ scanf(\
if(!(Slen =(GList *)malloc(sizeof(GList)))) exit(1); for(i=0,j=0;slen[i] != '-';)
Slen->name[j++] = slen[i++]; Slen->name[j] = '\\0'; for(j=0,++i;slen[i] != '-';)
Slen->prof[j++] = slen[i++]; Slen->prof[j] = '\\0';
Slen->type = slen[++i] - 48; if(Slen->type == 2) {
while(p != NULL&&flag==FALSE) {
q = p->ptr.tp; if(q->type==2) {m=q;
while(q!=NULL&&flag==FALSE)
{if(!strcmp(q->name,Slen->name)&& !strcmp(q->prof,Slen->prof)) {printf(\是否要删除这名本科学生:\\n\ printf(\学生:%6s %6s ,师:%6s %6s\\n\
printf(\删除,n不删除\\n\ scanf(\
if(ch == 'y' || ch == 'Y') {if(p->ptr.tp==q)
p->ptr.tp=q->ptr.hp; else
m->ptr.hp=q->ptr.hp; free(q); /* 释放q */ printf(\删除成功!\\n\ }
flag=TRUE; } else
{m=q;q=q->ptr.hp;} }}
else if(q->type==1)
while(q != NULL&&flag==FALSE) {
a = q->ptr.tp; m=a;
while(a != NULL&&flag==FALSE)
{if(!strcmp(a->name,Slen->name)&& !strcmp(a->prof,Slen->prof)) {printf(\是否要删除这名学生:\\n\
printf(\学生:%6s %6s\\n\ printf(\导师:%6s %6s\\n\ printf(\研究生:%6s %6s\\n\ printf(\删除,n不删除\ getchar();
scanf(\
导
if(ch == 'y' || ch == 'Y') {if(q->ptr.tp==a)
q->ptr.tp=a->ptr.hp; else
m->ptr.hp=a->ptr.hp; free(q);/* 释放q */ printf(\删除成功!\\n\ }
flag=TRUE; } else
{m=a;a=a->ptr.hp;} }
q = q->ptr.hp; }
p = p->ptr.hp; } } else {
while(p != NULL&&flag==FALSE) {
q = p->ptr.tp; m=q;
while(q != NULL&&flag==FALSE) {
if(!strcmp(q->name,Slen->name) && !strcmp(q->prof,Slen->prof)) if(q->ptr.tp != NULL)
{printf(\研究生下面有本科生,如果想删除,需先把本科生移到其他研究生组才可以!\\n\ else
{printf(\是否要删除这名研究生:\\n\ printf(\研究生:%6s %6s ,导师:%6s %6s\\n\ printf(\删除,n不删除\ getchar();
scanf(\
if(ch == 'y' || ch == 'Y') {if(p->ptr.tp==q)
p->ptr.tp=q->ptr.hp; else
m->ptr.hp=q->ptr.hp; free(q);/* 释放q */
printf(\删除成功!\\n\ flag=TRUE;}