课外实验:月历显示程序
一、算法提示:
1. 输入年月(Input)
a) 输入格式:yyyy.mm
b) 合法性检查:1900≤yyyy≤2100,1≤mm≤12
c) 年份字符串转换成二进制数保存到变量 year,month 中
d) 其他需要定义的变量:KBUF—键盘输入缓冲区
2. 显示(Diaplay)
a) 可采用成批显示的方法:先填充,再用 9 号功能显示
i. 定义字符串变量
YM db ‘ yyyy.mm ’, 0DH, 0AH
Head db ‘Sun Mon Tue Wed Thu Fri Sat ’, 0DH, 0AH
Line1 db ‘ ’, 0DH, 0AH
Line2 db ‘ ’, 0DH, 0AH
Line3 db ‘ ’, 0DH, 0AH
Line4 db ‘ ’, 0DH, 0AH
Line5 db ‘ ’, 0DH, 0AH, ’$’
ii. 往 Line 到 Line5 中填充当月日期(Fill_date)
iii. 用 9 号 DOS 功能调用显示字符串 YM
b) 往 Line1-Line5 填充的方法
i. 每月有几天? 这涉及到填充多少个日期数字
1. 计算出来后用一个变量保存:days
2. 计算方法:
a) 1,3,5,7,8,10,12 月: 31 天
b) 4,6,9,11 月: 30 天
c) 2 月:闰年 29 天,非闰年 28 天。
给定的年份是否为闰年? 闰年的判别方法:
i. 能够被 100 和 400 整除
ii. 不能被 100 整除,但可以被 4 整除
3. 以上每月的天数可放在一张表中,以便于计算
days_of_month db 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
2 月份的天数若是闰年则改为 29。
ii. 当月的 1 号是星期几? 这涉及到从星期几开始填充(每个日期占 5 个字节)
1. 计算出来后用一个变量保存:week
2. 计算方法:(适用于公元 1582 年以后的任意一年)
S=X-1+(X-1)/4-(X-1)/100+(X-1)/400+C
其中 X 是年份数,C 是前几个月的总天数再加 1(用 days_of_month 表计
算)。除法均取整数。求出 S 后,除以 7,余几就是星期几,即 week=S
%7。