《C 语言课程设计 》
课程设计报告
题目
学号
姓名
年级专业
指导教师
完成日期年月日
安徽师范大学物理与电子信息学院
College of Physics and Electronic Information, Anhui Normal University
2
一、问题描述
日期按星期排列
日历查询,输入日期进行查询。
闰年判断功能显示查询日期所在月份的月历, 还将显示所在年份是否为闰年。
二、问题分析
对于要求 1:根据蔡勒公式, 可以很容易地有年月日推断出星
期:
rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-
1)/400)+ds;
wkd=rst%7;
对于要求 2: 在打印月历时,只要知道第一天的星期,就可以
依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。
5)
对于要求 3:闰年的判断,能被 4 整除但不能被 100 整除,或者能被
整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历。
三、 小组成员:
3
四、总体设计
功能模块
输入日期日期查询闰年判断排列星期
月历显示
流程图
进入程序
输入年月
判断闰年
按星期排
输出月历
4
五、详细设计
主要函数:
int runYear(int year);
该函数判断某年是否是闰年,参数year 表示要判断的年份,返回值1 表示该年
为闰年, 0 表示该年为平年。
int CalWkd(int yr,int mth)
该函数确定每月的天数,闰年二月为29 天。
showcld(int wkd,int mtd)
该函数用以根据一个日期推断星期,参数为要判断的年月日。返回值为整型,
123456 分别表示星期一到星期六,0 表示星期天。
六、程序清单
#include
int JgYr(int yr)
{
if (yr%4==0&&yr%100!=0||yr%100==0&&yr%400==0)
return 1;
else
return 0;
}
int CalWkd(int yr,int mth)
{
int ds=0,i,rst,wkd;
int mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if (JgYr(yr))
mthd[2]=29;
for (i=1;i
ds+=mthd[i];
ds+=1;
rst=yr-1+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+ds;
wkd=rst%7;
return wkd;
}
showcld(int wkd,int mtd)
5
{
int dt=1,i,j=0;
printf(“Sun\tMon\tTue\tWed\tThu\tFri\tSat\n”);
for (i=0;i
{
printf(“\t”);
j++;
}
while (j!=7)
{
printf(“%d”,dt);
if (j<6)
printf(“\t”);
else
printf(“\n”);
dt++;
j++;
}
while (1)
{
for (j=0;j<7;j++)
{
printf(“%d”,dt);
if (j!=6)
printf(“\t”);
else
printf(“\n”);
if (dt!=mtd)
dt++;
else
return 0;
}
}
}
int main()
{
int
yr,mth,mtd,wkd,mthd[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf(“Input the Year and Month(Year-Month):”);
scanf(“%d-%d”,&yr,&mth);
if (yr<0||mth<1||mth>12)
return 0;
if (JgYr(yr))
6
mthd[2]=29;
mtd=mthd[mth];
wkd=CalWkd(yr,mth);
showcld(wkd,mtd);
return 0;
}
七、测试数据
7
八、心得体会
经过两周的奋战,终于达到了预定的效果,完成了该信息系统的设计和编写。
此程序是一个功能比较完整的能实现一定的实际功能的程序, 代码比较短,不到 100 行,实现的功能有显示当前日历,闰年的判断,按星期显示。
然后在程序编写过程中, 遇到了问题,比如在输入年月格式不正确的情况下,有时会出现程序崩溃。到写报告为止,漏洞基本被找