c++从入门到实战,通讯录项目


c++从入门到实战,通讯录项目

c++从入门到实战,通讯录项目

从入门到实战,应该是每位程序小白必须经历的一个过程。刚入门时觉得很基础很简单,程序无非是由判断语句、循环语句、数学运算,再加上函数、结构体、类等构成。也许稍微难一点点的就只有指针了。然而真正尝试着手一个项目时,才发现程序虽由哪些最基本的元素构成却可以有千变万化的组合。真正尝试实操一个项目对一个小白而言其实至关重要的。下面是我个人在学习通讯录项目实操后的总结,也希望能对大家有帮助。

注意:本文为自己学习c++的总结与归纳,课程为哔哩哔哩上up主 黑马程序员 的课程

​ 点击此处跳转至课程

项目介绍及准备工作

通讯录项目要具体实现以下功能

    添加联系人
    显示联系人
    删除联系人
    查找联系人
    修改联系人
    清空联系人
    退出通讯录

下面将逐一介绍各个功能实现的具体方法

搭建结构体

在这之前先搭好一个框架,设计一个联系人的结构体(person),并再设计一个包含联系人结构体的通讯录结构体(Addressbooks),其中包含一个联系人数组。

#include<iostream>
using namespace std;
#include<string>//添加string的头文件
#define MAX 1000 //定义一个宏常量
struct person
{
string m_Name;//姓名
int m_Sex ;//性别
int m_Age ;//年龄
string m_Phone;//电话
string m_Address;//住址
};
//结构体的嵌套
struct Addressbooks
{
struct person personArray[MAX];//数组个数上限为1000
int m_size;//负责记录联系人的个数,以及通过序号实现数组的一些操作。
};

菜单列表


//封装一个显示菜单的函数。
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;
//添加联系人显示联修改联系人退出通讯录
}
//星号是为了美观

主函数中的循环与选择功能

每实现一个功能后不可能立马退出,而应返回菜单界面。这时就应该使用while语句实现循环,即一旦break就返回菜单界面即showMenu。而实现相应的功能就应由操作者自己选择,这是程序应可以根据不同选择实现不同的循环语句。这里我们使用switch语句。让用户自己输入菜单内容而实现相应的功能。

int main()
{
struct Addressbooks abs;//创建Addressbooks结构体的实例
abs.m_size = 0; //初始化m_size的值
while (true)
{
showMenu();//调用显示菜单函数。
int select = 0;
cin >> select;
switch (select)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 0:
break;
default:
break;
}
}
system("pause");
return 0;
}

1.添加联系人

    添加函数
    引用函数

为了可以改变实参(更改通讯录不可能只更改函数中的)我们向函数中传递指针。

//添加联系人
void addPerson(Addressbooks* abs) //传递指针可改变实参
{
//判断联系人是否已满
if (abs->m_size == MAX) {
cout << "通讯录已满,已无法添加。" << endl;
return;

}
else {
//添加具体联系人
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArray[abs->m_size].m_Name = name;
//性别
int sex = 0;
while (true) //循环防止操作者乱填误填
{
cout << "请输入性别:" << endl;
cout << "男——1" << endl;
cout << "女——0" << endl;
cin >> sex;
if (sex == 0 || sex == 1)
{
abs->personArray[abs->m_size].m_Sex = sex;
break;
}
cout << "输入有误请重新输入。" << endl;
}
//年龄
int age = 0;
cout << "请输入年龄:" << endl;
cin >> age;
abs->personArray[abs->m_size].m_Age = age;
//电话
string phone;
cout << "请输入电话号码:" << endl;
cin >> phone;
abs->personArray[abs->m_size].m_Phone = phone;
//住址
string address;
cout << "请输入地址:" << endl;
cin >> address;
abs->personArray[abs->m_size].m_Address = address;

}
abs->m_size++;//实现通讯录人数与m_size记录同步
cout << "添加成功" << endl;
system("pause");//请按任意键继续。
system("cls");//清屏操作。
}

2.显示联系人

这个只需逐一输出即可,英文sex的实质是整型,所以通过三目运算符输出对应的男和女。中间较长应加上括号否则会报错。

//显示联系人
void showPerson(Addressbooks*abs)
{
//判断通讯录中人数是否为0
if (abs->m_size == 0) {
cout << "您的通讯录联系人为零" << endl;
}
else {
for (int i = 0;i < abs->m_size; i++) {
cout << "姓名: " << abs->personArray[i].m_Name<<"\t" ;
cout << "性别: " << (abs->personArray[i].m_Sex==1?"男":"女")<<"\t" ;//三目运算符
cout << "年龄: " << abs->personArray[i].m_Age<<"\t" ;
cout << "电话: " << abs->personArray[i].m_Phone<<"\t" ;
cout << "地址: " << abs->personArray[i].m_Address<<endl;
}
}
system("pause");//请按任意键继续。
system("cls");//清屏操作。
}

3.删除联系人

分为两步 检验与删除。用两个不同的函数表示。生活中我们主要通过姓名删除一个联系人。这里我们首先通过姓名判断联系人是否存在

但我们并不好通过姓名去进行删除操作,所有返回值i更方便我们进行操作。

c++中没用直接的删除操作

我们的思路是让要删除的元素后面的元素不断向前赋值,达到覆盖删除的目的。

//检测联系人是否存在
int isExist(Addressbooks * abs,string name)
{
for (int i = 0;i < abs->m_size;i++)
{
if (name == abs->personArray[i].m_Name)
{
return i;//找到了返回i
}
return -1;//如果没找到则返回一个-1
}
}
//删除联系人。
void deletePerson(Addressbooks* 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->personArray[i] = abs->personArray[i + 1];
}
abs->m_size--;
cout << "删除成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}


4.查找联系人

包括判断与输出操作。

//查找联系人
void findPerson(Addressbooks* abs) {
cout << "请输入你要查找的联系人" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1) //找到了
{
cout << " 姓名: " << abs->personArray[ret].m_Name << "\t";
cout << " 性别: " << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
cout << " 年龄: " << abs->personArray[ret].m_Age << "\t";
cout << " 住址: " << abs->personArray[ret].m_Address << "\t";
cout << " 电话: " << abs->personArray[ret].m_Phone<< "\t";
}
else {
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}


5.修改联系人

也是通过姓名查找序号在全部重新赋值。

易错点:在modifyPerson函数中的abs是形式参数且是指针,所以调用isExsit函数时要用abs而不是&abs

//修改指定联系人信息
void modifyPerson(Addressbooks* abs) {
cout << "请输入你要查找的联系人" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1) {
string name;
cout << "请重新输入姓名" << endl;
cin >> name;
abs->personArray[ret].m_Name = name;
int sex = -1;
cout << "请重新输入性别" << endl;
cout << "男——1" << endl;
cout << "女——0" << endl;
cin >> sex;
while (true)
{
if (sex == 1 || sex == 0) {
abs->personArray[ret].m_Sex = sex;
break;
}
cout << "输入错误请重新输入" << endl;
}
int age;
cout << "请重新输入年龄" << endl;
cin >> age;
abs->personArray[ret].m_Age = age;
string address;
cout << "请重新输入住址" << endl;
cin >> address;
abs->personArray[ret].m_Address = address;
string phone;
cout << "请重新输入电话" << endl;
cin >> phone;
abs->personArray[ret].m_Phone = phone;
cout << "修改成功" << endl;
}
else
{
cout << "查无此人" << endl;
}
system("pause");
system("cls");
}

6.清空联系人

其实并不用循环来一个个删除每一个元素

只需将m_size赋值为0即可

//清空联系人
void cleanPerson(Addressbooks* abs) {
abs->m_size = 0;
cout<<"通讯录已清空"<<endl;
system("pause");
system("cls");
}

7.退出通讯录

可直接在main函数中书写。

case 0:
//0、退出通讯录
cout << "欢迎使用通讯录功能" << endl;
system("pause");
return 0;
/*出现return 0
即表明main函数中的代码运行结束*/
break;

最后在相应的case后调用相应的函数即可!

感谢阅读。

c++从入门到实战,通讯录项目

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

c++从入门到实战,通讯录项目

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » c++从入门到实战,通讯录项目
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏