【C++基础】通讯录管理系统

系统需求

通讯录是一个可以记录亲人、好友信息的工具

本教程主要利用C++来实现一个 通讯录管理系统

系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址),且最多记录1000人
  • 显示联系人:显示通讯录中所有联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人的信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

创建项目

创建项目步骤如下:

  • 创建新项目
  • 添加文件

菜单功能

功能描述:用户选择功能的界面

步骤

  • 封装显示菜单函数,如 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;
}

int main() {
    // 菜单调用
    showMenu();

    system("pause");
    return 0;
}

退出功能

功能描述:退出通讯录系统

思路:首先考虑把架子弄出来,使用 多选择的结构,考虑 switchif - else

根据用户不同的选择,进入不同的功能,可以选择switch分支结构,将整个框架进行搭建

当用户选择 0 时,执行退出,若选择其他则先不做操作,也不会退出循环,因为break 退出的是 switch,并不会退出 while 循环,而选择 0 时的 return 0会直接退出程序

int main() {
    int select = 0;  // 创建用户选择输入的变量

    while (true) {
        showMenu();  // 菜单调用

        cin >> select;

        switch (select) {
        case 1:  // 1、添加联系人
            break;
        case 2:  // 2、显示联系人
            break;
        case 3:  // 3、删除联系人
            break;
        case 4:  // 4、查找联系人
            break;
        case 5:  // 5、修改联系人
            break;
        case 6:  // 6、清空联系人
            break;
        case 0:  // 0、退出通讯录
            cout << "欢迎下次使用" << endl;
            system("pause");
            return 0;
        default:
            break;
        }
    }

    system("pause");
    return 0;
}

添加联系人

功能描述:实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)

添加联系人实现步骤

  • 设计 联系人结构体
  • 设计 通讯录结构体(用于存放联系人,并记录当前有多少人在通讯录中)
  • main函数中创建通讯录
  • 封装添加联系人函数
  • 测试添加联系人函数

设计联系人结构体

联系人信息包括:姓名、性别、年龄、联系电话、家庭住址

设计如下:

#include   // string头文件

// 联系人结构体
struct Person {
    string m_Name;  // 姓名
    int m_Sex;  // 性别:1男,2女
    int m_Age;  // 年龄
    string m_Phone;  // 电话
    string m_Addr;  // 住址
};

具体实现:

// 设计联系人结构体
struct Person {
    // 姓名
    string m_Name;

    // 性别  1 男 2 女,提示用户输入数字,从而避免用户输入其他数据
    int m_Sex;

    // 年龄
    int m_Age;

    // 电话
    string m_Phone;

    // 住址
    string m_Addr;
};

设计通讯录结构体

设计时,可以在通讯录结构体中,维护一个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量

#define MAX 1000  // 最大人数,以后要改通讯录人数上限时,在这里修改即可

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

具体实现

// 通讯录结构体
struct Addressbooks {
    // 通讯录中保存的联系人数组
    struct Person personArray[MAX];
    // 用MAX宏常量,方便维护数组大小

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

main函数中创建通讯录

添加联系人函数封装好后,在main函数中创建一个通讯录变量,这个就是我们需要一直维护的通讯录

Addressbooks abs;  // 创建通讯录结构体变量
abs.m_Size = 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;

        // 性别
        cout << "请输入性别:" << endl;
        cout << "1 --- 男" << endl;
        cout << "2 --- 女" << endl;
        int sex = 0;

        while (true) {  // 循环可以让其输入其他数字或字符时,使其重新输入
            // 如果输入的是1 或者 2,可以退出循环,因为输入的是正确值
            // 如果输入有误,需要重新输入
            cin >> sex;
            if (sex == 1 || sex == 2) {
                abs->personArray[abs->m_Size].m_Sex = sex;
                break;
            }
            cout << "输入有误,请重新输入" << endl;
        }

        // 年龄
        cout << "请输入年龄:" << endl;
        int age = 0;
        cin >> age;
        abs->personArray[abs->m_Size].m_Age = age;

        // 电话
        cout << "请输入联系电话:" << endl;
        string phone;
        cin >> phone;
        abs->personArray[abs->m_Size].m_Phone = phone;

        // 家庭住址
        cout << "请输入家庭住址:" << endl;
        string address;
        cin >> address;
        abs->personArray[abs->m_Size].m_Addr = address;

        // 更新通讯录人数
        abs->m_Size++;
        cout << "添加成功" << endl;

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

}

显示联系人

功能描述:显示通讯录中已有的联系人信息

显示联系人实现步骤

  • 封装显示联系人函数
  • 测试显示联系人函数

封装显示联系人函数

思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中的信息

void showPerson(Addressbooks * abs) {
    // 判断通讯录中人数是否为0,如果为0,提示记录为空
    // 如果不为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_Addr << endl;
        }
    }
    system("pause");
    system("cls");
}

删除联系人

功能描述:按照姓名进行删除指定联系人

删除联系人实现步骤

  • 封装检测联系人是否存在
  • 封装删除联系人函数
  • 测试删除联系人功能

封装检测联系人是否存在

在删除、查找、修改,都需要用到这个函数,去按姓名查找信息,所以对其进行封装

设计思路

删除联系人前,需要先判断用户输入的联系人是否存在,如果存在则删除,不存在则提示用户没有要删除的联系人,因此我们可以把检测联系人是否存在封装在一个函数中,如果存在,返回联系人在通讯录中的位置,不存在返回 -1

在switch中,如果case中的语句很长,需要括起来,有时候会报错

【C++基础】通讯录管理系统

比如:

switch (select) {
        case 3: {  // 3、删除联系人
            cout << "请输入删除联系人姓名:" << endl;
            string name;
            cin >> name;

            if (isExist(&abs, name) == -1) cout << "查无此人";
            else cout << "找到此人" << endl;
        }
        }

此时case 3就应当用 {}包括,否则会报错

检测联系人是否存在具体实现:

// 检测联系人是否存在
// 如果存在,返回联系人所在数组中的具体位置,不存在,返回-1
// 参数1 通讯录,参数2 做对比姓名
int isExist(Addressbooks * abs, string name) {
    // 检测本质:遍历通讯录中所有人名,和传进来的人名是否一致,如果一致,返回位置,不一致返回-1
    for (int i = 0; i < abs->m_Size; i++) {
        // 找到用户输入的姓名了
        if (abs->personArray[i].m_Name == name) {
            return i;  // 找到了,返回了这个人在数组中的下标编号
        }
    }
    return -1; // 如果遍历结束都没有找到,返回-1
}

封装删除联系人函数

删除的实现

【C++基础】通讯录管理系统

比如:要将 李四删掉,已知李四下标

删除过程:把王五的数据覆盖李四,赵六覆盖王五,总人数减1

将李四后的数据向前移动,并且让通讯录中记录的人员个数做一个减1的操作

先让王五移动,再让赵六移动,只能一个个移动

根据用户输入的联系人判断该通讯录中是否有此人

查找到进行删除,并提示删除成功

查不到提示查无此人

void deletePerson(Addressbooks * abs) {
    cout << "请输入要删除的联系人:" << endl;
    string name;
    cin >> name;

    int ret = isExist(abs, name);
    // ret == -1 未查到
    // ret != -1 查到了

    if (ret != -1) {
        // 查找到人,进行删除操作
        for (int i = ret; i < abs->m_Size; i++) {  // 让ret位置后面的元素都前移
            // 数据前移操作
            abs->personArray[i] = abs->personArray[i + 1];
        }
        abs->m_Size--;  // 更新通讯录中的人员数
        cout << "删除成功" << endl;
    }
    else {
        cout << "查无此人" << endl;
    }
}

查找联系人

功能描述:按照姓名查看指定联系人信息

查找联系人实现步骤

  • 封装查找联系人函数
  • 测试查找指定联系人

封装查找联系人函数

实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人

void findPerson(Addressbooks * abs) {
    cout << "请输入要查找的联系人:" << endl;
    string name;
    cin >> name;

    // 判断指定的联系人是否存在通讯录中
    int ret = isExist(abs, name);
    // ret == -1 未查到
    // ret != -1 查到了
    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_Phone << "\t";
        cout << "住址:" << abs->personArray[ret].m_Addr << endl;
    }
    else {  // 没找到联系人
        cout << "查无此人" << endl;
    }

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

}

修改联系人

功能描述:按照姓名重新修改指定联系人

修改联系人实现步骤

  • 封装修改联系人函数
  • 测试修改联系人函数

封装修改联系人函数

实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人

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;

        // 性别
        cout << "请输入性别:" << endl;
        cout << "1 --- 男" << endl;
        cout << "2 --- 女" << endl;

        int sex = 0;

        while (true) {
            cin >> sex;
            if (sex == 1 || sex == 2) {
                // 输入正确,退出循环输入
                abs->personArray[ret].m_Sex = sex;
                break;
            }
            cout << "输入有误,请重新输入" << endl;
        }

        // 年龄
        cout << "请输入姓名:" << endl;
        int age = 0;
        cin >> age;
        abs->personArray[ret].m_Age = age;

        // 电话
        cout << "请输入联系电话:" << endl;
        string phone;
        cin >> phone;
        abs->personArray[ret].m_Phone = phone;

        // 住址
        cout << "请输入家庭住址:" << endl;
        string address;
        cin >> address;
        abs->personArray[ret].m_Addr = address;

        cout << "修改成功" << endl;
    }
    else {  // 未找到联系人
        cout << "查无此人" << endl;
    }

    // 按任意键后清屏
    system("pasue");
    system("cls");

}

清空联系人

功能描述:清空通讯录中所有信息

清空联系人实现步骤

  • 封装清空联系人函数
  • 测试清空联系人

封装清空联系人函数

实现思路:将通讯录所有联系人信息清除掉,只要将通讯录记录的联系人数量置为0,做逻辑清空即可。

不需要使用循环将所有人信息清空,逻辑清空即可

void cleanPerson(Addressbooks * abs) {
    cout << "是否真的要清空通讯录" << endl;
    cout << "1 --- 清空" << endl;
    cout << "2 --- 不清空" << endl;

    int select = 0;

    while (true) {
        cin >> select;
        if (select == 1) {
            abs->m_Size = 0;  // 将当前记录联系人数量置为0,做逻辑清空操作
            cout << "通讯录已清空" << endl;
            break;
        }
        else if (select == 2){
            break;
        }
        cout << "输入有误,请重新输入" << endl;
    }

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

完整代码:

#include
#include
#define MAX 1000

using namespace std;

// 设计联系人结构体
struct Person {
    // 姓名
    string m_Name;

    // 性别  1 男 2 女,提示用户输入数字,从而避免用户输入其他数据
    int m_Sex;

    // 年龄
    int m_Age;

    // 电话
    string m_Phone;

    // 住址
    string m_Addr;
};

// 通讯录结构体
struct Addressbooks {
    // 通讯录中保存的联系人数组
    struct Person personArray[MAX];
    // 用MAX宏常量,方便维护数组大小

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

// 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;

        // 性别
        cout << "请输入性别:" << endl;
        cout << "1 --- 男" << endl;
        cout << "2 --- 女" << endl;
        int sex = 0;

        while (true) {  // 循环可以让其输入其他数字或字符时,使其重新输入
            // 如果输入的是1 或者 2,可以退出循环,因为输入的是正确值
            // 如果输入有误,需要重新输入
            cin >> sex;
            if (sex == 1 || sex == 2) {
                abs->personArray[abs->m_Size].m_Sex = sex;
                break;
            }
            cout << "输入有误,请重新输入" << endl;
        }

        // 年龄
        cout << "请输入年龄:" << endl;
        int age = 0;
        cin >> age;
        abs->personArray[abs->m_Size].m_Age = age;

        // 电话
        cout << "请输入联系电话:" << endl;
        string phone;
        cin >> phone;
        abs->personArray[abs->m_Size].m_Phone = phone;

        // 家庭住址
        cout << "请输入家庭住址:" << endl;
        string address;
        cin >> address;
        abs->personArray[abs->m_Size].m_Addr = address;

        // 更新通讯录人数
        abs->m_Size++;
        cout << "添加成功" << endl;

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

}

// 2、显示所有联系人
void showPerson(Addressbooks * abs) {
    // 判断通讯录中人数是否为0,如果为0,提示记录为空
    // 如果不为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_Addr << endl;
        }
    }
    system("pause");
    system("cls");
}

// 检测联系人是否存在
// 如果存在,返回联系人所在数组中的具体位置,不存在,返回-1
// 参数1 通讯录,参数2 做对比姓名
int isExist(Addressbooks * abs, string name) {
    // 检测本质:遍历通讯录中所有人名,和传进来的人名是否一致,如果一致,返回位置,不一致返回-1
    for (int i = 0; i < abs->m_Size; i++) {
        // 找到用户输入的姓名了
        if (abs->personArray[i].m_Name == name) {
            return i;  // 找到了,返回了这个人在数组中的下标编号
        }
    }
    return -1; // 如果遍历结束都没有找到,返回-1
}

// 3、删除指定联系人
void deletePerson(Addressbooks * abs) {
    cout << "请输入要删除的联系人:" << endl;
    string name;
    cin >> name;

    int ret = isExist(abs, name);
    // ret == -1 未查到
    // ret != -1 查到了

    if (ret != -1) {
        // 查找到人,进行删除操作
        for (int i = ret; i < abs->m_Size; i++) {  // 让ret位置后面的元素都前移
            // 数据前移操作
            abs->personArray[i] = abs->personArray[i + 1];
        }
        abs->m_Size--;  // 更新通讯录中的人员数
        cout << "删除成功" << endl;
    }
    else {
        cout << "查无此人" << endl;
    }
}

// 4、查找指定联系人信息
void findPerson(Addressbooks * abs) {
    cout << "请输入要查找的联系人:" << endl;
    string name;
    cin >> name;

    // 判断指定的联系人是否存在通讯录中
    int ret = isExist(abs, name);
    // ret == -1 未查到
    // ret != -1 查到了
    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_Phone << "\t";
        cout << "住址:" << abs->personArray[ret].m_Addr << endl;
    }
    else {  // 没找到联系人
        cout << "查无此人" << endl;
    }

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

}

// 5、修改指定的联系人信息
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;

        // 性别
        cout << "请输入性别:" << endl;
        cout << "1 --- 男" << endl;
        cout << "2 --- 女" << endl;

        int sex = 0;

        while (true) {
            cin >> sex;
            if (sex == 1 || sex == 2) {
                // 输入正确,退出循环输入
                abs->personArray[ret].m_Sex = sex;
                break;
            }
            cout << "输入有误,请重新输入" << endl;
        }

        // 年龄
        cout << "请输入姓名:" << endl;
        int age = 0;
        cin >> age;
        abs->personArray[ret].m_Age = age;

        // 电话
        cout << "请输入联系电话:" << endl;
        string phone;
        cin >> phone;
        abs->personArray[ret].m_Phone = phone;

        // 住址
        cout << "请输入家庭住址:" << endl;
        string address;
        cin >> address;
        abs->personArray[ret].m_Addr = address;

        cout << "修改成功" << endl;
    }
    else {  // 未找到联系人
        cout << "查无此人" << endl;
    }

    // 按任意键后清屏
    system("pasue");
    system("cls");

}

void cleanPerson(Addressbooks * abs) {
    cout << "是否真的要清空通讯录" << endl;
    cout << "1 --- 清空" << endl;
    cout << "2 --- 不清空" << endl;

    int select = 0;

    while (true) {
        cin >> select;
        if (select == 1) {
            abs->m_Size = 0;  // 将当前记录联系人数量置为0,做逻辑清空操作
            cout << "通讯录已清空" << endl;
            break;
        }
        else if (select == 2){
            break;
        }
        cout << "输入有误,请重新输入" << endl;
    }

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

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

int main() {
    // 创建通讯录结构体变量
    Addressbooks abs;

    // 初始化通讯录中当前人员个数
    abs.m_Size = 0;

    int select = 0;  // 创建用户选择输入的变量

    while (true) {
        showMenu();  // 菜单调用

        cin >> select;

        switch (select) {
        case 1:  // 1、添加联系人
            // addPerson函数一定要用地址传递
            addPerson(&abs);  // 利用地址传递,可以修改实参
            break;
        case 2:  // 2、显示联系人
            showPerson(&abs);
            break;
        case 3: {  // 3、删除联系人
            /*cout << "请输入删除联系人姓名:" << endl;
            string name;
            cin >> name;

            if (isExist(&abs, name) == -1) cout << "查无此人";
            else cout << "找到此人" << endl;*/
            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;
        default:
            break;
        }

    }

    system("pause");
    return 0;
}

Original: https://www.cnblogs.com/seansheep/p/15958641.html
Author: 在青青草原上抓羊
Title: 【C++基础】通讯录管理系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608963/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis 通过 RDB 方式进行数据备份与还原

    Redis 通过 RDB 方式进行数据备份与还原 Intro 有的时候我们需要对 Redis 的数据进行迁移,今天介绍一下通过 RDB(快照)文件进行 Redis 数据的备份和还原…

    Linux 2023年5月28日
    0159
  • Windows 域控配置时间同步

    此功能是因内网时间与互联网时间不同步,需我们手动指定互联网NTP服务器来同步时间。一般默认情况下,加域客户端同步的是域主机的时间。如果域控的主机时间不准的话,那么域内的客户端也就随…

    Linux 2023年6月8日
    0151
  • go语言接口

    接口在底层的实现有两个部分:type 和 data。 在源码中,显式地将 nil 赋值给接口时,接口的 type 和 data 都将为 nil。此时,接口与 nil 值判断是相等的…

    Linux 2023年6月13日
    069
  • Linux Centos7.5 vsftp 的安装与配置

    安装及配置 安装 sudo yum install vsftpd -y 服务管理 启动服务 service vsftpd start 关闭服务 service vsftpd sto…

    Linux 2023年6月14日
    084
  • Python垃圾回收和Linux Copy-on-Write机制

    前言 在口袋助理看到了其他部门的同事针对Python2内存占用做的一点优化工作,自己比较感兴趣,遂记录下。 Linux fork简介 fork是Linux提供的创建子进程的系统调用…

    Linux 2023年6月7日
    0127
  • 实用!这17个运维技巧,收藏起来随时备用~

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0110
  • Linux IP 命令略解

    help 为该命令的帮助信息。 实例ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down…

    Linux 2023年5月27日
    0155
  • [编程一生]历史文章分类汇总

    2021年过去了,总结一下我的239篇原创。方便大家利用自带的搜索功能当智能机器人来用。 面试类 方法论 架构类 网络通信与 操作系统原理 稳定性建设 Java 中间件 程序人生 …

    Linux 2023年6月13日
    094
  • Redis 内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的…

    Linux 2023年5月28日
    0125
  • python2.6.6安装Image模块

    python2.6.6安装Image模块1、下载Image模块源码地址:http://www.pythonware.com/products/pil/index.htm2、加压文件…

    Linux 2023年6月14日
    099
  • 小白上手Linux系统Redis安装与部署教程

    一:Redis的安装 1.首先需要下载linux版的redis,官网地址:http://redis.io/download。 2.创建文件夹 mkdir+文件名 3.用ftp将压缩…

    Linux 2023年6月13日
    0139
  • 关于面试的那些事

    这周做了三次的笔试,周日的XXX,周三的XXX,周五的XXX。 首先周日的XXX,考了四道算法题,两个小时,说实话题目都没怎么读懂,算法基本没接触过,结果一道也没有做出来,只想说,…

    Linux 2023年6月7日
    0121
  • docker容器资源限制:限制容器对内存/CPU的访问

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    085
  • 2021年3月-第01阶段-Linux基础-Linux系统的启动流程

    Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题。 上图为Linux操作系统启动流程 1….

    Linux 2023年5月27日
    0125
  • Mysql多实例搭建部署

    【部署背景】 公司测试环境需求多个数据库实例,但是只分配一台MySQL机器,所以进行多实例部署。 【部署搭建】 创建软件包路径 mkdir /data/soft/package /…

    Linux 2023年6月8日
    0115
  • 私有镜像仓库harbor 登录报错 tcp: lookup harbor on 192.168.40.2:53: no such host

    当从docker harbor私服拉取镜像时,报如下错误 [root@node02 ~]# docker login 192.168.40.132Username: adminPa…

    Linux 2023年6月14日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球