软件工程(第三次作业)

软件工程(第三次作业)

组员:周德莉、王铭霞

一、题目

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

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("回答错误!\n");
		*q++;
	}
	else
	{
		printf("回答正确!\n");
		*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("回答错误!\n"); 
		*q++;
	}
	else
	{
		printf("回答正确!\n");
		*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("回答错误!\n");
		*q++;
	}
	else
	{
		printf("回答正确!\n");
		*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("回答错误!\n");
		*q++;
	}
	else
	{
		printf("回答正确!\n");
		*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("\n\n*********************欢迎来到我的C语言四则运算程序系统!************************\n\n\n"); system("pause"); system("cls"); while (1) { printf("\n\n\t\t\t请选择计算符号:\n加法(输入1)\t减法(输入2)\t乘法(输入3)\t除法(输入4)\n"); 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("请您选择:\t继续(输入1)\t重新(输入2)\t退出(输入3)\n"); scanf_s("%d", &sum); if (sum == 1)sum = 1; if (sum == 2)sum = 0; if (sum == 3)break; } printf("您一共做了%d道题,正确%d道,错误%d道!\n", 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("\n\n*********************欢迎进入我的测试!************************\n\n\n");
	system("pause");
	system("cls");
	e=jia(a,b);
	if(e==5)
	{
	    right++;
printf("正确%d道\n", right );
} else
{
wrong++; printf("错误%d道\n", wrong ); } system("pause"); }

  

 

五、代码运行截图

封装后的结果:

测试结果

 

六、PSP计时

 

七、两人合作步骤

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

八、总结

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

 

posted @ 2015-04-23 18:47  周德莉  Views(286)  Comments(1Edit  收藏  举报