软件测试技术 实验一:黑盒测试1

实验一 实验报告

小组成员

小组成员 结对测试组成员

实验目的

能熟练应用黑盒测试技术进行测试用例设计,能对测试用例进行优化设计。

实验内容

“隔一天问题”程序要求如下:输入为年、月、日三个变量,输出为输入的隔一天后的年、月、日。例如,输入为2001年2月10日,则输出为2001年2月12日;输入为2000年2月29日,则输出为2000年3月2日等。输入年份要求在1922-2030之间。

程序的主要算法

关键代码
//将string转为char数组并判断输入是否为正整数
int checkNum(string s) {
	int flag = 1;
	for (int i = 0; i < s.length(); i++) {
		if ((int)s[i] < 48 || (int)s[i] > 57) {
			flag = 0;
			break;
		}
	}
	return flag;
}
//获取用户输入
	string n0;
	int year = 0, month = 0, day = 0, isLeap = 0;
	cout << "请输入年月日" << endl;
	cout << "年:";
	//判断输入的n0是否符合要求
	while (year < 1922 || year > 2030) {
		cin >> n0;
		//判断输入的n0是否符合要求
		while (!checkNum(n0)) {
			cout << "Year取值无效\n请输入正整数,不要输入负数或者小数或字母:" ;
			cin >> n0;
		}
		year = s2i(n0);//string转为int存储 
		if (year < 1922 || year > 2030) {
			cout << "Year取值无效\n请输入1922到2030之间的数字:";
		}
	}
	year = s2i(n0);//string转为int存储 
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) isLeap = 1;
	cout << "月:";
	while (month < 1 || month>12) {
		cin >> n0;
		//判断输入的n0是否符合要求
		while (!checkNum(n0)) {
			cout << "Month取值无效\n请输入正整数,不要输入负数或者小数或字母:" ;
			cin >> n0;
		}
		month = s2i(n0);//string转为int存储 
		if (month < 1 || month>12) {
			cout << "Month取值无效\n请输入1到12之间的数字:" ;
		}
	}
	cout << "日:";
	if (month == 1 || month == 3 || month == 7 || month == 8 || month == 10 || month == 12) {//大月
		while (day < 1 || day > 31) {
			cin >> n0;
			//判断输入的n0是否符合要求
			while (!checkNum(n0)) {
				cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:" ;
				cin >> n0;
			}
			day = s2i(n0);//string转为int存储 
			if (day < 1 || day > 31) {
				cout << "Day取值无效\n请输入1到31之间的整数:";
			}
		}
	}
	else if (month == 4 || month == 5 || month == 6 || month == 9 || month == 11) {//小月
		while (day < 1 || day > 30) {
			cin >> n0;
			//判断输入的n0是否符合要求
			while (!checkNum(n0)) {
				cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:";
				cin >> n0;
			}
			day = s2i(n0);//string转为int存储 
			if (day < 1 || day > 30) {
				cout << "Day取值无效\n请输入1到30之间的整数:" << endl;
			}
		}
	}
	else if (month == 2 && isLeap) {//闰年2月
		while (day < 1 || day > 29) {
			cin >> n0;
			//判断输入的n0是否符合要求
			while (!checkNum(n0)) {
				cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:";
				cin >> n0;
			}
			day = s2i(n0);//string转为int存储 
			if (day < 1 || day > 29) {
				cout << "Day取值无效\n请输入1到29之间的整数:";
			}
		}
	}
	else {//平年二月
		while (day < 1 || day > 28) {
			cin >> n0;
			//判断输入的n0是否符合要求
			while (!checkNum(n0)) {
				cout << "Day取值无效\n请输入正整数,不要输入负数或者小数或字母:";
				cin >> n0;
			}
			day = s2i(n0);//string转为int存储 
			if (day < 1 || day > 28) {
				cout << "Day取值无效\n请输入1到28之间的整数:";
			}
		}
	}
//根据合理范围的年月日得到输出
void Solution(int year, int month, int day, int isLeap) {
	int nYear = 0, nMonth = 0, nDay = 0;
	if (month == 1 || month == 3 || month == 5 || month == 8 || month == 10) {//大月
		nYear = year;
		if (day == 30 || day == 31) {
			nMonth = month + 1;
			if (day == 30) nDay = 1;
			else nDay = 2;
		}
		else {
			nMonth = month;
			nDay = day + 2;
		}
	}
	else if (month == 4 || month == 6 || month == 9 || month == 11) {//小月
		nYear = year;
		if (day == 29 || day == 30) {
			nMonth = month + 1;
			if (day == 29) nDay = 1;
			else nDay = 2;
		}
		else {
			nMonth = month;
			nDay = day + 2;
		}
	}
	else if (month == 2 && isLeap) {//闰年2月
		nYear = year;
		if (day == 28 || day == 29) {
			nMonth = month + 1;
			if (day == 28) nDay = 1;
			else nDay = 2;
		}
		else {
			nMonth = month;
			nDay = day + 2;
		}
	}
	else if (month == 2 && !isLeap) {//平年2月
		nYear = year;
		if (day == 27 || day == 28) {
			nMonth = month + 1;
			if (day == 27) nDay = 1;
			else nDay = 2;
		}
		else {
			nMonth = month;
			nDay = day + 2;
		}
	}
	else {//12月
		if (day == 30 || day == 31) {
			nYear = year + 1;
			nMonth = 1;
			if (day == 30) nDay = 1;
			else nDay = 2;
		}
		else {
			nYear = year;
			nMonth = month;
			nDay = day + 2;
		}
	}
	cout << "隔一天的年月日为:" << nYear << "-" << nMonth << "-" << nDay << endl;
}
流程图
输入检测
Created with Raphaël 2.3.0
  • 7
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值