基于C++的通讯管理系统

2023-05-16

1、系统需求

通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现-个通讯录管理系统
系统中需要实现的功能如下:
●添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
●显示联系人:显示通讯录中所有联系人信息
●删除联系人:按照姓名进行删除指定联系人
●查找联系人:按照姓名查看指定联系人信息
●修改联系人:按照姓名重新修改指定联系人
●清空联系人:清空通讯录中所有信息
●退出通讯录:退出当前使用的通讯录

2、创建项目

我这边为了适应老版本的环境,使用的是Microsoft Visual Studio 2005环境创建了一个新项目。 

然后再头文件中右键“添加”->新建项->创建“通讯管理系统.cpp”文件

这样就完成了C++的项目创建。

3、菜单功能

        功能描述:用户选择功能的界面
        菜单界面效果如下图:

                 

步骤:
        ●封装函数显示该界面如void showMenu()
        ●在main函数中调用封装好的函数
代码:

//-封装函数显示该界面如void showMenu()
//-在main函数中调用封装好的函数
#include <iostream>
using namespace std;

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

4、退出功能

功能描述:退出通讯录系统
思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构, 将整个架构进行搭建
当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序
代码:

//-封装函数显示该界面如void showMenu()
//-在main函数中调用封装好的函数
#include <iostream>
using namespace std;

// 菜单界面
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()
{
   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;
         break;
      default:
         break;
      }
   }

   system("pause");
   return 0;
}

5、添加联系人

功能描述:
实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
添加联系人实现步骤:
  ●设计联系人结构体
  ●设计通讯录结构体
  ●main函数中创建通讯录
  ●封装添加联系人函数
  ●测试添加联系人功能
5.1设计联系人结构体.
  联系人信息包括:姓名、性别、年龄、联系电话、家庭住址
  设计如下:

#include <string>

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

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

#define MAX 1000

// 设计通讯录结构体
struct Addressbooks
{
   /* data */
   // 通讯录中保存的联系人数组
   struct Person personArray[MAX];
   // 通讯录中当前记录联系人个数
   int m_Size;
};

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

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

5.4封装添加联系人函数
思路:添加联系人前先判断通讯录是否E 3满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录
添加联系人代码:

// 1、添加联系人
void addPerson(Addressbooks *abs)
{
   // 判断通讯录是否已满,如果满了就不再添加
   if (abs->m_Size == MAX)
   {
      cout << "通讯录已满,无法添加!" << endl;
   }
   else
   {
      // 添加具体联系人
      // 姓名
      string name;
      cout << "请输入姓名:" << endl;
      cin >> name;
      abs->personArray[abs->m_Size].m_Name = name;

      // 性别
      int sex = 0;
      cout << "请输入性别:" << endl;
      cout << "1 --- 男" << endl;
      cout << "2 --- 女" << endl;
      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 = 0;
      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++;

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

5.5测试添加联系人功能
选择界面中,如果玩家选择了1,代表添加联系人,我们可以测试下该功能;在switch case语句中,case1 里添加:

 case 1:             // 1、添加联系人
         addPerson(&abs); // 利用地址传递,可以修饰实参
         break;

测试效果图:



6、显示联系人

功能描述:显示通讯录中已有的联系人信息
显示联系人实现步骤:
  ●封装显示联系人函数
  ●测试显示联系人功能
6.1封装显示联系人函数
  思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息
显示联系人代码:

// 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");   // 清屏操作
}

7、删除联系人

功能描述:按照姓名进行删除指定联系人
删除联系人实现步骤:
  ●封装检测联系人是否存在
  ●封装删除联系人函数
  ●测试删除联系人功能
7.1封装检测联系人是否存在,
设计思路: .
删除联系人前,我们需要先判断用户输入的联系人是否存在,如果存在删除,不存在提示用户没有要删除的联系人
因此我们可以把检测联系人是否存在封装成一个函数中, 如果存在,返回联系人在通讯录中的位置,不存在返回-1

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

7.2封装删除联系人函数
根据用户输入的联系人判断该通讯录中是否有此人
查找到进行删除,并提示删除成功
查不到提示查无此人。

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

   // ret==-1 未查到
   // ret!=-1 查到了
   int ret = isExist(abs, name);
   if (ret != -1)
   {
      // 查找到人,要进行删除操作
      for (int i = ret; i < abs->m_Size; i++)
      {
         // 数据前移
         abs->personArray[i] = abs->personArray[i + 1];
      }
      abs->m_Size--; // 更 新通讯录中的人员数
      cout << "删除成功" << endl;
   }
   system("pause");
   system("cls");
}

8、查找联系人

功能描述:按照姓名查看指定联系人信息
查找联系人实现步骤
  ●封装查找联系人函数
  ●测试查找指定联系人
8.1封装查找联系人函数
  实现思路:判断用户指定的联系人是否存在,如果存在显示信息,不存在则提示查无此人。
查找联系人代码:

void findPerson(Addressbooks *abs)
{
   cout << " 请输入您要查找的联系人" << endl;
   string name;
   cin >> name;
   // 判断指定的联系人是否存在通讯录中
   int ret = isExist(abs, name);
   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");
}

8.2测试查找指定联系人
在switch case语句中,case4里添加: 

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

9、修改联系人

功能描述:按照姓名重新修改指定联系人
修改联系人实现步骤
  ●封装修改联系人函数
  ●测试修改联系人功能
9.1封装修改联系人函数
实现思路:查找用户输入的联系人,如果查找成功进行修改操作,查找失败提示查无此人
修改联系人代码:

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

      // 性别
      int sex = 0;
      cout << "请输入性别:" << endl;
      cout << "1 --- 男" << endl;
      cout << "2 --- 女" << endl;
      while (true)
      {
         // 如果输入的是1或者2可以退出循环,因为输入的是正确值
         // 如果输入有误,重新输入
         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("pause");
   system("cls");
}

9.2测试修改联系人功能
在switch case语句中,case 5里添加:

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

10、 清空联系人

功能描述:清空通讯录中所有信息
清空联系人实现步骤
  ●封装清空联系人函数
  ●测试清空联系人
10.1封装清空联系人函数
  实现思路:将通讯录所有联系人信息清除掉, 只要将通讯录记录的联系人数是置为0,做逻辑清空即可。
清空联系人代码:

// 6、清空联系人
void cleanPerson(Addressbooks *abs)
{
   abs->m_Size = 0; // 将 当期记录联系人数量置为0,做逻辑清空操作
   cout << "通讯录已清空" << endl;

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

10.2测试清空联系人
在switch case语句中,case 6里添加:

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

至此,通讯管理系统编辑完成!

完整代码:

//-封装函数显示该界面如void showMenu()
//-在main函数中调用封装好的函数
#include <iostream>
using namespace std;
#include <string>
#define MAX 1000

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

// 设计通讯录结构体
struct Addressbooks
{
   /* data */
   // 通讯录中保存的联系人数组
   struct Person personArray[MAX];
   // 通讯录中当前记录联系人个数
   int m_Size;
};

// 1、添加联系人
void addPerson(Addressbooks *abs)
{
   // 判断通讯录是否已满,如果满了就不再添加
   if (abs->m_Size == MAX)
   {
      cout << "通讯录已满,无法添加!" << endl;
   }
   else
   {
      // 添加具体联系人
      // 姓名
      string name;
      cout << "请输入姓名:" << endl;
      cin >> name;
      abs->personArray[abs->m_Size].m_Name = name;

      // 性别
      int sex = 0;
      cout << "请输入性别:" << endl;
      cout << "1 --- 男" << endl;
      cout << "2 --- 女" << endl;
      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)
{
   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;

   // ret==-1 未查到
   // ret!=-1 查到了
   int ret = isExist(abs, name);
   if (ret != -1)
   {
      // 查找到人,要进行删除操作
      for (int i = ret; i < abs->m_Size; i++)
      {
         // 数据前移
         abs->personArray[i] = abs->personArray[i + 1];
      }
      abs->m_Size--; // 更 新通讯录中的人员数
      cout << "删除成功" << endl;
   }
   else
   {
      cout << "查无此人" << endl;
   }
   system("pause");
   system("cls");
}

// 4、查找联系人
void findPerson(Addressbooks *abs)
{
   cout << " 请输入您要查找的联系人" << endl;
   string name;
   cin >> name;
   // 判断指定的联系人是否存在通讯录中
   int ret = isExist(abs, name);
   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;

      // 性别
      int sex = 0;
      cout << "请输入性别:" << endl;
      cout << "1 --- 男" << endl;
      cout << "2 --- 女" << endl;
      while (true)
      {
         // 如果输入的是1或者2可以退出循环,因为输入的是正确值
         // 如果输入有误,重新输入
         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("pause");
   system("cls");
}

// 6、清空联系人
void cleanPerson(Addressbooks *abs)
{
   abs->m_Size = 0; // 将 当期记录联系人数量置为0,做逻辑清空操作
   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(&abs); // 利用地址传递,可以修饰实参
         break;
      case 2: // 2、显示联系人
         showPerson(&abs);
         break;
      case 3: // 3、删除联系人
         // {
         //    cout << "请输入删除联系人姓名:" << endl;
         //    string name;
         //    cin >> name;
         //    if (isExist(&abs, name) == -1)
         //    {
         //       cout << "查无查无此人" << endl;
         //    }
         //    else
         //    {
         //       cout << "查无查无此人" << endl;
         //    }
         // }
         deletePerson(&abs);
         break;
      case 4: // 4、查找联系人
         findPerson(&abs);
         break;
      case 5: // 5、修改联系人
         modifyPerson(&abs);
         break;
      case 6: // 6、清空联系人
         break;
      case 0: // 0、退出联系人

         cout << "欢迎下次使用" << endl;
         system("pause");
         return 0;
         break;
      default:
         break;
      }
   }

   system("pause");
   return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于C++的通讯管理系统 的相关文章

  • git 解决pull origin 错误 error: The following untracked working tree files would be overwritten by merge

    error The following untracked working tree files would be overwritten by merge bin AndroidManifest xml Please move or re
  • SpringBootTest单元测试组件

    SpringBootTest单元测试组件 一 SpringbootTest 使用Junit4开发 1 添加依赖 span class token tag span class token tag span class token punct
  • ICE C++ Hello World

    ICE C 43 43 Hello World实例教程 1 概述 本文演示了如何编写一个最简单的C 43 43 ICE Internet Communications Engine 应用程序 xff0c 包括必要环境的安装 该应用程序包含客
  • 华为工作的感悟

    参考 xff1a http www openlab net cn forums thread 1002986 1 p10035795 北邮北 xff0c 清华硕 xff0c 一年两个月的华为生活总结 xff0c 算了 xff0c 贴出来了
  • MRCP 媒体资源控制协议

    媒体资源控制协议 xff08 Media Resource Control Protocol MRCP xff09 是一种通讯协议 xff0c 用于语音服务器向客户端提供各种语音服务 如语音识别和语音合成 MRCP并不定义会话连接 xff0
  • Hadoop中VIntWritable编码方式解析

    最近因为实验室的云计算项目 xff0c 开始学习Hadoop xff0c 有时间就记录一下自己在学习过程中的一些小收获吧 Hadoop权威指南 在序列化这一节有个例子程序 xff0c 叫做TextPair xff0c 代码略长 xff0c
  • 测试分析报告

    测试分析报告 1 引言 1 1 1 编写目的 1 1 2 背景 1 1 3 定义 2 1 4 参考资料 2 2 测试概要 2 3 测试结果及发现 3 3 1 测试 1 xff08 normal xff09 3 3 2 测试 2 xff08
  • MapReduce中的二次排序

    在MapReduce操作时 xff0c 我们知道传递的 lt key value gt 会按照key的大小进行排序 xff0c 最后输出的结果是按照key排过序的 有的时候我们在key排序的基础上 xff0c 对value也进行排序 这种需
  • 基于哈夫曼编码的文件压缩解压

    这个程序是研一上学期的课程大作业 当时 xff0c 跨专业的我只有一点 C 语言和数据结构基础 xff0c 为此 xff0c 我查阅了不少资料 xff0c 再加上自己的思考和分析 xff0c 实现后不断调试 测试和完善 xff0c 耗时一周
  • Errors were encountered while processing 解决方法

    在执行更新或者安装软件命令时 sudo apt get upgrade sudo apt get install 遇到 xff1a Errors were encountered while processing 查看错误信息发现 xff1
  • JSON传list数据到springMVC后台并用对象接收

    在项目中经常获取前台table中的数据 然后拼接传向后台 之前一直按照JSON格式拼接 但是非常容易出问题 而且遇到了类似List lt beans gt list 这样的参数 springMVC转化为对象会报错 正确的做法是按下面这种做法
  • Java解析网络数(Json)运用CloseableHttpClient

    最近做用Java网络爬取数据的部分 xff0c 发现在使用Apache的httpclient的时候 xff0c 发现Idea提示DefaultHttpClient等常用的类已经不推荐使用了 现在运用 CloseableHttpClient
  • 【Linux】Ubuntu18.0.4安装wine 失败遇到的问题和解决的思路 尝试覆盖共享/usr/share/doc/ 处理时有错误 /tmp/apt-dpkg-install-6NvbtI/

    bug说明 xff1a dpkg 处理归档 var cache apt archives libattr1 1 2 4 47 2 amd64 deb unpack 时出错 xff1a 尝试覆盖共享的 usr share doc libatt
  • 算法模型---时间序列模型

    文章来源 时间序列 时间序列是时间间隔不变的情况下收集的不同时间点数据集合 xff0c 这些集合被分析用来了解长期发展趋势及为了预测未来 时间序列与常见的回归问题的不同点在于 1 时间序列是跟时间有关的 而线性回归模型的假设 xff1a 观
  • java: 找不到符号 符号: 类 BASE64Encoder 位置: 程序包 sun.misc

    1 问题 新项目编译报错如下 xff1a java 找不到符号 符号 类 BASE64Encoder 位置 程序包 sun misc 2 解决方案 依图如下 xff0c 修改jdk对应的版本即可
  • tar 打包隐藏文件

    前言 xff1a 先说一下遇到的场景 xff1a 前段时间在配合做 DevOps xff0c 组内有块代码是 php 的 xff0c 需要用 tar 命令打包归档上传到 nexus 库 xff0c 后来发现解压出来的包居然缺失了隐藏文件 x
  • The server selected protocol version TLS10 is not accepted by client preferences [TLS12] 报错处理

    一 问题描述 xff1a 项目工程需求要连接 SqlServer 服务器 xff0c 但是报错了 xff0c 完整错误如下 xff1a com microsoft sqlserver jdbc SQLServerException 驱动程序
  • 23种设计模式

    目录 创建型 1 Factory Method xff08 工厂方法 xff09 2 Abstract Factory xff08 抽象工厂 xff09 3 Builder xff08 建造者 xff09 4 Prototype xff08
  • SpringBoot开启异步多线程

    前言 xff1a SpringBoot 的异步多线程需要从 java 的多线程基础说起 xff0c 可以参考 java 多线程实现的三种方式区别 SpringBoot 在此基础上进行了多次封装 xff0c 所以使用起来非常方便 一 核心参数

随机推荐

  • 制作 java-sdk 的两种方式

    前言 xff1a 平时maven工程里 pom 中的引用的依赖就是别人开发好的 sdk 包 xff1b 工作中为了方便一些开发也需要自定义开发 sdk 包 xff0c 下面介绍下怎么开发 一 两种方式 我们平时引用 sdk 有两种方式 xf
  • SpringBoot 之 AOP

    前言 xff1a Spring 三大核心思想是啥 xff0c 还记得不 xff1f IOC xff08 控制反转 xff09 xff0c DI xff08 依赖注入 xff09 xff0c AOP xff08 面向切面编程 xff09 回顾
  • mongodb 的常用数据操作

    摘要 xff1a 主要记录一些常见 的mongodb 的增删改查 xff0c 方便以后查阅 1 增 基本格式 xff1a db test doc insert 或 db test doc save 样例 xff1a db test doc
  • Python键盘输入转换为列表

    Python输入字符串转列表是为了方便后续处理 xff0c 这种操作在考试的时候比较多见 1 在Python3 0以后 xff0c 键盘输入使用input函数 eg1 span class hljs prompt gt gt gt span
  • java.lang.NoSuchMethodError 原因和处理方案

    问题描述 工程中明明有该方法 xff0c 却提示 java lang NoSuchMethodError 错误 1 原因 java 的类加载机制是把所有不同名称的本类和引用类的包全部加载到内存 xff0c 这样就有一个问题 xff0c 如果
  • java:try...catch跳过异常继续处理循环

    问题描述 在代码循环体中 xff0c 抛出异常后代码会停止执行 xff0c 导致代码不能完整运行 解决方案很简单 xff0c 捕获异常并简单处理一下就可以 1 捕获异常继续执行代码 只贴核心样例代码 public void getTest
  • python去掉空格常用方式

    前言 xff1a 处理字符串时经常要定制化去掉无用的空格 xff0c python 中要么用存在的常规方法 xff0c 或者用正则处理 1 去掉左边空格 string 61 34 it is blank space test 34 prin
  • 20190226-LCD_GUI

    LCD GUI 这里需要先剃度填色 xff0c 然后再显示汉字 xff0c 最后在显示符号和数字 xff0c 否则会被覆盖 xff0c 显示不出来汉字或者数字符号
  • Arch安装

    从2021年4月起 xff0c Arch Linux安装镜像中已经包含了一个官方的简易安装程序archinstall 可以支持在连接网络后进行英文交互式安装 Arch Linux News Installation medium with
  • 存储过程懂不懂

    存储过程的官方定义是这么说的 xff1a 存储过程 xff08 Stored Procedure xff09 是一组为了完成特定功能的 SQL 语句集 xff0c 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数 xff08 如
  • ArchLinux的用户配置和KDE安装

    用户配置 建立用户 目标是新建一个普通用户 xff0c 这个普通用户可以使用sudo提权 以下默认使用username作为用户名 建立无密码用户并创立其默认用户组 useradd username 更改账户密码 passwd usernam
  • Zsh的简单配置

    Zsh 简体中文 ArchWiki archlinux org 本配置的目标是增加一些简单的功能以及一个能过得去的界面 安装 安装zsh xff08 本体 xff09 和zsh completions xff08 补全 xff09 两个包
  • Arch(KDE Plasma)中文化

    Localization 简体中文 Simplified Chinese 简体中文 ArchWiki 生成中文locale xff08 这一步在安装篇就有写 xff09 在 etc locale gen中取消中文的zh CN UTF 8 U
  • yay的安装与使用与Anbox的安装

    yay的安装 安装 首先安装所需软件包base devel和git pacman Syu base devel git 之后使用git clone下载代码 git clone URL FORM AUR 这里的 URL FROM AUR 指从
  • linux下利用C语言实现对文件的操作(创建、复制、修改权限、修改文件名)

    今天在ubuntu下编写一个了C程序实现如下功能 xff1a xff08 1 xff09 创建一个文本文件 xff0c 写入 Hello World xff01 xff08 2 xff09 获取该文件的所有权限 xff08 3 xff09
  • 设计模式案例分析与实现

    1 UML类图及Java实现 案例 xff1a 某基于C S的即时聊天系统登录模块功能描述如下 xff1a 用户通过登录界面 LoginForm 输入账号和密码 xff0c 系统将输入的账号和密码与存储在数据库 User 表中的用户信息进行
  • 决策树算法

    目录 1 概述 1 1 算法导入 1 2 决策树定义 1 3 决策树发展 1 4 结构 1 5 从树到规则 2 决策树的构建 2 1 基本原理 2 2 特征选择 2 3 实例分析 ID3 2 4 增益率 C4 5算法 2 5 基尼指数 CA
  • 机器学习——图像分类

    1 图像分类的概念 1 1 什么是图像分类 xff1f 图像分类 xff0c 根据图像信息中所反映出来的不同特征 xff0c 把不同类别的目标区分开来的图像处理方法 1 2 图像分类的难度 任何拍摄情 况的改变都将提升分类的难度 1 3 C
  • 日常开发报错记录

    20230424 python3 7中报错 xff1a No module named typing extensions 在网上找到的解决办法 xff1a pytorch 错误 xff1a No module named typing e
  • 基于C++的通讯管理系统

    1 系统需求 通讯录是一个可以记录亲人 好友信息的工具 本教程主要利用C 43 43 来实现 个通讯录管理系统 系统中需要实现的功能如下 添加联系人 向通讯录中添加新人 xff0c 信息包括 姓名 性别 年龄 联系电话 家庭住址 最多记录1