• 2017《面向对象程序设计》课程作业六


    2017《面向对象程序设计》课程作业六

    031602230 卢恺翔

    题目描述

    • 本次作业要求将四则运算的核心部分采取栈的知识进行解决。即表达式生成的合法性检验、表达式结果计算。
    • 学习C++界面编程,可以学QT、MFC或者VS,选择其一即可,用博客记录学习到的知识以及心得体会。

    作业要求

    • 本次作业要求实现核心算法,请将表达式生成的代码及相关的检验、计算表达式结果的代码贴在博客中,并对代码进行必要的解释。
    • 发表一篇博客,博客内容为:提供本次作业的github链接,本次程序运行的截图,对界面编程的探索。

    问题一:本次作业要求实现核心算法,请将表达式生成的代码及相关的检验、计算表达式结果的代码贴在博客中,并对代码进行必要的解释。

    核心算法,即计算表达式结果已经运用了栈的知识并且在上一篇博客讲过了,这边就不叙述了。(详见2017《面向对象程序设计》课程作业五

    GitHub链接

    表达式生成

    我第一次生成2个数字和一个字符,然后再随机括号在他们旁边。做完这些操作后,把这些看做一个小算式,再生成一个字符和数字添加在小算式的后面,再随机括号在他们旁边,然后重复操作,就形成了表达式。

    data.cpp

    int Data::randomNumber()		//用于随机生成数字
    {
    	random = rand() % 10+1 ;
    	return random;
    }
    char Data::randomOperation()	//用于随机生成运算符
    {
    	random = rand() % 4;
    	switch (random)
    	{
    	case 0: randomsym = '+'; break;
    	case 1: randomsym = '-'; break;
    	case 2: randomsym = '*'; break;
    	case 3: randomsym = '/'; break;
    	}
    	return randomsym;
    }
    string Data::bracket(string str)   // 随机括号
    
    {
    	random = rand() % 2;
    	if (random == 1)
    	{
    		str = '(' + str + ')';
    	}
    	return str;
    
    }
    
    
    string Data::int_str(int number)   // 数字转字符串
    
    {
    
    	char str[100];
    	_itoa_s(number, str, 10);
    	string i_s = str;
    	return i_s;
    
    }
    
    
    string Data::connect(string str1, string str2, char a)   // 连接数字运算符
    
    {
    
    	equ = str1 + a + str2;
    
    	return equ;
    
    }
    

    main.cpp

    string generateExpression(int i,char *p)		//用于生成运算式
    {
    	int n1, n2;
    	Data dat;
    	n1 = dat.randomNumber();	//随机数字
    	n2 = dat.randomNumber();	//随机数字
    	char sign;
    	sign = dat.randomOperation();	//随机生成字符 
    	string str_n1, str_n2, temp;
    	str_n1 = dat.int_str(n1);	//将数字转换为字符串 
    	str_n2 = dat.int_str(n2);	//将数字转换为字符串 
    	string equation;
    	equation = dat.connect(str_n1, str_n2, sign);	//连接2个数字和1个符号 
    	for (int j = 0; j < 2; j++)
    	{
    		str_n1 = dat.bracket(equation);   // 每2个数字和一个符号就随机在两端加一个括号 
    		n2 = rand() % (10-1+1)+1;
    		str_n2 = dat.int_str(n2);
    		int exchange;
    		exchange = rand() % 2;     // 对字符串位置进行随机交换
    		if (exchange == 1)
    		{
    			temp = str_n1;
    			str_n1 = str_n2;
    			str_n2 = temp;
    		}
    		sign = dat.randomOperation();
    		equation = dat.connect(str_n1, str_n2, sign);  //把那2个数字和1个符号看做旧的的字符串,将新生成的数字与字符连接上旧的的字符串上
    	}
    	string str_i;
    	str_i = dat.int_str(i);
    	equation = "(" + str_i + ")" + equation + "=";
    	cout << equation << endl;       //生成运算式 
    	cout << boundadry[1] ;
    	return equation;
    }
    

    问题2:学习C++界面编程,可以学QT、MFC或者VS,选择其一即可,用博客记录学习到的知识以及心得体会。

    因为vs有自带的FMC,所以我直接学习了MFC界面编程。

    因为是视频学习,时间有限。学到的内容不是很多,总结为一下几点:

    1. MFC(Microsoft Foundation Class),成为类库。API(Application Programing Interface)应用程序编程接口,是由操作系统提供,面向操作系统的开发接口,只限制于本操作系统使用。
    2. 每一个控件都有一个属于自己的ID,就像人有自己的名字一样,如果需要从控件中获取数据或者传递数据给控件的话,要使用它们的ID。
    3. 每一个按钮都代表着一个函数,用于操作各种内容,双击按钮就可以直接编程。或者可以调试后直接跳到函数部分。
    4. 2个最常用的函数:
      从控件中取值: GetDlgItemInt(ID号),给控件传值:SetDlgItemInt(ID号, 想要传的值)

    于是自己尝试做了一个教程教的小界面。效果如图所示

    代码如下:

    void CMFCApplication2Dlg::OnBnClickedButton1()
    {
    	int a;
    	int b;
    	int sum;
    	a = GetDlgItemInt(IDC_LEFT1);
    	b = GetDlgItemInt(IDC_RIGHT1);
    	sum = a + b;
    	SetDlgItemInt(IDC_RESULT1, sum);
    	// TODO: 在此添加控件通知处理程序代码
    	// TODO: 在此添加控件通知处理程序代码
    }
    
    
    void CMFCApplication2Dlg::OnBnClickedButton2()
    {
    	int a;
    	int b;
    	a = GetDlgItemInt(IDC_LEFT2);
    	b = GetDlgItemInt(IDC_RIGHT2);
    	SetDlgItemInt(IDC_RESULT2, a-b);
    	// TODO: 在此添加控件通知处理程序代码
    }
    
    
    void CMFCApplication2Dlg::OnBnClickedButton3()
    {
    	int a;
    	int b;
    	a = GetDlgItemInt(IDC_LEFT3);
    	b = GetDlgItemInt(IDC_RIGHT3);
    	SetDlgItemInt(IDC_RESULT3, a*b);
    	// TODO: 在此添加控件通知处理程序代码
    }
    
    
    
    void CMFCApplication2Dlg::OnBnClickedButton4()
    {
    	int a;
    	int b;
    	int sum;
    	a = GetDlgItemInt(IDC_LEFT4);
    	b = GetDlgItemInt(IDC_RIGHT4);
    	SetDlgItemInt(IDC_RESULT4, a/b);
    	// TODO: 在此添加控件通知处理程序代码
    }
    

    这些都是非常基础的MFC简单操作,复杂的操作还在学习ing,但是起码这是一个能看的程序吧(比那个dos界面好看多了)。

  • 相关阅读:
    zip
    yield
    日记
    cat
    genfromtext
    pytorch易忘
    小程序入门(一)
    (二)连接数据库使用Model对象对数据库进行操作(CRUD)
    (一)Moogose(node.js对数据库进行操作)
    CURD练习
  • 原文地址:https://www.cnblogs.com/leolkx/p/6926074.html
Copyright © 2020-2023  润新知