<C++>5 项目:通讯录管理系统

本文最后更新于:2022年5月24日 早上

5 项目:通讯录管理系统

项目需求:

  • 添加联系人:(序号、姓名、性别、年龄、联系电话、家庭住址)最多 1000 条
  • 显示联系人
  • 删除联系人:按照 姓名 / 电话 / 序号 删除联系人
  • 查找联系人
  • 修改联系人
  • 清空联系人
  • 退出通讯录

一些功能:

system("pause");			//按任意键继续
system("cls");				//清屏

附录:通讯录管理系统

Here.cpp

main 方法

#include<iostream>
using namespace std;

#include"headF1.h"			//自定义头文件

int main() {
	menu();					//通讯录方法
	return 0;
}

headF1.h

头文件

#include<iostream>
using namespace std;


struct Data;						//每条记录对应一个结构体变量
struct Book;						//所有记录被包含在该结构体变量中

void menu();								//程序主方法

void showSingle(const Data* dp);			//展示一条记录

void showMenu(const int* num);				//展示通讯录菜单
void addList(Data* dp, int* num);			//添加一条记录
void showList(const Data* p, int num);		//展示全部记录
void searchList(const Data* dp, int num);	//搜索记录
void changeList(Data* dp, int num);			//修改记录
void deleteSingle(Data* dp, int* num);		//删除一条记录
void clearList(Data* dp, int* num);			//删除全部记录

源文件

混沌!毁灭!RUA!!!

#include "headF1.h"
#include <iostream>
using namespace std;

const int MAX_SIZE = 1000;

struct Data {
	int id = -1;		//联系人 ID,该变量由系统生成,-1 的场合表示空
	string name;		//联系人名
	char gender;		//联系人性别
	int age;			//联系人年龄
	string call;		//联系人电话
	string home;		//联系人住址
};

struct Book {				//保存全部联系人的结构体
    						//不如此做会导致一些问题
	Data list[MAX_SIZE];	//联系人数组
	int num = 0;			//已添加的联系人数量
}book;


void menu() {	
	int userIn;									//接收用户输入
	while (true) {
		showMenu(&book.num);					//方法:显示菜单
		cin >> userIn;
		switch (userIn) {
		case 1:
			cout << "————添加联系人————" << endl;
			addList(book.list, &book.num);		//方法:添加联系人
			break;
		case 2:
			cout << "————显示全部联系人————" << endl;
			showList(book.list, book.num);		//方法:显示通讯录
			break;
		case 3:
			cout << "————查找联系人————" << endl;
			searchList(book.list, book.num);	//方法:查找联系人
			break;
		case 4:
			cout << "————修改联系人————" << endl;
			changeList(book.list, book.num);	//方法:修改联系人
			break;
		case 5:
			cout << "————删除联系人————" << endl;
			deleteSingle(book.list, &book.num);	//方法:删除联系人
			break;
		case 6:
			cout << "————清空联系人————" << endl;
			clearList(book.list, &book.num);	//方法:清空联系人
			break;
		case 9:
			cout << "再次输入 9 退出通讯录系统:";
			cin >> userIn;
			if (userIn == 9) {
				return;
			}
			break;
		}
		system("pause");						//添加一个暂停
		system("cls");							//清屏
	}
}

void showMenu(const int * num) {				//方法:显示菜单
	cout << endl;
	cout << "————通讯录系统(共 " << *num << " 条记录)————" << endl;
	cout << "\t\t1.添加联系人" << endl;
	cout << "\t\t2.显示全部联系人" << endl;
	cout << "\t\t3.查找联系人" << endl;
	cout << "\t\t4.修改联系人" << endl;
	cout << "\t\t5.删除联系人" << endl;
	cout << "\t\t6.清空联系人" << endl;
	cout << "\t\t9.退      出" << endl;
	cout << endl;
	cout << "请选择:";
}



	
void showSingle(const Data* dp) {			//方法:展示单条记录
	cout << dp->id << '\t' << dp->name << '\t' << dp->gender << '\t' << dp->age << '\t' << dp->call << '\t' << dp->home << endl;
}

void addList(Data* dp, int* num) {			//方法:添加联系人
	if (*num >= MAX_SIZE) {
		cout << "通讯录已满" << endl;
		return;
	}
	int id = 0;					//准备分配 ID
	while (true) {				//遍历全部通讯录位置,直到找到空位
		++id;					//其实,ID 即数组下标 + 1
		if (dp->id == -1) {		//位置 id = -1 表示该位为空位
			break;
		}
		else {
			dp++;
		}
	}
	Data nextP;					//创建新的联系人,并初始化
	cout << "请输入联系人姓名:";
	cin >> nextP.name;
	cout << "请输入联系人性别(M/F):";
	cin >> nextP.gender;
	if ((nextP.gender != 'M') && (nextP.gender != 'F')) {
		nextP.gender = '-';
	}
	cout << "请输入联系人年龄:";
	cin >> nextP.age;
	cout << "请输入联系人电话:";
	cin >> nextP.call;
	cout << "请输入联系人家庭住址:";
	cin >> nextP.home;
	nextP.id = id;
	*dp = nextP;				//在刚才确定的位置上,添加联系人
	(*num)++;					//添加的联系人数量 + 1
}
	
void showList(const Data* dp, int num) {		//方法:展示通讯录
	cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
	while (num > 0) {
		if (dp->id >= 0) {
			num--;
			showSingle(dp);		//方法:展示单条记录
		}
		dp++;
	}
}



/*——————————对了,我写啥注释啊,又没人看,溜了——————————*/
/*…………………………………………这么个破代码还看啥看…………………………………………*/



void searchList(const Data* dp, int num) {
	cout << "请输入查找模式(1.ID;2.姓名;3.电话号码;0.取消):" << endl;
	int user;
	cin >> user;
	string temp;
	switch (user) {
	case 1:
		cout << "请输入要查询的 ID:";
		cin >> user;
		while (true) {
			if (num <= 0) {
				cout << "没有找到该联系人" << endl;
				break;
			}
			if (dp->id == -1) {
				continue;
			}
			num--;
			if (dp->id == user) {
				cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
				showSingle(dp);
				break;
			}
			dp++;
		}
		break;
	case 2:
		cout << "请输入要查询的 姓名:";
		cin >> temp;
		user = 0;
		while (true) {
			if (num <= 0) {
				cout << (user == 0 ? "没有找到该联系人" : "查询完毕") << endl;
				break;
			}
			if (dp->id == -1) {
				continue;
			}
			num--;
			if (dp->name == temp) {
				cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
				showSingle(dp);
				user++;
			}
			dp++;
		}
		break;
	case 3:
		cout << "请输入要查询的 电话号码:";
		cin >> temp;
		user = 0;
		while (true) {
			if (num <= 0) {
				cout << (user == 0 ? "没有找到该联系人" : "查询完毕") << endl;
				break;
			}
			if (dp->id == -1) {
				continue;
			}
			num--;
			if (dp->call == temp) {
				cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
				showSingle(dp);
				user++;
			}
			dp++;
		}
		break;
	default:
		return;
	}
}


void changeList(Data* dp, int num) {
	Data* start = dp;
	int num2 = num;
	cout << "请输入查找模式(1.ID;2.姓名;0.返回):" << endl;
	int user;
	cin >> user;
	string temp;
	if (user > 2 || user < 1) {
		return;
	}
	if (user == 2) {
		cout << "请输入要查询的联系人姓名:";
		cin >> temp;
		user = 0;
		while (true) {
			if (num <= 0) {
				if (user == 0) {
					cout << "没有找到该联系人" << endl;
				}
				break;
			}
			if (dp->id == -1) {
				continue;
			}
			num--;
			if (dp->name == temp) {
				cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
				showSingle(dp);
				user++;
			}
			dp++;
		}
	}
	if (user == 0) {
		return;
	}
	dp = start;
	num = num2;
	cout << "请输入要修改的 ID:";
	int id;
	cin >> id;
	while (true) {
		if (num <= 0) {
			cout << "没有找到该联系人" << endl;
			return;
		}
		if (dp->id == -1) {
			continue;
		}
		num--;
		if (dp->id == id) {
			break;
		}
		dp++;
	}
	while (true) {
		cout << "——————————————————————————————" << endl;
		cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
		showSingle(dp);
		cout << "请输入要修改的项(1.姓名;2.性别;3.年龄;4.联系电话;5.家庭住址;0.返回):";
		cin >> user;
		switch (user) {
		case 1:
			cout << "请输入姓名:";
			cin >> dp->name;
			break;
		case 2:
			cout << "请输入性别:";
			cin >> dp->gender;
			break;
		case 3:
			cout << "请输入年龄:";
			cin >> dp->age;
			break;
		case 4:
			cout << "请输入联系电话:";
			cin >> dp->call;
			break;
		case 5:
			cout << "请输入家庭住址:";
			cin >> dp->home;
			break;
		default:
			return;
		}
	}
}


void deleteSingle(Data* dp, int* num) {
	cout << "首先查询联系人(不需要查询输入0)" << endl;
	searchList(dp, *num);
	cout << "请输入要删除的 ID(0.取消):";
	int id;
	cin >> id;
	if (id == 0) {
		return;
	}
	else if (id > 1000 || id < 0) {
		cout << "ID 错误" << endl;
		return;
	}
	int count = *num;
	while (true) {
		if (count <= 0) {
			cout << "没有找到该联系人" << endl;
			return;
		}
		if (dp->id == -1) {
			continue;
		}
		count--;
		if (dp->id == id) {
			break;
		}
		dp++;
	}
	cout << "ID\t姓名\t性别\t年龄\t联系电话\t家庭住址" << endl;
	showSingle(dp);
	cout << "确定删除该联系人吗?(Y/N):";
	char confirm;
	cin >> confirm;
	if (confirm != 'Y' && confirm != 'y') {
		return;
	}
	dp->id = -1;
	(*num)--;
}


void clearList(Data* dp, int* num) {
	char user;
	cout << "确定要删除全部联系人吗?(Y/N):";
	cin >> user;
	if (user != 'Y' && user != 'y') {
		return;
	}
	while (true) {
		if (*num <= 0) {
			return;
		}
		if (dp->id != -1) {
			(*num)--;
			dp->id = -1;
		}
		dp++;
	}
}

<C++>5 项目:通讯录管理系统
https://i-melody.github.io/2022/04/01/C++/入门阶段/5 项目:通讯录管理系统/
作者
Melody
发布于
2022年4月1日
许可协议