软件瀑布模型:自顶向下,逐步分析
问题的定义:需要解决的问题是什么
可行性分析:该软件是否可以实现,成本分析,技术分析
需求分析:需求功能的分解(重要)
概要设计:模块功能的设计,模块规模设计,参数传递,数据库设计等
详细设计:数据结构,算法
实现:编写代码,实现功能
测试:单元的测试,集成的测试,功能的测试,回溯测试
运行维护:上线运行,版本迭代
日历软件的制作:
问题定义:用于输入年,月,日,屏幕打印日历,参照window日历
可行性分析:yes
需求分析:
输入:年,月,日
处理:
(1)input()接收输入结果
(2)判断闰年,判断大月,判断小月
(3)得出大月:31天 小月:30天 2月:28 29天(闰年)
(4)判断输入的月份在1-12月
(5)判断每月第一天是星期几:蔡勒公式
<1>蔡勒公式:判断1582年10月4日有以后的任意日期是星期几
#计算每月第一天是星期几
<2>w=(y%100)+(y%100//4)+(y//100//4)-(2(y//100))+26(m+1)//10+1-1
<3>.w是星期几的数字代,星期一:1 星期二:2.......星期日:0
<4>.w可能是负数,需要处理为整数
<5>.蔡勒公式中若为1月或为2月表示为上一年的13月和14月,需要处理
(6)输出一\t 二\t 三\t 四\t 五\t 六\t 日
(7)根据计算的w将本月第一天与星期几对齐
(8)输出每月的数字,间隔符\t,逢7换行
输出
概要设计:略
详细设计:略
实现:
测试:黑盒
#y:年 m:月 d:日 w:星期几 其他为控制
#2022-10-18 1.0版本 Andy
y=int(input('请输入四位数年份数字:'))
m=int(input('请输入月份数字:'))
t=0 #t变量用于表示闰年和平年的标志位
if y%4==0 and y%100!=0 or y%400==0:
t=1
if m==1 or m==3 or m==5 or m==7 or m==8 or m==10 or m==12:
d=31 #计算大月天数
elif m==2 and t==0:
d=28 #计算平年2月天数
elif m==2 and t==1:
d=29 #计算闰年2月天数
elif m==4 or m==6 or m==9 or m== 11:
d=30 #计算小月的天数
if m>=1 and m<=12: #保证输入月份在1-12月
print('\n===============',y,'年',m,'月','====================\n')
if m==1:
m=13
y=y-1 #若为1月则为蔡勒公式中为上一年的13月
elif m==2:
m=14
y=y-1 #若为2月则蔡勒公式中为上一年的14月
#蔡勒公式
w=(y%100)+(y%100//4)+(y//100//4)-(2*(y//100))+26*(m+1)//10+1-1
w=(w%7+7)%7 #保证w为正数
if w==0: #蔡勒公式中星期日数值为0,改为7
w=7
print('一\t二\t三\t四\t五\t六\t日')
i=1
while i<w: #将本月第一天与星期几对齐
print('\t',end='')
i+=1
i=1
while i<=d: #循环输出每月的天数字
print('%2d'%i,'\t',end='')
if w%7==0: #%逢7换行
print()
w=w+1
i=i+1
print('\n===============================================\n')
else:
print('日期错误')
#方法2:
#方2:
import calendar
y=int(input('请输入四位数年份数字:'))
m=int(input('请输入月份数字:'))
cal=calendar.month(y,m)
print(cal)