面向對象程序設計寒假作業2


這個作業屬於哪個課程 2020面向對象程序設計張棟班
這個作業的要求在哪里 面向對象程序設計寒假作業2
這個作業的目標 1、學習git的創建倉庫和上傳代碼;2、優化代碼並且可以優雅地命名;3、學習window批處理
作業正文 2020面向對象程序設計寒假作業2
其他參考文獻 freopen函數C++語言程序設計基礎windows批處理教程創建倉庫commit和push

首先讀題吧!

編程題(請使用C語言或者C++完成以下題目):
• 繼續完成作業一的編程題。
• 優化架構,一般要求每個函數長度不超過15行。
• 優化規范,尤其是命名規范。
• 制作一個編譯腳本,運行該腳本可以編譯你的代碼,可選的腳本語言,python(2.7),windows批處理,powershell,shell。
• 進行單元測試,即測試每一個函數,並制作一個測試腳本,運行該腳本可以進行測試,並顯示測試結果。
• 在作業一編程題的基礎上添加以下功能:
o 通過命令行讀取一個文件,然后運行這個文件。如我的程序叫lang,lang 1.txt代表我要運行1.txt這個文本中的代碼。
o 假設我的1.txt內容如下:
• 整數 錢包 等於 零
• 錢包 增加 四
• 錢包 減少 三
看看 錢包
o 輸入lang 1.txt后,命令行輸出一。

一、關於代碼!要求:把作業一的編程題優化,首先要把每個函數的長度控制在15行以內,其次是命名要規范。

我要解決的就是函數長度問題和命名的問題(main(主函數),transform(轉化),process(步驟),output(輸出),這是第二個要求,命名,我也不曉得我這樣命名專不專業!),自己代碼太長了,要思考更好的寫法。這一次我想嘗試用C++來寫,原因是我覺得String類這個應該會有很大的用處,就可不用strcmp函數了,直接用==,output的時候直接用+,這樣可太方便了。還有一個就是getline函數!!

首先我初始化了一些東西,主要是用在漢字轉化上,

string chinese[11] = { "零","一","二","三","四","五","六","七","八","九","十" }, add = "增加", depress = "減少";

之后我把整個問題分為了,四個函數來實現,分別是main(主函數),transform(轉化),process(步驟),output(輸出)。

第一個transform(轉化)是漢字轉化為阿拉伯數字,這里的想法是運用數組下標對於數字,這在結束的轉化里也用到了。

int  transform(string number)
{
	int i;
	for (i = 0;; i++)
	{
		if (number == chinese[i])
		{
			break;
		}
	}
	return i;
}

第二個是錢包的加加減減,函數process(步驟)同樣是運用到數組下標的對應。

void process(string first)
{
	string number;
	getline(cin, number);
	if (first == add)
	{
		sum = sum + transform(number);
	}
	else
	{
		sum = sum - transform(number);
	}
}

第三個是output函數,代碼比較長,原本想要分兩個來函數來寫,但是最終還是沒分出來,它們之間的變量關系比較緊密,所以超出了幾行。

void putout()
{
	int a[10], n, i, t,l;
	string outcome;
	if (sum < 0) cout << "error!";
	else {
		n = sum;
		if (sum <= 10) cout << chinese[sum];
		else {
			for (i = 1; n != 0; i++)
			{
				a[i] = n % 10;
				n = n / 10;
			}
			if (a[i - 1] != 1) outcome = chinese[a[i - 1]];
			if (a[i - 2] == 0) outcome = outcome + "十";
			else {
				for (t = i - 2; t > 0; t--)
				{
					l = a[t];
					outcome = outcome + "十" + chinese[a[t]];
				}
			}
			cout << sum << endl << outcome;
		}
	}
}

最后是main函數。大量應用了getline函數,比如最開始“整數 錢吧 等於 零”,三個循環,每次讀取字符串到空格,最后分出漢字數字“零”來,這解決了我在第一次作業里的困惑。

int main()
{
	string begin, origin, later, first;int flag = 1;
	for (int i = 1; i <= 3; i++)
	getline(cin, begin, ' ');
	getline(cin, origin);
	sum = transform(origin);
	do {
		getline(cin, later, ' ');
		if (later == "錢包")
		{
			getline(cin, first, ' ');process(first);
		}
		else
		{
			putout();flag = 0;
		}
	} while (flag);
	return 0;
}

完整代碼如下:

#include<iostream>
#include<string>
using namespace std;
string chinese[11] = { "零","一","二","三","四","五","六","七","八","九","十" }, add = "增加", depress = "減少";
int sum;
int  transform(string number)
{
	int i;
	for (i = 0;; i++)
	{
		if (number == chinese[i])
		{
			break;
		}
	}
	return i;
}
void process(string first)
{
	string number;
	getline(cin, number);
	if (first == add)
	{
		sum = sum + transform(number);
	}
	else
	{
		sum = sum - transform(number);
	}
}
void putout()
{
	int a[10], n, i, t,l;
	string outcome;
	if (sum < 0) cout << "error!";
	else {
		n = sum;
		if (sum <= 10) cout << chinese[sum];
		else {
			for (i = 1; n != 0; i++)
			{
				a[i] = n % 10;
				n = n / 10;
			}
			if (a[i - 1] != 1) outcome = chinese[a[i - 1]];
			if (a[i - 2] == 0) outcome = outcome + "十";
			else {
				for (t = i - 2; t > 0; t--)
				{
					l = a[t];
					outcome = outcome + "十" + chinese[a[t]];
				}
			}
			cout << sum << endl << outcome;
		}
	}
}
int main()
{
	string begin, origin, later, first;int flag = 1;
	for (int i = 1; i <= 3; i++)
	getline(cin, begin, ' ');
	getline(cin, origin);
	sum = transform(origin);
	do {
		getline(cin, later, ' ');
		if (later == "錢包")
		{
			getline(cin, first, ' ');process(first);
		}
		else
		{
			putout();flag = 0;
		}
	} while (flag);
	return 0;
}

二、有關腳本的那些事!

第一個:編譯腳本

我好難啊!
學習過程就不提了!
講講我遇到的問題

首先,我的思路的這樣的,依次打開(type)文件,直至打開作業二.cpp,然后編譯!

可想而知,我遇到了什么!
那就是滿屏的代碼!!

之后,我就仔細想想,這不太行,會不會是只要打開路徑就好,在作業二.cpp所在的文件夾就行。
於是我就是試了試!
沒想到,滿屏代碼消失了,卻出現了令我聞風喪膽,看了就吐的這一段話!
<
'gcc' 不是內部或外部命令,也不是可運行的程序
或批處理文件。
又又又找不到gcc了!!
我該怎么辦,也只能百度了,於是可愛的網友告訴我要以下這樣寫!

但是,就在我開心的轉圈圈的時候!!gcc它竟然找不到作業二.cpp了
所以!
我試了一遍又一遍都搞不定它,所以我只好靈機一動,把作業二.cpp復制在了腳本的文件夾了,然后成功了!!
哈哈哈!!

第二個:測試腳本

我開始因為是寫一個批處理文件然后就相當於一個程序來測試,然后參考了其他同學的作業,才發現是,重新寫一個.cpp來測試,測試腳本只是來運行它的??希望我的理解沒有錯。
首先根據我自己的代碼吧,我覺得只有output函數最需要測試,這也是自己在寫代碼的時候修改最多的。
根據這個函數的性質,我的測試程序的功能是,輸入一個數字(當然這個數字在0~99之間),得到正常的對應漢字可判斷。
這很像在學習寫作業的提交反饋哦。
我的測試代碼:

#include<iostream>
using namespace std;
int sum;
string b[10] = { "九","十","二十","十五","九十九","三十五","六十六","十一","零","一" };
string chinese[11] = { "零","一","二","三","四","五","六","七","八","九","十" }, add = "增加", depress = "減少";
string output()
{
    int a[10], n, i, t, l;
    string outcome;
    if (sum < 0) cout << "error!";
    else {
        n = sum;
        if (sum <= 10) outcome=chinese[sum];
        else {
            for (i = 1; n != 0; i++)
            {
                a[i] = n % 10;
                n = n / 10;
            }
            if (a[i - 1] != 1) outcome = chinese[a[i - 1]];
            if (a[i - 2] == 0) outcome = outcome + "十";
            else {
                for (t = i - 2; t > 0; t--)
                {
                    l = a[t];
                    outcome = outcome + "十" + chinese[a[t]];
                }
            }

        }
    }
    return outcome;
}
int main()
{
    
    string output();
	int a[10] = {9,10,20,15,99,35,66,11,0,1},i;
	for (i = 0; i < 10; i++)
	{
        sum = a[i];
        if (output() == b[i])
            cout << "pass" << endl;
        else
            cout << "error" << endl;
        
        
	}


}

我的測試腳本和截圖:

三、添一些功能?!

添加功能!
我看到題目的時候是驚呆的狀態!這樣可以??可以用代碼寫出來的??竟然要打開一個txt。
然后通過大佬的提示用freopen函數來寫就好。於是粗粗看過百度對這個函數用法的介紹,我就上場寫了,沒想到,竟然成了!
我的代碼:

int main()
{
	string begin, origin, later, first;int flag = 1;
	freopen("D:\\window批處理學習\\cin.txt","r" , stdin);
	for (int i = 1; i <= 3; i++)
	getline(cin, begin, ' ');
	getline(cin, origin);
	sum = transform(origin);
	do {
		getline(cin, later, ' ');
		if (later == "錢包")
		{
			getline(cin, first, ' ');process(first);
		}
		else
		{
			putout();flag = 0;
		}
	} while (flag);
	return 0;
}

結果:

創建倉庫和上傳代碼!

首先,我先從群里下載了,GitHubdesktop,然后創建了自己的倉庫
步驟如下
第一步在D盤新建一個文件夾,取名git
第二步點擊軟件頁面菜單欄file后選擇第一個new repository
第三步選擇創建位置為文件夾git,取一個你喜歡的名字
第四步創建完成!
之后把你整理好的代碼文件夾放在你新創建的倉庫里!
之后就是commit(填寫summary之后點擊左下角)

再push它

ok了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM