您的当前位置:首页安徽工业大学软件工程实验报告

安徽工业大学软件工程实验报告

2023-10-12 来源:乌哈旅游


《软件工程》实验报告

* ***** 学 号:*********

班 级:计算机科学与技术122 指导老师:*** 日 期:2015年05月

1

年份 非法 一. 实验目的

1.能按照软件工程的思想,采用面向过程的方法开发出一个小型软件系统。 2.在软件系统开发过程中,能综合利用一门编程语言和软件工程等多门课程的知识。

3.培养良好的软件开发习惯,了解软件企业文化。 4.掌握结构化数据流分析技术。

5.掌握结构化程序设计的基本概念与技术,并且养成良好的编码风格。 6.掌握单元测试的一般步骤及技术。 7.掌握集成测试的一般步骤和技术。

二. 实验内容

1. 软件需求分析 ①、功能需求分析

·输入一个年份(1-3000),然后显示12个月的月历

·能解决闰年和平年问题 ·能输出显示结果

②、运行需求分析

· 操作系统: Windows9x, Windows2000, Windows XP及更高版本

③、数据流图 确定年份 是否闰年 年份 开始信息 开始信息 年份 检查输入 计算1月1日 显示1月 显示2月 年份 任意键 显示表头 错误

软件结构图:

显示12月 显示其他月份 2

checkinput() inputyear()

2.

main setinit() output() isleap () printhead() printmonth() setinfo() 软件设计与编码 #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 );

3

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 */

int inputyear(void) {

char s[80]; int i, y; y=-1;

4 */ -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\"一*/

5 */ 月\"

void printhead(struct info monthinfo) {

char *ss;

printf(\"%s\

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\}

/* This module is to accept monthinfo, and print the numbered dates of the

month. */

void printmonth(struct info monthinfo)

6

{

int i,j,k;

printf(\"%s\

printf(\"一%s二%s三%s四%s五%s六%s日\\n\\n\

printf(\"%s\

for(i=1;iprintf(\"%s \ }

k=monthinfo.firstdayofmonth;

for(j=1;j<=monthinfo.daysofmonth;j=j+1) {

if(k>7) {

k=k-7;

printf(\"\\n\\n%s\ };

k=k+1;

printf(\"%2d%s\ }

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;

if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m ==12) monthinfo.daysofmonth=31; if(m==2) {

7

if(monthinfo.leap)

monthinfo.daysofmonth = 29; else

monthinfo.daysofmonth = 28; }

return monthinfo; }

/* This module is to initialize the monthinfo. */ struct info setinit(int year) {

int i,days,total;

struct info monthinfo; monthinfo.month=1;

monthinfo.firstdayofmonth=firstdayof1; for(i=1;iif(isleap(i)) days=366; else

days=365 ;

monthinfo.firstdayofmonth=(monthinfo.firstdayofmonth+days-1)%7+1;

}

monthinfo.daysofmonth=31; monthinfo.leap=isleap(year); return monthinfo; }

void main(){

printf(\" \\************************************ \\n\");

printf(\" \\欢迎使用万年历演示程序 \\n\");

printf(\" \\************************************ \\n\"); int year ;

struct info monthinfo;

year = checkinput();

8

monthinfo = setinit(year); output(monthinfo); }

3.

① . 白盒测试 单元测试

9

②.黑盒测试

2015年

三月四月

10

五月六月

11

2016年:

12

三. 总结

13

1. 实验内容总结

实验时按照步骤进行,利用VC++6.0作为编程环境,参考网上的资料和代码逐渐了解到万年历的真正的强大的功能,然而在实验中并不是那么一帆风顺,编译时老是有错误,好在通过网上搜索资料和同学老师们的帮忙,我才一一解决这些问题。通过此实验我发现数据流图还是比较重要的,这次实验相当于让我再一次熟悉c语言的魅力所在。

2. 心得体会与建议

对于这次实验,由于这门课是双语教学,英语不是很好的我开始理解有一定的难度,经过一定的努力才慢慢入门。经过对实验的研究,我按照软件工程的思想,把理论应用到了实践当中。采用面向过程的方法开发出了一个万年历的小程序。培养了良好的软件开发习惯,了解了一点软件的企业文化。掌握了一定的结构化数据流分析技术。了解了一定的结构化设计的基本概念与技术,对于以前学习的C语言知识有了更深的了解和更好的应用。对子函数的应用更得心应手。总之,这次实验让我受益匪浅。

14

因篇幅问题不能全部显示,请点此查看更多更全内容