C/C++實(shí)現(xiàn)通訊錄管理系統(tǒng)(附源碼)
首先是程序的功能,該程序主要可以實(shí)現(xiàn)以下功能:一)添加聯(lián)系人 二)顯示聯(lián)系人 三)刪除聯(lián)系人 四)查找聯(lián)系人 五)修改聯(lián)系人 六)清空聯(lián)系人 七)退出通訊錄。
程序中用到的知識(shí)點(diǎn)主要有:結(jié)構(gòu)體、結(jié)構(gòu)體數(shù)組、指針、函數(shù)等。
程序部分功能展示
以下是部分程序功能演示:





各個(gè)功能的代碼實(shí)現(xiàn)
菜單
我們首先制作一個(gè)程序的菜單,為后續(xù)功能的實(shí)現(xiàn)做鋪墊。
我們先編寫一個(gè)顯示菜單的函數(shù):
void showMenu(){
cout<<"1.添加聯(lián)系人:"<<endl;
cout<<"2.顯示聯(lián)系人:"<<endl;
cout<<"3.刪除聯(lián)系人:"<<endl;
cout<<"4.查找聯(lián)系人"<<endl;
cout<<"5.修改聯(lián)系人"<<endl;
cout<<"6.清空聯(lián)系人"<<endl;
cout<<"0.退出通訊錄"<<endl;
}大家也可以在菜單顯示時(shí)改變行距或者加入一些符號(hào)讓它變的更美觀~~~
然后,在主函數(shù)中定義一個(gè)int型的變量select,從鍵盤中輸入select的值完成對(duì)于不同功能的選擇,這里用switch case語(yǔ)句來(lái)實(shí)現(xiàn)。
int select=0;//創(chuàng)建用戶選擇輸入的變量
while(1){
showMenu();
cin>>select;
switch(select)
{
case 1://添加聯(lián)系人
break;
case 2:
break;//顯示聯(lián)系人
case 3:
break;
case 4:
break;//查找聯(lián)系人
case 5:
break;//修改聯(lián)系人 按照姓名重新修改指定聯(lián)系人
case 6:
break;//清空聯(lián)系人
case 0: //退出通訊錄
break;
default: break;
}}主函數(shù)的主要框架就完成啦~!后續(xù)的功能我們慢慢添加補(bǔ)充。
添加聯(lián)系人
實(shí)現(xiàn)該部分功能的步驟如下:
1.定義聯(lián)系人結(jié)構(gòu)體以及通訊錄結(jié)構(gòu)體
2.在主函數(shù)中創(chuàng)建通訊錄
3.封裝添加聯(lián)系人函數(shù)
首先是定義聯(lián)系人結(jié)構(gòu)體和通訊錄結(jié)構(gòu)體
//設(shè)計(jì)聯(lián)系人結(jié)構(gòu)體(添加聯(lián)系人)
struct Person{
string m_Name;//姓名
int m_Sex;//性別 男1 女2
int m_Age;//年齡
string m_Phone;//電話
string m_Addr;//住址
};
//設(shè)計(jì)通訊錄結(jié)構(gòu)體(添加聯(lián)系人)
struct Addressbooks{
struct Person personArray[MAX];//通訊錄中保存聯(lián)系人數(shù)組
int m_Size;//記錄當(dāng)前聯(lián)系人個(gè)數(shù)
};
聯(lián)系人結(jié)構(gòu)體中包含聯(lián)系人的姓名、性別、年齡、電話和地址,這里不過(guò)多贅述。
通訊錄結(jié)構(gòu)體中包含了一個(gè)存儲(chǔ)聯(lián)系人信息的數(shù)組,以及記錄當(dāng)前聯(lián)系人個(gè)數(shù)的變量。注意,數(shù)組的最大限度MAX也就是該通訊錄能存儲(chǔ)的聯(lián)系人個(gè)數(shù)的最大值。這里為了方便,我們?cè)诔绦蚯懊婕由?#define MAX 1000 ,方便修改MAX的值。
創(chuàng)建好結(jié)構(gòu)體之后,我們需要在主函數(shù)中創(chuàng)建一個(gè)通訊錄。即
Addressbooks abs;
好了,做完準(zhǔn)備工作之后,我們就要開(kāi)始編寫添加聯(lián)系人的函數(shù)了。注意,因?yàn)槲覀冃枰淖儗?shí)參的 值,所以函數(shù)的參數(shù)需要為指針,進(jìn)行地址傳遞。
該函數(shù)主要實(shí)現(xiàn)以下功能:判斷通訊錄是否已滿,如果未滿,添加聯(lián)系人信息,如果已滿,提醒用戶,通訊錄已滿,無(wú)法添加!
以下是代碼實(shí)現(xiàn):
//1.添加聯(lián)系人
void addPerson(Addressbooks * abs)
{
//判斷通訊錄是否已滿
if(abs->m_Size==MAX){//參數(shù)中的一個(gè)項(xiàng)使用.,地址中的一個(gè)項(xiàng)使用->,這里的abs是一個(gè)地址,所以用->
//指針要用->
cout<<"通訊錄已滿,無(wú)法添加!"<<endl;
return;}
else{
//添加具體聯(lián)系人
//姓名
string name;
cout<< "請(qǐng)輸入姓名: "<<endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name=name;
//性別
cout<<"請(qǐng)輸入性別: "<<endl;
cout<<"1---男"<<endl;
cout<<"2---女"<<endl;
int sex = 0;
while(1){
cin >> sex;
if(sex==1||sex==2){
abs->personArray[abs->m_Size].m_Sex=sex;
break;
}
cout<<"輸入有誤,請(qǐng)重新輸入"<<endl;
}
//年齡
cout<<"請(qǐng)輸入年齡:"<<endl;
int age=0;
cin>>age;
abs->personArray [abs->m_Size].m_Age =age;
//電話
cout<<"請(qǐng)輸入聯(lián)系電話: "<<endl;
string phone;
cin>>phone;
abs->personArray [abs->m_Size ].m_Phone =phone;
//住址
cout<<"請(qǐng)輸入地址:"<<endl;
string address;
cin>>address;
abs->personArray [abs->m_Size ].m_Addr =address ;
//信息錄入成功,通訊錄人數(shù)加一
abs->m_Size ++;
cout<<"添加成功!"<<endl;
system("pause");//按任意鍵繼續(xù)
system ("cls");//清屏
}}為了使程序更加的美觀易讀,在完成添加之后,執(zhí)行清屏操作,這里調(diào)用了c++中的系統(tǒng)函數(shù)即system(”cls“)
顯示聯(lián)系人
顯示聯(lián)系人的函數(shù)
完整源碼
以下是完整的源碼
#include<iostream>
using namespace std;
#include<string>
#define MAX 1000
//顯示菜單界面
//設(shè)計(jì)聯(lián)系人結(jié)構(gòu)體(添加聯(lián)系人)
struct Person{
string m_Name;//姓名
int m_Sex;//性別 男1 女2
int m_Age;//年齡
string m_Phone;//電話
string m_Addr;//住址
};
//設(shè)計(jì)通訊錄結(jié)構(gòu)體(添加聯(lián)系人)
struct Addressbooks{
struct Person personArray[MAX];//通訊錄中保存聯(lián)系人數(shù)組
int m_Size;//記錄當(dāng)前聯(lián)系人個(gè)數(shù)
};
//1.添加聯(lián)系人
void addPerson(Addressbooks * abs)
{
//判斷通訊錄是否已滿
if(abs->m_Size==MAX){//參數(shù)中的一個(gè)項(xiàng)使用.,地址中的一個(gè)項(xiàng)使用->,這里的abs是一個(gè)地址,所以用->
//指針要用->
cout<<"通訊錄已滿,無(wú)法添加!"<<endl;
return;}
else{
//添加具體聯(lián)系人
//姓名
string name;
cout<< "請(qǐng)輸入姓名: "<<endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name=name;
//性別
cout<<"請(qǐng)輸入性別: "<<endl;
cout<<"1---男"<<endl;
cout<<"2---女"<<endl;
int sex = 0;
while(1){
cin >> sex;
if(sex==1||sex==2){
abs->personArray[abs->m_Size].m_Sex=sex;
break;
}
cout<<"輸入有誤,請(qǐng)重新輸入"<<endl;
}
//年齡
cout<<"請(qǐng)輸入年齡:"<<endl;
int age=0;
cin>>age;
abs->personArray [abs->m_Size].m_Age =age;
//電話
cout<<"請(qǐng)輸入聯(lián)系電話: "<<endl;
string phone;
cin>>phone;
abs->personArray [abs->m_Size ].m_Phone =phone;
//住址
cout<<"請(qǐng)輸入地址:"<<endl;
string address;
cin>>address;
abs->personArray [abs->m_Size ].m_Addr =address ;
//信息錄入成功,通訊錄人數(shù)加一
abs->m_Size ++;
cout<<"添加成功!"<<endl;
system("pause");//按任意鍵繼續(xù)
system ("cls");//清屏
}}
//2.顯示所有聯(lián)系人
void showPerson(Addressbooks * abs){
//判斷通訊錄中人數(shù)是否為0,如果為0,提示記錄為空
//如果不為0,顯示記錄的聯(lián)系人信息
if(abs->m_Size==0)
{
cout<<"當(dāng)前記錄為空"<<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_Addr <<endl;
}
}
system("pause");//按任意鍵繼續(xù)
system ("cls");//清屏
}
//顯示菜單
void showMenu(){
cout<<"1.添加聯(lián)系人:"<<endl;
cout<<"2.顯示聯(lián)系人:"<<endl;
cout<<"3.刪除聯(lián)系人:"<<endl;
cout<<"4.查找聯(lián)系人"<<endl;
cout<<"5.修改聯(lián)系人"<<endl;
cout<<"6.清空聯(lián)系人"<<endl;
cout<<"0.退出通訊錄"<<endl;
}
//3.檢測(cè)聯(lián)系人是否存在,如果存在,返回聯(lián)系人在數(shù)組中的具體位置,不存在返回-1
//參數(shù)1 通訊錄 參數(shù)2 姓名
int isExist(Addressbooks *abs, string name){
for(int i=0;i<abs->m_Size ;i++){
if(abs->personArray [i].m_Name ==name)
{return i;}
}//尋找聯(lián)系人
return -1;//遍歷結(jié)束仍然沒(méi)有找到
}
//3.刪除指定聯(lián)系人
void deletePerson(Addressbooks *abs ){
cout<<"請(qǐng)輸入您要?jiǎng)h除的聯(lián)系人"<<endl;
string name;
cin>>name;
int ret=isExist(abs,name);//if ret=-1.未查到該人 else 查到了
if(ret!=-1){
//查到此人,要進(jìn)行刪除操作
for(int i=ret;i<abs->m_Size;i++){
// 使數(shù)據(jù)前移,實(shí)現(xiàn)邏輯上的刪除功能
abs->personArray [i]=abs->personArray [i+1];
}
abs->m_Size --;
cout<<"刪除成功!"<<endl;
}
else{
cout<<"未查到此人!"<<endl;
}
system ("pause");
system ("cls");
}
//4.查找指定聯(lián)系人信息
void findPerson(Addressbooks *abs)
{
cout<<"請(qǐng)輸入您要查找的聯(lián)系人"<<endl;
string name;
cin>>name;//判斷指定的聯(lián)系人是否存在于通訊錄中
int ret= isExist(abs,name);
if(ret!=-1){//找到聯(lián)系人
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_Phone <<"\t";
cout<<"住址:"<<abs->personArray [ret ].m_Addr <<endl;
}
else{//未找到聯(lián)系人
cout<<"查無(wú)此人!"<<endl;
}
system ("pause");//按任意鍵繼續(xù)
system ("cls");//清屏
}
//5.修改指定聯(lián)系人信息
void modifyPerson(Addressbooks *abs){
cout<<"請(qǐng)輸入您要修改的聯(lián)系人"<<endl;
string name;
cin>>name;
int ret=isExist (abs,name);
if(ret!=-1){//找到了指定的聯(lián)系人
//姓名
string name;
cout<<"請(qǐng)輸入修改后的姓名: "<<endl;
cin>>name;
abs->personArray [ret].m_Name =name;
//性別
int sex=0;
cout<<"請(qǐng)輸入性別:"<<endl;
cout<<"1---男"<<endl<<"2---女"<<endl;
while(1){
cin>>sex;
if(sex==1||sex==2){
abs->personArray [ret].m_Sex =sex;
break;
}
cout<<"輸入有誤,請(qǐng)重新輸入"<<endl;
}
//年齡
cout<<"請(qǐng)輸入年齡 "<<endl;
int age=0;
cin>>age;
abs->personArray [ret ].m_Age =age;
//電話
cout<<"請(qǐng)輸入聯(lián)系電話:"<<endl;
string phone;
cin>>phone;
abs->personArray [ret].m_Phone =phone;
//住址
cout<<"請(qǐng)輸入住址:"<<endl;
string address;
cin>>address;
abs->personArray [ret].m_Addr =address;
cout<<"修改成功!"<<endl;
}
else{//未找到指定的聯(lián)系人
cout<<"查無(wú)此人!"<<endl;
}
system("pause");
system("cls");//按任意鍵后清屏
}
//6.清空聯(lián)系人 //實(shí)現(xiàn)思路:只要將記錄的聯(lián)系人數(shù)重置為0,就可以實(shí)現(xiàn)邏輯情空
void cleanPerson(Addressbooks *abs){
abs->m_Size =0;
cout<<"通訊錄已清空"<<endl;
system("pause");
system("cls");
}
//主函數(shù)
int main(){
char qingkong;
system ("color F1");
//創(chuàng)建通訊錄結(jié)構(gòu)體變量
Addressbooks abs;
//初始化通訊錄當(dāng)中當(dāng)前人員個(gè)數(shù)
//調(diào)用菜單
abs.m_Size=0;
int select=0;//創(chuàng)建用戶選擇輸入的變量
while(1){
showMenu();
cin>>select;
switch(select)
{
case 1://添加聯(lián)系人
addPerson(& abs);
break;//添加聯(lián)系人//功能:設(shè)置上限1000人
//步驟:設(shè)置聯(lián)系人結(jié)構(gòu)體和通訊錄結(jié)構(gòu)體 main函數(shù)中創(chuàng)建通訊錄 封裝添加聯(lián)系人函數(shù) 測(cè)試添加聯(lián)系人功能
case 2:
showPerson (& abs);//地址傳遞,可以改變實(shí)參的值
break;//顯示聯(lián)系人
case 3://case語(yǔ)句如果很長(zhǎng)的話最好用括號(hào)括起來(lái)形成一個(gè)代碼段
/*{
cout<<"請(qǐng)輸入刪除聯(lián)系人的姓名:"<<endl;
string name;
cin>>name;
if(isExist ==-1)cout<<"查無(wú)此人"<<endl;
else cout<<"找到此人"<<endl;}*/ //檢測(cè)練習(xí)人是否存在
deletePerson(&abs);
break;//刪除聯(lián)系人 1.判斷聯(lián)系人是否存在 2.刪除聯(lián)系人函數(shù)
case 4:
findPerson (&abs);
break;//查找聯(lián)系人
case 5:
modifyPerson (&abs);
break;//修改聯(lián)系人 按照姓名重新修改指定聯(lián)系人
case 6:
cout<<"你確定要清空通訊錄嗎?(Y or N)" <<endl;
cin>>qingkong;
if(qingkong=='Y'||qingkong=='y'){
cleanPerson (&abs);}
else system("pause");//按任意鍵繼續(xù)
system ("cls");//清屏
break;//清空聯(lián)系人
case 0: //退出通訊錄
cout<<"歡迎下次使用"<<endl;
system ("pause");//暫停,等待用戶輸入
return 0;
break;
default: break;
}}}到此這篇關(guān)于C/C++實(shí)現(xiàn)通訊錄管理系統(tǒng)(附源碼)的文章就介紹到這了,更多相關(guān)C++通訊錄管理系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言靜態(tài)與動(dòng)態(tài)通訊錄的實(shí)現(xiàn)流程詳解
這篇文章主要為大家介紹了C語(yǔ)言分別實(shí)現(xiàn)靜態(tài)與動(dòng)態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11
C語(yǔ)言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于C語(yǔ)言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)
在圖像分析的時(shí)候,我們經(jīng)常需要對(duì)單通道圖像的像素進(jìn)行統(tǒng)計(jì)。本文將主要介紹利用C++ OpenCV實(shí)現(xiàn)的圖像像素值統(tǒng)計(jì)的幾種方法,需要的可以參考一下2022-01-01
C語(yǔ)言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
static全局變量與普通的全局變量的區(qū)別詳細(xì)解析
以下是對(duì)static全局變量與普通的全局變量的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-09-09

