VC程序设计范文
VC程序设计范文(精选12篇)
VC程序设计 第1篇
在很多情况下,远程监控和自动化领域系统常见的通信编程多为串口通信编程。计算机串口编程在通信软件中有着十分广泛的应用。在Visual C++、Delphi、Visual Basis、TC、BC等开发工具之间,Visual C++由于功能强大和应用灵活,同时也得到Miscrosoft系统的最好支持,因此涉及硬件操作的通信编程,一般采用Visual C++。
在VC++中有两种方法可以进行串口通讯。一种是直接用VC++访问串口。另一种是利用Microsoft公司提供的ActiveX控件Microsoft Communications Control。本文将主要介绍第二种方法。
1 利用ActiveX控件 Microsoft Communications Control访问串口
ActiveX是Windows下进行应用程序开发的崭新技术,它的核心内容是组件对象模型COM(Component Object Model)。ActiveX控件包括一系列的属性、方法和事件,使用ActiveX控件的应用程序和ActiveX控件之间的工作方式是客户/服务器方式,即应用程序通过ActiveX控件提供的接口来访问ActiveX控件的功能。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询方法。
a) 事件驱动法
事件驱动通信是处理串行端口交互作用的一种非常有效的方法。在使用事件驱动法设计程序时,每当有新字符到达,或端口状态改变,或发生错误时,MSComm控件的OnComm事件捕获并处理这些通信事件。而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。
b) 查询法
这种方法适合于较小的应用程序。在这种情况下,每当应用程序执行完某一串行口操作后,将不断检查MSComm控件的CommEvent属性以检查执行结果或者检查某一事件是否发生。如果应用程序较小,并且是自成一体,这种方法可能是更可取的。
MSComm控件有许多重要的属性,其中首要的几个如表1所示。
2 编程实现
打开Visual C++6.0集成开发环境,创建一个基于对话框的MFC应用程序项目,命名为MyCOM,记住在设置项目选项时必须选上ActiveX Controls,其他的按照缺省设置。完成这一步后,选择菜单项Project/Add to Project/Components and Controls,将弹出一个对话框以选择系统中已有的组件(Components)和控件(Controls)。选择Registered ActiveX Controls文件夹下的Microsoft Communications Control项并按下Insert按钮,将MSComm控件支持加入到本项目中。这时将生成一个名为CMSComm的C++类,并且在对话框编辑器里的工具栏将出现MSComm控件图标。CMSComm类是由MSComm控件导出的一系列接口函数构成的,利用它将可以访问MSComm控件的属性(Property)和方法(Method)。
我们假设先利用计算机COM1口上,那么打开资源编辑器,在程序主对话框(资源ID为IDD-MYCOM-DIALOG)上面放置一个MSComm控件,并用Class Wizard为该对话框类添加对应该控件的成员变量m-wnd COM1。我们假设外接口与计算机进行串行通信时采用7个数据位、1个停止位、偶校验方式,并且波特率为2400/4800/9600可选,这里采用9600波特率,在对话框编辑器中设置MSComm控件的属性如表2所示:
其他选项按照缺省设置或者根据具体设备的要求进行设置。如果需要通过多个串行口与多台设备通信,那么每一个串行口对应于一个单独的MSComm控件。串行口的设置参数既可以在对话框编辑器里设定,也可以在程序代码中通过调用CMSComm类的成员函数设定。例如,我们可以在MyCOMDlg类的OnInitDialog成员函数中初始化MSComm控件的参数,代码如下:
BOOL CMyCOMDlg::OnInitDialog()
{
CDialog:OnInitDialog();
//
//TODO:Add extra initialization here
m-wndCOM1.SetCommPort(1);
m-wndCOM1.SetSettings(“9600,e,7,1”);
m-wndCOM1.SetRThreshold(1);
m-wndCOM1.SetSThreshold(0);
m-wndCOM1.SetInputLen(1);
m-wndCOM1.SetPortOpen(TRUE);//打开通信口
return TRUE;
//return TRUE unless you set the focus to a control
}
接下来为程序主对话框建立响应MSComm事件的处理函数,每当MSComm控件触发事件时该函数将被调用。在对话框编辑器中用鼠标左键双击MSComm控件图标,在弹出的对话框中输入函数名OnCommCOM1,该事件处理函数的原型定义和消息映射入口将自动被添加到CMyCOMDlg类中,我们所要做的只是在OnCommCOM1函数中给出具体的数据处理程序段,代码示例如下:
void CMyCOMDlg::OnCommCom1()
{
//TODO:Add your control notification handler code here
CString sInput;
switch(m-wndCOM1.GetCommEvent())
{
case 1: //comEvSend事件
/*如有数据要发送,可采用以下代码:
VARIANT varOut;
VariantInit(&varOut);
varOut.vt=VT-BSTR;
USES-CONVERSION;
varOut.bstrVal=SysAllocString(T2OLE)(“My data”));
if(varOut.bstrVal)
{
m-wndCOM1.SetOutput(varOut);
SysFreeString(varOut.bstrVal);
}
*/
break;
case 2://comEvReceiv事件,有数据到达
sInput=m-wndCOM1.GetInput().bstrVal;
//对接收到的数据做必要处理
break;
case 1009://comEventRxParity事件,奇偶校验错误
//错误处理代码
break;
default:
break;
}
在这里必须注意的一点是在发送字符数据时,必须向MSComm控件提供Unicode格式的字符串,在以上代码中用到了USES_CONVERSION和T2OLE宏进行ANSI字符串到Unicode字符串的转换,具体内容可参考Visual C++6.0所带的MSDN文档,在此不加赘述。
3 小结
本文对Windows下在Visual C++6.0程序中的串行通信,着重讨论了使用MSComm串行通信ActiveX控件编程的方法做了探讨,显示了ActiveX技术的强大功能、充分的灵活性和易用性,具有一定的实践意义。
参考文献
[1]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社,2002.
[2]张曜,郭立山,吴天.C函数实用手册[M].北京:冶金工业出版社,2003.
[3](美)Kate Gregory.Visual C++5开发使用手册[M].康博创作室,译.北京:机械工业出版社,1998.
VC课程设计报告 第2篇
河北工业大学计算机软件技术基础(VC)2007年课程设计报告
学院 班级 姓名 __ 学号 ____ 成绩 __ ____
一、题目:查找满足特定条件的三位数(27)
二、设计思路
1、总体设计 1)分析程序的功能
2)系统总体结构:设计程序的组成模块,简述各模块功能。
2、各功能模块的设计:说明各功能模块的实现方法
3、设计中的主要困难及解决方案
在这部分论述设计中遇到的主要困难及解决方案。1)如何将输出1~9不重复数字 2)困难2
4、你所设计的程序最终完成的功能 1)说明你编制的程序能完成的功能 2)准备的测试数据及运行结果
三、程序清单
如果是使用一个文件完成的程序,只需列出程序代码。
如果是使用多文件完成的程序,首先说明程序中的代码存放在哪些文件中,说明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四个文件);然后依次给出每个文件名及该文件清单,例如:
1、first.cpp文件清单
2、second.cpp文件清单
3、third.cpp文件清单
第1页/共2 页
编号:
4、all.h文件清单
(说明:程序清单中一定要有注释。将程序中自己编写的代码列在此处,系统自动生成的代码就不要列出了。程序清单部分的行间距设为1行即可。)
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
2、对课题提出更完善的方案
五、收获及心得体会
1、通过本次课程设计,自己在哪些方面的能力有所提高。
2、收获和心得体会。
日期: 2007年
月
日
(说明:本模板只提供参考,每个同学根据自己课题的特点,可减少或增加某方面的论述)
VC程序设计 第3篇
关键词:VC++;串口通信;设计方案
To Achieve Design Method of Serial Communication on VC+ +
Xiao Zhihao
(No.715 Institute,Fuyang311400,China)
Abstract: With the computer technology and control technology and the rapid development of increasingly mature,play all kinds of communication between the role of functional modules based on VC + + computer programming serial communications in today's computer software is widely used.In this paper,fully mechanized work system for example,an overview of VC + + based on the host computer and lower computer serial communication between the design method.
Keywords:VC + +;Serial communication;Design
综采工作面电控系统是综合机械化采煤装备,它利用液压支架和采煤机、输送机等多机联动,具有高产、高校、安全、自动化等优点。
一、综述
综采工作面液压支架电控系统硬件如图一所示。下位机的功能是完成液压支架的控制,上位机的功能是完成子控机的监测控制。基于VC++的综采工作面液压直接电控系统实现上位机和下位机之间的串口通信,实现人机界面的动态显示,数据库读写等功能。
图一
二、串行函数接口程序设计
在此系统中,上位机和下位机之间的串口通信可以采用方法很多,例如VB、Matlab、组态王、VC++等等,但是在这几种软件中,VB的编程工具不够完全,效率低;组态王命令语言环境弱,传输大量数据时局限性很大,难以实现复杂的数据处理;Matlab的界面开发能力不强,代码运行效率低。因此,效率高、封装性好、继承性高的VC++软件成为开发本系统的首选串口编程软件。
(一)上位机通信设计。首先要对串口进行初始化,确定其工作方式、波特率等,系统定为:1个停止位、波特率9600,数据格式为8个数据位等。具体实现:
1.设置对话框初始化CAN参数:为对话框建立基于CDialog的派生类CC ansettingDlg,并利用Class-Wizard”菜单项以及Member Variables为参数控件设置关联变量。同时,添加按钮并添加响应函数,点击链接时,各项的初始化参数都自动存储,并且与CAN总线连接,一旦点击启动按钮,就能够存储总线信号。
2.基于VC++采用MFC编写接口函数,过程如下:(1)打开设备并初始化CAN:CCansettingDlg::CCansettingDlg(CWnd* pParent /* = NULL……:CDialog(CCansettingDlg::IDD,pParent);(2)获取CAN 状态:typedef struct _VCI_CAN_STATUS;(3)连接CAN:void CCansettingDlg::OnButtonConnect() / /为连接按钮添加;(4)启动CAN:void CCansettingDlg::OnButtonStartcan();(5)从指定的设备接收数据并放入数据库。
3.创建线程,从CAN总线读取的数据存入数据库:static UINT ReceiveThread( void * param);//创建线程,添加响应函数,设置变量,总线上有数据,就能够触发线程,把数据存入数据库,其函数为:
(二)下位机通信设计。下位机采用的是MCS—51系列中的8051单机。下位机的串行通信设计时采用中断收发数据的,其流程如下图。发送数据时,从累加器中向串口缓冲寄存器中传送数据;接受数据时,从串口缓冲寄存器向累加器传送数据。实际应用中,单片机接受PC机发出的地址信号之后,转入相应的中断程序服务子程序,与PC机通信。
下位机流程图
三、程序串口测试
通过简单串口调试工具,进行程序测试,如下图:
测试显示
如果串口正常运行, 那么可以自由接收和发送数据。
总结:综合上述例子,VC++相对与其他编程软件来说,是一个非常优秀的系统开发平台,编程简化、程序透明化、适应性好、可移植性高。利用VC++运行库的通信函数实现串口通信的原理简单,但是依旧有着不足之处,其实用性和灵活性较差,因此,在具体实践时,要结合软件的功能模块需求,综合考虑其复杂程度、灵活性等环境因素,选择适当的方式,来实现上位机与下位机之间的串口通信。
参考文献:
[1]赵晓辉,陈艳萍,张科英,张东红.基于VC++环境下串口通信程序的研究与实现[J].科技信息,2010,1
[2]王娇,姚竹亭.基于VC++6.0的串口通信的设计[J].测试工具及解决方案,2009,11
[3]白宁,金华晋.基于VC++6.0的串口通信程序开发[J].电脑编程技巧与维护,2010,12
基于VC++空间定位程序设计 第4篇
所谓工程测量的内外业一体化 (下面简称工程测量一体化) , 即在生产过程中, 摆脱数据在一列变换过程中的人工干预, 使工程测量外业数据采集、内业成果计算和管理统一在一个系统内, 并且对资料信息进行深加工, 作出科学解释与管理, 进行数字地图、数字专用图生产, 建立各种信息管理系统等。目前, 现代测量仪器已经与计算机技术融合, 这表明现代测量技术正向信息化和自动化过渡, 电子计算机技术在工程测量中的核心作用正不断推动着测量过程的变革与进步, 现代通讯技术在测量过程中的应用, 可以使工程测量野外作业、内业计算与管理以及应用项目间的时空距离趋于零, 从而实现内外业与管理过程间的双向控制, 它预示着工程测量模式的重大变革[1,2,3,4,5]。广泛应用于城市测量之中的交会定点测量技术也得到了一定的发展, 主要针对城市中放样 (放点、放线等) , 目前并为发现有专门的交会定点应用程序设计。首先简述了交会定点的计算过程, 然后给出其数据结构, 并应用VC++对其进行程序设计, 从而完成交会定点内外业一体化。
1 交会定点的基本原理
在工程测量中有各种测量方式, 其中交会定点是加密控制点常用的方法, 它可以采用在整个已知控制点上设站, 分别向待定点观测方向和距离, 也可以在待定点上设站向数个已知控制点上观测方向或距离, 然后计算待定点的坐标。常用的交会定点方法有前方交会定点、侧方交会法、后方交会法、边长交会法和自由设站法[1,6]。
1.1 测角前方交会
在图1中, 已知数据是A、B两点的坐标分别在A、B点观测α及β角, 则可求得待定点P的坐标。
求解思路是:若能求得DAP与αAP, 则可求得AP两点间的坐标增量, 由A点的坐标加上该坐标增量即可得P点的坐标:
undefined
根据上述, 经过一系列等价变换, 可得最终的求解公式:
undefined
需要注意的是, 使用上式时, A、B、P的编号应该是逆时针方向的。P点坐标算出后, 可将A、P作为已知点, 计算B点的坐标进行校核。为了提高交会点的精度, 作如下规定:
1) 前方交会和侧方交会应选择三个大地点, 如果架设仪器较为困难, 也至少应有两个大地点;
2) 交会角不应小于30°, 并不应大于150°, 困难时亦不应小于20°, 并应不大于160°。
3) 水平角应观测两个测回, 根据测点数量可用全测回法或方向观测法。
4) 三个大地点的前方交会, 可通过两个三角形求出P点的两组坐标值P (Xp1, Yp1) , (Xp2, Yp2) , 两组算得的点位较差不大于两倍的比例尺精度, 即:
undefined
式中δx, δy为δx=Xp1-Xp2, δy=Yp1-Yp2, M为比例尺分母。
在选定点时, 最好使交会角接近于90°, 而不应大于150°或小于30°。
1.2 侧方交会
如果不便在一个已知点 (例如B点) 安置仪器 (如图2所示) 。而观测了一个已知点及未知点上的两个角度, 则同样可以计算点的坐标, 这就是侧方交会。这时只要计算出B点的β角, 则可用公式求解xP和yP。侧方交会的计算公式与前方交会的计算公式相同。
1.3 后方交会
如图3所示, A、B、C是已知三角点, P点是导线点, 将仪器安置在P点上, 观测P至A、B、C各个方向之间的水平夹角α、β, 然后根据已知三角点的坐标, 可解算P点坐标。计算步骤如下:
1) 引入辅助量a、b、c、d
undefined
令N= (a-c) / (b-d)
2) P点坐标计算
undefined
3) 危险圆判别
当P点正好落在通过A、B、C三点的圆周上时, 后方交会点无法解算。
即:a=c, b=d, N= (a-c) / (b-d) =0/0。
此时为不定解。因此作业时应使P点离危险圆周的距离至少应大于该圆半径的1/5。为了进行检验, 须在P点观测第四个方向K, 测得ε测角。同时可由P点坐标以及B、K点坐标, 按坐标反算公式求得αPB及αPK。ε算=αPK-αPB, 求较差Δε=ε算-ε测。由此可计算出P点的横向位移e为:
undefined
在一般测量规范中, 规定最大横向位移ε允不大于比例尺精度的2倍, 即ε允<20.1M (mm) 。M为测图比例尺的分母。
1.4 边长交会
边长交会也是加密控制点的方法之一。特别是利用光电测距仪或全站仪测定距离时, 这种方法非常简便。已知数据为点A、B的坐标, 观测两已知点至待定点P的距离D1及D2 (如图4所示) 求待定点P的坐标。
在三角形APM中, h2+q2=D21;在三角形BPM中, h2+ (D-q) 2=D22, 后式减前式得
此处q为AP在AB边长上的投影, 由此
式中根号前的“+”或“-”号, 取决于A、P、B点是顺时针还是逆时针方向。
为了进行观测校核, 可由坐标反算公式计算, 并与观测的D2测进行比较。为了进行观测校核, 还应由第三个已知点C观测D3, 分两组计算P点坐标。如较差在允许范围内, 取平均值作为P点的最后坐标。
2 数据结构设计
2.1 前方交会数据结构设计
2.2 后方交会结构设计
2.3 边长交会结构设计
3 结论
通过上述分析后, 利用VC++面向对象程序设计语言, 对前方交会、后方交会以及边长交会进行编程, 并引入实测数据进行验证。本研究的后续工作将围绕着大量交会定点数据的处理 (文件的形式) , 并设计相应的数据库对原始数据与计算后的数据进行存储, 完善更多交会定点数据处理功能。
综上所述, 交会定点测量技术也面临着日新月异的技术变化及人们对传统工程测量观念等诸多变化的挑战。交会定点测量技术已不再是仅仅指测量、放样, 而是研究获取、解释、管理, 并获取被测物体在时间与空间上变化等信息的理论和方法, 该技术正逐渐朝着由简单到复杂、由手工向自动化、智能化、数据库信息化方向发展。
参考文献
[1]罗新宇.土木工程测量学教程[M].北京:中国铁道出版社, 2007.
[2]潘正风.工程测量技术发展现状[J].铁道勘测2, 004 (6) :1-3.
[3]王丽蕊, 王欣.交会定点测量中后方交会危险圆的判别[J].河北水利, 2006 (7) :45-46.
[4]张正禄.工程测量学的研究发展方向[J].现代测绘, 20063, (26) :3-6.
[5]杨久东, 郭建华, 吴风华.工程测量中GPS测量内外业工作的一点体会[J].地理空间信息, 20033, (1) :35-36.
VC程序设计 第5篇
学号
姓名
院系专业 能源与环境工程 热能与动力工程
一、课题名称
《教学事务管理系统》
二、问题陈述
使用面向对象设计的系统分析和设计,设计出适当的数据结构,编写一个信息管理程序,程序的功能是管理学生基本信息,要求具有添加,删除,查询,排序的功能,并具有一定的查询功能。
三、设计目标和设计任务
新学期开学时新学生需要注册,登记注册信息。注册信息包括每个已注册学生的班级代号、学号、姓名、注册的学期等。
每个学期开始,学生可以选课,登记选课信息。选课信息包括已注册的每个学生所选的课程,选课仅限该生注册的学期。
每个学期考试完毕,需要成绩登记。每个学生所选课程的考核成绩,以及此成绩的类型。
所输入学生的信息如果有误,可以修改。对于退学、转学的学生,删除有关资料,对转入的学生,可以增加其各项信息。
学生信息包括:学号、班级、院系、姓名、性别、联系电话、家庭住址等。课程信息包括:课程代号、课程名、开课学期、学分、课时。
成绩信息包括:姓名、学号、班级、课程代号、成绩、类别(初修、补考、重修)。可提供的查询功能:
根据某些信息(班级、性别、专业)查询学生名单; 某门课程的选修者名单(含学号、成绩、成绩类型); 某个学生某个课程某学期的成绩单; 某个班级某个课程各个学生的成绩单; 某个课程选修者中不及格学生的名单;
某个课程的各项信息(课程代号、学分、课时、开课学期);
四、解题算法思想
程序包括11个对话框,主对话框上四个按钮,分别调用“注册信息”、“选课信息”、“成绩录入”及“信息管理和查询”四个子对话框。
其中,在“注册信息”对话框内可以选择学生的注册学期,点击“确定”按钮后,弹出“学生信息”对话框,此对话框与后面将会提到的“信息管理与查询”对话框的子对话框之一,“学生信息”相同,二者可相互共享。在该对话框中点击“增加”按钮,将调用“成员对话框”,用以实现学生的注册。信息填写完整后点击“确定”,并可依次返回至主对话框。
接着,点击“选课信息登记”,弹出选课信息对话框,在相应输入框或下拉菜单中输入信息后,点击所要选的课程(可多选),然后点“确定”,程序可以自行判断信息输入是否合理(选课学生是否已经注册或是否已选择同样的课程),如果有误,则通过消息框提示,并可以再次输入信息;如果信息合理,则提示选课成功。
点击“返回”回到主对话框,可通过“学生成绩录入”按钮调用“成绩录入”对话框,在此对话框中,可在输入框或下拉菜单中填写相关信息,程序同样可以自行判断信息输入的合理性(输入的学生是否已注册或是否已选择相应课程),如果输入有误,则弹出消息框提示,可以再次输入信息;如果信息合理,则成绩录入成功,新的成绩信息会在下方的List Control控件中显示。也可以直接点击下方List中的原有信息,程序会自动将该信息中的学生学号及相应课程代码填写入上方控件,方便成绩的录入。所有成绩录入完成后,点击“完成并保存”按钮,保存已录入的信息,同时自动返回至主对话框。
如需要查询相应信息,可点击“信息管理与查询入口”,调用“信息管理与查询”对话框。在这个对话框中,包含三个主要功能按钮,“学生信息”,“课程信息”和“成绩信息”,分别用以提供相应的查询功能。
点击“学生信息”,进入“学生信息”对话框。在这里可以实现学生信息的查询及管理功能。在上方控件中填写或选择相应信息后,便可以在下方的List Control控件中查看到所要的学生信息,同时选中相应条目后,可以通过右方的“删除”、“增加”和“修改”按钮,实现数据的管理。而通过下方“载入”和“保存”按钮,可以载入及保存现有数据,当然也可以载入进之前保存的文件,从而实现相同学生,不同学期的信息查询。
返回至“信息管理与查询”对话框后,点击“课程信息”按钮,在弹出的“课程信息”对话框中,可以查看所有的课程的基本信息,并可以通过“增加课程”按钮,调用“增加课程”对话框,填写新课程信息,从而增加新的课程;在“课程信息”中的控件中选择某门课程后,也可以通过“查看课程”按钮调用“查看课程”对话框,查看到选修该课程的学生名单,包括学号,成绩等信息,勾选上方控件后可以查看不及格学生的名单。
依次返回至“信息管理与查询对话框”,点击“成绩信息”后,进入“成绩信息”对话框。在这个对话框中可以在下方的List Control看到所有学生的成绩单,通过上方的Edit控件输入各个相应的筛选条件,便可以在下方看到所有符合条件的学生的成绩单。
依次返回至主对话框,点击“◎”退出程序。
五、数据结构描述
程序数据通过两个节点类、两个链表类来存储。分别如下:
{ public:
CString m_CourseNum;//存储课程代码 CString m_CourseName;//存储课程名 CString m_CourseTerm;//存放课程开课学期 CString m_CoursePoint;//存放课程学分 CString m_CourseTime;//存放课程课时数 int m_CourseScore;//存放学生课程成绩 CString m_CourseType;//存放学生成绩类型 Course *next;Course()//默认构造函数 class Course
{
} Course(CString CourseNum,CString CourseName,CString CourseTerm,CString m_CourseNum=“";m_CourseName=”“;m_CourseTerm=”“;m_CoursePoint=”“;m_CourseTime=”“;m_CourseScore=0;m_CourseType=”";next=NULL;CoursePoint,CString CourseTime);};
class CourseList { public:
Course * head;CourseList();void DeleteNode(Course *p);//用来删除存放指定课程的链表 void SaveToFile(const char *name);//将课程信息保存至文件 void LoadFromFile(const char *name);//从文件中导入课程信息 void ReleaseList();//释放链表
void AddNode(CString CourseNum,CString CourseName,CString CourseTerm,CString CoursePoint,CString CourseTime);//向链表中添加节点
};
class CStudent Course* FindNode(CString CourseNum);//根据课程代码查找节点 { public:
CString m_StudentNo;//存放学号 CString m_Class;//存放班级 CString m_Name;//存放学生姓名 CString m_Sex;//存放学生性别 CString m_Dept;//存放专业
CString m_PhoneNo;//存放学生电话号码 CString m_Address;//存放学生家庭住址 CString m_Term;//存放学生注册学期 CStudent *next;Course m_Course[20];//用来存放学生选的各项课程 int s;//存放学生所选课程的数量 CStudent();CStudent(CString CourseNum,CString StudentNum,int Score,CString ScoreType);CStudent(CString StudentNo,CString Class,CString Name,CString Sex,CString Dept,CString PhoneNo,CString Address);};class CStudentList { public:
CStudent * head;//头指针 int n;//节点数量 CStudentList();void DeleteNode(CStudent *p);//从链表中删除指定节点 void SaveToFile(const char *name);//将链表内容存入文件 void LoadFromFile(const char *name);//从文件载入链表内容 void ReleaseList();//释放链表 void AddNode(CString StudentNo,CString Class,CString Name,CString Sex,CString Dept,CString PhoneNo,CString Address);//向学生链表中添加节点 void AddScoreNode(CString CourseNum,CString StudentNum,int Score,CString ScoreType);//向链表中加入成绩信息 void AddCourseNode(CString StudentNo,CString CourseName, CString CourseNum,CString CourseTerm CString CoursePoint, CString CourseTime);//向链表中加入对应课程信息
};
另外,定义了全局变量:
CStudentList m_List;//用来保存学生的各项数据
CString Term;//用来存放学生的注册学期,用来将注册的学期信息加入链表(开始时,AddNode函数中忘记加入m_Term变量了)
CString Num;//为了在查看课程信息时,对话框里的内容能够方便的传入子对话框中 CStudent* FindNode(CString StuNo);//根据学号查找节点
六、测试数据
以下为程序初步运行后保存至文件中的内容:
2009-***091许亚军男 能源与环境学院 ***M9
110100首修高等数学5.0
2009-201048课时111100首修
2009-201048课时大学物理3.0 2009-201048课时112100首修C++2.0 111100首修大学物理3.0 男
2009-201048课时
2009-***091周帆能源与环境学院110M9
111100首修大学物理3.0 2009-201048课时11299首修C++2.0 2009-201048课时
2009-***091雒志强男
2009-201048课时能源与环境学院10086M9
112100首修C++2.0 2009-***091杨宗冰男
能源与环境学院119M9
112100首修C++2.0 2009-201048课时2009-***091XX女建筑学院XXXXXX
11055补考高等数学5.0 2009-201048课时1110重修大学物理3.0 2009-201048课时112100首修2009-201048课时 C++2.0
七、运行情况分析
输入数据测试后,生成包含以上内容的文件。整个过程顺利,程序可以正确运行,未出现重大错误,各项功能也都可以实现。可将生成的文件另外保存,从而录入新的数据(如其他学期的学生信息),而在查询时,可以根据需要查询的不同学期的信息来载入不同的文件。
八、设计小结
在程序设计过程中遇到了不少问题,很多都是因为之前的想法没有完全照顾到全局,使得后来要大幅度的修改代码,或者用较为复杂的代码来弥补。所以,较大的程序设计,最重要的就是一定要有大局观,在设计初期就要将自己的目标、思路理清,最好做下记录,而且做每一步的同时也必须想到后面的很多步,否则到后来很可能会因为之前的缺陷而做不下去,或者不得不放弃某些功能。另外,对于程序编写本身,我发现需要注意的部分是文件的保存及载入,这部分的每一个代码都需要仔细斟酌,否则很可能出现在编译时没问题,而运行时出错的状况。而一旦出现这种情况,就必须通过恰当的方法寻找出问题所在,如注释某些最近写的代码、利用消息框弹出某些变量的值,从而判断其与设想是否相符等方法,而不能盲目的查看所有代码,慢慢找或者索性手足无措了。
九、心得体会
这是我第一次尝试做比较大的程序,所以从中学到的还是很多的。首先,我发现我对程序设计还是很感兴趣的,很喜欢去钻研;其次,在设计及编程的过程中,通过发现问题、解决问题,我自己总结出来了不少方法,也发现了编写时所必须注意和避免的错误,可以让以后少走弯路。这些都是对于程序设计本身,此中的心得当然有很多,我也无法一一列举出来,而最重要的是我从其中学到了一些程序设计之外的东西。我深切的体会到了全局思想的重要性,无论干什么,基本上都得有这种思想,每走一步都必须想到以后的路,必须想到这一步是为什么而走的,为什么目标而服务的。只有这样,才能慢慢的稳健的走向自己的目标,不会在某一点上突然发现自己走不下去了,发现之前的某一步将自己带上的崎岖的路,而不得不往回走去弥补之前的过错或者干脆拐上另一条不明方向的道路。另外,前进的过程中,当遇到问题时,必须通过恰当的方法去发现起源,然后解决,而不要盲目的去寻找或者毫无对策了,必要的时候也得求助他人。而在一步步解决问题的过程中,也必须学会自己总结,以避免以后再次遇上相同错误时再走弯路。
总之,这次的课程设计给了我很大帮助,如果有机会,我便会选择向这方面去深入发展。
参考资料
1、《C++课程设计》
2、《C++程序设计》 提交日期 2010-9-16 星期四
朱金付 何铁军 朱萍 郑雪清 徐冬梅 编著
如此VC系列之八:企业VC 第6篇
企业风险投资,英文corporate venture capital。
在发达经济体中,许多耳熟能详的大企业,尤其是技术型的公司,或多或少做过一些风险投资,比如英特尔公司、通用电气、思科,西门子,英飞凌,美国国家广播公司、雪佛龙、摩托罗拉、迪士尼、富士通等等。
当企业发展良好,手中握有大笔闲置资金,又不想以分红或回购的方式还给股东的时候,它们会选择投资帮助业务的增长。况且当初,不少技术型公司本身的成长也是离不开风险投资的支持的,他们对于风险投资有着自然的接受和认同。
但是,企业风险投资通常是有战略价值要求的,是为企业主营业务服务的,否则企业不就变成投资公司了吗?在美国,没有任何一家上市企业的董事会会批准公司转型成风险投资为主的业务的。就象西门子会投资无线移动领域的项目,迪士尼会投媒体和内容。它们都不会去投资农业或者餐饮的。
投资的目的可以有多种,包括为了最终控制或者兼并被投资公司的业务,或是寻找创新的技术,或者在一个新的不确定的领域中培养自己的耳目,等等。但重要的是,投资要有回报。作为公司的一个部门,如果连续几年亏损,董事会就会有充分的理由将它关闭。在2000年后互联网泡沫破灭的一段时间,许多企业纷纷被迫解散投资团队,填补投资产生的巨大漏洞。
所以这些年来,在国际上,真正能够坚持下来的企业风险投资凤毛麟角,更不用说做出品牌的了。
在国内,这两年也涌现了一批企业风险投资人。我甚至听到一种说法:前几年,做得好的企业没有不做房地产的;这几年,做得好的企业没有不做股权投资的。没有验证过这句话,不过跟我个人的所见所闻挺相符的。近来陆续接触到的一些实业公司,都有了投资的团队。
实体企业,做服装的,做电子的,做房地产的……有了盈余,一不愿再投资回到实体,扩大产能(每个人都在抱怨做实业太累);二不愿放在银行眼睁睁见其贬值,自然去追逐那钱生钱的游戏。这个年代有着太多的造富神话,及其产生的示范效应。创业板,中小板,多少的亿万富翁,十几、二十几倍的投资回报。那巨大的诱惑仿佛一块磁石,将无数资金吸引至此。
企业风险投资中当然有正规的:它们专门设立了基金,高薪聘请几个到几十个人在外跑项目;有选择地投资与主营业务相关的项目。其代表有盛大,阿里巴巴和腾讯。更多则是非正规的,老总见了满意就投,凡是有机会上市的就投。这些里面,早出手的,已经有了几个成功上市项目;晚行动的,不得不咬牙用高估值抢项目。上市估值PE曾经平均五十多倍,上市前私募PE已然达到二三十倍。
VC程序设计 第7篇
关键词:井架承载极限,回归曲线,评定标准
我国幅员辽阔,石油资源储量丰富,目前已建成了大庆、胜利、辽河、新疆、四川、长庆、渤海和南海等24个油气生产基地,形成六大油气区[1]。巨大的石油开采规模使人们对石油开采过程中的安全问题倍加重视。石油井架是石油装备中的重要组成部分,为钻井、修井等作业提供支撑保护。对钻机井架承载能力的安全评估是保证安全生产一个重要手段,目前已成为钻机评估的一项常规内容。作为钻机安全评估中一个重要参数,井架承载能力的计算精度决定着井架能否被合理利用。鉴于手工计算的复杂性与枯燥性,开发高效、合理、功能完善的计算评估软件对简化计算过程、提高评估效率与精度,从而保证钻井安全具有重要的理论和现实意义。
1 计算方法
井架是一种钢构架(一般为16Mn,屈服极限为345MPa)具有一定的承载极限。这是评定井架承载能力的根本依据。计算井架极限承载的现实依据是测得井架主应变应力,用线性外推法计算井架极限承载。公式[2]为:
式中:σmax为最大许用应力,MPa;σst为本身自带的应力,MPa;σb材料的屈服极限,MPa.;
由于井架作业过程工况复杂,不单单有正拉、压应力,还伴有扭转、剪切应力,(1)式不能完全满足井架评估要求。考虑各种工况情况的井架承载能力评估公式[3]:
当时,可用公式(4)代替(1)和(2)
(2)、(3)、(4)中,与下标b、m、e结合在一起的下标x、y表示某一应力或设计参数所对应的弯曲轴。
式中:fa井架承受设计最大钩载时,测试杆件的轴心拉压应力,MPa;
Fa只有轴心拉压应力存在时容许采用的轴心拉压应力,MPa;
fb井架承受设计最大钩载时,测试杆件的压缩弯曲应力,MPa;
Fb只有弯矩存在时容许采用的弯曲应力,MPa;
Fe除以安全系数后的欧拉应力,采用公式(5)进行计算,MPa;
式中:E弹性模量,MPa;
lb弯曲平面内的实际无支撑长度,mm;
rb回转半径,mm;
K弯曲平面内的有效长度系数,mm;
Cm系数,对于端部受约束的构件:Cm=0.85。
只有轴心拉压应力存在时容许采用的轴心拉压应力(Fa)按下式计算[4]:
当时,
式中:Fy杆件材料的最小屈服应力,MPa;
Cc区分弹性与非弹性屈曲的杆件的长细比,。
2 程序设计
2.1 本软件设计如图1流程图
利用VC++编程软件的面向对象设计语言这一特点,化分四个模块即:参数输入、应力查看、回归曲线、结果输出实现本程序设计。各模块分析如下:
2.1.1 参数输入
功能:读取现场采集的井架承载应变数据及井架参数,包括井架自重、额定(名义)载荷、井架的屈服极限、安全系数设置等,最小二乘法计算各通道回归曲线斜率并保存。
设计:设置一个人机交互界面(如上图2),用户读取存放有井架承载应变数据的excel表即完成数据读取,然后在随后出现的对话框中输入如杨氏模量的井架基本参数,这是程序实现其功能的第一步。读取井架检测数据后设计有判断、计算通道斜率程序。
2.1.2 应力查看
功能:查看在采集井架承载数据时加载的荷载下的应力情况,并根据井架测试时的几种载荷作用下井架变形情况,推算、显示井架在最大名义荷载下井架应力,以便查看井架在各点处的应力,粗略估计井架极限承载并可以验证井架评估结果。
设计:根据第一步计算的各通道斜率推算几种特殊载荷值时的应力并显示,通道斜率不正常时,设此通道各点应力都为0。
2.1.3 回归曲线
功能:通过曲线方式显示应力与井架承载的关系,同时显示8个通道的回归曲线,方便对比分析井架各点处的承载应变趋势。
设计:根据第一步计算的通道斜率画各通道回归曲线。
2.1.4结果查看
功能:根据计算方法计算井架许用最大载荷。
设计:选择(1)式为计算标准时,调用各通道斜率,以线性外推法求出各通道在许用极限应力时的载荷,用冒泡法求出通道中最小的极限载荷值即是要求的井架许用最大载荷;以(2)、(3)或(4)式为计算标准时,还需选择井架的截面类型及截面尺寸、弯曲平面内实际无支撑长度等参数。如图3。
无支撑长度、区分弹性和非弹性屈曲的杆件的长细比等参数不是由截面类型决定,设计为局部宏变量。而回转半径、欧拉应力等取决于截面类型、尺寸等设计为局部变量。
在新的这种计算方法中,把四个通道作为一组(如图4),首先计算其额定荷载时的应力是否达到许用极限应力,然后通过依次加或减某个值重复判断此时应力值(如程序流程图),直到达到或接近许用极限应力为至。求得载荷即为各组极限许用载荷,在这些极限许用载荷中值为最的即为井架极限承载。
通过本软件计算结果得为2235KN(旧)、2215KN(新),与井架实际承载极限能力基本相吻合。
3 验证及结束语
由于井架评估过程中井架承载能力计算过程繁琐、复杂,容易出错。将计算过程程序化到微机中,充分利用了计算强大的计算功能。本软件借助VC++强大的交互功能,把复杂的计算方法简化为只需输入几个参数即可,更是方便了程序的后续功能扩展。
目前该程序作为井架承载能力计算工具与钻机井架设备配套、安全检查构成井架安全评估工作系统,并应用到长庆油田、大庆油田、渤海钻探等取得了良好效果。工作人员利用此计算软件可以方便得到评估结果,简化了工作流程,节省了评估工作成本。此软件对评估人员技术要求不高,人员素质对得出结论没有实质上的影响,可为井架安全评估提供便捷可靠的计算方法。一般而言,新的井架承载评估标准计算结果比旧标准计算结果略小,侧面反应只考虑井架轴心拉压应力评估得到的井架承载能力与井架实际承载有一定的偏差。
参考文献
[1]韩东颖.石油井架极限承载能力研究[D].大庆石油学院,2004:1-2.
[2]杨挹竺.机械基础与机械设备[D].北方交通大学:1990:102-105.
[3]钻机、修井机设备评估工作规范[S].中国石油天然气集团公司资质管理办公室.2008.5:6-8.
基于VC的USB接口通信程序设计 第8篇
随着信息技术的迅速发展,数据采集和处理技术广泛应用于雷达、通信、遥测、遥感等领域。而在早期的计算机系统上通常使用串口或并口来发送数据,每个接口都需要占用计算机内部很多的资源,传统的接口一般采用PCI总线或RS-232串行总线。PCI总线有较高的传输速率,可达132 Mbit/s,也可以即插即用,但是它们的扩充槽有限且插拔不方便;RS-232串行总线连接比较方便,但是传输速率太慢,不易用于高速传送数据和传送大量数据。USB(通用串行总线)集中了PCI和RS-232串行总线的优点,具有方便的即插即用和热插拔特性以及较高的传输速率,因此,将USB技术应用于数据采集是非常合适的,可以达到数据采集系统的高速度处理。目前,USB已经推出了其协议的2.0版本,速率高达480 Mbit/s。
本文研发了一套基于USB接口的数据采集系统,整个系统的设计涉及到硬件、设备固件(Firmware)、USB设备驱动程序及客户应用软件。下面分别加以说明。
1 USB接口芯片
本文介绍的USB数据采集系统采用了Cypress公司EZ-USB FX2系列的CY7C68013-128AC芯片,它同时集成了8051微控制器和USB2.0收发器,在提高集成度的同时也加快了数据传输的速度。在系统中,CY7C68013-128AC既是数据采集控制器又是USB控制器,EZ-USB FX2系列有3种型号:CY7C68013-56PVC、CY7C68013-100AC、CY7C68013-128AC。该系列的芯片都是针对USB2.0的,并且与USB1.1兼容。其中,CY7C68013-128AC是128脚,TPQF封装,功能非常完善,与另外两种相比,主要是增加了16位地址总线和8位数据总线以及更多的IO口,因此,CY7C68013-128AC的可扩展性最好。图1是该芯片的内部结构图[1]。
2 USB的固件和驱动程序设计
2.1 固件
固件是储存在程序内存中的代码,它使得USB接口芯片与主机和外设中其他电路能够通信。Cypress公司给出了一个固件库和固件框架(Frame Works),均是用Keil C51开发的。固件库提供了一些常量、数据结构、宏、函数来简化用户对芯片的使用;固件框架实现了初始化芯片、处理USB标准设备请求以及挂起状态下的电源管理等功能。该框架不添加任何代码,编码后产生的 .HEX文件载入芯片就能与主机进行基本的USB通信,只是不能完成特定的任务。对于用户而言,主要的工作就是选择适当的传输方式,添加需要使用的端点(Endpoint),考虑到本系统要求实现一定数量数据的快速采集,并要迅速地将采集到的数据传输和进行分析处理,并且对数据的完整性要求较高,我们采用了块传输方式(Bulk Transfers),在TD-Init( )函数中添加初始化代码,亦即选择块传输方式和选择端点2、6分别为输出、输入端口,在TD-Poll( )函数中添加功能代码,以实现发送和接收数据功能,关键代码分别如下:
2.2 USB设备驱动程序
USB设备驱动程序主要是使操作系统能够识别USB设备,建立起主机端与设备端之间的通信,它们之间的通信是通过Windows提供的API函数实现的,这些函数可以控制显示器、处理信息、访问存储器、读写磁盘和其他设备。
图2是USB设备驱动程序的整体结构图。
USB设备驱动的整体结构包括如下5个主要部分:USB应用程序接口、USB设备驱动函数、USB中断服务程序、USB回调接口程序、USB标准事件处理程序。
2.2.1 USB应用程序接口
USB应用程序接口主要功能是对USB驱动器进行软硬件初始化、打开端口、关闭端口、读端口、写端口和端口控制操作。当设备驱动器装入系统设备表时,I/O系统就调用该应用程序接口。
USB应用程序接口的一个例程主要包含:
a)对 USB端口安装、初始化和硬件配置(USB_init( ))。初始化步骤为:将USB设备驱动器安装到I/O系统设备表中,获取USB控制器使用的中断号,初始化USB驱动器数据结构与USB端口状态寄存器,启动USB标准事件处理程序。
b)打开USB端口(USB_open( ))。USB_open函数允许应用程序打开一个USB端口和选择DMA数据传输方式。
c)关闭USB端口(USB_close( ))。USB_close函数允许应用程序关闭一个端口,并关闭DMA通道。
d)对USB端口进行读操作(USB_read( ))。USB_read函数允许应用程序从输出端口或控制端口读取一定量的数据。
e)对USB端口进行写操作(USB_write( ))。USB_write函数与USB_read函数功能类似,允许应用程序写数据到输入端口或控制端口。
f)对USB设备进行I/O控制操作(USB_ioctl( ))。
2.2.2 USB中断服务程序
USB控制器产生单一中断,多个端口共享。每个端口产生ACK、NACK/ERROR中断;输出端口产生接收零字节包或短包中断;控制端口0接收设置包时产生中断;USB控制器产生USB事件中断,如帧起始(SOF)、挂起、恢复和复位。先识别发生USB中断的类型以清除中断产生的条件,再读USB状态寄存器,获取当前配置、接口或帧起始时间戳状态信息,最后向USB控制器消息队列或回调函数的接收消息队列发送中断消息。
2.2.3 USB标准事件处理程序
USB驱动器初始化后,启动USB标准事件处理程序负责处理枚举过程和异步USB事件。事件处理程序使用控制端口0,直到完成枚举过程。当USB应用程序处于非活动状态时,除控制端口0以外端口均不可访问。事件处理程序在端口0上执行控制操作,响应USB标准请求,并负责通知USB应用程序枚举完成和接口活动状态,USB事件通过回调接口传递到USB外设应用程序。当对USB端口枚举操作完成,USB应用程序就可打开并使用USB端口。
3 客户应用软件
开发系统应用软件的底层,需要极好的兼容性和稳定性。对于广大用户而言,与系统的交互是通过应用程序实现的,因此,如何设计出运行效率高、界面友好、稳定性高的应用程序是至关重要的因素。VC++是开发Windows应用程序的主流开发工具,充分利用它的面向对象特性的C++和功能强大的MFC来开发专业级的应用程序,MFC是一个强大的、扩展的C++类层次结构,它能使开发Windows 应用程序变得更加容易,而且在整个 Windows 家族中都是兼容的。LabWindows/CVI是以ANSI C为核心的交互式虚拟仪器开发环境,它将功能强大的C语言与测控技术有机结合,具有灵活的交互式编程方法和丰富的库函数。本设计就是采用Visual C++6.0和LabWindows/CV提供的Graph控件来开发应用程序的,应用程序的主要功能有:打开/关闭USB设备,检测USB设备,实现向USB设备发送指定数量的数据。
下面是各部分的一些代码及说明:
1)查找、打开USB设备
2) 线程(Thread)
线程就是程序中单独顺序的流控制。线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其他线程共享该进程所拥有的全部资源。图3是线程的状态转换图。
线程被分为两种:用户界面线程和工作线程(又称为后台线程)。本程序设计主要使用工作线程来执行数据的读写操作等,它与用户界面线程的区别是不用从CWinThread类派生来创建,对它来说最重要的是如何实现工作线程任务的运行控制函数。
对于工作线程来说,启动一个线程,首先需要编写一个希望与应用程序的其余部分并行运行的函数,如Fun( ),接着定义一个指向CWinThread对象的指针变量*pThread,调用AfxBeginThread(Fun,param,priority)函数,返回值赋给pThread变量的同时启动该线程执行上述Fun1( )函数,其中Fun是线程要运行的函数的名字,亦即控制函数的名字,param是准备传送给线程函数Fun的任意32位值,priority是定义该线程的优先级别,是预定义的常数,可参考MSDN。
本程序设计中的关键代码如下:
4 实例
本例中使用了LabWindows/CVI的Graph图形显示控件,用来显示各类信号波形,如普通连续波信号波形、单载频矩形脉冲信号波形、调频(非线性调频)脉冲压缩信号波形和二相编码波形等。图4为各类信号波形图。这些信号均为数据采集系统的测试信号,可由DDS(直接数字频率合成器)芯片AD9858实现。
将图4中各类信号波形的频率、宽度、幅度和载频信号频率等参数读出来,分别进行一些计算,将计算出的结果通过USB口传送到DDS来产生波形;其他公共参数如“DDS时钟频率”根据实际采用的时钟频率设置。比如线性调频信号,一般关心的是一个信号的带宽、起始频率和调频斜率这3个值。这3个参数其实就是信号波形中的起始频率fs、终止频率f0和持续时间t,它们是等价的,现在把这些参数的值从测试信号波形中读出来,然后代入下式:DFRRW(8(f0-fs)/t)231/SCLK[2]。式中:SCLK是DDS的时钟频率,它的值设为1 GHz;DFRRW为步进频率斜率控制字,它的值设为1,代表每8 ns更新一次。最后把计算出的DFTW(步进频率调节字)值通过USB口传送到DDS。
另外,二相编码的实现是通过控制DDS的POW(相位补偿字)来实现的,通过改变PS0和PS1的值,就可以改变信号的相位,而且相位的改变可以是绝对调相和相对调相。这里使用了4个工作组,其中2个工作组的POW为0,另外2个工作组中的POW为π。将上面测试信号波形中的参数读出来,代入POW=214W/360中,其中W为波形的相位值,再把计算出的POW值通过USB口传送到DDS即可。
5 结束语
本设计中使用的USB2.0作为接口部分,具有接口简单、传输速率高和即插即用等特点;应用程序充分利用VC的MFC框架的比较丰富的资源和LabWindows/CVI丰富的库函数,在进行数据采集和控制时,具有界面友好、兼容性和工作可靠、稳定等特点。经实际运用证明,本设计合理,使用方便,在数据采集过程中,很容易实现高速度传输数据并进行分析处理。
参考文献
[1]王奕.基于USB2.0的数据采集系统的设计与实现[J].电子工程师,2002,28(12):15-17.
[2]张永强,杨文革,张若禹.基于AD9858的线性调频源设计[J].国外电子元器件,2004(8):57-59.
[3]陈天华.面向对象程序设计与Visual C++6.0教程[M].北京:清华大学出版社,2006.
[4]胡晓军,张爱成.USB接口开发技术[M].西安:西安电子科技大学出版社,2005.
[5]黄维通.Visual C++面向对象与可视化程序设计[M].北京:清华大学出版社,2003.
大地测量模块的VC++程序实现 第9篇
1 设计框架
在程序设计的过程中,整个框架分为参数设置、测量菜单两个部分。参数设置为整个模块的基础,要进行后续的坐标转换工作,首先要采集与本地坐标系统有关的定位信息。在得到本地区的有关参数之后,需要考虑地方的椭球元素、投影方式、坐标系之间的变换等要素。在确定目标椭球的过程中,可以根据参考文献[1]中提出的确定E3椭球的方法来定义一个适合本地区的E3椭球。利用在单个参考点上WGS-84椭球面与投影面之间的垂向距离,根据式(1)即可求得E3椭球的长半径a3和偏心率e
1.1 椭球元素
有关大地测量模块的软件中,参考椭球的定义是不可缺少的,参考文献[3]中指出,椭球的形状和大小是由子午圈的五个基本参数决定的,分别为椭圆的长半轴a、短半轴b、扁率α、第一偏心率e和第二偏心率e′来决定。但实际上如果需要确定一个椭球,只需要上述五参数中任意两个就可以了。在程序设计过程中,采用了WGS-84等11种不同的参考椭球;同时支持用户自定义椭球的输入,可以输入计算得到的E3椭球元素。
1.2 投影方式
程序设计时将几种常用的投影方式均列在参数设置中,常用的几种投影方式有墨卡托投影(Mercator)、横轴墨卡托投影(Transverse-Mercator)、斜轴墨卡托投影(Oblique-Mercator)、兰勃特等角切圆锥投影(Lambert Conic Conformal-2SP),其中考虑到在通用横轴墨卡托投影对应的投影公式中,若把中央子午线长度比由1转换为0.999 6,即可成为高斯投影[1]。
1.3 七参数转换
进行两个空间坐标系之间的转换,常用的转换模型有布尔莎模型、莫洛金斯基模型以及范士模型,具体模型转换及公式推导可见参考文献[1],这三种转换模型有不同的前提条件,故七参数的数值是不同的,但坐标转换的最终结果却是一样的,因此在程序设计时只采用布尔莎模型求出相应参数,进行不同三维坐标系之间的转换。
2 利用VC++实现功能框架的部分函数
2.1 对Microsoft VC++6.0自带的CEdit类重载
由于在使用的过程中会涉及到很多角度问题,并且普通角度与经纬度的表示形式不同:例如界面上纬度的显示方式为“00-00-00.000 0N”,用通常的CEdit类来定义一个控件的时候,用户不仅仅需要输入度分秒等数字键,同时也要输入“-”“.”等字符。为了方便输入,在程序设计时,主要针对CEdit类的OnChar和OnKeyDown函数进行,对不同位置数字键以及W/E/N/S键按下时和“BackSpace”“Delete”按下时进行判断并重载。重载之后用户就只需在键盘上依照度分秒的次序按数字键,固定的数据就自动填充到默认的角度格式中,这样就极大方便了用户的输入。
2.2 四种投影的正反算函数
通用的正反算分别用如下方式定义:
void Projection—pros(double L,double B,double L0,double B0,double B1,double B2,double FE,double FN,CEllipse *elli,double k,int i,double * x,double * y,double *scale);
void Projection—cons(double x,double y,double L0,double B0,double B1,double B2,double FE,double FN,CEllipse *elli,double k,int i,double *B,double *L,double *scale)。
2.3 单点确定E3椭球元素
void GetE3element(double X,double Y,double Z,double h,double * a3,double *e2)。
3不同投影数据验证
从表1中可以看出,该模块经过投影之后得到的平面坐标与其他软件(hypack软件)投影坐标具有相同的数值,因此在各种投影方式的计算上,本模块的功能是完全可以实现的。
4结语
文中主要介绍了利用VC++6.0定义相应大地测量模块的函数,并详细列举了以实际数据对投影方式和七参数求解的验证,计算结果可以满足用户的需求。
摘要:主要介绍了利用VC++ 6.0对相关大地测量模块的设计,并对模块的功能进行了数据验证,验证结果表明设计的大地测量模块完全可以满足用户的需求,并给出了部分代码。
关键词:坐标转换,七参数,投影,VC++,E3椭球
参考文献
[1]施一民.现代大地控制测量[M].北京:测绘出版社,2003.
[2]朱卫东.建筑施工过程中的测量控制要点[J].山西建筑,2008,34(8):351-352.
VC程序设计 第10篇
1 工作原理
当发送端需要发送数据时,首先输入接收端的IP地址以及发送端使用的昵称,然后输入数据并单击发送。这样,数据便被写入发送端的SOCKET并且发送出去。当接收端检测到有数据到达时,就会自动调用线程函数从SOCKET中读出数据并显示给用户。这就是聊天工具的通信原理。其实现主要使用以下两种技术:
1)SOCKET:网络套接字,它在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有SOCKET接口的计算机通信。应用程序在网络上发送、接收的信息都通过这个SOCKET接口来实现。基于SOCKET的局域网通信是一种灵活的、易于实现的、低成本的方法。它可以运行在各种使用TCP/IP协议作为通讯协议的网络上。在应用开发中就像使用文件句柄一样,可以对SOCKET进行读,写操作。考虑到局域网网络质量较好,丢包率低,本系统采用基于UDP的数据报套接字(SOCK_DGRAM),它具有资源消耗小,处理速度快的优点。我们聊天用的ICQ和QQ就是基于UDP协议实现的。基于UDP的SOCKET编程模型如图1所示。
2)多线程:多线程是指一个程序中可以同时运行多个不同的线程来执行不同的任务。它通过提高资源利用效率来提高系统的效率。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。
用户的聊天过程其实就是发送和接收数据的过程,在程序设计方面也有多种处理方式。本程序中,在接收数据时,我们调用函数recvform()来实现,然而,默认情况下SOCKET工作在阻塞模式,如果在没有数据的情况下调用recvform()函数,则主线程将会被挂起,直到有数据为止。所以,我们就需要单独创建一个线程来接收数据。从而使发送和接收两个操作同步执行。
2 程序实现
建立一个基于对话框的MFC应用程序工程,名称为Chat。本程序是集服务器和客户端为一体的,在编写程序时,笔者将它分为接收端和发送端两部分来实现。程序运行如图2所示。
2.1 接收端
在接收端,首先连接套接字库,建立SOCKET。然后创建一个线程函数来接收数据。
2.2 发送端
发送端实现起来相对容易,因为SOCKET已经建立,只需要输入接收端的IP地址以及发送端使用的昵称,单击发送按钮便完成了发送操作。
3 结束语
本文详细介绍了局域网环境下聊天程序的开发过程,重点分析了基于UDP的SOCKET编程模型和多线程的综合应用。此外,程序只实现了聊天程序的主体功能,读者可以在此基础上根据自己的需要开发具体的应用程序,比如说聊天室程序,类似QQ的聊天工具等等。
摘要:在网络越来越发达的今天,聊天已经成了许多人生活中必不可少的一部分。基于这样的需求,该文使用VC++6.0作为开发平台,以Windows SOCKET为基础,采用多线程技术实现一个局域网聊天工具。
关键词:VC,SOCKET,多线程,UDP
参考文献
[1]蔡毓.UDP的Java聊天程序[J].电脑编程技巧与维护,2009(7).
[2]刘洪海.基于局域网的通讯的研究与实现[J].硅谷,2010(5).
天使布局,VC接盘 第11篇
雷军、钱永强、曾李青等天使大佬的动作,都在启明创投的严密关注之下。世纪佳缘、淘米网(下简称淘米)、呈天游、凡客诚品等,是他们追踪天使的现有成果,其中不乏明星项目。
反过来,天使也愿意跟投资机构保持良性互动。一个项目投下去,假使没有VC愿意来接盘,那会是很糟糕的局面。甚至有人说,一些天使是已经找到接盘的VC,再去投项目。天使与VC能否顺利对接,对创始人和企业意义重大。
当VC爱上天使
2007年,汪海兵等几个前腾讯员工拿了几百万元的天使投资,开始做主打儿童互联网社区概念的淘米。在他们产品还没完全成型的时候,启明创投的人在一个会上撞见了淘米的团队,过后把他们拉到了合伙人甘剑平的办公室。“我觉得团队不错,但是因为没有看到产品,我们不愿意投。”甘剑平告诉《创业邦》。
虽然这次见面没有达成投资,但是甘剑平知道了一个重要的信息——淘米的天使投资人是曾李青。他们不算陌生。在此之前,启明投资的呈天游已经让他与曾李青产生过交集。有了这个背景,甘剑平通过呈天游CEO齐海向曾李青传递了一个信息,“我们对淘米有兴趣,但是现在可能还比较早。”启明没有那么快下手的另一个原因是,淘米当时不缺钱。
几个月之后,淘米的产品准备上线。曾李青来了,他主动接触了多家VC,帮助淘米融资。启明创投是其中之一。他们对淘米兴趣浓厚,一是此前跟曾李青在呈天游上有过合作;二是跟淘米的团队有过接触,产品试运营阶段,各方面数据表现也不错。
为了撇开其他VC的围追堵截,启明下了点血本。500万美金的投资总额,他们破例向淘米预先支付50万美金,这是类似定金一样的可转债。在一般的投资项目中,不是普遍做法。甘剑平解释,“这是因为由天使出面会比较好。”
最后,淘米被启明创投拿下,双方很快签订了Term Sheet(投资条款清单)。“而且从价格上讲,曾总还是比较满意的。”甘剑平说。
2008年6月份,双方签订投资意向,淘米开始做海外架构,一直到2009年年底,整个投资过程才算完成。而此时的淘米,收入稳定,利润可观,“其实已经不太需要我们的钱了。”甘剑平坦诚,“我也要感谢他们,完全没有去更改我们当时的协议。这也是在信用上比较好的一个做法吧。”IPO之后,淘米的股价有所下跌,但是启明还是从中拿到了近7倍的投资回报。
在淘米这个项目上,启明是唯一一家VC,而且只投了一轮,企业就在海外上市。这种诱人而独享的甜头,让VC表示出极大的热情跟天使合作。看看启明的投资清单吧:有徐小平、钱永强、王强投资的世纪佳缘;曾李青名下的淘米、呈天游、贝瓦网;雷军的小米手机、凡客诚品。对于尚没有发生过交集的天使,只要有合适的机会,甘剑平都会毫不犹豫地抛出橄榄枝。
嗅觉灵敏的,决不止启明一家,IDG、红杉、君联资本等VC都跟天使们有着千丝万缕的联系。雷军的凡客、约客,薛蛮子的DX、中华学习网等项目,都能看到IDG的身影。
天使=背书
VC跟天使合作有几类:一类最常见,即VC从天使手里接盘,曾李青推荐给启明的淘米、贝瓦等。另一类是VC发现好的项目后,跟天使一起投资,像薛蛮子推荐给IDG后,一起进入的外贸B2C网站DX。大部分情况下,都是天使先进,VC跟上。
当然,也会有VC觉得项目不错,但是不太适合做A轮的时候,先推荐给天使。天使投资人凌代鸿透露,他差不多已经见过二三十个VC引荐来的项目,虽然他认可这种合作模式,但是目前为止,还没有投资成功。
不管采取哪种合作形式,在IDG资本合伙人张震的理解中,都没有什么区别,“一起投的话,肯定价格上比较接近,条款比较接近,权力也比较接近。不同轮投的话,价格上有一个溢价,只要是合理的我们都可以接受。”
一般情况下,天使拿的是同股同权,也可能有部分天使会要求拿优先股。张震说,“但是拿优先股要做海外结构比较复杂,时间也比较长,比较啰嗦,天使进入的比较早,资金量也比较小,花那么多时间和金钱去做这种复杂的结构,可能也不太好,所以他们往往采用比较简单的同股的方式。”
因此,当VC进来的时候,天使和创始团队的股份要同比例被稀释。任何公司法都不允许单方面稀释股份。当然,这是在创始团队占大股的理想状态下。“如果天使投得多一点,占30%,VC进来可能比较困难,那天使可能就以多少价格出让一定比例的股份给创始团队。这在天使投给项目的时候,双方已经约定好了。”凌代鸿说。
甘剑平也证实了这种做法,他说,有时候天使会以比较低的价格转给团队,或者主动拿出一部分自己的股份,放进期权池子,以奖励的方式回馈给后来加入的团队高层,帮助公司吸引人才。大多数情况下,天使是不会去拿期权的。“但这不是常规,也不是必须去做的。”
而VC之所以如此积极主动地从天使手里接盘,是有原因的。首先,大部分VC都很看重A轮,这是基金验明真身的心理过关。一位业内人士分析道,“假如一个基金早在A轮的时候就进入像Facebook这样伟大的企业,他会觉得很骄傲。”
其次,投资天使的项目,“成功的概率更高”。张震解释,很多天使投资人会有很多行业资源、人脉关系,他们在企业管理方面有独到的见解,请他们一起来做这些事情的话,基本上会对公司的经营战略有很多的帮助。
能被天使相中的公司,意味着已经经过一轮筛选,加上天使的背书作用,导致项目更容易获得VC青睐。“有些创业者我们并不了解,天使的背书会增加砝码。而且口说无凭,他们是拿着自己的钱来做背书的。”张震说。
甘剑平也持相同观点,“一般的创业者找VC,不一定找对门路,可能一开始更多地见一些投资经理,要见到像我这种投资委员会成员的机会是不多的。但是有天使强烈推荐的项目,尤其是像何伯权这样的,不管这个项目最终我们投不投,那我肯定是要给他足够的时间来看这个项目的。”
世纪佳缘就是一个典型案例。在他们准备A轮融资的时候,同行内的竞争对手珍爱、百合早已经拿到VC的钱。这两家不仅看上去跑得更快,名气要比世纪佳缘更为响亮。按照投资界的行规,这种情况下,鲜有人再愿意掏钱。
当它的天使投资人钱永强找到甘剑平的时候,甘顾虑重重。一方面整个行业的竞争状况对投资不利,启明内部分歧也比较大;另一方面是世纪佳缘背后强大的天使三巨头——徐小平、王强和钱永强。而且甘剑平跟钱永强早已相熟。在他担任空中网的CFO时,钱永强是该公司的独立董事。
考虑到钱永强的信用和他在行业里的地位,启明尝试找了第三方独立机构对几家婚恋网站进行了为期两个多月的调研。结果,世纪机缘的真实流量和产品,给了甘剑平很大的信心。2007年5月,世纪佳缘获得启明一千万美金的投资。2011年5月11日,登陆纳斯达克,成为国内第一家上市的婚恋网站。
“如果没有钱永强、徐小平他们,当初肯定很多人都不一定会去看世纪佳缘这个项目。”甘剑平说,“由于有了这些天使的背书,至少我愿意更多地去了解、去看那些数字。天使过去的运营经验和在互联网行业的人脉,肯定是给这个项目加了很多分。”
天使的另一个重要功能是帮助创业者融资。除了引荐投资人,还可以在VC进入的时候,辅助创业者进行谈判。凌代鸿给记者打开一封封跟被投企业的往来邮件,是关于Term Sheet的详细意见。他说,哪条可能会有风险或漏洞,要跟创业者说清楚。
基于VC的一种木马的设计 第12篇
1 系统总体设计
本程序利用VC6.0++这一集成开发平台, 在Windows环境下开发的一个基于远程控制的简单木马实现。木马编写采用C/S结构, 包括服务端Server和客户端Client。Client上单击每一个按钮, 就向Server端发送一个字母消息, Server端收到对应的字母消息后, 用相应的函数进行判断, 根据收到的具体字母, Server端调用相应的函数来具体实现每一个功能。系统客户端和服务端通信如图1所示。
程序中将对远程被控主机实现以下操作:获取远程被控计算机系统基本信息、锁定远程被控计算机的鼠标操作、锁定远程被控计算机的键盘操作、注销重启和关闭被控计算机、隐藏并开启被控计算机的任务栏、向被控计算机发送消息、获取并杀死远程被控计算机的进程。
2 具体功能实现
当Server先在被控计算机上启动以后, Client输入被控计算机IP如:192.168.0.5, 就可以连接上服务端, Client端单击获取信息按钮, Server端收到Client发过来的消息并响应, 然后Server端调用四个API函数:调用函数GetSystemInfo () 来返回当前系统的信息, 调用函数GlobalMemoryStatus () 来获得当前可用的物理和虚拟内存信息, 调用函数GetVersionEx () 来返回当前操作系统的版本信息, 调用函数GetSystemMetrics () 来返回与Windows环境有关的信息。Server通过调用以上函数, 得到系统消息, 并返回给Client.Client端收到Server返回的消息并显示在文本框中如图2所示。
当Client接收到Server返回的系统信息和进程信息以后, 单击Client上面的清除信息按钮就可以清除掉文本框中的信息。本功能不需要要Server和Client进行通信, client通过调用成员函数CClientDlg::OnClean () {}中的函数CClientDlg::OnClean () {}就可以实现。
注销、重启和关机这三个功能都是调用ExitWindowsEx函数实现, 所不同的是远程重启和关机所需要的权限较高, 需要把程序进程提权。远程重启和关机的实现比较类似, 只是ExitWindowsEx的调用不同 (重启EWX_REBOOT, 关机EWX_SHUTDOWN) 。服务端添加注销计算机函数LogOff () , 重启计算机函数Reboot () 和关机函数poweroff () 。
当server与client连接以后, 在client的文本框中写入“你中木马了”, 然后单击client的发送消息按钮, 就可以将“你中木马了”发送到server端。Client可以不断向server端发送消息, 来干扰server端用户的正常工作。Server接收到这条消息后通过调用API函数AfxMessageBox () , 将“你中木马了”显示到屏幕上。
对木马程序进行伪装主要是希望不被杀毒软件或网络防护程序找出来, 同时也不希望被有经验的用户一眼就看出来, 如此才能顺利的进行黑客任务。利用压缩工具对木马进行伪装易容是非常有技巧的应用。
对木马进行伪装易容的方法和工具有很多种, 但是有些木马使用用所工具后仍然会被杀毒软件查出来, 由于他们是木马伪装的帮凶, 因此杀毒软件把这些工具也列入追捕之列。这里用软件ASPack对服务端程序server.exe进行第一次压缩易容, 杀毒软件不会将此工具当作病毒。使用此工具的作用是其一改变杀server.exe的大小, 其二逃避杀毒软件查杀。
4 结论
本毕业设计主要实现用Visual C++6.0制作的一个基于远程控制模式的木马的设计。本木马主要是对远程控制模块的设计方法和设计环境进行详细的介绍。主要运用了MFC中的Socket编程技术设计的远程控制技术的木马, 实现的功能比较多, 主要起到了控制远程计算机的操作, 并妨碍远程计算机正常运行的作用。同时由于时间和水平的限制, 该程序还是有很多不足:1) .如果操作系统装有防火墙, 木马就无法运行。2) .该程序忽视了木马的植入技术的实现, 在功能设计方面还需要多加改进, 如:窃听键盘信息等, 这样可以使木马的功能更丰富。
摘要:目前, Internet已经得到非常广泛的使用, 但是同时, 各种黑客工具和网络攻击手段也层出不穷。黑客入侵给人们造成的各种损失也越来越大, 其中木马就是被广泛使用的黑客工具之一, 它对网络安全造成了极大的威胁。该文使用VC++6.0为开发平台设计的一个简单的木马程序, 主要实现了获取远程被控计算机的基本信息、锁定其鼠标和键盘、注销重启和关闭被控计算机、隐藏并开启其任务栏、向被控计算机发送消息等功能。
关键词:木马,远程控制,VC,WindowsSocket
参考文献
[1]程秉辉, 霍克.木马攻防全攻略[M].北京:中国铁道出版社, 2005.
[2]黄维通.Visual C++面向对象与可视化程序设计[M].北京:清华大学出版社, 2003.
[3]付慧青, 黎圣, 冯庆辉, 李刚.黑客日记[M].济南:山东电子音像出版社, 2005.
[4]孙鑫, 余安萍.VC++深入详解[M].北京:电子工业出版社, 2006.
[5]张仕斌, 谭三.网络安全技术[M].北京:清华大学出版社, 2004.
VC程序设计范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


