C语言课程设计——万年历的设计.doc_第1页
C语言课程设计——万年历的设计.doc_第2页
C语言课程设计——万年历的设计.doc_第3页
C语言课程设计——万年历的设计.doc_第4页
C语言课程设计——万年历的设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

石家庄铁道大学课程设计万年历的设计单 位 电气与电子工程 分院(系)专 业 电气信息类 学 号 学生姓名 指导教师 完成日期 2012年 6月20日摘 要 万年历是生活中经常用到的东西,它不仅能够查询本年的日期信息,也能查询若干年前或若干年后的日期信息。本工具就是基于开发工具WinTC做出的万年历,功能齐全,包括默认显示当前日期,查询年历、月历、日历等,界面整洁,显示清晰。关键词:万年历,Win-TC,功能齐全 目录第1章 选题的意义 31.1自我介绍 31.2选题名称 31.3 选择本题的意义 41.4 选择本题对C语言学习的意义 41.5时间安排 41.6参考资料 4第2章 系统功能需求分析 62.1系统的基本要求 62.2 功能模块 62.3 流程图说明 6第3章 系统设计 73.1 流程图 73.2 数据结构 83.3 中心算法代码 8第4章 系统实现 94.1 程序代码 94.2 系统使用 164.3 运行效果说明 16第5章 总结 185.1 独特设计 185.2 设计中的问题以及收获 185.3设计题目及功能的改进意见 185.4 结束语 18致谢词 19第1章 选题的意义1.1自我介绍班级:电09 学号: 姓名: 专业:电气信息类 1.2选题名称万年历的设计1.3 选择本题的意义 随着生活节奏的加快,人们不可能仅仅满足对当天的日程进行安排,往往需要对几天、几个月甚至几年之后的工作进行安排,这就需要充分了解当天的信息,包括年、月、日、星期、是否为闰年等等。万年历就能很好的完成这项工作。因此,一个界面整洁,显示清晰的万年历显得尤为重要,它不仅能帮助人们了解将来的日期信息,也能帮助人们回忆过去的日子,让看上去烦乱的日期表变得简明而直观。1.4 选择本题对C语言学习的意义 在程序设计过程中,会用到C语言的许多知识,包括数组、指针;结构体、文件、循环结构等等,通过设计的训练,会对C语言有更深刻的了解,掌握利用C语言相关函数开发万年历的基本原理,为以后的学习与开发打下坚实的基础。1.5时间安排5月22日 对所选题目用到的知识点上机实验。5月23日 初步完成课程设计报告中“选题意义”部分的内容。根据课程设计任务书要求,进行系统功能需求分析和设计;设计初始代码框架。5月29日 系统功能需求分析,系统设计;初步完成课程设计报告“系统功能需求分析”,“系统设计”部分的内容。5月30日完善课程设计报告“系统功能需求分析”,“系统设计”部分的内容,并上传服务器;设计初始代码,部分功能实现。6月5日编写程序代码;部分功能实现;补充完善课程设计报告“系统功能需求分析”、“系统设计”。6月6日编写程序代码;部分功能实现;补充完善课程设计报告“系统功能需求分析”、“系统设计”。6月12日编写程序代码;部分功能实现;补充完善课程设计报告“系统功能需求分析”、“系统设计”。6月13日编写程序代码;完成全部功能;补充完善课程设计报告“系统功能需求分析”、“系统设计”。6月19日调试代码;完成功能;撰写课程设计报告6月20日调试代码、美化界面;运行完成全部功能;撰写课程设计报告。1.6参考资料1. C语言程序设计实例精粹. 谭明金 . 电子工业出版社2. C语言编程技巧及实用程序荟萃. 鲁沐浴. 电子工业出版社3. C语言解惑.Alan R.Feuer. 人民邮电出版社4. C语言实例解析精粹. 曹衍龙 . 人民邮电出版社5. C语言实战105例. 王为青. 人民邮电出版社6. MSDN 第2章 系统功能需求分析2.1系统的基本要求要求实现日历显示、查询任意日期功能,进行日期合法性检查功能。1.日历显示功能。该日历能够根据系统日期进行初始化,如果没有任何的输入,则会显示系统日期所在月份的月历,并能突出显示当前日期。2.日期查询、闰年判断功能。输入日期进行查询,查询后将显示查询日期所在月份的月历,并突出显示查询日期。如果是闰年,则给出提示。3.日期合法性检查功能。程序还设置有对输入的日期进行合法性检查功能,如果年份、月份或者天数不合法,查询将被拒绝,并显示提示信息。4.支持通过键盘操作设定系统日期。通过键盘的操作调整年份、月份和日期,并显示调整后的日期。还可以通过键盘操作复位到系统所在日期等。如:左移键表示减少月份、右移键表示增加月份;上移键表示减少年份、下移键表示增加年份;如S键表示显示系统日期;如果按ESC键,表示退出系统等。2.2 功能模块显示部分:显示系统当月月历,突出显示当前日期,并且能够翻阅万年历;查询部分:根据用户输入,查询用户所需的日期信息.2.3 流程图说明(1)显示系统的当前日期用函数getdate()获得系统当前时间;用printWNL()函数打印当天的日历;根据用户、的输入进行年、月的翻查;Tab键表示用户需要输入进行查询,点此键可进入第二部分,Esc退出;(2)根据用户输入,查询其它日期:isLeap()判断输入数据是否是闰年;maxDay()判断某年某月最多天数;eachYearTotal()判断这一天是该年的第几天;week判断某年某月某日的编号;output()输出该天星期几;display()显示当前月历;check()检查有效性;display3()输出日历;getMenu()调菜单;第3章 系统设计3.1 流程图开始调用getsystime(&t)调用printWNL()输出当前日期控制键翻阅Tab键查询开始始getMenu输出信息fflush(stdin)输入select值fflush(stdin)select输出shurunian输入year值flag=check(year,1,1)flag=0提示输入有误退出Esc3.2 数据结构a=31,28,31,30,31,30,31,31,30,31,30,31;存储112月每个月的天数3.3 中心算法代码void printWNL(int, int); 简单格式打印万年历int Week(int,int,int); 求星期几int getDays(int, int); 计算某个月的天数int isRunNian(int); 判断是否闰年int eachYearTotal(int year,int month,int day);判断是第几天 int week(int year,int month,int day);判断星期几 int check(int year,int month,int day); 检查输入display();显示当前月历;void display3(int year,int month,int day);输出日历; 第4章 系统实现4.1 程序代码#include #include #include #include #include #include #define up 72#define down 80#define left 75#define right 77#define Tab 9#define Esc 27#define s 115void printWNL(int, int); int Week(int,int,int); int getDays(int, int); int isRunNian(int); int isLeap(int year); int maxDay(int year,int month); int eachYearTotal(int year,int month,int day); int week(int year,int month,int day); char *chineseWeek(int number); void output(int year,int month,int day); void display(int year,int month); int check(int year,int month,int day); void display1(int year); void display2(int year,int month); void display3(int year,int month,int day); void getMenu();void main() int year,month,q,y,m,d1; struct date d; char ch;int day,flag,select; getdate(&d); year = d.da_year; month = d.da_mon; day = d.da_day; y = d.da_year; m= d.da_mon; d1 = d.da_day; do system(cls); printf(今天是:%d月%d日,m,d1); q=isLeap(year) ; if(q=1) printf(n注:本年为闰年.) ; printf(n); printWNL(year,month); ch = getch(); if(ch =Esc) goto stop; if(ch =Tab) break; else if(ch = 0) ch = getch(); switch(ch) case s: year = d.da_year; month = d.da_mon; day = d.da_day;break; case left: year-; break; case right: year+; break; case up: month-; if(month = 0) month = 12; year-; break; case down: month+; if(month = 13) month = 1; year+; break; default:; while(1); printf(n请选择(输入相应数字):);while(1) getMenu(); printf(输入选择: ); fflush(stdin); scanf(%d,&select); fflush(stdin); switch(select) case 1:do printf(输入年 月 日(年、月、日之间加空格): );scanf(%d%d%d,&year,&month,&day); flag=check(year,month,day); if(flag=0) printf(输入有误,请重新输入!n); while(flag=0); display3(year,month,day); break; case 2:exit(0); default: printf(输入有误,请重新输入!nn); q=isLeap(year) ; if(q=1) printf(注:本年为闰年.n) ; stop:printf(谢谢使用!n) ;void printWNL(int y, int m) int i,j; int day = 1 - Week(y,m,1); int days = getDays(y,m); printf( %4d年%2d月n,y,m); printf( 日 一 二 三 四 五 六n); for(i = 1; i = 6; i+) for(j = 1; j = 7; j+) if(day days) printf( ); else printf(%3d,day); day+; printf(n); printf(操作说明:【】减年 【】加年 【】减月 【】加月n 【Tab】查询 【s】复位到系统时间 【Esc】退出 n);int Week(int y,int m,int d) int days = 0; int i; for(i = 1; i y; i+) days += isRunNian(i) ? 366 : 365; for(i = 1; i m; i+) days += getDays(y,i); days += d; return days % 7;int isRunNian(int y) return (y % 4 = 0 & y % 100 != 0 | y % 400 = 0) ? 1 : 0;int getDays(int y, int m) int days = 0; switch(m) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = isRunNian(y) ? 29 : 28; break; default:; return days;int isLeap(int year) if(year%4=0&year%100!=0|year%400=0) return 1; else return 0; int maxDay(int year,int month) int a=31,28,31,30,31,30,31,31,30,31,30,31; if(isLeap(year) a1=29; return amonth-1; int eachYearTotal(int year,int month,int day) int i,sum=0; for(i=1;imonth;i+) sum+=maxDay(year,i); sum+=day; return sum; int week(int year,int month,int day) int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,day); number%=7; return number; char *chineseWeek(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 error; void output(int year,int month,int day) int number=week(year,month,day); printf(%d年%d 月%d 日%10snn,year,month,day,chineseWeek(number); void display(int year,int month) int max,number,i,j=1; max=maxDay(year,month); number=week(year,month,1); printf(%5s%5s%4s%4s%4s%4s%4sn, 日 , 一 , 二 , 三 , 四 , 五 , 六 ); for(i=0;inumber;i+) printf( ); while(j=max) printf(%4d,j);if(i%7=6) printf(n); i+; j+; printf(nn); int check(int year,int month,int day) if(year0|month12|daymaxDay(year,month) return 0; else return 1; void display3(int year,int month,int day) printf(n); output(year,month,day); display(year,month); void getMenu() printf(n1.输入查询日期t2.退出n);4.2 系统使用进入后默认显示系统当前日期,按、键可以进行减年、加年操作;、可以进行减月、加月操作;在翻阅过程中按s键可以复位到系统日期;按Esc键退出;按Tab键进行查询操作,输入需要查询日期后,会显示查询日期所在月历;如需继续查询,则按1继续查询,否则可按下2退出。4.3 运行效果说明进入后会显示系统日期,并突出提示当天的日期可以根据提示进行万年历的翻阅;在翻阅过程中按s键可复位到系统时间;也可进行查询或者退出.按下Tab键后,可进行万年历查询,默认显示所查日期的月历.如果系统日期或者查询日期所在年为闰年,则会给出提示.第5章 总结5.1 独特设计本万年程序将显示、翻阅、查询

温馨提示

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

评论

0/150

提交评论