实验类型:设计实验
实验学时: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;
}