软件工程-万年历实验报告
《软件工程》实验报告
学号:099074069
姓名:朱霄
班级:计092
指导教师:周兵
实验题目:编写一个万年历程序
要求:
输入一个年份(1-3000),然后显示12个月的月历,如屏幕显示不下,则应提供翻页功能。
一:实验目的
1、能按照软件工程的思想,采用面向对象过程的方法开发出一个小型的软件系统
2、在软件系统开发过程中,能综合利用一门编程语言和软件工程等多门课程知识
year_start++;
}
for(temp=1;temp<=12;temp++){
switch(temp)
{
case 1:
printf("--------January(%d)--------\n",year);
break;
case 2:
printf("---------February(%d)--------\n",year);
break;
case 9:
printf("---------August(%d)---------\n",year);
break;
case 10:
printf("---------October(%d)---------\n",year);
b---------November(%d)---------\n",year);
int isleapyear(int year){
if((year%4==0)&&(year%100!=0)||year%400==0)
return 1;
else
return 0;
}
void main(){
int isleapyear(int);
int i,day,year,temp,temp_i,year_start=1,per_year_days,iserror=1;
3、培养良好的软件开发习惯,了解软件企业文化
4、掌握结构话数据流分析技术
5、掌握结构化程序设计的基本概念与技术,并且养成良好的编码风格
6、掌握单元测试的一般步骤及技术
7、掌握集成测试的一般步骤和技术
二:实验内容
1、功能需求分析
·能列出公元元年到3000年所有月历
·能解决闰年和平年问题
·能输出显示结果
int month_days[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
long int year_days=0;
while(iserror){
printf("Enter the year:");
scanf("%d",&year);
if(year<1||year>3000)
break;
case 12:
printf("---------December(%d)---------\n",year);
break;
}
i=year_days%7;
printf("Mon Tue Wed Thu Fri Sat Sun\n");
if(i!=0)
for(temp_i=0;temp_i<i;temp_i++)
break;
case 3:
printf("---------March(%d)---------\n",year);
break;
case 4:
printf("---------April(%d)---------\n",year);
break;
case 5:
printf("---------May(%d)---------\n",year);
心得与体会:通过这次实验让我对结构化程序设计有了更深一步的理解,了解到了软件设计的思想,也认识了软件测试和调试的重要性,对程序的模块化设计有了更深的理解。通过自己的努力完整地按照结构化的编程思想做好万年历程序,从中获益匪浅。
printf(" ");
day=1;
if(isleapyear(year)&&temp==2)
while(day<=month_days[12]){
if(day>1)
if(year_days%7==0)
printf("\n");
if(day>=10)
printf("%d ",day);
else
printf("%d ",day);
printf("input error!\n");
else
break;
getch();
}
·确定闰年
if((year%4==0)&&(year%100!=0)||year%400==0)
·显示表头
·计算一月一日
·程序代码:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
day++;
}
printf("\n");
if(getch()=='q')
exit(0);
}
}
5、单元测试与集成测试
·测试方案设计:
·白盒测试
输入若干数据,对程序逻辑路径进行测试,检验内部控制结构和数据是否
有错,实际的运行状态与预期的状态是否一致;
·测试数据:2012(闰年)2011(平年)test:-1, 3001
printf("input error!\n");
else
break;
getch();
}
while(year_start<year){
if(isleapyear(year_start))
per_year_days=366;
else
per_year_days=365;
year_days=year_days+per_year_days;
year_days++;
day++;
}
else
while(day<=month_days[temp-1]){
if(day>1)
if(year_days%7==0)
printf("\n");
if(day>=10)
printf("%d ",day);
else
printf("%d ",day);
year_days++;
break;
case 6:
printf("---------June(%d)---------\n",year);
break;
case 7:
printf("---------July(%d)---------\n",year);
break;
case 8:
printf("---------January(%d)---------\n",year);
白盒测试结果
·黑盒测试
根据程序的提示输入数据,检查程序是否满足功能要求。
·黑盒测试结果
启动程序,输入年份2012,按下enter键的时候会显示所有的月历。
输入年份2011,按下enter键的时候会显示所有的月历
按ESC键即可退出应用程序。
三、总结与心得:
总结:通过测试,程序内部控制结构和数据结构没有出现问题,实际运行结果和预期的相符合。
2、运行需求分析
·运行于window xp及更高版本操作系统上
3、数据流图
4、软件设计与编码
·检查输入
·输入数据是否超出程序处理范围
·输入数据是否非法字符机器处理
while(iserror){
printf("Enter the year:");
scanf("%d",&year);
if(year<1||year>3000)