万年历系统课程设计报告附源码
- 格式:docx
- 大小:36.19 KB
- 文档页数:13
2013-2014学年第二学期《面向对象程序设计》课程设计报告题目:万年历系统专业:计算机科学与技术班级:姓名:学号:指导教师:成绩:计算机与信息工程系2014年6月6日目录1 设计内容及要求 (1)1.1设计内容 (1)1.2设计任务及具体要求 (1)2 概要设计 (2)2.1程序设计思路 (2)2.2 总体程序框图 (3)3 设计过程或程序代码 (4)3.1各个模块的程序流程图及运行界面 (4)3.2对关键代码加以分析说明 (7)4 设计结果与分析 (13)4.1程序调试的结果 (13)4.2程序设计分析 (13)5 小结 (14)致谢 (15)参考文献 (16)源程序 (17)1 设计内容及要求1.1设计内容万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用。
在我设计的万年历中主要有:(1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用规范。
(2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。
(3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合的格式,方便查看与使用。
(4)编写万年历的课程设计,是为了使同学们更加了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
1.2设计任务及具体要求利用JAVA语言编写的万年历系统采用了多种JAVA语句来实现多种功能。
用户可以通过本程序的applet运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。
要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要将这一年的某一月份的阴历与阳历全部显示出来,并且附带这一月份的重大节日。
当用户随意改动年份或月份时系统自动显示与星期对应的日期。
信息科学与技术学院程序设计基础课程设计报告题目名称:万年历系统学生姓名:学号: 2011508020专业班级:指导教师:2012年 7 月 1 日系统万年历的设计目录1课程设计目的及要求 (1)1.1设计题目 (1)1.2设计要求 (1)1.3其他要求 (1)2课题总体设计 (2)2.1系统功能模块图 (2)2.2系统流程图 (2)3.详细设计 (3)3.1 PRINT WNL() (3)3.2 IS R UN N IAN()模块设计 (4)3.3 GET D AYS模块设计 (5)3.4主函数MAIN()模块设计 (6)4调试与测试 (7)5课程设计总结 (10)参考文献 (11)附录 (12)万年历系统万年历系统的设计1 课程设计目的及要求1.1设计题目万年历系统1.2设计要求模仿现实中的日历1.、当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);2、当系统日期变到下一个月时,系统自动翻页到下一月。
1.3其他要求1、只能使用c/c++语言,源程序要有适当的注释,使程序容易阅读。
2、至少采用文本菜单界面。
3、学生可自动增加新功能模块。
系统万年历的设计2课题总体设计2.1系统功能模块图图1-1 系统功能模块图2.2系统流程图图1-2 系统流程图万年历系统3.详细设计3.1 printWNL()图1-3 printWNL()模块设计图模块说明:prinWNL()先后调用week(),getdays()打印出简单的日历。
系统万年历的设计3.2 isRunNian()模块设计图1-4 isRunNian()函数模块设计图模块说明:若该年不是闰年,则输出0,相反则输出1;设年数为X,先判断X能否被4整除,若不能则输出0;若能整除,则判断X能否被100整除,若不能则输出1;若能整除,则判断X能否被400整除,若不能则输出0,若能则输出1。
万年历系统3.3 getDays模块设计图1-5 getDays模块设计图模块说明:判断系统月份,以月份为主,三十一天的有一月,三月,五月,七月,八月,十月,十二月;三十天的有四月,六月,九月,十一月。
C语言课程设计报告题目:编写万年历系统年级:专业:班级:姓名:学号:目录第1章设计目的第2章需求分析第3章概要设计第4章源程序清单第5章执行结果1)登陆界面2)显示当前日月历3)显示具体日期信息第6章程序问题调试与课程设计心得第1章设计目的设计目的(实验要求):1.模仿现实生活中的挂历.2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).3.当系统日期变到下一月时,系统自动翻页到下一月.第2章需求分析(1)程序运行时,首先给出菜单选项和输入提示:(2)用户可以通过主菜单选择不同选项。
输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。
第3章概要设计1.菜单选择界面可通过下面所示函数时现;主要思路:通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选项的功能实现。
闰年与平年的判断:代码如下:void main(){int year,month,day,a,b;while(1){printf("\n\n\n\n");printf("**********************************************************\n\n");printf(" * * \n");printf(" Welcome to enter calendar system \n");printf(" * * \n\n");printf("**********************************************************\n\n\n");printf(" 1 The month of current date 2 Date 3 Exit\n");printf(" please import your choose<1~3>,press Enter to define: ");scanf("%d",&b);switch(b){case 1:printf("\n Please import the year,month and day which you want tocheck,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,1);if(a==0){printf("Error!Please import again.\n");break;}yueli(year,month,day);break;case 2:printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: ");scanf("%d%d%d",&year,&month,&day);a=x3(year,month,day);if(a==0){printf("Error!Please import again.\n");break;}rili(year,month,day);break;case 3:exit(0);default:printf("Error!Please import again.\n\n");}}2.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。
2012-2013学年第二学期《高级语言程序设计》课程设计报告题目:万年历查询专业:网络工程班级:12(1)班姓名:xxx指导教师:xxx成绩:计算机与信息工程系二0一三年六月二十日目录1设计内容及要求 (2)1.1设计容 (2)1.2设计任务及具体要求 (2)2概要设计 (3)2.1设计内容及要求 (3)2.2该系统的功能简介 (3)2.3总体程序框图 (3)2.4各个模块之间的主要关系 (3)3.3设计过程或程序代码 (4)3.1各个模块的程序流程图及运行界面 (4)3.2对关键代码加以分析说明 (4)4设计结果与分析 (19)5小结 (22)致谢 (22)参考文献 (23)附:源程序 (18)1设计内容及要求1.1设计内容万年历查询算法。
1.2设计任务及具体要求设计一个小型信息系统,具有信息录入、信息浏览显示、信息删除修改、信息查询等功能,重点解决是查询的实现问题。
利用软件工程中的方法进行系统分析。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。
2概要设计2.1该程序可实现的功能主要有以下几点1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。
假定输入的年份在1-9999年之间。
2、输入年月,输出该月的月历。
3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。
:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。
即:当前若正在显示2011年的年历,按下键盘“↑”方向键后,年历变为2010年的。
2.2程序的流程图:(见下页)流程图3、详细设计(程序代码分析)3.1变量的说明变量说明:(以下均为整型变量)year 表示年份的变量;month 表示月份的变量;day 表示日期的变量;select 表示菜单选择的;变量i 表示月份的变量;j 表示一个月中的某一天的变量;sum 判断某天是一年中的第几天的变量;number判断某天离公元1年1月1日还有几天的变量;a[] 表示每月天数的数组变量;year1 系统时间年份的变量;month1 系统时间月份的变量;day1 系统时间日期的变量;3.2程序的分析#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/ #define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49#define KEYNUMPageDown 0x51int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" input a number:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" calender display:(eg2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" prompt press up:last year press down:next year press other key :return menu\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" input is invalid,please input again!\n");break;case 2: /*当选择为2显示月历*/printf(" month shows:input year,month(eg2011,6):");scanf("%d,%d",&year,&month);if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" prompt press left:last month perss right:next month perss other key:return menu\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" input is invalid,please input again!\n");break;case 3: /*当选择为3时显示日期*/printf(" date shoes:input year,month,date(eg2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay( year,month)){display3(year,month,day);printf("proompt press PageUp:yesterday press pageDown:next day press other key:return menu\n\n");setDay3( year,month, day);}elsesystem("cls");printf("input is invalid,please input again!\n");break;case 4: /*当输入数字4时,退出系统*/exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" input is invalid,please input again!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;}int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/{int i,sum=0;for(i=1;i<month;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=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;}printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d year %d month\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d year %d month\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/ {int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month, day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1, month1,day1);days=days0-days1; /*计算出两个日期之间的时间差*/printf("\n Today to%dyear%dmonth%ddatehave%ddays\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,da y);number=number%7 ;switch( number){case 0:printf( "\n %d year%d month%d date today is sun",year,month,day);break;case 1:printf( "\n %d year%d month%d date today is mon",year,month,day);break;case 2:printf( "\n %d year%d month%d date today is tue",year,month,day);break;case 3:printf( "\n %d year%d month%d date today is wde",year,month,day);break;case 4:printf( "\n %d year%d month%d date today is thu",year,month,day);break;case 5:printf( "\n %d year%d month%d date today is fri",year,month,day);break;case 6:printf( "\n %d year%d month%d date today is sat",year,month,day);break;default:system("cls");printf(" there is an error!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/ {if(month==1)switch(day){case 1:printf(",Today is New Year's Day");}if(month==2)switch(day){case 14:printf(",Today is Valentine's Day ");}if(month==3)switch(day){case 8:printf(",Today is Women's Day ");break;case 12:printf(",Today is Arbor Day");}if(month==4)switch(day){case 1:printf(",Today is April fool's Day");}if(month==5)switch(day){case 1:printf(",Today is The labor Day");break;case 4:printf(",Today is Youth Day");}if(month==6)switch(day){case 1:printf(",Today is Children's Day ");}if(month==7)switch(day){case 1:printf(",Today is Founding of the section");}if(month==8)switch(day){case 1:printf(",Today is Army Day");}if(month==9)switch(day){case 10:printf(",Today is Teacher's Day");}if(month==10)switch(day){case 1:printf(",today is The national Day");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/{ char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/if(year<2){system("cls");printf(" WARNING!BEYOND THE RANGE!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown: /*“↓”年份变大*/year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/{char k;getch();k=getch();switch(k){ case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" WARNING!BEYOND THE RANGE!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight: /*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();k=getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2)month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" WARNING!BEYOND THE RANGE!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}void getmenu() /* 显示菜单选择*/{printf(" ************Main menu********************\n\n");printf(" * Welcome to calendar system *\n\n");printf(" * 1.Calender display *\n\n");printf(" * 2.Month shows *\n\n");printf(" * 3.Date shows *\n\n");printf(" * 4.Log out *\n\n");printf(" *****************************************\n\n"); }4设计结果与分析4.1年历的显示(1)输入数字1进入年历的显示:(见下页)图4.1.1系统的主菜单(2)输入年份2013,显示2013年的年历如下图4.1.2输入年份2013后的结果(3)按↑键盘显示上一年(2012年)的年历,显示如下图4.1.3按↑后的结果(4)按↓键盘显示上一年(2014年)的年历,显示如下图4.1.4按↓后的结果图4.2月历的显示(1)在菜单中选择2,进入月历的显示,输入2013,6,显示2013年6月份的月历,显示效果如下图4.2.1月历查询的结果(2)按←键盘显示上一个月(5月)的月历,显示效果如下图4.2.2按←后显示的结果(3)按→键盘显示下个月(7月)的月历,显示效果如下:(见下页)图4.2.3按→后显示的结果4.3日历的显示(1)输入选择3进入日历的显示,如图输入2013,6,20显示这天的星期,是否为公历节日,距离现在还有多少天图4.3.1日历显示的结果(2)按Pagup显示前一天的日历,显示如下图4.3.2按Pagu显示的结果(3)按Pagdown显示后一天的日历,显示如下图4.3.3按Pagdown显示的结果(4)观察是否能判断节日,输入2013,2,14;显示结果如下:(见下页)图4.3.4节日查询的结果4.4退出系统当输入数字4时,显示结果如下:图4.4.1退出系统5、自我小结这次用C语言编写的万年历系统主要实现了年历、月历、日历的显示,并且可通过键盘来变换相应的年月日,最终的设计结果达到的这些要求,是一次比较成功的课程设计。
第一部分:正文一,课程设计名称:1.万年历2.(a) (b)* **** *** ***** ***** ************** ***** ***** *** **** * ********* **** **** *** *** ** ** * * ** ** *** *** **** **** *********二,使用工具软件:Microsoft Visual Basic 6.0 中文版。
三,课程设计内容简介:(1)万年历的课程设计的基本结构流程:从main函数开始,比如输入2001年,调用函数yearshow,它是控制总循环次数12个月的,在yearshow里有调用了以个函数是monthshow,是控制每个月如何输出显示的,在这个函数里有调用了getmonthweekday函数,它是获得每个月一号是星期几的函数,此函数分为两部分,以2000年1月1号是星期六为准;做十一次运算便可得知2月到12月各个月的1号为星期几。
而在这个函数又调用了getyearday这个函数,是返回天数的函数,它有调用了isleap函数,计算时平年还是闰年是,时闰年返回366,平年返回355。
到这步开始就返回值了,首先isleap告诉getyeardays2000是闰年和平年,于是getyeardays得到366getyearweekday,getyearweekday 就计算sum=366且返回(366+6)%7=2给getmonthweekday,w=2,getmonthweekday中若计算1月1号则为星期二,2月-12月中如3月则要加上以月和二月的天数载加上2对7取余数,这个数返回给monthshow,若这个数是w=0;不输出空格,不等于0就输出w-1个空格,以便日期和星期对应,如此循环十二个月就计算完了,一边计算一遍显示。
(2)(a)图形的课程设计的基本结构流程(3)(b)图形的课程设计的基本结构流程(4)运行环境:Win32 Console Application四,得意之处.1把程序分解成多个小函数,那么问题就分解成几个小问题。
万年历课程设计报告目录第一章设计目的与要求 (1)1.1 设计目的 (1)1.2 设计要求 (1)第二章课程设计的相关内容 (2)2.1 设计背景 (2)2.2 程序开发环境 (2)2.3 课程设计主要内容 (2)第三章课程设计整体规划和设计 (3)3.1 整体流程图 (3)3.2 功能模块图 (4)3.3 各模块功能详细说明 (4)3.3.1 查询星期模块 (4)3.3.2 判断模块 (4)3.3.3 查询月历模块 (4)3.3.4 显示模块 (4)3.3.5 退出模块 (4)3.4 各模块函数说明 (5)3.4.1查询星期模块程序: (5)3.4.2 判断模块程序 (5)3.4.3 查询月历模块 (6)3.4.4 显示模块程序 (7)第四章系统实现 (8)4.1系统使用说明及出现的问题 (8)4.1.1 系统使用说明 (8)4.1.2 可能出现的问题 (8)4.2 系统运行结果及运行截图 (8)4.2.1 系统总体选择图 (8)4.2.2 查询输入的这天是星期几 (9)4.2.3 判断输入的这年是否为闰年 (9)4.2.4 查询一年第几年的日历 (10)4.2.5 打印出一年的日历 (11)4.2.6 输入年份不在范围内 (11)4.2.7 输入错误符号 (12)4.2.8 输入的数字不在选择范围内 (12)4.2.9 退出 (13)4.3 系统核心代码 (13)第五章课程设计心得与体会 (15)附录一:参考文献 (17)附录二:程序清单 (18)第一章设计目的与要求1.1 设计目的通过显示年日历程序的设计,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。
通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《C++语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了C++语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!通过C++语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
Java课程设计报告课程设计题目:万年历指导老师:**********学生姓名:*********专业:**********学号:*******Java课程设计-万年历1、课程设计目的:这学期我们学习了Java语言,Java语言是面向对象的开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。
它具有面向对象、跨平台、分布应用等特点。
它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
很多程序开发人员得第一选择。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
让学生自己动手动脑,将书本上得知识运用到实践当中去,使知识能更好得融会贯通。
为了达到这个目的,我们需要自己动手做一个Java的课程设计,在这个课程设计里我们需要根据我们手中现有得软件与知识基础,独立得将它完成,只有这样,我们才能把理论变成实践,将知识真正得做到学以致用。
这次课程设计我主要研究了利用已学的Java知识编辑一个电子万年历。
通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。
并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识。
2、需求分析:2.1、本程序要求:1、使用图形用户界面;2、本程序能够实现日期与星期查询,同时显示此时的时间。
2.2、功能设计:本程序要构建万年历程序,其功能如下:(1)通过窗口形式运行,实现界面功能;(2)以月历的形式来显示日期与星期;(3)为用户提供年份与月份的下拉形式菜选择年份与月份;(4)同时显示查看时的时刻。
3、课程设计的基本算法public class wnl extends JFrame implements ActionListener,ItemListener{Date date = new Date();private GregorianCalendar gregorianCalendar = new GregorianCalendar();//定义中英文字符数组存储星期信息,用于转换显示private String[] stringWeekEn = new String[] { "SUN", "MON", "TUE", "WED","THU", "FRI", "SAT" };private String[] stringWeekCn = new String[] { "星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六" };//定义存储月份的信息数组,用于转换显示方式private String[] stringMonthEn = new String[] { "Jan", "Feb", "Mar", "Apr","May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" };private String[] stringMonthCn = {"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};private String[] sysNowTime = new String[6];//sysNowTime 用于存储系统时间的变量private String[] sysRunTime = new String[6];private JLabel []labelWeek = new JLabel[7];private JLabel []labelDay = new JLabel[42];private JLabel labelTime = new JLabel();private JPanel panel1 = new JPanel();private JPanel panel2 = new JPanel();private JPanel panel3 = new JPanel();private JComboBox combo1 = new JComboBox();private JComboBox combo2 = new JComboBox();private JButton buttonToday = new JButton();private Border border = BorderFactory.createRaisedBevelBorder(); private Border border1 = BorderFactory.createLineBorder(Color.cyan,3); public wnl (String title) {super(title);for (int y = 1900; y < 2200; y++) {combo1.addItem(" "+ new Integer(y).toString()+"年");}for (int m = 0;m<12;m++){combo2.addItem(" "+stringMonthCn[m]);}buttonToday.setText("现在时刻");setLayout(new FlowLayout());add(panel1);add(panel2);add(panel3);panel1.setLayout(new GridLayout(2,3,10,2));panel1.add(combo1);combo1.addItemListener(this);panel1.add(combo2);combo2.addItemListener(this);panel1.add(buttonToday);// buttonToday.addActionListener(this);labelTime.setFont(new Font("宋体",Font.PLAIN,16));labelTime.setForeground(Color.red);panel1.add(labelTime);Timer time = new Timer(1000,new TimerListener());time.addActionListener(new TimerListener());//time.setRepeats(true);time.start();//labelTime.addAncestorListener(new TimerListener());panel2.setLayout(new GridLayout(7,7,10,10));panel2.setBackground(Color.white);for(int i=0;i<7;i++){labelWeek[i] = new JLabel();labelWeek[i].setHorizontalAlignment(0);if(i==0||i==6){labelWeek[i].setBackground(Color.blue);labelWeek[i].setForeground(Color.RED);labelWeek[i].setFont(new Font("黑体",Font.BOLD,14));}else{labelWeek[i].setForeground(Color.BLACK);labelWeek[i].setFont(new Font("新宋体",Font.PLAIN,14));}labelWeek[i].setText(stringWeekCn[i]);panel2.add(labelWeek[i]);}for(int i= 0;i<42;i++){labelDay[i] = new JLabel();labelDay[i].setHorizontalAlignment(0);labelDay[i].setText("");panel2.add(labelDay[i]);}addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});setSize(300,300);setBounds(250, 200, 400, 360);setVisible(true);setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getSysDate();setNowDate();}public void actionPerformed(ActionEvent ae){if(ae.getSource()==buttonToday){setNowDate();}}public void itemStateChanged(ItemEvent aa){setChangeDate();}public int turnWeek(String week){int i;for(i=0;i<7;i++)if(week.equalsIgnoreCase(stringWeekEn[i]))break;return i;}public int turnMonth(String month){/***int turnMonth(String month)*@month 系统日期中的月,诸如Jan\Feb*@return int*返回一个整数值,用于寻找stringMonthCn[]数组中对应的中文月份*/int i;for(i=0;i<12;i++)if(month.equalsIgnoreCase(stringMonthEn[i]))break;return i;}/***setNowDate()*设置当前系统日期*/public void setNowDate(){setSysDate(getNowYear(),getNowMonth());getSysRunDate();setDateNull();combo1.setSelectedIndex(getShowYear() - 1900);combo2.setSelectedIndex(getShowMonth());setDays(getMonthDays(getNowYear(),getNowMonth()),getInitWeek(sysRunTime[0]),getNowDa y());labelTime.setText(sysNowTime[3]);labelTime.setHorizontalAlignment(0);}/**Integer getShowYear()*获取组合框中应该显示的年份*/public void setSysDate(int year,int month){gregorianCalendar.set(year,month,1);}public void setDateNull(){for(int i=0;i<42;i++){labelDay[i].setText(" ");}}public void setChangeDate(){setSysDate(getComboYear(),getComboMonth());getSysRunDate();setDateNull();setDays(getMonthDays(getComboYear()+1,getComboMonth()+1),getInitWeek(sysRunTime[0]),-1);/***返回所选年月的天数,因为数组中的数值从0开始,所以各月必须加1.*而2月,经过是否为闰年判断,选择返回28或29天.*其余月份为大月,返回31天.**/}public int getMonthDays(int year, int month) {switch (month) {case 4:case 6:case 9:case 11:return 30;//小月返回30天case 2:if (gregorianCalendar.isLeapYear(year)) {//isLeapYear(year)确定当前纪元中的指定年份是否为闰年。
信息科学与技术学院程序设计基础课程设计报告题目名称:万年历系统2012 年 7 月 1 日目录1 课程设计题目与要求 (3)1.1设计题目 (3)1.2设计要求 (3)2 总体设计 (4)2.1基本思路 (4)2.2框架结构图 (4)3 详细设计 (5)3.1数据结构设计 (5)3.2主模块设计 (5)4 运行结果 (10)5 课程设计总结 (15)1 课程设计题目与要求1.1设计题目万年历系统1.2设计要求1.21问题描述要求: 模仿现实生活中的挂历.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).当系统日期变到下一月时,系统自动翻页到下一月1.22问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的哥哥实体之间的关系及其属性和行为;(2)根据系统描述,设计系统的类层次;(3)完成类层次中个各类的描述(包括属性和方法;)(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)完成系统总结报告以及系统使用说明书。
1.23其他要求(1)只能使用C\C++语言,源程序要有适当的注释,使程序容易阅读。
(2)至少采用文本菜单界面。
(3)学生可自动增加新功能模块。
2.1基本思路先从系统调用时间,判断是否是闰年,再返回当月的天数以及当月的第一天是星期几最后输出当月的月历2.2框架结构图主程序获取系统日期判断是否是闰年计算出当月有几天换算出本月第1天是星期几打印输出本月月历查询年份月历3.1数据结构设计本程序采用类定义代码如下:class Date{private:int year;public:int weekday();void disp(int x);int isleapyear();int monthday(int i);void getyear();};类名:Date数据成员:year成员函数:void getyear();//输入年份的函数int isleapyear();//判断是否是闰年的函数int weekday();//判断本月第一天是星期几的函数int monthday(int i);//计算每月有几天的函数void disp(int x); //输出月份及查询年份的月历的函数及字符串数组定义代码如下:char* weekd[7]={"MON","TUE","WEN","THU","FRI","STA","SUN"};3.2主模块设计主函数流程图:函数名:int main函数作用获取系统时间,调用getyear和disp这两个函数入口参数 year,nowtime出口参数 month开始int year,monthday,isleapyear 函数功能设计流程图:函数名 isleapyear函数作用 判断是否是闰年入口参数 year出口参数 return 返回值否是否否是是执行相应功能,输出当月月历与查询年份功能调用系统时间, 输出当前时间结束Int year; year%4=0? 调用输出函数year%100=0? year%400=0?weekday 函数功能设计流程图函数名:int weekday()函数作用 判断每月的第一天是星期几入口参数 year出口参数 return 返回值是是闰年 不是闰年结束开始int n=year-1900; n=0?return 7 return n;n=n+(n-1)/4+1; n=n%7;monthday 函数功能设计流程图函数名:int monthday()函数作用 判断每月有多少天入口参数 m出口参数 return 返回值r否是否是开始 int m; return 31 m=1?||m=3?||m=5?||m=7?||m=8?||m=10?||m=12? m=4?||m=6?||m=9?||m=11? isleapyear()=1? return 30 结束否是disp 函数功能设计流程图函数名:void disp()函数作用 输出当月月历和选择输出全年月历入口参数 weekday()返回值出口参数 return 返回值结束return 28 return 29开始int x,i;输出全年月历 x=-1?输出当月月历x=i?4 运行结果程序主界面:在主界面显示当前的时间和当月的月历,并提供查询年份功能。
C语言课程设计报告-----万年历设计人:贾伟涛学号:2013010912班级:13电信应电班指导老师:张伟日期:2014年6月9日内容提要通过大一下学期对C语言的学习,了解到了很多C语言的相关知识。
学习的过程虽然有很多困惑,但是当自己能够独立的看懂和独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。
我虽然可以看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对c语言的兴趣。
C语言是近年在国内外得到迅速推广应用的一种机器语言。
C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。
因此,C语言特别适合于编写各种软件。
在这次的课程设计中我将把日常生活中最经常接触的——日历的查询,利用C语言的程序编成一个简单的万年历查询系统。
通过这个小小的系统可以实现很多功能。
在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。
在不断的调试中最终才获得最为完整的程序。
接下来就是我的C 语言课程设计的具体内容来了,大家拭目以待吧!目录一、系统功能和数据说明-----------------------二、问题分析---------------------------------三、程序总体设计及功能结构框图---------------四、程序流程图-------------------------------五、源程序代码-------------------------------六、使用说明---------------------------------七、个人心得---------------------------------八、参考文献---------------------------------一、系统功能和数据说明(一)功能简介在日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简单明了的给我们最想要的日期信息。
单片机课程设置万年历报表一、系统介绍:电子万年历是一种非常广泛的日常计时工具,在现代社会中越来越流行。
可对年、月、日、时、分、秒等多种功能进行计时,DS1302使用寿命长,误差小。
数字电子万年历采用直观的数字显示,可同时显示年、月、日、时、分、秒等信息,还具有时间校准等功能。
本设计是基于51系列单片机的电子万年历设计,可显示年、月、日、时、分、秒的信息,并具有日期和时间可调功能。
在设计的同时,更全面地准备了单片机的理论基础和外围扩展知识。
在软硬件设计上,没有良好编制依据知识和实践经验,会受到很大的限制。
每个功能需要什么样的硬件来实现,程序怎么写,算法怎么实现等等,没有一定编制依据是不可能很好的。
实现。
在编写程序的过程中,发现仅凭现有的相关知识很难单独完成编写任务。
在老师和同学的帮助下,程序的编写完成了。
万年历的设计过程在硬件和软件方面是同步设计的。
硬件部分主要由AT89C5 1单片机、LED显示电路、定时按键电路组成。
在单片机的选择上,我使用了AT89C5 1单片机,适用于很多复杂的控制应用。
软件方面主要包括日历程序、时间调整程序、显示程序等。
该程序是用高级语言C编写的,以便更容易调整时间。
所有程序都写好后,确认没有问题后,将单片机嵌入到Proteus软件中进行仿真。
在大部分后总在老师和同学的帮助下,电子万年历的设计都是自己努力完成的。
二、系统功能说明一、设计要求:1.具有年、月、日、周、时、分、秒等功能;2.具有年、月、日、周、时、分、秒的调整和校准功能;2、单片机芯片的选型方案及演示:以89C51芯片为硬件核心,数码管显示,为了让用户更清晰易懂,万年历日期和时间分别显示,同时对应两个74LS138芯片控制数码管显示器,还有74LS373解码芯片,74LS21芯片用来控制键盘的功能。
如图所示:74LS138的8个输出管脚要么随时为高电平1,即芯片处于非活动状态,要么只有一个为低电平0,其余7个输出管脚全部为高电平1。
C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。
假定输入的年份在1-9999年之间。
2、输入年月,输出该月的月历。
3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。
:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。
即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。
二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;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=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。
C语言课程设计报告模板-万年历
引言
万年历是一个非常实用的工具,能够帮助人们快速查找任意日期的详细信息。
本报告将介绍我们设计的C语言万年历程序的实现及其功能。
设计目标
我们的设计目标是开发一个简单易用的C语言万年历程序,该程序应具备以下功能: - 显示指定年份的整年日历信息 - 显示指定年份指定月份的月历信息 - 显示指定日期的详细信息,如星期几、所在月份等 - 具备用户友好的交互界面
设计思路
我们的设计思路如下: 1. 获取用户输入的年份、月份和日期信息。
2. 判断用户输入的年份是否为闰年。
3. 根据用户输入的年份计算出该年份的1月1日是星期几。
4. 根据用户选择的功能,分别显示整年日历、月历或详细日期信息。
实现步骤
我们按照以下步骤实现了C语言万年历程序:
步骤一:获取用户输入
首先,我们使用scanf()函数获取用户输入的年份、月份和日期信息。
```c int year, month, day; printf(。
#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define rst573 XBYTE[0X1000]#define y4 XBYTE[0X8000]#define y5 XBYTE[0Xa000]#define y6 XBYTE[0Xc000]#define y7 XBYTE[0Xe000]sbit scl1302=P1^7;sbit IO=P2^3;sbit rst1302=P1^3;sbit lcden=P1^2;sbit lcdwr=P2^1;sbit lcdrs=P2^0;sbit s5=P3^2;sbit s4=P3^3;sbit s6=P3^1;sbit s7=P3^0;uint t;sbit DQ=P1^4;float tt;uchar *riqi="20 - - "; uchar *xingqi="week "; uchar *shijian=" - - "; uchar *wedu="28.7C";uchar time[8],num;int nian,yue,ri,xq=1,shi,fen,miao; char count;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--); }void delayus(uint t){for(;t>0;t--);}void init(){rst573;y4;rst573;P0=0x00;y6;rst573;P0=0xa0;y7;rst573;}/**************************1602***********************/void write_com(uchar com){lcdrs=0;lcdwr=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void initlcd(){lcdwr=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}void write_data(uchar date){lcdrs=1;lcdwr=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}/***********************************************1302**************/ void writebyte(uchar add,date){uchar i;IO=0;rst1302=1;for(i=0;i<8;i++){scl1302=0;IO=add&0x01;scl1302=1;add>>=1;}for(i=0;i<8;i++){scl1302=0;IO=date&0x01;scl1302=1;date>>=1;}rst1302=0;}uchar readbyte(uchar add){uchar i,temp;scl1302=0;IO=0;rst1302=1;for(i=0;i<8;i++){scl1302=0;IO=add&0x01;scl1302=1;add>>=1;}for(i=0;i<8;i++){scl1302=1;temp>>=1;scl1302=0;if(IO)temp|=0x80;}return temp;}void set_1302(){writebyte(0x8e,0x00);writebyte(0x8c,nian);writebyte(0x8a,xq);writebyte(0x88,yue);writebyte(0x86,ri);writebyte(0x84,shi);writebyte(0x82,fen);writebyte(0x80,0x00);writebyte(0x8e,0x80);}void read_1302(uchar *p){p[0]=readbyte(0x81);writebyte(0x00,0x00);p[1]=readbyte(0x83);writebyte(0x00,0x00);p[2]=readbyte(0x85);writebyte(0x00,0x00);p[3]=readbyte(0x87);writebyte(0x00,0x00);p[4]=readbyte(0x89);writebyte(0x00,0x00);p[5]=readbyte(0x8b);writebyte(0x00,0x00);p[6]=readbyte(0x8d);writebyte(0x00,0x00);fen=p[1];shi=p[2];ri=p[3];yue=p[4];xq=p[5];nian=p[6];}/*************************************18b20******************/ void init_ds18b20() //18B20初始化{char presence=1;WR=0;while(presence){while(presence){DQ=1;_nop_();_nop_();DQ=0;delayus(50);DQ=1;delayus(6);presence=DQ;delayus(45); //延时500 uspresence=~DQ;}DQ=1; //拉高电平}/****************************************************************************** **/void writeonechar(unsigned char dat) //写一个字节{uchar i=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();DQ=0;DQ=dat&0x01;delayus(6);DQ=1;dat>>=1;}DQ=1;}/****************************************************************************** ***/uchar readonechar(void) //读一个字节{uchar i=0;uchar dat=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();dat>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();if(DQ)dat|=0x80;delayus(6);}return(dat);}/****************************************************************************** */uchar display_zh() //把子节转化为十进制{init_ds18b20();writeonechar(0xcc);writeonechar(0x44);init_ds18b20();_nop_();_nop_(); _nop_();_nop_();writeonechar(0xcc);writeonechar(0xbe);a=readonechar();b=readonechar();t=b;t<<=8;t=t|a;tt=t*0.0625;t=tt*10+0.5;return t;}void display1(){uchar i;write_com(0x80); //2011-11-11 23-14-59 week 1 28.7℃for(i=0;i<2;i++){write_data(riqi[i]);}write_com(0x84); //2011-11-11 23-14-59 week 1 28.7℃write_data(riqi[4]);write_com(0x87); //2011-11-11 23-14-59 week 1 28.7℃write_data(riqi[7]);write_com(0x8d);write_data('.');write_com(0x8f);write_data('C');write_com(0xc2);write_data(shijian[2]);write_com(0xc5);write_data(shijian[5]);write_com(0xc9);for(i=0;i<4;i++){write_data(xingqi[i]);}writebyte(0x80,0x00);write_com(0x82);write_data(nian/16+'0');write_data(nian%16+'0');write_com(0x85);write_data(yue/16+'0');write_data(yue%16+'0');write_com(0x88);write_data(ri/16+'0');write_data(ri%16+'0');display_zh();write_com(0x8b);write_data(t%1000/100+'0');write_data(t%100/10+'0');write_com(0x8e);write_data(t%10+'0');/********************************/write_com(0xc0);write_data(shi/16+'0');write_data(shi%16+'0');write_com(0xc3);write_data(fen/16+'0');write_data(fen%16+'0');write_com(0xc6);write_data(time[0]/16+'0');write_data(time[0]%16+'0');write_com(0xce);write_data(xq+'0');}void jian(){if(s4==0){writebyte(0x8e,0x00); writebyte(0x80,0x00);num=0;set_1302();}if(s7==0){while(!s7);num++;}switch(num){case 1:writebyte(0x8e,0x00);if(s6==0){while(!s6);fen++; writebyte(0x80,0x80);}if(fen==10)//10fen=16;if(fen==26)//20fen=32;if(fen==42)//30fen=48;if(fen==58)//40fen=64;if(fen==74)//50fen=80;if(fen==90)//60fen=0;if(s5==0){while(!s5);fen--;writebyte(0x80,0x80);}if(fen==-1)//10fen=89;if(fen==79)//20fen=73;if(fen==63)//30fen=57;if(fen==47)//40fen=41;if(fen==31)//50fen=25;if(fen==15)//50fen=9;writebyte(0x82,fen);write_com(0xc3);display1();break;case 2:writebyte(0x8e,0x00);if(s6==0){while(!s6); shi++;writebyte(0x80,0x80);} if(shi==10)//10shi=16;if(shi==26)//20shi=32;if(shi==36)//30shi=0;if(s5==0){while(!s5);shi--;writebyte(0x80,0x80);}if(shi==-1)//30shi=35;if(shi==31)//40shi=25;if(shi==15)//50shi=9;write_com(0xc0);writebyte(0x84,shi);display1();break;case 3:writebyte(0x8e,0x00);if(s6==0){while(!s6);ri++;writebyte(0x80,0x80);}if(ri==10)//10ri=16;if(ri==26)//20ri=32;if(ri==42)//30ri=48;if(ri==50)//60ri=0;if(s5==0){while(!s5);ri--;writebyte(0x80,0x80);}if(ri==-1)//10ri=49;if(ri==47)//40ri=41;if(ri==31)//50ri=25;if(ri==15)//50ri=9;write_com(0x88);writebyte(0x86,ri);display1();;break;case 4:writebyte(0x8e,0x00);if(s6==0){while(!s6);yue++;writebyte(0x80,0x80);}if(yue==10)//10yue=16;if(yue==19)//20yue=0;if(s5==0){while(!s5);yue--;writebyte(0x80,0x80);}if(yue==-1)//10yue=18;if(yue==16)//10yue=10;write_com(0x85);writebyte(0x88,yue);display1();;break;case 5:writebyte(0x8e,0x00);if(s6==0){while(!s6);nian++;writebyte(0x80,0x80);}if(nian==10)//10nian=16;if(nian==26)//20nian=32;if(nian==42)//30nian=48;if(nian==58)//40nian=64;if(nian==74)//50nian=80;if(nian==90)//60nian=96;if(nian==106)//70nian=112;if(nian==122)//80nian=128;if(nian==138)//90nian=144;if(nian==154)//60nian=0;if(s5==0){while(!s5);nian--;writebyte(0x80,0x80);}if(nian==-1)//10nian=153;if(nian==143)//90nian=137;if(nian==127)//80nian=121;if(nian==111)//70nian=105;if(nian==95)//60nian=89;if(nian==79)//50nian=73;if(nian==63)//40nian=57;if(nian==47)//30nian=41;if(nian==31)//20nian=25;if(nian==-15)//10nian=9;write_com(0x82);writebyte(0x8c,nian);display1();break;case 6:writebyte(0x8e,0x00);if(s6==0){while(!s6);xq++;writebyte(0x80,0x80);}if(xq==8)xq=1;if(xq==0)xq=7;if(s5==0){while(!s5); xq--;writebyte(0x80,0x80);}if(xq==-1)xq=7;write_com(0xce);writebyte(0x8a,xq);display1();break;case 7: writebyte(0x8e,0x00);writebyte(0x80,0x00);num=0;set_1302();break;}}void main(){init();initlcd();set_1302();while(1){ display1();jian();read_1302(time);}}。
附录二程序源代码#include <stdio.h>#include <stdlib.h>#include <conio.h>#define X " Sun Mon Tue Wed Thu Fri Sat"void menu(){system("cls");printf("\n+++++++++++++++++++++++++++++++++欢迎使用!++++++++++++++++++++++++++++++++");printf("\n系统菜单!");printf("\n你可以选择一下选项:");printf("\n\n");printf("1 显示系统时间设置闹钟.\n");printf("2 找出这年是不是闰年.\n");printf("3 输入年份显示当年日历.\n");printf("4 退出系统.\n");printf("\n+++++++++++++++++++制作者:信管082001班胡德谋++++++++++++++++++++++++");printf("输入你的选项:");}int getday(int year,int month,int date){int isleap(int year);int flag,s,i;int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int cont=0;flag=isleap(year);if(flag==1)a[2]++;for(i=1;i<month;i++){cont=cont+a[i];}cont=cont+date;s=year+1+(year-1)/4+(year-1)/100+(year-1)/400+cont;return s%7;}int isleap(int year){if(year%4==0&&year%100||year%400==0)return 1;elsereturn 0;}void print(int n){int i;for(i=0;i<n;i++) printf(" ");}int day(int year){long a,b;if(year<=2000){a=2000-year;b=6-(a+a/4-a/100+a/400)%7;return b;}else{a=year-2000;b=(a+1+(a-1)/4-(a-1)/100+(a-1)/400)%7+6;return b%7;}}void printcalendar(int year){int i,j,k,m,n,f1,f2,d;int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; printf("\nThe calendar of the year %d.\n\n",year); d=day(year);if(isleap(year)==1)a[2]++;for(i=1;i<=12;i+=2){m=0; n=0; f1=0; f2=0;switch(i){case 1:printf(" Januray 1 ");break;case 3:printf(" March 3 ");break;case 5:printf(" May 5 ");break;case 7:printf(" July 7 "); break;case 9:printf(" September 9 ");break; case 11:printf(" Nevember 11 ");break; }print(21);switch(i+1){case 2:printf(" February 2 "); break; case 4:printf(" April 4 "); break; case 6:printf(" June 6 "); break;case 8:printf(" August 8 "); break; case 10:printf(" October 10 "); break; case 12:printf(" December 12"); break; }printf("\n");printf(X);print(6);printf(X);printf("\n");for(j=0;j<6;j++){if(j==0){print(d*4);for(k=0;k<7-d;k++){printf("%4d",++m);}print(6);d+=a[i]%7;d%=7;print(d*4);for(k=0;k<7-d;k++){printf("%4d",++n);}printf("\n");}else{for(k=0;k<7;k++){if(m<a[i]){printf("%4d",++m);}else{print(4);}if(m==a[i]) f1=1;}print(6);for(k=0;k<7;k++){if(n<a[i+1]){printf("%4d",++n);}else{print(4);}if(n==a[i+1]) f2=1;}printf("\n");if(f1&&f2) break;}}d+=a[i+1]%7;d%=7;printf(" ");for(k=0;k<27;k++){printf("=");}print(6);printf(" ");for(k=0;k<27;k++){printf("=");}printf("\n");if(i==5){printf("Press any key to others!"); getch();system("cls");}}}void main(){int choice;int year,month,date;int day,flag;char con;menu();scanf("%d",&choice);if(choice==1){r1:system("cls");printf("\n请按这样的年月日格式输入(XXXX,XX,XX):"); scanf("%d,%d,%d",&year,&month,&date);day=getday(year,month,date);if(day==0)printf("\n%d-%d-%d is Sunday!\n",year,month,date);if(day==1)printf("\n%d-%d-%d is Monday!\n",year,month,date);if(day==2)printf("\n%d-%d-%d is Tuesday!\n",year,month,date); if(day==3)printf("\n%d-%d-%d is Wednesday!\n",year,month,date); if(day==4)printf("\n%d-%d-%d is Thursday!\n",year,month,date); if(day==5)printf("\n%d-%d-%d is Friday!\n",year,month,date);if(day==6)printf("\n%d-%d-%d is Saturday!\n",year,month,date); printf("\nContinue...(Y/N)");con=getch();if((con=='y')||(con=='Y'))goto r1;if((con=='n')||(con=='N'))main();}if(choice==2){r2:system("cls");printf("\n请输入年份(XXXX):");scanf("%d",&year);flag=isleap(year);if(flag==1)printf("\nThe year %d is leap year!\n",year);if(flag==0)printf("\nThe year %d is not leap year!\n",year); printf("\nContinue...(Y/N)");con=getch();if((con=='y')||(con=='Y'))goto r2;if((con=='n')||(con=='N'))main();}if(choice==3){r3:system("cls");printf("\n请输入年份(XXXX):");scanf("%d",&year);printcalendar(year);printf("Continue...(Y/N)");con=getch();if((con=='y')||(con=='Y'))goto r3;if((con=='n')||(con=='N'))main();}if(choice==4){system("cls");printf("\nDo you want to Exit?(Y/N)");con=getch();if((con=='y')||(con=='Y'))return;if((con=='n')||(con=='N'))main();}}。
2013-2014学年第二学期《面向对象程序设计》课程设计报告题目:万年历系统专业:计算机科学与技术班级:姓名:学号:指导教师:成绩:计算机与信息工程系2014年6月6日目录1 设计内容及要求万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用。
在我设计的万年历中主要有:(1)使用图形用户界面来查询用用户所需的日期信息,符合日常软件使用规范。
(2)按月份查询,实现了显示查询1901~2100年某月所有日期的阴阳历对照。
(3)并且添加了重大节日与星座等信息,界面采用日常的星期与月份结合的格式,方便查看与使用。
(4)编写万年历的课程设计,是为了使同学们更加了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
利用JAVA语言编写的万年历系统采用了多种JAVA语句来实现多种功能。
用户可以通过本程序的applet运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。
要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要将这一年的某一月份的阴历与阳历全部显示出来,并且附带这一月份的重大节日。
当用户随意改动年份或月份时系统自动显示与星期对应的日期。
用户点击日期时系统会显示具体星座信息。
2 概要设计(1)总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。
然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
(2)输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
(3)算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
(4)如果年份小于1900年则程序不予判断。
(5)公历与农历的换算。
公历年对应的农历数据,每年三字节,格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在闰年又不到3 月份上述之和要减一天再除7星期数为0。
阴历月份计算:4\6\9\11几个小月返回29天, 2月经过判断是否为闰年,选择返回28或29天,其余月份为大月,返回31天。
(6)系统时间的设置。
直接从系统得到时间,设置字体,背景,显示框架等等,绘图就好了。
(1)公历转农历流程图与运行界面①流程图图2 公历转农历流程图②运行界面图3 公农历运行图(2)时间调整程序流程图①流程图图4 时间调整流程图②运行界面图5 万年历运行图(1)本次程序设计共用了class MainCal extends JFrame implements,class CurrTimeLabel和class Lunar三个大类,用于绘制万年历,显示万年历的系统时间和完成农历与公历的换算。
这些类中又运用了许多函数,来完成月份的输出,背景的设置,特定日期的标注等等。
引用的类有:(2)农历的显示:要算出某年某月某日的农历日期,只能采用逐日递推的方式,这里以1900年1月31的日期为依据,它的农历日期为一九零零年大年初一,调用日历类可以算出所求日期与1900年1月31日相差多少天,设这个差值为offset,则用offset与1900~2100的农历年天数逐个相减,当offset<=0时,可以确定当前农历年份。
再用相减后得到的offset与得到的年份的农历月天数逐个相减,同理,当offset<=0时可以确定农历月份。
最后,Offset加上当前月份的天数就可以得到农历日期了,至此,阳历与农历的转换算法得以实现。
在排列阳历日期时,调用阳历与农历的转换算法得到相应农历日期,将对应阳历日期标签下的内容设为农历日期,主要源代码如下:public Lunar(Calendar cal) {int monCyl;int leapMonth = 0;Date baseDate = null;try {年1月31日 ");} catch (ParseException e) {}etText(sFtv[month-1][k++]);labelDay[a1+1][a2].setFont(new Font("黑体}if(k<=2)sFtvDay=sFtvDate[month-1][k];}4 设计结果与分析本程序经过设计并成功的调试了万年历系统的程序并且满足了万年历系统应该有的功能,例如:通过本程序的applet运行界面来查找一整年某月的农历和阳历,某一年某一月的日历,并且还是实现了重大节日的查询功能。
这样一来能更快的查询我们所需要的信息,程序调试结果如下图所示。
图6 万年历调试结果在设计此程序时,即使会满足我们设计的要求但同时也存在小缺陷:(1)此万年历的功能不够强大,调试后只能显示一些重大的节日而不能所有的节日都显示出来。
(2)设计这个万年历系统还有一个很大的遗憾就是没能添加二十四节气,这是美中不足的地方。
(3)万年历本应能查询一万年的日历,但在此程序中只是能查询一百多年的日历。
5 小结在这次课程设计中,主要是运用Java语言来编写,并可运用其他的技术。
在我的系统中,还采用了Swing控件、输入输出流等技术,而这些知识都是我们没有学过的,这就要求我们去查阅相关书籍。
正因为这样,才锻炼了我的自学能力,为以后的学习打下了基础。
此外,我还深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
万年历系统程序的设计成功会让快节奏的社会上的感到方便,因为现在的社会离不开时间。
他们只需要呆在家里就可以清楚的知道某一天的日期。
并且对人们的工作也有所帮助,方便他们查询某年某月的资料以及制作报表。
因此,我认为万年历在今后的发展空间很大,如果包装成简易软件会有很高的利用价值,我们可以随时随地查阅。
致谢在这次JAVA高级语言课程设计中,我的老师和同学给了我及大的帮助。
特别是我的指导老师兼授课教师陈磊老师,在此,我对他们表示感谢。
感谢他们在我面对困难时给了我帮助和支持,,也感谢那些给我帮助的所有同学。
参考文献[1] 牛晓太.Java程序设计教程[M],北京:清华大学出版社,2013.[2] 朱福喜,傅建明.JAVA项目设计与开发范例[M],北京:电子工业出版社,2005.[3] 刘宝林.JAVA程序设计与案例[M].北京:高等教育出版社,2006.[5] Walter Savitch. Java完美编程[M]. 清华大学出版社.第三版[6] Philip Heller. 零起点Java应用编程[M]. 电子工业出版社[7] Deitlel. Java大学英语教程[M]. 电子工业出版社[9] 汪晓平. 精通Java网络编程[M]. 清华大学出版社. 2005[10] 孙一平,陈立. Java网络编程实例[M]. 清华大学出版社. 2004[11] 袁海燕,王文涛. Java实用程序设计[M]. 人民邮电出版社. 2005[12] 郑阿奇. Java实用教程[M]. 电子工业出版社. 2006[13] 罗依. Java Swing[M]. 清华大学出版社. 2006[14] 王涛,刘继光. Java2 API大全[M]. 电子工业出版社附录1:源程序public class MainCal extends JFrame implements ActionListener {private JLabel datas[][] = new JLabel[6][7];ddMouseListener(newList_MouseListener());}}return panel;}public void clear_Data() {etText("");if (j == 0 || j == 6)elsedatas[i][j].setForeground(null);}}public void initializtion_Data(Calendar calendar) {etText(day_str);}labelabendexOf("</font>"));String message = "<html><body><center>公元"年"月"日";.getSelectedItem().toString()) - 1, Integer.parseInt(day));Lunar lunar = new Lunar(calendar);message += "<br><font color=red>"message += " " +constellation(calendar)+ "</font><br>农历";月日";}}public void mouseExited(MouseEvent e) {yearCyl3:农历年与1864的相差数monCyl4:从1900年1月31日以来,闰月数* dayCyl5:与1900年1月31日相差的天数,再加40** @param cal* @return*/public Lunar(Calendar cal) {int monCyl;int leapMonth = 0;Date baseDate = null;try {年1月31日");} catch (ParseException e) {}// 求出和1900年1月31日相差的天数monCyl = 14;// 用offset减去每农历年的天数// 计算当天是农历第几天// i最终结果是农历的年份// offset是当年的第几天int iYear, daysOfYear = 0;for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) {daysOfYear = yearDays(iYear);offset -= daysOfYear;monCyl += 12;}if (offset < 0) {offset += daysOfYear;iYear--;monCyl -= 12;}// 农历年份year = iYear;leapMonth = leapMonth(iYear); // 闰哪个月,1-12leap = false;// 用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天int iMonth, daysOfMonth = 0;for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) {// 闰月if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) {--iMonth;leap = true;daysOfMonth = leapDays(year);} elsedaysOfMonth = monthDays(year, iMonth);offset -= daysOfMonth;// 解除闰月if (leap && iMonth == (leapMonth + 1))leap = false;if (!leap)monCyl++;}// offset为0时,并且刚才计算的月份是闰月,要校正if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { if (leap) {leap = false;} else {leap = true;--iMonth;--monCyl;}}// offset小于0时,也要校正if (offset < 0) {offset += daysOfMonth;--iMonth;--monCyl;}month = iMonth;day = offset + 1;public static String getChinaDayString(int day) {String chineseTen[] = { "初", "十", "廿", "卅" };int n = day % 10 == 0 9 : day % 10 - 1;if (day > 30)return "";if (day == 10)return "初十";elsereturn chineseTen[day / 10] + chineseNumber[n];}public String toString() {return /* cyclical() + "年" + */(leap "闰" : "")+ chineseNumber[month - 1] + "月" + getChinaDayString(day); }public String numeric_md() {// 返回阿拉伯数字的阴历日期String temp_day;String temp_mon;temp_mon = month < 10 "0" + month : "" + month;temp_day = day < 10 "0" + day : "" + day;return temp_mon + temp_day;}public String get_month() {// 返回阴历的月份return chineseNumber[month - 1];}public String get_date() {// 返回阴历的天return getChinaDayString(day);}public String get_Big_Or_Small() {// 返回的月份的大或小return Big_Or_Small[month - 1];}/*** This class is use to show current time,can auto refresh**/public class CurrTimeLabel extends JLabel{private static final long serialVersionUID = 1L;/*** Define a second*/private final static int ONE_SECOND=1000;/*** Timer Object,use to refresh label's text*/Timer timer=new Timer(ONE_SECOND,new ActionListener(){ public void actionPerformed(ActionEvent evt){setCurrTimeToText();}});/*** Constructor* @param strText*/public CurrTimeLabel(String strText){super(strText);}/*** Set current time to label's text**/private void setCurrTimeToText(){宋体}/*** Get current time,format is yyyy/MM/dd HH:mm:ss* @return current time String*/private String getCurrTime(){SimpleDateFormat fromatter=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");return strCurrTime;}}。