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后呼叫相應的函式即可!
感謝閱讀,

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/3361.html
標籤:其他
上一篇:大學生的福音,學習 Java 最強書單推薦,附學習方法
下一篇:什么是編程 編程心得
