目录
前言
通讯录管理系统是我们日常生活中常见的应用之一。它能够方便地管理联系人的信息,包括姓名、电话号码、地址等。通过使用C++语言进行课程设计实验,我们将探索如何设计和实现一个简单而实用的通讯录管理系统。本篇博客将分享我在这个实验中遇到的挑战、解决方案以及相应的代码实现。
一、实验要求
具体的要求因为年代久远忘了,但是总的操作就是记录并管理联系人的信息,包括姓名、电话号码、地址等,当打开控制台时可以键入选择编码来实现对通讯录联系人信息的增删改查操作,当然进阶一点的可以包含文件操作,通过读写文件使得控制台的操作与项目解决方案中的txt文件内容相关联,不过这里并没有涉及到文件操作,毕竟说过这是给初学者借鉴的,总不能把所谓智能指针、右值引用、异常处理这样式的代码模式给融合进去让一个刚学C++语言的人看,来彰显你所谓的水平吧。
二、代码演示
首先给出源代码:
#define _CRT_SECURE_NO_WARNINGS
#define MAX 1000
#include<iostream>
#include"通讯录管理系统.h"
using namespace std;
//设计联系人结构体
struct Person
{
string name;
string sex;//1.男 2.女
int age;
string phone;
string add;//地址
};
//设计通讯录结构体
struct Books
{
struct Person arr[MAX];//联系人数组
int size;//通讯录人员个数
}bs;
void main()
{
bs.size = 0;
while (true)
{
//开始菜单
showMenu();
int select = 0;
//选择
cin >> select;
switch (select)
{
case 1://添加联系人
{
addperson(&bs);
break;
}
case 2://显示联系人
{
showPerson(&bs);
break;
}
case 3://删除联系人
{
cout << "请输入联系人姓名: " << endl;
string name;
cin >> name;
if (test(&bs, name) == -1)
{
cout << "查无此人" << endl;
}
else
{
cout << "正在删除,请稍后..." << endl;
delPerson(&bs);
}
break;
}
case 4://查找联系人
{
findPerson(&bs);
break;
}
case 5://修改联系人
{
modifyPerson(&bs);
break;
}
case 6://清空联系人
{
cleanPerson(&bs);
break;
}
case 0://退出通讯录
{
cout << "***** 欢迎下次使用 *****" << endl;
system("pause");
break;
}
default:
{
break;
}
}
}
system("pause");
}
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;
}
//1.添加联系人
void addperson(struct Books *bs)
{
if (bs->size == MAX)cout << "*** 通讯录已满!!***" << endl;
else
{
//姓名
//string name;
cout << "请输入姓名: " << endl;
cin >> bs->arr[bs->size].name;
cout << "姓名输入成功!" << endl;
//性别
cout << "请输入性别:(1.男 2.女) " << endl;
string sex = "0";
while (true) //while (true)作用是无限循环,直到break结束
{
cin >> sex;
if (sex == "1" || sex == "2")
{
bs->arr[bs->size].sex = sex;
break;
}
cout << "*** 输入错误,请重新输入!***" << endl;
}
cout << "性别输入成功!" << endl;
//年龄
cout << "请输入年龄: " << endl;
int age = 0;
while (true) //while (true)作用是无限循环,直到break结束
{
cin >> age;
if (age <=150 && age >= 0)
{
bs->arr[bs->size].age = age;
break;
}
cout << "*** 输入错误,请重新输入!***" << endl;
}
cout << "年龄输入成功!" << endl;
//电话
cout << "请输入电话: " << endl;
string phone = "NULL";
cin >> phone;
bs->arr[bs->size].phone = phone;
cout << "电话输入成功!" << endl;
//地址
cout << "请输入地址: " << endl;
string add = " ";
cin >> add;
bs->arr[bs->size].add = add;
cout << "地址输入成功!" << endl;
//更新通讯录人数
bs->arr[(bs->size )+ 1].name = "NULL";
bs->arr[(bs->size) + 1].age = NULL;
bs->arr[(bs->size) + 1].sex = "NULL";
bs->arr[(bs->size) + 1].phone = "NULL";
bs->arr[(bs->size) + 1].add = "NULL";
bs->size++;
cout << "***** 添加联系人成功! *****" << endl;
}
}
//2.显示联系人
void showPerson(struct Books* bs)
{
if (bs->size == 0)
{
cout << "*** 当前记录为空 ***" << endl;
}
else
{
for (int i = 0; i < bs->size; i++)
{
cout << "联系人"<<i+1<<"号: " << endl;
cout << "姓名: " << bs->arr[i].name << endl;
cout << "性别: " << bs->arr[i].sex << endl;
cout << "年龄: " << bs->arr[i].age << endl;
cout << "电话: " << bs->arr[i].phone<< endl;
cout << "地址: " << bs->arr[i].add << endl;
}
}
}
//3.删除联系人
//(1)检测联系人是否存在
int test(Books* bs, string name)
{
for (int i = 0;i < bs->size; i++)
{
if (bs->arr[i].name == name)
{
return i ;
}
}
return -1;
}
void delPerson(struct Books* bs)
{
cout << "请再次确认输入您想要删除的联系人(昵称): " << endl;
string name;
cin >> name;
int ret = test(bs, name);
if (ret != -1)
{
for (int i = 0; i < bs->size; i++) //数据前移
{
bs->arr[i] = bs->arr[i + 1];
}
bs->size--; //更新人员数
cout << "***** 删除成功! *****" << endl;
}
}
//4.查找指定联系人信息
void findPerson(Books* bs)
{
cout << "输入您要查找的联系人:" << endl;
string name;
cin >> name;
//判断联系人是否存在
test(bs,name);
if ((test(bs, name) != -1)&&bs->size>0)
{
cout << "联系人" << test(bs, name) + 1 << "号: " << endl;
cout << "姓名: " << bs->arr[test(bs, name)].name << endl;
cout << "性别: " << bs->arr[test(bs, name)].sex << endl;
cout << "年龄: " << bs->arr[test(bs, name)].age << endl;
cout << "电话: " << bs->arr[test(bs, name)].phone << endl;
cout << "地址: " << bs->arr[test(bs, name)].add << endl;
cout << "*** 查找成功! ***" << endl;
}
else
{
cout << "*** 未查找到该联系人信息 ***" << endl;
}
}
//5.修改联系人
void modifyPerson(struct Books* bs)
{
cout << "请输入要修改的联系人: " << endl;
string name;
cin >> name;
//判断联系人是否存在
test(bs, name);
if (test(bs, name) == -1)
{
cout << "*** 查无此人! ***" << endl;
}
while (true)
{
if (test(bs, name) != -1)
{
cout << "请输入要修改该用户的项目: " << endl;
cout << "1.姓名 2.性别(<1>男 <2>女) 3.年龄 4.电话 5.地址" << endl;
int s=0;
cin >> s;
string sex;
int age=0;
string phone;
string add;
switch (s)
{
case 1:
{
cin >> name;
bs->arr[test(bs, name)].name = name;
break;
}
case 2:
{
cin >> sex;
bs->arr[test(bs, name)].sex = sex;
break;
}
case 3:
{
cin >> age;
bs->arr[test(bs, name)].age = age;
break;
}
case 4:
{
cin >> phone;
bs->arr[test(bs, name)].phone = phone;
break;
}
case 5:
{
cin >> add;
bs->arr[test(bs, name)].add = add;
break;
}
case 0:
{
break;
}
default:
{
cout << "*** 输入有误,请重新输入! ***" << endl;
}
}
cout << "***** 修改成功! *****" << endl;
}
break;
}
}
//6.清空联系人
void cleanPerson(struct Books* bs)
{
cout << "请确认清空操作:<1>确定 <2>返回" << endl;
int reday = 0;
cin >> reday;
while (true)
{
if (reday == 1)
{
bs->size = 0;
cout << "***** 清除成功! *****" << endl;
break;
}
else if (reday == 2)
{
cout << "**** 正在返回主菜单 ****" << endl;
showMenu();
break;
}
else
{
cout << "*** 输入有误,请重新输入! ***" << endl;
}
}
system("pause");
}
头文件:
"通讯录管理系统.h"
#pragma once
#include<iostream>
using namespace std;
void showMenu();
void addperson(struct Books* bs);
void showPerson(struct Books* bs);
void delPerson(struct Books* bs);
int test(Books* bs, string name);
void findPerson(Books* bs);
void modifyPerson(struct Books* bs);
void cleanPerson(struct Books* bs);
这里实际上不添加头文件也是可以的,但是把声明放头文件里,相当于对函数在源文件中做了前置声明,这样使得源文件中首先映入眼帘的就是main()主函数里面的相关操作,记得头文件后缀需要设置为.h。
如果复制粘贴出现格式问题等,可以之间下载上面的压缩包文件中的.cpp和.h文件即可解决。
三、运行示例
总结
以下的总结可以直接用于你的课设论文心得部分:
在本次C语言课程设计实验中,我成功地实现了一个通讯录管理系统。通过这个实验,我深入了解了C语言的基础知识,并学会了如何利用这些知识实现一个功能完善的程序。以下是我总结的几点收获和心得:
首先,我学会了如何从需求分析入手,设计程序的整体框架。在实现通讯录管理系统时,我首先确定了需要存储的联系人信息,然后根据功能需求设计了相应的数据结构和算法。这个过程让我意识到在编程之前,良好的设计是成功的关键。
其次,我加深了对指针的理解和应用。在通讯录管理系统中,我使用了指针来动态分配内存,有效地管理联系人信息。通过指针,我能够灵活地操作数据,提高程序的效率和性能。
此外,我学会了如何进行错误处理和异常处理。在编写代码的过程中,我遇到了各种可能的错误情况,如用户输入错误、内存分配失败等。我学会了如何使用条件语句和异常处理机制来处理这些错误,并给出相应的提示信息,提高了程序的健壮性和用户友好性。
最后,我意识到编程是一项需要耐心和细心的工作。在实现通讯录管理系统的过程中,我遇到了很多细节问题,如数据类型转换、字符串处理等。通过不断调试和测试,我最终解决了这些问题,并获得了一个功能完善的通讯录管理系统。
通过这次实验,我不仅巩固了C语言的基础知识,还提高了问题解决和代码调试的能力。我相信这些经验将对我的编程之路产生积极的影响。未来,我将继续学习和探索更多的编程知识,不断提升自己的技术水平。
博客文章总结:
希望这篇博客能给读者带来启发和帮助,感谢您的阅读!