C++程序设计通讯录管理系统cpp.docx
《C++程序设计通讯录管理系统cpp.docx》由会员分享,可在线阅读,更多相关《C++程序设计通讯录管理系统cpp.docx(22页珍藏版)》请在冰点文库上搜索。
C++程序设计通讯录管理系统cpp
C++信息管理
#include
#include
#include
#include
#include
//#include
usingnamespacestd;
stringID;//具有唯一性
classPerson
{
protected:
stringNo;//学号
stringAge;
charName[20];//姓名
charSex[10];//性别
stringTel;//联系方式
Person*next;
public:
Person(stringID,char*Name,char*Sex,stringAge,stringTel)
{
strcpy(this->Name,Name);
strcpy(this->Sex,Sex);
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();//查询信息
voidTJ();//清除文件信息
voidSave();//保存数据
voidLoad();//读入数据
voidLook();//预览
voidDesTory();
voidOutput(Person*p)
{
cout<<"\t\t学号:
"<No<cout<<"\t\t姓名:
"<Name<cout<<"\t\t性别:
"<Sex<cout<<"\t\t年龄:
"<Age<cout<<"\t\t联系电话:
"<Tel<cout<}
};
voidManage:
:
Add()
{
system("cls");
Person*p,*p2;//新结点指针
stringNo,Age,Tel;
charName[20],Sex[10];
charc;
cout<<"\n**新增学生通讯录**\n";
//输入学生信息
cout<<"输入学号:
\t";
cin>>No;
cout<{
Person*p1;
p1=person;
while(p1)
{
if(p1->No==No)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<<"该学号已存在,是否修改该学生信息(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
cout<<"该学生信息为:
"<Find(No);
cout<Modify(No);
return;
}
else
return;
}
}
cout<<"输入姓名:
\t";
cin>>Name;
cout<cout<<"输入性别:
\t";
cin>>Sex;
cout<cout<<"输入年龄:
\t";
cin>>Age;
cout<cout<<"输入联系方式:
\t";
cin>>Tel;
cout<p=newPerson(No,Name,Sex,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"<cout<<"是否继续添加(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Add();
return;
}
else
return;
}
voidManage:
:
Delete()//删除人员
{
system("cls");
charc;
stringNo;
cout<<"\n**删除信息**\n";
cout<<"输入要删除的学生ID:
\t";
cin>>No;
cout<//查找要删除的结点
Person*p1,*p2;
p1=person;
while(p1)
{
if(p1->No==No)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//删除结点
if(p1!
=NULL)//若找到结点,则删除
{
cout<<"所要删除的学生的信息如下:
\n"<Output(p1);
cout<<"确定是否删除(Y/N):
";
cin>>c;
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)"<cin>>c;
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"<Output(p1);
do
{
cout<<"1.修改姓名2.修改性别3.修改年龄4.修改联系方式5.退出修改\n"<cout<<"请选择(1-5)要修改的信息\n"<cin>>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;
default:
break;
}
}while(c!
='5');
system("cls");
cout<<"\t***修改成功***\n"<cout<<"是否继续修改(Y/N):
"<cin>>c;
if(toupper(c)=='Y')
{
cout<<"请输入要修改人员的ID:
";
cin>>ID;
cout<Modify(ID);
return;
}
else
return;
}
else//未找到结点
cout<<"未找到该学生!
\n";
getch();//暂停
}
voidManage:
:
Save()//数据写入到文件
{
ofstreamfPerson("Person.txt",ios:
:
out);
charc;
cout<<"\n保存数据,是否继续?
[Y/N]:
";
cin>>c;
if(toupper(c)!
='Y')
return;
Person*p=person;
while(p)
{
fPerson<No<<""<Name<<""<Sex<<""<Age<<""<Tel<p=p->next;
}
fPerson.close();
cout<<"\n保存成功...\n";
system("pause");
}
voidManage:
:
Load()//数据读入
{
ifstreamfPerson;
Person*p=person;
stringNo,Age,Tel;
charName[20],Sex[10];
fPerson.open("person.txt",ios:
:
in);
fPerson>>No>>Name>>Sex>>Age>>Tel;
while(fPerson.good())
{
p=newPerson(No,Name,Sex,Age,Tel);
p->next=0;
//员工结点加入链表
if(person)//若已经存在结点
{
Person*p2;
p2=person;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
fPerson>>No>>Name>>Sex>>Age>>Tel;
}
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<<"未找到该学生"<}
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查询成功!
!
!
"<cout<<"\n共找到"<}
else
cout<<"\n\t\t未找到该学生!
!
!
\n"<}
voidManage:
:
Query()
{
charc;
stringID,Tel;
charName[20];
do{
cout<<"1.按学号查找2.按名字查找3.按电话号码查找4.退出查找"<cin>>c;
//system("cls");
cout<switch(c)
{
case'1':
{
cout<<"输入学号ID:
";
cin>>ID;
Find(ID);
};break;
case'2':
{
cout<<"输入姓名Name:
";
cin>>Name;
Find(Name);
};break;
case'3':
{
cout<<"输入电话号码Tel"<cin>>Tel;
Find(Tel);
};break;
case'4':
break;
default:
cout<<"输入有误请重新输入!
!
!
\n"<}
}while(c!
='1'&&c!
='2'&&c!
='3'&&c!
='4');
cout<<"\t\t\t***查找成功***\n"<cout<<"是否继续查找(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Query();
return;
}
else
return;
system("pause");
}
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:
"<No<<"\t姓名:
"<Name<count++;
p1=p1->next;
}
if(count!
=0)
{
cout<<"\n\t\t预览成功!
!
!
\n"<cout<<"查询详细信息(Y/N):
";
cin>>c;
if(toupper(c)=='Y')
{
Query();
return;
}
else
return;
}
else
{
cout<<"尚未创建通讯录,是否创建(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Add();
return;
}
else
return;
}
}
voidManage:
:
DesTory()
{//设置字体为红色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED);
charc;
system("cls");
cout<<"\n\t\t\t**清除信息**\n";
cout<<"警告:
\n清除通讯录信息会导致您保存的信息完全消失!
!
!
\n"<cout<<"★是否决定清除通讯录信息(Y/N):
"<cin>>c;
if(toupper(c)!
='Y')
return;
cout<<"请再次确认(Y/N)"<cin>>c;
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");
}
voidManage:
:
TJ()
{
Person*p1;
intcount=0,Boy=0,Girl=0;
p1=person;
while(p1)
{
count++;
if(strcmp(p1->Sex,"男")==0)
Boy++;
if(strcmp(p1->Sex,"女")==0)
Girl++;
p1=p1->next;
}
cout<<"\n总共有"<cout<<"男生:
"<"<system("pause");
}
intmain(void)
{
Managem;
intc;
do
{
//设置字体为绿色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_GREEN);
system("cls");
cout<<"=========================================="<cout<<"★☆\t1.新增通讯录\t☆★"<cout<<"★☆\t2.删除通讯录\t☆★"<cout<<"★☆\t3.修改通讯录\t☆★"<cout<<"★☆\t4.查询详细信息\t☆★"<cout<<"★☆\t5.保存数据\t☆★"<cout<<"★☆\t6.预览信息\t☆★"<cout<<"★☆\t7.清除通讯录\t☆★"<cout<<"★☆\t8.统计\t☆★"<cout<<"=========================================="<cout<<"0-退出\t请选择(1-8):
";
cin>>c;
switch(c)
{
case1:
m.Add();break;
case2:
m.Delete();break;
case3:
{
system("cls");
cout<<"请输入要修改人员的ID:
";
cin>>ID;
cout<m.Modify(ID);
};break;
case4:
{
system("cls");
m.Query();
};break;
case5:
m.Save();break;
case6:
m.Look();break;
case7:
m.DesTory();break;
case8:
m.TJ();break;
default:
break;
}
}while(c!
=0);
chars;
cout<<"\n★是否要保存您的所有操作(Y/N):
"<cin>>s;
if(toupper(s)=='Y')
m.Save();
return0;
}