实验五 菜单、工具栏、状态栏程序设计

实验五   菜单、工具栏、状态栏程序设计
实验五   菜单、工具栏、状态栏程序设计

实验五菜单、工具栏、状态栏程序设计

【实验目的】

1、掌握主菜单程序设计方法

2、学会工具栏程序设计

3、掌握快捷菜单程序设计方法

4、学会增加状态栏窗格

【实验内容】

1、建立一个单文档应用程序,添加菜单显示,其中包含“文本”和“图形”2

个菜单项,分别输出文本和图形。

参考代码:

void CSDIDispView::OnText()

{

// TODO: Add your command handler code here

CClientDC dc(this);

dc.TextOut(20,20,"我已经学会了如何设计菜单程序!");

}

void CSDIDispView::OnPicture()

{

// TODO: Add your command handler code here

CClientDC dc(this);

CBrush *BrushOld,BrushNew;

BrushNew.CreateSolidBrush(RGB(255,0,0));

BrushOld=dc.SelectObject(&BrushNew); //选用画刷

dc.Rectangle(50,50,250,150);

dc.SelectObject(BrushOld); //还原画刷

BrushNew.DeleteObject(); //释放画刷

}

2、为上述应用程序添加菜单控制功能,选中“文本”时,“图形”菜单项无效;

当选中“图形”时,“文本”菜单项无效。

参考代码:

void CSDIDispView::OnText()

{

// TODO: Add your command handler code here

CClientDC dc(this);

dc.TextOut(20,20,"我已经学会了如何设计菜单程序!");

m_picture=false;

}

void CSDIDispView::OnPicture()

{

// TODO: Add your command handler code here

CClientDC dc(this);

CBrush *BrushOld,BrushNew;

BrushNew.CreateSolidBrush(RGB(255,0,0));

BrushOld=dc.SelectObject(&BrushNew); //选用画刷

dc.Rectangle(50,50,250,150);

dc.SelectObject(BrushOld); //还原画刷

BrushNew.DeleteObject(); //释放画刷

m_text=false;

}

void CSDIDispView::OnUpdateText(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->Enable(m_text);

}

void CSDIDispView::OnUpdatePicture(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

pCmdUI->Enable(m_picture);

}

3、为上述应用程序工具栏添加两个工具按钮,单击第一个按钮,在视图窗口中弹出“打开文件”对话框,单击第二个按钮,在消息框中显示文本信息。

参考代码:

void CXiTi4_3View::OnText()

{

// TODO: Add your command handler code here

MessageBox("我已经学会了使用默认工具栏了!");

}

4、创建一个单文档应用程序,在状态栏中显示鼠标光标的坐标。

(1)在MainFrm.h中将状态栏对象修改为public

public:

CStatusBar m_wndStatusBar;

(2)在MainFrm.cpp中添加状态栏窗格ID_INDICATOR_COR

(3)在串表中设置添加窗格的字符串格式

(4)添加WM_MOUSEMOVE消息及其相应函数

void CXiTi4_4View::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CString str;

CMainFrame *pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;

CStatusBar *pStatus=&pFrame->m_wndStatusBar;

str.Format("%d,%d",point.x,point.y);

pStatus->SetPaneText(pStatus->CommandToIndex(ID_INDICATOR_COR),str);

CView::OnMouseMove(nFlags, point);

}

5、建立一个单文档应用程序,添加“时间”主菜单项,包含时、分、秒三

个菜单项,分别在视图窗口中显示当前系统时间的时、分和秒。添加相

应的工具栏和快捷菜单,并在状态栏中显示系统时间。

(1)添加菜单项、添加工具栏

插入工具栏并编辑,添加工具栏类

定义工具栏对象:

CToolBar m_wndToolBar, m_wndToolBar1;

加载工具栏:

OnCreate( ):

if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))

{

TRACE0("Failed to create toolbar\n");

return -1; // fail to create

}

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

DockControlBar(&m_wndToolBar1);

设置时钟:

SetTimer(1,1000,NULL);

(2)添加状态栏

添加状态栏窗格:

ID_INDICATOR_TIME,

设置字符串格式

状态栏数据成员设置为公有成员

void CMainFrame::OnTimer(UINT nIDEvent)

{

// TODO: Add your message handler code here and/or call default

CTime time;

time=CTime::GetCurrentTime();//获得系统时间

CString str=time.Format("%H:%M:%S");//将系统时间转换成时:分:秒格式的字符串

m_wndStatusBar.SetPaneText(m_https://www.360docs.net/doc/fe15253200.html,mandToIndex(ID_INDICAT OR_TIME),str);//更新时间窗格显示的时间内容

CFrameWnd::OnTimer(nIDEvent);

}

void CMainFrame::OnClose()

{

// TODO: Add your message handler code here and/or call default

KillTimer(1);//关闭计时器

CFrameWnd::OnClose();

}

(3)添加菜单消息响应

定义CTime类的对象time

添加菜单消息响应函数:

void CSTimeView::OnSecond()

{

// TODO: Add your command handler code here

time=CTime::GetCurrentTime();//获得系统时间

CString str=time.Format("%S");//将系统时间转换成秒格式的字符串CClientDC dc(this);

dc.TextOut(100,100,"现在是"+str+"秒");

}

void CSTimeView::OnHour()

{

// TODO: Add your command handler code here

time=CTime::GetCurrentTime();//获得系统时间

CString str=time.Format("%H");//将系统时间转换成时格式的字符串CClientDC dc(this);

dc.TextOut(100,100,"现在是"+str+"时");

}

void CSTimeView::OnMinute()

{

// TODO: Add your command handler code here

time=CTime::GetCurrentTime();//获得系统时间

CString str=time.Format("%M");//将系统时间转换成分格式的字符串CClientDC dc(this);

dc.TextOut(100,100,"现在是"+str+"分");

}

(4)添加快捷菜单

设计快捷菜单

添加WM_ContextMenu消息响应函数:

void CSTimeView::OnContextMenu(CWnd*, CPoint point)

{

// CG: This block was added by the Pop-up Menu component

{

if (point.x == -1 && point.y == -1){

//keystroke invocation

CRect rect;

GetClientRect(rect);

ClientToScreen(rect);

point = rect.TopLeft();

point.Offset(5, 5);

}

CMenu menu;

VERIFY(menu.LoadMenu(CG_IDR_POPUP_STIME_VIEW));

CMenu* pPopup = menu.GetSubMenu(0);

ASSERT(pPopup != NULL);

CWnd* pWndPopupOwner = this;

while (pWndPopupOwner->GetStyle() & WS_CHILD)

pWndPopupOwner = pWndPopupOwner->GetParent();

pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,

pWndPopupOwner);

}

}

6、绘制正弦和余弦曲线,设置线型和颜色的变换。

1)

添加菜单

添加工具栏资源

添加快捷菜单资源

2)加载工具栏:

Mainfrm.h:

CToolBar m_wndToolBar1;

Mainfrm.cpp:

Oncreate:

if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))

{

TRACE0("Failed to create toolbar\n");

return -1; // fail to create

}

// TODO: Delete these three lines if you don't want the toolbar to

// be dockable

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

DockControlBar(&m_wndToolBar1);

3)加载快捷菜单:

添加视图类得wm_context消息

void CP1View::OnContextMenu(CWnd* pWnd, CPoint point)

{

// TODO: Add your message handler code here

CMenu menu,*pPopup;

menu.LoadMenu(IDR_MENU1); //加载快捷菜单

pPopup = menu.GetSubMenu(0);

CWnd* pWndPopupOwner = this;

pWndPopupOwner = pWndPopupOwner->GetParent();

//显示快捷菜单

pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x, point.y,pWndPopupOwner);

4)添加视图类的成员变量及成员函数

Cview.h

const double PI=3.1416;

public:

int m_able;

int m_typ;

int m_wid;

COLORREF m_col;

double calsin(int x);

double calcos(int x);

void drawcurve(CDC* pDC);

void drawline(CDC* pDC, int x1,int y1,int x2,int y2);

void drawaxis(CDC* pDC);

Cview.cpp

CCurveView::CCurveView()

{

// TODO: add construction code here

m_typ=0;

m_col=RGB(0,0,0);

m_wid=1;

m_able=0;

}

void CCurveView::OnDraw(CDC* pDC)

{

CCurveDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here drawcurve(pDC);

}

double CCurveView::calsin(int x)

{

double y;

y=sin(x*PI/180);

return y;

}

double CCurveView::calcos(int x)

{

double y;

y=cos(x*PI/180);

return y;

}

void CCurveView::drawaxis(CDC *pDC)

{

CString str;

CFont myfont,*oldfont;

myfont.CreatePointFont(80,"Arial",pDC);

oldfont=pDC->SelectObject(&myfont);

drawline(pDC,50,10,50,290);

drawline(pDC,45,150,780,150);

for(int i=50;i<780;i=i+90)

{

drawline(pDC,i,145,i,150);

str.Format("%d",i-50);

if((i-50)!=0) pDC->TextOut(i,155,str);

}

for(i=0;i<11;i++)

{

drawline(pDC,50,50+20*i,55,50+20*i);

str.Format("%.2f",1-0.2*i);

if(i!=5) pDC->TextOut(15,45+20*i,str);

else pDC->TextOut(15,45+20*i,"0");

}

pDC->SelectObject(oldfont);

myfont.DeleteObject();

}

void CCurveView::drawline(CDC* pDC,int x1, int y1, int x2, int y2) {

pDC->MoveTo(x1,y1);

pDC->LineTo(x2,y2);

}

void CCurveView::drawcurve(CDC* pDC)

{

drawaxis(pDC);

CPoint point[750];

CPen mypen,*oldpen;

mypen.CreatePen(PS_SOLID,m_wid,m_col);

oldpen=pDC->SelectObject(&mypen);

for(int i=0;i<722;i++)

{

point[i].x=i+50;

if(m_typ==1)

point[i].y=(int)(150-calsin(i)*100);

else if(m_typ==2)

point[i].y=(int)(150-calcos(i)*100);

}

for(i=0;i<721;i++)

drawline(pDC,point[i].x,point[i].y,point[i+1].x,point[i+1].y);

pDC->SelectObject(oldpen);

mypen.DeleteObject();

}

5)添加菜单消息响应函数

void CCurveView::OnColb()

{

// TODO: Add your command handler code here

m_col=RGB(0,0,255);

Invalidate();

void CCurveView::OnUpdateColb(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here pCmdUI->Enable(m_able);

if(m_col==RGB(0,0,255))

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

void CCurveView::OnColr()

{

// TODO: Add your command handler code here

m_col=RGB(255,0,0);

Invalidate();

}

void CCurveView::OnUpdateColr(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here pCmdUI->Enable(m_able);

if(m_col==RGB(255,0,0))

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

void CCurveView::OnCos()

{

// TODO: Add your command handler code here

m_typ=2;

m_able=1;

Invalidate();

}

void CCurveView::OnSin()

{

// TODO: Add your command handler code here

m_typ=1;

m_able=1;

Invalidate();

}

void CCurveView::OnWidsp2()

{

// TODO: Add your command handler code here

m_wid=2;

Invalidate();

}

void CCurveView::OnUpdateWidsp2(CCmdUI* pCmdUI) {

// TODO: Add your command update UI handler code here pCmdUI->Enable(m_able);

if(m_wid==2)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

void CCurveView::OnWidsp3()

{

// TODO: Add your command handler code here

m_wid=3;

Invalidate();

}

void CCurveView::OnUpdateWidsp3(CCmdUI* pCmdUI) {

// TODO: Add your command update UI handler code here pCmdUI->Enable(m_able);

if(m_wid==3)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

6)添加状态栏窗格

mainfrm.cpp:

ID_INDICATOR_PROMPT

Maifrm.cpp:

public:

CStatusBar m_wndStatusBar;

在View.h添加宏:

afx_msg void OnUpdatePrompt(CCmdUI* pCmdUI);

在view.cpp添加消息映射及消息处理函数:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_PROMPT, OnUpdatePrompt)

#include "MainFrm.h"

void CCurveView::OnUpdatePrompt(CCmdUI* pCmdUI)

{

// TODO: Add your command update UI handler code here

CMainFrame *pMainFrame=(CMainFrame*)AfxGetMainWnd();

CStatusBar *pStatusBar=&pMainFrame->m_wndStatusBar;

CString str,str1,str2,str3;

str2="宽1,";

str3="黑色";

str1=(m_typ==1)?"正弦,":"余弦,";

if(m_able==0) str="类型,线宽,颜色";

if(m_wid==2)

str2="宽2,";

else if(m_wid==3)

str2="宽3,";

if(m_col==RGB(255,0,0))

str3="红色";

else if(m_col==RGB(0,0,255))

str3="蓝色";

str=str1+str2+str3;

if(m_able==0) str="选择曲线类型";

pStatusBar->SetPaneText(1,str);

}

程序设计心得体会

程序设计心得体会 程序设计感受1 刚学习C#的时候,感觉很难,做的时候出现很多错误而且我是照着书打代码还有错误,那时的感觉是迷茫的。在学习的过程中,我还是坚持下来,虽然学的不是很好,但是慢慢就理解了,现在也不要仿照书打代码。现在讲讲做项目的感想。我们项目做不好也有一个小原因,是因为我们三个项目同时进行,而三个项目不同,在需求分析方面没有弄好,导致后面在做项目时,数据库出现了很多问题,所以我觉得现在我们项目不要做多,而是好好做一个项目,从需求开始就要做好每一步,到后面编程才不会出现特别多的错误。 不得不说:在老师检查完第一次之后,我去看了一下师兄做过的项目,就觉得自己这个项目相差太远了。我觉得我有以下几方面做不好:1.在刚上C#时老师叫我们现在就要做项目但我没有,一直等到老师快要检查时才急急忙忙的做。2.老师上完课,自己做完作业之后,没有好好的复习。其实我觉得三层架构也不难,三层结构就是主要调用了类,而类中定义了方法,归根到底我们还是引用了类中的方法实现它的功能,类就类似于C语言里的函数,因为在数据访问层要用到数据操作类所以要创建一个数据操作类。而我们建三层架构是为了就是倒觉得在表示层里实现一些功能能时要去分析,但是C#语言只学习过浅的知识,数据结构我们也没有学习所以分析起来就有点问题。但是所有问题都是觉得自己太懒,如果自己好好自学数据结构,学习离散数学,也许在分析功能模块会得到提高。所以本人决定寒假做一个像样的项目出来。 无论是学习还是做项目的过程中,耐心都要非常重要。有时出现错误,上网查了,自己又想了很久,又找同学讨论还是不能解决时就会有不想做的念头。因为自己曾经在大一时就是因为连关机都不会关,当时都吓到宿舍友了,觉得还是转专业好了。虽然转专业没有成功,

程序设计实训心得体会

程序设计实训心得体会 心得体会这种学习方法对于一个人来说也许是优秀的,但没有被推广普及的必要。因为学习的方法因人而异,方法的奏效是它与这个人相适应的结果,以下《程序设计实训心得体会》由心得体会栏目为您精心提供。 在软件实验室经过2个星期Jsp程序设计实训,从对软件开发没有太多经验的我掌握了更多的软件开发的方 法和技能,收获颇多。 经过这次理论学习,了解到要做好软件开发,要求 掌握的知识并不是只有编写代码方面的,网络、数据库、操作系统等的知识对做好项目开发是很有帮助的。这让 我明确了以后学习的目标,在不断学习软件开发的同时,也应该继续其他相关知识的深入学习。 实训期间经历的许许多多,给我们带来了很多很多 有实无形的东西,知识、友情以及团队开发的热情,快 乐无一不包围着我们。在这我很想感谢几个人,王璐老 师和班上一同参与这次实训的2位同学。王璐老师对我 们备至关心,不论在学习前后,都给予我们关怀不少, 并且王璐老师不愧是从事多年软件开发的专业人士,其 深厚的专业技能知识和丰富的经验令我等钦佩无比。对 于我们未出茅庐的大学生而言,遇到的问题多而复杂,

询问有经验的人,他们或许一句话就能解决问题,而自 己就得找资料或上网摸索可能要一两天,有时甚至绞尽 完脑汁都不得其解。用个词形容,老师的解答如醍醐灌顶,而对我们,则甘之如饴。 实训这段期间真的好累,尽管实验室给我们提供了 一个相当不错的上课学习环境,但是整天木木地待在实 验室面对毫无生气的荧屏,为 code而烦恼,为bug而郁闷,被文档所包围,随程序侵蚀。然而,这就是学习的 生活,既选之也则安之。忙碌的生活让我每天似乎没有 太多的时间去想一些其他的事,耐心的去调试,专注的 去编写更好的算法,沉浸充实和快乐之中。 更重要的是,两个星期的实训使我们明白我们所欠 缺的不仅仅是技术知识,更重要的是有一种处理事情的 方法、面对问题的心态和动手能力。面对完全陌生的新 知识、新技术、新项目以及整个IT行业,我们不能畏惧,要以一种积极的心态去面对,分析并抓住关键所在。因 为我们所即将应对的每一个项目都是既需要实际操作, 又需要详细规划的。作为组长,协调组员、激励其他组 员和积极参与项目开发是我每天必做的工作。我认为每 个人都应该在团队中做好自己应尽的职责,再优秀的个 人也可能完成一个即庞大又复杂的项目工作,我们必需 紧密的联合在一起,以一个团队的角色来面对。

网络程序设计实验报告-Winsock编程接口实验

网络程序设计 实验报告 实验名称: Winsock编程接口实验 实验类型:____验证型实验_____ __ 指导教师:______________________ 专业班级:_____________________ 姓名:_______________________ 学号:_____________________ 电子邮件:____________ 实验地点:______ _______ 实验日期2013 年 3 月29 日 实验成绩:__________________________

一、实验目的 ●掌握Winsock的启动和初始化; ●掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。 二、实验设计 由实验内容可以知道: 1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip https://www.360docs.net/doc/fe15253200.html, https://www.360docs.net/doc/fe15253200.html,,能输出https://www.360docs.net/doc/fe15253200.html,和https://www.360docs.net/doc/fe15253200.html,对应的IP地址列表。 2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC 地址。 首先要了解一些基本的知识gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的基本知识gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。 之后要根据内容画出函数流程图

三、实验过程(包含实验结果) 1.在实验过程中调用GetAdaptersInfo()时,出现了undeclared identifier的报错,原因是没有包含其头文件,之后进行一些修改解决了问题. 2.实验结果 3.选择查看本机信息 四、讨论与分析 1.Winsock初始化的作用是什么? 答:使用winsock初始化可加载winsock编程的动态链接库。

完成Java面向对象程序设计实验课的心得体会

Java面向对象程序设计实验课的心得体会经过这几周对Java面向对象程序设计的学习,让我更加了解到Java学习的重要性。 在实验课上,我们完成多个实验,在这个阶段的学习中,我从认识到熟悉,而后到能够自主运用。通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中我都尽力理解java编程思想、掌握基本技巧,尽量学到最多的知识。 学习程序设计的基本目的就是培养描述实际问题的程序化解决方案的关键技能,Java面向对象程序设计是一门实践性比较强的课程,在实际中,我们必须把理论和实践结合起来。在实验中,我们理解理论课上的知识,然后运用到实际的操作中,我们必须在现有的理论的基础上,进行实践。多次实验后,也让我看到了现在学习的一个很大弱点:只听不练,永远不会熟练运用;空记技巧,忽略思想,会在多变的习题中十分无奈。 Java思想:Java是一门面向对向语言,他定义一切都是对象面向对象,就是面对现实; 现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。

所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等 原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。 面向对象的编程思想就要想近世代数的分析思想,首先要确定“论域”,即工程所涉及到的所有的“对象”,然后要分类处理,把隶属同一类别的对象集合在一起(做成一个集合),定义他们之间的运算性质及可以进行的操作,这样就构建了一个类,当然以后用到这个类的对象时都要通过已经定义了的操作来完成各项功能,这就是常要求的类的“类的成员变量要通过共有函数来操作”。 我想真正的面向对象编程思想不应该是编程思想,应该是面向对象的分析方法才对! 我的理解: 1、将分析过程为抽象的过程:简言之:分成多个小问题(组成部分),

网络编程实验报告

实验一TCP Socket API程序设计 一、预备知识 1.网络编程基本概念 网络上的计算机间的通讯,实质上是网络中不同主机上的程序之间的通讯。在互联网中使用IP地址来标识不同的主机,在网络协议中使用端口号来标识主机上不同进程,即使用(IP地址,端口号)二元组。 套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄,通信时一个网络程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡相连的传输介质将这段信息发送到另一台主机的Socket中,以供其他程序使用。 图1-1 TCP通信流程 2.TCP通信流程 TCP程序是面向连接的,程序运行后,服务器一直处于监听状态,客户端与

服务器通信之前必须首先发起连接请求,由服务器接收请求并在双方之间建立连接后才可以互相通信。 二、实验目的 1.了解Winsock API编程原理; 2.掌握TCP Socket程序的编写; 3.了解C/S模式的特点; 4.学会解决实验中遇到的问题。 三、实验任务 使用Winsock API相关类实现TCP Socket通信程序,并能成功运行。 四、实验环境及工具 1. Windows2000/XP/7 2. Visual C++开发平台 3. Visual Studio2010 五、实验内容和步骤 参照《Visual C++网络编程教程》书中81页,TCP Socket API程序设计。 连接: void CChatClientDlg::OnConnect() { WSADATA wsd; //WSADATA结构 WSAStartup(MAKEWORD(2,2),&wsd); //加载协议,使用Winsock 2.2版 m_client = socket(AF_INET,SOCK_STREAM,0); //创建流式套接字 //服务器地址 sockaddr_in serveraddr; UpdateData(); if(ServerIP.IsBlank()) { AfxMessageBox("请指定服务器IP!"); return; } if(sPort.IsEmpty()) { AfxMessageBox("请指定端口!"); return; }

编程实训心得体会范文3篇

编程实训心得体会范文3篇 编程技术的学习是一个分阶段不断提高的过程,因此教材的内容应按不同的学习阶段进行合理的分配。下面是OK带来的编程实训心得体会范文,欢迎大家阅读。 经过五天的Java实训,感触很深,收获也很大,对自己的缺点也有了很多的认识,回首本学期JAVA学习,重点还是在学习概念等一些常识性的东西,关于类型、变量、接口、输入输出流、分析异常、抛出异常,后期主要是小程序运用,Gui界面设计和事件。 在我学习的语言中,我自己认为Java是一门比较强大的面向对象的编程语言,不仅仅是因为它的跨平台型还有它的较强的实用性,强悍的嵌入性。 本次实训主要是针对我们对项目流程不熟悉和对整体项目的把握不清楚,学习数据库的设计和表的建设以及表与表之间的联系,还有一些代码的编写,这些都是我们所不熟悉的也是我们最薄弱的部分。 通过这一周的实训,虽然实训的时间不长,但是总体上收获挺大的,当我们正式准备学习实训java编程技术时,让我感到非常高兴,因为java一直学的是课本知识,所以实训对于我来说是必须要

学会熟练操作的。当然开始学习后也并非是想象中那样顺利,开始的学习让我异常感到学习任务的艰巨,因为学习中我遇到了很多以前未曾遇到的难点,有时后也难免会失去耐心,但是,通过老师的指导,自己的努力的练习,我顺利的化解了一道道的障碍。克服了Java学习上的一道道难关,现在自己已经基本掌握了java的基础知识。 有些知识点以前没有学过,但我也没有去研究,实训时突然间觉得自己真的有点无知,虽然现在去看依然可以解决问题,但要浪费许多时间,这一点是我必须在以后的学习中加以改进的地方,同时也要督促自己在学习的过程中不断的完善自我。另外一点,也是在实训中必不可少的部分,就是同学之间的互相帮助。所谓”当局者迷,旁观者清”,有些东西感觉自己做的是时候明明没什么错误,偏偏程序运行时就是有错误,让其他同学帮忙看了一下,发现其实是个很小的错误。所以说,相互帮助是很重要的一点,这在以后的工作或生活中也是很关键的。俗话说:“要想为事业多添一把火,自己就得多添一捆材”。 此次实训,我深深体会到了积累知识的重要性。在实训当中我们遇到了不少难题,但是经过我们大家的讨论和老师细心的一一指导,问题得到了解决。两个月的实训结束了,收获颇丰,同时也更深刻的认识到要做一个合格的程序员并非我以前想像的那么容易,

程序设计心得体会

程序设计心得体会 【收获及体会】 通过两个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。是啊,读了那么多年的书,课程设计可是第一次。看着劳动成果,很欣慰!虽然这不是我一个人做的,是大家的共同努力得来的。 也许完成不了!两个星期前我们这样说,完成他没问题!一个星期前我们这样说,现在我们可以说:哈哈,完成啦! 刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于画图方面的,可是这点小进展远远不够,这只是一个小小的开始。下一步是上网查,找到了些与我们题目相似的,那时我们每个人都很高兴,可是那还不是我们要的,于是又上网查到了些有关的函数等等,终于在我们大家的努力下,完成了这个程序。 虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。做完这个程序最大的收获就是感受到了集体的力量,当然个人的智慧也是很重要的哦! 做完这个课程设计,我们的自信一下子提高了,我们也会写程序了;尽管对于有些人这种程序会很简单,可对我们c语言初学者来说,已经很不容易了。这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊! 姜* 【收获及体会】 忙碌了一个多星期,在大家的共同努力下,我们总算将此程序设计出来。尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。 另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。为了解决此。类问题,最好就是多向同学,老师请教,不要怕难为情。尤其是老师,评他们多年的编写程序的经验,要解决我们的问题,对他们来说只是small case。 在设计这个程序时,我们刚开始是根据老师给我们提供的资料,用画图以及循环将框架设计出来,但是接下去便无从下手了,计算是个关键和难点,我们也查了相应的资料,但是它上面用得是坐标来做的,所以为了方便设计程序,我们也改为坐标来做的,这样计算问题解决了。接下去就是按键问题,我们的资料是用鼠标做的,所以关于按键这个函数就只能我们自己设计,还好手头有类似的资料,经过自己的反复尝试以及与与同学的讨论,这也不难,最好还是被我们搞定了。最后就是闪烁,这个设计的方法很死板,都一个类型,就是算坐标比较烦琐,要确定好它的位置,但是这些只要你自己愿意去尝试,问题都可以迎刃而解的。从这一个多星期的设计过程中,我看到了大家的拼搏与努力,也让我知道团队精神得难能可贵,尽管一年下来大家不怎么有多大接触,但是彼此之间的友谊已经在我们心里扎根生底,在遇到问题时,我们会共同进退,每个人都很慷慨不会因为是通过自己艰辛劳动设计出来的东西而不准他人剽窃了。 总之,这次设计程序让我受益良多,我会好好珍惜像这种难得的机会共11页,当前第1页

【26-编辑菜单栏】什么是菜单栏和工具栏

【26-编辑菜单栏】什么是菜单栏和工具栏 编辑菜单栏“编辑”菜单“编辑”菜单中的一些命令主要是对文件进行编辑的,比如复制、粘贴、填充、描边等。“编辑”菜单是photoshop软件操作中最为常用的菜单之一。 1.“还原”命令这个命令用来将操作进行还原,它的快捷键是CTRL+Z,当时它只能还原一次,如果想要尽可能多地还原操作步骤,那么可以按CTRL+ALT+Z键。 2.“剪切”命令当画面中存在选框的时候,这个命令能将画面中选框中的部分进行裁切,下面我们通过一个练习来讲解。 一:打开这一张图片,然后用选区工具(M)选出一个选区。 二:选择编辑>剪切(CTRL+X),这样选框中的部分就被剪切掉了,如下图。 再选择编辑>粘贴(CTRL+V)就可以把剪切的部分粘贴到画面中。 3.“拷贝”和“粘贴”命令这两个命令基本上是组合来使用的,在画面中制作选框后,选择编辑>拷贝(CTRL+C)命令将其复制然后再选择编辑>粘贴(CTRL+V)将复制的部分粘贴到画面中。与前面的”剪切”命令不同的是,剪切后的图片在选框中的部分就没有了,

当时使用“拷贝”和“粘贴”命令后,原图片是完整的。所以大家要注意这两个的区别。 4.“填充”命令“填充”命令的功能与工具箱中的“油漆桶”工具基本相同,只不过它将一些主要的命令和选项集中在一起。如图:在下拉列表中可以选择很多选项,我们可以选择这些相应的选项来得到不同的效果,不过最为常用的就是前两个选项。其他的大家自己尝试吧。。。。 在“模式”下拉列表中我们可以选择填充的模式,这与前面讲过的混合模式是相同的。如“不透明度”用于改变填充颜色的透明程度。 5.“描边”命令描边命令用于对选框或者对象进行描边,下面通过一个实例来讲解下一:新建文件,然后使用矩形选框工具(M)在画面中做出选框。 二:选择编辑>描边命令,按照下图设置。 三:完成后得到如下效果。 6“自由变换”命令“自由变换”命令是我非常喜欢的一个命令,它灵活多变,用户可以完全地自行控制,做出任何变形。 自由变换:编辑——自由变换(快捷键:Ctrl+T)辅助功能键:Ctrl、Shift、Alt。 其中,Ctrl键控制自由变化;Shift控制方向、角度和等比例放大缩小;Alt键控制中心对称。

算法程序设计实验报告

程序设计》课程设计 姓名:王 学号:20100034 班级:软件工程00 班 指导教师:王会青 成绩: 2010年 6 月 实验一.构造可以使n 个城市连接的最小生成树 专业:__软件工程___ 班级:__软件姓名:_王___ 学号:_20100034 完成日期:_2010/6/26 ________ 一、【问题描述】给定一个地区的n 个城市间的距离网,用Prim 算法或Kruskal 算法建立最小生成树,并计算得到的最小生成树的代价。 1 城市间的道路网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道

路,则将相应边的权值设为自己定义的无穷大值。 2 显示出城市间道路网的邻接矩阵。 3 最小生成树中包括的边及其权值,并显示得到的最小生成树的总代价。 4 输入城市数、道路数→输入城市名→输入道路信息→执行Kruskal 算法→执行Prim 算法→输出最小生成树 二、【问题分析】 1. 抽象数据类型结构体数组的定义: #ifnd ef ADJACENCYMATRIXED// 防止该头文件被重复引用 #define ADJACENCYMATRIXED // 而引起的数据重复定义 #define INFINITY 32767 // 最大值∞ #define MAX_VERTEX_NUM 20 // 最大顶点个数 typedef int VRType; // 权值,即边的值 typedef char InfoType; // 附加信息的类型,后面使用时会定义成一个指针 typedef char VertexType[MAX_VERTEX_NUM]; // 顶点类型 typedef enum {DG=1, DN, UDG, UDN} GraphKind; //{ 有向图,有向网,无向图,无向网} typedef struct ArcCell { VRType adj; //VRType 是顶点关系类型。对无权图,用1 或0 表示相邻否;对带权图,则为权值类型。 InfoType*info; // 该弧关系信息的指针

网络编程实验报告

网络编程技术实验报告 一实验目的: 网络编程技术是计算机科学与技术专业、网络工程专业、软件工程专业的一门专业基础课程。本课程以Java技术为主讲授,Java语言是当前最流行的网络编程语言。本课程是一门实用性和综合运用性都很强的课程,实践教学环节是教学过程中必不可少的重要内容。通过实验,让学生熟悉JDK中的主要内容,掌握用JDK调试和运行程序的方法,掌握网络编程的基本思想和开发方法、面向对象编程的思想,JA V A中的基本方法和技术,能够熟练使用JA V A设计、编写程序,特别是基于TCP/IP的Socket 编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。通过实验,提高学生使用Java语言程序设计开发的能力,提高应用面向对象技术分析和解决实际问题的能力,并在此基础上强化学生的实践意识、提高其分析问题、解决问题的能力以及动手能力和创新能力。 二实验要求 要求学生熟悉JDK中的主要内容,掌握用JDK调试和运行程序的方法,掌握网络编程的基本思想和开发方法、面向对象编程的思想,JAVA中的基本方法和技术,能够熟练使用JAVA设计、编写程序,特别是基于TCP/IP的Socket编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。要注意培养学生良好的编程习惯,自始至终贯彻课程中所介绍的程序设计风格。为保证尽量在统一安排的上机时间内完成程序设计任务,学生应事先做问题分析,并做静态检查。学生应记录实验中所遇到的问题,并写出详细的实验报告。课前准备上机程序,上机认真调试,课后撰写实验报告,实验报告包括实验目的、实验内容、源程序、实验结果及分析。

. 实验一java基本语法 实验目的: 了解Java的数据类型,掌握各种变量的声明方式,理解运算符的优先级,掌握Java基本数据类型、运算符与表达式,掌握顺序结构、选择结构和循环结构语法的程序设计方法。 实验要求: 1、编写一个声明Java不同数据类型变量的程序。 2、编写使用不同选择结构的程序。 3、编写使用不同循环结构结构的程序。 实验内容: 1、编写一个声明Java不同数据类型变量的程序。 public class DataTypes { public static void main(String args[]) { byte b=127; short s=32767; int i=2147483647; long l=9223372036l;//为什么long表示的数比Int还小? char c='c'; float f=1.23F; double d=0.9E-3; boolean bool=true; System.out.println(" b="+b); System.out.println(" s="+s); System.out.println(" i="+i); System.out.println(" l="+l); System.out.println(" c="+c); System.out.println(" f="+f); System.out.println(" d="+d); System.out.println(" bool="+bool); }

Excel 2007 与 Excel 2003 菜单工具栏比较

一.Excel 2007 与Excel 2003 菜单工具栏比较 相信很多人在刚接触到Excel 2007时,都有种无从下手的感觉,特别是原先在Excel 2003或以前的版本中熟悉的菜单和工具栏不见了,好多命令都不知道“隐藏”到哪儿去了。下面,我们对Excel 2003和Excel 2007进行比较,看看Excel2003中的菜单和工具栏在Excel2007中是如何组合的。 Excel 2003的基本界面 图1.1:Excel2003界面 如上图1.1所示,为大家很熟悉的Excel2003及以前版本的界面。 Excel 2007的界面 图1.2:Excel2007界面

Excel2007操作将功能进行逻辑分类,分别放在相应的“带形功能区”中,共分9类,即开始、插入、页面布局、公式、数据、审阅、视图、开发工具、加载项。每个功能区中又分成几块小的区域,分别集中相应的功能命令按钮。同时,一些命令按钮旁有下拉箭头,含有相关的功能选项。在区域的右下角,有扩展箭头可显示该区域功能的对话框。 下面将详细地进行比较 (1)Office按钮 这两项调到了07版的 【页面布局】 相当于03版的 [工具]->[选项] Office 07版Office按钮Office 03版文件选项 单击Office按钮,则显示与文件操作相关的命令,相当于以前版本中的“文件”菜单中的大多数内容,但变化还是比较大的,在新版本中移除了“页面设置”和“打印区域”,增加了“Excel选项”。 如果对方的版本过低又没安装补丁的话是开不打新版的文件的,我们可以在“另存为”里选择“Excel 97-2003工作簿”另存一个副本给他。 打印预览,在“打印里”,我们最好将“打印预览”和“快速打印”添加到快速访问工具栏里,这样方便我们工作。 设置访问密码有两个方法:1.在“准备”里的“加密文件”可以设置,但只可以设置访问密码,不能设置修改密码。 2. 在“另存为”界面“保存”旁边有一个“工具”按钮,点击“工具”按钮右边的小三角,在弹出菜单中选择“常规选 项”。这时我们就可以在“常规选项”中设置密码了。设置“打开权限密码”后,他人可以用这个密码阅读这个Excel文件。设置“修改权限密码”后,他人可以用这个密码打开和修改这个Excel文件。 一般我们发布的知通都以PDF文件格式发布,这时我们可以点击“发送”再选择“PDF电子邮件附件”。

程序设计实训的个人心得体会

程序设计实训的个人心得体会 在软件实验室经过2个星期Jsp程序设计实训,从对软件开发没有太多经验的我掌握了更多的软件开发的方法和技能,收获颇多。 经过这次理论学习,了解到要做好软件开发,要求掌握的知识并不是只有编写代码方面的,网络、数据库、操作系统等的知识对做好项目开发是很有帮助的。这让我明确了以后学习的目标,在不断学习软件开发的同时,也应该继续其他相关知识的深入学习。 实训期间经历的许许多多,给我们带来了很多很多有实无形的东西,知识、友情以及团队开发的热情,快乐无一不包围着我们。在这我很想感谢几个人,王璐老师和班上一同参与这次实训的2位同学。王璐老师对我们备至关心,不论在学习前后,都给予我们关怀不少,并且王璐老师不愧是从事多年软件开发的专业人士,其深厚的专业技能知识和丰富的经验令我等钦佩无比。对于我们未出茅庐的大学生而言,遇到的问题多而复杂,询问有经验的人,他们或许一句话就能解决问题,而自己就得找资料或上网摸索可能要一两天,有时甚至绞尽完脑汁都不得其解。用个词形容,老师的解答如醍醐灌顶,而对我们,则甘之如饴。 实训这段期间真的好累,尽管实验室给我们提供了一个相当不错的上课学习环境,但是整天木木地待在实验室面对毫无生气的荧屏,为 code而烦恼,为bug而郁闷,被文档所包围,随程序侵蚀。然而,

这就是学习的生活,既选之也则安之。忙碌的生活让我每天似乎没有太多的时间去想一些其他的事,耐心的去调试,专注的去编写更好的算法,沉浸充实和快乐之中。 更重要的是,两个星期的实训使我们明白我们所欠缺的不仅仅是技术知识,更重要的是有一种处理事情的方法、面对问题的心态和动手能力。面对完全陌生的新知识、新技术、新项目以及整个IT行业,我们不能畏惧,要以一种积极的心态去面对,分析并抓住关键所在。因为我们所即将应对的每一个项目都是既需要实际操作,又需要详细规划的。作为组长,协调组员、激励其他组员和积极参与项目开发是我每天必做的工作。我认为每个人都应该在团队中做好自己应尽的职责,再优秀的个人也可能完成一个即庞大又复杂的项目工作,我们必需紧密的联合在一起,以一个团队的角色来面对。 总之,这次实训为我们以后从事软件开发工作打下了良好的专业基础,为我们的进一步学习提高打下了扎实的理论基础。 Jsp程序设计实训在不知不觉中就结束了,我感觉自己还有好多理论知识要学,还有好多的技术不懂呢!这是我大学以来第三次实训,每次实训我都感觉学到了好多东西!因为是一天到晚的不间断训练,所以记的会非常牢固。不像平时上课,每上两次的理论课却只有90分钟的实际操作。在课上,做的练习小项目都不复杂,可轮到做大的项目实训并且要求我们独立完成的时候,,就不那么顺手了,一个个技术问题,一个个bug接踵而至!我很感谢学校有实训这样的安排,把我们这一学期学的东西系统的集中的进行训练,对我们计算机水平

网络编程实验报告

【实验目的】 掌握基于多线程并发服务器的基本设计框架和实现方法。 【实验性质】 综合性实验 【实验器材与所需软件】 计算机、交换机、windows操作系统、java集成开发环境 【实验学时】 8学时 【实验内容】 实现一个多线程并发服务器(服务器功能自选),要求该服务器可以体现出同时为多个客户端服务的特性。 【实验过程与步骤】 实验设计并实现了一个基于多线程并发服务器的网络聊天室工具。 1,需求分析: 工具采用了Client/Server结构,将聊天室划分为两个子程序:客户端子程序、服务器端子程序。 ●客户端程序: 实现客户端与服务器端进行连接,并可与服务器端进行实时通讯。 ●服务器端: 实现建立与多个客户端程序之间的连接,管理连接并能够通过多线程技术同时与多个客户端进行实时通讯。 2,系统设计: 系统的设计中,客户端与服务器端的连接,通过TCP/IP网络建立,并依托Socket进行实时通讯。系统中,各个模块之间的关系如下图所示:

上图中,显示同一服务器,通过网络可以同时与多个客户端程序建立连接并实现实时通讯功能,通讯流程如下图所示: 根据图示,客户端与服务器之间通过Socket()进行实时通讯,通讯步骤是:服务器监听、客户端发出请求、服务器接受、建立连接、交互通讯、关闭连接。另外,由于聊天室工具必须实现多客户端同时连接通讯的要求,因此,在服务器端设计时考虑采用多线程技术,每个服务器拥有多个服务线程,每个线程负责与一个客户端进行连接通讯,从而达到一个服务器同时与多个客户端并发通讯的效果。 3,系统实现: 在网络聊天室的最终实现时,设计服务器类、服务器线程类、客户端类以及系统界面类: ●服务器类 Class Server: 主要负责管理系统中的服务器线程,通过线程管理与客户端之间的连接及通讯,是服务器的主要管理端。 ●服务器线程类 Class ServerThread: 线程类中,实现了具体的服务器与客户端之间一一对应的连接关系,并通过Socket与客户端进行实时通讯。 ●客户端类 Class Client:

WIN7中任务栏,菜单栏和工具栏的基本设置

WIN7中任务栏,菜单栏和工具栏的基本设置 WIN7的任务栏和XP的任务栏相比有很大的区别,下面我们就来看看WIN7中的变化。 WIN7的任务栏中没有了快速启动栏,这是因为WIN7中增加了一项新的功能,可以将桌面快捷方式附到任务栏,其方法很简单,只要将你想要附到任务栏的桌面快捷方式托到任务栏即可,如果要将其从任务栏移除则只要在选中后“右键”则会显示“解除任务栏锁定”,单击即可。 有些时候我们会发现有些朋友的电脑的任务栏显示在电脑的右面或者上面,也有一些同学的电脑的任务栏就没有,这是怎么设置的呢?在任务栏空白处右键,会看到下图

我们只要将“锁定任务栏”前的勾去掉,那么我们就可以将任务栏托动到电脑的上下左右了,如果要隐藏任务栏则将下面的“自动隐藏任务栏”前的勾给勾上就可,要显示任务栏时只要我们将鼠标移动到最下方就会再次显示。“屏幕上的任务栏位置”也可以设置任务栏的位置,在此就不多说了。

“在任务栏按钮”我们可以作一些设置,具体操作很简单,在此就省略了。 WIN7中新增了AERO PEEK预览功能,有些时候我们会发现我们在任务栏里面的“使用AERO PEEK功能”前面的勾我们也勾上了,可就是没法使用预览功能,这很可能是我们还有一个地方忘了设置。具体方法是“计算机——属性——高级系统设置——高级——性能——设置——视觉效果”

将启用AERO PEEK前的勾给勾上就可以了。 有些时候我们会发现我们电脑里面的开始菜单里面的一些程序或项目不见了(如有些电脑里的开始菜单没有运行项),这时候我们就要到“开始菜单”项里设置了,在开始菜单里我们单击“自定义”会看到下图

MATLAB课程设计实验体会

课程设计实验体会 学生姓名:李祥胜 学生学号:20120704 专业班级:光信息科学与技术 指导老师:miss Chen 学院:信息工程学院 题目: MATLAB学期实验总结

MATLAB概念及介绍 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB集成环境主要包括五个部分:MATLAB语言、MATLAB工作环境、句柄图形、MATLAB数学函数库和数学建模、小波分析、MATLAB API(App lication Program Interface)。MATLAB语言是以数组为基本数据单位,包括控制流程语句、函数、数据结构、输人输出及面向对象等特点的高级语言。利用SIMULINK对系统进行仿真与分析,在进入虚拟实验环境后,不需要书写代码,只需使用鼠标拖动库中的功能模块并将它们连接起来,再按照实验要求修改各元器件的参数。通过虚拟实验环境建立实验仿真电路模型,可使一些枯燥的电路变得有趣味,复杂的波形变得形象生动,使得各种复杂的能量转换过程比较直观地呈现。 1.1、MATLAB语言特点及优势 1.1.1、语言特点 MATLAB被称为第四代计算机语言,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB的最突出的特点就是简洁。MATLAB用更直观的、符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。MATLAB 给用户带来的是最直观、最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点。 (1)语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用其丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。 (2)运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短,具体运算符见附表。 (3)MATLAB既具有结构化的控制语句(如for循环、while循环、break语句和if语句),又有面向对象编程的特性。 (4)语法限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。 (5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。

网络编程实验报告

网络编程实验报告

网络编程 课程设计报告 题目: 基于Linux网络聊天室的设计姓名: 陈佳悦陈雄兰 学院: 信息科学技术学院 专业: 网络工程 班级: 网络工程102 学号: 19310213 19310214 指导教师: 薛卫职称:副教授

基于Linux网络聊天室的设计 摘要:本课程设计是在Linux环境下基于Socket进行开发的。系统服务器端和客户端组成。服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端。通过多路复用的子进程实现服务端与多个客户端之间的数据发送与接收。可以在单机上开辟两个窗口分别运行客户、服务器的程序。本方案经gcc 调试器调试成功,可以在机网络聊天中使用。 关键词:网络聊天;linux ;socket 1.相关概念及技术 1.1 网络套接字编程 1.1.1套接字基本概念 套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。 1.1.2 套接字工作原理 要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

VC对话框程序添加目录菜单、工具条和状态栏

一、引言 对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。虽然在V isual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但V isual C++ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。 二、工具条的实现过程 MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC 对其做了过多的封装,以至无法了解内部的一些核心技术。因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI 应用程序接口来实现的。在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。但MFC也为其留有接口:CWnd窗口类提供的GetSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。由于对话框和状态栏属于程序界面的一部分,需要程序启动时就显示出来,因此获取句柄的代码和后面创建显示工具条、状态栏的全部代码都应当放在对话框初始化消息WM_INITDIALOG的响应函数OnInitDialog()中进行: HWND hDlg=GetSafeHwnd(); HINSTANCE hInstance=AfxGetInstanceHandle(); 对于待添加的工具条按钮可以根据情况细分为两种: 一种是Windows标准的一些工具条按钮比如打开文件、打印预览、在线帮助等等,这类工具条按钮可以直接使用预定义好的按钮图标的ID号,在VC自带的CommCtrl.h头文件中有详细定义; 另一种就是用户自己添加的工具栏按钮,只能由用户在资源视图中为其指定相应的图标。不论是那种工具条按钮的创建都是通过对TBBUTTON结构的设置来决定每一个工具条按钮的状态,对于第一个填充好的工具条按钮可以用CreateToolbarEx()来直接将其加入到工具条上,并返回指向工具条的窗口句柄,而对于以后工具条按钮的添加则只能通过向工具条发送TB_ADDBUTTONS消息来实现: …… //填充工具条按钮结构: TBBUTTON ptoolbar[30]={{STD_HELP, //指定Windows的标准帮助图标 MU_ONE, //工具条按钮的ID TBSTA TE_ENABLED, //可用状态 TBSTYLE_BUTTON, //指定创建一个可以下按的按钮 0, //保留,由应用程序定义该参数意义 0}, //按钮字串索引 //创建一个分割按钮用的竖线 {0,0,TBSTA TE_ENABLED,TBSTYLE_SEP,0,0}};

程序设计的心得体会

程序设计的心得体会 在这为期半个月的时间内,通过我们小组各成员之间的相互讨论和合作,我们完成了 学生信息管理系统的程序设计,更值得高兴的是我们的程序得到了大家的喜爱,在每次的 简报中都得到了较好的成绩。 虽然在上个学期中,我们已经学习了《C语言程序设计》这门课,但是我所学的知识 最多也就是在做作业的时候才会用到,平时没有什么练习的机会,这次的课程设计是我第 一次通过自己构思,和同学讨论并且不断查阅资料来设计一项程序。这次设计,不仅巩固 了我以前所学的知识,还让我对c语言有了更深一步的了解,掌握了更多的技巧和技能。 C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重 要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较 强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足, 并在实践中解决这些问题,不断提高自己转化知识的能力。 在我们小组有解决不了的问题时,我们会主动查阅相关的资料,或向其他同学询问, 这不仅丰富了我们的知识,还增进了我们同学之间的友谊。为了增大信息的安全性,需要 用文件来存储信息,由于我们在上课时不注重对文件的运用,所以在这方面有较大的困难。我先将书本认认真真地一遍,又做了一下课后习题来验证和增进自己的理解,终于,经过 我们的不懈努力,我们小组的程序有了突破,成功地实现了用文件来保存并查看学生的信息。 这次设计中,我的收获还有就是学会了用流程图来表达自己的想法,并根据流程图来 逐步实现程序的功能。开始的时候,我画流程图很是困难,需要一个多小时才能清楚的根 据自己的想法画出图来,后来画多了,就更加了解它的功能,十分得心应手,能够比较快 而准确的画出来。 在这次课程设计中,我们首先对系统的整体功能进行了构思,然后用结构化分析方法 进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽 可能的将模块细分,最后在进行函数的调用。我们在函数的编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间的调用包括递归调用。由于我们 是分工编写代码,最后需要将每个人的代码放到一起进行调试。因为我们每个人写的函数 的思想不都一样,所以在调试的过程中也遇到了困难,但经过我们耐心的修改,终于功夫 不负有心人,我们成功了! 在参考书上,我们不仅参考了曾经学过的高敬阳主编的《c语言程序设计》,还找到 了由谭浩强主编的第三版《c语言》进行参考。 当然,我们的程序还有一些不完善的地方,比如说,当输入的数据不符合我们定义的 数据的格式的时候,程序会出现一些错误,有时会出现主菜单的死循环;在一次程序运行中,只能行使一种权限,要想再行使另一种权限,就只能退出程序,然后再运行程序。

相关文档
最新文档