计算机科学与技术程序设计语言课程设计-万年历系统.doc_第1页
计算机科学与技术程序设计语言课程设计-万年历系统.doc_第2页
计算机科学与技术程序设计语言课程设计-万年历系统.doc_第3页
计算机科学与技术程序设计语言课程设计-万年历系统.doc_第4页
计算机科学与技术程序设计语言课程设计-万年历系统.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西华大学数计学院课程设计说明书 i 数学与计算机学院 课程设计说明书 课 程 名 称: 计算机科学与技术程序设计语言-课程设计 课 程 代 码: 8404091 题 目: 万年历系统 年级/专业/班: 09 级软件工程 1 班 学 生 姓 名: 学 号: 开 始 时 间: 2010 年 12 月 24 日 完 成 时 间: 2011 年 01 月 06 日 课程设计成绩: 学习态度及平 时成绩(30) 技术水平与实际 能力(20) 创新(5)说明书撰写质量(45) 总 分 (100) 万年历系统 ii 指导教师签名: 年 月 日 目 录 1 1 引引 言言 1 1 1.1 问题的提出 1 1.2 国内外研究的现状.1 1.3 任务与分析.1 2 2 程序的主要功能程序的主要功能 3 3 2.1 显示功能.3 2.2 自动翻页功能 3 2.3 查询功能.3 2.4 帮助功能.3 2.5 退出功能.3 3 3 程序运行平台程序运行平台 4 4 4 4 总体设计总体设计 图图 4.14.1 流程图流程图 5 5 5 5 程序代码明细程序代码明细 6 6 6 6 模块分析模块分析 1111 6.1 系统日期模块 .11 6.2 打印模块 .11 6.3 闰年判断模块12 6.4 查询模块 .12 6.5 菜单模块 void mainmenu(int year,int month,int day)/主菜单 .12 6.6 关键代码 .13 7 7 系统测试系统测试 首先进入首先进入 vc+6.0vc+6.0,打开工程,打开工程 person.dswperson.dsw,然后进入源程序,接着选择,然后进入源程序,接着选择 buildbuild 下的下的 executeexecute person.exeperson.exe 即可即可, ,也可以不打开工程,直接双击也可以不打开工程,直接双击 personperson 文件夹下文件夹下 的的 debugdebug 或或 releaserelease 子文件夹下的子文件夹下的 person.exeperson.exe 文件即可运行程序。文件即可运行程序。 7.17.1 进入程序进入程序 . .1414 8 8 结论结论 1717 万年历系统 1 1 1 引引 言言 1.1 问题的提出问题的提出 万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将 这部历法命名为“万年历” 。而现在所使用的万年历,实际上就是记录一定时间范围内 (比如 100 年或更多)的具体的日期的年历,方便有需要的人查询使用。怎样在电脑 上显示万年历以便查询,是一个很普遍的需求。 附: 万年历算星期几 :只要随便说出公元几几年几月几日就可以马上算出是星 期几。 只要计算出日的代码,月份代码,年份代码。三个加起来除以七的余数就是星期几, (如余数是三,则就是星期三)。 日的代码计算:日的代码最简单,就是它本身,是几号就是几。 月份代码计算:月份代码也很简单,下面有十二个数:144725736146,分 别代表一至十二月份每个月的代码。比如,九月份的代码为6。 (据来宾介绍,他 是用逆推的方法,计算出这 12 个月份代码的,即知道 某年某月某日 是星期几,反 过来推算月份代码。 年份代码计算:年份代码相对比较复杂,先记住2000 年对应的年份代码 是 4,这是基础代码,牢记即可。假如大于2000 年,比如 2010 年,则对应的年 份代码是( 20102000)4=22,再用基数代码 4 减去 2 倍的商加上余数再 加 1。即 422+2+1=3,则 2010 年对应的年份代码为 3。如果没有余数,即润年, 则余数后面的 1 也不用加。比如 2008 年,对应的年份代码为 0。 1.2 国内外研究的现状国内外研究的现状 万年历已经在我们生活中随处可见,基本功能的万年历很早就出现了,现在已经进 入到多元化的设计时代了。现在的万年历不单单可以查询日历还带有许多的拓展功能, 如黄历,星座,节日等等。 1.3 任务与分析任务与分析 要求:模仿现实生活中的挂历。 当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。 当系统日期变到下一月时,系统自动翻页到下一月 分析: 1 1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期: 万年历系统 2 nday=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday; w=nday%7; 其中 year:要查询的年份 nday:从该年的一月一日起到该天的天数 w:得出的星期数,w=0 表示星期天。 在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度 输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。 对于初始输入当前月历,可以通过中的 time 和 localtime 函数取出系统 时间进行初始化。 time_t timer; struct tm* gmt; time( gmt=localtime( gmt 就是一个时间结构体,可以从中取出年月日。 2 2:闰年的判断,能被 4 整除但不能被 100 整除,或者能被 400 整除的年份为闰年, 否则为平年。日期的查询,就是直接打印改天所在月份的月历。 3 3:判断日期是否合法,可以先判断年月日是否有小于 0 的值,月和日是否有超出 最大值 12 和 31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判 断二月份是否满足要求,闰年二月份不能超过 29 天,平年二月份不能超过 28 天。 在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。 万年历系统 3 2 2 程序的主要功能程序的主要功能 查询万年历 2.1 显示功能显示功能 能够显示以系统当前时间为准的日历。 2.2 自动翻页功能自动翻页功能 能够随系统时间改变而自动翻页到下一页。 2.3 查询功能查询功能 能够查询任意年份和月份的万年历。 2.4 帮助功能帮助功能 提供程序使用的说明。 2.5 退出功能退出功能 随时退出程序。 万年历系统 4 3 3 程序运行平台程序运行平台 vc+6.0。 具体操作如下:新建行编辑器工程,然后按照要求编写代码,再编译,链接,执 行等。要是出现报错,就依次查找错误行,分析报错原因并修改。 万年历系统 5 4 4 总体设计总体设计 图 4.1 流程图 图 4.2 功能模块 1、日期显示 2、日期查询 3、帮助文件 4、退出程序 2、日期查询 1、日期显示 3、帮助文件 4、程序结束 进入程序 显示日历 月历显示 日期查询日期判断日期打印闰年判断 万年历系统 6 5 5 程序代码明细程序代码明细 #include #include #include #include int year,month,day;/全局变量记录时间 int daysofmonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31; int runyear(int year)/判断是否是闰年 int flag=0; if(year%400=0|(year%4=0 return flag; struct tm* getday()/从系统取得当前时间 time_t timer; struct tm* gmt; time( gmt=localtime( return gmt; int dayexame(int year,int month,int day)/检查日期是否正确 if(year12|day31) return 0; switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: if(day31)return 0;break; case 4: 万年历系统 7 case 6: case 9: case 11: if(day30)return 0;break; default: if(runyear(year) else if(runyear(year)=0 return 1; int getwday(int year,int month,int day)/取得星期 int nday=0,nday,i,w; for(i=0;i2)f=1; while(f=1);pr switch(*menu) case 1: system(“cls“);/清屏 printcalender(year,month,day); backmenu();/实现任意键返回主菜单 mainmenu(year,month,day); break; case 2: system(“cls“); checkcalender(); backmenu(); mainmenu(year,month,day); break; case 3: system(“cls“); printf(“在主菜单中输入相应的数字就可以完成以下功能:nn“); printf(“* 1、显示今天所在月的月份nn“); printf(“* 2、输入日期,判断该年是否是闰年,并显示所在月份的月历nn“); printf(“* 3、显示功能及操作方法nn“); printf(“* 4、退出程序nn“); backmenu(); mainmenu(year,month,day); break; case 4:system(“cls“);printf(“程序已退出!n“);exit(0); default:printf(“%c输入错误!n“,7);flag=1; 万年历系统 10 while(flag); void main() struct tm *gmt=getday(); year=gmt-tm_year+1900; month=gmt-tm_mon+1; day=gmt-tm_mday; printcalender(year,month,day);/用系统时间进行初始化,打印当前月历 backmenu(); mainmenu(year,month,day); 万年历系统 11 6 6 模块分析模块分析 6.16.1 系统日期模块系统日期模块 struct tm* getday()/从系统取得当前时间 time_t timer; struct tm* gmt; time( gmt=localtime( return gmt; 6.26.2 打印模块打印模块 void printcalender(int year,int month,int day)/打印月历 int i; int w; int n; int nowday=1; char wday74=“sun“,“mon“,“tue“,“wed“,“thu“,“fri“,“sat“; printf(“ %d 年%d 月%d 日n“,year,month,day); printf(“*n“); for(i=0;i #include #include #include int year,month,day; int daysofmonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31; int runyear(int year) int flag=0; if(year%400=0|(year%4=0 return flag; struct tm* getday() time_t timer; struct tm* gmt; time( gmt=localtime( return gmt; int dayexame(int year,int month,int day) if(year12|day31) return 0; switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: if(day31)return 0;break; case 4: case 6: case 9: 万年历系统 19 case 11: if(day30)return 0;break; default: if(runyear(year) else if(runyear(year)=0 return 1; int getwday(int year,int month,int day) int nday=0,nday,i,w; for(i=0;i2)f=1; while(f=1); switch(*menu) case 1: system(“cls“); printcalender(year,month,day); backmenu(); mainmenu(year,month,day);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论