需求分析:
- 添加联系人
- 显示所有联系人
- 删除联系人
- 查找联系人
- 修改联系人
- 清空联系人
- 退出通讯录
代码:
头文件:
fuc.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
struct Contacts {
string name;
string number;
string QQ;
string stress;
short int len = 0;
};
void showMnue(); //显示菜单
void addContacts(Contacts* p); //添加联系人
void showContacts(Contacts* p); //显示联系人
void deleteContacts(Contacts* p); //删除联系人
void findContacts(Contacts* p); //查找联系人
void alterContacts(Contacts* p); //修改联系人
void clearContacts(Contacts* p); //清空联系人
源文件:
fuc.cpp
#include"fuc.h"
//显示菜单
void showMnue()
{
string str1 = "*****";
string str2 = "***************************";
cout << str2 << endl;
cout << str1 + " 1、添加联系人 " + str1 << endl;
cout << str1 + " 2、显示联系人 " + str1 << endl;
cout << str1 + " 3、删除联系人 " + str1 << endl;
cout << str1 + " 4、查找联系人 " + str1 << endl;
cout << str1 + " 5、修改联系人 " + str1 << endl;
cout << str1 + " 6、清空联系人 " + str1 << endl;
cout << str1 + " 0、退出通讯录 " + str1 << endl;
cout << str2 << endl;
}
//添加联系人
void addContacts(Contacts* p) {
system("cls");
if (p->len == 9) {
cout << "通讯录已存满,无法继续添加。";
}
else {
cout << "姓名:";
cin >> p[p->len].name;
cout << "联系电话:";
cin >> p[p->len].number;
cout << "QQ:";
cin >> p[p->len].QQ;
cout << "住址:";
cin >> p[p->len].stress;
(p->len)++;
}
system("pause");
system("cls");
showMnue();
}
//显示联系人
void showContacts(Contacts* p) {
system("cls");
if (p->len == 0) {
system("cls");
cout << "通讯录为空,请添加联系人。" << endl;
}
else{
cout << "序号\t姓名\t\t\t电话\t\t\tQQ\t\t\t住址" << endl;
for (int i = 0; i < p->len; i++) {
cout << i + 1 << "\t" + p[i].name+"\t\t\t"+p[i].number+"\t\t\t"+p[i].QQ+"\t\t\t"+p[i].stress << endl;
}
}
system("pause");
system("cls");
showMnue();
}
//删除联系人
void deleteContacts(Contacts* p) {
system("cls");
if (p->len == 0) {
system("cls");
cout << "删除失败,通讯录为空,请添加联系人。" << endl;
}
else {
cout << "序号\t姓名\t\t\t电话\t\t\tQQ\t\t\t住址" << endl;
for (int i = 0; i < p->len; i++) {
cout << i+1 << "\t" + p[i].name + "\t\t\t" + p[i].number + "\t\t\t" + p[i].QQ + "\t\t\t" + p[i].stress << endl;
}
cout << "请输入要删除联系人的序号:";
int del;
cin >> del;
while(true){
if (del > 0 && del < (p->len) + 1) {
p[del - 1].name = p[(p->len) - 1].name;
p[del - 1].number = p[(p->len) - 1].number;
p[del - 1].QQ = p[(p->len) - 1].QQ;
p[del - 1].stress = p[(p->len) - 1].stress;
(p->len)--;
system("cls");
cout << "删除成功!" << endl;
break;
}
else {
cout << "删除失败,请重新输入:";
cin >> del;
}
}
}
system("pause");
system("cls");
showMnue();
}
//查找联系人
void findContacts(Contacts* p) {
system("cls");
cout << "请输入要查找联系人的姓名:";
string name;
int jug = 0;
cin >> name;
for (int i = 0; i < p->len; i++) {
if (p[i].name == name) {
jug++;
if (jug == 1) {
cout << "序号\t姓名\t\t\t电话\t\t\tQQ\t\t\t住址" << endl;
}
cout<< jug << "\t" + p[i].name + "\t\t\t" + p[i].number + "\t\t\t" + p[i].QQ + "\t\t\t" + p[i].stress << endl;
}
}
if (jug == 0) {
cout << "没有找到此人。" << endl;
}
system("pause");
system("cls");
showMnue();
}
//修改联系人
void alterContacts(Contacts* p) {
system("cls");
if (p->len == 0) {
system("cls");
cout << "通讯录为空,请添加联系人。" << endl;
}
else {
cout << "序号\t姓名\t\t\t电话\t\t\tQQ\t\t\t住址" << endl;
for (int i = 0; i < p->len; i++) {
cout << i + 1 << "\t" + p[i].name + "\t\t\t" + p[i].number + "\t\t\t" + p[i].QQ + "\t\t\t" + p[i].stress << endl;
}
}
cout << "请选择要修改联系人的序号:";
int c;
while (1) {
cin >> c;
if (c >= 1 && c <= p->len)
{
system("pause");
system("cls");
cout << "姓名:";
cin >> p[c - 1].name;
cout << "联系电话:";
cin >> p[c - 1].number;
cout << "QQ:";
cin >> p[c - 1].QQ;
cout << "住址:";
cin >> p[c - 1].stress;
system("pause");
system("cls");
cout << "修改完成" << endl;
system("pause");
break;
}
else {
cout << "输入有误,请重新输入:";
}
}
system("cls");
showMnue();
}
//清空联系人
void clearContacts(Contacts* p) {
system("cls");
if (p->len == 0) {
cout << "通讯录为空,无需清空" << endl;
}
else {
p->len = 0;
cout << "清除成功!" << endl;
}
system("pause");
system("cls");
showMnue();
}
main.cpp
#include<iostream>
using namespace std;
#include"fuc.h"
#include <stdlib.h>
int main()
{
Contacts Con[10];
int c;
bool judge = true;
showMnue();
while (judge) {
cin >> c;
switch (c)
{
case 1:
addContacts(Con);
break;
case 2:
showContacts(Con);
break;
case 3:
deleteContacts(Con);
break;
case 4:
findContacts(Con);
break;
case 5:
alterContacts(Con);
break;
case 6:
clearContacts(Con);
break;
case 0:
system("cls");
cout << "退出成功,欢迎下次使用。" << endl;
judge = false;
break;
default:
cout << "请重新输入:";
break;
}
}
system("pause");
return 0;
}
不足以及可优化之处:
1.再创建一个通讯录结构体,这个结构题存放联系人结构体和人数计数器,这样就不需要在联系人结构体的对象中,每个数组元素都记录当前通讯录人数了。这样会使用更少的内存空间。为了节省内存空间,也可以使用数组的动态申请内存空间,需要添加联系人时,申请 一块更大的新的数组内存,将已有的数组元素(联系人信息)拷贝到新的内存空间中,删除时也可以使用此方法。但是当数据过于庞大时,这个方法过于繁琐,所以可以使用链表来存储数据。
2.增加一个查找联系人函数,用来查找通讯录里的信息并且返回标记,删除、修改函数中先调用查找函数再进行后面的操作,这样会减小代码量。