//输入学生信息后,凡是删除第一个学生的信息程序都会崩溃??
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define LEN sizeof(struct Student)
struct Student //完全可以把结构当成类,只是访问权限不一样
{
long num;//学号
char name[20];//姓名
char sex[10];//性别
int age;//年龄
char phone[11];//电话
struct Student *next;
struct Student *pre;//双向动态不熟悉?
};
struct Student *curr,*head=NULL,*last;
void creat(void)
{
while(1)
{
curr=(struct Student *)new Student();
cout<<"请输入学生学号"<<endl;
cin>>curr->num;
cout<<"请输入学生姓名"<<endl;
cin>>curr->name
cout<<"请输入学生性别"<<endl;
cin>>curr->sex;
cout<<"请输入学生年龄"<<endl;
cin>>curr->age;
cout<<"请输入学生电话"<<endl;
cin>>curr->phone;
if(head==NULL){
head=curr;
last=curr;
curr->pre=NULL;
curr->next=NULL;
}else{
last->next=curr;
curr->next=NULL;
curr->pre=last;
last=curr;
}
cout<<"请选择操作,1表示继续录入,2表示结束"<<endl;
int b;
cin>>b;
if(b==1)continue;
else break;
}
}
void print(int num)//链表的print函数,以结构体指针为参数
{
curr=head;
int a=0;
while(curr)
{
if(curr->num==num)
{
cout<<"学号"<<curr->num<<endl;
cout<<"姓名"<<curr->name<<endl;
cout<<"性别"<<curr->sex<<endl;
cout<<"年龄"<<curr->age<<endl;
cout<<"电话"<<curr->phone<<endl;
a=1;
break;
}
curr=curr->next;
}
if(a==0)
{
cout<<"查无此人"<<endl;
}
}
void Delete(int num)
{
curr=head;
while(curr)
{
if(curr->num==num)
{
(curr->pre)->next = curr->next;
free(curr);
}
else
{
curr=curr->next;
}
}
cout<<"已经删除学生信息"<<endl;
}
int main()
{
// head=creat();//返回第一个结点的地址
while(1)
{
cout<<"请选择你的操作"<<endl;
cout<<"1:学生信息录入"<<endl;
cout<<"2:学生信息查询"<<endl;
cout<<"3:请输入删除学生的学号"<<endl;
cout<<"4:退出"<<endl;
int choice=0;
cin>>choice;//输入选择
if(choice==1)
{
cout<<"请输入学生的信息"<<endl;
creat();//返回第一个结点的地址
}
if(choice==2)
{
cout<<"请输入你查询的学生的学号"<<endl;
int a ;
cin>>a ;
print(a);
}
if(choice==3)
{
cout<<"请输入你想要删除学生的学号"<<endl;
int a;
cin>>a;
Delete(a) ;
}
if(choice==4)
break;
}
return 0;
};