用结构体编写一个联系人管理系统

最近打算重新把C++学习一遍;起因是准备考研的时候只看了谭浩强的书,觉得十分混乱,知识点很零散,连贯不起来,所以重新系统地学一遍,感觉会让自己对知识点掌握的更好,对以后学习新东西也有好处。
这个项目是学到结构体这一节的时候的一个练手的项目,原本的项目是把所有代码全和在一个源文件中的,但自己写的时候把它们分开了;在这个过程中也学到了很多东西,有些是自己从没用过的命令,有些是自己没遇到的问题,现在把它们记录下来,作为一个新的开始。

项目名

联系人管理系统

需求分析:实现管理系统的七个功能

1. 添加联系人
2. 显示联系人
3. 删除联系人
4. 查找联系人
5. 修改联系人
6. 清楚通讯录
7. 退出管理系统

如何实现:整个代码分成三个部分

  1. connect头文件:用于定义结构体和声明函数
  2. function源文件:用于函数的实现
  3. main源文件:用于系统功能的实现

主要思路:定义person结构体(联系人)和addressbooks结构体(通讯录);一本通讯录中有很多个联系人;整个功能用switch语句,用以识别输入的指令并执行相应的功能。

⚠注意:由于本人VS输出中文时乱码,所以整个系统的提示输出均由本人蹩脚英语代替,请酌情借鉴

现在咱们开始code

Code

菜单界面

先设计一个菜单界面,供用户选择功能

void showMune() {
	cout << " =============================" << endl;
	cout << "||       1-Add_one           ||" << endl;	//添加联系人
	cout << "||       2-Show_one          ||" << endl;	//显示联系人
	cout << "||       3-Delete_one        ||" << endl;	//删除联系人
	cout << "||       4-Find_one          ||" << endl;	//查找联系人
	cout << "||       5-Change_one        ||" << endl;	//修改联系人
	cout << "||       6-Clear_all         ||" << endl;	//清空联系人
	cout << "||       0-exit_system       ||" << endl;	//退出系统
	cout << " =============================" << endl;

}

联系人和通讯录

接着来定义联系人和通讯录结构体

const int  MAX = 100;

struct person {	//联系人结构
	string name;	//名字
	int gender;		//性别
	int age;		//年龄
	string phone_number;		//电话号码
	string address;		//地址
};

struct addressbooks {
	person personArry[MAX];
	//已经录入的人数
	int psize = 0;
};


main

main源文件,控制整个系统的运转

#include<iostream>
#include<connect.h>

using namespace std;

int main() {
	int select = 0;
	addressbooks index;
	while (true)
	{	
		showMune(); //显示功能菜单
		cout << "please chose a function: " << endl;	//输入要选择的功能
		cin >> select;
		switch (select)
		{
			//添加联系人
		case 1:
			add_one(&index);
			break;
			//显示联系人
		case 2:
			show_one(&index);
			break;
			//删除联系人
		case 3:
			delete_one(&index);
			break;
			//查找联系人
		case 4:
			find_one(&index);
			break;
			//修改联系人
		case 5:
			change_one(&index);
			break;
			//清除联系人
		case 6:
			clear_all(&index);
			break;
			//退出系统
		case 0:
			cout << "exit the system" << endl;
			return 0;

		}
		system("pause");
		system("cls"); //为防止输出的内容过多,进行清屏操作
	}

	//system("pause");
	return 0;
}

菜单界面

main.png

这样整个系统的框架基本上就搭好了

然后是各个功能的实现,查找删除功能等是通过名字来查找的,所以为了方便写了一个判断通讯录中有无联系人的函数

//检测联系人是否存在,如果存在则返回具体位置,否则返回-1
int isExist(addressbooks * index,string name) {
	//遍历通讯录,查找名字
	for (int i = 0; i < index->psize; i++)
		if (index->personArry[i].name == name)
			return i; //返回下标编号
	return -1; //没找到则返回-1

}

现在可以开始添加其他功能了

功能

添加联系人
//添加功能
void add_one(addressbooks * index) {
	//先判断是否已经填满
	if (index->psize >= MAX) {
		cout << "Sorry,It's full!" << endl;
		return;
	}
	else
	{
		//未满,则开始录入数据
		cout << "please enter name: " << endl;
		cin >> index->personArry[index->psize].name;
		cout << "please enter gender: " << endl;
		cout << "1--man\n2--woman" << endl;
		cin >> index->personArry[index->psize].gender;
		cout << "please enter age: " << endl;
		cin >> index->personArry[index->psize].age;
		cout << "please enter phone number: " << endl;
		cin >> index->personArry[index->psize].phone_number;
		cout << "please enter address: " << endl;
		cin >> index->personArry[index->psize].address;
		cout << "opration is done!" << endl;
	}
	index->psize++; //输入成功则+1
}

显示联系人
//显示功能
void show_one(addressbooks * index) {

	if (index->psize == 0) {	//没有联系人
		cout << "there is no person" << endl;
	}
	else if(index->psize < 0)	//计数器出现负数,出错
	{
		cout << "system error" << endl;
	}
	else
	{
		for (int i = 0; i < index->psize; i++) {
			cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
			cout << index->personArry[i].name;
			cout << setw(8) << setfill(' ') << setiosflags(ios::left);
			cout << (index->personArry[i].gender == 1 ? "man":"woman");
			cout << setw(8) << setfill(' ') << setiosflags(ios::left);
			cout << index->personArry[i].age;
			cout << setw(15) << setfill(' ') << setiosflags(ios::left);
			cout << index->personArry[i].phone_number;
			cout << setw(15) << setfill(' ') << setiosflags(ios::left);
			cout << index->personArry[i].address;
			cout << endl;
		}
	}

}

删除联系人
//删除功能
void delete_one(addressbooks * index) {

	//输入人名
	string name;
	cout << "please enter the one you want to delete: " << endl;
	cin >> name;

	//先判断有没有这个人
	int ret = isExist(index, name); //ret存放要删除的人在数组中的位置,没有则是-1

	if (ret == -1)
		cout << "this one dose not exist!" << endl; //发现不存在
	else
	{
		for (int i = ret; i < index->psize;i++) {

			//找到了这个人,数据前移
			index->personArry[i] = index->personArry[i + 1];
		}
		index->psize--; //剔除被删除的人占的位置
		cout << "delete successful!" << endl; //删除成功
	}
	
}

查找联系人
//查找功能
void find_one(addressbooks * index) {

	//输入人名
	string name;
	cout << "please enter the one you want to find: " << endl;
	cin >> name;

	//先判断有没有这个人
	int ret = isExist(index, name);

	if (ret == -1)
		cout << "this one dose not exist!" << endl;
	else
	{
		cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
		cout << index->personArry[ret].name;
		cout << setw(8) << setfill(' ') << setiosflags(ios::left);
		cout << (index->personArry[ret].gender == 1 ? "man" : "woman");
		cout << setw(8) << setfill(' ') << setiosflags(ios::left);
		cout << index->personArry[ret].age;
		cout << setw(15) << setfill(' ') << setiosflags(ios::left);
		cout << index->personArry[ret].phone_number;
		cout << setw(15) << setfill(' ') << setiosflags(ios::left);
		cout << index->personArry[ret].address;
		cout << endl;
		cout << "find successful!" << endl;
	}
	
}


修改联系人
//修改联系人
void change_one(addressbooks * index) {
	//输入人名
	string name;
	cout << "please enter the one you want to change: " << endl;
	cin >> name;

		//先判断有没有这个人
	int ret = isExist(index, name);

	if(ret == -1)
		cout << "this one dose not exist!" << endl;
	else
	{
		//找到联系人,进行修改,输入修改数据
		index->personArry[ret].name = name;
		cout << "please enter gender: " << endl;
		cout << "1--man\n2--woman" << endl;
		int gender = 1;
		cin >> gender;
		index->personArry[ret].gender = gender;
		cout << "please enter age: " << endl;
		int age = 0;
		cin >> age;
		index->personArry[ret].age = age;
		cout << "please enter phone number: " << endl;
		string phone_numbe;
		cin >> phone_numbe;
		index->personArry[ret].phone_number = phone_numbe;
		cout << "please enter address: " << endl;
		string address;
		cin >> address;
		index->personArry[ret].address = address;
		cout << "modify complete!" << endl;
	}
}

清空通讯录
void clear_all(addressbooks* index) {	//清空通讯录

	index->psize = 0;
	cout << "clear done!" << endl;	//只需要做逻辑上的清空,等要录入时覆盖掉原数据就好
}

到此整个系统的功能就设计完了ヾ(•ω•`)o

现在附上完整的代码

connect.h

#pragma once
#include<iostream>

using namespace std;

const int  MAX = 100;

struct person {	//联系人结构
	string name;	//名字
	int gender;		//性别
	int age;		//年龄
	string phone_number;		//电话号码
	string address;		//地址
};

struct addressbooks {
	person personArry[MAX];
	//已经录入的人数
	int psize = 0;
};

void showMune();

void add_one(addressbooks* index);

void show_one(addressbooks* index);

int isExist(addressbooks* index, string name);

void delete_one(addressbooks* index);

void find_one(addressbooks* index);

void change_one(addressbooks* index);

void clear_all(addressbooks* index);


function.cpp

#include<iostream>
#include<string>
#include<connect.h>
#include<iomanip>

using namespace std;

void showMune() {
	cout << " =============================" << endl;
	cout << "||       1-Add_one           ||" << endl;	//添加联系人
	cout << "||       2-Show_one          ||" << endl;	//显示联系人
	cout << "||       3-Delete_one        ||" << endl;	//删除联系人
	cout << "||       4-Find_one          ||" << endl;	//查找联系人
	cout << "||       5-Change_one        ||" << endl;	//修改联系人
	cout << "||       6-Clear_all         ||" << endl;	//清空联系人
	cout << "||       0-exit_system       ||" << endl;	//退出系统
	cout << " =============================" << endl;

}

//添加功能
void add_one(addressbooks * index) {
	//先判断是否已经填满
	if (index->psize >= MAX) {
		cout << "Sorry,It's full!" << endl;
		return;
	}
	else
	{
		//未满,则开始录入数据
		cout << "please enter name: " << endl;
		cin >> index->personArry[index->psize].name;
		cout << "please enter gender: " << endl;
		cout << "1--man\n2--woman" << endl;
		cin >> index->personArry[index->psize].gender;
		cout << "please enter age: " << endl;
		cin >> index->personArry[index->psize].age;
		cout << "please enter phone number: " << endl;
		cin >> index->personArry[index->psize].phone_number;
		cout << "please enter address: " << endl;
		cin >> index->personArry[index->psize].address;
		cout << "opration is done!" << endl;
	}
	index->psize++; //输入成功则+1
}


//显示功能
void show_one(addressbooks * index) {

	if (index->psize == 0) {	//没有联系人
		cout << "there is no person" << endl;
	}
	else if(index->psize < 0)	//计数器出现负数,出错
	{
		cout << "system error" << endl;
	}
	else
	{
		for (int i = 0; i < index->psize; i++) {
			cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
			cout << index->personArry[i].name;
			cout << setw(8) << setfill(' ') << setiosflags(ios::left);
			cout << (index->personArry[i].gender == 1 ? "man":"woman");
			cout << setw(8) << setfill(' ') << setiosflags(ios::left);
			cout << index->personArry[i].age;
			cout << setw(15) << setfill(' ') << setiosflags(ios::left);
			cout << index->personArry[i].phone_number;
			cout << setw(15) << setfill(' ') << setiosflags(ios::left);
			cout << index->personArry[i].address;
			cout << endl;
		}
	}

}


//检测联系人是否存在,如果存在则返回具体位置,否则返回-1
int isExist(addressbooks * index,string name) {
	//遍历通讯录,查找名字
	for (int i = 0; i < index->psize; i++)
		if (index->personArry[i].name == name)
			return i; //返回下标编号
	return -1; //没找到则返回-1

}



//删除功能
void delete_one(addressbooks * index) {

	//输入人名
	string name;
	cout << "please enter the one you want to delete: " << endl;
	cin >> name;

	//先判断有没有这个人
	int ret = isExist(index, name); //ret存放要删除的人在数组中的位置,没有则是-1

	if (ret == -1)
		cout << "this one dose not exist!" << endl; //发现不存在
	else
	{
		for (int i = ret; i < index->psize;i++) {

			//找到了这个人,数据前移
			index->personArry[i] = index->personArry[i + 1];
		}
		index->psize--; //剔除被删除的人占的位置
		cout << "delete successful!" << endl; //删除成功
	}
	
}

//查找功能
void find_one(addressbooks * index) {

	//输入人名
	string name;
	cout << "please enter the one you want to find: " << endl;
	cin >> name;

	//先判断有没有这个人
	int ret = isExist(index, name);

	if (ret == -1)
		cout << "this one dose not exist!" << endl;
	else
	{
		cout << setw(8) << setfill(' ') << setiosflags(ios::left) << endl;
		cout << index->personArry[ret].name;
		cout << setw(8) << setfill(' ') << setiosflags(ios::left);
		cout << (index->personArry[ret].gender == 1 ? "man" : "woman");
		cout << setw(8) << setfill(' ') << setiosflags(ios::left);
		cout << index->personArry[ret].age;
		cout << setw(15) << setfill(' ') << setiosflags(ios::left);
		cout << index->personArry[ret].phone_number;
		cout << setw(15) << setfill(' ') << setiosflags(ios::left);
		cout << index->personArry[ret].address;
		cout << endl;
		cout << "find successful!" << endl;
	}
	
}



//修改联系人
void change_one(addressbooks * index) {
	//输入人名
	string name;
	cout << "please enter the one you want to change: " << endl;
	cin >> name;

		//先判断有没有这个人
	int ret = isExist(index, name);

	if(ret == -1)
		cout << "this one dose not exist!" << endl;
	else
	{
		//找到联系人,进行修改,输入修改数据
		index->personArry[ret].name = name;
		cout << "please enter gender: " << endl;
		cout << "1--man\n2--woman" << endl;
		int gender = 1;
		cin >> gender;
		index->personArry[ret].gender = gender;
		cout << "please enter age: " << endl;
		int age = 0;
		cin >> age;
		index->personArry[ret].age = age;
		cout << "please enter phone number: " << endl;
		string phone_numbe;
		cin >> phone_numbe;
		index->personArry[ret].phone_number = phone_numbe;
		cout << "please enter address: " << endl;
		string address;
		cin >> address;
		index->personArry[ret].address = address;
		cout << "modify complete!" << endl;
	}
}


void clear_all(addressbooks* index) {	//清空通讯录

	index->psize = 0;
	cout << "clear done!" << endl;	//只需要做逻辑上的清空,等要录入时覆盖掉原数据就好
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值