实验目的:设计分数类,开发一个窗口式程序,可以完成分数的四则运算。
实验代码:
Fraction.h class Fraction { public: Fraction(){mole = 1; deno = 1;} Fraction(int x, int y){mole = x; deno = y;} int get_mole(); int get_deno(); void Simplify(); private: int mole; int deno; };
Fraction.cpp #include "stdafx.h" #include "Fraction.h" int Fraction::get_mole() { return mole; } int Fraction::get_deno() { return deno; } void Fraction::Simplify() { int m,n,r; m = abs(deno); n = abs(mole); while(r = m % n) // 求m,n的最大公约数 { m = n; n = r; } deno /= n; // 化简 mole /= n; if (deno < 0) // 将分母转化为正数 { deno = -deno; mole = -mole; } }
FractionDlg.cpp void CmyfractionDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CmyfractionDlg::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 { CDialog::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CmyfractionDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CmyfractionDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); if(symbol == '+') { if(a_deno == b_deno) { c_mole = a_mole + b_mole; c_deno = a_deno; } else { c_mole = a_mole * b_deno + a_deno * b_mole; c_deno = a_deno * b_deno; } } else if(symbol == '-') { if(a_deno == b_deno) { c_mole = a_mole - b_mole; c_deno = a_deno; } else { c_mole = a_mole * b_deno - a_deno * b_mole; c_deno = a_deno * b_deno; } } else if(symbol == '*') { c_mole = a_mole * b_mole; c_deno = a_deno * b_deno; } else if(symbol == '/') { c_mole = a_mole * b_deno; c_deno = a_deno * b_mole; } Fraction fc(c_mole, c_deno); fc.Simplify(); c_mole = fc.get_mole(); c_deno = fc.get_deno(); UpdateData(FALSE); }
实验结果截图:
实验心得:
好了,真的是改了,实验任务是要求完成相应分数的四则运算,可是我没看清题意,只做了加法,而且是直接将窗口中的‘+’直接以插件的形式插入,命名为+,所以,这下就麻烦了,还要将+改为可输入的符号,还必须根据不同的运算符进行不同的操作,唉,都怪自己一时大意了,这不,又费了好些事,才完成,所以,亲爱的童鞋们啊,一定要看清老师给的实验报告的意思哈,不然,会很要命的,耽误时间!!!!!还做了错误的程序,现在还好,有补救的机会,可是以后可能就会是很要命的失误啊,以后一定要养成细心的习惯。