欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MFC sql server odbc, list control, HTTP POST MES,c++保存本地数据库,界面显示,2020年7月份项目总结

程序员文章站 2022-03-31 21:57:14
1,二维码扫码枪扫码2,使用了串口通信3,socket通信4,sql server 2008r2安装,数据库的增删改查,ODBC建立数据源5,HTTP POST到web services**1,扫码本质就是一个字符串,使用一个编辑框接收数据就好了。2,串口通讯,设置好串口需要的参数,读取数据时注意分段接收,做死循环等待接收的时候记得做超时。可以使用conut = 18000; count --; while(count > 0)(1)int 代表一个整形而二进制 10进制 16进制...

1,二维码扫码枪扫码 2,使用了串口通信 3,socket通信 4,sql server 2008r2安装,数据库的增删改查,ODBC建立数据源 5,HTTP POST到web services**

1,扫码本质就是一个字符串,使用一个编辑框接收数据就好了。

2,串口通讯,设置好串口需要的参数,读取数据时注意分段接收,做死循环等待接收的时候记得做超时。可以使用conut = 18000; count --; while(count > 0)
(1) int 代表一个整形
而二进制 10进制 16进制 都是一种表示的方式

int a=0c;
			int b=0f;
			int c = (a<<8 | b);

就代表0c0f;

(2)int和char 互相转换 : atoi itoa
float和char 互相转换 : atof sprintf
_ttoi CString 转int

(3)strtok 分离字符串
strstr 查找字符串里是否有子字符串

(4)CString 转 char可以用sprintf
CString转int float 都可以用Format

(5)memset 清0初始化
memcpy内存拷贝 可以将unsigned char 连接起来

(6)CTime获取时间
CTimeSpan获取时间差

(7)UNICODE CString 转char

	CString str;
	int n = str.GetLength();
	int len = WideCharToMultiByte(CP_ACP, 0, str, str.GenLength(), null, 0, null, null);
	char * buf = new char[len+1];
	WideCharToMultiByte(CP_ACP, 0, str, str.GenLength(), buf, len, null, null);

(8)m_pMainWnd = (CBaseFrame *)AfxGetApp()->GetMainWnd():

3,socket 通讯也是,注意分段接收,可以做开始结束标识,当开始结束都包含在字符串内的时候,才代表接收完成。

4,数据库 sql server 2008r2操作
建议odbc源
sql语句
建表:

	select count(*) from sysobjects where id = OBJECT_ID('表名')     返回值>0则代表表已存在
	create table 表名 (id int IDENTITY(1,1) NOT NULL, constraint pkid primary key (id), 日期 varchar 

(50)))

插入:

insert into 表名 (列名,....) values (‘值’,......

删除:

delete from 表名 where 日期 >= '20200101' AND 日期 <= '20200721'

更新:

UPDATE 库名 set 表名 VALUES =1’ WHERE id = '1' 

5,list control 用线程读取数据库数据,防止UI卡住!控件分页显示 数据库报表

    CRect rect;   
    // 获取编程语言列表视图控件的位置和大小   
    m_programLangList.GetClientRect(&rect);   
    // 为列表视图控件添加全行选中和栅格风格   
    m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);   
    // 为列表视图控件添加三列   
    m_programLangList.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width()/3, 0);   
    m_programLangList.InsertColumn(1, _T("2012.02排名"), LVCFMT_CENTER, rect.Width()/3, 1);   
    m_programLangList.InsertColumn(2, _T("2011.02排名"), LVCFMT_CENTER, rect.Width()/3, 2);   

// 在列表视图控件中插入列表项,并设置列表子项文本

   m_programLangList.InsertItem(0, _T("Java"));0行 第0 java列
    m_programLangList.SetItemText(0, 1, _T("1"));0行 第1

分页显示:
1.创造工程 testDlg,在对话框头文件中定义,四个公有变量

int pageNo; //页数编号
 int pageSize; // 每页显示条数
 int intStart; // 开始记录
 int intEnd; // 结束记录
 int max_page; // 记录最大页数

2.在构造函数中初始化

 pageSize=10;  
 pageNo=1; 

3.添加控件,并通过类向导添加响应函数,核心代码如下:

void CTestDlg::OnBtnFirst() // 第一页
{
    if (pageNo == 1)
   {
      AfxMessageBox(_T("已是第一页"));
   }
   else
  {
    pageNo = 1;
    m_ctlList.DeleteAllItems();
    ListShow();
  }
}
 
void CTestDlg::OnBtnPageup() // 上一页
{
    if(pageNo==1)
    {
        AfxMessageBox(_T("已是第一页"));
    }
    if(pageNo>1)
    {
        pageNo--;
        m_ctlList.DeleteAllItems();
        ListShow();
    }
}
 
void CTestDlg::OnBtnPagedown() // 下一页
{
   pageNo++; 
   if (pageNo > max_page)
   {   
        pageNo--;
        AfxMessageBox("已是最后一页");
        return;
   }
    m_ctlList.DeleteAllItems();
    ListShow();
}
 
void CTestDlg::OnBtnLast() // 最后一页
{
 if (pageNo == max_page)
 {
  AfxMessageBox("已是最后一页");
  return;
 }
 else
 {
  pageNo = max_page;
  m_ctlList.DeleteAllItems();
  ListShow();
 } 
}

4.在对话框初始化中设置List Control的风格
5.添加ListShow函数的实现,通过数据库实现

void ListShow()
{
	 intStart = pageSize * (pageNo-1);
	 intEnd = pageSize * pageNo;
	 for(int i = intStart,j=0;i<intEnd;i++,j++)
	    m_ctlList.InsertItem(j,str[i]);
	 for(int i = intStart,j=0;i<intEnd;i++,j++)
	    m_ctlList.InsertItem(j,1,str[i]);
	
	 CString strShowPage, strpageNo, strMaxPage;
	 strpageNo.Format("第 %d 页  ", pageNo);
	 strMaxPage.Format("共 %d 页", max_page);
	 strShowPage.Format(strpageNo + strMaxPage);
	 GetDlgItem(IDC_STATIC_SHOWPAGE)->SetWindowText(strShowPage);
 }

6,MonthCalendar 日历控件

void CMFC_Ctrl_TimeDlg::OnMcnSelchangeMonthcalendar1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMSELCHANGE pSelChange = reinterpret_cast<LPNMSELCHANGE>(pNMHDR);

	SYSTEMTIME st = {0};
	m_calendar.GetCurSel(&st); //获取当前日期信息
	CString str;
	str.Format(L"%d年%d月%d日", st.wYear,st.wMongth,st.wDay);
	
	*pResult = 0;
}

本文地址:https://blog.csdn.net/huanfei8895/article/details/107604798