<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
通訊錄裡應該存有聯絡人的資訊,包括姓名、性別、電話、地址等等,通訊錄也應該有長度,存的聯絡人要有上限。所以我們這樣確定結構體:
#define Max 1000 struct person { string m_Name; string m_Sex;//規定 1 為男 2為女 int m_age; string m_phone; string m_Address; }; struct addressBooks { struct person personArray[Max];//通訊錄中儲存的聯絡人陣列 int m_size = 0;//通訊錄中人員個數 };
結構體 addressBooks 中定義聯絡人陣列最大為1000,同時初始化人聯絡人為0。還有一點值得注意,被巢狀的結構體person 需要在 addressBooks前建立,避免出現未定義的情況。
要做通訊錄管理系統,就要首先確定系統的功能。所以我確定了通訊錄的增、刪、改、查、顯示、清空和退出 七個功能,程式碼上簡單編寫一個無返回值(void)的函數即可。
void showMenu()//選單功能 { cout << "t*************************" << endl; cout << "t***** 1、新增聯絡人 *****" << endl; cout << "t***** 2、顯示聯絡人 *****" << endl; cout << "t***** 3、查詢聯絡人 *****" << endl; cout << "t***** 4、修改聯絡人 *****" << endl; cout << "t***** 5、刪除聯絡人 *****" << endl; cout << "t***** 6、清空通訊錄 *****" << endl; cout << "t***** 0、退出通訊錄 *****" << endl; cout << "t*************************" << endl; }
tips:這裡“t”會讓遊標向後跳8個字元的位置,可以理解為將選單“居中”顯示,稍微美觀一點。
程式碼展示:
//主函數完整程式碼 int main() { //建立通訊錄結構體變數 addressBooks abc; while (1) { showMenu(); int select = 0; cout << "請選擇你的操作:"; cin >> select; switch (select) { case 1://新增聯絡人 addPerson(&abc); break; case 2://顯示聯絡人 showPerson(&abc); break; case 3://查詢聯絡人 { findPerson(&abc); } break; case 4://修改聯絡人 modifyPerson(&abc); break; case 5://刪除聯絡人 { deletePerson(&abc); }//case 語句 裡的程式碼多的話就用{}括起來,不報錯 break; case 6://清空通訊錄 clearPerson(&abc); break; case 0://退出通訊錄 cout << "歡迎下次使用,祝您生活愉快" << endl; return 0; break; default: cout << "請合理輸入運算元0~6:" << endl; cin >> select; break; } } }
首先建立通訊錄結構體變數,while(1) 是個死迴圈,除非我們選擇“0”功能,執行return 0 語句,否則不會結束迴圈,這也是我們可以重複選擇功能的根本原因。流程控制語句switch case 語句無需多講,只要注意每段語句結束加上break就行了。然後注意這段程式碼都是採用地址傳遞的方法,其實我更喜歡參照傳遞,不過是當時不太瞭解除參照傳遞,關於函數傳參的區別可以參考博主的這篇文章詳解函數傳參的三種方式
void addPerson(addressBooks* abc)//新增聯絡人 { if (abc->m_size >= Max) { cout << "通訊錄已滿,新增失敗" << endl; } else { string name; cout << "新增聯絡人名字:" << endl; cin >> name; abc->personArray[abc->m_size].m_Name = name; int sex = 0; cout << "聯絡人性別為:" << endl; cout << "1---男n" << "2---女n"; cin >> sex; while (1) { if (sex == 1 || sex == 2) { if (sex == 1) abc->personArray[abc->m_size].m_Sex = "男"; else abc->personArray[abc->m_size].m_Sex = "女"; break; } else cout << "輸入有誤,請在數位 1和2中選擇" << endl; cin >> sex; } int age = 0; cout << "聯絡人年齡為:" << endl; cin >> age; abc->personArray[abc->m_size].m_age = age; string phoneNumber = "0"; cout << "聯絡人電話:" << endl; cin >> phoneNumber; abc->personArray[abc->m_size].m_phone = phoneNumber; string address = "0"; cout << "聯絡人地址為:" << endl; cin >> address; abc->personArray[abc->m_size].m_Address = address; cout << "新增成功" << endl; //更新通訊錄人數 abc->m_size++; system("pause"); system("cls"); } }
程式碼詳解
首先判斷通訊錄當前聯絡人數量,如果大於最大值停止新增聯絡人;然後作一個輸入流來輸入聯絡人資訊,利用聯絡人陣列填入聯絡人資訊;姓名屬性我們簡單做了一個範圍選擇,只允許輸入1和0並給出提示1代表男性;倒數第二行 abc->m_size++,更新聯絡人數量;最後有兩個系統函數 system("pause") 和 system("cls"),分別時“按任意鍵繼續...”和清空螢幕函數,讓我們的通訊錄更加穩定和美觀。
void showPerson(addressBooks* abc) { if (abc->m_size == 0) cout << "當前記錄為空" << endl; else { for (int i = 0; i < abc->m_size; i++) { cout << "聯絡人:t" << abc->personArray[i].m_Name << "t性別: " << abc->personArray[i].m_Sex<< "t年齡: " << abc->personArray[i].m_age << "t電話: " << abc->personArray[i].m_phone << "t地址: " << abc->personArray[i].m_Address << endl; } } system("pause"); system("cls"); }
程式碼詳解
首先判斷有無聯絡人,沒有就輸出“當前記錄為空”,然後利用一重for 迴圈輸出所有聯絡人的資訊,最後也是加上暫停函數和清空螢幕函數使執行介面美觀。
判定函數和實現查詢
int isExit(addressBooks* abc, string name)//判定通訊錄是否有此人 { for (int i = 0; i < abc->m_size; i++) { if (abc->personArray[i].m_Name == name) return i; } return -1; } void findPerson(addressBooks* abc) { cout << "輸入要查詢聯絡人的名字:" << endl; string name = "0"; cin >> name; int i = isExit(abc, name); if (i != -1) { cout << "聯絡人:t" << abc->personArray[i].m_Name << "t性別: " << abc->personArray[i].m_Sex << "t年齡: " << abc->personArray[i].m_age << "t電話: " << abc->personArray[i].m_phone << "t地址: " << abc->personArray[i].m_Address << endl; } else { cout << "查無此人" << endl; } system("pause"); system("cls"); }
程式碼詳解
isExit()函數用來返回查詢聯絡人在陣列中的下標,如果沒有該名字就返回 -1;結合findPerson() 函數,如果找到該聯絡人則輸出所有資訊,找不到則輸出“查無此人”,最後也是老套路,使用暫停和清空螢幕函數。
void modifyPerson(addressBooks* abc) { cout << "輸入要修改的聯絡人名字" << endl; string name = "0"; cin >> name; int v = isExit(abc, name); if (v != -1) { string name; cout << "更改後的名字為:" << endl; cin >> name; abc->personArray[v].m_Name = name; int sex = 0; cout << "更改後性別為:" << endl; cout << "1---男n" << "2---女n"; cin >> sex; while (1) { if (sex == 1 || sex == 2) { if (sex == 1) abc->personArray[v].m_Sex = "男"; else abc->personArray[v].m_Sex = "女"; break; } else cout << "輸入有誤,請在數位 1和2中選擇" << endl; cin >> sex; } int age = 0; cout << "更改後年齡為:" << endl; cin >> age; abc->personArray[v].m_age = age; string phoneNumber = "0"; cout << "更改後電話號碼:" << endl; cin >> phoneNumber; abc->personArray[v].m_phone = phoneNumber; string address = "0"; cout << "更改後地址為:" << endl; cin >> address; abc->personArray[v].m_Address = address; cout << "更改成功" << endl; } else { cout << "查無此人" << endl; } system("pause"); system("cls"); }
程式碼詳解
這個功能函數其實很好理解,無非就是判定函數和新增聯絡人功能的結合,這裡就不做詳細介紹了。
void deletePerson(addressBooks* abc) { if (abc->m_size == 0) { cout << "當前記錄為空" << endl; } else { cout << "輸入要刪除的聯絡人:" << endl; string name = "0"; cin >> name; int v = isExit(abc, name); if (v == -1) { cout << "查無此人" << endl; } else if (v != -1) { for (int i = v; i < abc->m_size; i++) { abc->personArray[i] = abc->personArray[i + 1]; } abc->m_size--; cout << "刪除成功" << endl; } } system("pause"); system("cls"); }
程式碼詳解
首先判斷有無聯絡人,沒有就輸出“當前記錄為空”,再利用判斷函數判斷是否有此人,如果存在,那我們也是利用一重回圈,讓 i 等於返回的陣列下標,條件是 i < abc->m_size,注意最好不要寫"<=",因為我們需要將陣列中的元素前移,只需要abc->m_size - 1 個長度就行了。最後將整個聯絡人數量減一,完成刪除操作。
void clearPerson(addressBooks* abc) { abc->m_size = 0; cout << "通訊錄已清空" << endl; system("pause"); system("cls"); }
將聯絡人陣列置為零,即可清空通訊錄。
//Txl.h #include<iostream> using namespace std; #define Max 1000 struct person { string m_Name; string m_Sex;//規定 1 為男 2為女 int m_age; string m_phone; string m_Address; }; struct addressBooks { struct person personArray[Max];//通訊錄中儲存的聯絡人陣列 int m_size = 0;//通訊錄中人員個數 }; void addPerson(addressBooks* abc); //新增聯絡人 void showPerson(addressBooks* abc); //顯示聯絡人 int isExit(addressBooks* abc, string name); //遍歷通訊錄 void deletePerson(addressBooks* abc); //刪除聯絡人 void findPerson(addressBooks* abc); //查詢聯絡人 void modifyPerson(addressBooks* abc); //修改聯絡人 void clearPerson(addressBooks* abc); //清空通訊錄 //Txl.cpp #include"Txl.h" void addPerson(addressBooks* abc)//新增聯絡人 { if (abc->m_size >= Max) { cout << "通訊錄已滿,新增失敗" << endl; } else { string name; cout << "新增聯絡人名字:" << endl; cin >> name; abc->personArray[abc->m_size].m_Name = name; int sex = 0; cout << "聯絡人性別為:" << endl; cout << "1---男n" << "2---女n"; cin >> sex; while (1) { if (sex == 1 || sex == 2) { if (sex == 1) abc->personArray[abc->m_size].m_Sex = "男"; else abc->personArray[abc->m_size].m_Sex = "女"; break; } else cout << "輸入有誤,請在數位 1和2中選擇" << endl; cin >> sex; } int age = 0; cout << "聯絡人年齡為:" << endl; cin >> age; abc->personArray[abc->m_size].m_age = age; string phoneNumber = "0"; cout << "聯絡人電話:" << endl; cin >> phoneNumber; abc->personArray[abc->m_size].m_phone = phoneNumber; string address = "0"; cout << "聯絡人地址為:" << endl; cin >> address; abc->personArray[abc->m_size].m_Address = address; cout << "新增成功" << endl; //更新通訊錄人數 abc->m_size++; system("pause"); system("cls"); } } void showPerson(addressBooks* abc) { if (abc->m_size == 0) cout << "當前記錄為空" << endl; else { for (int i = 0; i < abc->m_size; i++) { cout << "聯絡人:t" << abc->personArray[i].m_Name << "t性別: " << abc->personArray[i].m_Sex<< "t年齡: " << abc->personArray[i].m_age << "t電話: " << abc->personArray[i].m_phone << "t地址: " << abc->personArray[i].m_Address << endl; } } system("pause"); system("cls"); } int isExit(addressBooks* abc, string name)//判定通訊錄是否有此人 { for (int i = 0; i < abc->m_size; i++) { if (abc->personArray[i].m_Name == name) return i; } return -1; } void findPerson(addressBooks* abc) { cout << "輸入要查詢聯絡人的名字:" << endl; string name = "0"; cin >> name; int i = isExit(abc, name); if (i != -1) { cout << "聯絡人:t" << abc->personArray[i].m_Name << "t性別: " << abc->personArray[i].m_Sex << "t年齡: " << abc->personArray[i].m_age << "t電話: " << abc->personArray[i].m_phone << "t地址: " << abc->personArray[i].m_Address << endl; } else { cout << "查無此人" << endl; } system("pause"); system("cls"); } void deletePerson(addressBooks* abc) { if (abc->m_size == 0) { cout << "當前記錄為空" << endl; } else { cout << "輸入要刪除的聯絡人:" << endl; string name = "0"; cin >> name; int v = isExit(abc, name); if (v == -1) { cout << "查無此人" << endl; } else if (v != -1) { for (int i = v; i < abc->m_size; i++) { abc->personArray[i] = abc->personArray[i + 1]; } abc->m_size--; cout << "刪除成功" << endl; } } system("pause"); system("cls"); } void modifyPerson(addressBooks* abc) { cout << "輸入要修改的聯絡人名字" << endl; string name = "0"; cin >> name; int v = isExit(abc, name); if (v != -1) { string name; cout << "更改後的名字為:" << endl; cin >> name; abc->personArray[v].m_Name = name; int sex = 0; cout << "更改後性別為:" << endl; cout << "1---男n" << "2---女n"; cin >> sex; while (1) { if (sex == 1 || sex == 2) { if (sex == 1) abc->personArray[v].m_Sex = "男"; else abc->personArray[v].m_Sex = "女"; break; } else cout << "輸入有誤,請在數位 1和2中選擇" << endl; cin >> sex; } int age = 0; cout << "更改後年齡為:" << endl; cin >> age; abc->personArray[v].m_age = age; string phoneNumber = "0"; cout << "更改後電話號碼:" << endl; cin >> phoneNumber; abc->personArray[v].m_phone = phoneNumber; string address = "0"; cout << "更改後地址為:" << endl; cin >> address; abc->personArray[v].m_Address = address; cout << "更改成功" << endl; } else { cout << "查無此人" << endl; } system("pause"); system("cls"); } void clearPerson(addressBooks* abc) { abc->m_size = 0; cout << "通訊錄已清空" << endl; system("pause"); system("cls"); } //函數宣告,可加可不加,這裡加上為了更直觀的表現出來 void addPerson(addressBooks* abc); //新增聯絡人 void showPerson(addressBooks* abc); //顯示聯絡人 int isExit(addressBooks* abc, string name); //遍歷通訊錄 void deletePerson(addressBooks* abc); //刪除聯絡人 void findPerson(addressBooks* abc); //查詢聯絡人 void modifyPerson(addressBooks* abc); //修改聯絡人 void clearPerson(addressBooks* abc); //清空通訊錄
還有更多功能就不展示了,你們可以複製原始碼後自己操作,挺有趣的喔
我們在編譯器的上面選擇Release,並啟動偵錯,然後這個專案對應的資料夾會自動生成Release資料夾,點開就是第二個圖的內容,然後雙擊就可以執行了,實測分享給朋友也可以用哦
到此這篇關於C++實現完整功能的通訊錄管理系統詳解的文章就介紹到這了,更多相關C++通訊錄內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45