沥青混合料马歇尔试验数据处理系统

沥青混合料配合比数据处理系统

1.沥青混合料配合比选择简介

沥青混合料配合比的设计主要是利用马歇尔的试验方法确定沥青混合料的材料品种及配合比、矿料级配、最佳沥青用量。其工艺流程图如下:

沥青混合料配合比设计操作框图

这个软件设计不包括原材料的选定和试验、马歇尔试件的制作。仅仅是针对矿料级配的计算、马歇尔试验以后的步骤。

矿料级配计算主要采用规划求解方法进行。

通过马歇尔试验得出一组数据,然后对数据进行处理,最终得出最佳油石比。 2.人工数据处理过程

2.1矿料级配的计算:列15个方程,求解4个未知数,有不同的结果。

沥青混合料级配设计计算表

2.2本数据处理系统是对马歇尔试验的数据用计算机进行处理,改变以往人工处理效率低,准确性差的特点。

马歇尔试验得出数据汇总如下:

然后将每种试验项目作纵坐标,油石比作横坐标绘制如下表:

1)根据上述的五个曲线图求取相应密度最大值时沥青用量a2、稳定度最大值时沥青用量a1、空隙率范围中值沥青用量a3,求取三者平均值作为最佳沥青用量的初始值OAC1:

OAC1=(a1+a2+a3)/3

2)求出各项指标符合技术要求的沥青用量范围OACMIN—OACmax,其中 OAC2=( OACMIN+OACmax,)/2 3)最佳沥青用量为:

OAC=( OAC1+OAC2)/2 3.计算机数据处理过程

3.1试验参数的输入

3.2马歇尔数据处理

3.3级配设计

4.使用说明

本软件采用VC6.0编写,可在windows环境下运行。

软件采用基于文档的方式来实现,通过处理输入的数据,在文档区显示

数据处理的结果,同时可以通过本地或者网络打印机打印显示的文档。

按数据处理功能来说分为两部分,一部分是沥青混合料最佳用量确定试

验,一部分是沥青混合料集料级配设计试验。

1、 沥青混合料最佳用量确定试验使用说明

1) 打开程序;

2) 点击 菜单——〉参数输入——〉试验参数, 出现参数输入的对话框;

3) 在对话框里分别填写实验信息, 选择道路类型、混凝土类型。然后点击“确定”按钮;

4) 此时 菜单——〉参数输入——〉Mashall参数 激活,点击 菜单——〉参数输入——〉Mashall参数,出现Mashall参数的对话框;

5) 选择试验数据组数(5~8),缺省值为5;然后填入实验数据,如果填错,则会报错。

测试时请选择组数为5,然后点击载入测试数据,则程序自动将一组设定好的数据填入,供测试软件之用。

数据填完则点击“确定”按钮;

6) 点击 菜单——〉结果输出——〉数据分析, 则在文档区出现两页的文档,分别记录着实验信息、试验数据、最佳用量的确定、图表等。

7) 预览:此时可以通过 菜单——〉文件——〉打印预览 观察要

打印的文档。可同时在屏幕中显示一页或两页,也可以放大缩小文档来观看。

8) 打印:可以在预览窗口点击“打印”,也可以通过 菜单——〉文件——〉打印 来完成。(注意:请在打印之前,检查打印机是否装好,或者是否有网络打印机; 打印纸张大小为A4, 方向为纵向,可以在打印设置中检查。)

9) 保存:点击工具栏或者菜单上的“保存”按钮,可以将文档保存下来。

10) 另存为:点击菜单上的“另存为”按钮,可以将文档另保存下来。 11) 打开:点击工具栏或者菜单上的“打开”按钮,可以打开保存过的文档。

2、沥青混合料集料级配设计试验使用说明

1) 打开程序;

2) 点击 菜单——〉参数输入——〉集配设计, 出现级配试验参数输入的对话框;

3) 在对话框中按照筛孔尺寸分别填入4~6种集料的通过百分率,双击表格第一行的单元可以选择或者去除基准列, 然后点击“确定”按钮;也可以通过点击“载入测试数据”来填入测试数据。

4) 点击 菜单——〉结果输出——〉数据分析, 则在文档区出现一页的文档,分别记录试验结果及级配图等信息。

5) 打印、打印预览、保存、另存为、打开同上;

5.下步计划

本软件未设及原材料试验等步骤,下次改进时将进行补充,使软件更加丰富,使用更加方便简洁。

毕业设计论文

沥青混合料配合比数据处理系统

学 生:吴志祥 指导老师:

石家庄铁道学院成教分院 2002级计算机专业

部份代码

MICROSOFT FOUNDATION CLASS LIBRARY : Concrete2

======================================================================== AppWizard has created this Concrete2 application for you. This application not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your application.

This file contains a summary of what you will find in each of the files that make up your Concrete2 application.

Concrete2.dsp

This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. Concrete2.h

This is the main header file for the application. It includes other project specific headers (including Resource.h) and declares the

CConcrete2App application class.

Concrete2.cpp

This is the main application source file that contains the application class CConcrete2App.

Concrete2.rc

This is a listing of all of the Microsoft Windows resources that the

program uses. It includes the icons, bitmaps, and cursors that are stored in the RES subdirectory. This file can be directly edited in Microsoft Visual C++.

Concrete2.clw

This file contains information used by ClassWizard to edit existing classes or add new classes. ClassWizard also uses this file to store information needed to create and edit message maps and dialog data maps and to create prototype member functions.

res\Concrete2.ico

This is an icon file, which is used as the application's icon. This icon is included by the main resource file Concrete2.rc.

res\Concrete2.rc2

This file contains resources that are not edited by Microsoft

Visual C++. You should place all resources not editable by

the resource editor in this file.

///////////////////////////////////////////////////////////////////////////// For the main frame window:

MainFrm.h, MainFrm.cpp

These files contain the frame class CMainFrame, which is derived from CFrameWnd and controls all SDI frame features.

res\Toolbar.bmp

This bitmap file is used to create tiled images for the toolbar.

The initial toolbar and status bar are constructed in the CMainFrame class. Edit this toolbar bitmap using the resource editor, and

update the IDR_MAINFRAME TOOLBAR array in Concrete2.rc to add

toolbar buttons.

///////////////////////////////////////////////////////////////////////////// AppWizard creates one document type and one view:

Concrete2Doc.h, Concrete2Doc.cpp - the document

These files contain your CConcrete2Doc class. Edit these files to

add your special document data and to implement file saving and loading (via CConcrete2Doc::Serialize).

Concrete2View.h, Concrete2View.cpp - the view of the document

These files contain your CConcrete2View class.

CConcrete2View objects are used to view CConcrete2Doc objects.

///////////////////////////////////////////////////////////////////////////// Other standard files:

StdAfx.h, StdAfx.cpp

These files are used to build a precompiled header (PCH) file

named Concrete2.pch and a precompiled types file named StdAfx.obj.

Resource.h

This is the standard header file, which defines new resource IDs.

Microsoft Visual C++ reads and updates this file.

///////////////////////////////////////////////////////////////////////////// Other notes:

AppWizard uses "TODO:" to indicate parts of the source code you

should add to or customize.

If your application uses MFC in a shared DLL, and your application is

in a language other than the operating system's current language, you

will need to copy the corresponding localized resources MFC42XXX.DLL

from the Microsoft Visual C++ CD-ROM onto the system or system32 directory, and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation. For example, MFC42DEU.DLL contains resources translated to German.) If you don't do this, some of the UI elements of your application will remain in the language of the operating system.

///////////////////////////////////////////////////////////////////////////// DlgparaJipei(cpp)

// DlgParaJipei.cpp : implementation file

//

#include "stdafx.h"

#include "concrete2.h"

#include "DlgParaJipei.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

///////////////////////////////////////////////////////////////////////////// // CDlgParaJipei dialog

CDlgParaJipei::CDlgParaJipei(CWnd* pParent /*=NULL*/)

: CDialog(CDlgParaJipei::IDD, pParent)

{

//{{AFX_DATA_INIT(CDlgParaJipei)

m_bCheck = FALSE;

m_nRows = 4;

//}}AFX_DATA_INIT

}

void CDlgParaJipei::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CDlgParaJipei)

DDX_Control(pDX, IDC_SPIN_ROW, m_SpinRow);

DDX_GridControl(pDX, IDC_GRID1, m_Grid);

DDX_Text(pDX, IDC_EDIT_ROWS, m_nRows);

DDV_MinMaxInt(pDX, m_nRows, 4, 6);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CDlgParaJipei, CDialog)

//{{AFX_MSG_MAP(CDlgParaJipei)

ON_BN_CLICKED(IDC_BUTTON1, OnButton1)

ON_EN_UPDATE(IDC_EDIT_ROWS, OnUpdateEditRows)

//}}AFX_MSG_MAP

ON_NOTIFY(NM_DBLCLK, IDC_GRID1, OnGridDblClick)

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CDlgParaJipei message handlers

BOOL CDlgParaJipei::OnInitDialog()

{

CDialog::OnInitDialog();

// TODO: Add extra initialization here

int i;

CString str;

m_SpinRow.SetRange(4,6);

m_Grid.SetRowCount(6);

m_Grid.SetColumnCount(14);

m_Grid.SetFixedRowCount(2);

m_Grid.SetFixedColumnCount(1);

m_Grid.SetEditable(TRUE);

//设置选择列的参数

m_nSelectCols[0] = 0; //个数

m_nSelectCols[1] = -1; //列

m_nSelectCols[2] = -1; //列

m_Grid.SetColumnWidth(0, 70);

for(i = 0; i

{

m_Grid.SetRowHeight(i, 25); } for( i = 1; i

m_Grid.SetItem(&item);

item.col = 9;

item.strText = "1.18";

m_Grid.SetItem(&item);

item.col = 10;

item.strText = "0.6";

m_Grid.SetItem(&item);

item.col = 11;

item.strText = "0.3";

m_Grid.SetItem(&item);

item.col = 12;

item.strText = "0.15";

m_Grid.SetItem(&item);

item.col = 13;

item.strText = "*0.075";

m_Grid.SetItem(&item);

//设置第二排的单位

item.row = 1;

item.col = 0;

item.strText = "序号";

m_Grid.SetItem(&item);

for(i = 1; i

{

item.col = i;

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

item.strText = str;

m_Grid.SetItem(&item);

}

return TRUE; // return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}

void CDlgParaJipei::OnGridDblClick(NMHDR *pNotifyStruct, LRESULT *)

{

NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;

CString strTemp;

int i;

if(pItem->iRow == 0)

{

BOOL CoreCol;//特殊列

i = pItem->iColumn;

CoreCol = (i == 7) || (i == 8) || (i == 13);

//特殊列

if(CoreCol)

{

AfxMessageBox("不能改动原定基准列");

return;

}

//前4列

else if(pItem->iColumn

{

AfxMessageBox("不能选择前4列作为基准列");

return;

}

//选择的不是基准列

else if(pItem->iColumn != m_nSelectCols[1] && pItem->iColumn != m_nSelectCols[2])

{

//列数已经够了

if((m_nSelectCols[0] + 4) == m_nRows)

{

AfxMessageBox("选择的列数已经达到要求");

return;

}

//还不够

else if((m_nSelectCols[0] + 4)

{

//纪录

m_nSelectCols[0] ++;

m_nSelectCols[m_nSelectCols[0]] = pItem->iColumn;

//显示

strTemp = m_Grid.GetItemText(0, pItem->iColumn);

strTemp = "*" + strTemp;

m_Grid.SetItemText(0, pItem->iColumn, strTemp);

m_Grid.Refresh();

return;

}

}

//选择的是基准列

else if(pItem->iColumn == m_nSelectCols[1] || pItem->iColumn m_nSelectCols[2])

{

//纪录

m_nSelectCols[0] --;

if(pItem->iColumn == m_nSelectCols[1])

{

m_nSelectCols[1] = -1;

}

else

{

m_nSelectCols[2] = -1;

} ==

//显示

strTemp = m_Grid.GetItemText(0, pItem->iColumn);

strTemp.TrimLeft("*");

m_Grid.SetItemText(0, pItem->iColumn, strTemp);

m_Grid.Refresh();

return;

}

/* //删除信息

strTemp = "确实要删除第" + m_Grid.GetItemText(1, pItem->iColumn) + "列"; int i;

BOOL CoreCol;//特殊列

i = atoi(m_Grid.GetItemText(1, pItem->iColumn));

CoreCol = (i == 7) || (i == 8) || (i == 13);

//特殊列

if(CoreCol)

{

AfxMessageBox("不能删除特殊列");

}

//小于8列

else if(m_Grid.GetColumnCount()

{

AfxMessageBox("不能再删除列了!");

}

else if(AfxMessageBox(strTemp, MB_OKCANCEL) == IDOK)

{

//删除

m_Grid.DeleteColumn(pItem->iColumn);

m_Grid.Refresh();

}

*/

}

}

void CDlgParaJipei::GetInput()

{

int i,j;

CString str;

//取得数据

for(i = 2; i

{

for(j = 1; j

{

str = m_Grid.GetItemText(i, j);

m_fPassPercent[i-2][j-1] = (float)atof(str);

}

}

//存储使用的列信息

for(j = 1; j

{

str = m_Grid.GetItemText(1, j);

m_nNum[j-1] = atoi(str);

}

//存储筛孔尺寸

for(j = 1; j

{

str = m_Grid.GetItemText(0, j);

str.TrimLeft("*");

m_fHoleSize[j-1] = atof(str);

}

}

BOOL CDlgParaJipei::CheckData()

{

int i,j,n;

CString str, msg;

//列数不够

if((m_nSelectCols[0] + 4)

{

msg.Format("请再选择%d个基准列,双击第一行的单元进行选取!", m_nRows - (m_nSelectCols[0] + 4));

AfxMessageBox(msg);

return FALSE;

}

//列数多

if((m_nSelectCols[0] + 4) > m_nRows)

{

msg.Format("多选择了%d个基准列,双击第一行的单元去掉基准列!", (m_nSelectCols[0] + 4) - m_nRows);

AfxMessageBox(msg);

return FALSE;

}

for(i = 2; i

{

for(j = 1; j

{

str = m_Grid.GetItemText(i, j);

//数据不能为空

if(str.IsEmpty())

{

msg.Format("第%d排、第%d列数据为空!", i-1, j);

AfxMessageBox(msg);

return FALSE;

}

//数据不能包含非法字符 CString strComp = "+0123456789."; for(n = 0; n 1) { msg.Format("第%d排、第%d列数据多于两个小数点!", i-1, j); AfxMessageBox(msg); return FALSE; } //中间有加号 for(n = 1; n

return FALSE;

}

}

}

return TRUE;

}

void CDlgParaJipei::OnOK()

{

// TODO: Add extra validation here

if(!CheckData())

{

m_bCheck = FALSE;

return;

}

m_bCheck = TRUE;

GetInput();

CDialog::OnOK();

}

void CDlgParaJipei::OnButton1()

{

// TODO: Add your control notification handler code here

int i,j;

int num; //列数

CString str;

//测试数据

float m_fTestData[4][13] =

{

100, 100, 100, 100, 98.58, 53.2, 11.4, 2.42, 1.68, 1.56, 0, 0, 0, 100, 100, 100, 100, 99, 82.2, 38.9, 17, 8.73, 6.61, 3.87, 2.69, 1.67, 100, 100, 100, 100, 100, 100, 94, 74.8, 53, 42.8, 24, 6.7, 1.1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99.3, 87.2 };

GV_ITEM item;

item.mask = GVIF_TEXT;

//第一列数值

item.col = 1;

item.row = 2;

item.strText = "5";

m_Grid.SetItem(&item);

//存储使用的列信息

for(i = 1; i

{

str = m_Grid.GetItemText(1, i);

num = atoi(str);

item.col = i;

for(j = 2; j

{

item.row = j;

str.Format("%.1f", m_fTestData[j-2][num-1]);

item.strText = str;

m_Grid.SetItem(&item);

}

}

m_Grid.Refresh();

}

void CDlgParaJipei::OnUpdateEditRows()

{

// TODO: If this is a RICHEDIT control, the control will not

// send this notification unless you override the CDialog::OnInitDialog() // function to send the EM_SETEVENTMASK message to the control

// with the ENM_UPDATE flag ORed into the lParam mask.

// TODO: Add your control notification handler code here

if (!::IsWindow(m_Grid.m_hWnd)) return;

UpdateData(TRUE);

if(m_nRows

{

m_nRows = 4;

UpdateData(FALSE);

}

else if(m_nRows > 6)

{

m_nRows = 6;

UpdateData(FALSE);

}

m_Grid.SetRowCount(m_nRows+2);

m_Grid.SetRowHeight(m_nRows+1, 25);

int i;

CString str;

GV_ITEM item;

item.mask = GVIF_TEXT;

for(i = 2; i

{

item.col = 0;

item.row = i;

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

item.strText = str;

m_Grid.SetItem(&item);

}

}

沥青混合料配合比数据处理系统

1.沥青混合料配合比选择简介

沥青混合料配合比的设计主要是利用马歇尔的试验方法确定沥青混合料的材料品种及配合比、矿料级配、最佳沥青用量。其工艺流程图如下:

沥青混合料配合比设计操作框图

这个软件设计不包括原材料的选定和试验、马歇尔试件的制作。仅仅是针对矿料级配的计算、马歇尔试验以后的步骤。

矿料级配计算主要采用规划求解方法进行。

通过马歇尔试验得出一组数据,然后对数据进行处理,最终得出最佳油石比。 2.人工数据处理过程

2.1矿料级配的计算:列15个方程,求解4个未知数,有不同的结果。

沥青混合料级配设计计算表

2.2本数据处理系统是对马歇尔试验的数据用计算机进行处理,改变以往人工处理效率低,准确性差的特点。

马歇尔试验得出数据汇总如下:

然后将每种试验项目作纵坐标,油石比作横坐标绘制如下表:

1)根据上述的五个曲线图求取相应密度最大值时沥青用量a2、稳定度最大值时沥青用量a1、空隙率范围中值沥青用量a3,求取三者平均值作为最佳沥青用量的初始值OAC1:

OAC1=(a1+a2+a3)/3

2)求出各项指标符合技术要求的沥青用量范围OACMIN—OACmax,其中 OAC2=( OACMIN+OACmax,)/2 3)最佳沥青用量为:

OAC=( OAC1+OAC2)/2 3.计算机数据处理过程

3.1试验参数的输入

3.2马歇尔数据处理

3.3级配设计

4.使用说明

本软件采用VC6.0编写,可在windows环境下运行。

软件采用基于文档的方式来实现,通过处理输入的数据,在文档区显示

数据处理的结果,同时可以通过本地或者网络打印机打印显示的文档。

按数据处理功能来说分为两部分,一部分是沥青混合料最佳用量确定试

验,一部分是沥青混合料集料级配设计试验。

1、 沥青混合料最佳用量确定试验使用说明

1) 打开程序;

2) 点击 菜单——〉参数输入——〉试验参数, 出现参数输入的对话框;

3) 在对话框里分别填写实验信息, 选择道路类型、混凝土类型。然后点击“确定”按钮;

4) 此时 菜单——〉参数输入——〉Mashall参数 激活,点击 菜单——〉参数输入——〉Mashall参数,出现Mashall参数的对话框;

5) 选择试验数据组数(5~8),缺省值为5;然后填入实验数据,如果填错,则会报错。

测试时请选择组数为5,然后点击载入测试数据,则程序自动将一组设定好的数据填入,供测试软件之用。

数据填完则点击“确定”按钮;

6) 点击 菜单——〉结果输出——〉数据分析, 则在文档区出现两页的文档,分别记录着实验信息、试验数据、最佳用量的确定、图表等。

7) 预览:此时可以通过 菜单——〉文件——〉打印预览 观察要

打印的文档。可同时在屏幕中显示一页或两页,也可以放大缩小文档来观看。

8) 打印:可以在预览窗口点击“打印”,也可以通过 菜单——〉文件——〉打印 来完成。(注意:请在打印之前,检查打印机是否装好,或者是否有网络打印机; 打印纸张大小为A4, 方向为纵向,可以在打印设置中检查。)

9) 保存:点击工具栏或者菜单上的“保存”按钮,可以将文档保存下来。

10) 另存为:点击菜单上的“另存为”按钮,可以将文档另保存下来。 11) 打开:点击工具栏或者菜单上的“打开”按钮,可以打开保存过的文档。

2、沥青混合料集料级配设计试验使用说明

1) 打开程序;

2) 点击 菜单——〉参数输入——〉集配设计, 出现级配试验参数输入的对话框;

3) 在对话框中按照筛孔尺寸分别填入4~6种集料的通过百分率,双击表格第一行的单元可以选择或者去除基准列, 然后点击“确定”按钮;也可以通过点击“载入测试数据”来填入测试数据。

4) 点击 菜单——〉结果输出——〉数据分析, 则在文档区出现一页的文档,分别记录试验结果及级配图等信息。

5) 打印、打印预览、保存、另存为、打开同上;

5.下步计划

本软件未设及原材料试验等步骤,下次改进时将进行补充,使软件更加丰富,使用更加方便简洁。

毕业设计论文

沥青混合料配合比数据处理系统

学 生:吴志祥 指导老师:

石家庄铁道学院成教分院 2002级计算机专业

部份代码

MICROSOFT FOUNDATION CLASS LIBRARY : Concrete2

======================================================================== AppWizard has created this Concrete2 application for you. This application not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your application.

This file contains a summary of what you will find in each of the files that make up your Concrete2 application.

Concrete2.dsp

This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. Concrete2.h

This is the main header file for the application. It includes other project specific headers (including Resource.h) and declares the

CConcrete2App application class.

Concrete2.cpp

This is the main application source file that contains the application class CConcrete2App.

Concrete2.rc

This is a listing of all of the Microsoft Windows resources that the

program uses. It includes the icons, bitmaps, and cursors that are stored in the RES subdirectory. This file can be directly edited in Microsoft Visual C++.

Concrete2.clw

This file contains information used by ClassWizard to edit existing classes or add new classes. ClassWizard also uses this file to store information needed to create and edit message maps and dialog data maps and to create prototype member functions.

res\Concrete2.ico

This is an icon file, which is used as the application's icon. This icon is included by the main resource file Concrete2.rc.

res\Concrete2.rc2

This file contains resources that are not edited by Microsoft

Visual C++. You should place all resources not editable by

the resource editor in this file.

///////////////////////////////////////////////////////////////////////////// For the main frame window:

MainFrm.h, MainFrm.cpp

These files contain the frame class CMainFrame, which is derived from CFrameWnd and controls all SDI frame features.

res\Toolbar.bmp

This bitmap file is used to create tiled images for the toolbar.

The initial toolbar and status bar are constructed in the CMainFrame class. Edit this toolbar bitmap using the resource editor, and

update the IDR_MAINFRAME TOOLBAR array in Concrete2.rc to add

toolbar buttons.

///////////////////////////////////////////////////////////////////////////// AppWizard creates one document type and one view:

Concrete2Doc.h, Concrete2Doc.cpp - the document

These files contain your CConcrete2Doc class. Edit these files to

add your special document data and to implement file saving and loading (via CConcrete2Doc::Serialize).

Concrete2View.h, Concrete2View.cpp - the view of the document

These files contain your CConcrete2View class.

CConcrete2View objects are used to view CConcrete2Doc objects.

///////////////////////////////////////////////////////////////////////////// Other standard files:

StdAfx.h, StdAfx.cpp

These files are used to build a precompiled header (PCH) file

named Concrete2.pch and a precompiled types file named StdAfx.obj.

Resource.h

This is the standard header file, which defines new resource IDs.

Microsoft Visual C++ reads and updates this file.

///////////////////////////////////////////////////////////////////////////// Other notes:

AppWizard uses "TODO:" to indicate parts of the source code you

should add to or customize.

If your application uses MFC in a shared DLL, and your application is

in a language other than the operating system's current language, you

will need to copy the corresponding localized resources MFC42XXX.DLL

from the Microsoft Visual C++ CD-ROM onto the system or system32 directory, and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation. For example, MFC42DEU.DLL contains resources translated to German.) If you don't do this, some of the UI elements of your application will remain in the language of the operating system.

///////////////////////////////////////////////////////////////////////////// DlgparaJipei(cpp)

// DlgParaJipei.cpp : implementation file

//

#include "stdafx.h"

#include "concrete2.h"

#include "DlgParaJipei.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

///////////////////////////////////////////////////////////////////////////// // CDlgParaJipei dialog

CDlgParaJipei::CDlgParaJipei(CWnd* pParent /*=NULL*/)

: CDialog(CDlgParaJipei::IDD, pParent)

{

//{{AFX_DATA_INIT(CDlgParaJipei)

m_bCheck = FALSE;

m_nRows = 4;

//}}AFX_DATA_INIT

}

void CDlgParaJipei::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CDlgParaJipei)

DDX_Control(pDX, IDC_SPIN_ROW, m_SpinRow);

DDX_GridControl(pDX, IDC_GRID1, m_Grid);

DDX_Text(pDX, IDC_EDIT_ROWS, m_nRows);

DDV_MinMaxInt(pDX, m_nRows, 4, 6);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CDlgParaJipei, CDialog)

//{{AFX_MSG_MAP(CDlgParaJipei)

ON_BN_CLICKED(IDC_BUTTON1, OnButton1)

ON_EN_UPDATE(IDC_EDIT_ROWS, OnUpdateEditRows)

//}}AFX_MSG_MAP

ON_NOTIFY(NM_DBLCLK, IDC_GRID1, OnGridDblClick)

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CDlgParaJipei message handlers

BOOL CDlgParaJipei::OnInitDialog()

{

CDialog::OnInitDialog();

// TODO: Add extra initialization here

int i;

CString str;

m_SpinRow.SetRange(4,6);

m_Grid.SetRowCount(6);

m_Grid.SetColumnCount(14);

m_Grid.SetFixedRowCount(2);

m_Grid.SetFixedColumnCount(1);

m_Grid.SetEditable(TRUE);

//设置选择列的参数

m_nSelectCols[0] = 0; //个数

m_nSelectCols[1] = -1; //列

m_nSelectCols[2] = -1; //列

m_Grid.SetColumnWidth(0, 70);

for(i = 0; i

{

m_Grid.SetRowHeight(i, 25); } for( i = 1; i

m_Grid.SetItem(&item);

item.col = 9;

item.strText = "1.18";

m_Grid.SetItem(&item);

item.col = 10;

item.strText = "0.6";

m_Grid.SetItem(&item);

item.col = 11;

item.strText = "0.3";

m_Grid.SetItem(&item);

item.col = 12;

item.strText = "0.15";

m_Grid.SetItem(&item);

item.col = 13;

item.strText = "*0.075";

m_Grid.SetItem(&item);

//设置第二排的单位

item.row = 1;

item.col = 0;

item.strText = "序号";

m_Grid.SetItem(&item);

for(i = 1; i

{

item.col = i;

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

item.strText = str;

m_Grid.SetItem(&item);

}

return TRUE; // return TRUE unless you set the focus to a control

// EXCEPTION: OCX Property Pages should return FALSE

}

void CDlgParaJipei::OnGridDblClick(NMHDR *pNotifyStruct, LRESULT *)

{

NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;

CString strTemp;

int i;

if(pItem->iRow == 0)

{

BOOL CoreCol;//特殊列

i = pItem->iColumn;

CoreCol = (i == 7) || (i == 8) || (i == 13);

//特殊列

if(CoreCol)

{

AfxMessageBox("不能改动原定基准列");

return;

}

//前4列

else if(pItem->iColumn

{

AfxMessageBox("不能选择前4列作为基准列");

return;

}

//选择的不是基准列

else if(pItem->iColumn != m_nSelectCols[1] && pItem->iColumn != m_nSelectCols[2])

{

//列数已经够了

if((m_nSelectCols[0] + 4) == m_nRows)

{

AfxMessageBox("选择的列数已经达到要求");

return;

}

//还不够

else if((m_nSelectCols[0] + 4)

{

//纪录

m_nSelectCols[0] ++;

m_nSelectCols[m_nSelectCols[0]] = pItem->iColumn;

//显示

strTemp = m_Grid.GetItemText(0, pItem->iColumn);

strTemp = "*" + strTemp;

m_Grid.SetItemText(0, pItem->iColumn, strTemp);

m_Grid.Refresh();

return;

}

}

//选择的是基准列

else if(pItem->iColumn == m_nSelectCols[1] || pItem->iColumn m_nSelectCols[2])

{

//纪录

m_nSelectCols[0] --;

if(pItem->iColumn == m_nSelectCols[1])

{

m_nSelectCols[1] = -1;

}

else

{

m_nSelectCols[2] = -1;

} ==

//显示

strTemp = m_Grid.GetItemText(0, pItem->iColumn);

strTemp.TrimLeft("*");

m_Grid.SetItemText(0, pItem->iColumn, strTemp);

m_Grid.Refresh();

return;

}

/* //删除信息

strTemp = "确实要删除第" + m_Grid.GetItemText(1, pItem->iColumn) + "列"; int i;

BOOL CoreCol;//特殊列

i = atoi(m_Grid.GetItemText(1, pItem->iColumn));

CoreCol = (i == 7) || (i == 8) || (i == 13);

//特殊列

if(CoreCol)

{

AfxMessageBox("不能删除特殊列");

}

//小于8列

else if(m_Grid.GetColumnCount()

{

AfxMessageBox("不能再删除列了!");

}

else if(AfxMessageBox(strTemp, MB_OKCANCEL) == IDOK)

{

//删除

m_Grid.DeleteColumn(pItem->iColumn);

m_Grid.Refresh();

}

*/

}

}

void CDlgParaJipei::GetInput()

{

int i,j;

CString str;

//取得数据

for(i = 2; i

{

for(j = 1; j

{

str = m_Grid.GetItemText(i, j);

m_fPassPercent[i-2][j-1] = (float)atof(str);

}

}

//存储使用的列信息

for(j = 1; j

{

str = m_Grid.GetItemText(1, j);

m_nNum[j-1] = atoi(str);

}

//存储筛孔尺寸

for(j = 1; j

{

str = m_Grid.GetItemText(0, j);

str.TrimLeft("*");

m_fHoleSize[j-1] = atof(str);

}

}

BOOL CDlgParaJipei::CheckData()

{

int i,j,n;

CString str, msg;

//列数不够

if((m_nSelectCols[0] + 4)

{

msg.Format("请再选择%d个基准列,双击第一行的单元进行选取!", m_nRows - (m_nSelectCols[0] + 4));

AfxMessageBox(msg);

return FALSE;

}

//列数多

if((m_nSelectCols[0] + 4) > m_nRows)

{

msg.Format("多选择了%d个基准列,双击第一行的单元去掉基准列!", (m_nSelectCols[0] + 4) - m_nRows);

AfxMessageBox(msg);

return FALSE;

}

for(i = 2; i

{

for(j = 1; j

{

str = m_Grid.GetItemText(i, j);

//数据不能为空

if(str.IsEmpty())

{

msg.Format("第%d排、第%d列数据为空!", i-1, j);

AfxMessageBox(msg);

return FALSE;

}

//数据不能包含非法字符 CString strComp = "+0123456789."; for(n = 0; n 1) { msg.Format("第%d排、第%d列数据多于两个小数点!", i-1, j); AfxMessageBox(msg); return FALSE; } //中间有加号 for(n = 1; n

return FALSE;

}

}

}

return TRUE;

}

void CDlgParaJipei::OnOK()

{

// TODO: Add extra validation here

if(!CheckData())

{

m_bCheck = FALSE;

return;

}

m_bCheck = TRUE;

GetInput();

CDialog::OnOK();

}

void CDlgParaJipei::OnButton1()

{

// TODO: Add your control notification handler code here

int i,j;

int num; //列数

CString str;

//测试数据

float m_fTestData[4][13] =

{

100, 100, 100, 100, 98.58, 53.2, 11.4, 2.42, 1.68, 1.56, 0, 0, 0, 100, 100, 100, 100, 99, 82.2, 38.9, 17, 8.73, 6.61, 3.87, 2.69, 1.67, 100, 100, 100, 100, 100, 100, 94, 74.8, 53, 42.8, 24, 6.7, 1.1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99.3, 87.2 };

GV_ITEM item;

item.mask = GVIF_TEXT;

//第一列数值

item.col = 1;

item.row = 2;

item.strText = "5";

m_Grid.SetItem(&item);

//存储使用的列信息

for(i = 1; i

{

str = m_Grid.GetItemText(1, i);

num = atoi(str);

item.col = i;

for(j = 2; j

{

item.row = j;

str.Format("%.1f", m_fTestData[j-2][num-1]);

item.strText = str;

m_Grid.SetItem(&item);

}

}

m_Grid.Refresh();

}

void CDlgParaJipei::OnUpdateEditRows()

{

// TODO: If this is a RICHEDIT control, the control will not

// send this notification unless you override the CDialog::OnInitDialog() // function to send the EM_SETEVENTMASK message to the control

// with the ENM_UPDATE flag ORed into the lParam mask.

// TODO: Add your control notification handler code here

if (!::IsWindow(m_Grid.m_hWnd)) return;

UpdateData(TRUE);

if(m_nRows

{

m_nRows = 4;

UpdateData(FALSE);

}

else if(m_nRows > 6)

{

m_nRows = 6;

UpdateData(FALSE);

}

m_Grid.SetRowCount(m_nRows+2);

m_Grid.SetRowHeight(m_nRows+1, 25);

int i;

CString str;

GV_ITEM item;

item.mask = GVIF_TEXT;

for(i = 2; i

{

item.col = 0;

item.row = i;

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

item.strText = str;

m_Grid.SetItem(&item);

}

}


相关文章

  • 浅谈沥青混合料配合比设计注意事项
  • 2009年 第2期(总第180期) 黑龙江交通科技 HEILONGJIANGJIAOTONGKEJI No.2,2009 (SumNo.180) 浅谈沥青混合料配合比设计注意事项 张彦秋1,李乃千2 (11绥化市辰兴路桥工程监理咨询有限责任 ...查看


  • 试验检测工程师考试大纲
  • 第二部分 试验检测工程师考试大纲 第一章 <路桥基础> 一\土工试验 (一) 考试目的与要求 本科目主要是通过了解.熟悉和掌握三个层次,测评考生对于公路工程.桥梁工程及隧道工程中有关土工试验方面专业知识的熟悉程度,以及对于常用土 ...查看


  • 高模量沥青混凝土材料组成设计方法_沙爱民
  • 第29卷 第3期2009年5月 长安大学学报(自然科学版) JournalofChangpanUniversity(NaturalScienceEdition) Vol.29 No.3May2009 文章编号:1671-8879(2009) ...查看


  • 桥面沥青铺装首件总结1
  • 雄楚大街(K0+417-K1+720)改造工程 桥面沥青铺装试验段首件总结 编制人: 审核人: 批准人: 中建三局集团有限公司雄楚大街改造工程第一项目部 二〇一五年三月二十三日 目录 一.工程简介 ..................... ...查看


  • 观山北路市政道路施工组织设计
  • 施 工 组 织 设 计 第一章 概 述 为圆满完成金阳新区道路工程,根据施工合同文件,在认真阅读和充分理解设计意图及对施工现场作详细调查的基础上,并结合我公司的施工经验,以信守合同.确保工期和质量.合理控制工程造价.优质高效文明施工为指导思 ...查看


  • 沥青路面冷再生资料
  • 一.厂拌冷再生概念 沥青路面厂拌冷再生是将旧沥青路面铣刨后运到拌合厂,通过破碎.筛分,并根据旧料中沥青含量.沥青老化度.集料级配等指标, 掺入一定数量的新集料.再生结合料(泡沫沥青或乳化沥青.水泥.矿粉).进行常温拌和,按常温沥青混凝土的施 ...查看


  • 乳化沥青冷再生技术指南(2013版装订)
  • Q/HD 中公高科养护科技股份有限公司 企业标准 Q/HD HiRM01-2013 海母(HiRM)高性能半柔性路面再生 技术指南 2013-01-28发布 2013-02-01实施 中公高科养护科技股份有限公司发布 本指南所有内容符合强制 ...查看


  • 沥青混合料水稳定性评价方法研究(1)
  • 第3期(总第159期)2006年6月20日华东公路EASTCHINAHIGHWAYNo.3(Total No.159) June 2006 文章编号:1001-7291(2006)03-0072-03 文献标识码:B 材 料 沥青混合料水稳 ...查看


  • 沥青砼路面监理实施细则
  • B13 常州市武进区龙江路高架南延工程三标 监理实施细则 ( 沥青砼路面) 内容提要: 专业工程特点 监理工作流程 监理工作控制目标及控制要点 监理工作方法及措施 项目监理机构(章): 专业监理工程师: 总监理工程师: 日 期: 2011年 ...查看


热门内容