#includeiostream
#includefstream
#includestring
#includeconio.h
#includeWindows.h
//#includewindows.h
usingnamespacestd;
stringID;//具有唯一性
classPerson
{
protected:
stringNo;//学号
stringAge;
charName[20];//姓名
charpostcode[45];//邮政编码
charaddress[60];//家庭住址
stringTel;//联系方式
Person*next;
public:
Person(stringID,char*Name,char*postcode,char*address,stringAge,stringTel)
{
strcpy(this-Name,Name);
strcpy(this-postcode,postcode);
strcpy(this-address,address);
this-Tel=Tel;
this-No=ID;
this-Age=Age;
}
friendclassManage;
};
classManage
{
private:
Person*person;
public:
Manage()
{
person=0;
Load();
}
~Manage()
{
Person*p;
p=person;
while(p)
{
p=p-next;
deleteperson;
person=p;
}
person=0;
}
voidFind(charName[20]);//按姓名查找
voidFind(stringID);//按编号查找
voidAdd();//添加加信息
voidDelete();//删除信息
voidModify(stringID);//修改信息
voidQuery();//查询信息
voidLook();//预览
voidSave();//保存数据
voidLoad();//读入数据
voidDesTory();
voidOutput(Person*p)
{
cout\"\\t\\t学号:\"p-Noendl;
cout\"\\t\\t姓名:\"p-Nameendl;
cout\"\\t\\t邮编地址:\"p-postcodeendl;
cout\"\\t\\t家庭住址:\"p-addressendl;
cout\"\\t\\t联系电话:\"p-Telendl;
coutendl;
}
};
voidManage::Add()
{
system(\"cls\");
Person*p,*p2;//新结点指针
stringNo,Age,Tel;
charName[20],postcode[45],address[60];
charc;
cout\"\\n**新增学生通讯录**\\n\";
//输入学生信息
cout\"输入学号:\\t\";
cinNo;
coutendl;
{
Person*p1;
p1=person;
while(p1)
{
if(p1-No==No)
{
break;
}
else
{
p1=p1-next;
}
}
if(p1!=NULL)
{
cout\"该学号已存在,是否修改该学生信息(Y/N)\"endl;
cinc;
if(toupper(c)==\'Y\')
{
cout\"该学生信息为:\"endl;
Find(No);
coutendl;
Modify(No);
return;
}
else
return;
}
}
cout\"输入姓名:\\t\";
cinName;
coutendl;
cout\"输入邮编地址:\\t\";
cinpostcode;
coutendl;
cout\"输入家庭住址:\\t\";
cinaddress;
coutendl;
cout\"输入年龄:\\t\";
cinAge;
coutendl;
cout\"输入联系方式:\\t\";
cinTel;
coutendl;
p=newPerson(No,Name,postcode,address,Age,Tel);
p-next=0;
//学生结点加入链表
if(person)//若已经存在结点
{
p2=person;
while(p2-next)//查找尾结点
{
p2=p2-next;
}
p2-next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
system(\"cls\");
cout\"\\t\\t\\t***添加成功***\\n\"endl;
cout\"是否继续添加(Y/N)\"endl;
cinc;
if(toupper(c)==\'Y\')
{
Add();
return;
}
else
return;
}
voidManage::Delete()//删除人员
{
system(\"cls\");
charc;
stringNo;
cout\"\\n**删除信息**\\n\";
cout\"输入要删除的学生ID:\\t\";
cinNo;
coutendl;
//查找要删除的结点
Person*p1,*p2;
p1=person;
while(p1)
{
if(p1-No==No)
break;
else
{
p2=p1;
p1=p1-next;
}
}
//删除结点
if(p1!=NULL)//若找到结点,则删除
{
cout\"所要删除的学生的信息如下:\\n\"endl;
Output(p1);
cout\"确定是否删除(Y/N):\";
cinc;
if(toupper(c)!=\'Y\')
return;
// system(\"pause\");
if(p1==person)//若要删除的结点是第一个结点
{
person=p1-next;
deletep1;
}
else//若要删除的结点是后续结点
{
p2-next=p1-next;
deletep1;
}
cout\"\\t\\t***删除成功***\\n\";
cout\"是否继续删除(Y/N)\"endl;
cinc;
if(toupper(c)==\'Y\')
{
Delete();
return;
}
else
return;
}
else//未找到结点
cout\"未找到该学生!\\n\";
getch();
}
voidManage::Modify(stringID)
{
Person*p1;
charc;
p1=person;
while(p1)
{
if(p1-No==ID)
break;
else
{
p1=p1-next;
}
}
if(p1!=NULL)//若找到结点
{
system(\"cls\");
cout\"所要修改的学生的信息如下:\\n\"endl;
Output(p1);
do
{
cout\"1.修改姓名2.修改邮编3.修改住址4.修改年龄5.修改电话号码6.退出修改\\n\"endl;
cout\"请选择(1-5)要修改的信息\\n\"endl;
cinc;
if(c!=\'6\')
cout\"请输入新的信息:\";
switch(c)
{
case\'1\':cinp1-Name;break;
case\'2\':cinp1-postcode;break;
case\'3\':cinp1-address;break;
case\'4\':cinp1-Age;break;
case\'5\':cinp1-Tel;break;
default:break;
}
}while(c!=\'6\');
system(\"cls\");
cout\"\\t***修改成功***\\n\"endl;
cout\"是否继续修改(Y/N):\"endl;
cinc;
if(toupper(c)==\'Y\')
{
cout\"请输入要修改人员的ID:\";
cinID;
coutendl;
Modify(ID);
return;
}
else
return;
}
else//未找到结点
cout\"未找到该学生!\\n\";
getch();//暂停
}
voidManage::Look()
{
//设置字体颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED|FOREGROUND_GREEN);
system(\"cls\");
Person*p1;
intcount=0;
charc;
p1=person;
while(p1)
{
cout\"ID:\"p1-No\"\\t姓名:\"p1-Nameendl;
count;
p1=p1-next;
}
if(count!=0)
{
cout\"\\n\\t\\t预览成功!!!\\n\"endl;
cout\"查询详细信息(Y/N):\";
cinc;
if(toupper(c)==\'Y\')
{
Query();
return;
}
else
return;
}
else
{
cout\"尚未创建通讯录,是否创建(Y/N)\"endl;
cinc;
if(toupper(c)==\'Y\')
{
Add();
return;
}
else
return;
}
}
voidManage::Save()//数据写入到文件
{
ofstreamfPerson(\"Person.txt\",ios::out);
charc;
cout\"\\n保存数据,是否继续?[Y/N]:\";
cinc;
if(toupper(c)!=\'Y\')
return;
Person*p=person;
while(p)
{
fPersonp-No\"\"p-Name\"\"p-postcode\"\"p-address\"\"p-Age\"\"p-Telendl;
p=p-next;
}
fPerson.close();
cout\"\\n保存成功...\\n\";
system(\"pause\");
}
voidManage::Load()//数据读入
{
ifstreamfPerson;
Person*p=person;
stringNo,Age,Tel;
charName[20],postcode[45],address[65];
fPerson.open(\"person.txt\",ios::in);
fPersonNoNamepostcodeaddressAgeTel;
while(fPerson.good())
{
p=newPerson(No,Name,postcode,address,Age,Tel);
p-next=0;
//员工结点加入链表
if(person)//若已经存在结点
{
Person*p2;
p2=person;
while(p2-next)//查找尾结点
{
p2=p2-next;
}
p2-next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
fPersonNoNamepostcodeaddressAgeTel;
}
fPerson.close();
}
voidManage::Find(stringID)
{
Person*p1;
p1=person;
while(p1)
{
if(p1-No==ID)
break;
else
{
p1=p1-next;
}
}
if(p1!=NULL)
{
Output(p1);
}
else
cout\"未找到该学生\"endl;
}
voidManage::Find(charName[20])
{
Person*p1;
intcount=0;
p1=person;
while(p1)
{
if(strcmp(p1-Name,Name)==0)
{
count;
Output(p1);
}
p1=p1-next;
}
if(count)
{
cout\"\\t查询成功!!!\"endl;
cout\"\\n共找到\"count\"个名字为★\"Name\"★的同学\\n\"endl;
}
else
cout\"\\n\\t\\t未找到该学生!!!\\n\"endl;
}
voidManage::Query()
{
charc;
stringID,Tel;
charName[20];
do{
cout\"1.按学号查找2.按名字查找3.按电话号码查找4.退出查找\"endl;
cinc;
// system(\"cls\");
coutendl;
switch(c)
{
case\'1\':{
cout\"输入学号ID:\";
cinID;
Find(ID);
};break;
case\'2\':{
cout\"输入姓名Name:\";
cinName;
Find(Name);
};break;
case\'3\':{
cout\"输入电话号码Tel\"endl;
cinTel;
Find(Tel);
};break;
case\'4\':break;
default:cout\"输入有误请重新输入!!!\\n\"endl;
}
}while(c!=\'1\'
cout\"\\t\\t\\t***查找成功***\\n\"endl;
cout\"是否继续查找(Y/N)\"endl;
cinc;
if(toupper(c)==\'Y\')
{
Query();
return;
}
else
return;
system(\"pause\");
}
voidManage::DesTory()
{ //设置字体为红色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED);
charc;
system(\"cls\");
cout\"\\n\\t\\t\\t**清除信息**\\n\";
cout\"警告:\\n清除通讯录信息会导致您保存的信息完全消失!!!\\n\"endl;
cout\"★是否决定清除通讯录信息(Y/N):\"endl;
cinc;
if(toupper(c)!=\'Y\')
return;
cout\"请再次确认(Y/N)\"endl;
cinc;
if(toupper(c)!=\'Y\')
return;
else
{
Person*p;
p=person;
while(p)
{
p=p-next;
deleteperson;
person=p;
}
person=0;
// ofstreamfPerson(\"person.txt\");
// fPerson.close();
}
system(\"pause\");
}
intmain(void)
{
Managem;
intc;
do
{
//设置字体为蓝色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_BLUE);
system(\"cls\");
cout\"==========================================\"endl;
cout\"\\t1.新增通讯录\\t\"endl;
cout\"\\t2.删除通讯录\\t\"endl;
cout\"\\t3.修改通讯录\\t\"endl;
cout\"\\t4.查询详细信息\\t\"endl;
cout\"\\t5.保存数据\\t\"endl;
cout\"\\t6.清除通讯录\\t\"endl;
cout\"\\t7.预览通讯录\\t\"endl;
cout\"==========================================\"endl;
cout\"0-退出\\t请选择(1-7):\";
cinc;
switch(c)
{
case1:m.Add();break;
case2:m.Delete();break;
case3:{
system(\"cls\");
cout\"请输入要修改人员的ID:\";
cinID;
coutendl;
m.Modify(ID);
};break;
case4:{
system(\"cls\");
m.Query();
};break;
case5:m.Save();break;
case6:m.DesTory();break;
case7:m.Look();break;
default:break;
}
}while(c!=0);
chars;
cout\"\\n★是否要保存您的所有操作(Y/N):\"endl;
cins;
if(toupper(s)==\'Y\')
m.Save();
return0;
}
|