軟體工程(第三次作業)

來源:互聯網
上載者:User

標籤:

軟體工程(第三次作業)

組員:周德莉、王銘霞

一、題目

在之前編寫的四則運算程式基礎之上做如下改進:

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檔案,對代碼進行了封裝。
  • 所謂一分耕耘一分收穫,我們的探索終於取得了成功,代碼分拆成功了,但擺在我們面前的又一個問題出現了,我們不知道如何對代碼進行單元測試。
  • 於是我們決定一人先把部落格的相關內容給寫了,而另一人先嘗試著寫一寫測試和將代碼進行正常化。
  • 最後,我們一人把部落格的內容給做好了,而你另一人將測試代碼做好了並將代碼規範進行了規範。綜合過後,我們將本次作業粗略了完成了。

八、總結

      本次作業是由王銘霞、周德莉共同探討共同完成的。從開始不知道封裝,再到慢慢摸索,最後瞭解封裝。這一過程確實遇到了許多困難。
      但是,從封裝過的程式來看,它確實給讀程式和改程式的人帶來了極大的便利。這讓我們受益匪淺,以前老師是提 過封裝,但是卻沒有去強調我們寫程式要封裝,
      自然就不能真正的從實踐過程中體驗它的好處。同時在兩人的合作中,瞭解其重要性,不管是在分工上,還是在想法上。

 

軟體工程(第三次作業)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.