C++软件开发技术.docx

上传人:b****8 文档编号:9820043 上传时间:2023-05-21 格式:DOCX 页数:35 大小:1,003.63KB
下载 相关 举报
C++软件开发技术.docx_第1页
第1页 / 共35页
C++软件开发技术.docx_第2页
第2页 / 共35页
C++软件开发技术.docx_第3页
第3页 / 共35页
C++软件开发技术.docx_第4页
第4页 / 共35页
C++软件开发技术.docx_第5页
第5页 / 共35页
C++软件开发技术.docx_第6页
第6页 / 共35页
C++软件开发技术.docx_第7页
第7页 / 共35页
C++软件开发技术.docx_第8页
第8页 / 共35页
C++软件开发技术.docx_第9页
第9页 / 共35页
C++软件开发技术.docx_第10页
第10页 / 共35页
C++软件开发技术.docx_第11页
第11页 / 共35页
C++软件开发技术.docx_第12页
第12页 / 共35页
C++软件开发技术.docx_第13页
第13页 / 共35页
C++软件开发技术.docx_第14页
第14页 / 共35页
C++软件开发技术.docx_第15页
第15页 / 共35页
C++软件开发技术.docx_第16页
第16页 / 共35页
C++软件开发技术.docx_第17页
第17页 / 共35页
C++软件开发技术.docx_第18页
第18页 / 共35页
C++软件开发技术.docx_第19页
第19页 / 共35页
C++软件开发技术.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++软件开发技术.docx

《C++软件开发技术.docx》由会员分享,可在线阅读,更多相关《C++软件开发技术.docx(35页珍藏版)》请在冰点文库上搜索。

C++软件开发技术.docx

C++软件开发技术

 

软件开发技术

 

专业:

检测技术及自动化装置

 

题目:

一.利用VC6.0编写一个能对字符串按任意字符进行分割的函数,并将该函数以动态链接库形式进行导出,并写一个基于对话框的程序进行测试

二.用VC编写一个时钟的ActiveX控件,该控件具有以下功能

1.时钟显示功能格式为:

年月日时:

分:

秒,每秒钟刷新一次

2.每分钟产生一个分钟事件

3.每小时产生一个小时事件

4.返回当前系统时间功能

5.返回控件创建到现在的秒数

6.时间相加功能(DATEADD)

7.时间相减功能(DATEDIFF)

三.用VC编写一个客户端和服务器端(采用TCP,或UDP协议,具体的实现协议自定),具有以下的系统维护功能:

1.客户端输入命令"ShowAllProcess"列出服务器所在计算机上的所有运行的进程名和进程号,将这些信息返回给客户端。

2.客户端通过输入”ShowProcess程序名“将服务器上对应的程序是否在运行的结果返回给客户端。

3.客户端通过输入”KillProcess程序名“将服务器上对应的程序删除,并将成功与否的结果返回给客户端。

4.客户端通过输入“CreateProcess程序名”将启动服务器上对应的程序,并将成功与否的结果返回给客户端。

5.客户端通过输入"ReStartComputer“将服务器计算机重启

6.客户端通过输入"ShowSysTemInformation”将服务器上的CPU内存和硬盘使用率返回给客户端

要求:

写出每道题的解题思路,主要函数说明,运行或测试结果。

即将你的思考过程和运行结果清楚地写出来。

例如:

1、字符串按任意字符的分割

(1)任意字符分割的解题思路即实现原理为:

(2)Split函数代码

(3)测试程序的设计

(4)运行结果

一.利用VC6.0编写一个能对字符串按任意字符进行分割的函数

1.任意字符分割的解题思路即实现原理为:

定义split函数对字符串进行分割,先检测字符串中的“:

”分隔符,把检测到“:

”分隔符的字符串先后分开输出,再检测字符串中的“”分隔符,把检测到“”分隔符的字符串先后分开输出,通过反复调用split分割函数实现对输入字符串的分割。

2.Split函数代码

#include

#include

#include

voidsplit(char*src,constchar*separator,char**dest,int*num)

{

char*pSeparator,*pStart,*pEnd;

unsignedintsep_len;

intcount=0;

if(src==NULL||strlen(src)==0)return;

pSeparator=(char*)malloc(16);

if(pSeparator==NULL)return;

if(separator==NULL||strlen(separator)==0)strcpy(pSeparator,"");/*oneblankbydefault*/

elsestrcpy(pSeparator,separator);

sep_len=strlen(pSeparator);

pStart=src;

while

(1)

{

pEnd=strstr(pStart,pSeparator);

if(pEnd!

=NULL)

{

memset(pEnd,'\0',sep_len);

*dest++=pStart;

pEnd=pEnd+sep_len;

pStart=pEnd;

++count;

}

else

{

*dest=pStart;

++count;

break;

}

}

*num=count;

if(pSeparator!

=NULL)free(pSeparator);

}

intmain()

{

charsrc[]="Accsvr:

tcp:

-h127.0.0.1-p20018";

char*dest[128];

char*dest2[128];

intnum=0,num2=0;

inti,j;

split(src,":

",dest,&num);

for(i=0;i

{

printf("|%s|\n",dest[i]);

split(dest[i],"",dest2,&num2);

for(j=0;j

{

printf("|%s|\n",dest2[j]);

}

}

return0;

}

3.分割字符串函数以动态链接库DLL形式进行导出,以一个基于对话框的程序进行测试

1.新建Win32Dynamic-LinkLabrary,名称split3

建立一个简单的工程,其余默认,完成。

2.添加函数

在头文件StdAfx.h添加输出导数声明

#defineEXPORT__declspec(dllexport)

extern"C"EXPORTvoid__stdcallsplit(char*src,constchar*separator,char**dest,int*num)

;

3.在源文件SourceFiles中添加典型的输出模块定义split3.def

LIBRARYdh.dll

EXPORTS

split=split

 

4.在源文件SourceFiles中添加分割函数

void__stdcallsplit(char*src,constchar*separator,char**dest,int*num)

{

char*pNext;

intcount=0;

if(src==NULL||strlen(src)==0)return;

if(separator==NULL||strlen(separator)==0)return;

pNext=strtok(src,separator);

while(pNext!

=NULL)

{

*dest++=pNext;

++count;

pNext=strtok(NULL,separator);

}

*num=count;

}

5.点击F7编译

生成连接调用DLL所需的实际代码文件split3.dll和导入库文件split3.lib

6..点击MicrosoftVisualC++6.0,新建MFCAppWizard(exe),工程名称split4,选择基本对话框,完成。

创建对话框。

7.点击查看,建立类导向,将IDC_EDIT1和IDC_EDIT2分别添加成员变量,并命名为m_edit1和m_edit2,OK。

8.在声明区添加指针声明

typedefint(_stdcall*funspliter)(char*src,constchar*separator,char**dest,int*num);

 

9.在voidCSplit4Dlg:

:

OnButton1()中添加完整的加载DLL,调用DLL中的导出函数,显示在对话框,卸载DLL的函数,之后编译。

HMODULEhMod=LoadLibrary("split3.dll");

if(hMod!

=NULL)

{

funsplitershowspliter;

showspliter=(funspliter)GetProcAddress(hMod,"split");

if(showspliter)

{

charsrc[100];

//="tttttttttttt*uuuuuuuuuuuuuu"/*(char*)m_edit1.GetBuffer(0)*/;

UpdateData(TRUE);

intstrLength1=m_edit1.GetLength()+1;

//charchArray[100];

memset(src,0,sizeof(bool)*100);//将数组的垃圾内容清空.

strncpy(src,m_edit1,strLength1);

char*dest[128];

char*dest2[128];

intnum=0,num2=0;

inti,j;

charddd[100];

UpdateData(TRUE);

intstrLength2=m_edit2.GetLength()+1;

memset(ddd,0,sizeof(bool)*100);

strncpy(ddd,m_edit2,strLength2);

showspliter(src,ddd,dest,&num);

for(i=0;i

{

//printf("|%s|\n",dest[i]);

AfxMessageBox(dest[i]);

/*

showspliter(dest[i],"\t\n",dest2,&num2);

for(j=0;j

{

//printf("|%s|\n",dest2[j]);

AfxMessageBox(dest2[j]);

}*/

}

}

}

FreeLibrary(hMod);

}

10.将split3中的实际代码文件split3.dll和导入库文件split3.lib,复制到split4的根目录。

4.运行结果

分割情况:

二.用VC编写一个时钟的ActiveX控件

1.时钟的ActiveX控件的解题思路即实现原理为

新建MFCAppWizard(exe)工程,自动生成一个简单对话框,其中应包含字符串输入框,分隔符输入框,分割后字符串输出框,确认按钮。

相应的函数应在确认按钮的响应函数中被调用。

通过#pragmacomment(lib,"dd.lib")告诉执行文件动态链接库路径。

并声明所以调用的函数。

2.函数代码及测试程序的设计

1.建立新的MFCActiveXControlWizard工程,默认完成。

2.编译后对Debug文件中生成的Bsm_Clock.ocx控件进行注册,点击运行后输入regsvr32/uC:

\Users\lenovo\Desktop\C++练习\BSM_Clock\Debug\BSM_Clock.ocx注册成功(WIN7操作系统需要在安全模式下注册)

3.运行

4.选择ActiveXControlTextContainer后确定,出现测试模板后选择Edit->Insertnewcontrol

5.在OnDraw中填写输出系统当前时间(年月日时分秒)的函数

voidCBsm_ClockCtrl:

:

OnDraw(CDC*pdc,constCRect&rcBounds,constCRect&rcInvalid)

{

//TODO:

Replacethefollowingcodewithyourowndrawingcode.

pdc->FillRect(rcBounds,CBrush:

:

FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));

//pdc->Ellipse(rcBounds);

CTimetime=CTime:

:

GetCurrentTime();

CStringstr=time.Format("%Y年%m月%d日%H:

%M:

%S");

pdc->TextOut(0,0,str);

}

设置动态时间,对定时器进行设置,右键点击CBsm_ClockCtrl选择AddWindowsMseeageHandler->分别选择WM_CREATE和WM_TIMER->AddHandler

在OnCreate下填写SetTimer(1,1000,NULL);对时间每秒更新一次,在OnTimer下填写InvalidateControl();重绘整个窗口,完成对动态实时时钟的设置。

6.每分钟产生一个分钟事件,每小时产生一个小时事件

点击View->ClassWizard->ActiveXEvents,建立Stock标准事件,Bsm_NewMinute,Bsm_NewHour

在OnDraw中CTimetime=CTime:

:

GetCurrentTime();下添加

if((0==time.GetSecond())&&(0!

=time.GetMinute()))

{

FireBsm_NewMinute();

}

if((0==time.GetSecond())&&(0==time.GetMinute()))

{

FireBsm_NewHour();

}

产生一个分钟事件

产生一个小时事件

7.返回空间创建到现在的时间

为BSM_Clock控件添加一个自定义的方法,用来显示控件运行时间。

点击View->ClassWizard->Automation->AddMethod->如图,OK

在BSM_ClockCtl.h头文件中添加定义:

#include//

time_tbegin,end;

doubleduration;

在intCBSM_ClockCtrl:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)控件开始时计时,填写:

begin=clock();得到开始时间。

在执行方法voidCBSM_ClockCtrl:

:

RunningTime()时,获得结束时间,并输出“结束—开始”的数值,在其下填写:

CStringstr=_T("");

end=clock();

duration=double(end-begin)/CLOCKS_PER_SEC;

str.Format(_T("%lf"),duration);

AfxMessageBox(str);

编译运行。

添加BSM_Clock控件

得到BSM_Clock控件的运行时间,以秒为单位。

8.返回当前系统时间,时间相加,减功能

对BSM_Clock控件特性进行设置,如图

双击“显示现在时间”按钮,在voidCBSM_ClockPropPage:

:

OnBSM_Button1()下填写函数:

CTimetime=CTime:

:

GetCurrentTime();

CStringstr=time.Format("%Y年%m月%d日%H:

%M:

%S");

AfxMessageBox(str);

得到系统当前时间,以消息信息返回。

创建编辑框,点击View->ClassWizard->MemberVariables>IDC_EDIT->如图,OK

将输入变量放在BSM_time中。

双击“日期之和”在voidCBSM_ClockPropPage:

:

OnBSM_Add()下添加,将输入时间和现在时间相加的函数:

this->UpdateData

(1);

intfirst=m_BSM_time.Find('-',0);//第一个数字与第二个数字间以“-”分割

intsecond=m_BSM_time.Find('-',first+1);

intyear=atoi(m_BSM_time.Left(4));

intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));

intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));

CTimeendtime=CTime:

:

GetCurrentTime();

intdY=endtime.GetYear()+year;

intdM=endtime.GetMonth()+month;

intdD=endtime.GetDay()+day;

CStringstr;

str.Format("日期之和:

%d年%d月%d日",dY,dM,dD);

MessageBox(str);

双击“日期之差”在vvoidCBSM_ClockPropPage:

:

OnBSM_Sub()下添加,将输入时间和现在时间相加的函数:

this->UpdateData

(1);

intfirst=m_BSM_time.Find('-',0);

intsecond=m_BSM_time.Find('-',first+1);

intyear=atoi(m_BSM_time.Left(4));

intmonth=atoi(m_BSM_time.Mid(first+1,second-first+1));

intday=atoi(m_BSM_time.Mid(second+1,m_BSM_time.GetLength()-second-1));

CTimebegintime(year,month,day,0,0,0);

CTimeendtime=CTime:

:

GetCurrentTime();

intdY=year-endtime.GetYear();

intdM=month-endtime.GetMonth();

intdD=day-endtime.GetDay();

CStringstr;

str.Format("距输入日期相差:

%d年%d月%d日",dY,dM,dD);

MessageBox(str);

3.运行结果

添加BSM_Clock控件->Edit->控件特性

三.用VC编写一个客户端和服务器端,采用TCP具有系统维护功能:

1.任意字符分割的解题思路即实现原理为:

,首先确定采用TCP通信方式通信,采用完全C语言,先对TCP的socket服务器端进行创建编译,再对客户端。

使服务器与客户端的连接,彼此接收传递数据,再通过进程列表的快照,调用分隔符函数等完成。

2.函数代码及测试程序的设计:

第一部分:

完成服务器与客户端的连接

1.首先确定采用TCP通信方式通信,采用完全C语言

2.先对TCP的socket服务器端进行创建编译。

新建Win32ConsoleApplication工程,命名为BSM_TCPSrv;

再新建源文件BSM_TCPSrv,完成。

3.编写服务器端程序

#include//加载头文件

#include//加载标准输入输出头文件

voidmain()

{

WORDwVersionRequested;

WSADATAwsaData;

interr;

intret;

charszMessage[100];

charrecvBuf[100];

charsendBuf[100];

wVersionRequested=MAKEWORD(1,1);//1.1版本的套接字

err=WSAStartup(wVersionRequested,&wsaData);

if(err!

=0)

{

return;

}

if(LOBYTE(wsaData.wVersion)!

=1||HIBYTE(wsaData.wVersion)!

=1)

{

WSACleanup();//必须调用这个函数清除参数

return;

}//如果不是1.1的则退出

以上为加载套接字库网络的必须函数

======================================

SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字

SOCKADDR_INaddrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

//转换Unsignedshort为网络字节序的格式

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

//将套接字绑定到一个本地地址和端口上

listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求

SOCKADDR_INaddrClient;//定义地址族

intlen=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化

//等待并接收数据

SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);

//accept的第三个参数一定要有初始值.//等待客户请求到来当请求到来后,接受连接请求,返回一个亲的对应于此连接的套接字

sprintf(sendBuf,"Welcome%stoBsm`STcpSrv",inet_ntoa(addrClient.sin_addr));

//用返回的套接字和客户端进行通信

send(sockConn,sendBuf,strlen(sendBuf)+1,0);

while

(1)

{

ret=recv(sockConn,szMessage,100,0);

szMessage[ret]='\0';

printf("Received[%dbytes]:

'%s'\n",ret,szMessage);

closesocket(sockConn);//关闭套接字.等待另一个用户请求

}

}

说明:

首先运行服务器端程序等待客户端的命令,当连接成功后显示

4.对TCP的socket客户端端进行创建编译。

在原有工程中新建Win32ConsoleApplication工程,命名为BSM_TCPClient;

再新建源文件BSM_TCPClient,完成。

5.编写客户端程序

#include

#include

voidmain

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2