C++通訊錄管理系統設計

系統需求

本文主要通過利用C++實現一個通訊錄管理系統
系統需要實現的功能如下:

  • 添加聯繫人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、電話、家庭住址等),最多添加1000人
  • 顯示聯繫人:顯示所有聯繫人信息
  • 刪除聯繫人:按照姓名進行刪除指定人
  • 查找聯繫人:按照姓名查找聯繫人
  • 修改聯繫人:按照姓名修改聯繫人
  • 清空聯繫人:清空通訊簿
  • 退出通信錄:退出當前通信錄

最終效果:
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

1、菜單設計

步驟:

  • 封裝函數顯示該界面 如 void showMenu()
  • 在main函數中調用封裝好的函數
//菜單界面
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;
}

2、退出功能實現

思路:根據不同用戶選擇,進入不同得功能,選擇switch分支

int main() 
{
	int select = 0;
	while (true)
	{
		showMenu();
		cin >> select;
		switch (select)
		{ 
			case 1: //添加聯繫人
				break;
			case 2: //顯示聯繫人
				break;
			case 3: //刪除聯繫人
				break;
			case 4: //查找聯繫人
				break;
			case 5: //修改聯繫人
				break;
			case 6: //清空聯繫人
				break;
			case 0: //退出通訊錄
				cout << "歡迎下次使用" << endl;
				system("pause");
				return 0;
				break;
			default:
				break;
		}
	} 
system("pause");
return 0;
}

3、添加聯繫人

步驟:

  • 設計聯繫人結構體
  • 設計通訊錄結構體
  • main()中創造通訊錄結構體
  • 封裝添加聯繫人函數
  • 測試
//1添加聯繫人
void addPerson(Book * book)
{
	//判斷人滿了沒有
	if (book->p_num == PersonMax)
	{
		cout << "通信錄已滿,無法添加" << endl;
		return;
	}
	else
	{
		

		//顯示聯繫人編號
		cout << "正在進行添加聯繫人操作......" << endl;
		cout << "請輸入編號 " << book->p_num+1 << " 的信息"<< endl ;

		//姓名
		string name;
		cout << "請輸入姓名:";
		cin >> name;
		book->personArray[book->p_num].p_name = name;

		//性別
		int sex = 0;
		cout << "請輸入性別(1----男 2-----女):";

		while (true)      //如果輸入1和2則正確
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				book->personArray[book->p_num].p_sex = sex;
				break;
			}
			cout << "輸入有誤,請重新輸入性別:";
		}

		

		//年齡
		int age = 0;
		cout << "請輸入年齡:";

		while (true)
		{
			cin >> age;
			if (age >= 1 && age <= 100)
			{
				book->personArray[book->p_num].p_age = age;
				break;
			}
			cout << "輸入有誤,請重新輸入年齡:";

		}
		
		//電話
		string phone;
		cout << "請輸入電話:";


		while (true)
		{
			cin >> phone;
			if (phone.size() == 11)
			{
				book->personArray[book->p_num].p_phone = phone;
				break;
			}
			cout << "輸入有誤,請重新輸入電話:";

		}
		

		//地址
		string adrress;
		cout << "請輸入地址:";
		cin >> adrress;
		book->personArray[book->p_num].p_address = adrress;

		cout << "添加成功!"<< endl;

		book->p_num++;

		system("pause");//請按任意鍵繼續
		system("cls");//clear

		
	}
}

4、顯示聯繫人

步驟:

  • 封裝顯示聯繫人函數
  • 測試
//2顯示聯繫人
void showPerson(Book * book)
{
	//判斷是否爲0,
	if (book->p_num == 0)
	{
		cout << "當前記錄爲空" << endl;
	}
	else
	{
		system("cls");
		cout << "通訊錄:\n" << endl;
		for (int i = 0; i < book->p_num; i++)
		{
			cout << "\t 編號:" << i+1 << "\t";
			cout << "姓名:" << book->personArray[i].p_name << "\t";
			cout << "性別:" << (book->personArray[i].p_sex == 1 ? "男" : "女") << "\t";
			cout << "年齡:" << book->personArray[i].p_age << "\t";
			cout << "電話:" << book->personArray[i].p_phone << "\t";
			cout << "地址:" << book->personArray[i].p_address << endl;
		}

	}
	system("pause");
	system("cls");
}

5、刪除聯繫人

步驟:

  • 封裝檢測聯繫人是否存在函數
  • 封裝刪除聯繫人函數
  • 測試
//檢測聯繫人是否存在,存在則返回數組索引,不存在返回-1
int isExit(Book * book, string name)
{
	for (int i = 0; i < book->p_num; i++)
	{
		if (book->personArray[i].p_name == name)
		{
			return i;
		}
	}
	return -1;
}

//刪除聯繫人
void deletePerson(Book * book)
{
	cout << "請輸入刪除的聯繫人:" << endl;
	string name;
	cin >> name;

	int ret = isExit(book, name);

	if (ret == -1)
	{
		cout << "查無此人" << endl;
		system("pause");//請按任意鍵繼續
		system("cls");
	}
	else 
	{
		for (int i = ret; i < book->p_num; i++)
		{
			book->personArray[i] = book->personArray[i + 1];//bug
		}
		book->p_num--;
		cout << "刪除成功" << endl;
		system("pause");
		system("cls");
	}
}

6、 查找聯繫人

步驟:

  • 基於之前的檢測聯繫人函數,封裝查詢聯繫人函數
  • 測試
//查找聯繫人
void findPerson(Book * book)
{
	cout << "請輸入查找聯繫人姓名:" << endl;
	string name;
	cin >> name;

	int ret = isExit(book, name);

	if (ret == -1)
	{
		cout << "查無此人" << endl;

	}
	else
	{
		cout << "已查到結果如下:" << endl;
		cout << "\t 編號:" << ret + 1 << "\t";
		cout << "姓名:" << book->personArray[ret].p_name << "\t";
		cout << "性別:" << (book->personArray[ret].p_sex == 1 ? "男" : "女") << "\t";
		cout << "年齡:" << book->personArray[ret].p_age << "\t";
		cout << "電話:" << book->personArray[ret].p_phone << "\t";
		cout << "地址:" << book->personArray[ret].p_address << endl;
	}
	system("pause");
	system("cls");
}

7、修改聯繫人

  • 基於之前的檢測聯繫人函數,封裝修改聯繫人函數
  • 測試
//修改聯繫人信息
void modifyPerson(Book * book)
{
	cout << "請輸入修改聯繫人的姓名" << endl;
	string name;
	cin >> name;

	int ret = isExit(book, name);

	if (ret == -1)
	{
		cout << "查無此人" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		string name;
		cout << "請輸入姓名:";
		cin >> name;
		book->personArray[ret].p_name = name;

		int sex = 0;
		cout << "請輸入性別(1----男 2-----女):";

		while (true)      //如果輸入1和2則正確
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				book->personArray[ret].p_sex = sex;
				break;
			}
			cout << "輸入有誤,請重新輸入性別:";
		}



		//年齡
		int age = 0;
		cout << "請輸入年齡:";

		while (true)
		{
			cin >> age;
			if (age >= 1 && age <= 100)
			{
				book->personArray[ret].p_age = age;
				break;
			}
			cout << "輸入有誤,請重新輸入年齡:";

		}

		//電話
		string phone;
		cout << "請輸入電話:";


		while (true)
		{
			cin >> phone;
			if (phone.size() == 11)
			{
				book->personArray[ret].p_phone = phone;
				break;
			}
			cout << "輸入有誤,請重新輸入電話:";

		}


		//地址
		string adrress;
		cout << "請輸入地址:";
		cin >> adrress;
		book->personArray[ret].p_address = adrress;

		cout << "修改成功!" << endl;
		system("pause");
		system("cls");

	}

}

8、 清空聯繫人

  • 將人數置0,則邏輯上清空
  • 測試
//清空聯繫人
void clearPerson(Book * book)
{
	cout << "確定清空嗎?輸入 Y or N" << endl;
	string selection;
	cin >> selection;

	if (selection == "Y")
	{
		book->p_num = 0;
		cout << "清空成功!" << endl;
	}
	else if (selection == "N")
	{
		cout << "取消成功" << endl;
	}
	else
	{
		cout << "輸入非法,返回主界面" << endl;
	}
	system("pause");
	system("cls");
}

總體代碼:可直接在C++環境中運行

/*
顯示菜單
1封裝函數顯示界面 void showMenu()
2main函數中調用封裝好的函數
*/

#include <iostream>
#include <string>
using namespace std;

#define PersonMax 1000    //最大記錄人數

//設計聯繫人結構體
struct Person
{
	//姓名
	string p_name;
	//性別:1男2女
	int p_sex;
	//年齡
	int p_age;
	//電話
	string p_phone;
	//地址
	string p_address;
};
//設計通訊錄的結構體
struct Book
{
	//通訊錄中保存的聯繫人數組
	struct Person personArray[PersonMax];//結構體數組,數組的元素 都是 聯繫人結構體
	//通訊錄當前的記錄人數
	int p_num;
};

//菜單界面
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;
}

void addPerson(Book * book);
void showPerson(Book * book);
int isExit(Book * book, string name);
void deletePerson(Book * book);
void modifyPerson(Book * book);
void findPerson(Book * book);
void clearPerson(Book * book);

int main()
{
	
	//創建結構體變量,當前人數爲0
	Book book;
	book.p_num = 0;
	
	int select = 0;//創建用戶輸入變量  根據選項調用switch函數,只有0退出,其他選項則循環顯示界面

	while (true)
	{
		showMenu();

		cin >> select;

		switch (select)
		{
		case 1:
				addPerson(&book);//1、添加聯繫人      addPerson(book);值傳遞不改變結構體,故採用地址傳遞可以修改實參
			break;
		case 2:
				showPerson(&book);// 2、顯示聯繫人
			break;
		case 3:
				deletePerson(&book);//3、刪除聯繫人
			break;
		case 4: findPerson(&book);//4、查找聯繫人
			break;
		case 5:modifyPerson(&book);// 5、修改聯繫人
			break;
		case 6: clearPerson(&book);//6、清空聯繫人
			break;
		case 0:// 0、退出通訊簿
			cout << "歡迎下次使用" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}
	system("pause");//不會一閃而過
	return 0;
}

//1添加聯繫人
void addPerson(Book * book)
{
	//判斷人滿了沒有
	if (book->p_num == PersonMax)
	{
		cout << "通信錄已滿,無法添加" << endl;
		return;
	}
	else
	{
		

		//顯示聯繫人編號
		cout << "正在進行添加聯繫人操作......" << endl;
		cout << "請輸入編號 " << book->p_num+1 << " 的信息"<< endl ;

		//姓名
		string name;
		cout << "請輸入姓名:";
		cin >> name;
		book->personArray[book->p_num].p_name = name;

		//性別
		int sex = 0;
		cout << "請輸入性別(1----男 2-----女):";

		while (true)      //如果輸入1和2則正確
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				book->personArray[book->p_num].p_sex = sex;
				break;
			}
			cout << "輸入有誤,請重新輸入性別:";
		}

		

		//年齡
		int age = 0;
		cout << "請輸入年齡:";

		while (true)
		{
			cin >> age;
			if (age >= 1 && age <= 100)
			{
				book->personArray[book->p_num].p_age = age;
				break;
			}
			cout << "輸入有誤,請重新輸入年齡:";

		}
		
		//電話
		string phone;
		cout << "請輸入電話:";


		while (true)
		{
			cin >> phone;
			if (phone.size() == 11)
			{
				book->personArray[book->p_num].p_phone = phone;
				break;
			}
			cout << "輸入有誤,請重新輸入電話:";

		}
		

		//地址
		string adrress;
		cout << "請輸入地址:";
		cin >> adrress;
		book->personArray[book->p_num].p_address = adrress;

		cout << "添加成功!"<< endl;

		book->p_num++;

		system("pause");//請按任意鍵繼續
		system("cls");//clear

		
	}
}

//2顯示聯繫人
void showPerson(Book * book)
{
	//判斷是否爲0,
	if (book->p_num == 0)
	{
		cout << "當前記錄爲空" << endl;
	}
	else
	{
		system("cls");
		cout << "通訊錄:\n" << endl;
		for (int i = 0; i < book->p_num; i++)
		{
			cout << "\t 編號:" << i+1 << "\t";
			cout << "姓名:" << book->personArray[i].p_name << "\t";
			cout << "性別:" << (book->personArray[i].p_sex == 1 ? "男" : "女") << "\t";
			cout << "年齡:" << book->personArray[i].p_age << "\t";
			cout << "電話:" << book->personArray[i].p_phone << "\t";
			cout << "地址:" << book->personArray[i].p_address << endl;
		}

	}
	system("pause");
	system("cls");
}

//檢測聯繫人是否存在,存在則返回數組索引,不存在返回-1
int isExit(Book * book, string name)
{
	for (int i = 0; i < book->p_num; i++)
	{
		if (book->personArray[i].p_name == name)
		{
			return i;
		}
	}
	return -1;
}

//刪除聯繫人
void deletePerson(Book * book)
{
	cout << "請輸入刪除的聯繫人:" << endl;
	string name;
	cin >> name;

	int ret = isExit(book, name);

	if (ret == -1)
	{
		cout << "查無此人" << endl;
		system("pause");//請按任意鍵繼續
		system("cls");
	}
	else 
	{
		for (int i = ret; i < book->p_num; i++)
		{
			book->personArray[i] = book->personArray[i + 1];//bug
		}
		book->p_num--;
		cout << "刪除成功" << endl;
		system("pause");
		system("cls");
	}
}
//查找聯繫人
void findPerson(Book * book)
{
	cout << "請輸入查找聯繫人姓名:" << endl;
	string name;
	cin >> name;

	int ret = isExit(book, name);

	if (ret == -1)
	{
		cout << "查無此人" << endl;

	}
	else
	{
		cout << "已查到結果如下:" << endl;
		cout << "\t 編號:" << ret + 1 << "\t";
		cout << "姓名:" << book->personArray[ret].p_name << "\t";
		cout << "性別:" << (book->personArray[ret].p_sex == 1 ? "男" : "女") << "\t";
		cout << "年齡:" << book->personArray[ret].p_age << "\t";
		cout << "電話:" << book->personArray[ret].p_phone << "\t";
		cout << "地址:" << book->personArray[ret].p_address << endl;
	}
	system("pause");
	system("cls");
}
//修改聯繫人信息
void modifyPerson(Book * book)
{
	cout << "請輸入修改聯繫人的姓名" << endl;
	string name;
	cin >> name;

	int ret = isExit(book, name);

	if (ret == -1)
	{
		cout << "查無此人" << endl;
		system("pause");
		system("cls");
	}
	else
	{
		string name;
		cout << "請輸入姓名:";
		cin >> name;
		book->personArray[ret].p_name = name;

		int sex = 0;
		cout << "請輸入性別(1----男 2-----女):";

		while (true)      //如果輸入1和2則正確
		{
			cin >> sex;
			if (sex == 1 || sex == 2)
			{
				book->personArray[ret].p_sex = sex;
				break;
			}
			cout << "輸入有誤,請重新輸入性別:";
		}



		//年齡
		int age = 0;
		cout << "請輸入年齡:";

		while (true)
		{
			cin >> age;
			if (age >= 1 && age <= 100)
			{
				book->personArray[ret].p_age = age;
				break;
			}
			cout << "輸入有誤,請重新輸入年齡:";

		}

		//電話
		string phone;
		cout << "請輸入電話:";


		while (true)
		{
			cin >> phone;
			if (phone.size() == 11)
			{
				book->personArray[ret].p_phone = phone;
				break;
			}
			cout << "輸入有誤,請重新輸入電話:";

		}


		//地址
		string adrress;
		cout << "請輸入地址:";
		cin >> adrress;
		book->personArray[ret].p_address = adrress;

		cout << "修改成功!" << endl;
		system("pause");
		system("cls");

	}

}

//清空聯繫人
void clearPerson(Book * book)
{
	cout << "確定清空嗎?輸入 Y or N" << endl;
	string selection;
	cin >> selection;

	if (selection == "Y")
	{
		book->p_num = 0;
		cout << "清空成功!" << endl;
	}
	else if (selection == "N")
	{
		cout << "取消成功" << endl;
	}
	else
	{
		cout << "輸入非法,返回主界面" << endl;
	}
	system("pause");
	system("cls");
}

注:此部分代碼已上傳github:https://github.com/ShuaiWang-Code/c-/tree/master/book

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章