写了一个关于通讯录管理的程序,没啥技术含量,发给喜好朋友们玩玩
made by Tony杨竣尧
///仅供个人娱乐使用///
//-------------------------//
//-------------------------//
#include<iostream>//菜单功能
#include <string>
constexpr auto MAX = 1000;//方便代码员对他维护,之后的修改可以直接对最上面的MAX进行修改,不需要修改下面的每一个常量
using namespace std;
struct people {
string name;
int sex;//1 男 2 女
string num;
int age = 0;
string address;
};
struct addresslist {
struct people personarr[MAX];
int m_size = 0;
};
//1.添加联系人
void addperson(addresslist* abs) {//注意abs的位置
if (abs->m_size == MAX) {
cout << "通讯录已满,无法添加!" << endl;
return;
}
else {
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personarr[abs->m_size].name = name;
//第一个abs是指这个联系人在总的人中在第几个,之后那个abs的name是其中那个人的姓名
cout << "请输入性别:(请输入1或者2)" << endl;
cout << "1--男" << endl;
cout << "2--女" << endl;
int sex = 0;
while (true) {
cin >> sex;
if (sex == 1 || sex == 2) {//如果输入的是1或者2,可以统一出循环,否则需要一直输入
abs->personarr[abs->m_size].sex = sex;
break;//如果输入的是对的,就退出
}
else {
cout << "性别有误!重新输入!" << endl;
break;
}
}
cout << "请输入年龄: " << endl;
int age = 0;
while (true) {
cin >> age;
if (age >= 0 && age <= 100) {
abs->personarr[abs->m_size].age = age;
break;
}
else {
cout << "输入年龄不在常人范围之内!重新输入!" << endl;
}
}
string num;
cout << "请输入该联系人的电话号码:" << endl;
cin >> num;
abs->personarr[abs->m_size].num = num;
cout << "请输入该联系人的家庭住址:" << endl;
string place;
cin >> place;
abs->personarr[abs->m_size].address = place;
//最后还要更新一下通讯录之中的人数
abs->m_size++;
cout << "添加成功" << endl;
system("pause");
system("cls");
}
}
//添加联系人
void showperson(addresslist* abs) {
//如果联系人的数量为0,则显示记录为空
if (abs->m_size == 0) {
cout << "当前记录为空" << endl;
}
else {
for (int i = 0; i < abs->m_size; i++) {
cout << "姓名: " << abs->personarr[i].name << "\t";
cout << "性别: " ;
if (abs->personarr[i].sex == 1) {
cout << "男" << "\t";
}
else {
cout << "女" << "\t";
}
cout << "联系方式: " << abs->personarr[i].num<< "\t";
cout << "年龄: " << abs->personarr[i].age<< "\t";
cout << "家庭住址: " << abs->personarr[i].address << endl << endl;
}
}
system("pause");
system("cls");
}
//显示联系人,全部
int isexist(addresslist* abs, string name) {
for (int i = 0; i < abs->m_size; i++) {
if (abs->personarr[i].name == name) {
return i;
}
}
return -1;
}///删除联系人,首先测试是否存在该联系人,再进行判断是否删除
//判断是否存在联系人
//检测联系人是否存在,按照姓名查找
//删除指定联系人
void deleteperson(addresslist* abs) {
cout << "请输入您要删除的联系人" << endl;
string name;
cin >> name;
int ret = isexist(abs, name);
if (ret != -1) {
//找到此人,进行删除操作
for (int i = ret; i < abs->m_size; i++) {
abs->personarr[i] = abs->personarr[i + 1];
}
//将后一个人的变量赋值给前一个人,进行删除
abs->m_size--;
//重新更新通讯录中的人员数量
cout << "删除成功!" << endl;
}
//这里不可以用取地址符号,因为前面已经是以地址为传递变量了,否则就二次取地址了
}
//删除联系人
void findperson(addresslist* abs) {
cout << "请输入您要查找的联系人: ";
string name;
cin >> name;
//判断指定联系人是否存在
int ret = isexist(abs, name);
if (ret != -1){
cout << "姓名: " << abs->personarr[ret].name << "\t";
cout << "性别: ";
if (abs->personarr[ret].sex == 1) {
cout << "男" << "\t";
}
else {
cout << "女" << "\t";
}
cout << "联系方式: " << abs->personarr[ret].num << "\t";
cout << "年龄: " << abs->personarr[ret].age << "\t";
cout << "家庭住址: " << abs->personarr[ret].address << endl << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}
//查找并显示联系人,单独
void modifyperson(addresslist* abs) {
cout << "请输入要修改的联系人: ";
string name;
cin >> name;
int ret = isexist(abs, name);
//如果有这个人就进行修改
if (ret != -1) {
cout << "原姓名: " << abs->personarr[ret].name << "\t";
string name;
cout << "请输入新姓名: " << endl;
cin >> name;
cout << endl;
cout << "原性别: ";
if (abs->personarr[ret].sex == 1) {
cout << "男" << "\t";
}
else {
cout << "女" << "\t";
}
cout << "请输入新性别: " << endl;
cout << "1--男" << endl;
cout << "2--女" << endl;
int sex;
cin >> sex;
abs->personarr[ret].sex=sex;
cout << endl;
cout << "原联系方式: " << abs->personarr[ret].num << "\t";
cout << "请输入新联系方式: " << endl;
string numn;
cin >> numn;
abs->personarr[ret].num = numn;
cout << endl;
cout << "原年龄: " << abs->personarr[ret].age << "\t";
int agen;
cin >> agen;
abs->personarr[ret].age = agen;
cout << endl;
cout << "原家庭住址: " << abs->personarr[ret].address << endl;
string addressn;
cin >> addressn;
abs->personarr[ret].address = addressn;
cout << "已完成更新!" << endl;
system("pause");
}
else {
cout << "查无此人" << endl;
system("pause");
}
//如果查不到这个人,就显示没有这个人
}
void deleteall(addresslist* abs) {
//清空所有联系人
abs->m_size = 0;
cout << "通讯录已清空" << endl;
system("pause");
system("cls");
}
//封装显示该界面的函数
void showMenu() {
//后在main函数中进行调用即可
cout << "1.添加联系人" << endl;
cout << "2.显示联系人" << endl;
cout << "3.删除联系人" << endl;
cout << "4.存在联系人" << endl;
cout << "5.查找联系人" << endl;
cout << "6.修改联系人" << endl;
cout << "7.清空联系人" << endl;
cout << "0.退出通讯录" << endl;
}
int main() {
cout << "写了一个关于通讯录管理的程序,没啥技术含量,发给喜好朋友们玩玩" << endl;
system("pause");
system("cls");
//创建一个通讯录的结构体变量
showMenu();//菜单的调用
addresslist abs;
//初始的通讯录中人员数量
abs.m_size = 0;
//!!!!!一开始的m_size 为零,所以之后每添加一个联系人就会多加一个数
int select = 0;
while (true) {
cin >> select;
switch (select)
{
case 1://1.添加联系人
addperson(&abs);//利用地址传递
break;
case 2://2.显示联系人
showperson(&abs);
break;
case 3://3.删除联系人
deleteperson(&abs);
system("pause");
system("cls");
break;
case 4://4.存在联系人
{
cout << "请输入删除联系人的姓名" << endl;
string namein;
cin >> namein;
if (isexist(&abs, namein) == -1) {
cout << "查无此人" << endl;
}
else {
cout << "找到此人" << endl;
deleteperson(&abs);
}
}
///如果switch语句下面的代码很长,则有可能会报错,此时应该用一个括号把代码都括起来
//防止报错!
system("pause");
system("cls");
break;
case 5://5.查找联系人
findperson(&abs);
break;
case 6://6.修改联系人
modifyperson(&abs);
system("cls");
break;
case 7://清空联系人
break;
case 0://0.退出通讯录
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
//因为有这个return 0所以他不是真正意义上的死循环
break;
default:
break;
}
showMenu();//菜单的调用
}
system("pause");
return 0;
}