二、设计与实现

1、设计思想

建立一个有序二叉树作为决策树,用来作为专家系统的知识库。决策树中的叶子结点存储各种动物的名称,其他节点存储有关动物特征的问题。从根节点开始,访问节点的内容。如果是节点内容是问题,由用户回答“是”、“否”。若回答“是”,访问左孩子结点,若回答否,访问右孩子节点,直到节点的内容为动物名称为止。此时,程序给出猜测结果。如果猜对,专家胜利。如果猜错,用户给出动物名称和特征,程序根据两者更改决策树、添加新的节点。

2、类结构

3、主要数据结构

主要的数据结构是链栈和二叉树。

二叉树,用来作为决策树,叶节点存储动物名称,其他节点存储有关动物特征的问题。同时对于每个问题节点,回答“是”对应的是左孩子节点,回答“否”对应的右孩子节点。

链栈在从文件中读取决策树中起作用。由于在文件中存储的决策树是按照后序遍历的方式存入的。在读取决策树的时候,也按照后序的次序建立相应的节点。栈中存储的是即将建立的双亲结点的孩子节点。也就是在每一轮中,首先被读入的是两个孩子节点,被存入到栈中,当读到它们的双亲结点时,两个孩子节点出栈,作为双亲结点的左右孩子后,双亲结点入栈。

4、算法设计

5、核心代码展示

static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{int wmId, wmEvent;wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);HDC hdc;PAINTSTRUCT ps;switch (message){case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// To paint with a DDB it first needs to be associated// with a memory device context. We make a DC that// is compatible with the screen by passing NULL to// CreateCompatibleDC.// Then we need to associate our saved bitmap with the// device context.HDC hdcMem = CreateCompatibleDC(NULL);HBITMAP hbmT = SelectBitmap(hdcMem, hbm);// Now, the BitBlt function is used to transfer the contents of the // drawing surface from one DC to another. Before we can paint the// bitmap however we need to know how big it is. We call the GDI// function GetObject to get the relevent details.BITMAP bm;GetObject(hbm, sizeof(bm), &bm);BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);// Now, clean up. A memory DC always has a drawing// surface in it. It is created with a 1X1 monochrome// bitmap that we saved earlier, and need to put back// before we destroy it.SelectBitmap(hdcMem, hbmT);DeleteDC(hdcMem);// EndPaint balances off the BeginPaint call.EndPaint(hWnd, &ps);break;}case WM_CREATE:{ static2 = CreateWindow(TEXT("STATIC"), TEXT("欢迎来到专家系统应用"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 10, 500, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("进入专家系统应用"), WS_CHILD | WS_VISIBLE, 360, 100, 150, 40, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);HINSTANCE hInstance = GetWindowInstance(hWnd);//hbm = LoadBitmapW(hInstance,MAKEINTRESOURCE(IDB_BITMAP1));//C:\\Users\\Administrator.33XBYKMCA2C5EX4\Desktop\SpecPichbm = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));return 0;}case WM_COMMAND:{HWND hwndTmp;int wmId = LOWORD(wParam);switch (wmId){case ID_40003:{MessageBox(hWnd, TEXT("开发人员名单:武祎、王艺然、何鸿丞、辛喆\n开发时间:2020年6月\n版本号:8.0\n学校:北京理工大学"), TEXT("开发者信息"), MB_OK);break;}case ID_40001:{MessageBox(hWnd, in_address, TEXT("当前决策树的文件路径"), MB_OK);break;}case ID_40004:{AnimalNumber();MessageBox(hWnd, t_num,TEXT ("决策树中的动物数量"), MB_OK);break;}case ID_40005:{if (IsTreeEmpty()){MessageBox(hWnd, TEXT("当前决策树为空!"), TEXT("提示"), MB_ICONWARNING);}else{TCHAR2Char(in_address, a);Save(hWnd);}break;}case ID_40006:{TCHAR2Char(in_address, a);Build(hWnd);break;}case IDC_BUTTON3:GetDlgItemText(hWnd, IDC_EDIT1, address, 100);TCHAR2Char(address, a);if (Build(hWnd)){if (flag == 0){static3 = CreateWindow(TEXT("STATIC"), TEXT("后序遍历输出的语句"), WS_CHILD | WS_VISIBLE|WS_EX_TRANSPARENT, 10, 200, 200, 20, hWnd, (HMENU)IDC_STATIC3, NULL, NULL);SendMessage(static3, WM_SETFONT, (WPARAM)hFont, 1);edit2=CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE|WS_HSCROLL|WS_VSCROLL , 10, 220, 300, 200, hWnd, (HMENU)IDC_EDIT2, NULL, NULL);SendMessage(edit2, WM_SETFONT, (WPARAM)hFont, 1);flag++;}GetDlgItemText(hWnd, IDC_EDIT1, in_address, 100);Display(hWnd);}break;case IDC_BUTTON4:{if (Expert(-1, hWnd)){}else{ClearAllWindows();static1 = CreateWindow(TEXT("STATIC"), TEXT("猜动物"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 10, 50, 20, hWnd, (HMENU)IDC_STATIC1, NULL, NULL);SendMessage(static1, WM_SETFONT, (WPARAM)hFont, 1);static2 = CreateWindow(TEXT("STATIC"), question, WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 50, 500, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("结束本轮游戏"), WS_CHILD | WS_VISIBLE, 360, 300, 120, 30, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);button8 = CreateWindow(TEXT("BUTTON"), TEXT("是"), WS_CHILD | WS_VISIBLE, 10, 100, 60, 30, hWnd, (HMENU)IDC_BUTTON8, NULL, NULL);SendMessage(button8, WM_SETFONT, (WPARAM)hFont, 1);button11 = CreateWindow(TEXT("BUTTON"), TEXT("否"), WS_CHILD | WS_VISIBLE, 100, 100, 60, 30, hWnd, (HMENU)IDC_BUTTON11, NULL, NULL);SendMessage(button11, WM_SETFONT, (WPARAM)hFont, 1);}break;}case IDC_BUTTON8:{if (!Expert(1, hWnd)){DestroyWindow(static2);static2 = NULL;static2 = CreateWindow(TEXT("STATIC"), question, WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 50, 500, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);}else{DestroyWindow(static2);static2 = NULL;static2 = CreateWindow(TEXT("STATIC"), question, WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 50, 500, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);DestroyWindow(button8);button8 = NULL;DestroyWindow(button11);button11 = NULL;button12 = CreateWindow(TEXT("BUTTON"), TEXT("猜对了"), WS_CHILD | WS_VISIBLE, 10, 250, 60, 30, hWnd, (HMENU)IDC_BUTTON12, NULL, NULL);SendMessage(button12, WM_SETFONT, (WPARAM)hFont, 1);button13 = CreateWindow(TEXT("BUTTON"), TEXT("猜错了"), WS_CHILD | WS_VISIBLE, 100, 250, 60, 30, hWnd, (HMENU)IDC_BUTTON13, NULL, NULL);SendMessage(button13, WM_SETFONT, (WPARAM)hFont, 1);}break;}case IDC_BUTTON11:{if (!Expert(0, hWnd)){DestroyWindow(static2);static2 = NULL;static2 = CreateWindow(TEXT("STATIC"), question, WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 50, 500, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);}else{DestroyWindow(static2);static2 = NULL;static2 = CreateWindow(TEXT("STATIC"), question, WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 50, 500, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);DestroyWindow(button8);button8 = NULL;DestroyWindow(button11);button11 = NULL;button12 = CreateWindow(TEXT("BUTTON"), TEXT("猜对了"), WS_CHILD | WS_VISIBLE, 10, 250, 60, 30, hWnd, (HMENU)IDC_BUTTON12, NULL, NULL);SendMessage(button12, WM_SETFONT, (WPARAM)hFont, 1);button13 = CreateWindow(TEXT("BUTTON"), TEXT("猜错了"), WS_CHILD | WS_VISIBLE, 100, 250, 60, 30, hWnd, (HMENU)IDC_BUTTON13, NULL, NULL);SendMessage(button13, WM_SETFONT, (WPARAM)hFont, 1);}break;}case IDC_BUTTON5:{ClearAllWindows();static2 = CreateWindow(TEXT("STATIC"), TEXT("菜单"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 10, 50, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);button4 = CreateWindow(TEXT("BUTTON"), TEXT("进入猜动物环节"), WS_CHILD | WS_VISIBLE, 360, 200, 150, 40, hWnd, (HMENU)IDC_BUTTON4, NULL, NULL);SendMessage(button4, WM_SETFONT, (WPARAM)hFont, 1);button6 = CreateWindow(TEXT("BUTTON"), TEXT("将决策树写入文件"), WS_CHILD | WS_VISIBLE, 360, 300, 150, 40, hWnd, (HMENU)IDC_BUTTON6, NULL, NULL);SendMessage(button6, WM_SETFONT, (WPARAM)hFont, 1);button7 = CreateWindow(TEXT("BUTTON"), TEXT("从文件中读入决策树"), WS_CHILD | WS_VISIBLE, 360, 100, 150, 40, hWnd, (HMENU)IDC_BUTTON7, NULL, NULL);SendMessage(button7, WM_SETFONT, (WPARAM)hFont, 1);button10 = CreateWindow(TEXT("BUTTON"), TEXT("退出系统"), WS_CHILD | WS_VISIBLE, 360, 400, 150, 40, hWnd, (HMENU)IDC_BUTTON10, NULL, NULL);SendMessage(button10, WM_SETFONT, (WPARAM)hFont, 1);break;}case IDC_BUTTON6:{if (IsTreeEmpty()){MessageBox(hWnd, TEXT("您的决策树为空树!"), TEXT("提示"), MB_ICONWARNING);break;}ClearAllWindows();static1 = CreateWindow(TEXT("STATIC"), TEXT("将决策树写入文件"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 10, 140, 20, hWnd, (HMENU)IDC_STATIC1, NULL, NULL);SendMessage(static1, WM_SETFONT, (WPARAM)hFont, 1);static2 = CreateWindow(TEXT("STATIC"), TEXT("请输入txt文件的地址:"), WS_CHILD | WS_VISIBLE, 10, 100, 160, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);button9 = CreateWindow(TEXT("BUTTON"), TEXT("确定"), WS_CHILD | WS_VISIBLE, 320, 140, 80, 30, hWnd, (HMENU)IDC_BUTTON9, NULL, NULL);SendMessage(button9, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("返回"), WS_CHILD | WS_VISIBLE, 320, 200, 80, 30, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);flag = 0;edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER|ES_MULTILINE|WS_HSCROLL, 10, 140, 300, 50, hWnd, (HMENU)IDC_EDIT1, NULL, NULL);SendMessage(edit1, WM_SETFONT, (WPARAM)hFont, 1);break;}case IDC_BUTTON9:{GetDlgItemText(hWnd, IDC_EDIT1, address, 100);TCHAR2Char(address, a);Save(hWnd);break;}case IDC_BUTTON7:{ClearAllWindows();static1 = CreateWindow(TEXT("STATIC"), TEXT("读取文件建立决策树"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 10, 140, 20, hWnd, (HMENU)IDC_STATIC1, NULL, NULL);SendMessage(static1, WM_SETFONT, (WPARAM)hFont, 1);static2 = CreateWindow(TEXT("STATIC"), TEXT("请输入txt文件的地址:"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 100, 160, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);button3 = CreateWindow(TEXT("BUTTON"), TEXT("确定"), WS_CHILD | WS_VISIBLE, 320, 140, 80, 30, hWnd, (HMENU)IDC_BUTTON3, NULL, NULL);SendMessage(button3, WM_SETFONT, (WPARAM)hFont, 1);flag = 0;edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER| WS_HSCROLL | ES_MULTILINE, 10, 140, 300, 50, hWnd, (HMENU)IDC_EDIT1, NULL, NULL);SendMessage(edit1, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("返回"), WS_CHILD | WS_VISIBLE, 320, 200, 80, 30, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);break;}case IDC_BUTTON12:{MessageBox(hWnd, TEXT("你竟然被一台电脑打败了,,,"), TEXT("提示"), MB_OK);ClearAllWindows();button4 = CreateWindow(TEXT("BUTTON"), TEXT("再玩一次"), WS_CHILD | WS_VISIBLE, 420, 200, 150, 40, hWnd, (HMENU)IDC_BUTTON4, NULL, NULL);SendMessage(button4, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("返回"), WS_CHILD | WS_VISIBLE, 160, 200, 150, 40, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);break;}case IDC_BUTTON13:{MessageBox(hWnd, TEXT("专家猜错,请告诉专家动物信息"), TEXT("提示"), MB_OK);ClearAllWindows();static1 = CreateWindow(TEXT("STATIC"), TEXT("动物名称"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 110, 150, 20, hWnd, (HMENU)IDC_STATIC1, NULL, NULL);SendMessage(static1, WM_SETFONT, (WPARAM)hFont, 1);static2 = CreateWindow(TEXT("STATIC"), TEXT("区别于专家猜测的动物的特征(例如“它(不)是/(不)会/(没)有”句式)"), WS_CHILD | WS_VISIBLE | WS_EX_TRANSPARENT, 10, 200, 600, 20, hWnd, (HMENU)IDC_STATIC2, NULL, NULL);SendMessage(static2, WM_SETFONT, (WPARAM)hFont, 1);edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | ES_MULTILINE, 10, 140, 300, 50, hWnd, (HMENU)IDC_EDIT1, NULL, NULL);SendMessage(edit1, WM_SETFONT, (WPARAM)hFont, 1);edit2 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | ES_MULTILINE, 10, 230, 300, 50, hWnd, (HMENU)IDC_EDIT2, NULL, NULL);SendMessage(edit2, WM_SETFONT, (WPARAM)hFont, 1);button14 = CreateWindow(TEXT("BUTTON"), TEXT("确定"), WS_CHILD | WS_VISIBLE, 320, 300, 80, 30, hWnd, (HMENU)IDC_BUTTON14, NULL, NULL);SendMessage(button14, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("返回"), WS_CHILD | WS_VISIBLE, 320, 350, 80, 30, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);break;}case IDC_BUTTON14:{GetDlgItemText(hWnd, IDC_EDIT1, a_name, 100);GetDlgItemText(hWnd, IDC_EDIT2, a_feature, 100);if (a_name[0] == '\0'){MessageBox(hWnd, TEXT("动物名称不能为空"), TEXT("提示"), MB_ICONWARNING);break;}if (a_feature[0] == '\0'){MessageBox(hWnd, TEXT("相关特征不能为空"), TEXT("提示"), MB_ICONWARNING);break;}Expert(14, hWnd);ClearAllWindows();button4 = CreateWindow(TEXT("BUTTON"), TEXT("再玩一次"), WS_CHILD | WS_VISIBLE, 420, 200, 150, 40, hWnd, (HMENU)IDC_BUTTON4, NULL, NULL);SendMessage(button4, WM_SETFONT, (WPARAM)hFont, 1);button5 = CreateWindow(TEXT("BUTTON"), TEXT("返回"), WS_CHILD | WS_VISIBLE, 160, 200, 150, 40, hWnd, (HMENU)IDC_BUTTON5, NULL, NULL);SendMessage(button5, WM_SETFONT, (WPARAM)hFont, 1);break;}case IDC_BUTTON10:{PostQuitMessage(0);return 0;}}}return 0;case WM_CTLCOLORSTATIC:{HDC hdc = (HDC)wParam;}return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hWnd, message, wParam, lParam);
}

三、测试与结论

1、测试环境:Visual Studio 2019
 1)从文件读取决策树如下图:

2)用户依次选择问题答案如下图:

3)程序输出猜测结果如下图:

4)若猜测正确则显示如下图:

5)猜测错误则用户输入动物名称并按照提示描述特征如下图(如果用户输入为空系统会发出提示):

6)用户可选择再玩一次或将新的决策树保存到文件中如下图:

7)在上侧菜单中,文件栏下,有以下辅助功能;在关于栏下,有开发者信息;在数据栏下,有动物的个数。

  1. 若用户没有读入决策树就开始进入猜动物环节,程序有相应提醒。

9)当用户非法输入时会有相应提醒。

  1. 当用户未建立决策树就开始保存到新文件时,会有相应提醒。

程序源码:

基于有序二叉树的专家系统应用——动物游戏(C++)源代码与应用程序-C/C++文档类资源-CSDN文库

基于有序二叉树的专家系统应用——动物游戏(C++)相关推荐

  1. 猜动物游戏——机器学习和二叉树的应用

    猜动物游戏的规则是玩家想一个动物,电脑问玩家一些问题,猜玩家想的动物,如果没猜对,就将玩家想的动物添加到数据库里. 先来看看二叉树的定义: 二叉树(binary tree)是指树中节点的度不大于2的有 ...

  2. 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树

    概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...

  3. python弹球小游戏程序_Python基于Tkinter模块实现的弹球小游戏

    本文实例讲述了Python基于Tkinter模块实现的弹球小游戏.分享给大家供大家参考,具体如下: #!usr/bin/python #-*- coding:utf-8 -*- from Tkinte ...

  4. 算法复习(7)有序二叉树

    二叉树,每个节点至多有两个子树.第n层节点总数不超过2^(n-1). 有序二叉树,左子树中的数据比节点的数据小,右子树中的数据比节点不小. 二叉树的结构,可以方便的进行递归,将问题的规模减小. 对于有 ...

  5. 基于组块设计执行开放世界等距游戏引擎

    文 / Benedikt S. Vogler 过去今年里我一直在开发一款名为Wurfel Engine的游戏引擎.以下大部分内容是对于我在学校中的最后一次考试所发现的一些算式与解决方法的解释并在过去2 ...

  6. c语言迷宫求解毕业设计,毕业设计(论文)-基于Windows平台C语言实现迷宫游戏的设计.doc...

    基于Windows平台C语言实现迷宫游戏的设计 摘 要 随着科技的日益发展,计算机信息知识越来越被人们所认知和使用,在当今知识爆炸的时代计算机毫无疑问成为人们常用的日常工具,而Windows和C语言都 ...

  7. python3.7魔塔游戏_基于Funcode平台的“火锅版魔塔”游戏开发与设计

    2019 年第 2 期 信息与电脑 China Computer & Communication 软件开发与应用 基于 Funcode 平台的"火锅版魔塔"游戏开发与设计 ...

  8. 基于C语言的信息管理系统和小游戏

    基于C语言的信息管理系统和小游戏 一.课设题 本次课程设计有以两类题可以选择: 信息管理系统: 即实现个基于控制台的信息管理系统,例如选课系统.图书馆系统.公司财务系统等等 ,除满增删查改等基本功能, ...

  9. 基于CNN算法自定义模型的动物识别项目1

    基于CNN算法自定义模型的动物识别项目1 资源文件 一.数据集介绍 二.开发步骤 1.引入库 2.定义模型 3.定义优化器 4.训练数据增强 5.测试数据归一化 6.数据生成 7.查看类别定义 8.训 ...

最新文章

  1. shaderlab学习一
  2. python opencv 视频剪辑
  3. 对归并排序进行c语言编程实现,归并排序及C语言实现
  4. 《基于Java实现的遗传算法》笔记(7 / 7):个人总结
  5. android 手写签批_Android手写签名效果
  6. 一位程序员的爱情故事
  7. request之额外路径
  8. 如何为XAF设置默认属性值?
  9. 基于RV1126平台imx291分析 --- media部件注册 mipi csi phy
  10. CAD迷你看图 for Mac(MiniCAD)
  11. java 读写乱码_java读写文件出现乱码的解决方法
  12. Cauchy-Schwarz不等式
  13. 颜色值RGB转换为HEX(十六进制)
  14. R语言dplyr包bind_cols函数把两个dataframe数据的列横向合并起来、最终列数为原来两个dataframe列数的加和(Combine Data Frames)
  15. 分享一个冰雪复古辅助多开脚本
  16. 考虑海拔的IDW的插值
  17. 微信婚恋相亲交友小程序
  18. 【PowerApps 基础函数介绍】
  19. iOS端基于RSA公钥加密和解密
  20. win11找不到本地组策略编辑器的解决方法

热门文章

  1. android 流媒体 播放器 项目 源码
  2. AutoCAD Electrical Essential Training AutoCAD Electrical Essential Training Lynda课程中文字幕
  3. 杭州电子科技大学acm--2022
  4. int GetMonth( ) const throw( );后面的throw( )什么意思?
  5. 安装mysql最后一步未响应(解决方法)
  6. Linux进程调度器概述--Linux进程的管理与调度(十五)
  7. 毕业设计 英雄联盟数据分析与预测 -大数据分析 可视化 机器学习
  8. 解答:Visio自画封闭图形如何填充?
  9. Android源码编译流程及所需的编译环境
  10. 20201216英语单词学习(仅供自己记录)