实验一 实验报告
文章目录
小组成员
小组成员 | 结对测试组成员 |
---|---|
实验目的
能熟练应用黑盒测试技术进行测试用例设计,能对测试用例进行优化设计。
实验内容
“隔一天问题”程序要求如下:输入为年、月、日三个变量,输出为输入的隔一天后的年、月、日。例如,输入为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;
}