c++技术文档报告_第1页
c++技术文档报告_第2页
c++技术文档报告_第3页
c++技术文档报告_第4页
c++技术文档报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用文档实验一技术开发文档1.需求分析(1)提示输入并显示输入的点的坐标。(2)已知直线上两点的坐标,采用两点式求直线方程,并显示直线长度。(3)输入圆的半径,根据圆周长、面积公式,求取并显示圆的周长、面积。(4)据上已输入两点为坐标求取矩形的面积。(5)以上输入的一点作为抛物线的焦点,再输入任意x值,求取对应的纵坐标与抛物线P值,确定抛物线的标准式。2.概念抽象(1)定义点类,在点类中定义构造函数Point(),析构函数~Point()、virtualShow、doubleGetX()、doubleGetY()五个函数与变量x,y,xx,yy,。(2)定义线类,在线类中定义input()、doubleGetLineLengh()、virtualShow()三个函数与变量Pa、Pb、pa、pb。(3)定义圆类,在圆类中定义Radius变量以及Circle()、~Circle()、doubleGetCircleS()、doubleGetRadius()、virtualShow()五个函数与Radius、Rr变量。(4)定义矩形类,在矩形类中定义Rect()、doubleGetRectS()、virtualShow()三个函数与变量Pc、Pd、pc、pd。(5)定义抛物线类,在抛物线类中定义Parabola()、virtualShow()两个函数与变量Pe、Pf、pe、pf、x、y、p。注:函数定义及功能详见附件。3.类的分析及说明实验二技术开发文档1.需求分析(1)定义AD、DA板卡类,完成对板卡的封装;(2)实现单通道和多通道的单点采集、多点采集、大批量采集;(3)实现单通道和多通道的单点输出、多点输出;2.现实世界(1)AD采集PCI8735板卡AD采集过程为创建设备对象、判断创建设备对象是否成功、用户从键盘选择输入量程、设置硬件参数、初始化AD、判断AD初始化是否成功、数据采集、电压转换并显示。定义AD板卡类,定义了ADinit()、ADSet()、ADRead()、ReleaseAD()四个函数来从而完成对板卡的封装。在主函数中直接调用几个函数即可。注:函数定义及具体应用详见附件3.类的分析及说明附件一点、线、圆、矩形、抛物线的对象定义源代码#include<iostream>usingnamespacestd;#include<cmath>classPoint{public:doublex; doubley; Point(){} Point(doublexx,doubleyy){x=xx;y=yy;} ~Point(){} doubleGetX(){returnx;} doubleGetY(){returny;} virtualShow() { cout<<"点坐标为("<<GetX()<<","<<GetY()<<")"<<endl; }private: doublexx; doubleyy;};//线由点派生classLine:publicPoint{public: PointPa; PointPb; Line(){} Line(Pointpa,Pointpb){Pa=pa;Pb=pb;} doubleGetLineLengh()//获取直线长度 { //doubleLx=(Pb.GetX()-Pa.GetX())*(Pb.GetX()-Pa.GetX()); //doubleLy=(Pb.GetY()-Pa.GetY())*(Pb.GetY()-Pa.GetY()); returnsqrt((Pb.GetX()-Pa.GetX())*(Pb.GetX()-Pa.GetX())+(Pb.GetY()-Pa.GetY())*(Pb.GetY()-Pa.GetY())); } virtualShow() { cout<<"线段ab的长度为"<<GetLineLengh()<<endl; }private: doublepa; doublepb;};//圆由点派生classCircle:publicPoint{ public: doubleRadius; Circle(){} Circle(doubleRr){Radius=Rr;} ~Circle(){} doubleGetCircleS(){return(double)2*3.14*Radius;} doubleGetRadius(){return(double)3.14*Radius*Radius;} virtualShow() { cout<<"圆半径为"<<Radius<<endl; cout<<"圆周长为"<<GetCircleS()<<endl; cout<<"圆面积为"<<GetRadius()<<endl; } private: doubleRr; };//矩形由线派生classRect:publicPoint{public: PointPc; PointPd; Rect(){} Rect(Pointpc,Pointpd){Pc=pc;Pd=pd;} doubleGetRectS() { returnabs((Pd.x-Pc.x)*(Pd.y-Pc.y)); } virtualShow() { cout<<"矩形面积为"<<GetRectS()<<endl; }private: doublepc; doublepd; };/*矩形由线派生classRect:publicPoint{public:}*///抛物线由点派生classParabola:publicPoint{public: PointPe; PointPf; Parabola(){} Parabola(Pointpe,Pointpf){Pe=pe;Pf=pf;} virtualShow(){ cout<<"焦点:("<<Pf.GetX()<<","<<Pf.GetY()<<")"<<endl; cout<<"输入任一点横坐标x的值:x="; cin>>x; y=sqrt(4*Pf.GetX()*x); p=2*Pf.GetX(); cout<<"x对应的两点纵坐标的值为:y="<<"±"<<y<<endl; cout<<"抛物线对应的:p="<<p<<endl; }private: Pointpoint1,point2; doublex; doubley; doublep; doublepf; doublepe;};voidmain(){ Pointp1;Pointp2; Circlecircle; cout<<"请输入p1点坐标"<<endl; cin>>p1.x; cin>>p1.y; p1.Show(); cout<<"请输入p2点坐标"<<endl; cin>>p2.x; cin>>p2.y; p2.Show(); Lineab(p1,p2); ab.Show(); cout<<"请输入圆半径"<<endl; cin>>circle.Radius; circle.Show(); RectRect(p1,p2); Rect.Show(); ParabolaParabola(p1,p2); Parabola.Show();}}附件二AD采集源代码---------------------------------AD.h--------------------------------#ifndef_AD_#define_AD_#include"windows.h"#include"PCI8932.h"classCAD{public: CAD(); intADinit(HANDLEhDevice); voidADSet(HANDLEhDevice); intADRead(HANDLEhDevice); voidReleaseAD(HANDLEhDevice);private: PCI8932_PARA_ADADPara; //doubleVOLTin; //doubleDataout;};#endif---------------------------------AD.cpp------------------------------#ifndef_AD_CPLUSPLUS_#define_AD_CPLUSPLUS_#include"AD.h"#include"windows.h"#include"PCI8932.h"#include"stdio.h"#include"conio.h"#include"math.h"intSelectGroundingMode(void);intSelectInputRange(void);intSelectGains(void);#defineAD_DATA_LEN1024*8USHORTADBuffer[AD_DATA_LEN];DWORDdwError;charstrErrorMsg[256];CAD::CAD(){ memset(&ADPara,0,sizeof(ADPara));}intCAD::ADinit(HANDLEhDevice){ DWORDdwError; charstrErrorMsg[256]; if(hDevice==INVALID_HANDLE_VALUE) { dwError=PCI8932_GetLastErrorEx("PCI8932_CreateDevice",strErrorMsg); printf("dwError=%x,%s\n",dwError,strErrorMsg); return0; } return1;}voidCAD::ADSet(HANDLEhDevice){ memset(&ADPara,0,sizeof(ADPara)); printf("pleaseinputtheNOofthefirstchannelandthelastchannel:\n"); scanf("%d",&ADPara.FirstChannel); scanf("%d",&ADPara.LastChannel); if(ADPara.FirstChannel<0) { printf("thewrongChannel,inputagain\n"); scanf("%d",&ADPara.FirstChannel); } if(ADPara.FirstChannel>ADPara.LastChannel) { printf("theLastChannelmustbemorethantheFirstChannel\n"); scanf("%d",&ADPara.LastChannel); } printf("pleasesettherangeoftheinputvoltage,thegroudingmodeandthegains:\n"); ADPara.InputRange=SelectInputRange(); ADPara.GroundingMode=SelectGroundingMode(); ADPara.Gains=SelectGains(); if(0==ADPara.GroundingMode) { if(ADPara.LastChannel>15) printf("thewronglastchannel,inputagain\n"); } else { if(ADPara.LastChannel>7) printf("thewronglastchannel,inputagain\n"); } if(!PCI8932_InitDeviceAD(hDevice,&ADPara)) { dwError=PCI8932_GetLastErrorEx("PCI8932_CreateDevice",strErrorMsg); printf("dwError=%x,%s\n",dwError,strErrorMsg); getch();// PCI8932_ReleaseDeviceAD(hDevice);// PCI8932_ReleaseDevice(hDevice); }}intCAD::ADRead(HANDLEhDevice){ LONGnReadSizewords; LONGnRetSizewords=0; intReadCount=0; intChannelCount=ADPara.LastChannel-ADPara.FirstChannel+1; BOOLbFirstWait=TRUE; nReadSizewords=512-512%ChannelCount; ReadCount=16*ChannelCount; USHORTADData; floatfVolt; while(!kbhit()) { bFirstWait=TRUE; if(bFirstWait) { printf("请等待,您可以按任意键退出,但请不要直接关闭窗口强制退出...\n"); bFirstWait=FALSE; } if(!PCI8932_ReadDeviceAD(hDevice,ADBuffer,nReadSizewords,&nRetSizewords)) { dwError=PCI8932_GetLastErrorEx("PCI8932_ReadDeviceAD",strErrorMsg); printf("dwError=%x,%s\n",dwError,strErrorMsg); getch(); ReleaseAD(hDevice); } intnADChannel=ADPara.FirstChannel; for(intIndex=0;Index<ReadCount;Index++) { if(kbhit())ReleaseAD(hDevice); ADData=ADBuffer[Index]&0x1FFF; ADData=ADData/pow(2,ADPara.Gains); switch(ADPara.InputRange) { casePCI8932_INPUT_N10000_P10000mV://-10V-+10V fVolt=(float)((20000.00/8192)*ADData-10000.00); break; casePCI8932_INPUT_N5000_P5000mV://-5V-+5V fVolt=(float)((10000.00/8192)*ADData-5000.00); break; casePCI8932_INPUT_N2500_P2500mV://-2.5V-+2.5V fVolt=(float)((5000.00/8192)*ADData-2500.00); break; casePCI8932_INPUT_0_P10000mV://0V-+10V fVolt=(float)((10000.00/8192)*ADData); break; default: printf("InputRangeError...\n"); getch(); return0; } //printf("CH%02d=%6.2f\t",nADChannel,fVolt); printf("CH%02d=%d\t",nADChannel,ADData); nADChannel++; if(nADChannel>ADPara.LastChannel) { nADChannel=ADPara.FirstChannel; printf("\n"); } } Sleep(200); } return0;}voidCAD::ReleaseAD(HANDLEhDevice){ PCI8932_ReleaseDeviceAD(hDevice); PCI8932_ReleaseDevice(hDevice);}intSelectGroundingMode(void){ LONGGMode;Repeat2: printf("\n"); printf("0.thesingle-endedGroudingMode\n"); printf("1.thedoubleendedGroudingMode\n"); printf("PleaseSelectGroudingMode[0-1]:");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论