安徽工业大学软件工程实验报告
- 格式:doc
- 大小:40.00 KB
- 文档页数:13
《软件工程》实验报告
姓 名:江文杰
学 号:139074333
班 级:网133
指导老师:周兵
一. 实验目的
1.能按照软件工程的思想,采用面向过程的方法开发出一个小型软件系统。
2.在软件系统开发过程中,能综合利用一门编程语言和软件工程等多门课程的知识。
3.培养良好的软件开发习惯,了解软件企业文化。
4.掌握结构化数据流分析技术。
5.掌握结构化程序设计的基本概念与技术,并且养成良好的编码风格。
6.掌握单元测试的一般步骤及技术。
7.掌握集成测试的一般步骤和技术。
二. 实验内容
1. 软件需求分析
①、功能需求分析
·输入一个年份(1-3000),然后显示12个月的月历
·能解决闰年和平年问题
·能输出显示结果 ②、运行需求分析
· 操作系统: Windows9x, Windows2000, Windows XP及更高版本
③、数据流图
软件结构图:
2. 软件设计与编码
#include
#include
#include
#include
#define firstdayof1 1
/* 定义第一年的第一天, 星期日=7 */
#define gap " "
/* set gap between numbers of dates */
#define dent " " checkinputmain
output()
inputyear(isleap () setinit()
setinfoprintheadprintmont检查输确定年份
计算1月1显示1显示2显示12月 显示表头
显示其他月份 错误 非法 年份 年份 年份
年份 是否闰开始信开始信任意键 /* set right margin. */
struct info {
int month;
int firstdayofmonth;
int daysofmonth;
int leap;
}monthinfo;
int checkinput(void);
int inputyear(void);
int isleap(int y);
void output(struct info);
void printhead(struct info );
void printmonth(struct info);
struct info setinit(int);
struct info setmonthinfo(struct info );
/* 这个作用是判断年, 如果是闰年, return 1, 否则
return 0 */
int isleap(int y)
{
return ((y%4==0 && y%100!=0) || y%400==0);
}
/* This module is to accept inputyear() and check if it is correct. if it is
correct it return int year, otherwise ask user reenter
*/
int checkinput(void)
{
int y;
do{
y=inputyear();
if(y<1 || y >3000)
{
printf("\n输入错误!。\n\n");
y=0;
}
}while(y<1);
return y;
}
/* This function is to accept the input year, if it is the
integer, it returns
it, otherwise it return -1
*/
int inputyear(void)
{ char s[80];
int i, y;
y=-1;
printf("请输入年份(1-3000):");
for(i=0;i<80;++i)
{
s[i]=getchar();
if(s[i]==27)
exit(0);
if(s[i]==10)
break;
}
for(i=0;i<80;++i)
{
if(s[i]==10) break;
else if(!isdigit(s[i]))
return y;
}
y=atoi(s);
return y;
}
/*This module is to accept monthinfo, and print the whole year calender. */
void output(struct info monthinfo)
{
char ch;
do{
printhead(monthinfo);
printmonth(monthinfo);
printf("按任意键显视下一月, 按Esc键退出. \n");
ch=getchar();
if(ch==27)
exit(0);
monthinfo=setmonthinfo(monthinfo);
}while(monthinfo.month<13);
}
/* This module is to accept monthinfo, amd print monthly head
like"一 月" */
void printhead(struct info monthinfo)
{
char *ss;
printf("%s",dent);
switch(monthinfo.month)
{ case 1: ss="一 月";
break;
case 2: ss="二 月";
break;
case 3: ss="三 月";
break;
case 4: ss="四 月";
break;
case 5: ss="五 月";
break;
case 6: ss="六 月";
break;
case 7: ss="七 月";
break;
case 8: ss="八 月";
break;
case 9: ss="九 月";
break;
case 10: ss="十 月";
break;
case 11: ss="十一 月";
break; case 12: ss="十二 月";
}
printf(" %s%s%s%s\n\n",gap,gap,gap,ss);
}
/* This module is to accept monthinfo, and print the numbered
dates of the
month.
*/
void printmonth(struct info monthinfo)
{
int i,j,k;
printf("%s",dent);
printf("一%s二%s三%s四%s五%s六%s日\n\n",gap,gap,gap,gap,gap,gap);
printf("%s",dent);
for(i=1;i { printf("%s ",gap); } k=monthinfo.firstdayofmonth; for(j=1;j<=monthinfo.daysofmonth;j=j+1) { if(k>7) { k=k-7; printf("\n\n%s",dent); }; k=k+1; printf("%2d%s",j,gap); } printf("\n\n"); } /* This module is to accept the monthinfo, and set the monthinfo of next month. */ struct info setmonthinfo(struct info monthinfo) { int m; monthinfo.firstdayofmonth= (monthinfo.firstdayofmonth+ \ monthinfo.daysofmonth-1)%7+1; monthinfo.month=monthinfo.month+1; monthinfo.daysofmonth=30; m=monthinfo.month;