c万年历系统课程设计报告.docx

上传人:b****6 文档编号:6029506 上传时间:2023-01-03 格式:DOCX 页数:13 大小:153.96KB
下载 相关 举报
c万年历系统课程设计报告.docx_第1页
第1页 / 共13页
c万年历系统课程设计报告.docx_第2页
第2页 / 共13页
c万年历系统课程设计报告.docx_第3页
第3页 / 共13页
c万年历系统课程设计报告.docx_第4页
第4页 / 共13页
c万年历系统课程设计报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

c万年历系统课程设计报告.docx

《c万年历系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《c万年历系统课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。

c万年历系统课程设计报告.docx

c万年历系统课程设计报告

学号

2016-2017学年第2学期

1608220203

 

《高级语言程序课程设计》

课程设计报告

 

题目:

万年历系统

专业:

网络工程(对口)

班级:

16(3)

姓名:

代应豪

指导教师:

代美丽

成绩:

计算机学院

2017年4月25日

目录

1.设计内容及要求2

1.1课程设计的内容2

1.2课程设计的要求2

2.概要设计3

2.1系统总体设计3

2.2功能模块设计3

3.设计过程或程序代码4

3.1算法提示:

4

3.2程序源代码5

4.设计结果与分析15

4.1设计结果15

4.2程序分析18

1.设计内容及要求

1.1课程设计的内容

设计编写一个C程序—“万年历”。

本程序是一个万年历程序,可以查询1901年到9999年中任意一天是星期几,只要在运行程序时按照要求输入年,月,日,程序就会把这一天是星期几显示在屏幕上;也可以输入一个年份和一个月份,程序就会把该月份的月历显示在屏幕上,使人一目了然。

1.2课程设计的要求

1:

程序的功能多样; 

2:

输入日期能够判断该日期是星期几; 

3:

输入一个年份能够显示出该年的全部月历;

4:

输入一个年月能够显示该月的月历;

5:

输入一个年份能够判断该年是闰年还是平年; 

6:

能够退出。

2.概要设计

2.1系统总体设计

通过此次课程设计可以复习巩固C语言的基础知识的同时,进一步加深对C语言的理解和掌握。

主要的设计思想是通过不同的函数模块来实现并调用的,将不同的数据结构组成一个整体就是此次设计的系统概要。

2.2功能模块设计

本系统包括4个模块,分别是闰年判断模块、星期计算模块、月历查询模块和打印整年日历模块。

 

(1) 闰年判断模块。

该模块用于输入一个年份能够判断该年是闰年还是平年。

 

(2) 星期计算模块。

该模块主要是输入日期能够判断该日期是星期几。

 

(3) 月历查询模块。

该模块是系统的核心模块,是用来显示指定日期所在月份的月历,包括打印指定个数的空格、打印分隔线。

 

(4) 打印整年日历模块。

该模块用于输入一个年份能够显示出该年的全部月历

3.设计过程或程序代码

3.1算法提示:

1.功能结构框图:

 

2.闰年的判断:

计算所输入的年份是否可被4整除,若不能被整除,为平年。

若可被4整除,计算此年份能否被100整除,不能被100整除则为闰年。

既能被4整除,也能被100整除的年份,若也能被400整除,则为闰年,否则为平年。

闰年366天,平年365天

 

3.2程序源代码

#include

#include

char*NameOfMonth[12]={"January","February","March","April","May","June","July","August","September","October","November","December"};

char*WeekDay[7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};

intIsLeapYear(intyear)

{

if(year%4==0&&year%100!

=0||year%400==0)

{

return1;//闰年返回1

}else

{

return0;//平年返回0

}

}

intDateCheck(intuYear,intuMonth,intuDay)//合法返回true,非法或超出范围返回false

{

if(uYear<1901||uYear>9999||uMonth<1||uMonth>12||uDay<1||uDay>31)

{

return0;

}

if(uMonth==4||uMonth==6||uMonth==9||uMonth==11)

{

if(uDay>30)

{

return0;

}

}elseif(uMonth==2)

{

if(IsLeapYear(uYear))

{

if(uDay>29)

{

return0;

}

}else

{

if(uDay>28)

{

return0;

}

}

}

return1;

}

intGetDays(intyear,intmonth,intday)

{

intsum=0;

if(DateCheck(year,month,day)==0)

{

return-1;//日期有误

}

if(year>=1901)

{

intX=(int)(year/100);//世纪数

intY=X-(int)(X/4);//如果按4年一闰来算,Y指的是比实际上多算的天数,在下面需要减去

if(month<=2&&month>0)

{

year--;//把1月、2月视为上一年的13月、14月(纯粹为了计算需要)

month+=12;

}

sum=(int)(365.25*(year-1900))+(int)(30.6*(month+1))+day-Y-49;//以365.25(本来实际太阳年是365.2425天)来计算是为了计算按4年一闰的整数年总天数,加上月份天数再加上余下天数,减掉多闰天数,再减掉一个偏差值(多加的)

//月份以30.6天的平均值计算。

最后减去的49,是多加的一个月以及其余相差天数的和,可得到1900年1月1日的积日为0

}

returnsum;//返回距离1900年1月1日的总天数(积日)

}

intGetDayOfMonth(intmonth,intyear)

{

inttmp_days=GetDays(year,month,1);//本月积日

intDayOfMonth=0;

month++;//下个月

if(month>12)

{

month=1;//遇到月份为12月的情况,月份为1,年份加1

year++;

}

DayOfMonth=GetDays(year,month,1);//下个月的积日

DayOfMonth-=tmp_days;//下月1日的总天数(距离1900年1月1日的积日)减去当前月1日的总天数

returnDayOfMonth;//返回当前月总天数

}

intShowCalendar(intyear,intmonth,intday)

{

inti,j,count;

intjiri=0;//积日

intdayofweek=0;//星期

if(DateCheck(year,month,day)==0)

{

printf("输入日期有误!

\r\n");//日期不合法或超出范围,年历从1901年开始

return0;

}

printf("\t%d%s\r\n",year,NameOfMonth[month-1]);

printf("--------------------------------------\r\n");

printf("SunMonTueWedThuFriSat\r\n");

printf("--------------------------------------\r\n");

jiri=GetDays(year,month,1);//获取距离1900年1月1日的总天数

dayofweek=(1+jiri)%7;//月首星期,因为1900年1月1日星期一

count=GetDayOfMonth(month,year);

for(i=0;i

{

printf("");//填充前面空格

}

for(i=1,j=dayofweek;i<=count;i++,j++)

{

if(i<10)

{

printf("%d",i);

}else

{

printf("%d",i);

}

if((j+1)%7==0)

{

if(i!

=count)

{

printf("\r\n");//满7天,换行

}

}

}

printf("\r\n--------------------------------------\r\n\r\n");

return1;

}

intmain()

{

intyear,month,day,nChoise=0;

inttotaldays=0;

while

(1)//主循环

{

printf("******************欢迎使用万年历********************\r\n");

printf("*菜单*\r\n");

printf("*1.闰年判断2.星期计算*\r\n");

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

printf("*3.月历查询4.打印整年日历*\r\n");

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

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

printf("输入对应的序号进行相关操作:

Choise>");

scanf("%d",&nChoise);

switch(nChoise)

{

case1:

printf("请输入要判断的年份:

Year>");

scanf("%d",&year);

if(year<1900||year>9999)

{

printf("输入年份超出范围!

");

break;

}

if(IsLeapYear(year)==1)

{

printf("%d年是闰年!

\r\n\r\n",year);

}else

{

printf("%d年不是闰年!

\r\n\r\n",year);

}

break;

case2:

printf("请输入要判断的日期:

YearMonthDay>");

scanf("%d%d%d",&year,&month,&day);

totaldays=GetDays(year,month,day);

printf("%d年%d月%d日是%s\r\n\r\n",year,month,day,WeekDay[(totaldays+1)%7]);

break;

case3:

printf("请输入要显示的月份:

YearMonth>");

scanf("%d%d",&year,&month);

ShowCalendar(year,month,1);

break;

case4:

printf("请输入要判断的年份:

Year>");

scanf("%d",&year);

for(month=1;month<=12;month++)

{

ShowCalendar(year,month,1);

}

break;

default:

printf("无效的菜单项!

\r\n");

break;

}

system("pause");

system("cls");

}

return0;

}

4.设计结果与分析

4.1设计结果

1.登陆界面

 

2.闰年判断

3.星期计算

4.月历查询

5.打印整年日历

 

4.2程序分析

程序首先根据用户输入的序号,进行相关的操作,首先根据year判断是否是闰年,如果是则需要将该年2月份的天数设置为29天,接着判断day是否超过month所在月份的最大天数,如果超过则显示提示信息。

然后进行星期的判断,如果输出的是该月的第一个星期,则判断该星期中还有几天在本月,输出空格。

输出完第一周后,接着输出第二到第五周,每周7天。

实现思路:

实现该程序一定要找准一个几点,比如找准2000年1月1日是星期几,然后在此基础上推出具体某天和这个几点之间相差多少天,然后推出该天是星期几,注意显示的时候格式要对齐。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1