zoukankan      html  css  js  c++  java
  • 软件工程(第三次作业)

    软件工程(第三次作业)

    组员:周德莉、王铭霞

    一、题目

    在之前编写的四则运算程序基础之上做如下改进:

    1  请参照教材Page57:4.2-4.3节中内容,修改原程序,使之符合 “代码风格和设计规范”的基本要求;

    2  请采用模块化设计思想,修改之前的code,将 “计算功能” 封装起来

    小提示:

    假如在C语言环境下,可将函数声明与具体实现分别存放在头文件(.h)和源文件(.c)中;

    3  通过测试程序和API 接口,测试其简单的加法功能。

    小提示:

    单元测试方法请参看教材Page21:2.1.1节内容

    4  扩展程序功能(选做)

    针对第一次作业添加功能点支持:
    1). 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
    2). 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8

    二、需求分析

        1、基本功能

             1)此软件可选择所需的四则运算符号,即加、减、乘、除。

             2)对于用户选择的运算符号可自动生成两个随机数的整数想x,y。

             3)该软件可通过用户手动输入运算结果,判断用户答案的对错。

             4)对于用户答案的正确与否可进行统计对错数量。

        2、本组选择的扩展功能为第二个

               即可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8

    基本设计

           ——修改了原程序,使之基本符合 “代码风格和设计规范”的要求。

           ——在Visual Studio 2010环境下对代码进行分拆、封装和测试。

           ——请采用模块化设计思想,修改之前的code,将 “计算功能” 封装起来。

           ——将函数声明与具体实现分别存放在头文件(.h)和源文件(.cpp)中。

           ——对于算术中的加法进行测试。

    四、代码

    stdaxf.h

    #include<stdio.h>
    #include<stdlib.h>
    #include<windows.h>
    #include<time.h>
    void jia( int *, int * );
    void jian(int *, int * );
    void cheng(int *, int *);
    void chu(int *, int *);
    

     stdafx.cpp

    #include"stdafx.h"
    
    void jia(int *p, int *q)
    {
    	int x, y, z;
    	srand((unsigned)time(NULL));
    	x = rand() % 201-100;
    	y = rand() % 201-100;
    	if(x<0&&y>0)
    	{
    	     printf("请输入您的答案:(%d)+%d=", x, y);
    	}
    	else if(x>0&&y<0)
    		 printf("请输入您的答案:(%d)+%d=", x, y);
    	else if(x<0&&y<0)
    	{
    		printf("请输入您的答案:(%d)+(%d)=", x, y);
    	}
    	scanf_s("%d", &z);
    	if (x + y != z)
    	{
    		printf("回答错误!
    ");
    		*q++;
    	}
    	else
    	{
    		printf("回答正确!
    ");
    		*p++;
    	}
    }
    void jian(int *p, int *q)
    {
    	int x, y, z;
    	srand((unsigned)time(NULL));
    	x = rand() % 201-100;
    	y = rand() % 201-100;
    	if(x<0&&y>0)
    	{
    	  printf("请输入您的答案:(%d)-%d=", x, y);
    	}
    	else if(x>0&&y<0)
    	{
          printf("请输入您的答案:%d-(%d)=", x, y);	
    	}
    	else if(x<0&&y<0)
    	{
          printf("请输入您的答案:(%d)-(%d)=", x, y);	
    	}
    	scanf_s("%d", &z);
    	if (x - y != z)
    	{
    		printf("回答错误!
    "); 
    		*q++;
    	}
    	else
    	{
    		printf("回答正确!
    ");
    		*p++;
    	}
    }
    void cheng(int *p, int *q)
    {
    	int x, y, z;
    	srand((unsigned)time(NULL));
    	x = rand() %201- 100;
    	y = rand() %201- 100;
    	if(x<0&&y>0)
    	{
    	    printf("请输入您的答案:(%d)*%d=", x, y);
    	}
    	else if(x>0&&y<0){
    	  printf("请输入您的答案:%d*(%d)=", x, y);
    	}
    	else if(x<0&&y<0){
    	  printf("请输入您的答案:(%d)*(%d)=", x, y);
    	}
    	scanf_s("%d", &z);
    	if (x*y != z)
    	{
    		printf("回答错误!
    ");
    		*q++;
    	}
    	else
    	{
    		printf("回答正确!
    ");
    		*p++;
    	}
    }
    void chu (int *p, int *q)
    {
    	int x, y, z;
    	srand((unsigned)time(NULL));
    	x = rand() % 201-100;
    	y = rand() % 201 -100;
    	if (x<0&&y>0)
    	{
    		printf("请输入您的答案:(%d)/%d=", x, y);
    	}
    	else if(x>0&&y<0)
    	{
    	    printf("请输入您的答案:(%d)/%d=", x, y);
    	}
    	else if(x<0&&y<0)
    	{
    	    printf("请输入您的答案:(%d)/(%d)=", x, y);
    	}
    	scanf_s("%d", &z);
    	if (x / y != z)
    	{
    		printf("回答错误!
    ");
    		*q++;
    	}
    	else
    	{
    		printf("回答正确!
    ");
    		*p++;
    	}
    }
    

     sizeyunsuan.cpp

    #include"stdafx.h"
    
    int right = 0; int wrong = 0; void main() { int *p = &right; int *q = &wrong; int choise, sum = 0; printf(" *********************欢迎来到我的C语言四则运算程序系统!************************ "); system("pause"); system("cls"); while (1) { printf(" 请选择计算符号: 加法(输入1) 减法(输入2) 乘法(输入3) 除法(输入4) "); if (sum == 0)scanf_s("%d", &choise); switch (choise) { case 1: jia(p,q); break; case 2:jian(p,q); break; case 3:cheng(p,q); break; case 4:chu(p,q); break; } printf("请您选择: 继续(输入1) 重新(输入2) 退出(输入3) "); scanf_s("%d", &sum); if (sum == 1)sum = 1; if (sum == 2)sum = 0; if (sum == 3)break; } printf("您一共做了%d道题,正确%d道,错误%d道! ", right + wrong, right, wrong); system("pause"); }

    以下为测试代码:

    stdafx.h

    #include<stdio.h>
    #include<stdlib.h>
    #include<windows.h>
    #include<time.h>
    int jia( int x, int y );
    

     test1.cpp

    #include"stdafx.h"
    
    int jia(int x, int y)
    {
    	return x+y;
    }
    

     test.cpp

    #include"stdafx.h"
    int right=0,e;
    	int wrong=0;
    	int a=2 ,b=3;
    int  main()
    {
    	printf("
    
    *********************欢迎进入我的测试!************************
    
    
    ");
    	system("pause");
    	system("cls");
    	e=jia(a,b);
    	if(e==5)
    	{
    	    right++;
    printf("正确%d道 ", right );
    } else
    {
    wrong++; printf("错误%d道 ", wrong ); } system("pause"); }

      

     

    五、代码运行截图

    封装后的结果:

    测试结果

     

    六、PSP计时

     

    七、两人合作步骤

    • 一开始 我们先对题目要求目标不清楚,对于在C语言环境下,可将函数声明与具体实现分别存放在头文件(.h)和源文件(.c)中,这个作业从来没做过。
    • 由于两人之前所写代码不一样,在讨论使用谁的代码上花了一点时间,但最终决定要使用谁的代码后,我们还是不确定要用什么方法去做这个题目。
    • 于是通过几天的时间,我们在网上查找资料,并向同学、老师询问,得到了一点点想法,但具体的操作还不是很确定。
    • 在不断地思考和查阅资料中,我们渐渐地有了自己的想法,于是在电脑上开始对代码进行修改和分拆,开始尝试自己将代码分成老师所说的.h和.cpp文件,对代码进行了封装。
    • 所谓一分耕耘一分收获,我们的探索终于取得了成功,代码分拆成功了,但摆在我们面前的又一个问题出现了,我们不知道如何对代码进行单元测试。
    • 于是我们决定一人先把博客的相关内容给写了,而另一人先尝试着写一写测试和将代码进行规范化。
    • 最后,我们一人把博客的内容给做好了,而你另一人将测试代码做好了并将代码规范进行了规范。综合过后,我们将本次作业粗略了完成了。

    八、总结

          本次作业是由王铭霞、周德莉共同探讨共同完成的。从开始不知道封装,再到慢慢摸索,最后了解封装。这一过程确实遇到了许多困难。
          但是,从封装过的程序来看,它确实给读程序和改程序的人带来了极大的便利。这让我们受益匪浅,以前老师是提 过封装,但是却没有去强调我们写程序要封装,
          自然就不能真正的从实践过程中体验它的好处。同时在两人的合作中,了解其重要性,不管是在分工上,还是在想法上。

     

  • 相关阅读:
    数据结构之 线性表 逆序简历链表
    数据结构之 线性表--顺序创建链表
    参观——校园招聘大会
    SDUT OJ 之 1571 《人品,有没有?》 字符串的处理问题
    青岛理工交流赛 H题 素数间隙
    青岛理工ACM交流赛 J题 数格子算面积
    STL版 括号匹配(感觉不如之前自己用数组模拟的跑的快)
    1076: [SCOI2008]奖励关( dp )
    BZOJ 1079: [SCOI2008]着色方案( dp )
    BZOJ 1984: 月下“毛景树”( 树链剖分 )
  • 原文地址:https://www.cnblogs.com/zze-ysj-zdl-zdj-jiaren/p/4451422.html
Copyright © 2011-2022 走看看