第十五周实验报告 任务二

来源:互联网 发布:java线程超时关闭 编辑:程序博客网 时间:2024/05/17 23:07

源程序:

CFractionDlg.cpp

// CFractionDlg.cpp : 实现文件//#include "stdafx.h"#include "MyCFraction.h"#include "CFraction.h"#include "CFractionDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialog{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()// CCFractionDlg 对话框CCFractionDlg::CCFractionDlg(CWnd* pParent /*=NULL*/): CDialog(CCFractionDlg::IDD, pParent), m_nu1(0), m_de1(0), m_nu2(0), m_de2(0), m_nu3(0), m_de3(0), m_char1(_T("")){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CCFractionDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, m_nu1);DDX_Text(pDX, IDC_EDIT2, m_de1);DDX_Text(pDX, IDC_EDIT4, m_nu2);DDX_Text(pDX, IDC_EDIT5, m_de2);DDX_Text(pDX, IDC_EDIT7, m_nu3);DDX_Text(pDX, IDC_EDIT6, m_de3);DDX_Control(pDX, IDC_EDIT3, m_char);DDX_Text(pDX, IDC_EDIT3, m_char1);}BEGIN_MESSAGE_MAP(CCFractionDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()//}}AFX_MSG_MAPON_BN_CLICKED(IDC_BUTTON1, &CCFractionDlg::OnBnClickedButton1)END_MESSAGE_MAP()// CCFractionDlg 消息处理程序BOOL CCFractionDlg::OnInitDialog(){CDialog::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE}void CCFractionDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// 如果向对话框添加最小化按钮,则需要下面的代码//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,//  这将由框架自动完成。void CCFractionDlg::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 CCFractionDlg::OnQueryDragIcon(){return static_cast<HCURSOR>(m_hIcon);}void CCFractionDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码UpdateData();CFraction c1(m_nu1, m_de1), c2(m_nu2, m_de2), c3(m_nu3, m_de3);if(m_char1 == "+")c3 = c1 + c2;else if(m_char1 == "-")c3 = c1 - c2;else if(m_char1 == "*")c3 = c1 * c2;else if(m_char1 == "/")c3 = c1 / c2;m_nu3 = c3.get_nume();m_de3 = c3.get_deno();UpdateData(FALSE);}

MyCFraction.cpp

#include "stdafx.h"#include "MyCFraction.h"void CFraction::simplify(){int m,n,r;m=abs(deno);n=abs(nume);while(r=m%n)  // 求m,n的最大公约数{m=n;n=r;}deno/=n;     // 化简nume/=n;if (deno<0)  // 将分母转化为正数{deno=-deno;nume=-nume;}}// 分数相加CFraction CFraction::operator+(const CFraction &c){CFraction t;t.nume=nume*c.deno+c.nume*deno;t.deno=deno*c.deno;t.simplify();return t;}// 分数相减CFraction CFraction:: operator-(const CFraction &c){CFraction t;t.nume=nume*c.deno-c.nume*deno;t.deno=deno*c.deno;t.simplify();return t;}// 分数相乘CFraction CFraction:: operator*(const CFraction &c){CFraction t;t.nume=nume*c.nume;t.deno=deno*c.deno;t.simplify();return t;}// 分数相除CFraction CFraction:: operator/(const CFraction &c){CFraction t;if (!c.nume) return *this;   //除法无效(除数为0)时,这种情况需要考虑,但这种处理仍不算合理t.nume=nume*c.deno;t.deno=deno*c.nume;t.simplify();return t;}int CFraction::get_deno(){return deno;}int CFraction::get_nume(){return nume;}

MyCFraction.h

class CFraction{private:int nume;  // 分子int deno;  // 分母public:CFraction(int nu=0,int de=1):nume(nu),deno(de){}void simplify();CFraction operator+(const CFraction &c);  //两个分数相加,结果要化简CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简CFraction operator*(const CFraction &c);  //两个分数相乘,结果要化简CFraction operator/(const CFraction &c);  //两个分数相除,结果要化简int get_nume();int get_deno();};


截图:

完成了任务一后觉得这个会很麻烦···结果果然很麻烦···一开始没加上返回私有数据成员的那两个函数···前面怎么变后面都是0/0···

不过完成这个后觉得收获很大呢!!

原创粉丝点击