實驗類型:設計實驗
實驗學時:10學時
涉及的知識點:分支,循環,數組,函數,面向對象編程技術等;
- 實驗目的
綜合運行C++語言所學知識,實現簡單應用程序的編寫。
二.實驗內容
採用面向對象的編程思路,綜合利用分支,循環,數組,函數等所學知識,編寫一個簡單“數字益智”應用軟件,該軟件能根據使用者的需求選擇數字位數和四則運算方式進行運算以及對數字大小進行排序和求最(最大,最小)值,並能對相應的結果進行驗證。
三.實驗功能及評分細則
- 採用面向對象編程方式
創建一個功能系統的類,裏面可以包括加減法,排序,以及求最值的相應的方法;
創建一個繪製界面的類,負責繪製界面;
創建規則系統,負責判斷答案
創建鼓勵系統負責鼓勵
創建玩家類,儲存信息
- 各項功能選擇界面設計
以下界面供參考,可自行設計
- 能隨機產生1位數(加,減)法運算式並驗證用戶輸入結果
- 能隨機產生2位數(加,減)法運算式並驗證用戶輸入結果
- 能隨機產生5個1位數求最(最大,最小)值,並驗證結果;
- 對隨機產生5個1位數排序並驗證用戶輸入結果;
- 隨機產生K個不重複的【M,N】之間數據並驗證用戶輸入的排序結果;
- 應用軟件總體設計思路清晰,界面設計友好,程序編寫簡潔直觀;
附:如果對軟件設計功能有擴城,成績設計思路,方法有獨特見解可適當加 10-20分 (例如能一次性實現1位數或2位數的混合運算,能隨機產生K個不重複的【M,N】之間數據並驗證用戶輸入的排序結果;)
四. 實驗要求
(1) 每位同學需獨立進行設計,按自己意願進行功能選項的選擇;
(2) 根據實驗功能和評分細則認真編寫程序代碼並上機調試;
五.電子版及紙質版實驗報告要求
(1)程序已經實現的功能及運行情況;
(2)程序運行截圖及說明;
(3)設計心得;
(4)程序代碼。
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
//功能類
class Funtion //功能系統,負責執行各個功能,產生隨機數,並計算正確的結果;
{
public:
friend class Rule; //與判斷類友元,方便判斷結果是否正確
void count1();
void count2();
void sort1();
void maxmin();
private:
int result1, result2, max, min; //儲存結果數據
int arr[5]; //儲存排序結果
}fun;
void Funtion::count1() //隨機產生一位數加減法運算
{
srand((unsigned int)time(NULL)); //初始化隨機數種子
int x, y;
x = rand() % 10;
y = rand() % 10;
result1 = x + y;
cout << "請回答" << x << "+" << y << "=?" << "\n";
}
void Funtion::count2() //隨機產生兩位數加減法運算
{
srand((unsigned int)time(NULL));
int x, y;
x = rand() % 100;
y = rand() % 100;
result2 = x + y;
cout << "請回答" << x << "+" << y << "=?" << "\n";
}
void Funtion::sort1() //排序遊戲
{
int arr1[5];
int temp;
srand((unsigned int)time(NULL));
for (int i = 0; i < 5; i++)
{
arr1[i] = rand() % 1000;
}
for (int i = 0; i < 5; i++)
{
cout << arr1[i]<<" ";
}
cout << "\n";
//冒泡排序
for (int i = 0; i < 5 - 1; i++)
for (int j = 0; j < 5 - 1 - i; j++)
{
if (arr1[j] < arr1[j + 1])
{
temp = arr1[j];
arr1[j] = arr1[j + 1];
arr1[j + 1] = temp;
}
}
cout << "正確答案:\n";
for (int i = 0; i < 5; i++)
{
arr[i] = arr1[i];
}
for (int i = 0; i < 5; i++)
{
cout << arr[i]<<" ";
}
cout << "請按從大到小進行排序!\n";
}
void Funtion::maxmin() //求最值遊戲
{
int arrs[5];
srand((unsigned int)time(NULL));
for (int i = 0; i < 5; i++)
{
arrs[i] = rand() % 100;
}
int rest = arrs[0]; //從數組第一個元素開始比較
for (int i = 0; i < 5; i++)
{
cout << arrs[i] <<" ";
}
cout << "\n";
for (int i = 0; i < 5; i++)
{
if (rest > arrs[i])
{
rest = arrs[i];
}
}
cout << "正確答案: "<< rest <<"\n";
min = rest;
}
//玩家類
class Player //玩家類,儲存玩家信息
{
public:
friend class UI; //與用戶信息友元,方便創造更友好的界面
void input();
void show();
private:
int age;
string name;
}pl;
void Player::input()
{
cout << "請輸入你的姓名!" << "\n";
cin >> name;
cout << "請輸入你的年齡!" << "\n";
cin >> age;
}
void Player::show()
{
cout << "你的姓名是:" << name << "\n" << "你的年齡是:" << age << "\n";
}
//界面類
class UI //界面系統,負責各類遊戲的界面繪製
{
public:
void ui1();
void ui2();
void ui3();
void ui4();
void ui5();
}ui;
void UI::ui1()
{
cout<< "|----------"<< pl.name <<"歡迎你使用本軟件"<<"---------|" << "\n";
cout << "|------------數字益智應用軟件----------|\n";
cout << "|-----------1.一位數加法---------------|\n";
cout << "|-----------2.兩位數加法---------------|\n";
cout << "|-----------3.排序遊戲-----------------|\n";
cout << "|-----------4.求最值遊戲---------------|\n";
cout << "|-----------5.查看分數-----------------|\n";
cout << "|-----------6.退出遊戲-----------------|\n";
}
void UI::ui2() //一位數加減法界面
{
cout << pl.name <<"小朋友,歡迎來到個位數加減法課堂" << "\n";
}
void UI::ui3() //兩位數加減法界面
{
cout <<pl.name <<"小朋友,歡迎來到兩位數加減法課堂" << "\n";
}
void UI::ui4() //排序遊戲界面
{
cout <<pl.name<<"小朋友們,歡迎來到排序遊戲課堂" << "\n";
}
void UI::ui5() //求最值遊戲界面
{
cout <<pl.name<<"小朋友,歡迎來到求最值遊戲課堂" << "\n";
}
//鼓勵類
class Encoure //鼓勵系統,負責彈出鼓勵小朋友的話等
{
public:
void ence1();
void ence2();
void ence3();
void ence4();
}encoure;
void Encoure::ence1() //個位數加減法運算的鼓勵
{
cout<<"恭喜小朋友答對了,獎勵一分!" << "\n";
}
void Encoure::ence2() //兩位數加減法運算的鼓勵
{
cout << "你真是太棒了!獎勵你一分!\n";
}
void Encoure::ence3() //排序的鼓勵
{
cout << "恭喜你排序是正確的!獎勵一分!\n";
}
void Encoure::ence4() //最求值的鼓勵
{
cout << "好棒!你答對了!獎勵一分!\n";
}
//判斷類
class Rule //規則系統,負責判斷遊戲是否獲勝,並統計得分
{
public:
Rule():score(0){}
bool win1();
bool win2();
bool win3();
bool win4();
void input_s();
private:
int score;
}rule;
bool Rule::win1() //功能1,接受用戶輸入並與正確答案對比,如果正確使分數加1
{
int ret;
cin >> ret;
if (ret == fun.result1)
{
cout << "回答正確!" << "\n";
score++;
return true;
}
else
{
cout << "回答錯誤!" << "\n";
return false;
}
}
bool Rule::win2()
{
int ret;
cin >> ret;
if (ret == fun.result2)
{
cout << "回答正確!" << "\n";
score++;
return true;
}
else
{
cout << "回答錯誤!" << "\n";
return false;
}
}
bool Rule::win3()
{
int res[5];
for (int i = 0; i < 5; i++)
{
cin >> res[i];
}
for (int i = 0; i < 5; i++)
{
if (res[i] == fun.arr[i])
{
if (i >= 5)
{
break;
}
continue;
}
else
{
cout << "錯誤!";
return false;
}
}
cout << "正確" << "\n";
score++;
return true;
}
bool Rule::win4()
{
int min1;
cout << "請輸入最小值!" << "\n";
cin >> min1;
if (min1 == fun.min)
{
cout << "回答正確!" << "\n";
score++;
return true;
}
else
{
cout << "回答錯誤!" << "\n";
return false;
}
}
void Rule::input_s()
{
cout <<"你的分數爲:"<<score<<"\n";
}
//主函數調用順序
int main()
{
pl.input(); //儲存玩家信息
pl.show(); //輸出玩家信息
ui.ui1();
bool botton = 1;
int num;
while (botton)
{
cout << "請輸入功能!" << "\n";
cin >> num;
switch (num)
{
case 1:
ui.ui2();
fun.count1();
if (rule.win1())
{
encoure.ence1();
}
break;
case 2:
ui.ui3();
fun.count2();
if (rule.win2())
{
encoure.ence2();
}
break;
case 3:
ui.ui4();
fun.sort1();
if (rule.win3())
{
encoure.ence3();
}
break;
case 4:
ui.ui5();
fun.maxmin();
if (rule.win4())
{
encoure.ence4();
}
break;
case 5:
rule.input_s(); break;
case 6:
botton = false; break;
default:
cout << "你輸入的功能錯誤!" << "\n";
}
}
return 0;
}