作为前机械男,晒晒自己第一次做的自动化设计程序 (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();}
- 作为前机械男,晒晒自己第一次做的自动化设计程序 (1)
- 最近在做fzu的题库,晒晒自己写的程序
- 晒晒自己的生活
- 晒晒自己写的C++小程序(初学,书上的题目)
- 晒晒自己写的C++小程序(初学,书上的题目)
- 晒晒自己写的C++小程序(初学,书上的题目)
- C#基础告一段落,做的小程序晒晒
- 晒晒自己编写的软件
- 晒晒自己的工资吧
- 第一次做设计的心得
- 晒晒自己学了这段时间的C语言自己写的简单的程序
- 晒晒我常用的自动化脚脚本
- 晒晒我的程序人生
- 跟风晒晒自己作为一位大数据程序员看过的还不错的书 -持续更新中
- 跟风晒晒自己作为一位大数据程序员看过的还不错的书 -持续更新中 .
- 晒晒俺的收藏(1)
- 第一次自己做决定
- 第一次做自己
- 关于三星手机拍照 获取的照片旋转处理
- HTTPClient与jsoup爬起网页
- BigDecimal比较问题
- C++复制构造函数的问题
- 解决QScrollArea不能出现滚动条的问题
- 作为前机械男,晒晒自己第一次做的自动化设计程序 (1)
- 正则表达式 替换字符串 [javascript]
- SVN有任何胜过git的地方吗?
- 各种手段终于将土豆视频url请求找到了
- 汉语转拼音缩写
- 菜鸟Android学习之路28——AlertDialog(2)带列表的列表对话框
- __builtin_return_address(LEVEL)
- Application windows are expected to have a root view controller at the end of appliaction launch.
- 获取桌面指定路径