练习简介
本练习属于C++进入面向对象学习之前的基础知识综合运用小练习,该练习可分为三个文件来编写:一个用于声明函数和宏定义的头文件.h,一个用于编写函数的源文件.cpp和另一个用于编写主函数测试的源文件.cpp。
头文件 DefineandStruct.h
用两个结构体来形成通讯录的基本模板,Person用于存放通讯录中每个人的基本信息;Addressbooks作为通讯录,用于存放写入通讯录的Person结构体。
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
struct Person
{
string name;
int age;
int sex;
string phonenumber;
string address;
};
struct Addressbooks
{
struct Person personArray[MAXSIZE];
int size;
};
//菜单界面
void Menu();
//添加联系人
Status AddPerson(Addressbooks* List);
//显示联系人
void TraverseBooks(Addressbooks Book);
//检查是否存在联系人
int isExsist(Addressbooks Book, string name);
//删除联系人
Status DeletePerson(Addressbooks* Book, string name);
//查找联系人
void SearchPerson(Addressbooks Book, string name);
//修改联系人
Status ModifyPerson(Addressbooks* Book, string name);
//清空通讯录
void CleanBook(Addressbooks* Book);
函数源文件 Function.cpp
#include <iostream>
#include <stdio.h>
#include <string>
#include "DefineandStruct.h"
using namespace std;
//菜单界面
void Menu()
{
cout << "******* 欢迎使用通讯录管理系统 *******" << endl;
cout << "*********** 1.添加联系人 ***********" << endl;
cout << "*********** 2.显示联系人 ***********" << endl;
cout << "*********** 3.删除联系人 ***********" << endl;
cout << "*********** 4.查找联系人 ***********" << endl;
cout << "*********** 5.修改联系人 ***********" << endl;
cout << "*********** 6.清空联系人 ***********" << endl;
cout << "*********** 0.退出系统 ***********" << endl;
cout << "**************************************" << endl;
}
//添加联系人
Status AddPerson(Addressbooks* Book)
{
if (Book->size == MAXSIZE)
{
return OVERFLOW;
}
Book->size++;
cout << "请输入姓名:";
cin >> Book->personArray[Book->size].name;
while (true)
{
cout << "请输入年龄:";
cin >> Book->personArray[Book->size].age;
if (Book->personArray[Book->size].age > 0)
{
break;
}
else
{
cout << "输入有误,请重新输入年龄!" << endl;
}
}
while (true)
{
cout << "请输入性别(1--男,0--女):";
cin >> Book->personArray[Book->size].sex;
if (Book->personArray[Book->size].sex == 1 || Book->personArray[Book->size].sex == 0)
{
break;
}
else
{
cout << "输入有误,请重新输入性别!" << endl;
}
}
while (true)
{
cout << "请输入联系电话:";
cin >> Book->personArray[Book->size].phonenumber;
if (Book->personArray[Book->size].phonenumber.length() == 11)
{
break;
}
else
{
cout << "输入有误,请输入正确的联系电话!" << endl;
}
}
cout << "请输入住址:";
cin >> Book->personArray[Book->size].address;
return OK;
}
//显示联系人
void TraverseBooks(Addressbooks Book)
{
if (Book.size == 0)
{
cout << "电话簿为空!" << endl;
}
else
{
for (size_t i = 1; i <= Book.size; i++)
{
cout << Book.personArray[i].name << "\t"
<< Book.personArray[i].age << "\t"
<< (Book.personArray[i].sex == 1 ? "男" : "女") << "\t"
<< Book.personArray[i].phonenumber << "\t"
<< Book.personArray[i].address << "\t"
<< endl;
}
}
}
//删除联系人
Status DeletePerson(Addressbooks* Book, string name)
{
int tmp = isExsist(*Book, name);
if (tmp == -1)
{
return ERROR;
}
for (int i = tmp; i <= Book->size; i++)
{
Book->personArray[i] = Book->personArray[i + 1];
}
Book->size--;
return OK;
}
//检查是否存在联系人
int isExsist(Addressbooks Book, string name)
{
for (int i = 1; i <= Book.size; i++)
{
if (Book.personArray[i].name == name)
{
return i;
}
}
return -1;
}
//查找联系人
void SearchPerson(Addressbooks Book, string name)
{
int tmp = isExsist(Book, name);
if (tmp == -1)
{
cout << "查无此人!" << endl;
}
else
{
cout << Book.personArray[tmp].name << "\t"
<< Book.personArray[tmp].age << "\t"
<< (Book.personArray[tmp].sex == 1 ? "男" : "女") << "\t"
<< Book.personArray[tmp].phonenumber << "\t"
<< Book.personArray[tmp].address << "\t"
<< endl;
}
}
//修改联系人
Status ModifyPerson(Addressbooks* Book, string name)
{
int tmp = isExsist(*Book, name);
if (tmp == -1)
{
return ERROR;
}
else
{
cout << "请输入姓名:";
cin >> Book->personArray[tmp].name;
while (true)
{
cout << "请输入年龄:";
cin >> Book->personArray[tmp].age;
if (Book->personArray[tmp].age > 0)
{
break;
}
else
{
cout << "输入有误,请重新输入年龄!" << endl;
}
}
while (true)
{
cout << "请输入性别(1--男,0--女):";
cin >> Book->personArray[tmp].sex;
if (Book->personArray[tmp].sex == 1 || Book->personArray[tmp].sex == 0)
{
break;
}
else
{
cout << "输入有误,请重新输入性别!" << endl;
}
}
while (true)
{
cout << "请输入联系电话:";
cin >> Book->personArray[tmp].phonenumber;
if (Book->personArray[tmp].phonenumber.length() == 11)
{
break;
}
else
{
cout << "输入有误,请输入正确的联系电话!" << endl;
}
}
cout << "请输入住址:";
cin >> Book->personArray[tmp].address;
return OK;
}
}
//清空通讯录
void CleanBook(Addressbooks* Book)
{
Book->size = 0;
}
主函数源文件 MainTest.cpp
#include <iostream>
#include <stdio.h>
#include "DefineandStruct.h"
using namespace std;
int main()
{
Addressbooks Book;
Book.size = 0;
int select;
do
{
Menu();
cout << "请输入选择:";
cin >> select;
switch (select)
{
case 1:
{
int tmp = AddPerson(&Book);
if (tmp == OVERFLOW)
{
cout << "已存满!" << endl;
}
else
{
cout << "添加成功!" << endl;
}
system("pause");
system("cls");
break;
}
case 2:
{
TraverseBooks(Book);
system("pause");
system("cls");
break;
}
case 3:
{
string name;
cout << "请输入删除对象:";
cin >> name;
int tmp = DeletePerson(&Book, name);
if (tmp == ERROR)
{
cout << "查无此人!" << endl;
}
else
{
cout << "删除成功!" << endl;
}
system("pause");
system("cls");
break;
}
case 4:
{
string name;
cout << "请输入查找对象:";
cin >> name;
SearchPerson(Book, name);
system("pause");
system("cls");
break;
}
case 5:
{
string name;
cout << "请输入需要修改的对象:";
cin >> name;
int tmp = ModifyPerson(&Book, name);
if (tmp == ERROR)
{
cout << "查无此人!" << endl;
}
else
{
cout << "修改成功!" << endl;
}
system("pause");
system("cls");
break;
}
case 6:
{
cout << "清空成功!" << endl;
CleanBook(&Book);
system("pause");
system("cls");
break;
}
case 0:
{
cout << "感谢使用!" << endl;
break;
}
default:
cout << "输入有误,请重新输入!" << endl;
system("pause");
system("cls");
break;
}
}while (select != 0);
system("pause");
return 0;
}