目录
本次作业所开发的程序已上传至Coding.net中
结对伙伴——王宗波
我在本次的作业中担任“驾驶员”的角色,王宗波同学担任“领航员”的角色
1. 题目及要求
在这里我们选择了“小学四则运算”自动生成的题目,其具体要求如下:
- 能够自动生成四则运算练习题
- 可以定制题目数量
- 用户可以选择运算符
- 用户设置最大数(如十以内、百以内等)
- 用户选择是否有括号、是否有小数
- 用户选择输出方式(如输出到文件、打印机等)
- 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
2. 功能的设计
考虑到题目要求、开发难度和实际中的需求,我们决定开发的程序应具有如下功能:
- 自动生成四则(混合)运算题目
- 可以定制题目数量
- 可以定制最大值
- 可以定制四则运算符
- 可以切换小数/整数运算
- 可以添加括号改变运算顺序
- 可以输出到文件,并能让用户方便的直接打开生成的文件
- 可以调用系统接口进行打印的设置、页面的设置,进行打印预览和打印
- 提供简单的图形化界面
- 能对用户的非法操作进行容错处理
3. GUI(图形用户界面)的设计
我们选用了C#语言,开发Windows窗体应用程序来提供图形用户界面。
所设计的GUI如图所示
其中左侧的Rich Text Box(富文本文本框)用来显示自动生成的题目。
上面的三个按钮分别实现自动生成题目、(若有则)打开文件和清空富文本框的功能。
左上角的通过Menu Strip控件实现的菜单栏提供了将当前生成的题目进行打印,和进行打印前的设置及打印预览功能,如下图所示。
右侧的Check Box则提供了选择运算符、括号和小数,以及是否输出到文件的选项。
用户还可通过右侧的两个Text Box(文本框)输入题目的最大值和题目数。
GUI的设计代码由Visual Studio 2017完成。
4. 容错机制的设计
为了提高程序的Robustness,我们对用户的非法操作进行了容错处理。
4.1 选择运算符的容错处理
用户在点击“出题”按钮前,必须至少从“加”、“减”、“乘”、“除”四个运算符中选择一个,才能开始。
当用户没有选择运算符,直接进行出题操作是,进行如下的容错处理
if (Symbols.Count == 0)
{
MessageBox.Show("加、减、乘、除运算符至少需要选择一个!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
其效果如图所示
4.2 最大值和题目数输入的容错处理
用户在开始出题前,必须首先输入最大值和题目数。
当用户没有输入而直接点击“出题”按钮时,进行如下的容错处理
string max = tbxMax.Text;
string num = tbxNum.Text;
if (tbxMax.Text == String.Empty)
{
MessageBox.Show("最大值不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (tbxNum.Text == String.Empty)
{
MessageBox.Show("题目数不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
其效果如图所示
4.3 打开文件容错处理
用户在点击“打开文件”按钮前,必须已经有生成的文件
当用户未选择生成文件,又直接点击了“打开文件”按钮时,进行如下的容错处理
if(cbxFile.Checked==false)
{
MessageBox.Show("未生成文件,无法打开!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
其效果如图所示
4.4 打印的容错处理
在尝试打印自动生成的题目时若出错,则进行如下的容错处理
try
{
printPreviewDialog.ShowDialog();
}
catch(Exception excep)
{
MessageBox.Show(excep.Message, "打印出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
5. 程序的运行效果
为了全面的演示程序的运行效果,我们选择所有的运算符,带有小数和括号,并且输出到文件来进行演示。
点击“出题”按钮,成功生成题目,并且导出到文件
点击“打开生成的文件”按钮,打开文件
打开“打印”菜单,点击“打印设置”选项,进行打印前的设置
点击“页面设置”选项,进行页面格式的设置
点击“打印预览”选项,进行打印预览
点击“打印”选项,进行打印
这里我们采用了Adobe公司提供的PDF虚拟打印机,可以看到如下的效果