面向对象编程设计报告.docx
- 文档编号:26384723
- 上传时间:2023-06-18
- 格式:DOCX
- 页数:21
- 大小:137.11KB
面向对象编程设计报告.docx
《面向对象编程设计报告.docx》由会员分享,可在线阅读,更多相关《面向对象编程设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
面向对象编程设计报告
面向对象编程设计报告
——混凝土配合比管理
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 设计 报告