作为前机械男,晒晒自己第一次做的自动化设计程序 (1)

来源:互联网 发布:vc 数据库控件 编辑:程序博客网 时间:2024/05/01 12:53

   

前言:

机械设计这门课程老师特有意思。和他经常交流,真的感觉他好牛。别的老师都是布置一些正儿八经的题目什么的,而他却给我们布置一个程序设计题。(这让班上一个个纯机械男头大不已。)不过,正和我胃口,有机会能把兴趣和专业结合起来。

第一次自己设计有界面的程序,运用到的技术不多,不过自己遇到问题再熬夜解决问题的感觉很nice!大笑


(可参考:对话框跳转,图片控件,组合框控件)

(可改进:查表用数据库代替,更智能化;计算结果能写入在一个文本文件里或者显示在一个文本控件中,方便结果的使用。奋斗)


目标:实现某种机械设计的自动化设计计算。

我选择的是:链传动,带传动。


链传动

一:变量说明:

 

变量

公式中代号

意义

单位

程序中主要变量名

P

 

额定功率

kw

m_P1,m_edgl,

n1

 

主动链转速

r/min

m_n1

i

 

传动比

 

m_cdb,

z1

 

小齿轮齿数

 

m_z1,

z2

 

大齿轮齿数

 

m_z2,

Lp

 

链长结数

 

Lp

a

 

中心距

mm

 

Ka

 

工况系数

 

m_gkxs

Pca

 

计算功率

 

m_Pca,m_Pca2

Kz

 

主动链轮齿数系数

 

m_Kz,m_Kz2

p

 

链条节距

mm

m_ltjj , m_p

f1

 

中心距计算系数

 

m_f1

v

 

链速

m/s

m_v

Fp

 

压轴力

N

m_Fp

Fe

 

有效圆周力

N

m_Fe

链条型号

 

链条型号

 

m_ltxh

润滑方式

 

润滑方式

 

m_rhfs

 (有点乱尴尬,以后注意)

编程平台:VS2012

编程方式:MFC(C++)

 

二:程序演示:(以教材例题为例)

1,打开程序

 

 

2,欢迎页:

点击开始:

 

 

3,参数选取:

     在相应编辑框内输入原始参数:额大功率,传动比,主动链齿轮转速

     在组合框中,初步选取小齿轮齿数,查表得到齿数系数Kz

 

 

 

根据载荷特性,查表,选取工况系数

 


根据主动链轮转速n1和计算功率Pca,查表选择链条型,同时得到链条节距(程序自动给出):

 

 

4,计算过程

求出初选中心距a0,链结距Lp,和f1

根据f1,计算得出最大中心距,链速v,压轴力Fp

 

 

根据前面计算得出的链速v和链条型号,选取润滑方式:

 

5,得出设计结果:

如图

一共七个对话框



二:程序:

注:对话框1程序完全引入,其余对话框则只引入程序主体,方便查看。

    各个对话框对应类名:对话框1:MFCApplication2Dlg.h

对话框2:BDlg.h       对话框3:B2.h       对话框4:B4.h        

对话框5:B6.h         对话框6:B7.h       对话框7:B8.h

 

 

(1)对话框1(欢迎页):

//MFCApplication2Dlg.cpp :实现文件

#include "stdafx.h"#include "MFCApplication2.h"#include "MFCApplication2Dlg.h"#include "afxdialogex.h"#include "BDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif            class CAboutDlg : public CDialogEx{public:    CAboutDlg();    enum { IDD = IDD_ABOUTBOX };     protected:    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 protected:    DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){    CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()//CMFCApplication2Dlg 对话框CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd*pParent /*=NULL*/)    : CDialogEx(CMFCApplication2Dlg::IDD,pParent){    m_hIcon =AfxGetApp()->LoadIcon(IDR_MAINFRAME);} voidCMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX){    CDialogEx::DoDataExchange(pDX);} BEGIN_MESSAGE_MAP(CMFCApplication2Dlg,CDialogEx)    ON_WM_SYSCOMMAND()    ON_WM_PAINT()    ON_WM_QUERYDRAGICON()    ON_BN_CLICKED(IDC_BUTTON1,&CMFCApplication2Dlg::OnBnClickedButton1)END_MESSAGE_MAP() //CMFCApplication2Dlg 消息处理程序BOOLCMFCApplication2Dlg::OnInitDialog(){    CDialogEx::OnInitDialog();     // 将“关于...”菜单项添加到系统菜单中。    // IDM_ABOUTBOX 必须在系统命令范围内。    ASSERT((IDM_ABOUTBOX & 0xFFF0) ==IDM_ABOUTBOX);    ASSERT(IDM_ABOUTBOX < 0xF000);     CMenu* pSysMenu = GetSystemMenu(FALSE);    if (pSysMenu != NULL)    {        BOOL bNameValid;        CString strAboutMenu;        bNameValid =strAboutMenu.LoadString(IDS_ABOUTBOX);        ASSERT(bNameValid);        if(!strAboutMenu.IsEmpty())        {            pSysMenu->AppendMenu(MF_SEPARATOR);            pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu);        }    }     // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动    //  执行此操作    SetIcon(m_hIcon, TRUE);         // 设置大图标    SetIcon(m_hIcon, FALSE);        // 设置小图标     return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE} voidCMFCApplication2Dlg::OnSysCommand(UINT nID, LPARAM lParam){    if ((nID & 0xFFF0) == IDM_ABOUTBOX)    {        CAboutDlg dlgAbout;        dlgAbout.DoModal();    }    else    {        CDialogEx::OnSysCommand(nID, lParam);    }}// 如果向对话框添加最小化按钮,则需要下面的代码//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,//  这将由框架自动完成。 voidCMFCApplication2Dlg::OnPaint(){    if (IsIconic())    {        CPaintDC dc(this); // 用于绘制的设备上下文         SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()),0);         // 使图标在工作区矩形中居中        int cxIcon =GetSystemMetrics(SM_CXICON);        int cyIcon =GetSystemMetrics(SM_CYICON);        CRect rect;        GetClientRect(&rect);        int x = (rect.Width() -cxIcon + 1) / 2;        int y = (rect.Height()- cyIcon + 1) / 2;         // 绘制图标        dc.DrawIcon(x, y, m_hIcon);    }    else    {        CDialogEx::OnPaint();    }}//当用户拖动最小化窗口时系统调用此函数取得光标HCURSORCMFCApplication2Dlg::OnQueryDragIcon(){    return static_cast<HCURSOR>(m_hIcon);} void CMFCApplication2Dlg::OnBnClickedButton1(){     CBDlgdlg; this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);}



(2)对话框2(初始参数选取):

// CBDlg 消息处理程序BOOL CBDlg::OnInitDialog(){    CDialogEx::OnInitDialog();    UpdateData(FALSE);    m_z11.ResetContent(); /*使用之前清空选项框*/      // 在组合框控件的列表框中索引位置插入列表项“”    m_z11.AddString(_T("17"));  /*("")前面加了个_T,这是因为本工程创建的时候用的默认的Unicode字符集,而如果("")前不加_T就是ASCII字符串,_T实际上是一个宏。*/     m_z11.InsertString(1, _T("19"));       m_z11.InsertString(2, _T("21"));    m_z11.InsertString(3, _T("23"));    m_z11.InsertString(4, _T("25"));    m_z11.InsertString(5, _T("38"));    m_z11.InsertString(6, _T("57"));    m_z11.InsertString(7, _T("76"));    m_z11.InsertString(8, _T("95"));    m_z11.InsertString(9, _T("114"));    // 默认选择第一项       m_z11.SetCurSel(0);       // 编辑框中默认显示第一项的文字“”       SetDlgItemText(IDC_COMBO1, _T("选择齿数"));     return TRUE;    return TRUE;     return TRUE;     return TRUE;    return TRUE;} void CBDlg::OnCbnSelchangeCombo1(){    CString strWeb;    CString Kz;    int nSel;       // 获取组合框控件的列表框中选中项的索引       nSel = m_z11.GetCurSel();       // 根据选中项索引获取该项字符串       m_z11.GetLBText(nSel, strWeb);       // 将组合框中选中的字符串显示到编辑框中       SetDlgItemText(IDC_z1, strWeb);    UpdateData(TRUE);    if(m_z1==17)        { m_Kz=1.50;         Kz=(char)m_Kz;}    if(m_z1==21)        { m_Kz=1.22;         Kz=(char)m_Kz;}    if(m_z1==19)        { m_Kz=1.34;         Kz=(char)m_Kz;}    if(m_z1==23)        { m_Kz=1.11;         Kz=(char)m_Kz;}    if(m_z1==25)        { m_Kz=1.0;         Kz=(char)m_Kz;}    if(m_z1==38)        { m_Kz=0;         Kz=(char)m_Kz;}    if(m_z1==57)        { m_Kz=0;         Kz=(char)m_Kz;}    if(m_z1==76)        { m_Kz=0;         Kz=(char)m_Kz;}    if(m_z1==95)        { m_Kz=0;         Kz=(char)m_Kz;}    if(m_z1==114)        { m_Kz=0;         Kz=(char)m_Kz;}       SetDlgItemText(IDC_Kz, Kz);    UpdateData(FALSE);} void CBDlg::OnBnClickedButton2(){    UpdateData(TRUE);    m_z2=m_cdb*m_z1;   UpdateData(FALSE);     B2 dlg;    dlg.m_a222=m_edgl;    dlg.m_P1=m_edgl;    dlg.m_Kz2=m_Kz;    dlg.m_n1=m_n1;    dlg.m_z1=m_z1;    dlg.m_z2=m_z2;    this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW); UpdateData(FALSE);}  void CBDlg::OnClose(){    exit(0);}


(3)对话框3(工况系数选取):

//B2 消息处理程序BOOL B2::OnInitDialog(){    CDialogEx::OnInitDialog();    UpdateData(FALSE);    m_Ka.ResetContent(); /*使用之前清空选项框*/      // 在组合框控件的列表框中索引位置插入列表项“”    m_Ka.AddString(_T("1.0"));      m_Ka.InsertString(1, _T("1.1"));       m_Ka.InsertString(2, _T("1.3"));    m_Ka.InsertString(3, _T("1.4"));    m_Ka.InsertString(4, _T("1.5"));    m_Ka.InsertString(5, _T("1.7"));    m_Ka.InsertString(6, _T("1.8"));    m_Ka.InsertString(7, _T("1.9"));    m_Ka.InsertString(8, _T("2.1"));     m_Ka.SetCurSel(0);       // 编辑框中默认显示第一项的文字“”       SetDlgItemText(IDC_COMBO1, _T("选择工况系数"));     return TRUE;    return TRUE;    return TRUE;    return TRUE;    return TRUE;} void B2::OnBnClickedButton2(){   UpdateData(TRUE);    m_Pca=m_Kz2*m_gkxs*m_P1     B4 dlg;    dlg.m_Pca2=m_Pca;    dlg.m_n12=m_n1;    dlg.m_z1=m_z1;    dlg.m_z2=m_z2;    dlg.m_P=m_a222; this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);} void B2::OnCbnSelchangeCombo1(){    CString strWeb;       int nSel;       // 获取组合框控件的列表框中选中项的索引       nSel = m_Ka.GetCurSel();       // 根据选中项索引获取该项字符串       m_Ka.GetLBText(nSel, strWeb);       // 将组合框中选中的字符串显示到编辑框中       SetDlgItemText(IDC_EDIT1, strWeb);    // TODO: 在此添加控件通知处理程序代码} void B2::OnClose(){    // TODO: 在此添加消息处理程序代码和/或调用默认值    exit(0);    CDialogEx::OnClose();} 


(4)对话框4(链条型号选择):

//B4 消息处理程序BOOL B4::OnInitDialog(){    CDialogEx::OnInitDialog();    UpdateData(FALSE);    m_ltxh2.ResetContent(); /*使用之前清空选项框*/       // 在组合框控件的列表框中索引位置插入列表项“”    m_ltxh2.AddString(_T("08A -1"));       m_ltxh2.InsertString(1, _T("10A -1"));       m_ltxh2.InsertString(2, _T("12A -1"));    m_ltxh2.InsertString(3, _T("16A -1"));    m_ltxh2.InsertString(4, _T("20A -1"));    m_ltxh2.InsertString(5, _T("24A -1"));    m_ltxh2.InsertString(6, _T("28A -1"));    m_ltxh2.InsertString(7, _T("32A -1"));    m_ltxh2.InsertString(8, _T("40A -1"));    m_ltxh2.InsertString(9, _T("48A -1"));    // 默认选择第一项      m_ltxh2.SetCurSel(0);       // 编辑框中默认显示第一项的文字“”       SetDlgItemText(IDC_COMBO1, _T("选择链条型号"));     return TRUE;    return TRUE;  //     return TRUE;  //     return TRUE;  //     return TRUE;  // }  void B4::OnBnClickedButton2(){   UpdateData(TRUE);       B6 dlg;    dlg.m_ltxh2=m_ltxh;    dlg.m_p=m_ltjj1;    dlg.m_z1=m_z1;    dlg.m_z2=m_z2;    dlg.m_n1=m_n12;    dlg.m_P1=m_P;     if(m_ltxh=="08A -1")    {  dlg.m_ltjj=12.70;}    if(m_ltxh=="10A -1")    {  dlg.m_ltjj=15.875;}    if(m_ltxh=="12A -1")    {  dlg.m_ltjj=19.05;}    if(m_ltxh=="16A -1")    {  dlg.m_ltjj=25.40;}    if(m_ltxh=="20A -1")    {  dlg.m_ltjj=31.75;}    if(m_ltxh=="24A -1")    {  dlg.m_ltjj=38.1;}    if(m_ltxh=="28A -1")    {  dlg.m_ltjj=44.45;}    if(m_ltxh=="32A -1")    {  dlg.m_ltjj=50.80;}    if(m_ltxh=="40A -1")    {  dlg.m_ltjj=63.50;}    if(m_ltxh=="48A -1")    {  dlg.m_ltjj=76.20;}    this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);} void B4::OnCbnSelchangeCombo1(){    CString strWeb;     CString ltjj;    int nSel;       // 获取组合框控件的列表框中选中项的索引       nSel = m_ltxh2.GetCurSel();       // 根据选中项索引获取该项字符串      m_ltxh2.GetLBText(nSel, strWeb);       // 将组合框中选中的字符串显示到编辑框中       SetDlgItemText(IDC_EDIT1, strWeb);       UpdateData(TRUE);    if(m_ltxh=="08A -1")    {  m_ltjj1=12.70;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="10A -1")    {  m_ltjj1=15.875;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="12A -1")    {  m_ltjj1=19.05;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="16A -1")    {  m_ltjj1=25.40;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="20A -1")    {   m_ltjj1=31.75;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="24A -1")    { m_ltjj1=38.1;    ltjj=(char)m_ltjj1;}    if(m_ltxh=="28A -1")    { m_ltjj1=44.45;   ltjj=(char)m_ltjj1;}    if(m_ltxh=="32A -1")    {  m_ltjj1=50.80;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="40A -1")    {   m_ltjj1=63.50;  ltjj=(char)m_ltjj1;}    if(m_ltxh=="48A -1")    { m_ltjj1=76.20;    ltjj=(char)m_ltjj1;}       SetDlgItemText(IDC_EDIT4, ltjj);    UpdateData(FALSE);} void B4::OnClose(){   exit(0);    CDialogEx::OnClose();}


(5)对话框5(计算):

//B6 消息处理程序BOOL B6::OnInitDialog(){    CDialogEx::OnInitDialog();    UpdateData(FALSE);    return TRUE;  //      return TRUE;  //      // TODO:  在此添加额外的初始化    return TRUE;  //      return TRUE;  //  } void B6::OnBnClickedButton3(){    int a;    UpdateData(TRUE);    m_p=m_ltjj;    m_a0=m_zhfs*m_p;    Lp=m_a0*2/m_p+(m_z1+m_z2)/2+((m_z2-m_z1)/2/3.14159)*((m_z2-m_z1)/2/3.14159)*m_p/m_a0;    Lp=ceil( Lp);    a=Lp;    if (a%2==0)     {Lp=a; }    else    { Lp=a-1;}     m_jsxs=(Lp-m_z1)/(m_z2-m_z1);    UpdateData(FALSE);} void B6::OnBnClickedButton4(){    UpdateData(TRUE);    m_amax=m_f1*m_p*(2*Lp-m_z1-m_z2);    m_v=m_n1*m_z1*m_p/60000;    m_Fe=(1000*m_P1)/m_v;    m_Fp=m_Fe*1.15;    UpdateData(FALSE);} void B6::OnBnClickedButton2(){   UpdateData(TRUE);       B7 dlg;    dlg.m_z1=m_z1;    dlg.m_z2=m_z2;    dlg.m_ltxh=m_ltxh2;    dlg.m_Lp1=Lp;    dlg.m_ls=m_v;    dlg.m_a=m_amax;  this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);}  void B6::OnClose(){   exit(0);    CDialogEx::OnClose();}  


(6)对话框6(选取润滑方式):

//B7 消息处理程序BOOL B7::OnInitDialog(){    CDialogEx::OnInitDialog();    UpdateData(FALSE);    m_rhfs2.ResetContent(); /*使用之前清空选项框*/       // 在组合框控件的列表框中索引位置插入列表项“”    m_rhfs2.AddString(_T("1-定期热工润滑"));       m_rhfs2.InsertString(1, _T("2-滴油润滑"));       m_rhfs2.InsertString(2, _T("3-油池润滑"));    m_rhfs2.InsertString(3, _T("4-压力供油润滑"));       // 默认选择第一项      m_rhfs2.SetCurSel(0);       // 编辑框中默认显示第一项的文字“”       SetDlgItemText(IDC_COMBO1, _T("选择润滑方式"));     return TRUE;    return TRUE;  //     return TRUE;  //     return TRUE;  //     return TRUE;  // } void B7::OnCbnSelchangeCombo1(){    CString strWeb;       int nSel;       // 获取组合框控件的列表框中选中项的索引       nSel = m_rhfs2.GetCurSel();       // 根据选中项索引获取该项字符串      m_rhfs2.GetLBText(nSel, strWeb);       // 将组合框中选中的字符串显示到编辑框中       SetDlgItemText(IDC_EDIT3, strWeb);} void B7::OnBnClickedButton2(){     UpdateData(TRUE);    B8 dlg;    dlg.m_z11=m_z1;    dlg.m_z21=m_z2;    dlg.m_rhfs=m_rhfs;    dlg.m_ltxh=m_ltxh;    dlg.m_Lp1=m_Lp1;    dlg.m_a=m_a;  this->ShowWindow(SW_HIDE); dlg.DoModal(); this->ShowWindow(SW_SHOW);} void B7::OnClose(){exit(0);    CDialogEx::OnClose();}

(7)对话框7(设计结果):

//B8 消息处理程序void B8::OnBnClickedButton2(){exit(0);} BOOL B8::OnInitDialog(){    CDialogEx::OnInitDialog();    UpdateData(FALSE);     return TRUE;       return TRUE;        return TRUE;        return TRUE; }void B8::OnClose(){exit(0);    CDialogEx::OnClose();}







0 0
原创粉丝点击