Office中国论坛/Access中国论坛
标题:
条码应用软件项目开发前期的几点思考
[打印本页]
作者:
没牙兔兔
时间:
2009-2-1 09:53
标题:
条码应用软件项目开发前期的几点思考
刚开年,接了一单软件开发项目,又得重操旧业
软件的项目计划和需求分析书都已经写完了,现在就等批复下来就进行代码设计啦。
这里简单把软件开发的几个问题整理一下,欢迎大家沟通交流。
软件目的:
通过二维条码实现上下级单位的数据统计表报送(本地数据库部分内容禁止手动修改,仅能用条码读入或者接受电子文档的方式),实现本级明细记录的管理(大概类似人力资源管理)
软件实现:
因无联网环境,均采用脱机数据包的方式实现,本地数据拟采用mdb数据库,上级数据拟采用sql server数据库,软件开发平台拟选用office和vb 或者 vb.net ,office主要用于word+excel+access,通过vba程序设计均对业务的相关报表和流程进行管理,vb or vb.net俺早就还给老师了,仅仅就用它来封装?通过调用相关模块,解决 宏安全的问题,数据交互采用二维条码QR码。
涉及硬件
:
单机计算机,摄像头(视频识别二维条码,成本低50~300元),扫描枪(快速识别二维条码,成本高3000元~6000元),USB密钥(通过硬件级加密锁的方式实现用户权限控制、文档加密防伪和软件分发管理,支持俺的知识产权,哈哈),打印机(采用激光打印机才好,支持二维条码的档案打印),传真机(异地报表通过传真实现)
技术难点
(因为俺不懂,所以才这么多难点,写出来大家讨论):
1、
二维条码的识别和生成。
解决思路:以前做过pdf417条码的应用,想必qr码的应用也差不多。一般是通过sdk包来生成控制,网上有很详尽的sdk开发包以及各个开发语言的范例。视频识别采用ezvidC60.ocx控件捕获的方式,逐帧循环抓取,识别有效或者超时的话就跳出循环。二维条码枪的识别就简单多了,做好rs232 com接口的数据读取就行了(最近的二维条码枪的接口大多都是usb接口,但实质是usb2com,还是com读取),所有二维条码读取的方式就丢给二维条码枪就行了。
2、
usb密钥
,类似网上银行的U盾或者密钥的方式。已经找了几家公司,找来相关开发测试的sdk和测试密钥进行学习,文档很详尽,目前正在理解如何有效的加密和应用,大体思路是软件的启动必须检测密钥是否有效,密钥分类实现用户分类,给不同的用户分发不同的密钥,文档的二维条码内容进行硬件密钥算法的加密,最终实现目的,有密钥才能有软件运行,不同密钥实现不同操作权限,密钥加密文档和软件。普通密钥大概40~100元,智能卡密钥大概100~150元,区别在于提供给用户的存储空间大小和算法加密强度等。
3、
数据库选择
。本地数据量大概在万级以下,想采用帐套的方式,多个mdb数据库实现不同年度的数据管理,这样能有效的控制数据增长,避免mdb因数据量过大出现的效率低下和崩溃问题。上级数据在百万级以内,想采用sql数据库,有些参考软件用oracle,俺以前学过oracle,只会皮毛,数据库太大,维护和应用困难,嘿嘿,还是拣自己熟悉点的sql server吧
4、
控件选择
。其实这个才是体现软件人性化和开发者的能力的时候,一个好的控件能让你的软件实现便利,程序设计简单,站在巨人的肩膀上就是省事啊。treeview控件很强大,但是应用中还是有些很多技巧需要去组合,参考别人的软件的树控件还有选择框,不知道treeview控件有没有。数据报表控件,现在很流行excel模式的表控件,分页,表格背景染色,数据动态筛选,打印输出等等功能,俺以前实在没找到和学会,就干脆用excel作为数据录入和查询界面,mdb作为后台数据库,不知道各位高手同仁有没有什么参考或建议。
5、
报表打印
。以前都是做固定的报表rpt,后来进步了一点点,用word模板和excel模板,这样自定义性高了很多,反正打印机的页面设置和表格大小的调整以及部分内容的自定义都可以丢给用户了,会word和excel的用户很多,哈哈,这次设计应该要求更高一点。我学习了一下别人的先进理念是动态实现数据表的标题、行、列和表内容,大概意思就是拖一个字段作为报表的列,然后再拖一个字段作为报表的行,最后拖一个字段作为报表的内容。这样三者结合,基本上所有实现的统计表均能实现啦。不知道说清楚没有,有更好的可以相互交流。
6、
软件发布
。头疼啊,sqlserver数据库的发布大概用脚本导入或者数据库mdf和log进行加载,拟采用后者,这样数据库的导入和备份都可以用同一模式。软件平台得支持office2000,office xp,office 2003 ,office 2007,天啊,我不就是用vba开发而已,这下得照顾多少类别的平台啊,以前都是用officexp开发,勉强支持office2003,至于其他平台的兼容性和差异没有什么深刻认识。整个软件打包用光盘分发,用setup factory打包,开发中,每应用的一个控件都必须在多个操作系统(仅windows系列)和多个平台进行兼容性测试。
7、
业务需求
,这个反倒是最简单的,只要技术手段实现了,目的就容易达到啦
以上说得很多,只是一个初步的思考,后续可能会继续调整,大家感兴趣就多回帖,集思广益,呵呵
作者:
tmtony
时间:
2009-2-1 10:22
条码生成可以使用条码字体或现成的条码控件来实现.
如果要通用,最好采用常用的条码格式
作者:
没牙兔兔
时间:
2009-2-1 11:04
哈哈,感谢版主坐一个新年沙发
条码字体一般是一维条码采用
二维条码用条码控件实现比较方便,我用PtBarcode实现,现成控件支持QR码,pdf417码和datamatrix码,应该可以自己写算法实现,不过就累死啦,这三种都是通用的条码格式,qr码和datamatrix码属于矩阵式条码,pdf417码属于堆叠式条码
作者:
ACMAIN_CHM
时间:
2009-2-1 11:24
我们是用的专业的barcode scaner 大约 4K-6K左右。输出标签也是专门的avery的打印机。
由于你要控制禁止从键盘输入,只允许从barcode scaner输入信息,所以VBA环境不如用其它语言来实现比较方便。
数据库,建议用SQL SERVER,如果从成本上考虑可以考虑一下MySQL, 客户端的可以直接用ACCESS.MDB甚至EXCEL.XLS,每天上传这个本地文件到SERVER上的公共目录,由SERVER上的程序定时load.
******************
* 一切皆有可能 *
******************
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/SList/Access
.
http://www.accessbbs.cn/bbs/index.php
.
http://www.accessoft.com/bbs/index.asp
.
http://www.access-programmers.co.uk/forums
.
http://www.office-cn.net
.
.
http://www.office-cn.net/home/space.php?uid=141646
.
作者:
tmtony
时间:
2009-2-1 11:50
二维条码只能用控件了,自己写太累了,虽然网上有相关资源,但要通用和稳定,还是要花很多时间.
控制必须是条码录入有两种方式
一种如果是串口条码枪,对串口编程,有些复杂
二是对录入的速度进行判断,如果是手工输入,无论如何也达不到条码录入的速度,在Keypress事件中判断录入的速度,如果小于多少秒则是手工录入的,不允许保存. 我以前做的一个ID卡身份验证程序就是这样实现的,但同时也要防止用户 用copy & paste来粘贴.
作者:
没牙兔兔
时间:
2009-2-1 15:20
呵呵,控制串口编程倒是也不繁杂,rs232通信而已,已经写了类似的函数过程直接引用就行了,稍微麻烦一点就是自动判断条码枪安装驱动后的com端口号是多少,这个当时写的时候偷懒不会就没写出来,直接做了一个com.ini的配置文件,让用户自己手动填写,改天整理一下思路,也发帖分享一下com口通信控制。
控制条码录入的方式,我的想法是直接该输入框禁止录入就行了,然后视频识别条码或者条码枪识别条码将数据直接写入表中,在刷新窗体这种方式,为了保证用户不自己跑到数据库里去修改,还得数据库设置工作组用户,避免直接打开,或者对输入的文本进行加密,防止用户录入。
最高版主推荐几本好书吧,关于adp编程的,自己薄弱环节也在于此,以前俺编程说白了,把sqlserver也当mdb来用的,啥查询啥操作都是放在sql语句中用ado来实现的,现在用sqlserver来做还是有些顾虑的,总得做一次项目得有一次提高,老是啃老本就不好了。
作者:
没牙兔兔
时间:
2009-2-1 15:35
To ACMAIN_CHM :
谢谢你的建议,你的条码推荐我搜索了一下,和二维条码枪 Denso GT10Q和Symbol DS6708等型号类似,大概差异在于一个是手持设备,一个是桌面设备,使用专用的条码标签机是主要用于产品打印标签使用,条码支持直接生成图片,然后在报表中引用打印,这样客户端的打印用a4纸就可以,不过对打印机有些要求,激光打印机才行,喷墨打印机会发洇,影响识别,劣质激光打印碳粉更夸张,直接用手一摸,整个条码区全糊啦,哈哈,原来我做的pdf417应用的证件就是因为这个伪劣碳粉费掉了1000多张证。
数据库选择:也是和你说的这样考虑,不过数据上报不是每天,一年大概就一次业务上报交互,其中会反复修改几次数据。本地数据库类似人力资源管理,新来的,调动的,调出的,事假的,类似而已。上级数据库主要是接收下级数据,然后给下级发送限制性的指标数,所以才要求下级不能手工修改。打算用access或者excel做前台界面都可以,后台数据用mdb.通过以往的使用经验来看,界面和数据库分离是一个很不错的方法,有助于后期数据维护和程序界面升级。
作者:
tmtony
时间:
2009-2-1 23:02
如果条码设备是键盘口的话,则可能要判断一下才行
作者:
rcylbx
时间:
2009-2-2 06:57
高手对话,学习了
作者:
没牙兔兔
时间:
2009-2-4 08:44
这里把串口控制的函数发上来给大家分享,另外增加一点本贴人气,哈哈
需要引用到MSComm控
以下为读取函数
Private Function OpenCommPort() As Boolean
Dim strParity As String
’这里必须先关闭端口,否则端口中会遗留以前的数据,导致读取重复
OpenCommPort = False
'设置出错指向
On Error GoTo CommErr
'这里的配置和设备本身有关,因二维条码扫描枪默认只能是9600速率
strParity = "9600" 'GetConfigValue(SECTION_SYS_CONFIG, KEY_COMM_PARITY)
'只允许设置以下几种波特率,除此之外都设为默认的9600
Select Case strParity
Case "110", "300", "1200", "2400", "4800", "9600", "19200", "38400", "57600", _
"115200", "230400", "460800", "921600"
Case Else
strParity = "9600"
End Select
Dim Xcom As Integer
Dim inipath As String
‘以下写了一个函数读取.ini文件,目的是读取端口号配置,如谁有能自动判断端口号的方法更好
inipath = IIf(Len(Application.CurrentProject.Path) = 3, Left(Application.CurrentProject.Path, 2), Application.CurrentProject.Path) & "\com.ini"
Xcom = CInt(GetFromINI("端口信息", "端口号", inipath))
'使用MSComm控件,读取对应端口号的内容
With MSComm1
.InputMode = comInputModeBinary
.InputLen = 0 '设为0,一次读出全部缓冲区中的数据
.Settings = strParity & ",n,8,1"
.Tag = strParity
.RThreshold = 1
.CommPort = Xcom 'GetConfigValue(SECTION_SYS_CONFIG, KEY_COMM_PORT, "1")
.PortOpen = True
End With
OpenCommPort = True
Exit Function
CommErr:
OpenCommPort = False
End Function
作者:
tmtony
时间:
2009-2-4 13:56
谢谢分享!! 学习了!
作者:
没牙兔兔
时间:
2009-2-5 13:10
哈哈,仰天一长啸
摄像头视频识别QR码搞定了
作者:
huangxiuwen
时间:
2009-2-15 04:10
学习
作者:
没牙兔兔
时间:
2009-3-3 22:44
继续增加本贴人气,后面用的相关技术都在本贴集中,嘻嘻
如何自动识别二维条码枪的端口号
http://www.office-cn.net/vvb/thread-69284-1-1.html
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3