链表问题---等待答案!
看看程序,当删除一个后再去查找时或再去删除时出现问题,关键看看search()
#include"iostream.h"
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define NULL 0
struct student
{
long stunumber;
char stuname[6];
char stusex[2];
int stuscor;
struct student *next;
};
struct student *head,*p,*q;
int i,j,flag;
long number;
char name[6];
char w[6]={"a"};
char sex[2];
int scor,n;
void rigist()
{
head=NULL;
q=NULL;
number=201;
flag=0;
// q=(struct student *)malloc(sizeof(struct student));
for(i=0;i<=100;i++)
{
p=(struct student *)malloc(sizeof(struct student));
cout<<"学号:"<<number<<endl;
p->stunumber=number;
cout<<"姓名:";
cin>>name;
if(strcmp(name,w)==0)
break;
strcpy(p->stuname,name);
cout<<"性别:";
cin>>sex;
strcpy(p->stusex,sex);
cout<<"分数:";
cin>>scor;
p->stuscor=scor;
if(head==NULL)
{
head=p;
q=head;
}
else
{
q->next=p;
q=q->next;
}
p->next=NULL;
number=number+1; //完成学号自加
flag++; //记录学生个数
}
n=number-1; //记录学号以便后面检索
}
void print()
{
cout<<"学号 姓名 性别 分数"<<endl;
q=head;
for(i=0;i<flag;i++)
{
if(q!=NULL)
{
cout<<q->stunumber<<" "<<q->stuname<<" "<<q->stusex<<" "<<q->stuscor<<endl;
q=q->next;
}
}
}
void search()
{
if(head==NULL)
{
cout<<"系统没有记录可查!"<<endl;
return;
}
cout<<"请输入你要查找的学号:";
q=head;
j=0;
cin>>number;
if((number>n)||(number<head->stunumber))//完成不在学号内的检索
cout<<"没有你要查的人"<<endl;
else
{
for(i=0;i<=flag;i++)
{
if(number==q->stunumber)
{
j=1; //标志变量,标志找到要找的学生,若为0则没有要找的学生
break;
}
else
{
q=q->next;
}
}
if(j=1)
{
cout<<number<<"已经找到"<<endl;
cout<<j<<"你要查询的学号:"<<q->stunumber <<" 姓名:"<< q->stuname<<" 分数:"<<q->stuscor<<endl ;
}
else
cout<<j<<number<<"不存在"<<endl;
}
}
void sort()
{
}
void insert()
{
}
void del()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((number<head->stunumber)||(number>n))
cout<<"不存在!"<<endl;
else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
for(i=0;i<=flag;i++)
{
if(number!=q->stunumber)
{
p=q;
q=q->next;
}
else
break;
}
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
void del1()
{
q=head;
cout<<"请输入你要删掉的学号:";
cin>>number;
if((number<head->stunumber)||(number>n))
cout<<"不存在!"<<endl;
else
{
if(number==head->stunumber)
{
head=q->next;
cout<<q->stunumber<<"的所有信息已经删除"<<endl;
free(q);
}
else
{
while(number!=q->stunumber)
{
p=q;
q=q->next;
}
cout<<q->stunumber<<"已经删除"<<endl;
p->next=q->next;
q->stunumber=0;
free(q);
flag=flag-1;
}
}
}
void main()
{
char c;
a:
cout<<"\t\t\t※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t\t\t※ 欢迎使用学生记录管理系统 ※"<<endl;
cout<<"\t\t\t※ 学生情况登记:r ※"<<endl;
cout<<"\t\t\t※ 插入学生情况:i ※"<<endl;
cout<<"\t\t\t※ 打印登记表 :p ※"<<endl;
cout<<"\t\t\t※ 删除表中记录:d ※"<<endl;
cout<<"\t\t\t※ 保存登记文件:s ※"<<endl;
cout<<"\t\t\t※※※※※※※※※※※※※※※※※※※※※※"<<endl;
cout<<"\t\t\t选择你要的操作:";
cin>>c;
// getchar();
switch(c)
{
case 'r':
rigist();
goto a;
case 'p':
print();
goto a;
case 'i':
insert();
goto a;
case 'd':
del();
goto a;
case 's':
search();
goto a;
default:
return ;
}
}