通讯录管理系统C++
今天写了一个通讯录管理系统,主要实现的***功能***有:
- 显示功能选项,让用户通过序号选择进入不同的功能(用switch实现)
- 显示功能和增删改查功能
- 清空通讯录
- 退出系统
整体思路:创建一个通讯录中人的结构体,再创建一个通讯录数组结构体。在main函数中用switch实现功能选择,并用一个子函数显示选项。然后每一个功能做一个子函数,用指针调用。
【注意】必须用指针调用,值调用不能改变主函数的内容。
代码如下:
#include<iostream>
using namespace std;
#include<string>
#define max 1000 //通讯录人数不超过1000
//通讯录中人的结构体
struct Phone {
string name;
string sex;
int age;
string number;
string add;
};
// 通讯录结构体!!!!重要!!!!
struct Numberbooks {
struct Phone nbook[max]; //通讯录数组
int num=0; //数组长度
};
//显示一下功能选项
void Show_Faction() {
cout << "1添加联系人" << endl;
cout << "2显示联系人" << endl;
cout << "3删除联系人" << endl;
cout << "4查找联系人" << endl;
cout << "5修改联系人" << endl;
cout << "6清空联系人" << endl;
cout << "7退出通讯录系统" << endl << endl;
}
//添加联系人
void Add_Phone(struct Numberbooks *s) {
//先判断能不能存;
if (s->num > 1000)cout << "通讯录已满" << endl;
else {
int ag;
string na, se, nu, ad;
cout << "请输入姓名:";
cin >> na;
s->nbook[s->num].name = na; //nb00k[]是数组元素,s->num是通讯录个数
cout << "请输入性别:";
cin >> se;
s->nbook[s->num].sex = se;
cout << "请输入年龄:";
cin >> ag;
s->nbook[s->num].age = ag;
cout << "请输入电话号码:";
cin >> nu;
s->nbook[s->num].number = nu;
cout << "请输入地址:";
cin >> ad;
s->nbook[s->num].add = ad;
cout << "联系人已保存。" << endl;
//通讯录个数加一
s->num++;
cout <<"通讯录个数为:"<< s->num << endl ;
cout << "***********************"<<endl; //为方便分辨显示的内容,加一行这个
}
//system("cls"); //清屏
}
//显示联系人
void Show_Phone(struct Numberbooks *s) {
//cout << "通讯录个数为:" << s->num << endl;
if ((s->num) == 0)cout << "列表为空!";
else {
cout << "联系人列表如下:" << endl;
for (int i = 0;i <= s->num;i++) {
cout << s->nbook[i].name << "\t" << s->nbook[i].age << "\t" << s->nbook[i].sex << "\t" << s->nbook[i].number << "\t" << s->nbook[i].add << endl;
}
}
cout << "***********************"<<endl;
}
//按姓名删除联系人:找到联系人之后,后面的元素依次往前移位,
//覆盖前元素,最后将数组长度减一
void Delete_Phone(struct Numberbooks *s) {
if ((s->num) == 0)cout << "列表为空!";
else {
int i;
string N;
cout << "请输入要删除的姓名:";
cin >> N;
for (i = 0;i < s->num;i++) {
if (s->nbook[i].name == N) {
for (int j = i;j < s->num;j++) { //找到之后,往前覆盖
s->nbook[j] = s->nbook[j+1];
}
s->num--;
//cout << "通讯录个数为:" << s->num << endl;
cout << "删除成功!" << endl<<endl;
}
}
if (i > s->num)
cout << "该联系人不存在!" << endl ;
}
cout << "***********************"<< endl;
}
//查找联系人:内容与删除联系人中的查找方法一样
void Select_Phone(struct Numberbooks *s) {
int i;
string N;
cout << "请输入要查找的姓名:";
cin >> N;
for (i = 0;i < s->num;i++) {
if (s->nbook[i].name == N) { //找到了就显示信息
cout << "联系人信息如下" << endl;
cout << s->nbook[i].name << "\t" << s->nbook[i].age << "\t" << s->nbook[i].sex << "\t" << s->nbook[i].number << "\t" << s->nbook[i].add << endl;
}
}
if (i > s->num)
cout << "该联系人不存在!" << endl;
cout << "***********************"<<endl;
}
//修改联系人
//(以修改联系人姓名为例,其他的方法一样):先查找,找到之后对应修改即可
void Alter_Phone(struct Numberbooks *s) {
int i;
string N;
cout << "请输入原姓名:";
cin >> N;
for (i = 0;i < s->num;i++) {
if (s->nbook[i].name == N) { //找到啦
string change;
cout << "请输入新姓名:";
cin >> change;
s->nbook[i].name = change;
cout << "修改成功!"<<endl;
}
}
if (i > s->num)
cout << "该联系人不存在!" << endl ;
cout << "***********************" << endl;
}
//清空联系人
void Empty_Phone(struct Numberbooks *s) {
//用户确定是否清空
cout << "确定要清空联系人吗?“是”请按1,不是请按0"<<endl;
int sure;
cin >> sure;
if (sure == 1) {
s->num = 0;
cout << "通讯录已清空!"<<endl ;
}
cout << "***********************" << endl;
}
int main() {
Numberbooks s; //注意类型
while (1) {
Show_Faction();
int n;
cout << "请输入您选择的功能编号:";
cin >> n;
switch (n) {
case 1:Add_Phone(&s); //1对应添加联系人,注意地址传递才能修改
break;
case 2:Show_Phone(&s); //2对应显示联系人
break;
case 3:Delete_Phone(&s); //3对应删除联系人
break;
case 4:Select_Phone(&s); //4对应查找联系人
break;
case 5:Alter_Phone(&s); //5对应修改联系人
break;
case 6:Empty_Phone(&s); //6对应清空联系人
break;
case 7:cout << "欢迎下次使用" << endl; //7对应添加联系人
return 0;
break;
default:
break;
}
}
return 0;
}
写了主要框架,有些细节可能没有考虑到。
主要思想已经在代码中注释了,如果有疑问评论区讨论哦
结果如下图:
这里最后总是会有一个复数,没想明白为啥,知道的朋友请告诉我一声,谢啦~~