VC++软件范文(精选9篇)
VC++软件 第1篇
垃圾文件是操作系统使用过一段时间生成的冗余文件, 对操作系统来说是多余的, 一般来说, 每个一段时间应该给予清理, 从而使系统更加干净, 有助于节省磁盘空间, 从而提高系统运行效率。下面主要介绍基于VC++开发的垃圾清理软件的设计与实现, 包括功能的实现和界面的设计。
2 概述
垃圾文件清理, 即对指定的文件格式的临时文件或垃圾文件进行遍历、扫描、显示、删除清理等。在程序界面设计方面, 对默认对话框重新自定义绘制, 主要包括标题栏的重绘、对话框边框的重绘、对话框背景重绘、以及最小化按钮、最大化按钮和关闭按钮等的重绘实现。经过界面的设计和功能的实现开发, 从而开发出一款具有实用意义的垃圾清理工具。
3 编程平台与技术
实现的软件开发平台是基于Microsoft Visual Studio 2008集成开发环境, 编程技术采用Visual C++编程技术, 以及相关的开发软件如Photoshop CS5等。
4 需求分析
本程序的设计与开发主要分为两大模块, 功能的设计开发和应用程序界面的设计开发。
功能的分析与设计:垃圾清理功能主要包括文件遍历扫描、显示已扫描到的文件以及垃圾文件的删除清理等。用户需要一边进行文件扫描, 另一边可以对已经扫描到的垃圾文件进行清理操作。文件扫描通常会占用大量的时间, 为了提高垃圾清理的可靠性和效率, 应该使用多线程开发技术, 即将文件扫描的任务放置在一个单独的线程中即可。
应用程序界面设计:在对话框重绘中, 使用的主要技术有两个, 一个是绘制对话框的背景位图, 在对话框大小改变时能够输出位图, 使位图能够适应对话框的大小。另一个是在对话框的指定区域输出位图。
5 程序开发与实现
5.1 垃圾文件的扫描、显示和清理
(1) 创建一个基于对话框的工程, 工程名称为“Clear Tmp File”。
(2) 向对话框中添加静态文本框、按钮、组合框、列表框、进度条等控件, 效果如图1所示。
(3) 在对话框类CClear Tmp File Dlg中添加共有的主要数据成员, 各成员功能见注释部分:
(4) 向对话框类中添加Research File方法, 判读指定的目录, 将指定的垃圾文件类型显示在扫描结果列表中:
(5) 定义线程函数, 用来单独执行扫描查找垃圾文件任务:
(6) 处理“立即扫描”或“开始”按钮的单击事件, 创建一个新的线程执行扫描文件的任务:
(7) 清理已扫描到的垃圾文件, 即采用删除文件策略, 使用Delete File () 方法:
到此, 软件的主要功能部分都已经开发完毕, 下面将进行对软件界面的设计与开发。
5.2 程序界面的设计与实现
应用程序界面的设计包括两部分, 一部分是对话框自身的重设计, 二是对话框控件的重绘, 本程序主要对按钮控件进行重绘设计。
5.2.1 绘制对话框的背景位图
绘制对话框背景位图本文采用的是处理对话框的WM_PAINT消息, 该消息初始化时候对对话框进行绘制, 从而绘制背景位图。绘制背景位图的主要代码如下:
5.2.2 在指定的区域中输出位图
为了能够在指定的区域中输出位图, 需要使用设备上下文CDC类的Stretch Blt方法。由于我们需要在窗口的非客户区域绘制位图, 因此需要使用CWindow DC类的Stretch Blt方法, CWindow DC类派生与CDC类, 它提供了在窗口非客户区域绘制位图的功能。该方法数从源矩形中复制一个位图到目标矩形, 必要时按目前目标设备设置的模式进行图像的拉伸或压缩。输出位图的主要实现代码如下:
5.2.3 对话框绘制的实现
在对话框重绘的设计与实现过程中, 一般需要绘制的对话框区域主要有标题部分、边框部分和客户区部分。具体的区域划分如图2所示。
既然要对多个区域进行位图显示输出, 所以我们先封装一个bmp位图显示输出函数如下:
对各个区域进行位图输出重绘。由于标题栏以及边框主要都是非客户区域绘制, 因此应该在WM_NCPAINT消息中绘制。当然得先通过添加资源的方式将所用到的bmp位图资源导入到项目中。
在WM_NCPAINT消息对于的方法On Nc Paint () 中调用对话框绘制方法Draw Dialog () 。该方法的功能就是绘制对话框各个区域的位图。主要代码如下:
上面代码中最后的绘制对话框标题文本的方法Draw Title Bar Text () 的主要代码如下:
在完成对话框相应区域的位图后, 并没有完成任务, 还需要处理标题栏按钮的热点效果, 以及按钮的单击事件。首先得处理鼠标在非客户区域移动时的事件, 即WM_NCMOUSEMOVE消息, 在其消息处理函数中判断当前的鼠标点是否位于标题栏的按钮区域, 如果是则设置按钮的热点效果, 并且记录当前的按钮状态, 及鼠标点在哪个按钮上。同样, 处理对话框非客户区域的单击事件, 即WM_NCLBUTTONDOWN消息, 在其消息处理函数中完成单击事件操作。这部分的代码比较简单, 在此不予显示。
5.2.4 按钮控件重绘的实现
在MFC下编程, 很多时候对于标准的按钮控件不是很满意, 想要弄得美观些。这就需要按钮重绘。重绘按钮一般的实现方法就是重写CButton类。
首先给工程添加一个自绘按钮类My Draw Button, 基类为CButton。要想让按钮具备自绘功能, 就要为按钮添加BS_OWNERDRAW属性。为类CButton重载Pre Subclass Window虚函数。在该函数中添加如下一行代码:
当按钮控件具有了自绘功能之后, 每次控件状态改变都会触发Draw Item函数, 在该函数中来绘制按钮的形态外观, 所以第二步就要重载Draw Item虚函数。在这个函数中就可以自由发挥了, 比如绘制背景、底色、按钮标题、绘制文本字体样式等。
一般都会为按钮定义几种不同状态时的外观, 比如光标滑过时的状态, 按钮按下时的状态, 按钮禁用时的状态, 以及按钮的正常状态等。这就要为新的按钮添加几种重要的消息响应。比如WM_MOUSELEAVE消息, WM_MOUSEHOVER消息和WM_MOUSEMOVE消息等, 值得一提的是前两个消息的响应函数需要自己手动添加, 微软提供了一个Track Mouse Even函数在光标离开一个窗口时投递WM_MOUSELEAVE消息, 光标滑过窗口时投递WM_MOUSEHOVER消息。一般来说可以在WM_MOUSEMOVE消息响应函数中调用Track Mouse Event函数来投递WM_MOUSELEAVE消息和WM_MOUSEHOVER消息。然后在WM_MOUSELEAVE消息的响应函数中标记“光标已经离开按钮”, 然后调用Invalidate Rect函数让按钮重绘。在WM_MOUSEHOVER消息的响应函数中标记“光标正在按钮上方”, 并调用Invalidate Rect函数让按钮重绘。
(1) 绘制按钮背景样式, 即绘制背景bmp位图, 使得按钮具有自定义的样式, 同时在绘制按钮背景的输出位图时采用Transparent Blt () 函数, 该函数的作用是使窗体上显示位图的背景与窗体背景色融为一体, 不仅可以显示按钮bmp位图样式, 而且还可以使背景透明。
(2) 就是绘制按钮上的文本。主要绘制按钮上文本的样式, 包括字体大小, 字体样式, 字体颜色等属性。
(3) 实现不同状态下的按钮的外观样式, 主要包括WM_MOUSEMOVE和WM_MOUSELEAVE两个消息的消息处理函数。分别实现鼠标在按钮区域上和不在按钮区域上的状态。为了标记鼠标移动到按钮区域内停留, 需要用到一个定时器来标记鼠标是否还在按钮区域内停留。在WM_MOUSEMOVE内启动定时器, 触发WM_MOUSELEAVE消息时结束定时器即销毁定时器。定时器的主要代码如下:
重绘按钮类My Draw Button的主要实现代码如下:
定义的一些重绘用到的变量:
消息处理函数和定义的函数:
到此, 按钮的自定义重绘完成了, 接下来就可以使用自己重绘的按钮类My Draw Button了。首先往对话框中添加一个按钮控件 (以立即扫描按钮为例) , 假设它的ID值为IDC_TEST。进入类向导 (Class Wizard) 的成员变量属性页, 为IDC_BEGIN添加一个变量m_btn Begin。如下:
然后就可以调用My Draw Button的方法来设置按钮的样式了。如下:
到现在为止, 按钮类的重绘完成了, 可以随意定义自己喜欢的样式的按钮了。现在相对完善成形的一个垃圾清理工具软件就开发完了。
最后软件的运行效果界面如图3-图6所示。
6 结语
VC++软件 第2篇
创业的山寨和VC的山寨风光是大相径庭、各有千秋、风味各异的。
创业苦,但是苦中有甜。创业是自主的,你有原创的Idea,可以选择自己喜欢的行当,自己的孩子自己喜欢,不管赚钱多少,你可以5年甚至一辈子富有激情地去为之奋斗、与之厮守;赚钱的公司通常目标明确,流程清晰,纪律严明,出了问题可以大刀阔斧该换人换人,该炒人炒人;创业也可以是做好事,创造就业机会,创造产品和服务满足社会需求,创造收入创造利润,有利润就更加好玩了,可以和全体团队分享,可以捐助希望小学创业是创业者当家作主的干活,创业爽!
当VC也苦,而且有苦说不出。VC是被动的,被别人牵着鼻子走,VC要出去到处转悠,看看谁有好的Idea,找到好的项目往里面砸把钱买张门票,搭人家的车去兜风,方向盘在别人手里,开对开错方向,自己只能在后车厢里嚷嚷,使不上劲儿;VC心急,只想快钱进快钱出,陪不了业主去创建百年老店;团队出了问题,VC也只能干瞪眼,没法把闯祸了的团队给一锅端全炒了,重起炉灶;VC赚了大钱,大部分是要拿去给LP们交公粮的,自己所剩无几说得极端些,当VC是为他人做嫁衣裳、自己哄自己、自己安慰自己的干活,当VC郁闷!
1. VC脑子里没别的,想的只是钱,而且都是大钱,不能赚大钱的项目VC是不会去问津的,VC的理想是天天撞上可以让你轻轻松松赚得盆翻钵满的项目,当然,世界上这样的项目也真的不太多,即使有的话创业者难道自己不会要去赚这份快钱热钱easy钱,谁会把好事儿全留着给VC?
2. 所以VC要趁虚而入,趁一个潜在的伟大公司还没有开始大桶大桶地进钱来,一把将钱先砸进去,抢占一个将来可以分钱的沙发、板凳只要这家公司能赚大钱,坐不到沙发板凳,躺地上也行。
3. 所以VC要挖空心思算计,试图能给世界的未来把脉,抢在时间前面、抢在上帝前面跑到终点。电信3G后面是4G、5G互联网2.0后面是3.0、4.0VC每天晚上睁大了眼睛裹在温暖的被窝里听《一千零一夜》故事里的世界比现实中的世界美妙多了,下一个美妙的故事又是什么呢?
4. 天亮了,VC去敲创业者的门,“芝麻芝麻开门”门开了,创业者在里面正拿着石斧石镰艰苦创业,正苦熬着哪VC往心里的公式上一套,皱皱眉头:模式太旧,规模化很难,没有爆发性增长,算了算了,换频道吧。
5. VC换了扇门又去敲“芝麻芝麻开门”门开了,创业者是两个小娃娃在里面在办家家玩游戏玩得正欢,有星球大战,有SNS,视频,虚拟人生VC皱皱眉头:概念太新,没法赚钱,陪俩孩子玩游戏,还得要砸进去多少银子才能把他们抚养成人啊?不行不行,再看看其它的吧。
6. VC再叫“芝麻芝麻”,话音没落,门自动地开了,面前出现的是范伟同学手里拎一个“分歧终端机”,嘴里口口声声自语“非诚勿扰”哎,有了,这玩意儿不错,有创意有想象空间,成熟的市场里的颠覆性产品,14亿人民人人都得买,天天都用得上,说不定哪天还会像iPod那样会跑遍全世界外加上范伟同学圆头圆脑人也长得不错,简历上名牌学校、大公司的名字比比皆是,就是它了,砸钱!
下面的游戏大伙儿们自己去想象吧但愿范伟同学走运成功噢!
当VC好累,创业者能被VC看得上眼的实属凤毛麟角,VC呢,能有幸撞上范伟同学的、真的敢于领先砸钱索性砸出它几个刺激故事的也不多,大家还是愿意跟跟风,凑个热闹,图个安全。于是VC也就不Venture了,餐厅、美容院、洗脚店也有VC投中国就是中国嘛,中国是特殊的地方、特殊的时代、特殊的机遇,没法用美国的现成模式来套,只要能赚钱,什么不能投?!
“VC”和“创业”之间好像总有那么一些对接不上的地方,导致成了致命伤:
* 创业者都理解成功是意外的偶然的,成功的道路上有无数不确定性、机缘、曲折、失败等等,但是VC的判断逻辑是:成功 = 名牌大学学位 + 简历上著名跨国公司的名字 + Idea + 概念 + 故事 + 模式 + 预测与其说这是成功的轨迹,不如说这是MBA学生的课堂练习,这道公式里是不是缺少了一个不确定的系数?当然VC的这个成功逻辑也不能说有什么大的错误,问题是:VC投资后的所作所为是否尽职,是否能对得起自己的良心,
* 比如说,VC投资后,团队的实际业绩和商业计划书相差十万八千里,VC管不管?VC们大家来盘点一下自己投资的公司吧,数数看有几个是能基本按原定计划甚至超额达标的?少说80%VC所投的公司远远达不到原先故事里的预测,有几个VC敢于站出来发脾气,为投资人的利益义正词严、大刀阔斧采取果断措施终止流血的?VC们多数欲说还羞,一副“犹抱琵琶半遮面”的姿态,继续放断线风筝,希冀风筝在空中飘的时间越长越好这样的事情在健康的创业企业里、在一个没有VC投资的公司里是绝不容许的,哪个部门经理来找你忽悠,一会儿东一会儿西,只要他不出业绩,创业者你会容许此人长期在公司里这样呆下去吗?!相信你不是客气地放他一条活路让他自己走路,就是毫不留情把他拖到菜市口去斩首。
* 某些VC的纵情红颜矫作,造就了一个可爱的奶妈形象,社会上嗷嗷待哺的孩子们吃上了VC的奶就指望着一辈子含着VC的奶头永不断奶。拿不到VC钱的创业者,羡慕的、眼红的有之,冷嘲热讽的也不少,因为他们看不惯那些“有钱人家的孩子”的作风;本来好端端的一个创业者,拿到了VC的钱就变坏,本来穷人的孩子早当家,一旦遇上了个VC奶妈,照样也被养肥惯坏,永远长不大。还有更聪明的“创业者”,他们根本没想过如何去赚顾客的钱,他们挖空心思想的就是如何忽悠VC砸一大把钱,然后风风光光地活上几年,等这个VC的钱被糟蹋光了,再另起炉灶去忽悠别的VC。
* VC反正是拿别人LP的钱去赌博,砸一把过过瘾,输了赔了也不是自己的钱。VC们以把钱投出去为目的,什么时候赚进钱来了,那都是后话。天下哪一个人不晓得钱出去是容易的,钱能不能再回来呢?花钱容易进钱难,如果当VC有昂贵的门槛,砸投资人的钱有条件,钱砸出去了、钱没有回来之前,VC除非把自己的钱垫进去解套,否则谁也不得拍拍屁股摇身一变又换到另一个VC的寨子里混去了,那样的话,别说中欧、长江的MBA们,就连从美林、雷曼出来的投行家们中会有几个愿意把VC作为自己未来职业生涯的第一选择?VC的寨子里,你要时间待久了就不难发现,有几只肥肥的大老鼠在暗地里窜话要说回来,我们VC中大多数的同志是好的,是有理想的,是努力工作、要求上进、积极靠近组织的。VC里的大老鼠毕竟是少数,但是一粒老鼠屎弄脏了一锅粥。
* 世界上没有十全十美的东西,VC也这样。VC犯的最大的错误是放松在思想上的警惕性,VC喜欢说“我投10个可以死九个,只要一个成了就行”,这句话把VC犯错误的借口都讲绝了,好像VC再犯错误都是特有道理的。创业就不一样了,你到创业的山寨里去混混看,你敢不敢对你老婆说,我有10个创业的Idea,其中9个都是胡扯,可能有一个是可以执行的,看看你老婆愿不愿意砸钱陪你去干?创业是要想好了决一死战的,不成功便成仁。
罪过、罪过身为VC,时常自感困惑,免不了常常会“身在曹营心在汉”,怀念和羡慕创业生活。我有两个心语心愿,吐出来分享给大家吧:
一. 有朝一日会有人站出来,学习互联网创业者起草《中国互联网行业自律公约》那样,发起起草一份《中国VC从业自律公约》,把不合格、不负责的大老鼠VC逮住关进笼子,不准他们胡乱地砸投资人的钱,不准他们咬死创业者,不准他们连累我们好人VC一起背黑锅;这样的话,VC的山寨会干净很多,VC们再去忽悠LP的钱大概也会容易很多;
二. 有朝一日会有一批成功的创业者来自建“创业者的VC”,重新制定创业投资的游戏规则,由创业者自己来挑选、支持、投资、辅导、监管、提携新一代的创业者和创业企业,创业者自己管理“创业基金”可能更加驾熟就轻,大老鼠“创业者”们是休想到这里来忽悠到钱的;
如果能这样,“创业的山寨”和“VC的山寨”不再各自独立,自相矛盾,各做各的黄粱美梦,VC和创业也不必演“双城记”了,二者将会跑在同一个操作系统上了。
VC++软件 第3篇
6月30日晚上10时。孙振耀向好友们发出短信:“感谢,海辉今天在美国正式上市,希望大家分享我们的喜悦。”这被视为当天海辉对外发出的唯一官方声音。当天,海辉在美国纳斯达克上市,首日收盘价为10.40美元。比发行价小涨4%。海辉软件最终筹集到7400万美元。
在大连,海辉是一家家喻户晓的企业,它与东软、华信既是大连本地最大的三家外包企业,也是仅次于东软和华信的第3大国内软件出口企业。
海辉软件的业务是出售外包IT服务,客户主要来自美国和日本,以技术和金融服务公司为主要目标。2009年,海辉软件的最大客户包括通用电气旗下子公司、微软、野村综合研究所和瑞士银行等。
此前,海辉软件预期的发行价格区间为11—13美元,但受股票市场的不稳定性和全球经济的整体不确定性等因素影响,海辉软件最终以低于预期的价格发行。
一再推迟的上市
据统计,近期在美国IPO市场,多家公司削减了其IPO规模或发行价格。海辉软件是6月在美上市的第11家公司,也是第8家发行价低于预期的公司。与此同时。已有6家公司取消或推迟了原定于6月在美股市场上市的计划。
相比之下,海辉的表现还算不错。但因为之前的金融危机,全球资本市场阴晴不定。海辉上市过程真可谓一波三折。
早在2008年6月,孙振耀就曾表示,海辉已经做好上市的准备,“只欠东风”。
此时,金融危机因美国的“两房危机”正愈演愈烈,海辉被迫推迟了上市计划。大连市副市长戴玉林曾透露,孙振耀曾与他长谈,坦承危机中上市必定流血,丧失企业价值,不如静待回暖,再争取一个好的发行价格。这一决定取得了大连政府的支持。
按兵不动的海辉开始不断补充加入高管,不断细化管理细节。此间,海辉分别在北京、无锡增设了运营中心、交付中心。
相关数据显示,2009年海辉软件盈利740万美元,今年第一季度,海辉软件净利润达到了300万美元,收入增至3050万美元,走上了增长的快车道。
2010年,海辉再度重启上市进程。原定计划上市时间在6月之前,此后数度调整,一度暂定在6月28日前后,此后又被调整到了7月7日前后。
事实上,2005—2008年,海辉软件的财务数据对资本市场而言,称得上亮点不足。在这4年问,海辉的净营收持续增长,分别约为1748万美元、3369万美元、6305万美元和1亿美元,但净利润方面,按照美国会计准则,海辉连续4年亏损。尤其是2006和2008年,亏损额均逾1000万美元。
对此,海辉软件给出的主要原因是,并购导致的资产减值计提。2006年4月,海辉软件又因与科森公司合并而失去一个主要客户,致使海辉遭受250万美元的资产减值。2008年也因不良资产和几个项目的销售利润不及预期而遭遇减值。
创始人离开
一个不为人所知的背景是,在海辉软件进入上市冲刺的关键时刻,52岁的创始人却离开了这个他苦心经营12年的企业。
李远明毕业于大连海事大学计算机专业,毕业后留校任教。1996年11月,李远明在大连海事大学内创建海辉软件公司,包括他在内的7个最初员工全部是海事大学的职工。
本刊记者了解到,海辉初期的投资为20万元,主要来自于香港的一个投资人,最初的股份比例如下:海事大学20%,李远明个人25%,投资方是55%。但是李很快把自己25%的股份全部无偿赠予海事大学,使得海辉的股权结构变成海事大学占45%,投资方占55%。
1998年,在海事大学的支持下,李远明和他的团队投入资金,这才开始真正持有公司的股份,总的持股比例在20%—30%之间。此后海辉分别在2004年和2006年获得过两轮投资,李远明及其创业团队的股份逐步稀释。
2007年,在李淡出海辉的同时,最初追随李的6名创业元老也全部离开了海辉。
对于李的离开,外界有各种猜测:其中一个版本是,其与投资方在战略决策上出现分歧。
受过日本企业文化熏陶的李远明,一直愿意做中日之间的业务,而目前海辉的格局却是将日本市场放到了次要地位,转而大力发展欧美和中国市场。
这个说法至今未得到李远明的认同。他表示,引入外来股东,当然会在理念上产生分歧,“但不是因为理念分歧,又没有了控制权,股东把我排挤出去了”,“而是自己不具备操作一个国际级大公司的能力”,主动让贤。
2008年3月,卸任中国惠普公司总裁后赋闲的孙振耀接任海辉集团董事长,后又任执行董事长。孙振耀就任时曾表示,选择海辉“非常重要的条件就是企业的创办人不在,因为创办人不在,我不是职业经理人,我是出题人”。
截至目前,海辉的CEO、CFO等要职均由后来加入的职业经理人担任。
不断稀释的股权
随着几轮投资人进入,海辉软件管理层的股权不断稀释。
截至上市,投资人共持有海辉逾70%的股份,其中GGV和IFC位居前二大股东,分别持有22.6%和119%;集富亚洲(JAFCO)和DFJ各持有8.2%;英特尔资本和GE Capital分别持有7.8%和7.2%。而公司管理层只持有55%。余下24.5%的股份为大连海事大学所有。
就在此次IPO之际,IFC、集富亚洲、英特尔资本、GE Capital和三菱等投资公司均有不同程度的套现。本次发行后,9家投资机构仍持股61%。
海辉也曾在内部出台股权激励政策。2010年2月,向董事会丰席孙振耀发行80万股普通股,并向其亲属发行120万股普通股,价格为0.30美元/股,但孙的这部分股票占比还不足1%。
在业界看来,海辉已经成为一个被众多投资人联合持股的公司,业界人士认为,VC们的最终目的是套现退出。甚至在孙振耀就任时,就被认为是为了海辉的海外上市而来的。
VC++中利用磁盘序列号加密软件 第4篇
作为软件开发者,谁都不希望看到自己辛辛苦苦编制的软件被盗版,虽然国家为了打击盗版和保护知识产权出台了一系列的相关法律法规,但仍有众多的地下盗版商在利益的驱使下置国法于不顾,对众多的软件进行非法复制、传播,所以身为软件开发者应加强自我保护意识、利用自身在编程方面的优势对自己编写的软件进行保护,防止其被盗版。本文针对这个问题提出了一种简便易行的对正版软件进行甄别的方法。
数据加密的基本思想是通过变换信息的表示形式来伪装需要保护的敏感信息,使非授权者不能了解被保护信息的内容[1]。那些需要隐藏的信息称为明文;伪装信息的操作称为加密;加密产生的结果称为密文;加密时使用的信息变换规则称为密码算法。目前,加密算法有很多,比如BlowFish、MD5、Secret16、AES、SHA、CRC32、RSA、DES、字符串加/解密、文件加/解密等,但这些算法都比较专业,对于非专业软件开发者来说很难掌握,而利用获取磁盘序列号进行简单运算后产生注册码的技术则比较简单实用。
1 设计思路与实现原理
本文采用一种通过对磁盘的序列号进行判别的方式简单而又可靠地保护软件不被非法传播。众所周知,在微软的操作系统中,对每一个磁盘都在其格式化时设置有一个随机的8字节长的序列号[2],虽然理论上有重复的可能,但实际上要找到两个相同的磁盘序列号是很困难的,根据概率论的知识可以算出遇到两个相同磁盘序列号的概率为0.00000000023283,即大约5亿多张磁盘中才会遇到相同的序列号,对我们来说这已经足够了。而且磁盘序列号也不会随着磁盘上的软件内容的拷贝而拷贝,所以我们在此把磁盘序列号作为唯一识别码应用于我们的软件中,可以用API函数GetVolumeInformation来很方便地获取磁盘的序列号[3],其原型声明如下:
在这里只需通过lpRootPathName来设置我们需要检测的磁盘驱动器号,执行后结果保存在lpVolumeSerialNumber中,其它参数我们不关心,均设为空(NULL)。
为避免让人一眼看出本ID即为硬盘系列号,可再对获得的序列号进行一定的变换,本文中让得到的序列号与0x12345678进行按位异或运算,运算的结果作为本软件的机器码[4]。
当用户输入注册信息(注册码)后,我们可将其写入注册表、INI配置文件或其它任一文件中,以便软件进行验证时可读入这些信息,本文将此注册码写入名为key.txt的文件中。
此加密法流程如图1所示。
2 程序的具体实现
利用VC++中的MFC AppWizard创建一个名为kangnian的基于对话框的应用程序,在其初始化函数InitInstance()中添加如下代码:
在添加以上代码中的同时,新建一个用于进行验证登陆的对话框,类名CLoginDialog,其对话框界面如图2所示。程序开始运行时,首先检查注册码文件key.txt是否存在,如果不存在或key.txt中的注册码不正确,则弹出图2所示的注册登陆框,这个登陆框中的机器码是程序一开始运行时自动读取的磁盘序列号并经过简单变换后的数字。如果顾客输入正确的注册码则程序可正常运行,同时将正确的注册码写入key.txt文件中,使下次运行程序时不再进行注册;如果注册码不正确,则销毁主程序窗口,程序退出运行。
用户在第一次运行时将产生的机器码发给软件开发者,软件开发者利用自己掌握的含有解密算法的解密端软件,其界面如图3所示,生成注册码,发给用户,用户利用此注册码,方可正确注册从而正常运行软件。
比如,用户得到的注册码为3324433973,用户将此号通过E-mail或其它方式发给软件开发者,软件开发者通过解密端软件得到注册号3753868461,并把此号回馈给用户,用户即可注册软件。
3 结束语
本文设计的利用磁盘序列号的软件加密法,通过提取用户计算机中具有唯一性的磁盘序列号,生成注册码,实现了一台计算机一个注册码,同时采用加密算法,保证了注册码的安全性,解密难度大,可有效防止非法用户,而且实现容易,几乎不需要额外的成本,尤其对非专业的软件开发者非常容易掌握并运用。
本程序在Windows XP Professional下,由Microsof Visual C++6.0编译调试通过。
参考文献
[1]胡长年.DES加密技术及VC++的程序实现[J].化工时代,2004,18(8):54-55.
[2]庞启宁.一种基于注册码的软件加密算法[J].通信与广播电视,2008(2):16-19.
[3]田文奇,蒋更红.基于注册码的软件加密方法[J].浙江交通职业技术学院学报,2004,5(1):51-54.
VC++软件 第5篇
随着我国经济的发展,作为国家经济命脉的公路运输量也急剧增加,而超重车辆所占的比例也与日俱增,这已对交通安全和公路寿命造成了严重威胁。在此情况下,由于传统的静态称重存在效率低,占地面积大,移动不方便等缺点[1],已不能满足发展的需要。于是车辆行驶称重技术(Weigh in Motion,WIM)[2]作为一种智能称重技术已得到了广泛研究和迅速发展。动态称重系统研发面临的主要问题是怎样在保持高精度的情况下,提高车辆通过的速度并降低成本。解决方法有两个,一是引进国外成套设备;二是自主研发。其中,引进国外设备,因价格昂贵,维护不便等诸多因素,不能广泛应用;国内对于动态称重系统的研究和生产较国外稍晚,但发展迅速并日趋成熟。目前,国内较为流行的是轴重测量,即分别测出车辆各轴的轴重,再由称重系统计算出整车重量[3]。整个系统由传感器、数据采集卡、应用软件、数据库系统以及微处理器、LCD和打印机等组成。本文针对动态称重系统中数据采集、分析、处理、显示、保存等环节的特点,采用面向对象的设计思想,在VC++平台下研发动态称重系统应用软件,该软件具有实用性、可复用性、易扩充及易维护等特点。
1 误差分析及处理
动态称重系统的误差来源包括动态因素和静态因素。动态因素主要有汽车自身的振动、称重区路面的不平整,汽车经过此区的速度及加速度。静态因素主要体现在客观环境的变化和硬件自身问题,如:当时系统所处温度、传感器是否运行良好,模/数转换的分辨率等。
误差的来源决定误差的处理方式。一方面通过对检测硬件条件和检测方式的设定避免产生不必要的误差,另一方面通过良好的数据处理方法提高软件处理数据的精度,目前主要有以下几种方法:ADV法、DV法、V法、位移积分法、补偿法、专家系统、参数估计法、神经网络。在动态称重系统中滤波方法主要有:有限幅滤波、中值滤波、算术平均值、滑动平均、加权平均滤波、复合滤波等方法[4]。本软件采用滑动加权平均滤波,即设一个数据缓冲区依顺序存放N次采样数据,每采进一个新数据,就将最先采集的数据丢掉,而后求包括新数据在内的N个数据的加权平均值,便得到该次采样的有效数据。
undefined
其中:
undefined
式中:undefined为第n次采样经滤波后的输出;Xn-i为未经滤波的第n-i次采样值;N为滑动平均项数;Ci为加权。
2 应用软件的整体设计
2.1 系统结构与主要模块
本系统基于C/S三层架构,用户接口层采用友好的GUI界面,主要是用户相关操作的实现以及数据显示;业务逻辑层进行模块化的设计,包括参数设置、数据采集、传输和处理;数据库服务器层对数据库的操作进行封装,主要完成数据的保存与维护。整个软件功能模块图如图1所示,包含了数据传输、数据处理、输入/输出、数据显示等四大模块。以信号的处理与显示为核心,信号的流向如图2所示,首先在称重区不断得到重力传感器所采集的电压信号,进行滤波、放大、A/D转换,并将所采集的数据根据上位机系统初始化形式,以串口或者网络通信的方式传输,上位机对所接收的数据进行判断后,予以滤波、运算、存储、显示,并将所得出的结果以委决书或发票回馈于车主。
2.2 类图
通过此类图完整显示本汽车动态称重系统软件的内部静态结构,如图3所示。其中,CDatabase,CDispose,CDisplay,CTransport,CPrint,CQuery,CMotionLine,CStaticLine分别表示数据库连接类、数据处理类、数据显示类、通信类、报表打印类、查询类、动态曲线和静态曲线类。数据处理类对数据传输类具有依赖性。
3 软件实现
3.1 传输实现
工控系统的数据通信一般以串口为主,但由于串口通信只能用于短距离通信,网络通信也得到了一定的应用。本系统在通用性的前提下实现串口和网络通信两种方式。考虑到汽车动态称重系统对数据的实时性、可靠性要求,通过对通信类采用多线程封装,实现主动发送串口和网络监听的实时数据采集,提高实时数据传输效率。用到的线程函数有两个,一个是监听线程函数UINT ListenThread(LPVOID pParam),另一个是读数据线程UINT ReadTread(LPVOID pParam)。由于本系统对同一串口的不同时读写,所以不存在同步操作,监听线程在后台通过对WaitCommEvent事件的监听调用,读取线程完成下位机数据的接收。
3.2 数据处理实现
由于动态称重过程中存在大量的动态干扰因素,易造成传输模块所传数据存在较大误差,所以首先选择算法对接收数据滤波进行预处理,然后进行标度转换。数值计算求出轴重,而滤波是这部分的核心,下面给出加权滑动平均滤波的主要实现代码:
3.3 数据显示
显示模块主要完成三方面内容:采集所得实时数据的动态曲线显示,经过处理后数据的静态曲线显示及整个软件的界面显示。动态曲线和静态曲线分别继承类CDisplay,该类以虚函数的形式只提供接口,并未具体实现;子类在继承后根据自己的实际情况分别实现。显示类的设计如下:
通过对CDrawItem类的封装使软件界面的显示以Windows系统为标准,坚持置用户与控制之下,减少用户记忆负担,保持界面一致的原则。
3.4 数据库类的设计
完成数据传输、处理以后,要对所得数据进行存储,以便查询、统计。通过对数据库访问技术的比较发现,ADO数据库访问技术具有易于使用,速度快,内存支出少等优点。本系统选择以MFC为基础,对其三个主要对象Connection,Command,Recordset的属性和方法进行封装,并命名为CWimDataBase类。在任何要用到数据库操作之处只需加入其头文件“CWimDataBase.h” 并声明对象,则调用其公共属性和方法即可进行数据库操作。
如:利用mWimDb对象调用函数ConnectDb连接数据库。
4 结 语
针对目前主流动态称重系统硬件结构以及数据处理过程的特征,本应用软件采用面向对象的程序设计方法进行设计并予以实现,充分利用了面向对象中的继承、封装及多态等特点,实现了软件的模块化,达到了模块之间高内聚、低耦合。应用测试表明,该软件具有实用性、可复用性、易扩充、易维护且界面友好,符合实际的应用需要。
参考文献
[1]James Gstrathman.The Oregon DOT Slow-speed Weigh-in-motion(SWI M)Project[R].Final Report,1998.
[2]凌杰.公路动态称重系统的设计理论研究[D].西安:长安大学,2001.
[3]Cebon D.Weigh-in-Motion of Axles and Vehicles for Europe(WAVE),General Report[R].European Commission DGⅦ-Transport,2001.
[4]汪兆栋,李霆,黄日辉,等.动态称重系统的试验数据采集与处理方法[J].科技信息,2008(9):10-11.
[5]胡小弟,孙立军.重型货车轮胎接地压力分布实测[J].同济大学学报:自然科学版,2005,33(11):1 443-1 448.
[6]张慧鹏,师帅兵,张晓娟.车辆非线性悬架系统动态特性[J].拖拉机与农用运输车,2007,34(2):58-59.
[7]孙宇,丁彦闯,兆文忠.便携式机车车辆动态称重仪的研制[J].铁道技术监督,2006,15(6):827-829.
[8]王锦芳.动态称重系统的研究与开发[D].杭州:浙江大学,2006.
[9]张波,邓铁六,巩华良,等.公路动态汽车称重物理模型与提高称重准确度研究[J].山东交通科技,2007(3):10-14.
VC++软件 第6篇
本教学软件是基于VC++6.0设计一个数据结构课程的动态演示系统,包括描述顺序表的存储结构的概念,顺序表的操作过程,描述单链表存储结构的概念,单链表的操作过程,入栈、出栈的过程,入队列、出队列的过程,串的操作过程,串的模式匹配过程,二叉树的遍历过程,图的遍历过程,最小生成树算法的演示过程,排序算法的演示过程,查找算法的演示过程。
现就针对单链表的部分教学内容的动态演示的设计过程予以说明。
单链表存储结构的功能是描述单链表的存储结构、单链表的表示方法、单链表的存储结构示意图。采用消息响应函数OnLinkertablestruct()实现。
1 前插法建立单链表的动态演示
其功能是动态演示用户输入的数据串序列建立单链表的过程。单链表的创建算法是首先创建头指针h和头节点head,插入节点时,使扫描指针p指向插入位置的前一个结点,然后为要插入的结点开辟存储空间,使指针q指向这个结点,将要插入的数据元素x插入到q指针指向结点的数据域(即qdate=x),将待插入数据元素位置的前一个结点的指针域赋给待插数据元素位置结点的指针域(即qnext=pnext),断开待插位置前一结点的指针域,使其指向待插入的结点(即pnext=q)。
其绘图算法是在x轴等于100, y轴等于100的地方绘制一个矩形,使其做为头结点,在x轴等于等于600, y轴等于240的地方绘制一个矩形,使其做为插入的第一个结点,然后每新增加一个结点x轴坐标减130, y轴坐标不变。采用消息响应函数:OnCreatlinkertable(),实现过程是在创建链表过程中连接两个结点,需要用画线折线的函数BOOL Polyline (LPPOINT lpPoints, int n Count),这个函数用来画一条折线。其中lpPoints参数是指向折线顶点的数组指针,nCount参数是指定折线顶点数组中的顶点数。
2 向单链表中插入数据演示
其功能是动态演示在单链表中插入一个数据元素的全过程。由用户输入一串单链表数据,输入一个插入位置,输入一个想要插入的数据元素,该系统会自动将要插入位置的指针断开,将要插入的数据元素插入到链表中。体现了两种算法:
1)向链表中插入数据元素的算法:要在带头节点的单链表数据元素ai (i大于等于0且小于链表的数据元素的个数)结点前插入一个存放数据元素x的结点,首先要在单链表中寻找到存放数据元素ai-1的结点并由指针p指示,然后动态申请一个结点存储空间并由指针q指示,并把数据元素x的值赋予新结点的数据元素域(即qdata=x),最后修改新结点的指针域指向数据元素ai结点(qnext=pnext),并修改数据元素ai-1结点的指针域指向新结点q(即pnext=q)。
2)绘图算法:在x轴等于50, y轴等于160的位置画一个矩形,使其作为头结点。以后每隔50个像素画一个矩形做为链表的元素,直到矩形的个数等于链表数据元素的个数。待插结点的x轴坐标是以插入位置结点x轴坐标作为基准的,y轴坐标为260。
采用消息响应函数OnLinkertableinsert()实现功能。
3 从单链表中删除数据演示
其功能是用户输入要删除的位置,系统就会将要删除位置的结点从链表中去掉。由两种算法体现:
1)从链表中删除数据元素的算法:要在带头结点的单链表中删除数据元素ai结点,首先需要在单链表中寻找到存放数据元素ai-1的结点并由指针p指示,然后让指针s指向数据元素ai结点(即s=pnext)并把数据元素ai的值赋予x(即x=sdate),最后删除数据元素ai结点(pnext=pnextnext),并动态释放数据元素ai结点的存储空间。
2)绘图算法:从x轴坐标为50, y轴坐标为160的地方每隔50个像素依次绘制一个矩形,直到矩形个数等于链表元素个数加1,链表绘制完成。动态演示删除过程时,用红色笔画线将待删元素位置的前一个矩形和待删元素位置的后一个矩形连接起来,再用白色笔画线将原来待删位置与前一矩形之间的连线和待删位置与后一矩形之间的连线用白色笔重绘。
采用消息响应函数OnLinkertabledelete()实现功能。
摘要:该动态演示系统利用VC++开发平台, 设计了数据结构课程的顺序表的存储结构、顺序表的操作过程、单链表的存储结构、单链表的操作过程、入栈、出栈的过程、入队列、出队列的过程、串的操作过程、二叉树的遍历过程、图的遍历过程、最小生成树的产生过程、排序过程、查找过程等内容的教学演示软件。本文主要对前插法建立单链表、从单链表中删除数据、向单链表中插入数据的算法和设计进行了说明。
VC++软件 第7篇
自朗科公司1999年发明了全球第一款闪存盘即U盘以来, 这种以Flash为存储介质, 具有USB接口的移动存储盘, 给我们的工作和生活带来了极大的便利, 并且由于其体积小、价格低、容量大等优势, 迅速成为最主流的移动存储介质。但是随着2003年国内首例通过U盘传播的病毒Worm/Unfair的出现[1], 众多病毒纷纷开始把U盘作为主要传播途径。尽管部分局域网通过专门的保密系统以及对U盘进行注册使用在一定程度上防止了病毒的蔓延, 但局域网内部一旦感染病毒, 那么专用U盘又将形同虚设;此外专用保密系统及注册U盘的安装和使用手续相对烦琐, 造成U盘使用的种种不便。因此如何在符合一定条件下, 通过一种较为简单的方法来确保U盘在电脑间的安全使用就显得很有必要。
2 U盘的系统结构及安全隐患
当前, 无驱化、USB2.0的传输协议以及大容量已经成为U盘的基本配置。一方面由于U盘给工作和生活带来的便利使其大量普及;另一方面, 以Autorun病毒、摆渡技术等为特点的新型病毒和攻击手段又给U盘的使用带来极大的安全隐患。
2.1 U盘的硬件及系统结构
要分析U盘的安全隐患, 首先应该对其硬件和系统结构进行相应的分析。U盘硬件主要由3大部件构成[2,3]:存储芯片、控制芯片和USB接口。其中控制芯片是U盘的核心部件, U盘的读写速度、性能和功能均由控制芯片来提供, 类似与电脑的CPU。控制器通过I/O总线与U盘硬件连接, 根据通信协议, 实现与主机 (PC机) 之间的数据和命令传输, 此外还需根据主机的命令对U盘进行读写操作, 实现逻辑扇区和物理扇区间的转换以及错误数据校正等操作。存储芯片主要用来存储信息, 具有可重写、掉电后保存数据等特点。
U盘的系统构成主要涉及两个方面[4]。其一, 在通信方面采用的是USB接口协议, 其通信协议结构如图1所示。左边是主机驱动程序结构, 顶层API提供给用户访问存储设备的方法;中间UFI驱动层将应用程序的访问转换成UFI数据命令格式, 与外部存储设备进行命令、状态以及数据交换, 然后进行端点数据配置;底层是USB传输驱动, 负责将上层UFI数据发送到USB总线上以及接收从存储设备返回的状态/数据信息。右边是U盘的固件功能结构。总线接口上面的处理层与主机之间进行通讯, 将主机的命令或数据传递到UFI命令处理层, 并将其状态或数据信息返回到主机, 且处理传输过程中的错误。UFI命令处理层负责对主机的UFI命令进行处理, 并将结果返回给主机。存储介质接口提供与介质连接的方法, 负责将接收到的UFI命令或数据信息转换成具体的物理信号发送到介质。U S B (Universal Serial Bus) 通用串行总线是一种快速、灵活的总线接口, 其最大特点是易于使用。作为一种高速总线接口, U S B适用于多种设备, 同时还支持热插拔, 并且所有的配置过程都由系统自动完成, 无需用户干预。此外, USB接口支持高速读写, 目前通用的USB 2.0规范支持的理论数据传输速率高达480Mb/s。其二, 在存储类 (Mass Storage Class) 协议及构成方面, 作为存储磁盘, 要能被操作系统识别为, 则需要设置成磁盘结构和文件系统, 当前, 市场上主流的U盘容量已经达到8G字节甚至更大。
2.2 U盘的安全隐患
由于U盘采用USB接口协议, 其无驱化的特点使得病毒能通过U盘迅速在各种具有USB接口的载体与平台间传播, 加上大多数人在使用U盘进行数据交互时往往不能做到事先进行病毒扫描, 导致病毒交叉感染的几率极高。正因为如此, 近年来, 各种重大病毒正越来越把U盘当作其主要的传播途径之一。2007年, 臭名昭著的“熊猫烧香”即是如此。随着U盘病毒的泛滥, 杀毒软件针对U盘病毒的处理也随之升级。尽管对抗U盘病毒的措施层出不穷, 甚至有不少U盘病毒的专杀软件, 但是相对病毒本身而言, 杀毒软件均属于病毒出现后的补救措施, 新病毒的不断出现使杀毒软件疲于应付, 且效果不佳。同样, 部分保密系统及注册U盘由于增加了对相关设备的注册和授权使用, 在一定程度上防止了非注册设备间的交叉感染的概率, 但是一旦局域网内部感染了病毒, 那么注册后的U盘也就将再次沦为病毒的传播载体。显然, U盘在给我们工作和生活带来便利的同时, 也不可避免地给安全带来较大的隐患, 因此, 如何在符合一定条件的情况下安全地使用U盘值得研究。
3 U盘保密软件的设计思想及实现
3.1 U盘保密软件的设计思想
对于U盘来说, 从病毒的发作和查杀过程来看, 其最大的特点之一就是滞后性, 即永远都是各类型新病毒出现以后, 相应的杀毒软件和防护措施才可能出现。这种固有的滞后性恰恰给U盘使用者不可避免地带来染毒风险和安全隐患。本软件的设计思想是:采用“非接触式”的病毒查杀方式, 即不考虑病毒本身, 而是把所有病毒都当作一个不明内容的且有一定大小的文件。同时考虑到大多数情况下病毒传播的过程是将已经感染病毒的U盘通过对其它计算机的插入而将病毒侵入该计算机, 针对这种情况, 软件利用数据单向传输的思想, 即在不明U盘接入计算机时, 只允许数据从计算机流入U盘, 而不允许不明U盘的数据流入计算机;即对不明U盘, 只允许没有携带任何内容的空U盘插入计算机进行数据的复制, 以此确保新插入的U盘不能携带病毒, 从而保证与不明U盘进行数据交互的计算机的安全。具体来说, 针对U盘病毒查杀的固有滞后性, 本软件对插入电脑的不明U盘, 对其采取使用前先行检测的方法, 在计算机对其进行正常硬件驱动的时候, 通过Windows底层API函数截获其相关信息, 先行判断, 判断符合条件后才予以放行, 否则直接强制退出该盘, 同时对用户给出相关提示信息。具体操作为:软件运行后, 实时侦听计算机的各U S B接口, 一旦有U盘接入, 则立即对其进行检测, 检测时不去判断该U盘是否染毒, 而是判断该U盘是否为空盘, 以达到从源头上切除U盘病毒传输的路径。如果为空盘, 则进行登记并放行, 然后正常使用;如果该U盘非空, 即盘内有任何内容的话, 则通过Windows的底层API函数强制将该U盘退出, 同时进行相关的提示。其流程图如图2所示。
3.2 具体实现
本软件采用VC++6.0作为开发平台。本软件的开发主要利用该平台提供的大量直接与Windows底层接口进行通信的库函数。选定软件开发平台后, 在软件与设备进行通信前, 还应该进一步明确以下三点:
(1) 设备必须与计算机总线连接上;
(2) 计算机操作系统必须能够列举该设备, 以确保该设备的正常驱动;
(3) 该应用程序必须实时获取一个确认设备以及能与该设备通信的句柄。明确上述三点后, 根据我们的设计思想和需求分析, 建立一个基于对话框类的可执行程序。该软件首先要实现对新插入计算机的U盘进行实时监测。同时实现对新插入计算机的U盘进行即时处理。U盘一旦插入计算机的USB接口, 如果该USB接口没有硬件故障的话, 就可以完成U盘和计算机的总线设备连接。总线连接完成后, 计算机操作系统对插入的U盘进行驱动。两者按照USB协议进行适当通信。当操作系统接到设备连接的通知时, Windows会自动处理列举。Windows会把获得的描述与其INF文件中的信息进行比较, 以此识别出适合的驱动。识别完成后, 便开始为设备寻找相应的句柄。句柄是Windows分配给设备的一个独立的标识符。应用程序主要通过调用带有一个能识别设备符号连接的CreateFile类的API函数来获得这个句柄。
当U盘通过USB接口插入计算机并完成正常的驱动后, 该软件能立即监测到有插入USB端口的新设备被驱动, 然后软件随即对接入计算机的该USB端口的设备按照已设定的要求进行判断和识别。具体操作步骤是:首先通过VC提供的库函数GetDriveType () 获取新接入USB端口设备的驱动类型, 然后对获取的该驱动类型的返回值进行判断, 如果该驱动类型为DRIVE_REMO-VABLE, 即认为新接入计算机USB端口的设备为U盘。一旦新插入USB端口的设备类型被判断为U盘后, 则立即对其进行进一步检测。根据软件的设计思想, 我们只允许无任何内容的不明空U盘插入计算机, 软件采取的判断准则主要是判断新插入的U盘是否为空。具体实现是通过VC函数库中的FILE类函数GetStatus () 来判断, 通过对该函数进行适当的参数设置, 则可以获取U盘内容的相关信息。进一步监测的原则是:如果检测出新插入USB端口的U盘为空, 则认为该U盘安全, 同时对该U盘进行标识并允许其正常运行, 与此同时, 软件后台继续实现对其他USB端口的监测, 需要注意的是, 一旦从某个已经检测过的USB端口插入的U盘从计算机拔除, 则立即对已标识的该端口进行清零处理, 防止不同时刻从同一个USB端口插入的不同U盘被误认为是同一个U盘。如果判断出该插入的U盘非空, 即盘内有任何文件存在的话, 则立即先行强制退出该U盘, 同时提示用户该U盘存在安全隐患, 不能正常使用。U盘的强制退出主要通过Windows底层函数lockvolume () 与dismountvolume () 等函数来实现。
本软件在设计和实现过程中, 反复进行需求分析的调整, 经过调试, 实现了设计初衷。软件运行后, 可以确保不明U盘接入计算机时不能通过类似摆渡的技术将病毒倾入计算机。同时由于软件内部对某一时刻接入的U盘进行了必要的记录和注册, 这样可以确保符合条件的U盘插入计算机时的正常使用。本软件既可以开机即运行, 也可以根据需求由用户确定使用和结束的时机, 比起保密系统而言, 在确保计算机安全的前提下, 省略了其注册和授权等手续, 使用更为便捷。
4 结束语
U盘的安全隐患已经越来越多地得到大家的重视, 文章针对病毒查杀的滞后性, 提出了一种新的“非接触式”的病毒防范思想, 配合数据单向传输的理念, 就U盘和操作系统间的安全使用进行了一定的探讨, 并基于VC设计和实现了一款U盘保密软件。经实际测试, 设计的该软件使用较为简便, 对于U盘病毒的传播具有一定的防范功能。尽管该软件具有一定的局限性, 但是从设计思想和实际效果来看, 可以更好地防范U盘病毒的传播。
摘要:U盘作为灵活的移动存储载体, 广泛运用于各种终端间的数据传输。但普通U盘本身的安全性很难得到保障, 容易成为病毒的载体, 甚至导致不同程度的泄密。本文结合数据单向传输的特点, 针对病毒查杀的滞后性, 基于VC平台, 设计并实现了一种U盘保密软件, 可以在一定条件下保障U盘在电脑间传输数据时的安全性。
关键词:U盘,保密软件,实现
参考文献
[1]多管齐下, U盘从此高枕无忧[J].电脑知识与技术, 2008, (3) :10-12.
[2]闪存盘结构分析及其扩展功能应用研究[D].大连海事大学硕士学位论文, 2004:12-15.
[3]闪存驱动与管理技术研究[D].华中科技大学硕士学位论文, 2004:19-21.
VC++软件 第8篇
电子白板是一个较新的产品,它是汇集了尖端电子技术、软件技术等多种高科技手段而研发的高新技术产品,它通过运用电磁感应原理,可以结合计算机和投影机,实现无纸化办公及教学。在其软件设计方面,希望把已经显示的操作结果永久保存下来,以便于以后随时进行编辑打印等操作。目前国内外所开发的电子白板软件对其结果保存时一般是直接保存为位图文件或者简单的文本格式,但这样只能进行简单的浏览,不能够进行编辑和修改,而我们则是希望利用一些可视化开发工具来开发一种通用的保存格式来满足其保存功能的需要。Word作为当今使用最为普遍的Office组件得到了人们的青睐,具有所见即所得、对象的链接与嵌入、使用广泛等特点,但由于Word文件的格式是从来没有公开过的一种专利文件,想直接从它的二进制代码中分析出文件的各种信息是不太可能的,所以我们需要利用OLE技术调用Word文档的接口来对其进行操作。本文基于VC++6.0开发环境,首先采用MFC[1]框架实现了电子白板软件的基本功能,然后利用OLE技术将程序的最终运行结果保存到Word文档之中。
1电子白板软件基本功能实现
在VC++6.0环境下,新建一个基于MFC[1]的单文档应用程序来实现电子白板软件所需的基本功能,其基本界面主要包括工具栏、菜单栏和画图区。要实现的基本功能包括:直线、矩形、椭圆、曲线、多边形、弧形等基本图形的绘制,同时可以选取画笔的颜色和线型、磁盘上图像的显示和保存等。
对所要绘制的基本图形和磁盘上图像的显示分别赋予ID号,并利用类向导[2]为其建立相对应的命令响应函数[3]。表1以几个主要功能为例列出其对应的ID号和命令响应函数。
2Word保存格式实现
2.1OLE技术
OLE[4]全称为对象连接与嵌入,不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”彼此进行“连接”的机制,即允许一个应用程序通过编程控制另一个应用程序“自愿”提供其功能。OLE是以COM技术为基础的,其技术的焦点集中在解决桌面环境中应用程序之间如何进行交互,包括数据交换和界面交互。利用COM的优势,OLE已经实现了这些目标。COM是由微软提出的组件标准,主要应用于Microsoft Windows操作系统平台上,它不仅定义了程序直接进行交互的标准,并且也提供了组件程序运行所需要的环境。因为COM规范的定义是依赖于二进制代码的规范,所以它不依赖于特定的语言,只要能生成规范的可执行代码,就可以用来开发COM。COM的基本单元是COM对象,COM程序之间的通信也是通过其完成。一个组件程序可以包括一个或者多个COM对象,一个COM对象可以实现一个或多个接口。在一个COM模型中,对象通过接口及接口中的函数为客户提供服务,对于客户来说它只需通过接口就可以实现其所需的功能,而不用考虑其内部的具体构造。
在Windows程序开发中,自身暴露一些可编程对象给其他程序的应用程序叫自动化服务器,利用并操纵自动化服务器提供功能的应用程序叫自动化客户或自动化控制器。在VC++6.0环境下通过编程创建并编辑一个Word文档,这里的VC就是自动化控制器,而创建Word文档的程序则是自动化服务器。利用自动化技术可以实现软件的一次开发和多次利用。
2.2具体实现
在完成电子白板软件基本功能后,将所操作的程序实时结果保存到Word文档中,主要通过以下五个步骤来实现:
(1) 要调用Word提供的OLE[5]自动化对象,应先在所建立的应用程序中添加所需的类型库文件。常用的Office2003版本对应的类型库文件如表2所示。
因为本文中使用的是Word2003,所以该类型库文件为MSWord.olb,默认所在路径[5]为C:Program FilesMicrosoftOfficeOFFICE11MSWord.olb,在VC++6.0环境中利用菜单项中的查看->建立类向导->AddClass->From a type library来添加上述的类型库文件。在添加的过程中有好多类需要选取,其对应的就是Word中的OLE对象,主要有:Application对象、Document对象、Range 对象、Selection 对象、Bookmark对象,根据要实现的不同功能来选取添加不同的对象。
(2) 完成类型库文件的添加后,为了使用该类库,要先对其接口进行初始化[6]。即在App对应的InitInstance()函数中对其初始化:
(3) 利用上述已经定义的基本Word对象来创建Word服务与连接。首先创建一个Word应用程序,然后利用文档类的对象打开Word文件进行操作。主要实现代码如下:
(4) 为将电子白板软件的运行结果保存到Word文档之中,先截取当前软件运行结果的画面保存为BMP格式[7]的位图,然后将已保存的位图插入到当前新建的Word文档之中。截取程序运行结果流程如图1所示。
完成截取的操作后,返回一个指向该位图[8]的句柄,要将该位图插入到Word文档之中,需要先找到Word文档中光标所在的位置,采用书签定位并结合光标跟随的方法(默认情况下光标停留在第一个字符之前),实现图片的精确插入[9]。主要实现代码如下:
将程序运行结果与保存到Word文档中实现效果进行对比,如图2所示。
(5) 完成将图片添加到Word文档之后,需要将所完成的文件进行保存,并对所用到的资源进行释放,即关闭Word的连接,否则会导致程序运行错误[10]。主要实现代码如下:
3结语
本文首先在VC++6.0环境下开发设计了一个电子白板软件,并实现了其基本功能,然后在分析OLE技术的基础之上,通过调用Word应用程序所提供的相关对象,实现了将软件运行结果保存到Word文档之中,改变了以往保存格式单一性、不便于修改和分析的缺点。鉴于Word文档使用的广泛性,本文的保存方法的实现应该有比较广阔的应用前景。
参考文献
[1]候俊杰.深入浅出MFC[M].武汉:华中科技大学出版社,2001.
[2]沈显勇,杨进才,张勇.C++语言程序设计[M].2版.北京:清华大学出版社,2010.
[3]李博轩.Visual C++6.0图形用户界面开发指南[M].北京:清华大学出版社,2000.
[4]孙鑫,余安萍.VC++深入详解[M].北京:电子工业出版社,2011.
[5]王义轩.基于字符特征的半易碎文档水印算法研究[D].陕西:西安科技大学,2007.
[6]严诚.基于COM的自动阅卷系统的设计与实现[D].江苏:江苏大学,2007.
[7]张河,杨璐珍.基于VC++6.0的BMP图像显示[J].计算机与网络,2010(32):242-243.
[8]韩英.一种基于BMP图片的显示方法[J].仪表技术,2011(2):61-62.
[9]阮秋琦.数字图像处理基础[M].北京:清华大学出版社,2009.
VC++软件 第9篇
机翼与机身的对接主要是实现机翼与中央翼盒的对合, 是飞机装配的一个重要环节。传统意义上的飞机翼身对接过程, 使用复杂的固定对接平台以保证机翼和机身能准确地定位在对接站位上。为了保证品质, 要耗费大量的时间和费用定期检查校准平台, 这种固定式平台通常也只适用于特定的机型和特定的理论形状, 一般依靠人工进行装配, 效率低且精度难以保证[1]。
飞机翼身自动对接系统是以数字化、自动化装配技术为核心, 运用数字化测量、柔性支撑定位、机械传动装置协同控制等先进技术, 实现飞机机翼与机身精确、快速对接的一种新兴的工艺装备。与传统的固定式对接平台相比, 飞机翼身自动对接系统具有如下的优势:对接精度大幅提高;对接自动化, 效率高;能够适应不同的飞机型号, 通用性强;节省大量对接工装费用[2]。飞机翼身自动对接系统的性能好坏, 除与数字化测量设备、机械定位装置等硬件的精度有关外, 还取决于系统控制软件的性能[3]。飞机翼身自动对接系统控制软件主要负责与数字化测量设备和机械传动装置的接口管理、机身与机翼的位姿解算, 对接过程控制与状态监控、控制信号的生成与输出、相关数据的处理与显示等, 是飞机翼身自动对接系统的一个重要组成部分。
1 对接系统组成与工作原理
飞机翼身自动对接系统主要由计算机控制的机械传动装置 (支撑定位器) 、数字化测量设备、控制系统组成 (图1) 。
1) 机械传动装置
机械传动装置是指若干个安装有伺服电动机的高精度柔性支撑定位器, 每个定位器都有3个空间平移自由度 (沿x/y/z轴) , 是实现飞机翼身自动对接的末端执行单元。通过多个定位器协调运动可实现机身、机翼空间位姿的调整进而实现翼身对接。
2) 测量系统
测量系统由数字化测量设备, 这里指激光跟踪仪和配套的控制箱以及光学靶球构成。激光跟踪测量仪可对光学目标进行跟踪并实时测量运动目标的空间三维坐标, 具有安装快捷、操作简便、实时扫描测量、测量精度及效率高等优点。测量系统实现对机身与机翼上定位基准点的实时测量以及对测量结果的处理与保存。通过多个激光跟踪仪构建测量场, 可实现大尺寸、大范围与高精度的测量[4]。
3) 控制系统
控制系统包括运动控制器、伺服驱动器和系统控制软件, 运动控制器与伺服驱动器实现对机械传动装置的数字控制, 系统控制软件实现对运动控制器的接口管理、与测量系统的通信、机身与机翼的位姿解算, 翼身对接过程的控制以及相关数据的处理与显示。
系统的工作原理是:在机身与机翼的定位基准点上安装光学靶球, 由激光跟踪测量仪进行测量, 获得机身与机翼上定位基准点的空间位置坐标, 通过相关的调姿算法, 得到机身与机翼当前的空间位姿, 与其理论位姿进行比对处理, 得到其装配位置的修正值并转换为各支撑定位器所需的位移量, 结合运动轨迹优化算法, 驱动机械传动装置调整机身与机翼的位姿, 以调整定位基准点的位置, 直到机身与机翼都到达公差范围内的准确位置, 实现机翼与机身的精确对接。
2 系统控制软件设计与模块划分
2.1 系统控制软件控制流程设计
机翼与机身的对接过程依次为:机械传动装置复位, 机身位姿测量, 机身姿态与位置调整, 机身锁死, 机翼位姿测量, 机翼姿态与位置调整, 翼身对合, 对接品质检查等。根据机翼与机身的对接过程设计系统控制软件的控制流程 (图2) 。
2.2 系统控制软件功能与模块划分
系统控制软件主要实现以下功能:与数字化测量设备和机械传动装置的接口管理、机械传动装置以及机身与机翼的初始定位、定位基准点坐标的实时采集、机身与机翼的位姿解算、机械传动装置控制信号的生成与输出、对接过程控制与状态监控、对接过程的可视化仿真、相关数据的处理与显示等。按照上述功能要求, 系统控制软件分为接口管理、基准点测量、调姿前处理、机身调姿、机翼调姿、翼身对合、运动控制、可视化仿真以及数据处理等模块 (图3) 。
1) 接口管理模块, 实现与激光跟踪仪和运动控制器通信连接, 测量命令和运动控制命令的下达, 定位基准点位置信息以及运动控制器反馈数据的接收等。
2) 基准点测量模块, 生成测量命令, 进行定位基准点位置信息的实时采集。采集得到的是测量点在激光跟踪仪坐标系的局部坐标, 需要先经过一定的拟合算法转换为在整个对接环境下的全局坐标。
3) 调姿前处理模块, 完成激光跟踪仪的初始设置, 实现机械传动装置以及机身与机翼的初始定位。
4) 机身/机翼调姿模块, 该模块是整个系统控制软件的核心模块, 主要实现的功能是通过测量获得的机身/机翼上定位基准点的空间坐标, 依据机身/机翼位姿解算算法, 求解出机身/机翼当前状态下的位姿, 通过与理论位姿 (目标位姿) 比对得到位姿差值, 并据此解算出消除位姿差值各支撑定位器所需的位移量。
5) 翼身对合模块, 在机身与机翼位姿调整完成后, 通过机翼位置调整, 实现机翼与机身的最终对合。
6) 运动控制模块, 生成运动控制命令, 协同控制各支撑定位器运动, 实现机身或机翼的位姿调整。
7) 可视化仿真模块, 构建虚拟对接场景, 以优化过的定位器运动轨迹为驱动, 将飞机翼身对接过程实时模拟在软件窗口中, 同时显示操作人员关心的若干关键数据, 以直观图形的形式指导操作人员工作。
8) 数据处理模块, 维护对接过程中用到的标准数据如装配基准和机身/机翼理论位姿等, 实时保存对接过程中的一些关键数据, 提供报表等数据输出功能。
3 系统控制软件具体实现
Visual C++6.0平台使用Microsoft Windows图形界面, 采用面向对象程序设计思想, 它不仅提供了丰富的MFC类库函数, 还能够在程序中任意使用win32 API函数, 另外用它开发出的软件几乎不加修改就能共享Windows 的其他资源 (如打印机、剪贴板、网络资源等) [5]。Open CASCADE是一套开放原始码的功能强大的三维建模工具, 提供了点、线、面、体和复杂形体的显示和交互操作。以Visual C++6.0为开发平台, 结合Open CASCADE的几何造型功能库和可视化及交互功能库进行系统控制软件的开发。图4为系统控制软件的机身调姿主界面。
3.1 定位基准点测量
系统控制软件不能直接与激光跟踪仪建立连接, 而是采用基于TCP/IP协议的方式与控制器进行通信, 从而间接与激光跟踪仪建立连接, 同时利用激光跟踪仪附带的编程接口, 实现对激光跟踪仪的相关操作 (图5) 。定位基准点测量的具体实现过程是:1) 建立与控制器的连接;2) 激光跟踪仪初始化;3) 根据需要发送测量命令, 获取待测点的空间位置坐标并传递给系统需要的模块;4) 完成测量过程, 断开与控制器的连接。
3.2 支撑定位器运动控制
同与激光跟踪仪的连接方式类似, 系统控制软件同样采用基于TCP/IP协议的方式与运动控制器进行通信, 间接与支撑定位器建立连接, 利用编程接口函数实现对支撑定位器的运动控制。定位器控制流程如图6所示, 运动控制模块将调姿模块生成的定位器轨迹转化为具体的运动控制命令, 驱动定位器运动, 完成机身或机翼位姿的调整。考虑到调姿的精度, 增加定位器位置反馈步骤, 将定位器实际位移量与给定的位移量比对, 如有偏差则通过此偏差值对定位器的位置加以修正。
线程是Windows操作系统最小的调度单元, 基于Visual C++6.0开发的应用程序, 默认只有一个线程即主线程。如上所述定位器运动过程需要数分钟甚至数十分钟的时间才能完成, 若系统控制软件只有一个线程, 则在这期间软件将不能进行其他的操作, 这将严重影响对接的效率。采用多线程技术可以很好地解决这个问题, 在系统控制软件中, 将用户界面作为主线程, 同时创建定位基准点测量线程和支撑定位器运动控制线程。在定位基准点测量线程中进行基准点的测量工作, 在支撑定位器运动控制线程中完成定位器的运动控制, 通过消息的方式实现线程间的通信, 这样就可以在驱动定位器运动的同时进行定位基准点的测量工作, 或者是用户界面上操作如对接过程可视化仿真等, 这样既可以提高对接的效率同时又避免了系统资源的浪费。
3.3 机身/机翼位姿解算
机身与机翼均可假设为刚体, 其空间位姿可用欧拉角φ, θ, ψ和坐标值表示p°= (p°xp°yp°z) T。设定位基准点的测量坐标为ps=[psxpsypundefined]T, 测量点在机身或机翼坐标系中的坐标为pc= (pcxpcypundefined) T, 则ps, pc满足:
ps=Apc+p°
式中A为姿态矩阵:
undefined
矩阵中s表示sin, c表示cos。
由上式可知, 每测量一个基准点引入3个独立方程, 当测量点数等于2时, 方程个数与未知数个数相等, 即可求得机身或机翼各位姿参数的解。工程实际中, 为减少测量随机误差, 往往测量3个以上的基准点, 本对接系统采用4个基准点。测量点数超过2时上式变成了超越方程, 可通过最小二乘法进行求解。
将上述刚体位姿解算算法集成到系统控制软件中, 通过测量机身或机翼上的四个定位基准点即可确定机身或机翼当前的位姿, 与其目标位姿进行比对得到位姿差值, 再将位姿差值转换为各支撑定位器在x, y, z方向上的位移量, 通过调整定位器运动消除位姿差值, 从而达到机身或机翼位姿调整的目的。
3.4 对接过程实时可视化仿真
实时可视化仿真需要用到Open CASCADE的几何造型功能库和可视化及交互功能库, 开发时需将相应的动态链接库引入工程。可视化仿真的基本步骤是:1) 获取图形设备, 创建一个视窗 (3D viewer) , 用于3D图形的显示;2) 在视窗中创建一个交互关系 (AISContext) , 用于视窗中所有对象的操作与管理;3) 将读入的CAD模型转换为可交互对象, 接受AISContext的管理[6]。例如要在窗口中显示一个IGES格式存储的机身三维模型 (模型名称为fuselage) , 关键代码如下:
Handle (AIS_InteractiveContext) myAISContext=GetDocument () ->GetIC () ;
CIgesImport igs;
myMidFuselage=igs.ImportIges (myAISContext, fuselage, 1) ;
myAISContext->SetDisplayMode (myMidFuselage, 1, Standard_False) ;
myAISContext->SetSelectionMode (myMidFuselage, -1) ;
myAISContext->Display (myMidFuselage, Standard_False) ;
4 结语
基于Visual C++6.0平台, 结合Open CASCADE三维造型工具, 完成了飞机翼身自动对接系统控制软件的设计与实现。系统控制软件实现了定位基准点的精确测量、机身和机翼的位姿解算、支撑定位器的轨迹规划与运动控制、对接过程可视化仿真等功能。使用多线程技术避免了系统资源的浪费, 提高了翼身对接效率。应用该控制软件的翼身自动化对接系统可有效降低翼身对接误差, 提高对接装配精度和效率。
摘要:依据飞机翼身自动化对接的需要, 基于V isual C++6.0平台设计并实现了飞机翼身自动对接系统控制软件。介绍了自动化对接系统组成与工作原理, 根据机翼与机身的对接工艺过程, 设计了软件的控制流程。根据对接系统要实现的功能, 对系统控制软件进行了模块划分。并给出了系统控制软件几个关键模块的具体实现过程。
关键词:激光跟踪,翼身自动对接,位姿解算,可视化仿真
参考文献
[1]黄翔, 李泷杲, 陈磊, 等.民用飞机大部件数字化对接关键技术[J].航空制造技术, 2010.3:54-56.
[2]许国康.大型飞机自动化装配技术[J].航空学报, 2008.29 (3) :734-740.
[3]张瑞波, 王收军, 朱国良.基于VC6.0和FORTRAN语言的造波机控制软件的研究与开发[J].制造业自动化, 2008.30 (8) :37-40.
[4]邹方, 张书生.飞机总装自动化校准对接系统[J].航空制造技术, 2008.7:32-37.
[5]吴金泉, 邵秀琴, 周汉湘, 等.基于Visual C++的超声成像系统控制软件的设计[J].中南民族大学学报 (自然科学版) , 2008.27 (1) :64-67.