软件工程2017第3次作业(曹洪茹+周慧微)

1. 源代码Github链接:

https://github.com/zhouhuiwei/exam/tree/test

2.PSP表格:

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30

30

· Estimate

· 估计这个任务需要多少时间

2100

-

Development

开发

 

 

· Analysis

· 需求分析 (包括学习新技术)

360

300

· Design Spec

· 生成设计文档

30

30

· Design Review

· 设计复审 (和同事审核设计文档)

30

30

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

30

30

· Design

· 具体设计

180

240

· Coding

· 具体编码

600

720

· Code Review

· 代码复审

240

240

· Test

· 测试(自我测试,修改代码,提交修改)

540

600

Reporting

报告

 

 

· Test Report

· 测试报告

30

30

· Size Measurement

· 计算工作量

30

15

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

30

30

 

合计

2130

2265

3.团队编程

 

4.解题思路——需求分析:

     【题目要求】将命令行方式的四则运算判题程序进一步做成图形化界面的程序

基于原始个人作业,两人原始均为C++语言编程,代码规范基本采用谷歌提出C++风格指南

本程序采用VS2013 IDE 编程,采用MFC做界面和应用程序设计。主要完成的功能有:

   作业要求选择  :

  1. 记录用户的历史做题情况,并且能够方便的进行查询或统计,再次运行程序时不会丢失。
  2. 用户可以选择练习模式或考试模式,设计不同的界面和交互逻辑。
  3. 有计时功能,能显示用户开始答题后的消耗时间。

选择题目包含数字的范围和运算符,答题结束后可回看错题,给出正误结果和正确率。

如何限定数据运算范围、如何限制使用的运算符种类、如何限定生成题目的数量、如何保证题目生成的随机性、如何输出题目到屏幕以及如何输出题目到文件

5.设计实现过程

 1)参数初始化

用户选择数据范围,设置运算符符号和数目,输入此次题目数量

2)题目生成

借助单人作业基础,随机生成操作符和运算数据,在屏幕上输出,记录各个题目正确答案

3)判断正误

用户输入答案,与正确答案比对,判断正误,记录正误情况

4)保存

设置文件输出路径,将题目和判断结果输出到文本

 

6.代码说明

考试模式

void CTest::OnBnClickedButton4()
{
	// TODO:  在此添加控件通知处理程序代码
	// TODO:  在此添加控件通知处理程序代码
	/*以下程序功能为将CString类的路径转换为(const char*)*/
	UpdateData(TRUE);
	int nLength = spr.GetLength();
	int nBytes = WideCharToMultiByte(CP_ACP, 0, spr, nLength, NULL, 0, NULL, NULL);
	char *VoicePath = new char[nBytes + 1];
	memset(VoicePath, 0, nLength + 1);
	WideCharToMultiByte(CP_OEMCP, 0, spr, nLength, VoicePath, nBytes, NULL, NULL);
	VoicePath[nBytes] = 0;

	ofstream fout(VoicePath);
	if (fout) { // 如果创建成功
		fout << "共有" << inum << "道题目" << endl;
		fout << "正确率为" << equat.okr << "%" << endl;
		fout << "题目号" << "   题目" << "      用户答案" << "   正确答案" << "   是否正确" << endl;

		for (int i = 0; i < inum; i++)
		{
			if (*(equat.temp + i))
			{
				/*输出题目号*/
				fout << "  ";
				fout << i + 1 << "      ";
				/*输出题目*/
				fout << *(equat.num1 - inum + i) << " ";
				fout << *(equat.oper - inum + i) << " ";
				fout << *(equat.num2 - inum + i) << "       ";
				/*输出用户答案*/
				fout << *(equat.error_result - inum + i) << "         ";
				/*输出正确答案*/
				fout << *(equat.ok_result - inum + i) << "       ";
				/*输出每道题的正误*/
				fout << "正确" << endl << endl;
			}
			else
			{
				fout << "  ";
				fout << i + 1 << "      ";;
				fout << *(equat.num1 - inum + i) << " ";
				fout << *(equat.oper - inum + i) << " ";
				fout << *(equat.num2 - inum + i) << "       ";
				fout << *(equat.error_result - inum + i) << "         ";
				fout << *(equat.ok_result - inum + i) << "       ";
				fout << "错误" << endl << endl;
			}
		}
		fout.close(); // 执行完操作后关闭文件句
	}
	spr = "文件已成功保存";
	spr += "\r\n";
	spr += "若重新做题,请首先初始化参数";
	spr += "\r\n";
	spr += "若退出,请单击“回到首页”按钮";
	UpdateData(FALSE);
}

  

 打印

void CPrint::OnBnClickedOk4()
{
	// TODO:  在此添加控件通知处理程序代码

	/***************************打印输出***********************************/
	/*以下程序功能为将CString类的路径转换为(const char*)*/
	UpdateData(TRUE);
	int nLength = str.GetLength();
	int nBytes = WideCharToMultiByte(CP_ACP, 0, str, nLength, NULL, 0, NULL, NULL);
	char *VoicePath = new char[nBytes + 1];
	memset(VoicePath, 0, nLength + 1);
	WideCharToMultiByte(CP_OEMCP, 0, str, nLength, VoicePath, nBytes, NULL, NULL);
	VoicePath[nBytes] = 0;

	ofstream fout(VoicePath);
	if (fout) { // 如果创建成功
		fout << "题目号" << "   答案" << endl;


		for (int i = 0; i < inum; i++)
		{
			/*输出题目号*/
			fout << "  ";
			fout << i + 1 << "      ";
			/*输出正确答案*/
			fout << *(equatio.ok_result - inum + i) << "       " << endl;

		}
		fout.close(); // 执行完操作后关闭文件句
	}

	str = "答案已成功打印";
	UpdateData(FALSE);
}

  

7.测试运行

运行截图:

 

转载于:https://www.cnblogs.com/vv06160/p/8284739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值