24 MFC文档串行化和单文档应用程序

文章目录

  • 文档串行化
    • 全部代码
  • 单文档应用程序搭建原理
    • 搭建框架
    • Win32 过度到MFC 三部曲
    • 设置ID资源
    • 全部代码
  • 单文档应用程序
    • 设置标题
    • 绘图
  • 简单的管理系统
    • 部分代码

文档串行化

ui 设计
在这里插入图片描述在这里插入图片描述

保存

void CfileDemoDlg::OnBnClickedBtnSave()
{UpdateData();//CFile file(L"Demo.dat",CFile::modeCreate|CFile::modeWrite);第一个参数:文件指针第二个参数:模式//CArchive ar(&file, CArchive::store);//ar << m_strName;//ar << m_strSex;//ar << m_nAge;//ar << m_nHeight;//ar << m_fWeight;//ar << m_fSalary;//ar.Close();//file.Close();//m_doc.OnNewDocument();//创建一个新文档m_doc.OnSaveDocument(L"Demo.dat");//保存
}

读取

void CfileDemoDlg::OnBnClickedBtnRead()
{//CFile file(L"Demo.dat",  CFile::modeRead);//CArchive ar(&file, CArchive::load);注意:一定要按照写入顺序读取,顺序不能乱//ar >> m_strName;//ar >> m_strSex;//ar >> m_nAge;//ar >> m_nHeight;//ar >> m_fWeight;//ar >> m_fSalary;//ar.Close();//file.Close();m_doc.OnOpenDocument(L"Demo.dat");//打开一个文档UpdateData(FALSE);//显示
}

定义一个文档类

#pragma once
#include <afxwin.h>
class CMyDoc :public CDocument
{CMyDoc();
};

添加虚函数判断是否保存还是读取
在这里插入图片描述

void CMyDoc::Serialize(CArchive& ar)
{CfileDemoDlg* pMainDlg=(CfileDemoDlg*)AfxGetMainWnd();//获取主对话框pMainDlg->Serialize(ar);
}

主对话框内添加Serialize虚函数
在这里插入图片描述

void CfileDemoDlg::Serialize(CArchive& ar)
{if (ar.IsStoring())//保存{//第一个参数:文件指针//第二个参数:模式//CArchive ar(&file, CArchive::store);ar << m_strName;ar << m_strSex;ar << m_nAge;ar << m_nHeight;ar << m_fWeight;ar << m_fSalary;}else//读取{ar >> m_strName;ar >> m_strSex;ar >> m_nAge;ar >> m_nHeight;ar >> m_fWeight;ar >> m_fSalary;}
}

全部代码

// fileDemoDlg.h: 头文件

//#pragma once
#include "CMyDoc.h"// CfileDemoDlg 对话框
class CfileDemoDlg : public CDialogEx
{
// 构造
public:CfileDemoDlg(CWnd* pParent = nullptr);	// 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_FILEDEMO_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持// 实现
protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:CString m_strName;CString m_strSex;UINT m_nAge;UINT m_nHeight;float m_fWeight;float m_fSalary;CMyDoc m_doc;afx_msg void OnBnClickedBtnSave();afx_msg void OnBnClickedBtnRead();virtual void Serialize(CArchive& ar);
};
// fileDemoDlg.cpp: 实现文件
//#include "pch.h"
#include "framework.h"
#include "fileDemo.h"
#include "fileDemoDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CfileDemoDlg 对话框CfileDemoDlg::CfileDemoDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_FILEDEMO_DIALOG, pParent), m_nAge(0), m_nHeight(0), m_fWeight(0), m_fSalary(0)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CfileDemoDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_strName);DDX_Text(pDX, IDC_EDIT2, m_strSex);DDX_Text(pDX, IDC_EDIT3, m_nAge);DDX_Text(pDX, IDC_EDIT4, m_nHeight);DDX_Text(pDX, IDC_EDIT5, m_fWeight);DDX_Text(pDX, IDC_EDIT6, m_fSalary);
}BEGIN_MESSAGE_MAP(CfileDemoDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BTN_SAVE, &CfileDemoDlg::OnBnClickedBtnSave)ON_BN_CLICKED(IDC_BTN_READ, &CfileDemoDlg::OnBnClickedBtnRead)
END_MESSAGE_MAP()// CfileDemoDlg 消息处理程序BOOL CfileDemoDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);			// 设置大图标SetIcon(m_hIcon, FALSE);		// 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CfileDemoDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CfileDemoDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}//保存
void CfileDemoDlg::OnBnClickedBtnSave()
{UpdateData();//CFile file(L"Demo.dat",CFile::modeCreate|CFile::modeWrite);第一个参数:文件指针第二个参数:模式//CArchive ar(&file, CArchive::store);//ar << m_strName;//ar << m_strSex;//ar << m_nAge;//ar << m_nHeight;//ar << m_fWeight;//ar << m_fSalary;//ar.Close();//file.Close();//m_doc.OnNewDocument();//创建一个新文档m_doc.OnSaveDocument(L"Demo.dat");//保存}//读取
void CfileDemoDlg::OnBnClickedBtnRead()
{//CFile file(L"Demo.dat",  CFile::modeRead);//CArchive ar(&file, CArchive::load);注意:一定要按照写入顺序读取,顺序不能乱//ar >> m_strName;//ar >> m_strSex;//ar >> m_nAge;//ar >> m_nHeight;//ar >> m_fWeight;//ar >> m_fSalary;//ar.Close();//file.Close();m_doc.OnOpenDocument(L"Demo.dat");//打开一个文档UpdateData(FALSE);//显示
}void CfileDemoDlg::Serialize(CArchive& ar)
{if (ar.IsStoring())//保存{//第一个参数:文件指针//第二个参数:模式//CArchive ar(&file, CArchive::store);ar << m_strName;ar << m_strSex;ar << m_nAge;ar << m_nHeight;ar << m_fWeight;ar << m_fSalary;}else//读取{ar >> m_strName;ar >> m_strSex;ar >> m_nAge;ar >> m_nHeight;ar >> m_fWeight;ar >> m_fSalary;}
}
#pragma once
#include <afxwin.h>
class CMyDoc :public CDocument
{
public:CMyDoc();
public:virtual void Serialize(CArchive& ar);
};
#include "pch.h"
#include "CMyDoc.h"
#include "fileDemoDlg.h"CMyDoc::CMyDoc()
{
}
void CMyDoc::Serialize(CArchive& ar)
{CfileDemoDlg* pMainDlg=(CfileDemoDlg*)AfxGetMainWnd();//获取主对话框pMainDlg->Serialize(ar);
}

单文档应用程序搭建原理

单文档应用程序(SDI应用程序)是一种基于文档的应用程序,它允许用户打开、编辑和保存单个文档。这种类型的应用程序通常用于文本编辑器、图像编辑器、绘图工具等。

在单文档应用程序中,用户可以打开一个文档,对其进行编辑并将其保存。当用户打开同一个文档时,应用程序会将其加载到内存中供用户编辑。用户可以对文档进行各种操作,如添加、删除、修改和移动文档中的内容。

与多文档应用程序(MDI应用程序)不同,单文档应用程序只允许用户同时打开一个文档。这意味着用户必须先关闭当前文档,然后才能打开另一个文档。

属性设置
在这里插入图片描述

搭建框架

在这里插入图片描述
在这里插入图片描述

Win32 过度到MFC 三部曲

CSDIApp 类

1.建立CWinApp 派生类

class CSDIApp :public CWinApp
{DECLARE_DYNCREATE(CSDIApp)  //声明动态创建
public:BOOL InitInstance();
};

2.重写CWinAPP
3.定义CWinApp派生类的全局变量

#include "stdafx.h"
#include "SDI.h"
#include "CMainFrame.h"CSDIApp theApp;//定义CWinApp派生类的全局变量
IMPLEMENT_DYNAMIC(CSDIApp, CWinApp) //实现动态创建
BOOL CSDIApp::InitInstance()
{//CMainFrame* pFrame = new CMainFrame;//pFrame->Create(NULL, L"框架程序");//m_pMainWnd = pFrame;//pFrame->ShowWindow(SW_SHOW);//单文档CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,//所有资源IDRUNTIME_CLASS(CMainDoc),//文档类RUNTIME_CLASS(CMainFrame),//主窗口框架啊RUNTIME_CLASS(CMainView)//视图类);//添加到文档模板对象中AddDocTemplate(pDocTemplate);//解析命令行信息CCommandLineInfo cmdLineInfo;ParseCommandLine(cmdLineInfo);//执行命令行命令if (FALSE == ProcessShellCommand(cmdLineInfo))return FALSE;//显示窗口m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE;
}

MFC 框架类

CMainFrame .h

class CMainFrame :public CFrameWnd 
{DECLARE_DYNCREATE(CMainFrame)  //声明动态创建
public:CMainFrame();
};

CMainFrame .cpp

#include "stdafx.h"
#include "CMainFrame.h"IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) //实现动态创建CMainFrame::CMainFrame()
{
}

完成框架
在这里插入图片描述在这里插入图片描述

设置ID资源

设置菜单
在这里插入图片描述设置图标
名字统一在这里插入图片描述
添加快捷键
在这里插入图片描述在这里插入图片描述
添加字符串
在这里插入图片描述在这里插入图片描述工具栏资源
在这里插入图片描述

创建主文档类

#pragma once
#include "stdafx.h"
class CMainDoc :public CDocument
{DECLARE_DYNCREATE(CMainDoc)  //声明动态创建
public:CMainDoc();
};
#include "CMainDoc.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainDoc,CDocument) //实现动态创建
CMainDoc::CMainDoc()
{
}

创建视图类

#pragma once
#include <afxwin.h>
class CMainView :public CView
{DECLARE_DYNCREATE(CMainView)  //声明动态创建
public:CMainView();
};
#include "CMainView.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainView, CView) //实现动态创建
CMainView::CMainView()
{
}

在这里插入图片描述

全部代码

CMainDoc.h

#pragma once
#include "stdafx.h"
class CMainDoc :public CDocument
{DECLARE_DYNCREATE(CMainDoc)  //声明动态创建
public:CMainDoc();
};

CMainDoc.cpp

#include "CMainDoc.h"
#include "stdafx.h"IMPLEMENT_DYNAMIC(CMainDoc,CDocument) //实现动态创建CMainDoc::CMainDoc()
{
}

CMainFrame.h

#pragma once
class CMainFrame :public CFrameWnd 
{DECLARE_DYNCREATE(CMainFrame)  //声明动态创建
public:CMainFrame();
};

CMainFrame.cpp

#include "stdafx.h"
#include "CMainFrame.h"IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) //实现动态创建CMainFrame::CMainFrame()
{
}

CMainView.h

#pragma once
#include "stdafx.h"
class CMainView :public CView
{DECLARE_DYNCREATE(CMainView)  //声明动态创建
public:CMainView();virtual void OnDraw(CDC* /*pDC*/);
};

CMainView.cpp

#include "CMainView.h"
#include "stdafx.h"
IMPLEMENT_DYNAMIC(CMainView, CView) //实现动态创建
CMainView::CMainView()
{
}void CMainView::OnDraw(CDC* /*pDC*/)
{// TODO: 在此添加专用代码和/或调用基类
}

CMainView.h

class CSDIApp :public CWinApp
{DECLARE_DYNCREATE(CSDIApp)  //声明动态创建
public:BOOL InitInstance();
};

CMainView.cpp

#include "stdafx.h"
#include "SDI.h"
#include "CMainFrame.h"
#include "CMainDoc.h"
#include "CMainView.h"
CSDIApp theApp;
IMPLEMENT_DYNAMIC(CSDIApp, CWinApp) //实现动态创建BOOL CSDIApp::InitInstance()
{/*CMainFrame* pFrame = new CMainFrame;pFrame->Create(NULL, L"框架程序");m_pMainWnd = pFrame;pFrame->ShowWindow(SW_SHOW);*///单文档CSingleDocTemplate* pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,//所有资源IDRUNTIME_CLASS(CMainDoc),//文档类RUNTIME_CLASS(CMainFrame),//主窗口框架啊RUNTIME_CLASS(CMainView)//视图类);//添加到文档模板对象中AddDocTemplate(pDocTemplate);//解析命令行信息CCommandLineInfo cmdLineInfo;ParseCommandLine(cmdLineInfo);//执行命令行命令if (FALSE == ProcessShellCommand(cmdLineInfo))return FALSE;//显示窗口m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();return TRUE;
}

单文档应用程序

设置标题

在这里插入图片描述

设置窗口名字
在这里插入图片描述

BOOL CSingleDoc::OnNewDocument()
{SetTitle(L"名字");return CDocument::OnNewDocument();
}

在这里插入图片描述

设置窗口参数,去除多余标题
在这里插入图片描述

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{cs.cx = 800;cs.cy = 600;cs.style = cs.style &~FWS_ADDTOTITLE;//去掉风格return CFrameWnd::PreCreateWindow(cs);
}

在这里插入图片描述在这里插入图片描述

绘图

在View 中绘图
在这里插入图片描述在这里插入图片描述在frame中绘图
在这里插入图片描述

结论:视图在框架之上

简单的管理系统

视图界面继承CListView
在这里插入图片描述

在这里插入图片描述
重写虚函数
在这里插入图片描述

在这里插入图片描述

void CMangerSystmView::OnInitialUpdate()
{CListView::OnInitialUpdate();m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_list.ModifyStyle(0, LVS_REPORT|LVS_SHOWSELALWAYS);//设置风格m_list.InsertColumn(0,L"ID",LVCFMT_LEFT,100);m_list.InsertColumn(0, L"姓名", LVCFMT_LEFT, 100);m_list.InsertColumn(0, L"性别", LVCFMT_LEFT, 100);m_list.InsertColumn(0, L"年龄", LVCFMT_LEFT, 100);
}

设置菜单在这里插入图片描述
在这里插入图片描述添加窗口
在这里插入图片描述添加类
在这里插入图片描述添加控件变量
在这里插入图片描述

添加

void CMangerSystmView::OnAdd()
{CAddDlg addDlg;if (IDCANCEL == addDlg.DoModal())return;int nCount = m_list.GetItemCount();//获取总行数CString str;str.Format(L"%d",addDlg.m_nID);m_list.InsertItem(nCount,str);m_list.SetItemText(nCount, 1, addDlg.m_strName);m_list.SetItemText(nCount, 2, addDlg.m_strSex);str.Format(L"%d", addDlg.m_nAge);m_list.SetItemText(nCount, 3, str);
}

在这里插入图片描述

删除

void CMangerSystmView::OnDelete()
{POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置int nSel=m_list.GetNextSelectedItem(pos);CString str;str.Format(L"%d", nSel);SetWindowText(str);if (nSel < 0){MessageBox(L"请选中后在删除");return;}if (IDYES == MessageBox(L"确定要删除吗", L"提示", MB_YESNO)){m_list.DeleteItem(nSel);}
}

修改
在这里插入图片描述在这里插入图片描述

void CMangerSystmView::OnModify()
{CModifyDlg dlg;POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置int nSel = m_list.GetNextSelectedItem(pos);//获取当前选项if (nSel < 0){MessageBox(L"请选中后在修改");return;}dlg.m_nID=_wtoi(m_list.GetItemText(nSel, 0 ));dlg.m_strName = m_list.GetItemText(nSel, 1);dlg.m_strSex= m_list.GetItemText(nSel, 2);dlg.m_nAge = _wtoi(m_list.GetItemText(nSel, 3));if (IDCANCEL == dlg.DoModal()){return;}CString str;str.Format(L"%d", dlg.m_nID);m_list.SetItemText(nSel, 0,str);m_list.SetItemText(nSel, 1, dlg.m_strName);m_list.SetItemText(nSel, 2, dlg.m_strSex);str.Format(L"%d", dlg.m_nAge);m_list.SetItemText(nSel, 3, str);}

添加快捷键
查看菜单ID在这里插入图片描述>设置工具栏
在这里插入图片描述在这里插入图片描述

请添加图片描述

部分代码

//MangerSystmView.h

public:virtual void OnInitialUpdate();afx_msg void OnAdd();afx_msg void OnDelete();afx_msg void OnModify();CListCtrl& m_list ;

// MangerSystmView.cpp: CMangerSystmView 类的实现

//#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "MangerSystm.h"
#endif#include "MangerSystmDoc.h"
#include "MangerSystmView.h"#include "CAddDlg.h"
#include "CModifyDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// CMangerSystmViewIMPLEMENT_DYNCREATE(CMangerSystmView, CListView)BEGIN_MESSAGE_MAP(CMangerSystmView, CListView)// 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CListView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CListView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CListView::OnFilePrintPreview)ON_COMMAND(ID_ADD, &CMangerSystmView::OnAdd)ON_COMMAND(ID_DELETE, &CMangerSystmView::OnDelete)ON_COMMAND(ID_MODIFY, &CMangerSystmView::OnModify)
END_MESSAGE_MAP()// CMangerSystmView 构造/析构CMangerSystmView::CMangerSystmView():m_list(GetListCtrl())
{// TODO: 在此处添加构造代码}CMangerSystmView::~CMangerSystmView()
{
}BOOL CMangerSystmView::PreCreateWindow(CREATESTRUCT& cs)
{// TODO: 在此处通过修改//  CREATESTRUCT cs 来修改窗口类或样式return CListView::PreCreateWindow(cs);
}void CMangerSystmView::OnInitialUpdate()
{CListView::OnInitialUpdate();m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_list.ModifyStyle(0, LVS_REPORT|LVS_SHOWSELALWAYS);//设置风格m_list.InsertColumn(0,L"ID",LVCFMT_LEFT,100);m_list.InsertColumn(0, L"姓名", LVCFMT_LEFT, 100);m_list.InsertColumn(0, L"性别", LVCFMT_LEFT, 100);m_list.InsertColumn(0, L"年龄", LVCFMT_LEFT, 100);
}void CMangerSystmView::OnAdd()
{CAddDlg addDlg;if (IDCANCEL == addDlg.DoModal())return;int nCount = m_list.GetItemCount();//获取总行数CString str;str.Format(L"%d",addDlg.m_nID);m_list.InsertItem(nCount,str);m_list.SetItemText(nCount, 1, addDlg.m_strName);m_list.SetItemText(nCount, 2, addDlg.m_strSex);str.Format(L"%d", addDlg.m_nAge);m_list.SetItemText(nCount, 3, str);
}void CMangerSystmView::OnDelete()
{POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置int nSel=m_list.GetNextSelectedItem(pos);CString str;str.Format(L"%d", nSel);SetWindowText(str);if (nSel < 0){MessageBox(L"请选中后在删除");return;}if (IDYES == MessageBox(L"确定要删除吗", L"提示", MB_YESNO)){m_list.DeleteItem(nSel);}
}//修改
void CMangerSystmView::OnModify()
{CModifyDlg dlg;POSITION pos = m_list.GetFirstSelectedItemPosition();//获取相中的位置int nSel = m_list.GetNextSelectedItem(pos);//获取当前选项if (nSel < 0){MessageBox(L"请选中后在修改");return;}dlg.m_nID=_wtoi(m_list.GetItemText(nSel, 0 ));dlg.m_strName = m_list.GetItemText(nSel, 1);dlg.m_strSex= m_list.GetItemText(nSel, 2);dlg.m_nAge = _wtoi(m_list.GetItemText(nSel, 3));if (IDCANCEL == dlg.DoModal()){return;}CString str;str.Format(L"%d", dlg.m_nID);m_list.SetItemText(nSel, 0,str);m_list.SetItemText(nSel, 1, dlg.m_strName);m_list.SetItemText(nSel, 2, dlg.m_strSex);str.Format(L"%d", dlg.m_nAge);m_list.SetItemText(nSel, 3, str);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MATLAB的无人机遥感数据预处理与农林植被性状估算教程

详情点击链接&#xff1a;基于MATLAB的无人机遥感数据预处理与农林植被性状估算前言 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势&#xff0c;是智慧农业必须采…

UML 图

统一建模语言&#xff08;Unified Modeling Language&#xff0c;UML&#xff09;是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图…

java贪心算法案例

1.零钱找回问题 这个问题在我们的日常生活中就更加普遍了。假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元&#xff0c;至少要用多少张纸币&#xff1f;用贪心算法的思想&#xff0c;很显然&#xff0c;每一步…

基于PaddleOCR与OpenVINO™的结构化输出Pipeline

飞桨&#xff08;PaddlePaddle&#xff09;是百度自主研发的中国首个开源开放、功能丰富的产业级深度学习平台&#xff0c;以百度多年的深度学习技术研究和业务应用为基础。飞桨深度学习平台集核心框架、基础模型库、端到端开发套件、丰富的工具组件于一体&#xff0c;还包括了…

CMS垃圾收集器三色标记-JVM(十二)

上篇文章说了CMS垃圾收集器是赋值清除&#xff0c;所以他不可以碎片整理&#xff0c;于是jvm支持两个参数&#xff0c;几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源&#xff0c;因为是并行运行&#xff0c;所以会有浮动垃圾。还有执行不确定性&#xff0c;垃圾收集完&a…

解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用

如何从零搭建一个 LLM 应用&#xff1f;不妨试试 LangChain Milvus 的组合拳。 作为开发 LLM 应用的框架&#xff0c;LangChain 内部不仅包含诸多模块&#xff0c;而且支持外部集成&#xff1b;Milvus 同样可以支持诸多 LLM 集成&#xff0c;二者结合除了可以轻松搭建一个 LLM…

原型模式-克隆一个对象

在开发一个界面的时候&#xff0c;里面有多个Button&#xff0c;这些对象的属性内容相似。如果一个个实例化Button对象&#xff0c;并设置其属性&#xff0c;那么代码量将会增多。 通过一个原型对象克隆出多个一模一样的对象&#xff0c;该模式被称为原型模式。 图 原型模式 …

【分布式】ceph存储

目录 一、存储基础单机存储设备单机存储的问题商业存储解决方案 二、 分布式存储 &#xff08;软件定义的存储 SDS&#xff09;分布式存储的类型Ceph 优势Ceph 架构Ceph 核心组件Pool中数据保存方式支持两种类型&#xff1a;Pool、PG 和 OSD 的关系OSD 存储后端BlueStore 的主要…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

Ubuntu新版静态IP设置

cd /etc/netplan直接编辑 sudo vi /etc/netplan/00-installer-config.yaml#network: # ethernets: # ens160: # dhcp4: true # version: 2network:version: 2ethernets:ens160:dhcp4: noaddresses: [172.17.10.23/24]optional: truegateway4: 172.17.10.1nameservers…

java工作随笔

String s JSONObject.toJSONString(fixedAsset);logger.error("-----------------8------------------" s);CusFixedAssettDTO CusFixedAssettDTO3 JSONObject.parseObject(s, CusFixedAssettDTO.class);父类转子类 相同对象合并 import java.util.Date; Data T…

Bard:Google AI开始支持中文对话和看图说话了

说起时下火爆的生成式AI&#xff0c;并不是只有ChatGPT。Bard也是一个很优秀的产品&#xff0c;并且刚刚发布的很多有趣的新功能。文末告诉你如何访问Bard。 Google AI在最近的更新中发布了Bard&#xff0c;一个新的语言模型。Bard支持多种语言&#xff0c;包括中文&#xff0…

【Ceph集群应用】Ceph对象存储系统之RGW接口详解

Ceph对象存储系统之RGW接口详解 1.创建Ceph对象存储系统RGW接口2. 开启httphttps,更改监听端口3. 更改监听端口4.S3接口访问测试5.实验中遇到的故障案例 接上文基于ceph-deploy部署Ceph集群详解 1.创建Ceph对象存储系统RGW接口 &#xff08;1&#xff09;对象存储概念 对象存…

WPF嵌入外部exe应用程序-使用Winfom控件承载外部程序

使用Winform控件承载外部程序 在WPF中使用Winfom控件添加winform相关的程序集在XAML头中加入对这两个程序集命名空间的引用使用Winform控件效果&#xff1a;问题 在Winfom控件中嵌入exe程序准备Winfrom控件更换父窗体的句柄完整实现代码&#xff1a;实现效果&#xff1a; 问题和…

perl输出中文乱码【win10】

perl输出中文乱码 运行的时候输出的内容变成了中文乱码&#xff0c;原因首先来查找一下自己的perl的模块里面是否有Encode-CN。请运行打开你的cmd并输入perldoc -l Encode::CN 如果出现了地址 则就是有&#xff0c;如果没有需要进行该模块的安装。 安装方式有很多种&#xff0…

MetaTown:一个可以自己构建数字资产的平台

摘要&#xff1a;华为云Solution as Code重磅推出《基于MetaTown构建数字资产平台》解决方案。 本文分享自华为云社区《基于MetaTown构建数字资产平台》&#xff0c;作者&#xff1a; 阿米托福。 华为云Solution as Code重磅推出《基于MetaTown构建数字资产平台》解决方案&…

“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”

快速排序是一种基于分治思想的排序算法&#xff0c;它能够以极快的速度将一个乱序的数组重新排列成有序的序列。不仅如此&#xff0c;快速排序还具有简洁的实现代码和良好的可扩展性&#xff0c;成为最受欢迎的排序算法之一。接下来&#xff0c;让我带你了解一下它的魅力吧&…

Linux系统部署Nginx详细教程(图文讲解)

前言&#xff1a;本篇博客记录了我是如何使用Linux系统一步一步部署Nginx的完整过程&#xff0c;也是我学习之路上的一个笔记总结&#xff0c;每一行代码都进行了严格的测试&#xff0c;特此做一个技术分享&#xff01; 目录 一、安装依赖 二、安装Nginx 三、配置Nginx 四、…

visio 图片转换到 latex 中

调整图片大小 在Visio中&#xff0c;设计–>页面设置–>大小–>适应绘图&#xff0c;这样会自动去除多余空白&#xff0c;保留部分空白作为边界&#xff0c;无需使用Word。 2. 将新的Visio文件另存为pdf格式文件 3. latex 中插入pdf 格式图片

手把手教你搭建SpringCloud项目(八)集成Ribbon负载均衡器

什么是微服务&#xff1f;一看就会系列&#xff01; 一、手把手教你搭建SpringCloud项目&#xff08;一&#xff09;图文详解&#xff0c;傻瓜式操作 二、手把手教你搭建SpringCloud项目&#xff08;二&#xff09;生产者与消费者 三、手把手教你搭建SpringCloud项目&#x…