当前位置: 首页 > 工具软件 > C-Plus-Plus > 使用案例 >

C-plus-plus&CMake实战

唐元凯
2023-12-01

系统需求

  • 添加联系人:向通讯录添加新人(姓名、性别、年龄、联系电话、家庭住址)最多记录500人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按姓名索引删除指定联系人
  • 查找联系人:按姓名索引查找指定联系人
  • 修改联系人:按姓名索引修改指定联系人
  • 清空联系人:清空通讯录中所有的联系人信息
  • 退出通讯录:退出当前使用的通讯录系统

源代码

/* file_name: Main.cpp
** author: Wei Li
** date: 2020-06-16
** Copyright © 2020 Wei Li, All Rights Reserved.
** GitHub: https://github.com/2694048168/
** Gitee:https://gitee.com/weili_yzzcq/
** Blog:https://2694048168.github.io/
** Blog:https://weili_yzzcq.gitee.io/ 
** Blog:https://blog.csdn.net/weixin_46782218/
*/

// 头文件区
// the area of Header files
#include <iostream>
#include <string>
using namespace std;

// 全局变量区
// the area of Global variables
// 通讯录最大储存联系人
#define MAX 500

// 联系人结构体
struct Person
{
	// 姓名
    string m_Name;
	// 性别
    unsigned int m_Sex;
	// 年龄
    unsigned int m_Age;
	// 电话
    string m_Phone;
	// 地址
    string m_Addr;
};

// 通讯录结构体
struct Addressbooks
{
	// 通讯录中保存联系人数组
	struct Person personArray[MAX];

	// 通讯录中当前记录的联系人个数
	unsigned int m_Size;
};

// 全局函数声明区
// the area of Global function declaration
/* 功能:显示菜单命令
** 返回值:void
** 函数名:showMenu
** 参数列表:void
** 参数传递类型:void
** 函数调用:showMenu();
*/
void showMenu();

/* 功能:添加联系人
** 返回值:void
** 函数名:addPerson
** 参数列表:通讯录结构体abs
** 参数传递类型:地址传递
** 函数调用:addPerson(&abs);
*/
void addPerson(Addressbooks * abs);

/* 功能:显示联系人
** 返回值:void
** 函数名:showPerson
** 参数列表:通讯录结构体abs
** 参数传递类型:地址传递
** 函数调用:showPerson(&abs);
*/
void showPerson(Addressbooks * abs);

/* 功能:检测联系人是否在当前通讯录中
** 返回值:int
** 函数名:isExist
** 参数列表:通讯录结构体abs、检测联系人姓名name
** 参数传递类型:地址传递、值传递
** 函数调用:isExist(&abs);
*/
int isExist(Addressbooks * abs, string name);

/* 功能:删除联系人
** 返回值:void
** 返回值说明:i代表着该联系人在通讯录中的索引,-1代表着查无此联系人
** 函数名:deletePerson
** 参数列表:通讯录结构体abs
** 参数传递类型:地址传递
** 函数调用:deletePerson(abs, name);
*/
void deletePerson(Addressbooks * abs);

/* 功能:查找联系人
** 返回值:void
** 函数名:findPerson
** 参数列表:通讯录结构体abs
** 参数传递类型:地址传递
** 函数调用:findPerson(&abs);
*/
void findPerson(Addressbooks * abs);

/* 功能:修改联系人
** 返回值:void
** 函数名:modifyPerson
** 参数列表:通讯录结构体abs
** 参数传递类型:地址传递
** 函数调用:modifyPerson(&abs);
*/
void modifyPerson(Addressbooks * abs);

/* 功能:删除联系人
** 返回值:void
** 函数名:cleanPerson
** 参数列表:通讯录结构体abs
** 参数传递类型:地址传递
** 函数调用:cleanPerson(&abs);
*/
void cleanPerson(Addressbooks * abs);


/* 通讯录管理系统——the Contacts Management System
** 
** 添加联系人:向通讯录添加新人(姓名、性别、年龄、联系电话、家庭住址)最多记录500人
** 显示联系人:显示通讯录中所有联系人信息
** 删除联系人:按姓名索引删除指定联系人
** 查找联系人:按姓名索引查找指定联系人
** 修改联系人:按姓名索引修改指定联系人
** 清空联系人:清空通讯录中所有的联系人信息
** 退出通讯录:退出当前使用的通讯录系统 
**
*/
int main(int argc, char const *argv[])
{
	// 创建通讯录结构体变量
	Addressbooks abs;
	// 初始化通讯录当前联系人个数
	abs.m_Size = 0;

	// 接受用户输入命令
	unsigned int select = 0;

	// 循环接受用户命令
	while(true)
	{
		// 菜单函数
	    showMenu();

	    // 接受用户输入
		cin >> select;

		switch(select)
		{
		case 1: // 1、添加联系人
		    addPerson(&abs);
			break;

		case 2: // 2、显示联系人
		    showPerson(&abs);
			break;

		case 3: // 3、删除联系人
            deletePerson(&abs);
			break;

		case 4: // 4、查找联系人
		    findPerson(&abs);
			break;

		case 5: // 5、修改联系人
		    modifyPerson(&abs);
			break;

		case 6: // 6、清空联系人
		    cleanPerson(&abs);
			break;

		case 0: // 0、退出通信录
		    cout << "欢迎下次使用系统!" << endl;
		    system("pause");
		    return 0;
			break;

		default:
		    break;
		}
	}
    
	return 0;
}


// 全局函数实现区
// the area of Global function implementation
/* Function:show the user menu command
** Return:void
** Parameter:abs
** Parameter Passing Type:Address Passing or Pointer Passing
** Function Call:deletePerson();
**
** 源代码仓库地址:
** GitHub:git@github.com:2694048168/C-LanguageProjectCombat.git
** Gitee:git@gitee.com:weili_yzzcq/C-LanguageProjectCombat.git
*/

CMake

# #############################################################
# author: Wei Li
# date: 2020-06-16
# Copyright © 2020 Wei Li, All Rights Reserved.
# GitHub: https://github.com/2694048168/
# Gitee:https://gitee.com/weili_yzzcq/
# Blog:https://2694048168.github.io/
# Blog:https://weili_yzzcq.gitee.io/ 
# Blog:https://blog.csdn.net/weixin_46782218/
# #############################################################

# step1 CMakeLists.txt
# 1、工程配置部分
# 指定CMake最低版本号要求
cmake_minimum_required (VERSION 3.5)
# 项目信息
project (the_contact_managerment_system)
# 设置编译版本 如“-std=c++11”、“-std=c++14”、“-std=c++17”、“-std=c++20”
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -std=c++11")
# 设置编译模式,如“Debug”、“Release”
set (CMake_BUILD_TYPE "Debug")

# 2、依赖执行部分
# 设置源代码路径
set (source_dir "${PROJECT_SOURCE_DIR}/src/")
# 设置需要编译的源文件
file (GLOB source_files "${source_dir}/*.cpp")
# 设置编译的输出目标文件
add_executable (the_contact_managerment_system ${source_files})

# step2 编译结构目录
# 创建项目工作空间
mkdir the_contact_managerment_system
# 进入项目工作空间
cd the_contact_managerment_system
# 创建 CMakelists.txt 文件
touch CMakelists.txt
# 编写 CMakelists.txt 内容
vim CMakelists.txt
# 创建外部编译目录
mkdir build
# 创建源代码文件
mkdir src
# 进入源代码目录
cd src
# 创建 Main.cpp 文件
touch Main.cpp

# step3 CodeLite
# 进入外部编译目录 build
cd build
# 为 CodeLite IDE 创建工作空间
cmake -G "CodeLite - Unix Makefiles" ..
# 查看生成的项目工作空间文件
ll
# 启动 CodeLite IDE 打开项目工作空间文件
codelite the_contact_managerment_system.workspace &

# step4 继续完成项目的内容,同时完善 CMakelists.txt 文件

 类似资料: