面向对象编程设计报告.docx

上传人:b****1 文档编号:13880121 上传时间:2023-06-18 格式:DOCX 页数:21 大小:137.11KB
下载 相关 举报
面向对象编程设计报告.docx_第1页
第1页 / 共21页
面向对象编程设计报告.docx_第2页
第2页 / 共21页
面向对象编程设计报告.docx_第3页
第3页 / 共21页
面向对象编程设计报告.docx_第4页
第4页 / 共21页
面向对象编程设计报告.docx_第5页
第5页 / 共21页
面向对象编程设计报告.docx_第6页
第6页 / 共21页
面向对象编程设计报告.docx_第7页
第7页 / 共21页
面向对象编程设计报告.docx_第8页
第8页 / 共21页
面向对象编程设计报告.docx_第9页
第9页 / 共21页
面向对象编程设计报告.docx_第10页
第10页 / 共21页
面向对象编程设计报告.docx_第11页
第11页 / 共21页
面向对象编程设计报告.docx_第12页
第12页 / 共21页
面向对象编程设计报告.docx_第13页
第13页 / 共21页
面向对象编程设计报告.docx_第14页
第14页 / 共21页
面向对象编程设计报告.docx_第15页
第15页 / 共21页
面向对象编程设计报告.docx_第16页
第16页 / 共21页
面向对象编程设计报告.docx_第17页
第17页 / 共21页
面向对象编程设计报告.docx_第18页
第18页 / 共21页
面向对象编程设计报告.docx_第19页
第19页 / 共21页
面向对象编程设计报告.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

面向对象编程设计报告.docx

《面向对象编程设计报告.docx》由会员分享,可在线阅读,更多相关《面向对象编程设计报告.docx(21页珍藏版)》请在冰点文库上搜索。

面向对象编程设计报告.docx

面向对象编程设计报告

面向对象编程设计报告

——混凝土配合比管理

1.问题分析

土木工程中各种建筑物的建设材料之一就是混凝土,普通的混凝土由水、砂、水泥、石子组成,混凝土中砂和石料占有很大比例,这些材料价格低廉,降低了建造成本,而且混凝土有很好的耐火,耐久性,当发生火灾时,混凝土结构不会像木结构那样容易被燃烧。

现代建筑物,已不仅仅要求经济、适用了,四四方方的“火柴盒”被绝大多数设计师所淘汰,人们逐渐追求建筑的美学,为了满足建筑物审美的需求,与自然环境的和谐,接要求建造出各式各样的建筑,需求促进发展,混凝土就应运而生了,它又很好的可模性,可以根据需要浇捣成各种类型。

混凝土自从发明以后广泛应用于工程建设中。

随着科学的发展,对混凝土的要求越来越高,混凝土的强度从C15发展的C80,这就需要在普通的混凝土中添加外加剂和掺和料。

各种标号的混凝土都是由水、砂、水泥、石子、外加剂和掺和料六成分组成,但拌和成的混凝土的强度,弹性模量、耐久性、抗渗性、抗冻性、流动性、和易性等等都有很大的不同,这主要就是由各种组成成分在混凝土中所占的比例不同造成的。

在土木工程中,标志混凝土各组成材料数量之间的比例关系的量就是配合比。

混凝土的配合比实质上就是要确定水泥、水、砂、石子这四项基本组成材料用量之间的三个比例关系,即:

水与水泥之间的比例关系,常用水灰比表示;砂和石子之间的比例关系,常用砂率表示;水泥浆和骨料之间的比例关系,常用单位用水量来表示。

混凝土的配合比常有两种表示方法:

一种是以每立方米混凝土中各组成成分的质量表示,如:

水泥336kg,砂654kg,石子1215kg,水195kg;另一种表示方法就是以各项材料相互间的质量比(常以水泥的质量为1)来表示,将上述配合比换算成:

水泥:

砂:

石子:

水=1:

1.95:

3.62:

0.58。

混凝土配合比的计算方法:

(1)计算混凝土配制强度fcu,0;fcu,0=fcu,k+1.645σ

(2)确定水灰比,当混凝土强度等级小于C60时,根据公式确定混凝土水灰比。

(3)按照规范规定,选取每立方米混凝土用水量,并计算出每立方米混凝土的水泥用量,如果计算所得水泥用量小于规范所规定的最水水泥用量时,应取规定的最小水泥用量。

(4)选取砂率

(5)计算粗、细骨料用量

按上述方法得到的配合比称为计算配合比。

混凝土配合比还要经过试配、调整而确定。

由此可知,确定混凝土的配合比是一项非常繁琐的工作。

然而在工程建筑中,所使用的混凝土的规格是有限种的,就可以采用穷举的方法给出这些配合比。

在本程序中,就是基于此种想法,以VC++为平台,链接数据库,编写了混凝土配合比管理程序。

2.模型设计和程序实现

2.1设计数据库

用MicrosoftAccess创建一个数据库concrete.mdb,其中包含一个数据表concrete,该表的结构如表

(1)所示,该表的内容如表

(2)所示。

 

序号

字段名

字段类型

字段大小

1

num

文本

3

2

water

数字

单精度,小数点后两位

3

cement

数字

单精度,小数点后两位

4

sand

数字

单精度,小数点后两位

5

stone

数字

单精度,小数点后两位

(1)concrete表的结构

num

water

cement

sand

stone

C15

0.66

1

2.68

4.57

C20

0.51

1

1.81

3.68

C25

0.44

1

1.42

3.19

C30

0.38

1

1.11

2.72

C35

0.41

1

1.28

3.46

C10

0.38

1

1.19

2.76

C45

0.43

1

1.38

3.21

C50

0.39

1

1.20

2.87

(2)concrete表的内容

2.2定义数据源

选择控制面板下的管理工具,双击打开此文件夹,选择数据源(ODBC)。

添加用户数据源。

在数据源名栏输入的数据源名为concrete。

在说明栏输入的是Thisdatabaseisusedtodescribetheratioofconcrete。

选择的数据库为文件concrete.mdb。

完成对数据源的添加和设置。

2.3利用MFCAppWizard创建数据库管理程序的框架

启动VC++6.0,用MFCAppWizard(exe)创建一个单文档应用程序MyODBC。

在向导的第二步对话框中加入数据库的支持。

在ODBC列表框中选择刚刚创建的数据源对象concrete。

在系统弹出的“SelectDatabaseTables”对话框中选择concrete表格。

编译并运行,查看结果。

2.4浏览数据库记录

浏览数据库记录的操作步骤如下:

(1)在工作区窗口中选择“ResourceView”选项卡,打开对话框资源编辑器。

(2)设计对话框。

删除对话框上的默认控件“TODO”静态文本框,按照图

(1)所示的格式向对话框中添加控件。

(1)对话框中控件设计

把编辑框IDC_EDIT_NUM设为只读格式,因为num是数据库的主键不能被任意修改。

各控件的风格如表(3)所示。

控件ID

控件类型

标题

其他属性

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_EDIT_NUM

IDC_EDIT_WATER

IDC_EDIT_CEMENT

IDC_EDIT_SAND

IDC_EDIT_STONE

组合框

静态文本框

静态文本框

静态文本框

静态文本框

静态文本框

静态文本框

编辑框

编辑框

编辑框

编辑框

编辑框

混凝土配合比

注:

(1)…….

混凝土标号

水泥

石子

Read-only

图(3)对话框控件风格设置

(3)利用ClassWizard来添加对话框资源中的成员变量。

各成员变量的类型、名称和ID如图

(2)所示。

(2)对话框中各控件对应的成员变量

2.4显示记录总数和当前记录号

使用CRecordset类的成员函数GetRecordCount和GetStatus可以分别获得表中的记录总数和当前记录的索引。

具体实现步骤如下:

(1)打开MainFrm.cpp文件,将indicator数组进行修改。

staticUINTindicators[]=

{

ID_SEPARATOR,//statuslineindicator

ID_SEPARATOR,

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

(2)在工作区窗口右键点击CMyODBCView,选择AddVirtualFunction弹出对话框,选择OnCommand。

编辑OnCommand()函数。

具体代码如下,加黑部分为新添代码:

BOOLCMyODBCView:

:

OnCommand(WPARAMwParam,LPARAMlParam)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

CStringstr;

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

//获得主框架窗口的指针

CStatusBar*pStatus=&pFrame->m_wndStatusBar;

//获得主框架窗口中状态栏的指针

if(pStatus)

{

CRecordsetStatusrStatus;

m_pSet->GetStatus(rStatus);

str.Format("当前记录:

%d/总记录:

%d",

1+rStatus.m_lCurrentRecord,m_pSet->GetRecordCount());

pStatus->SetPaneText(1,str);

}

returnCRecordView:

:

OnCommand(wParam,lParam);

}

(3)修改MyODBCView.cpp文件中的函数OnInitialUpdate,具体代码如下:

voidCMyODBCView:

:

OnInitialUpdate()

{

m_pSet=&GetDocument()->m_myODBCSet;

CRecordView:

:

OnInitialUpdate();

GetParentFrame()->RecalcLayout();

ResizeParentToFit();

while(!

m_pSet->IsEOF())

{

m_pSet->MoveNext();

m_pSet->GetRecordCount();

}

m_pSet->MoveFirst();

}

(4)在MyODBCView.cpp文件的开始处增加一下语句:

#include"MainFrm.h"

(5)将MainFrm.h文件中的数据成员m_wndStatusBar由protected改为public。

(6)编译并运行。

结果如图(3)所示。

图(3)显示记录总数和当前记录号

2.5增加、修改和删除数据库记录

(1)打开对话框资源编辑器,添加3个按钮,如图(4)所示。

添加记录按钮,ID设置为IDC_BUTTON_APPEND,属性为:

Defaultbutton。

修改记录按钮,ID设置为IDC_BUTTON_MODIFY,属性为:

Defaultbutton。

删除记录按钮,ID设置为IDC_BUTTON_DELETE,属性为:

Defaultbutton。

图(4)对话框中新增按钮

(2)添加一个对话框资源。

设置对话框的ID为IDD_CONCRETE,标题为:

添加\修改,并将字体设置为:

宋体,10号。

(3)将“IDD_MYODBC_FORM”对话框中的相关控件复制到新建对话框,并取消编辑框IDC_NUM的只读属性。

同时将[OK]和[Cancel]按钮的标题修改为“确定”和“取消”,效果如图(5)所示。

图(5)添加“添加\修改”对话框的控件设置

(4)添加一个新的对话框类,类名为CConcreteDlg,并为该对话框中控件添加数据成员,各数据成员如图(6)所示。

图(6)“添加\修改”对话框控件对应成员变量

(5)为“CConcreteDlg”类对话框中的IDOK控件增加BN_CLICKED的消息映射,并编辑OnOK()函数。

具体代码如下:

voidCConcreteDlg:

:

OnOK()

{

//TODO:

Addextravalidationhere

UpdateData();

CDialog:

:

OnOK();

}

(6)用ClassWizard为CMyODBCView类的三个按钮:

IDC_BUTTON_APPEND、IDC_BUTTON_DELETE、IDC_BUTTON_MODIFY增加BN_CLICKED的消息映射,并编辑OnButtonAppend()、OnButtonDelete()、OnButtonModify()函数。

具体代码如下:

voidCMyODBCView:

:

OnButtonAppend()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CConcreteDlgdlg;

intresult=dlg.DoModal();

if(result==IDOK)

{

m_pSet->AddNew();

m_pSet->m_cement=dlg.m_cement;

m_pSet->m_num=dlg.m_num;

m_pSet->m_sand=dlg.m_sand;

m_pSet->m_stone=dlg.m_stone;

m_pSet->m_water=dlg.m_water;

m_pSet->Update();

m_pSet->Requery();

}

}

voidCMyODBCView:

:

OnButtonDelete()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CRecordsetStatusstatus;

m_pSet->GetStatus(status);

m_pSet->Delete();

if(status.m_lCurrentRecord==0)

m_pSet->MoveNext();

else

m_pSet->MoveFirst();

UpdateData(FALSE);

}

voidCMyODBCView:

:

OnButtonModify()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CConcreteDlgdlg;

dlg.m_cement=m_pSet->m_cement;

dlg.m_num=m_pSet->m_num;

dlg.m_sand=m_pSet->m_sand;

dlg.m_stone=m_pSet->m_stone;

dlg.m_water=m_pSet->m_water;

intresult=dlg.DoModal();

if(result==IDOK)

{

m_pSet->Edit();

m_pSet->m_cement=dlg.m_cement;

m_pSet->m_num=dlg.m_num;

m_pSet->m_sand=dlg.m_sand;

m_pSet->m_stone=dlg.m_stone;

m_pSet->m_water=dlg.m_water;

m_pSet->Update();

UpdateData(FALSE);

}

}

(7),在头文件中添加#include"ConcreteDlg.h",编译并运行,查看结果。

注:

修改过程中应注意混凝土标号的修改,修改后的混凝土标号不能与已有的混凝土标号相同,否则将提示运行错误,因为混凝土标号是数据库表的主键,主键是区分记录的标示,不能雷同。

2.6按混凝土标号排序和查询

(1)在应用程序MyODBC的菜单中增加一个菜单“排序与查询”,并给此菜单增加两个菜单项“按标号排序(&B)”和“按标号查询(&Q)”,它们的ID分别为ID_SORT和ID_QUERY。

在Prompt属性下分别输入“按标号排序\n按标号排序”和“按标号查询\n按标号查询”,如若选择“按标号排序(&B)”或“按标号查询(&Q)”,则在状态栏中中显示“按标号排序”或“按标号查询”。

(2)为“按标号排序(&B)”和“按标号查询(&Q)”两个菜单添加消息响应函数OnSort()和OnQuery()。

(3)创建新对话框,对话框资源的属性如图(7)所示。

图(7)“查询”对话框属性设置

(4)在“查询”对话框中添加控件,一个静态文本框和一个编辑框,其中,编辑对话框的ID为IDC_EDIT_QUERY,如图(8)所示。

图(8)“查询”对话框中控件设置

(5)新建CQueryDlg类对话框,在头文件中添加语句:

#include"QueryDlg.h",并为该类添加数据成员m_query。

(6)向MyODBCView.cpp文件的排序函数和查询函数中添加程序,具体如下:

voidCMyODBCView:

:

OnSort()

{

//TODO:

Addyourcommandhandlercodehere

m_pSet->Close();

m_pSet->m_strSort="num";

m_pSet->Open();

UpdateData(FALSE);

}

voidCMyODBCView:

:

OnQuery()

{

//TODO:

Addyourcommandhandlercodehere

DoQuery("num");

}

(7)添加成员函数voidCMyODBCView:

:

DoQuery(Cstringstrval)类型为Protected。

并编写代码具体如下:

voidCMyODBCView:

:

DoQuery(CStringstrval)

{

CQueryDlgdlg;

intresult=dlg.DoModal();

if(result==IDOK)

{

CStringflstring=strval+"='"+dlg.m_query+"'";

m_pSet->Close();

m_pSet->m_strFilter=flstring;

m_pSet->Open();

intrecCount=m_pSet->GetRecordCount();

if(recCount==0)

{

MessageBox("没有匹配的记录!

");

m_pSet->Close();

m_pSet->m_strFilter="";

m_pSet->Open();

}

UpdateData(FALSE);

}

}

(8)为菜单项为“按标号排序(&B)”和“按标号查询(&Q)”添加快捷菜单。

将上述两个菜单项修改为“按标号排序(&B)\Ctrl+B”和“按标号查询(&Q)\Ctrl+Q”。

展开“Accelerator”,打开加速器表。

新加快捷键Ctrl+B和Ctrl+Q。

2.7添加混凝土配合比图形显示区

(1)将“ResourceView”选项卡下,双击“Dialog”,修改“IDD_MYODBC_FORM”。

修改后如图(9)所示。

图(9)修改后的IDD_MYODBC_FORM对话框

其中,对话框添加控件的风格如表(4)所示。

控件ID

控件类型

标题

其他属性

IDC_STATIC

IDC_STATIC

IDC_RADIO_C15

IDC_RADIO_C20

IDC_RADIO_C25

IDC_RADIO_C30

IDC_RADIO_C35

IDC_RADIO_C40

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_STATIC

IDC_STATIC

组合框

组合框

单选按钮

单选按钮

单选按钮

单选按钮

单选按钮

单选按钮

静态文本框

静态文本框

静态文本框

静态文本框

静态文本框

混凝土配合比图形显示区

标号选择

C15

C20

C25

C30

C35

C40

各种标号……图形显示

水泥

石子

Group

表(4)IDD_MYODBC_FORM对话框添加控件的风格

注:

把最初的组合框的标题改为“混凝土配合比数据显示区”。

(2)在“CMyODBCView.h”头文件中添加变量如下:

intflag;

为IDC_RADIO_C15、IDC_RADIO_C20、IDC_RADIO_C25、IDC_RADIO_C30、IDC_RADIO_C35、IDC_RADIO_C40控件添加BN_CLICKED消息映射函数,函数名接受默认值。

具体代码如下:

voidCMyODBCView:

:

OnRadioC15()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

flag=0;

Invalidate();

}

voidCMyODBCView:

:

OnRadioC20()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

flag=1;

Invalidate();

}

voidCMyODBCView:

:

OnRadioC25()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

flag=2;

Invalidate();

}

voidCMyODBCView:

:

OnRadioC30()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

flag=3;

Invalidate();

}

voidCMyODBCView:

:

OnRadioC35()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

flag=4;

Invalidate();

}

voidCMyODBCView:

:

OnRadioC40()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

flag=5;

Invalidate();

}

(3)为“CMyODBCView”添加虚函数“OnDraw(CDC*pDC)”并编写代码,具体代码如下:

voidCMyODBCView:

:

OnDraw(CDC*pDC)

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

pDC->MoveTo(460,270);

pDC->LineTo(730,270);

if(flag==0)

{

CBrushmybrush;

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

pDC->SelectObject(&mybrush);

pDC->Rectangle(470,270-0.66*20,505,270);

pDC->Rectangle(535,270-1*20,570,270);

pDC->Rectangle(600,270-2.68*20,635,270);

pDC->Rectangle(665,270-4.57*20,700,270);

}

if(flag==1)

{

CBrushmybrush;

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

pDC->SelectObject(&mybrush);

pDC->Rectangle(470,270-0.51*20,505,270);

pDC->Rectangle(535,270-1*20,570,270);

pDC->Rectangle(600,270-1.81*20,635,27

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

当前位置:首页 > 医药卫生 > 基础医学

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

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