C/C++實現(xiàn)通訊錄管理系統(tǒng)(附源碼)
首先是程序的功能,該程序主要可以實現(xiàn)以下功能:一)添加聯(lián)系人 二)顯示聯(lián)系人 三)刪除聯(lián)系人 四)查找聯(lián)系人 五)修改聯(lián)系人 六)清空聯(lián)系人 七)退出通訊錄。
程序中用到的知識點主要有:結(jié)構(gòu)體、結(jié)構(gòu)體數(shù)組、指針、函數(shù)等。
程序部分功能展示
以下是部分程序功能演示:
各個功能的代碼實現(xiàn)
菜單
我們首先制作一個程序的菜單,為后續(xù)功能的實現(xiàn)做鋪墊。
我們先編寫一個顯示菜單的函數(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ù)中定義一個int型的變量select,從鍵盤中輸入select的值完成對于不同功能的選擇,這里用switch case語句來實現(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ù)的功能我們慢慢添加補充。
添加聯(lián)系人
實現(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)體
//設計聯(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;//住址 }; //設計通訊錄結(jié)構(gòu)體(添加聯(lián)系人) struct Addressbooks{ struct Person personArray[MAX];//通訊錄中保存聯(lián)系人數(shù)組 int m_Size;//記錄當前聯(lián)系人個數(shù) };
聯(lián)系人結(jié)構(gòu)體中包含聯(lián)系人的姓名、性別、年齡、電話和地址,這里不過多贅述。
通訊錄結(jié)構(gòu)體中包含了一個存儲聯(lián)系人信息的數(shù)組,以及記錄當前聯(lián)系人個數(shù)的變量。注意,數(shù)組的最大限度MAX也就是該通訊錄能存儲的聯(lián)系人個數(shù)的最大值。這里為了方便,我們在程序前面加上 #define MAX 1000 ,方便修改MAX的值。
創(chuàng)建好結(jié)構(gòu)體之后,我們需要在主函數(shù)中創(chuàng)建一個通訊錄。即
Addressbooks abs;
好了,做完準備工作之后,我們就要開始編寫添加聯(lián)系人的函數(shù)了。注意,因為我們需要改變實參的 值,所以函數(shù)的參數(shù)需要為指針,進行地址傳遞。
該函數(shù)主要實現(xiàn)以下功能:判斷通訊錄是否已滿,如果未滿,添加聯(lián)系人信息,如果已滿,提醒用戶,通訊錄已滿,無法添加!
以下是代碼實現(xiàn):
//1.添加聯(lián)系人 void addPerson(Addressbooks * abs) { //判斷通訊錄是否已滿 if(abs->m_Size==MAX){//參數(shù)中的一個項使用.,地址中的一個項使用->,這里的abs是一個地址,所以用-> //指針要用-> cout<<"通訊錄已滿,無法添加!"<<endl; return;} else{ //添加具體聯(lián)系人 //姓名 string name; cout<< "請輸入姓名: "<<endl; cin >> name; abs->personArray[abs->m_Size].m_Name=name; //性別 cout<<"請輸入性別: "<<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<<"輸入有誤,請重新輸入"<<endl; } //年齡 cout<<"請輸入年齡:"<<endl; int age=0; cin>>age; abs->personArray [abs->m_Size].m_Age =age; //電話 cout<<"請輸入聯(lián)系電話: "<<endl; string phone; cin>>phone; abs->personArray [abs->m_Size ].m_Phone =phone; //住址 cout<<"請輸入地址:"<<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 //顯示菜單界面 //設計聯(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;//住址 }; //設計通訊錄結(jié)構(gòu)體(添加聯(lián)系人) struct Addressbooks{ struct Person personArray[MAX];//通訊錄中保存聯(lián)系人數(shù)組 int m_Size;//記錄當前聯(lián)系人個數(shù) }; //1.添加聯(lián)系人 void addPerson(Addressbooks * abs) { //判斷通訊錄是否已滿 if(abs->m_Size==MAX){//參數(shù)中的一個項使用.,地址中的一個項使用->,這里的abs是一個地址,所以用-> //指針要用-> cout<<"通訊錄已滿,無法添加!"<<endl; return;} else{ //添加具體聯(lián)系人 //姓名 string name; cout<< "請輸入姓名: "<<endl; cin >> name; abs->personArray[abs->m_Size].m_Name=name; //性別 cout<<"請輸入性別: "<<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<<"輸入有誤,請重新輸入"<<endl; } //年齡 cout<<"請輸入年齡:"<<endl; int age=0; cin>>age; abs->personArray [abs->m_Size].m_Age =age; //電話 cout<<"請輸入聯(lián)系電話: "<<endl; string phone; cin>>phone; abs->personArray [abs->m_Size ].m_Phone =phone; //住址 cout<<"請輸入地址:"<<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<<"當前記錄為空"<<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.檢測聯(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é)束仍然沒有找到 } //3.刪除指定聯(lián)系人 void deletePerson(Addressbooks *abs ){ cout<<"請輸入您要刪除的聯(lián)系人"<<endl; string name; cin>>name; int ret=isExist(abs,name);//if ret=-1.未查到該人 else 查到了 if(ret!=-1){ //查到此人,要進行刪除操作 for(int i=ret;i<abs->m_Size;i++){ // 使數(shù)據(jù)前移,實現(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<<"請輸入您要查找的聯(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<<"查無此人!"<<endl; } system ("pause");//按任意鍵繼續(xù) system ("cls");//清屏 } //5.修改指定聯(lián)系人信息 void modifyPerson(Addressbooks *abs){ cout<<"請輸入您要修改的聯(lián)系人"<<endl; string name; cin>>name; int ret=isExist (abs,name); if(ret!=-1){//找到了指定的聯(lián)系人 //姓名 string name; cout<<"請輸入修改后的姓名: "<<endl; cin>>name; abs->personArray [ret].m_Name =name; //性別 int sex=0; cout<<"請輸入性別:"<<endl; cout<<"1---男"<<endl<<"2---女"<<endl; while(1){ cin>>sex; if(sex==1||sex==2){ abs->personArray [ret].m_Sex =sex; break; } cout<<"輸入有誤,請重新輸入"<<endl; } //年齡 cout<<"請輸入年齡 "<<endl; int age=0; cin>>age; abs->personArray [ret ].m_Age =age; //電話 cout<<"請輸入聯(lián)系電話:"<<endl; string phone; cin>>phone; abs->personArray [ret].m_Phone =phone; //住址 cout<<"請輸入住址:"<<endl; string address; cin>>address; abs->personArray [ret].m_Addr =address; cout<<"修改成功!"<<endl; } else{//未找到指定的聯(lián)系人 cout<<"查無此人!"<<endl; } system("pause"); system("cls");//按任意鍵后清屏 } //6.清空聯(lián)系人 //實現(xiàn)思路:只要將記錄的聯(lián)系人數(shù)重置為0,就可以實現(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; //初始化通訊錄當中當前人員個數(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)系人//功能:設置上限1000人 //步驟:設置聯(lián)系人結(jié)構(gòu)體和通訊錄結(jié)構(gòu)體 main函數(shù)中創(chuàng)建通訊錄 封裝添加聯(lián)系人函數(shù) 測試添加聯(lián)系人功能 case 2: showPerson (& abs);//地址傳遞,可以改變實參的值 break;//顯示聯(lián)系人 case 3://case語句如果很長的話最好用括號括起來形成一個代碼段 /*{ cout<<"請輸入刪除聯(lián)系人的姓名:"<<endl; string name; cin>>name; if(isExist ==-1)cout<<"查無此人"<<endl; else cout<<"找到此人"<<endl;}*/ //檢測練習人是否存在 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++實現(xiàn)通訊錄管理系統(tǒng)(附源碼)的文章就介紹到這了,更多相關(guān)C++通訊錄管理系內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言靜態(tài)與動態(tài)通訊錄的實現(xiàn)流程詳解
這篇文章主要為大家介紹了C語言分別實現(xiàn)靜態(tài)與動態(tài)的通訊錄示例代碼教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2021-11-11C語言對CSV文件從最后往前一行一行讀取的實現(xiàn)方法
今天小編就為大家分享一篇關(guān)于C語言對CSV文件從最后往前一行一行讀取的實現(xiàn)方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12