最近的考勤跟称重项目总结

首先说下考勤项目

1、由于在手持机上面运行,所以需要屏蔽按键esc跟return,跟往常一样写了一个PreTranslateMessage函数,

然后if((pMsg->wParam == VK_ESCAPE || pMsg->wPram ==
VK_RETURN)) 这样设置之后出现了一个问题了,对settimer无法响应了。后来单步进来发        
现,不管怎样都是会被这个VK_RETURN给拦截了,所以在这里除了按键的return是13之外,还有其他消息也会出现13。这里就需要加一个判断就是如果是按键的话
    才屏蔽掉这个消息,所以在这个判断之前添加了前提条件:pMsg->message == WM_KEYDOWN ||
pMsg->message == WM_KEYUP ,这样子就只拦截按键       的esc跟return

2、关于查找当前文件的路径问题,之前自己写的都是比较繁杂,没有利用CString这个类里面的一些函数。这里贴下她的比较精简的代码

TCHAR szPath[MAX_PATH];

GetModuleFileName(NULL, szPath, MAX_PATH);

CString PathName(szPath);

PathName = PathName.Left(PathName.ReverseFind(_T(‘\\‘))+1);

return PathName;

3、关于MFC里面的重回按钮的问题:这里需要重写按钮里面的DrawItem函数,但是重写之后按钮还是没有反应。这里需要自己设置:自绘的参数,也就是在重写PreSubclassWindow这个函数的时候添加进一句ModifyStyle(0,
BS_OWNERDRAW)

4、任务栏总是出现在界面前面不管程序里面是不是设置了top_most ,最后实在没有办法只能隐藏任务栏,然后在退出程序的时候,再显示出任务栏。

先找到任务栏的HWND hwnd = ::FindWindow(L"HHTaskBar", NULL),然后隐藏任务栏if(hwnd != 0)
::ShowWindow(hwnd, SW_HIDE) 最后推出程序的时候重新显示任务栏if (hwnd != 0) ::ShowWindow(hwnd,
SW_SHOW)

5、在重绘整个界面的时候,使用了OnPaint 理论上这个应该是没有什么问题,但是我自己自己添加,所以在函数中没有添加CPaintDC dc(this)
这个坑爹货,所以程序没有让整个腰重绘的地区无效,所以在最后,我要显示另一个dialog的时候,却总是无法显示出来,总是在parent的dialog中一直调用onpaint函数,可以说是死循环了,所以这里要首先让自给的内容变成无效即调用CPaintDC
,从而调用一次之后,如果没有界面的改变,她就不会再调用重绘函数。

6、下载数据的问题:这里下载数据的时候因为自给的手持机下载速度比较慢,所以每次下载一个东东都要耗费好长的一段时间,而程序要设定一定的超时时间

CInternetSession session;CHttpConnection *pHttpConnection = NULL; m_pHttpFile
= NULL;
session.SetOption()通过这里来进行设置超时时间,但是这里发现了一个很严重的问题,超时时间不管怎样设置都是返回一样的超时时间。于是上网查了下微软,里面描述竟然是微软的bug,这个问题的解决方案就是自己开一个线程,然后去等待结束。本来不用这么麻烦,但是当在下载的过程中,突然中断网络,程序就无法继续运行了,直接卡死在那里,也不返回错误的信息。所以通过线程来等待下载,在等待的时间内,如果没有下载到数据就直接返回。由于自己无法控制要下载多长时间,所以这里的等待有一个判断,如果没有下载完就重新一轮的等待。

7、删除文件夹的问题,由于文件夹里面可能还有文件,需要递归的进行删除文件夹里面的所有文件,否则无法直接删除文件夹

WIN32_FIND_DATA findFileData;HANDLE handle =
::FindFirstFile(fileDirectory + L"*.*", &findFileData); BOOL bFound =
TRUE;

while (bFound && handle != INVALID_HANDLE_VALUE)

{

    if (0 == (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
::DeleteFile(fileDirectory + findFileData.cFileName);

else DeleteDirectory(fileDirectory +
findFileData.cFileName)

bFound = ::FindNextFile(handle,
&findFileData);

  }

  ::RemoveDirectory(fileDirectory);

  if (handle != INVALID_HANDLE_VALUE) FindClose(handle);

  return TRUE;

这个是删除文件的递归操作

然后文件的创建操作也是同样的道理,先通过查找::FindFirstFile()
然后判断是否存在文件夹,如果不存在的话就创建文件夹fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY  
   CreateDirectory(filename, null)

这里是在考勤中遇到的一点小问题,在这里做个记录。

2、接下来是称重记录软件

称重记录软件主要的是局域网内直接访问数据库。这里是sqlserver2008

首先是语言的选择,在最开始的时候想用C++来做这个软件,但是网上查了下,用他们的方法,无法连接到数据库,后来自己上网查了下,有关访问远程数据库的几乎都是用C#来写,终于还是使用了这个比较陌生的语言来写这个坑爹的程序。

1、关于数据库:因为是手持机端,所以需要添加文件dbnetlib.dll
跟文件System.Data.Sqlclient.dll这两个文件,然后在工程的reference中添加System.Data.SqlClient

查询读取数据库

在这里的string
m_strConnString里面要添加的是server=192.168.4.48;uid=sa;pwd=password;database=SFWeight
 根据自己的情况可以添加不同的字段

using(SqlConnection conneciton = new SqlConnection(StrConnString))

{

  DataSet ds = new DataSet();

  try{connection.Open();}catch(System.Exception){}

  try{SqlDataAdapter command = new SqlDataAdapter(‘select ....‘,
connection)}catch(System.Exception){}

  command.Fill(ds);

}

return ds

更新数据

同理conn.Open()

SqlCommand cmdData = new SqlCommand()

cmdData.Connection = conn

SqlTransaction tx = conn.BeginTransaction()

cmdData.Transaction = tx

SqlCommand cmd = new SqlCommand(strImgSQL,conn)

SQLParameter myPa = new SQLParameter("@Image", SqlDbType.Image)

myPa.Value = byteData; // byte[] 类型的从.jpg中读出来的数据

cmd.Parameters.Add(myPa)

try

{

cmdData.CommandText = strSqlString;

  cmdData.ExecuteNonQuery()

  cmd.ExecuteNonQuery()

  tx.Commit()

}

在这里查询返回的DataSet ds

if(ds == null) return;

if (ds.Tables[0].Rows.Count == 0) return;

DataRow[] drpInfo = dataSet.Table[0].Select("F_CarNo=‘1234‘");

if (drpInfo.Length > 0)

{str = drpInfo[0]["F_StdNo"].ToString()}

dialog中判断当前的Form 是否处于最前列的情况是通过调用微软的API

GetForegroundWindow() 然后判断最前的window是否是你的window  通过FindWindow(className,
WindowName)返回的句柄来判断

时间: 2024-11-13 23:36:21

最近的考勤跟称重项目总结的相关文章

c#开发地磅称重软件

2012年时即做过一个地磅称重软件,最近公司又接了一个地磅过磅软件的项目,把遇到的问题总结一下以备后用. 1.接线问题 因为客户方原来单独使用仪表,仪表未有接线和电脑连接,为此颇费周折才做好了接线.接线方式为仪表端所接阵脚为7.8,电脑端为2.5 2.读取仪表称重数 代码基本沿袭2012年为另一客户所开发的称重软件的代码. 注:本次客户所使用地磅为泰山衡器厂出的XK3200,但说明书上说明和耀华系列地磅兼容,而上一客户所使用地磅正是耀华XK3190,大概因此代码基本可直接通用. 下面贴代码了,使

智能无人值守称重行业车牌识别行业应用

智能称重行业打破传统称重流程,更简单.更智能实现智能无人值守. 方案介绍: 称重管理系统需要在测量车辆载重的同时记录车牌号码,并建立对应关系.采用人工录入车牌方式,需要较长的等待时间,且容易产生失误甚至作弊等问题.应用智能车牌识别一体机产品,在车辆称重的同时自动识别车牌号码,同时记录车辆图像.检测数据等信息.大大节省了检测时间,提高了工作效率且有效避免人为因素影响.车辆信息还可以自动上传到管理中心实现联网操作.结合称重系统,智能车牌识别一体机产品可广泛应用于公路治超监测站.高速动态称重.大宗物料

1449 砝码称重

1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 现在有好多种砝码,他们的重量是 w0,w1,w2,...  每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组测试数据. 第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9). Output 如果能,输出YES,否则输出NO. Input示例

2144 砝码称重 2

2144 砝码称重 2 http://codevs.cn/problem/2144/ 题目描述 Description 有n个砝码,现在要称一个质量为m的物体,请问最少需要挑出几个砝码来称? 注意一个砝码最多只能挑一次 输入描述 Input Description 第一行两个整数n和m,接下来n行每行一个整数表示每个砝码的重量. 输出描述 Output Description 输出选择的砝码的总数k,你的程序必须使得k尽量的小. 样例输入 Sample Input 3 10591 样例输出 Sa

【dp】砝码称重

砝码称重 来源:NOIP1996(提高组)  第四题 [问题描述]     设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000),用他们能称出的重量的种类数. [输入文件]   a1  a2  a3  a4  a5  a6     (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个,中间有空格). [输出文件]   Total=N     (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况). [输入样例]     1 1 0 0 0

HFUT 1354.砝码称重(安徽省2016“京胜杯”程序设计大赛 A)

砝码称重 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 12 Accepted: 10 Description 小明非常喜爱物理,有一天,他对物理实验室中常用的弹簧拉力计产生了兴趣.实验室中有两种质量不同的砝码,小明分别用a个第一种砝码放在弹簧拉力计上和b个第二种砝码放在弹簧拉力计上,假设每增加单位重量的砝码,弹簧拉力计的长度增加1,那么两次称量弹簧拉力计的长度差是多少呢?(假设拉力计不发生非弹性形变) Input 第

砝码称重问题二

题目描述 有一组砝码,重量互不相等,分别为m1.m2.m3……mn:它们可取的最大数量分别为x1.x2.x3……xn. 现要用这些砝码去称物体的重量,问能称出多少种不同的重量. 现在给你两个正整数列表w和n, 列表w中的第i个元素w[i]表示第i个砝码的重量,列表n的第i个元素n[i]表示砝码i的最大数量.  i从0开始                   请你输出不同重量的种数.如:w=[1,2], n=[2,1], 则输出5(分析:共有五种重量:0,1,2,3,4) 解题 参考智力题砝码称重

蓝桥杯——说好的进阶之砝码称重(贪心算法)

5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要求编程实现:对用户给定的重量,给出砝码组合方案. 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1 要求程序输出的组合总是大数在前小数在后. 可以假设用户的输入的数字符合范围1~121. public static void main(String

51nod 1449 砝码称重 (进制思想)

1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 现在有好多种砝码,他们的重量是 w0,w1,w2,...  每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组测试数据. 第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9). Output 如果能,输出YES,否则输出NO.