標籤:
軟體工程(第三次作業)
組員:周德莉、王銘霞
一、題目
在之前編寫的四則運算程式基礎之上做如下改進:
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檔案,對代碼進行了封裝。
- 所謂一分耕耘一分收穫,我們的探索終於取得了成功,代碼分拆成功了,但擺在我們面前的又一個問題出現了,我們不知道如何對代碼進行單元測試。
- 於是我們決定一人先把部落格的相關內容給寫了,而另一人先嘗試著寫一寫測試和將代碼進行正常化。
- 最後,我們一人把部落格的內容給做好了,而你另一人將測試代碼做好了並將代碼規範進行了規範。綜合過後,我們將本次作業粗略了完成了。
八、總結
本次作業是由王銘霞、周德莉共同探討共同完成的。從開始不知道封裝,再到慢慢摸索,最後瞭解封裝。這一過程確實遇到了許多困難。
但是,從封裝過的程式來看,它確實給讀程式和改程式的人帶來了極大的便利。這讓我們受益匪淺,以前老師是提 過封裝,但是卻沒有去強調我們寫程式要封裝,
自然就不能真正的從實踐過程中體驗它的好處。同時在兩人的合作中,瞭解其重要性,不管是在分工上,還是在想法上。
軟體工程(第三次作業)