安工大软件工程实验指报告.docx
《安工大软件工程实验指报告.docx》由会员分享,可在线阅读,更多相关《安工大软件工程实验指报告.docx(11页珍藏版)》请在冰点文库上搜索。
安工大软件工程实验指报告
《软件工程》实验报告
指导老师:
周兵
专业班级:
软件工程班
学号:
姓名:
安徽工业大学计算机学院
2015年5月
实验题目:
编制一个万年历程序
要求:
输入一个年份(1-3000),然后显示12个月的月历,如屏幕显示不下,则应提供翻页功能。
一.实验目的
1.能按照软件工程的思想,采用面向过程的方法开发出一个小型软件系统。
2.在软件系统开发过程中,能综合利用一门编程语言和软件工程等多门课程的知识。
3.培养良好的软件开发习惯,了解软件企业文化。
二.实验内容
1.软件需求分析
1、功能需求分析
输入一个年份(1-3000),然后显示12个月的月历
·能解决闰年和平年问题
·能输出显示结果
2、运行环境需求分析:
操作系统:
Windows7
3、数据流程图:
4、程序函数结构
2.软件设计与编码
#include
#include
#include
#include
voidoutput(structwanNianLi);
voidprinthead(structwanNianLi);
voidprintmonth(structwanNianLi);
//定义月份结构体,
structwanNianLi{
intmonth;//月份
intweekdayOfmonth;//某月第一天是星期几
inttians;//一月的天数
intleap;//闰年为1,平年为0
}months;
//初始化结构体,根据年份初始化一月
structwanNianLisetMonth(intyear)
{
structwanNianLimonths;
months.month=1;
months.weekdayOfmonth=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+1)%7;
if(months.weekdayOfmonth==0)
months.weekdayOfmonth=7;
months.tians=31;
months.leap=isRun(year);
returnmonths;
}
//根据前一个月计算下一个月的结构体
structwanNianLisetNextMonth(structwanNianLimonths)
{
months.weekdayOfmonth=(months.weekdayOfmonth+months.tians-1)%7+1;
months.month=months.month+1;
months.tians=30;
if(months.month==1||months.month==3||months.month==5||months.month==7||
months.month==8||months.month==10||months.month==12)
months.tians=31;
if(months.month==2)
{
if(months.leap)
months.tians=29;
else
months.tians=28;
}
returnmonths;
}
voidmain(){
intyear;
structwanNianLimonths;//定义结构体
year=checkYear();//输入并检查年份
months=setMonth(year);
output(months);
}
//根据年份判断是否是闰年
intisRun(intyear)
{
return((year%4==0&&year%100!
=0)||year%400==0);
}
//输入年份
intintYear(void)
{
intyear;
printf("请输入一个年份(>1)");
scanf("%d",&year);
returnyear;
}
//判断年份是否输入正确
intcheckYear(void)
{
inty;
do{
y=intYear();
if(y<1||y>3000)
{
printf("\n输入错误!
。
\n\n");
y=0;
}
}while(y<1);
returny;
}
//接受结构体,输出全年日历
voidoutput(structwanNianLimonths)
{
charch;
do{
printhead(months);//输出月头
printmonth(months);//输出每月日期情况
printf("按任意键显视下一月,按Esc键退出.\n");
ch=getchar();
if(ch==27)
exit(0);
months=setNextMonth(months);
}while(months.month<13);
}
//打印表头
voidprinthead(structwanNianLimonths)
{
char*ss;
printf("**********************************");
switch(months.month)
{
case1:
ss="一月";break;
case2:
ss="二月";break;
case3:
ss="三月";break;
case4:
ss="四月";break;
case5:
ss="五月";break;
case6:
ss="六月";break;
case7:
ss="七月";break;
case8:
ss="八月";break;
case9:
ss="九月";break;
case10:
ss="十月";break;
case11:
ss="十一月";break;
case12:
ss="十二月";
}
printf("%s*****************************\n\n",ss);
}
voidprintmonth(structwanNianLimonths)
{
inti,j,k;
printf("");
printf("周日周一周二周三周四周五周六\n\n");
printf("");
if(months.weekdayOfmonth==7)
{
months.weekdayOfmonth=0;
k=months.weekdayOfmonth;
for(j=1;j<=months.tians;j=j+1)
{
if(k>6)
{
k=k-7;
printf("\n\n");
};
k=k+1;
printf("%2d",j);
}
}
else{
printf("");
for(i=1;i{
printf("");
}
k=months.weekdayOfmonth;
for(j=1;j<=months.tians;j=j+1)
{
if(k>6)
{
k=k-7;
printf("\n\n");
}
k=k+1;
printf("%2d",j);
}
}
printf("\n\n");
}
3.单元测试
4.集成测试
2015年
2014年
三.总结
1.实验内容总结
实验时参照实验步骤,从此语言入手,运用结构体编写每个月的信息,循环输出。
此实验重点考察了对c语言的理解,以及C语言面向过程的编程思想。
加深了对C语言的了解。
2.心得体会与建议
通过这次试验,让我对这门课又有了全新的认识。
作为一门计算机科学的双语教学科目,初学时感到很多的困惑,感到好高深。
然而通过实验了解到其仅仅是换了一种语言来表述同一们学科,只不过讲的更加标准化国际化。
在实验中采用面向过程的编程思想,开发出一个万年历的小程序,并严格按照软件开发思想与路线,培养了良好的软件开发习惯,并同时了解了一点企业中软件开发的习惯,感到很有利于将来更迅速的适应到该行业的工作环境。
同时这门课也提高了我的英语阅读能力。
1.