使用c基础语法,编写一个简易的通讯录。主要捋顺编写程序的逻辑思维,练习结构体,数组,指针,枚举等等的运用。
#include <iostream>
#include <string>
using namespace std;
#define MAX 1000
void showMenu();
void inputInfo(struct AddressBooks* abs, int index);
void addPeople(struct AddressBooks* abs);
void showPeople(struct AddressBooks* abs);
int isExit(struct AddressBooks* abs, string iName);
void deletePeople(struct AddressBooks* abs);
void modifyPeople(struct AddressBooks* abs);
void findPeople(struct AddressBooks* abs);
void emptyPeople(struct AddressBooks* abs);
enum Function {
EXIT, ADD, SHOW, DELETE, MODIFY, FIND, EMPTY
};
struct People {
string name;
string sex;
string number;
string address;
};
struct AddressBooks {
struct People array[MAX];
int num;
};
int main()
{
//创建通讯录结构体变量
struct AddressBooks abs;
//初始化通讯录中当前人员的个数
abs.num = 0;
//功能实现
int select = 0;
while (true) {
//显示菜单
showMenu();
//选择功能
cout << "请选择一个功能:" << endl;
cin >> select;
switch (select) {
case ADD: //1、添加联系人
addPeople(&abs);
break;
case SHOW: //2、显示联系人
showPeople(&abs);
break;
case DELETE: //3、删除联系人
deletePeople(&abs);
break;
case MODIFY: //4、修改联系人
modifyPeople(&abs);
break;
case FIND: //5、查找联系人
findPeople(&abs);
break;
case EMPTY: //6、清空联系人
emptyPeople(&abs);
break;
default: //0、退出
cout << "已退出" << endl;
system("pause");
return 0;
}
}
system("pause");
}
/*******************************************************************************
*****************
* FUNCTION
* showMenu
*DESCRIPTION
* 显示菜单栏
*PARAMETERS
*
*RETURNS
* void
*****************
*******************************************************************************/
void showMenu()
{
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;
}
/*******************************************************************************
*****************
* FUNCTION
* inputInfo
*DESCRIPTION
* 输入联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
* int index 联系人在通讯中的位置
*RETURNS
* void
*****************
*******************************************************************************/
void inputInfo(struct AddressBooks* abs, int index)
{
//姓名
cout << "姓名 : ";
string iName;
cin >> iName;
abs->array[index].name = iName;
//性别
cout << "0-----女 1------男" << endl;
cout << "性别 : ";
int iSex;
cin >> iSex;
abs->array[index].sex = (iSex == 1 ? "男" : "女");
//电话号码
cout << "电话号码 : ";
string iNumber;
cin >> iNumber;
abs->array[index].number = iNumber;
//地址
cout << "地址 : ";
string iAddress;
cin >> iAddress;
abs->array[index].address = iAddress;
}
/*******************************************************************************
*****************
* FUNCTION
* outInfo
*DESCRIPTION
* 输出联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
* int index 联系人在通讯中的位置
*RETURNS
* void
*****************
*******************************************************************************/
void outInfo(struct AddressBooks* abs, int index)
{
cout << "姓名: " << abs->array[index].name << '\t';
cout << "性别: " << abs->array[index].sex << '\t';
cout << "电话号码:" << abs->array[index].number << '\t';
cout << "地址: " << abs->array[index].address << endl;
}
/*******************************************************************************
*****************
* FUNCTION
* addPeople
*DESCRIPTION
* 添加联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
*RETURNS
* void
*****************
*******************************************************************************/
void addPeople(struct AddressBooks* abs)
{
if (abs->num == MAX) {
cout << "通讯录已满" << endl;
}
else {
inputInfo(abs, abs->num);
abs->num++;
cout << "已保存" << endl;
}
//任意键清屏
system("pause");
system("cls");
}
/*******************************************************************************
*****************
* FUNCTION
* showPeople
*DESCRIPTION
* 打印所有通信录信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
*RETURNS
* void
*****************
*******************************************************************************/
void showPeople(struct AddressBooks* abs)
{
cout << "总共有 " << abs->num << " 位联系人" << endl;
if (abs->num) {
for (int i = 0; i < abs->num; i++) {
outInfo(abs, i);
}
}else {
cout << "通讯录为空哦,请添加" << endl;
}
//任意键清屏
system("pause");
system("cls");
}
/*******************************************************************************
*****************
* FUNCTION
* isExit
*DESCRIPTION
* 判断该联系人是否存在
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
* string iName 需要查找的联系人姓名
*RETURNS
* int -1 or i 输出判断结果
*****************
*******************************************************************************/
int isExit(struct AddressBooks* abs, string iName)
{
if (abs->num) {
for (int i = 0; i < abs->num; i++) {
if (abs->array[i].name == iName) {
//匹配到ret返回i,
return i;
break;
}
}
}
else {
cout << "通讯录为空,请添加" << endl;
return -1;
}
//匹配不到返回0
return -1;
}
/*******************************************************************************
*****************
* FUNCTION
* deletePeople
*DESCRIPTION
* 删除联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
*RETURNS
* void
*****************
*******************************************************************************/
void deletePeople(struct AddressBooks* abs)
{
string iName;
cout << "请输入要删除的联系人: ";
cin >> iName;
int ret = 0;
ret = isExit(abs, iName);
if (ret != -1) {
for (int i = ret; i < abs->num; i++) {
abs->array[i] = abs->array[i + 1];
}
abs->num--;
cout << "该联系人已删除" << endl;
}else {
cout << "该联系人不存在" << endl;
}
//任意键清屏
system("pause");
system("cls");
}
/*******************************************************************************
*****************
* FUNCTION
* modifyPeople
*DESCRIPTION
* 修改联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
*RETURNS
* void
*****************
*******************************************************************************/
void modifyPeople(struct AddressBooks* abs)
{
cout << "请输入要修改人的姓名: ";
string iName;
cin >> iName;
int ret = 0;
ret = isExit(abs, iName);
if (ret != -1) {
inputInfo(abs, ret);
cout << "该联系人已修改" << endl;
}
else {
cout << "该联系人不存在" << endl;
}
//任意键清屏
system("pause");
system("cls");
}
/*******************************************************************************
*****************
* FUNCTION
* findPeople
*DESCRIPTION
* 查找联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
*RETURNS
* void
*****************
*******************************************************************************/
void findPeople(struct AddressBooks* abs)
{
cout << "请输入要查找人的姓名: ";
string iName;
cin >> iName;
int ret = 0;
ret = isExit(abs, iName);
if (ret != -1) {
outInfo(abs, ret);
}
else {
cout << "该联系人不存在" << endl;
}
//任意键清屏
system("pause");
system("cls");
}
/*******************************************************************************
*****************
* FUNCTION
* emptyPeople
*DESCRIPTION
* 清空联系人信息
*PARAMETERS
* struct AddressBooks* abs 通信录结构体指针
*RETURNS
* void
*****************
*******************************************************************************/
void emptyPeople(struct AddressBooks* abs)
{
cout << "确认清空(y?): ";
string confirm;
cin >> confirm;
if (confirm == "y") {
abs->num = 0;
cout << "从此相忘于江湖" << endl;
}else {
cout << "留存曾经的相逢" << endl;
}
//任意键清屏
system("pause");
system("cls");
}
该问题为本人自主学习黑马程序员c++ke课程时,所写的练习题。