安徽工业大学软件工程实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件工程》实验报告
******
学号:*********
班级:网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 " "
/* 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);
}