资源描述
摘要
摘 要
在现代信息社会里,人们越来越重视时间的有效利用,而万年历也成了工作生活中必不可少的一部分,方便实用的万年历对于提高现代人的时间观念,优化时间使用效率具有重要意义。随着时代的发展,尽管日历的品种增多、花样也不断翻新,但仍旧保持着古老日历的格局。日历在当今社会的影响也是毋庸置疑的!同时,随着个人电脑的普及,简单的桌面万年历成为人们日常作息及重要事件提醒记录的重要工具。简易万年历可以运行在电脑桌面上,使用者可以通过各种不同的标记对重要时间及节假日和备忘事件等方面进行有效的查询和管理。这套系统旨在为用户方便有效地进行重要事件的查询和管理。
本系统采用C++语言编写,接针对简单的有效查询信息化系统。该系统具有完整的查询功能,充分满足了广大用户的基本需求。
关键字:信息化,万年历,c++语言
19
ABSTRACT
In the modern information society, there is growing emphasis on effective use of time, while the calendar has become an essential part of working life, convenient and practical calendar for the modern concept of time to improve and optimize the efficient use of time is important. With the development, despite the increasing variety of calendars, patterns have been renovated, but still maintained the pattern of the ancient calendar. The impact of the calendar in today's society is unquestionable!Meanwhile, with the popularity of personal computers, a simple desktop calendar and important events of people's daily routines an important tool to remind the record. Simple calendar can be run on your desktop, the user can mark a variety of different time and holidays and on important events and so cheat the query and manage effective.The system is designed to facilitate the effective conduct of the user's query and management of important events.
The system uses C + + language, then query for a simple and effective information system. The system has complete information inquiry function, fully meet the basic needs of the majority of users.
Keywords:Information; calendar; C + + Language
目 录
第1章 引言 1
1.1 课题的背景 1
1.2 课题的意义 1
1.3 课题的现状 1
第2章 设计总体规划 2
2.1 实现的功能 3
2.2 结构模块分析 3
2.3 系统框架设计 4
第3章 系统的实现 5
3.1 算法实现描述 5
3.2 各模块功能的实现 7
第4章 总结 11
参考文献 13
致谢 14
附录 15
电子科技大学成都学院课程设计
第1章 引言
1.1 课题的背景
在现代信息社会里,人们越来越重视时间的有效利用,而万年历也成了工作生活中必不可少的一部分,方便实用的万年历对于提高现代人的时间观念,优化时间使用效率具有重要意义。同时,随着个人电脑的普及,简单的桌面万年历成为人们日常作息及重要事件提醒记录的重要工具。简易万年历可以运行在电脑桌面上,使用者可以通过各种不同的标记对重要时间及节假日和备忘事件等方面进行有效的查询和管理。
1.2课题的意义
掌握一种编程工具和面向对象程序设计的基本思想和方法,培养
我们学生综合利用某种语言进行程序设计的能力,培养我们学生利用
系统提供的功能进行创新设计的能力,培养我们学生充分利用计算机
的功能和特点分析实际问题及解决实际问题的能力。为我们提供一个
综合运用所学知识解决实际问题的机会,增强我们学生的实践动手能
力和工程实践能力,并培养和锻炼我们学生的自学创新能力。为了能
更好地了解C++语言,因此开设了此次课程设计,程序设计教学课程
的目的不是为了单独的课堂学习,而是要让我们学生掌握程序设计的
基本思想及方法。一方面,在课程设计过程中,可以明确的指导为什么
而学,还能对所学知识得到应用,更重要的是可以让我们学生掌握一
些基本函数的用法,从而不在对编程序感到茫然,经过设计,可以让我
们熟悉简单程序的设计方法和编写,对程序设计及该门课程设计语言的应用得到理解。
1.3 课题的现状
目前的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基于该程序所开发的各种应用程序中的日历程序。然而,这些程序都是千遍一律的局限于一个很短的时间内。但是,很多情况下,特别是在众多的科学领域中,一个时间跨度较大的程序是有参考价值的。C++程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本就弥补了这一领域的空白。万年历作为日常中的一种小工具,它具有多方面的小工能,主要在日期的显示上给人以直观的表达效果,在日期的查询上方便简洁,还有就是在某些节日的提醒上都给我们带来极大的方便,是一种比较实用的小工具。给人的需求性很大,学生在做此万年历课程设计的同时,能够认识到C++编程给人带来的便捷,也能够清楚万历年表编程的出入。对培养学生的创新能力和动手能力具有很大的作用。
电子科技大学成都学院课程设计
第2章 设计总体规划
2.1 设计要求
(1)基本要求
试设计一个万年历系统,使之能提供以下基本功能:
1) 能够模拟现实中日历的形式现实公历;
2) 第一行显示月份(中英文都可以)
3) 下一行显示星期,从周日到周六,中英文都可以
4) 下一行开始显示日期从1号开始,并按其是星期几实际情况与上 111111面的星期数垂直对齐
5) 输入公历年月日能够显示农历日期;
6) 信息输入功能:对某一天输入代办事项,纪念日等文字;
7) 信息删除功能:能够删除某日期对应的纪念日等文字;
(2) 创新要求
达到上述基本要求后,可进行创新设计,如对功能扩展等。
2.2系统模块划分
1.进入系统时显示菜单界面及当前系统时间
2.年历查询:输入年代时,系统输出改年所有月份的日历并以 日历的格式输出。
3.月历查询:输入年代,月份时,系统输出该月所有天数的日历并以日历的格式输出。
4.日历查询:当输入年,月,日时,系统输出该天的日历信息, 包括星期,农历,节日。
5.农历查询:用户输入年、月、日。系统输出该天对应的农历信息,包括天干地支,农历。
6.记事本:当输入年、月、日时,系统首先查询该时间是否有记事,如果没有提示是否记事,若记事则用户输入记事内容,系统将该记事内容以文本文档的形式保存。若有记事则显示该记事,并提示是否删除,若用户选择删除,则系统将该时间对应的文本删除。若不删除,则退出系统。
7.定时关机工具:进入该功能,系统提示用户选择:关机、重启、取消计划、④退出。其中关机和重启具有定时功能。
2.3系统框架设计
第3章 系统的实现
3.1算法实现描述
【一】阳历相关
① 平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。由于公元1月1日设为星期六,故3月1日为星期三。——注意这个“三”为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
② 每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)
③ 每 4年(3个平年+1个闰年)共208周+5天。每百年共100*(208周+5天)-1天=5217周+5天 (整百年暂设为平年), 每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天(4个整百年只有一个闰年) 即400年一轮回!
【二】农历相关
1.年份的确定
1864年1月0日是农历癸亥年,所以用当年减去1864,用10除得的余数作为年份天干的,用12除得的余数作为年份的地支,数字对应的天干和地支如下。
数字 0 1 2 3 4 5 6 7 8 9 10 11
天干 甲 乙 丙 丁 戊 己 庚 辛 壬 癸
地支 子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥
当年的1月0日换算为积日,可以用年份减去1900得到的年数被4整除,所得商数作为 y(D4),余数作为y(M4),y(M4)为零的年份是公历闰年,积日是 D(1) = 1461 * y(D4) - 1
y(M4)不为零的年份是公历平年,积日是
D(1) = 1461 * y(D4) + 365 * y(M4)
2. 月份的确定
计算前一年冬至的积日F(0),并用F(0)计算冬至所在的朔月m及其朔日M(0),就可以推算冬至的农历日期,冬至所在的农历月份总是十一月。计算下一个中气F(1)和下一个朔日M(1),如果F(1)<M(1),那么该月就是上一个月的闰月,并把这个中气作为F(2),以后的中气、朔日和农历月份也这样确定。
【三】算法及公式推导
① 某平年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
② 某闰年3月1日星期几=(年+年/4+月星期表+日+2天)%7
③ 某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
④ 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
⑤ 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
⑥ 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
3.2各模块功能的实现
1.年历查询:年历查询,需要显示这年每个月的日历信息并以日历的格式显示出来。首先则需要判断是否为闰年来确定本年的每个月的天数,然后算出每个月每一天为星期几并以日历的格式显示。
2.月历查询:月历查询需要显示改年这个月的日历信息,并以日历的格式输出
3.日历查询:用户输入年、月、日,系统根据输入信息调用基本函数,输出该天的基本日历信息。包括星期,天干地支,农历,节日。
4.农历查询:用户输入年、月、日,系统通过输入信息调用农历查询函数,输出该天的农历信息
5.记事本:用户输入年、月、日,系统根据输入信息自动查询该时间是否有记事。 若没有,则提示用户是否进行记事。若记事则用户输入记事信息,系统对输入信息已文本文档的格式进行保存。若不记事则退出系统。若有记事,系统则直接输出该记事,并提示用户是否删除记事,若删除,则系统将该文本文档删除,否则退出。
6.定时关机工具:用户输入相应的指令,根据指令执行相应的操作。输入1,则系统提示用户输入定时关机时间。输入2,系统提示用户输入定时重启时间。输入3,系统取消定时关机或重启计划,输入4则退出系统
第4章 总结
课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。
通过C++课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说数组的灵活应用,循环语句,if语句……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是简易万年历的课程设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。更加是第一次做C++课程设计,所以第一天下午在宿舍做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
参考文献
1.谢自美. 电子线路设计-实验-测试[M] .武汉:华中科技大学出版社, 2000
2.夏崇镨.Visual C++ 课程设计案例精编[M].北京:清华大学出版社,2008
3.邹筝.Visual c++ 6.0使用教程龚[M].北京:电子工业出版社,2008
4.龚志翔. Visual C++编程实例与技巧集粹[M].北京:北京期望电子出版社,2004
5.孔鹏. Visual c++ 6.0完全自学手册[M].北京:机械工业出版社,2006
6.邓华. Visual C++案例教程[M].北京中科多媒体电子出版社,2001
致 谢
我要首先感谢通过对本万年历的设计进一步的巩固了用c++语言编写程序,并且有利于更好的掌握c++语言!在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的必要性和重要性!通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!由于C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c语言程序设计更加了解了c语言的好处和其可用性!在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?在本次程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!
附 录
源代码
int Leap_year(int year);
int Month_Day(int year,int month);
int Year_Day(int year,int month,int day);
int Week_Day1(int year,int month,int day);
char *Week_Day2(int number);
void Menu1(int year,int month,int day);
void Menu2(int year,int month);
int Menu3(int year,int month,int day);
void Month_Display(int year,int month);
void Lunar_Calendar(int year ,int month,int day);
char *Festival(int month,int day);
//char *Solar_terms(char Month,char Day);
void Day_Display(int year,int month,int day);
void Shutdown(void );
void RTC(void);
void Rubbish(void); /******************************************************************************
* 函数名:闰年判断
* 入口参数:year
* 返回参数:闰年返回1 否则返回0
int Leap_year(int year)/*定义变量*/
{
if(year%4==0&&year%100!=0||year%400==0) /*利用函数判断输入年份是闰年还是平年*/
return 1;
else
return 0;
} /******************************************************************************
* 函数名:月份天数确定
* 入口参数:year,month
* 返回参数:今年该月的天数
* 调用函数:int Leap_year(int year)
int Month_Day(int year,int month)
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*定义数组确定12个月每个月的天数*/
if(Leap_year(year)) /*如果输入年份是闰年*/
a[1]=29;/*二月29天*/
return a[month-1];
} /******************************************************************************
* 函数名:天数查询->查询该天是今年的第几天
* 入口参数:year,month,day
* 返回参数:该天是今年的第几天
* 调用函数:day1(int year,int month)
int Year_Day(int year,int month,int day)
{
int i,sum=0;
for(i=1;i<month;i++)
{
sum+=Month_Day(year,i);
}
sum+=day;
return sum;
}
/******************************************************************************
* 函数名:天数查询->查询该天是本周的第几天
* 入口参数:year,month,day
* 返回参数:返回该天是本周的第几天
* 调用函数:day2(int year,int month,int day)
int Week_Day1(int year,int month,int day)
{
int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+Year_Day(year,month,day); number%=7;
return number;
} /******************************************************************************
* 函数名:星期查询
* 入口参数:number
* 返回参数:星期
char *Week_Day2(int number)
{
switch(number)/*分类一周七天*/
{
case 0:
return "星期日";
case 1: return "星期一";
case 2: return "星期二";
case 3: return "星期三";
case 4: return "星期四";
case 5: return "星期五";
case 6: return "星期六";
default: return "错误!请您重新输入。";/*不符和上面七种情况的报错提示*/
}
展开阅读全文