如何用pascal编一个年历呢?

来源:百度知道 编辑:UC知道 时间:2024/06/02 12:40:58
我想用pascal编一个年历具体要求是:设计电子月历的程序
一、任务内容(task)
1.设计的程序应具有以下功能:
(1)任意输入某年的某一月份,屏幕应能显示该月的月历;
(2)应允许多次从键盘输入某月份,并自行设置结束标志。
(3)如在屏幕上输入2007年12月份的信息,屏幕的显示形式如下:
month Sun. Mon. Tue. Wed. Thu. Fri. Sat.
12 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

(4)备注:输出界面也可以是其它形式,另外还可对输出界面进行必要的修饰(如:加入表格线)。
2.程序设计要求:
1)采用结构化的程序设计方法进行编程;
2)用case控制语句实现选择分支结构;
3)用while \repeat…until\for语句实现循环结构;
4)利用标准过程readkey实现程序执行暂停;
5)利用标准过程 clrscr实现清屏操作。

program calendar;
uses crt;
var y,m,d,w,c,y2,m2:longint;
i,j,k:longint;
begin
clrscr;
writeln('请您输入年、月,输入0 0表示结束。');
readln(y,m);
while (y<>0) and (m<>0) do begin
writeln(y,'年',m,'月 的日历如下:');
y2:=y;
m2:=m;
if m<3 then begin m:=m+12;y:=y-1; end;
c:=y div 100;
y:=y mod 100;
d:=1;
w:=((c div 4)-(2*c)+y+(y div 4)+(26*(m+1) div 10)+d-1) mod 7;
if w<0 then w:=7-abs(w);
if (m2=1) or (m2=3) or (m2=5) or (m2=7) or (m2=8) or (m2=10) or (m2=12)
then d:=31
else if (m2<>2) then d:=30;
if m2=2 then
if ((y2 mod 4=0) and (y2 mod 100<>0)) or (y2 mod 400=0) then
d:=29 else d:=28;
writeln(w,' ',d);
writeln(' Sun Mon Tue Wed Thu Fri Sat');
for i:=1 to w do
write(' ':5);
for j:=1 to d do begin
write(j:5);
if (j+w) mod 7=0 then writeln;