--------------------------------------------
/*类的定义部分 Person.h文件*/
class Person //定义人类
{
protected:
string StuId;//学号
string Age; //年龄
char Name[20]; //姓名
char Sex[10]; //性别
char Addre[20];//地址
string Tel; //电话
Person *next; //Person类对象指针变量
public:
Person(string ID,char *Name,char *Sex,string Age, string Tel,char *Addre)
{
strcpy(this->Name,Name);
strcpy(this->Sex,Sex);
strcpy(this->Addre,Addre);
this->Tel=Tel;
this->StuId=ID;
this->Age=Age;
}
friend class Manage;//友元类
/*Manage类是Person类的友元类,则Manage类的所有成员函数都是Person
类的友元函数,都可以访问Person类的私有和保护成员*/
};
class Manage //管理 类
{
public:
Manage() //构造函数
{
person=0;
Load(); //成员函数
}
~Manage() //析构函数
{
Person *p;//Person类的对象指针变量
p=person;
while(p) //当p不为0,即电话簿中记录不为0
{
p=p->next;
delete person; //删除该类对象
person=p;//准备删除下一对象
}
person=0;
}
void Find(char Name[20]);//按姓名查找
void Find(string ID); //按学号查找
void Welcome();
void Add(); //添加信息
void Delete();//删除信息
void Modify(string ID);//修改信息
void Query(); //查询信息
void TJ(); //统计联系人
void Save();//保存数据
void Load();//读入数据
void Look();//预览信息
void DesTory();//清除联系人
void Exit();//退出界面
void Output(Person *p)
{
cout<<"\t\t学号: "<StuId<Name<Sex<Age<Tel<Addre<
-------------------------------------------------
/*类的功能实现部分 Manage.cpp*/
void Manage:: Welcome()/*欢迎界面*/
{
printf("\n\n");
printf(" \t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" \t┃**********************************************************┃\n");
printf(" \t┃***┏━━━━━━━━━━━━━━━━━━━━━━━━┓***┃\n");
printf(" \t┃***┃************************************************┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 欢迎进入我的通信录管理系统 ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 制作人:XXY ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃*** 2013.12.22 ****┃***┃\n");
printf(" \t┃***┃*** ****┃***┃\n");
printf(" \t┃***┃************************************************┃***┃\n");
printf(" \t┃***┗━━━━━━━━━━━━━━━━━━━━━━━━┛***┃\n");
printf(" \t┃**********************************************************┃\n");
printf(" \t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n\n是否选择登陆(Y/N):[ ]\b\b"); //左移一位“\b ”
}
void Manage::Add()/*添加联系人*/
{
system("cls");//清屏命令,Windows对应的是cls
Person *p,*p2; //新节点指针
string StuId,Age,Tel;
char Name[20],Sex[10],Addre[20];
char c;
cout<<"\n\t\t\t\t** 新增学生通讯录 **\n\n";
//输入学生信息
cout<<"输入学号:\t";
cin>>StuId;
cout<StuId==StuId)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"该学号已存在,\n"<>c;
if(toupper(c)=='Y') //toupper()函数是将字符转换为对应的大写字母
{
Add();
return ;
}
else
return ;
}
}//块作用域
cout<<"输入姓名:\t";
cin>>Name;
cout<>Sex;
cout<>Age;
cout<>Tel;
cout<>Addre;
cout<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"<>c;
if(toupper(c)=='Y')
{
Add();
return ;
}
else
return;
}
void Manage::Delete() //删除联系人
{
system("cls");
char c;
char ch;
string StuId;
cout<<"\n\t\t** 删除联系人信息 **\n\n";
cout<<"输入要删除的学生ID:\t";
cin>>StuId;
cout<StuId==StuId)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//删除节点
if(p1!=NULL) //若找到节点,则删除
{
cout<<"所要删除的学生的信息如下:\n"<>c;
if(toupper(c)!='Y')
return;
if(p1==person) //若要删除的节点是第一个节点
{
person=p1->next;
delete p1;
}
else //若要删除的节点是后续节点
{
p2->next=p1->next;
delete p1;
}
cout<<"\n\t\t***删除成功***\n\n";
cout<<"是否继续删除(Y/N) "<>c;
if(toupper(c)=='Y')
{
Delete();
return ;
}
else
return;
}
else //未找到节点则返回
{
cout<<"未找到该学生!\n";
cout<<"\n是否继续删除(Y/N)?\n";
cin>>ch;
if(ch=='Y'||ch=='y') Delete();
else{return;}
}
}
void Manage::Modify(string ID)/*修改联系人信息*/
{
Person *p1;
char c;
char ch;
p1=person;
while(p1)
{
if(p1->StuId==ID)
break;
else
{
p1=p1->next;
}
}
if(p1!=NULL) //若找到节点
{
system("cls");
cout<<"所要修改的学生信息如下: \n"<>c;
if(c!='5')
cout<<"请输入新的信息: ";
switch(c)
{
case '1': cin>>p1->Name;break;
case '2': cin>>p1->Sex;break;
case '3': cin>>p1->Age;break;
case '4': cin>>p1->Tel;break;
case '5': cin>>p1->Addre;break;
default: return; break;
}
cout<<"\n\t ***修改成功***\n"<>c;
if(toupper(c)=='N')
{
return;
}
}while(c!='6');
system("cls");
cout<<"\n\t ***修改成功***"<>ID;
cout<>ch;
if(ch=='Y'||ch=='y')
{cout<<"\n请重新输入要修改人员的ID:"<>ID;
cout<>c;
if(toupper(c)!='Y')
return;
Person *p=person;
while(p)
{
fPerson<StuId<<" "<Name<<" "<Sex<<" "<Age<<" "<Tel<<" "<Addre<next;
}
fPerson.close();
cout<<"\n保存成功...\n";
system("pause");
}
void Manage::Load() //数据读入
{
ifstream fPerson;
Person *p=person;
string StuId,Age,Tel;
char Name[20],Sex[10],Addre[20];
fPerson.open("person.txt",ios::in);
fPerson>>StuId>>Name>>Sex>>Age>>Tel>>Addre;
while(fPerson.good())
{
p=new Person(StuId,Name,Sex,Age,Tel,Addre);
p->next=0;
//员工结点加入链表
if(person) //若已经存在结点
{
Person *p2;
p2=person;
while(p2->next) //查找尾结点
{
p2=p2->next;
}
p2->next=p; //连接
}
else //若不存在结点(表空)
{
person=p; //连接
}
fPerson>>StuId>>Name>>Sex>>Age>>Tel>>Addre;
}
fPerson.close();
}
void Manage::Find(string ID)/*ID查找*/
{
Person *p1;
p1=person;
while(p1)
{
if(p1->StuId==ID||p1->Tel==ID)
break;
else
{
p1=p1->next;
}
}
if(p1!=NULL)
{
Output(p1);
}
else
{
cout<<"未找到该学生!"<Name,Name)==0||strcmp(p1->Addre,Name)==0)
{
count++;
Output(p1);
}
p1=p1->next;
}
if(count)
{
cout<<"\t查询成功!!!\t"<1&&strcmp(p1->Name,Name)==0){cout<<"\n共找到 "<1&&strcmp(p1->Addre,Name)==0){cout<<"\n共找到 "<>c;
cout<>ID;
Find(ID);
};break;
case '2':{
cout<<"输入姓名 Name: ";
cin>>Name;
Find(Name);
};break;
case '3':{
cout<<"输入电话号码 Tel"<>Tel;
Find(Tel);
};break;
case '4':{
cout<<"输入地址 Address"<>Addre;
Find(Addre);
};break;
case '5':break;
default: cout<<"输入有误 请重新输入!!!\n"<>c;
if(toupper(c)=='Y')
{
system("cls");
Query();
return ;
}
else
return ;
system("pause");
}
void Manage::Look()/*预览信息*/
{
system("cls");
Person *p1;
int count=0;
char c;
p1=person;
while(p1)
{
cout<<"ID: "<StuId<<"\t姓名: "<Name<next;
}
if(count!=0)
{
cout<<"\n\t\t预览成功!!!\n"<>c;
if(toupper(c)=='Y')
{
Query();
return;
}
else
return;
}
else
{
cout<<"尚未创建通讯录,是否创建(Y/N)"<>c;
if(toupper(c)=='Y')
{
Add();
return;
}
else
return;
}
}
void Manage::DesTory()/*清除通讯录信息*/
{
char c;
system("cls");
cout<<"\n\t\t\t** 清除信息 **\n";
cout<<"警告:\n 清除通讯录信息会导致您保存的信息完全消失!!!\n"<>c;
if(toupper(c)!='Y')
return;
cout<<"请再次确认(Y/N)"<>c;
if(toupper(c)!='Y')
return;
else
{
Person *p;
p=person;
while(p)
{
p=p->next;
delete person;
person=p;
}
person=0;
}
system("pause");
}
void Manage::Exit()/*/退出*/
{
cout<<"\n";
for(int i=0;i<20;i++)
{
printf("·");
Sleep(100);
}
system("cls");
puts("\n\t\t\t\t感谢使用本系统!!\n\n\t\t\t有任何问题请联系:[email protected] \n");
exit(0);
}
void Manage::TJ()/*/按照性别统计人数/*/
{
Person *p1;
int count=0,Boy=0,Girl=0;
p1=person;
while(p1)
{
count++;
if(strcmp(p1->Sex,"男")==0||strcmp(p1->Sex,"nan")==0)
Boy++;
if(strcmp(p1->Sex,"女")==0||strcmp(p1->Sex,"nv")==0)
Girl++;
//if(strcmp(p1->Addre,p1+1->Addre)==0)
p1=p1->next;
}
system("cls");
cout<<"\n总共有 "<
----------------------------------------------------
/*主函数部分 main.cpp*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#include"Person.h"
#include"Manage.cpp"
string ID;//字符串类ID,全局变量,具有唯一性
int main(void)
{
Manage m;
int c;
int i,k=0;
string mm;
string username;
char mi;
char a;
system("color 5b");//颜色
m.Welcome();
a=getchar();getchar();
if (a=='Y'||a=='y')
{
system("cls");//清屏操作。
puts("\n\n\n\n\n\n\n\t\t\t\t 欢 迎 进 入 通 信 录 !\n\n\n\n\n\t\t\t\t\t 请 登 陆·····");
getchar();
for(int j=2,i=0;i<3;i++,j--)/*三次机会*/
{
printf("\n请输入用户名:");
cin >> username;
printf("\n请输入6位密码:");
getchar();
for(i=0;i<7;i++)
{
mi=getch();
if(mi=='\r') break;
mm+=mi;
cout<<"*";
}
//判断条件
if(username=="xiaxianyun"&&mm=="123457")
{
printf("\n您已经成功登录\n");
k=1;
for(i=0;i<10;i++)
{
printf("·");
Sleep(100);
}
do/*菜单操作*/
{
system("cls");
cout<<"\n";
cout<<"\t\t ================请选择================"<>c;
switch(c)
{
case 1: m.Add(); break;
case 2: m.Delete();break;
case 3: {
system("cls");
cout<<"请输入要修改联系人的ID: ";
cin>>ID;
cout<>s;
if(toupper(s)=='Y')
{
system("cls");
m.Save();
m.Exit();
}
m.Exit();
}
return 0;
}