#include<iostream.h>
#include<string.h>
#include<stdlib.h>
class List;
class Student
{
public:
friend class List;
private:
Student(){
ID=NULL;
Name=NULL;
Phone=NULL;
Birthday=NULL;
DoorNum=NULL;
HomeID=NULL;
next=NULL;
score1.Maths=0;
score1.English=0;
score1.Physical=0;
}
~Student()
{
delete[] ID;
delete[] Name;
delete[] Phone;
delete[] Birthday;
delete[] DoorNum;
delete[] HomeID;
}
Student *next;
char *ID;//学号
char *Name;//姓名
char *Phone;//电话
char *Birthday;//生日
char *DoorNum;//宿舍号
char *HomeID;//家庭地址
struct score
{
float Maths;//数学
float English;//英语
float Physical;//物理
}score1;
};
class List
{
public:
List(){list=0;}
void print();//输出链表
void insert(char *id,char *name,char *phone,char *birthday,char *doornum,char *homeid,float maths,float english,float physical);//插入链表
void append(char *id,char *name,char *phone,char *birthday,char *doornum,char *homeid,float maths,float english,float physical);//追加链表
void cat(List& lst);//连接链表
int reverse(List& lst);//逆向输出链表
int length();//链表数据项数
int find_ID(char *id);//学号查找
int find_Name(char *name);//姓名查找
int Delete_ID(char *id);//删除数据
int change_ID(char *id,char *name,char *phone,char *birthday,char *doornum,char *homeid,float maths,float english,float physical);//修改数据
private:
Student *end();
Student *list;
};
void List::print()
{
Student *pt=list;
while(pt)
{
if(!(pt->ID))
cout<<" ";
else cout<<pt->ID;
cout<<" ";
if(!(pt->Name))
cout<<" ";
else cout<<pt->Name;
cout<<" ";
if(!(pt->Phone))
cout<<" ";
else cout<<pt->Phone;
cout<<" ";
if(!(pt->Birthday))
cout<<" ";
else cout<<pt->Birthday;
cout<<" ";
if(!(pt->DoorNum))
cout<<" ";
else cout<<pt->DoorNum;
cout<<" ";
if(!(pt->HomeID))
cout<<" ";
else cout<<pt->HomeID;
cout<<" ";
cout<<pt->score1.Maths;cout<<" ";
cout<<pt->score1.English;cout<<" ";
cout<<pt->score1.Physical;cout<<" ";
cout<<endl;
pt=pt->next;
}
if(list==0)
cout<<"empty/n";
}
void List::insert(char *id,char *name,char *phone,char *birthday,char *doornum,char *homeid,float maths,float english,float physical)
{
Student *pt=new Student;
if(id)
{
int len=strlen(id)+1;
pt->ID=new char[len];
strcpy(pt->ID,id);
}
else
pt->ID=NULL;
if(name)
{
int len=strlen(name)+1;
pt->Name=new char[len];
strcpy(pt->Name,name);
}
else
pt->Name=NULL;
if(phone)
{
int len=strlen(phone)+1;
pt->Phone=new char[len];
strcpy(pt->Phone,phone);
}
else
pt->Phone=NULL;
if(birthday)
{
int len=strlen(birthday)+1;
pt->Birthday=new char[len];
strcpy(pt->Birthday,birthday);
}
else
pt->Birthday=NULL;
if(doornum)
{
int len=strlen(doornum)+1;
pt->DoorNum=new char[len];
strcpy(pt->DoorNum,doornum);
}
else
pt->DoorNum=NULL;
if(homeid)
{
int len=strlen(homeid)+1;
pt->HomeID=new char[len];
strcpy(pt->HomeID,homeid);
}
else
pt->HomeID=NULL;
pt->score1.Maths=maths;
pt->score1.English=english;
pt->score1.Physical=physical;
pt->next=list;
list=pt;
}
void List::append(char *id,char *name,char *phone,char *birthday,char *doornum,char *homeid,float maths,float english,float physical)
{
Student *pt=new Student;
if(id)
{
int len=strlen(id)+1;
pt->ID=new char[len];
strcpy(pt->ID,id);
}
else
pt->ID=NULL;
if(name)
{
int len=strlen(name)+1;
pt->Name=new char[len];
strcpy(pt->Name,name);
}
else
pt->Name=NULL;
if(phone)
{
int len=strlen(phone)+1;
pt->Phone=new char[len];
strcpy(pt->Phone,phone);
}
else
pt->Phone=NULL;
if(birthday)
{
int len=strlen(birthday)+1;
pt->Birthday=new char[len];
strcpy(pt->Birthday,birthday);
}
else
pt->Birthday=NULL;
if(doornum)
{
int len=strlen(doornum)+1;
pt->DoorNum=new char[len];
strcpy(pt->DoorNum,doornum);
}
else
pt->DoorNum=NULL;
if(homeid)
{
int len=strlen(homeid)+1;
pt->HomeID=new char[len];
strcpy(pt->HomeID,homeid);
}
else
pt->HomeID=NULL;
pt->score1.Maths=maths;
pt->score1.English=english;
pt->score1.Physical=physical;
if(list==0)
list=pt;
else
(end())->next=pt;
}
Student *List::end()
{
Student *prv,*pt;
for(prv=pt=list;pt;prv=pt,pt=pt->next);
return prv;
}
void List::cat(List& lst)
{
Student *prv=lst.list;
while(prv)
{
append(prv->ID,prv->Name,prv->Phone,prv->Birthday,prv->DoorNum,prv->HomeID,prv->score1.Maths,prv->score1.English,prv->score1.Physical);
prv=prv->next;
}
}
int List::reverse(List &lst)
{
if(list==0)
{
cout<<"empty/n";
return 0;
}
Student *pt,*prv,*tmp;
prv=0;
pt=list;
list=end();
while(pt!=list)
{
tmp=pt->next;
pt->next=prv;
prv=pt;
pt=tmp;
}
list->next=prv;
lst.print();
return 1;
}
int List::length()
{
int m=0;
Student *pt=list;
for(;pt;pt=pt->next,m++);
return m;
}
int List::find_ID(char *id)
{
int m=0;
if(list==0)
{
cout<<"empty/n";
return 0;
}
Student *pt=list;
while(pt)
{
if(strcmp(pt->ID,id)==0)
{
if(!(pt->ID))
cout<<" ";
else cout<<pt->ID;
cout<<" ";
if(!(pt->Name))
cout<<" ";
else cout<<pt->Name;
cout<<" ";
if(!(pt->Phone))
cout<<" ";
else cout<<pt->Phone;
cout<<" ";
if(!(pt->Birthday))
cout<<" ";
else cout<<pt->Birthday;
cout<<" ";
if(!(pt->DoorNum))
cout<<" ";
else cout<<pt->DoorNum;
cout<<" ";
if(!(pt->HomeID))
cout<<" ";
else cout<<pt->HomeID;
cout<<" ";
cout<<pt->score1.Maths;cout<<" ";
cout<<pt->score1.English;cout<<" ";
cout<<pt->score1.Physical;cout<<" ";
cout<<endl;m++;
}
pt=pt->next;
}
if(pt==0&&m==0)
cout<<"查无此人!"<<endl;
return 1;
}
int List::find_Name(char *name)
{
int m=0;
if(list==0)
{
cout<<"empty/n";
return 0;
}
Student *pt=list;
while(pt)
{
if(strcmp(pt->Name,name)==0)
{
if(!(pt->ID))
cout<<" ";
else cout<<pt->ID;
cout<<" ";
if(!(pt->Name))
cout<<" ";
else cout<<pt->Name;
cout<<" ";
if(!(pt->Phone))
cout<<" ";
else cout<<pt->Phone;
cout<<" ";
if(!(pt->Birthday))
cout<<" ";
else cout<<pt->Birthday;
cout<<" ";
if(!(pt->DoorNum))
cout<<" ";
else cout<<pt->DoorNum;
cout<<" ";
if(!(pt->HomeID))
cout<<" ";
else cout<<pt->HomeID;
cout<<" ";
cout<<pt->score1.Maths;cout<<" ";
cout<<pt->score1.English;cout<<" ";
cout<<pt->score1.Physical;cout<<" ";
cout<<endl;m++;
}
pt=pt->next;
}
if(pt==0&&m==0)
cout<<"查无此人!"<<endl;
return 1;
}
int List::Delete_ID(char *id)
{
int m=0;
if(list==0)
{
cout<<"empty/n";
return 0;
}
Student *pt,*prv;
pt=list;
while(pt)
{
if(strcmp(pt->ID,id)==0)
{
m++;
delete[] pt->ID;pt->ID=NULL;
delete[] pt->Name;pt->Name=NULL;
delete[] pt->Phone;pt->Phone=NULL;
delete[] pt->Birthday;pt->Birthday=NULL;
delete[] pt->DoorNum;pt->DoorNum=NULL;
delete[] pt->HomeID;pt->HomeID=NULL;
if(pt==list)
list=pt->next;
else if(pt==end())
prv->next=NULL;
else
prv->next=pt->next;
}
prv=pt;
pt=pt->next;
}
if(pt==0&&m==0)
cout<<"查无此人!"<<endl;
return 1;
}
int List::change_ID(char *id,char *name,char *phone,char *birthday,char *doornum,char *homeid,float maths,float english,float physical)
{
int m=0;
if(list==0)
{
cout<<"empty/n";
return 0;
}
Student *pt=list;
while(pt)
{
if(strcmp(pt->ID,id)==0)
{
m++;
if(pt->Name)
{
delete[] pt->Name;
pt->Name=NULL;
if(name)
{
int len=strlen(name)+1;
pt->Name=new char[len];
strcpy(pt->Name,name);
}
}
if(pt->Phone)
{
delete[] pt->Phone;
pt->Phone=NULL;
if(phone)
{
int len=strlen(phone)+1;
pt->Phone=new char[len];
strcpy(pt->Phone,phone);
}
}
if(pt->Birthday)
{
delete[] pt->Birthday;
pt->Birthday=NULL;
if(birthday)
{
int len=strlen(birthday)+1;
pt->Birthday=new char[len];
strcpy(pt->Birthday,birthday);
}
}
if(pt->DoorNum)
{
delete[] pt->DoorNum;
pt->DoorNum=NULL;
if(doornum)
{
int len=strlen(doornum)+1;
pt->DoorNum=new char[len];
strcpy(pt->DoorNum,doornum);
}
}
if(pt->HomeID)
{
delete[] pt->HomeID;
pt->HomeID=NULL;
if(homeid)
{
int len=strlen(homeid)+1;
pt->HomeID=new char[len];
strcpy(pt->HomeID,homeid);
}
}
pt->score1.Maths=maths;
pt->score1.English=english;
pt->score1.Physical=physical;
cout<<endl;
}
pt=pt->next;
}
if(pt==0&&m==0)
cout<<"查无此人!"<<endl;
return 1;
}
void main()
{
char name[20]={'/0'},id[20]={'/0'},birthday[20]={'/0'},doornum[20]={'/0'},homeid[20]={'/0'},phone[20]={'/0'};
float maths=0,english=0,physical=0;
List lst1,lst2;
int m,t(1);
cout<<"向表1中输入数据按0:"<<endl;
cout<<"追加数据按1:"<<endl;
cout<<"逆向输出数据按2:"<<endl;
cout<<"查询库中学生人数按3:"<<endl;
cout<<"根据学号查询学生按4:"<<endl;
cout<<"根据姓名查询学生按5:"<<endl;
cout<<"删除学生信息按6:"<<endl;
cout<<"修改学生信息按7:"<<endl;
cout<<"输出数据按8:"<<endl;
cout<<"连接链表按9:"<<endl;
cout<<"向表2中输入数据按10:"<<endl;
cout<<"结束按11:"<<endl;
while(t==1)
{
cin>>m;
if(m>=0&&m<=11)
{
switch(m)
{
case 0: cout<<"请依次输入学号、姓名、电话、生日、宿舍号、家庭地址、数学、英语、物理等数据:"<<endl;
cin>>id>>name>>phone>>birthday>>doornum>>homeid>>maths>>english>>physical;
lst1.insert(id,name,phone,birthday,doornum,homeid,maths,english,physical);
break;
case 1: cout<<"请依次输入学号、姓名、电话、生日、宿舍号、家庭地址、数学、英语、物理等数据:"<<endl;
cin>>id>>name>>phone>>birthday>>doornum>>homeid>>maths>>english>>physical;
lst1.append(id,name,phone,birthday,doornum,homeid,maths,english,physical);
break;
case 2: lst1.reverse(lst1);break;
case 3: cout<<"人数:"<<lst1.length()<<endl;break;
case 4: cout<<"请输入要查询的学号:";
cin>>id;
lst1.find_ID(id);break;
case 5: cout<<"请输入要查询的姓名:";
cin>>name;
lst1.find_Name(name);break;
case 6: cout<<"请输入要删除的学号:";
cin>>id;
lst1.Delete_ID(id);break;
case 7: cout<<"请依次输入要修改的学生学号、姓名、电话、生日、宿舍号、家庭地址、数学、英语、物理等数据:"<<endl;
cin>>id>>name>>phone>>birthday>>doornum>>homeid>>maths>>english>>physical;
lst1.change_ID(id,name,phone,birthday,doornum,homeid,maths,english,physical);break;
case 8: lst1.print();break;
case 9: lst1.cat(lst2);break;
case 10:cout<<"请依次输入学号、姓名、电话、生日、宿舍号、家庭地址、数学、英语、物理等数据:"<<endl;
cin>>id>>name>>phone>>birthday>>doornum>>homeid>>maths>>english>>physical;
lst2.insert(id,name,phone,birthday,doornum,homeid,maths,english,physical);
break;
case 11:t=0;break;
}
}
else
cout<<"请正确输入:";
}
}