java课程设计 万年历 源代码
用java实现简单的万年历输出的代码
package clock;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class Lunar {private int year;private int month;private int day;private boolean leap;final static String chineseNumber[] = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"};static SimpleDateFormat chineseDateFormat = new SimpleDateFormat("yyyy年MM月dd 日");final static long[] lunarInfo = new long[]{0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520,0x0dd45,0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0};//====== 传回农历y年的总天数final private static int yearDays(int y) {int i, sum = 348;for (i = 0x8000; i > 0x8; i >>= 1) {if ((lunarInfo[y - 1900] & i) != 0) sum += 1;}return (sum + leapDays(y));}//====== 传回农历y年闰月的天数final private static int leapDays(int y) {if (leapMonth(y) != 0) {if ((lunarInfo[y - 1900] & 0x10000) != 0)return 30;elsereturn 29;} elsereturn 0;}//====== 传回农历y年闰哪个月1-12 , 没闰传回0final private static int leapMonth(int y) {return (int) (lunarInfo[y - 1900] & 0xf);}//====== 传回农历y年m月的总天数final private static int monthDays(int y, int m) {if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)return 29;elsereturn 30;}//====== 传回农历y年的生肖final public String animalsYear() {final String[] Animals = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"};return Animals[(year - 4) % 12];}//====== 传入月日的offset 传回干支, 0=甲子final private static String cyclicalm(int num) {final String[] Gan = new String[]{"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};final String[] Zhi = new String[]{"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};return (Gan[num % 10] + Zhi[num % 12]);}//====== 传入offset 传回干支, 0=甲子final public String cyclical() {int num = year - 1900 + 36;return (cyclicalm(num));}/** *//*** 传出y年m月d日对应的农历.* yearCyl3:农历年与1864的相差数?* monCyl4:从1900年1月31日以来,闰月数* dayCyl5:与1900年1月31日相差的天数,再加40 ?* @param cal* @return*/public Lunar(Calendar cal) {@SuppressWarnings("unused") int yearCyl, monCyl, dayCyl;int leapMonth = 0;Date baseDate = null;try {baseDate = chineseDateFormat.parse("1900年1月31日");} catch (ParseException e) {e.printStackTrace(); //To change body of catch statement use Options | File Templates.}//求出和1900年1月31日相差的天数int offset = (int) ((cal.getTime().getTime() - baseDate.getTime()) / 86400000L);dayCyl = offset + 40;monCyl = 14;//用offset减去每农历年的天数// 计算当天是农历第几天//i最终结果是农历的年份//offset是当年的第几天In用java实现简单的万年历输出的代码(2009-12-14 19:08:55)转载标签:分类:计算机类itimport java.util.Scanner;public class Zuizhong{public static void main(String[] args){Scanner input=new Scanner(System.in);System.out.println("--------------------------欢迎使用万年历程序----------------------"); System.out.print("请输入年份:");int year=input.nextInt();System.out.print("\n请输入月份:");int month=input.nextInt();//打印换行符System.out.println();//计算1900年1月1日到指定年份前一年的天数int totalDays=0;//判断是否是1900后的年份if(year>=1900){for(int i=1900;i<year;i++){//判断是否闰年,闰年加366天,否则加365天if((i%4==0 && i%100!=0)||(i%400==0))totalDays+=366;else totalDays+=365;}//计算指定年份1月到指定月份1号之间的天数int daysOfMonth=0;int days;for(int i=1;i<month;i++){switch(i){case 2:if((year%4==0 && year%100!=0)|| year%400==0) days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default:days=31;}daysOfMonth+=days;}//获得指定年月的天数switch(month){case 2:if((year%4==0 && year%100!=0)|| year%400==0) days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default:days=31;}//1900.1.1到指定年月1号之间的总天数totalDays+=daysOfMonth;//计算指定年月1号的星期数int firstDay=(totalDays)%7+1;//上一行算出的星期数是1到7,因此要转换成0-6,即星期日=0if(firstDay==7)firstDay=0;//显示月历System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");//打印1号之前的空格for(int i=0;i<firstDay;i++)System.out.print("\t");//打印月历for(int i=1;i<=days;i++){System.out.print(i+"\t");//如果是星期六,换行if((i-1)%7+firstDay==6)System.out.println();}}else if(year>0&&year<1900){for(int i=1899;i>year;i--){//判断是否闰年,闰年加366天,否则加365天if((i%4==0 && i%100!=0)||(i%400==0))totalDays+=366;else totalDays+=365;}//计算指定年份12月到指定月份31号之后的天数int daysOfMonth=0;int days;for(int i=12;i>=month;i--){switch(i){case 2:if((year%4==0 && year%100!=0)|| year%400==0) days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default:days=31;}daysOfMonth+=days;}//获得指定年月的天数switch(month){case 2:if((year%4==0 && year%100!=0)|| year%400==0) days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default:days=31;}//1900.1.1到指定年月1号之间的总天数totalDays+=daysOfMonth;//计算指定年月1号的星期数int firstDay=8-(totalDays)%7;//上一行算出的星期数是1到7,因此要转换成0-6,即星期日=0if(firstDay==7)firstDay=0;if(firstDay==8)firstDay=1;//显示月历System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");//打印1号之前的空格for(int i=0;i<firstDay;i++)System.out.print("\t");//打印月历for(int i=1;i<=days;i++){System.out.print(i+"\t");//如果是星期六,换行if((i-1)%7+firstDay==6)System.out.println();}}System.out.println("\n程序结束");}}(完)在myeclipse运行效果图:--------------------------欢迎使用万年历程序---------------------- 请输入年份:2009请输入月份:12星期日星期一星期二星期三星期四星期五星期六1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31程序结束。
JAVA课程设计 万年历 源代码
测试用例设计:根据 需求文档和功能描述, 设计出能够覆盖所有 功能的测试用例
测试工具:使用JUnit 等测试框架进行单元 测试,使用Selenium 等工具进行UI测试
测试结果分析:根 据测试结果,分析 代码存在的问题, 并进行修改和优化
集成测试:验证各个模块之间的接口是否正确,数据传输是否正常 性能测试:测试系统的响应时间、吞吐量、资源利用率等性能指标
提醒功能:用户可以设置提醒功能,在节日或假期到来之前,系统会自动提醒用户。
删除事件:用户可以删除不 再需要的事件
编辑事件:用户可以对已添加 的事件进行编辑,如修改事件 名称、时间等
添加事件:用户可以在万年历 中添加新的事件,如生日、纪 念日等
查询事件:用户可以查询特定 日期或时间段内的事件,如查
界面显示:万年历界面将显示年、 月、日、星期等信息,用户可以通 过点击相应的按钮来切换日期。
添加标题
添加标题
添加标题
添加标题
系统响应:当用户输入日期后,系统 将根据输入的日期显示相应的万年历 信息,包括年、月、日、星期等信息。
用户操作:用户可以通过点击相应 的按钮来切换日期,系统将根据用 户的操作显示相应的万年历信息。
添加标题
界面设计:简洁明了,易于阅读
添加标题
添加标题
交互性:用户可以选择查看不同日 期的日历信息
功能描述:在万年历中,用户可以选择标注节日和假期,以便于查看和提醒。
节日标注:用户可以在万年历中设置自己喜欢的节日,如春节、中秋节等,系统会自动 标注这些节日。
假期标注:用户可以在万年历中设置自己的假期,如年假、病假等,系统会自动标注这 些假期。
,a click to unlimited possibilities
java课程设计报告之万年历程序设计报告(1)
目录前言 (2)1需求分析 (2)1.1需求分析 (2)1.2功能设计 (2)2.概要设计 (2)2.1程序设计思路 (2)2.2程序运行界面 (3)2.3流程图 (4)3.各模块的功能及程序说明 (4)3.1.初始化组件 (4)3.2.初始化数据 (5)3.3.绘制程序界面 (5)4.测试分析 (7)5.源程序清单 (9)6.课程设计体会 (17)参考文献 (17)前言Java的前身是Oak,它一开始只是被应用于消费性电子产品中。
后来它的开发者们发现它还可以被用于更大范围的Internet上。
1995年,Java语言的名字从Oak编程了Java。
1997年J2SE1.1发布。
1998年J2SE1.2发布,标志Java2的诞生。
十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。
Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。
它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。
Java 支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。
Java 的平台标准有Java ME,Java SE和Java EE。
Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。
目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。
其中Java Development Kit 简称JDK是大多开发工具的基础。
以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
1需求分析1.1需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。
1.2功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。
java编写万年历(1900年以后)
int year=in.nextInt();
System.out.println("请输入你想查询的月份:");
int month=in.nextInt();
int sum=0;
for(int i=1900;i<year;i++){
}
for(int i=1;i<=day1;i++,wekday++){
System.out.print(i+"\t");
if((wekday+1)%7==0){
System.out.println();
}
}
}
}
if((i%4==0&&i%100!=0)||i%400==0){
sum+=366;
}else {
sum+=365;
}
}
for(int i=1;i<month;i++){
if(i==2){
if((year%4==0&&year%100!=0)||year%400==0){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day1=31;
break;
case 4:
case 6:
case 9:
case 11:
day1=30;
break;
万年历-Java实现
万年历2.40.1 源程序import java.util.Scanner;public class PrintCalendar7 {public static void main(String[] args) {System.out.println("******************欢迎使用万年历******************");Scanner input = new Scanner(System.in);System.out.print("\n请选择年份: ");int year = input.nextInt();System.out.print("\n请选择月份: ");int month = input.nextInt();System.out.println();int days = 0; // 存储当月的天数boolean isRn;/* 判断是否是闰年 */if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0) { // 判断是否为闰年isRn = true; // 闰年} else {isRn = false;// 平年}if(isRn){System.out.println(year + "\t闰年");} else {System.out.println(year + "\t平年");}/* 计算该月的天数 */switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;if (isRn) {days = 29;} else {days = 28;}break;default:days = 30;break;}System.out.println(month + "\t共" + days + "天");/* 计算输入的年份之前的天数 */int totalDays = 0;for (int i = 1900; i < year; i++) {/* 判断闰年或平年,并进行天数累加 */if (i % 4 == 0 && !(i % 100 == 0) || i % 400 == 0) { // 判断是否为闰年totalDays = totalDays + 366; // 闰年366天} else {totalDays = totalDays + 365; // 平年365天}}System.out.println("输入年份距离1900年1月1日的天数:"+ totalDays);/* 计算输入月份之前的天数 */int beforeDays = 0;for (int i = 1; i <= month; i++) {switch (i) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 2:if (isRn) {days = 29;} else {days = 28;break;default:days = 30;break;}if (i < month) {beforeDays = beforeDays + days;}}totalDays = totalDays + beforeDays; // 距离1900年1月1日的天数System.out.println("输入月份距离1900年1月1日的天数:"+ totalDays);System.out.println("当前月份的天数:" + days);/* 计算星期几 */int firstDayOfMonth; // 存储当月第一天是星期几:星期日为0,星期一~星期六为1~6int temp = 1 + totalDays % 7; // 从1900年1月1日推算if (temp == 7) { // 求当月第一天firstDayOfMonth = 0; // 周日} else {firstDayOfMonth = temp;}System.out.println("该月第一天是: " + firstDayOfMonth);/* 输出日历 */System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t 星期六");for (int nullNo = 0; nullNo < firstDayOfMonth; nullNo++) { System.out.print("\t"); // 输出空格}for (int i = 1; i <= days; i++) {System.out.print(i + "\t");if ((totalDays + i - 1) % 7 == 5) { // 如果当天为周六,输出换行System.out.println();}}}}2.40.2 运行结果:******************欢迎使用万年历******************请选择年份: 2008请选择月份: 62008 闰年6 共30天输入月份距离1900年1月1日的天数:39598当前月份的天数:30该月第一天是: 0星期日星期一星期二星期三星期四星期五星期六1 2 3 4 5 6 78 9 10 11 12 13 1415 16 17 18 19 20 2122 23 24 25 26 27 2829 302.40.3 源程序揭秘2.40.3.1 源程序介绍:该程序是一个和日期相关非常紧密的程序,主要判断某年是否是闰年,某月总共有多少天,该月距离公元纪年的天数,该月第一天是星期几,最后打印该月的日历。
java万年历源代码
java万年历源代码第一个类:chaxun.javapackage wannianli;import java.util.*;public class chaxun {public static void main(String[] args) {Scanner input =new Scanner(System.in);String answer="y";for(;answer.equals("y");){week cn=new week();cn.weekDay();//调用方法System.out.print("\是否继续?");answer=input.next();}}}第二个类:tianshu.javapackage wannianli;import java.util.*;public class tianshu {int totalDay;//总共的天数int yueTian;//每月的天数public void jsts(){int days=0;//输入月份到当年的天数System.out.println("*************************************欢迎使用万年历*************************************");Scanner input=new Scanner(System.in);System.out.print("请输入年份:");//从键盘输入年份int year=input.nextInt();System.out.print("请输入月份:");//从键盘输入月份int yue=input.nextInt();/**判断每月的天数*/for(int index=1;index<=yue;index++){if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==1 2){//满足闰年的条件yueTian=31;}elseif(yue==2&&((year%4==0)&&(!(year%100==0))||(year%400== 0))){yueTian=29;}elseif(yue==2&&(!((year%4==0)&&(!(year%100==0))||(year%400= =0)))){yueTian=28;}else if(yue==4||yue==6||yue==9||yue==11){yueTian=30;}else{System.out.print("输入的月份不正确");}if(index<=yue){days=days+yueTian;}}/**判断是否是闰年*/for(int i=100;i<year;i++){< bdsfid="116" p=""></year;i++){<>if ((year%4==0)&&(!(year%100==0))||(year%400==0)){//满足闰年的条件totalDay=totalDay+366;}else{totalDay=totalDay+365;}}totalDay=totalDay+days;//System.out.println(totalDay+"天");//return totalDay+yueTian;}}第三个类:week.jvapackage wannianli;public class week {public void weekDay() {int monDay;//星期几tianshu cn=new tianshu();cn.jsts();int week=1+cn.totalDay%7;//System.out.println(""+week);if (week==7){// 求当月第一天monDay=0;// 周日}else{monDay=week;}/* 输出日历*/System.out.println("星期日\星期一\星期二\星期三\星期四\星期五\星期六");for(int nullNo=0;nullNo<monday;nullno++){< bdsfid="145"p=""></monday;nullno++){<>System.out.print("\");// 输出空格}for(int i=1;i<=cn.yueTian;i++){System.out.print(i+"\");//输出每月的号数if((cn.totalDay + i - 1) % 7 == 5){// 如果当天为周六,输出换行System.out.println();}}} }。
java课程设计基于java的万年历设计与实现(附源代码)贯
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)确定当前纪元中的指定年份是否为闰年。
Java超级万年历课程设计
(1) ClockAction类
作用:获取当前下拉列表中所选择的信息
实现的接口:ActionListener
ActionListener用于接收操作事件的侦听器接口。使用该类创建的对象可使用组件的addActionListener方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed方法。ActionEvent指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件生成此高级别事件。事件被传递给每一个ActionListener对象,这些对象是使用组件的addActionListener方法注册的,用以接收这类事件。
2.2概要设计
本程序涉及三个类,MainFrame为显示日期部分的类,是程序中的主类,ClockAction
是对所要查询的年份及其月份进行选择的类,Clock是对当前时间进行显示的类,位与整个界面的底部,程序运行时,只要运行MainFrame即可显示出日期以及时间的详细信息。以下是对这三个类的具体说明。
//得到当前所选年份
c_year = Integer.parseInt(com1.getSelectedItem().toString());
//得到当前月份,并减1,计算机中的月为0-11
c_month = Integer.parseInt(com2.getSelectedItem().toString())-1;
2.设计方案论证
2.1需求分析
本次课程设计是编写一个万年历程序,主要目的是加强对Java的实际运用,了解图形用户界面的基本组件窗口、按纽(JButton)、标签(JLabel)、下拉表组件(JComboBox)、文本框(TextBox)、选择框、查询事件的处理,菜单的设计还有日期的计算等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java的事件处理机制。
JAVA《万年历系统》课程设计报告附源码
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运行界面来查找一整年某月的农历和阳历,可以查找用户所想了解的某一天具体为星期几,并且可以看到一些重大节日的具体时间。
要求:满足设计万年历系统的目的,即当用户查询年份与月份时,系统就要将这一年的某一月份的阴历与阳历全部显示出来,并且附带这一月份的重大节日。
当用户随意改动年份或月份时系统自动显示与星期对应的日期。
万年历java课程设计报告
万年历 Java 课程设计报告1. 引言本文档是关于一个用 Java 编写的万年历应用程序的课程设计报告。
该应用程序可以通过输入年份和月份来打印出对应的日历。
2. 设计目的本次课程设计的主要目的是让学生运用所学的 Java 编程知识,熟悉并掌握面向对象编程的基本概念,并且能够将这些知识应用到实际的项目中。
3. 设计思路3.1 输入验证用户输入的年份和月份需要进行验证,确保其合法性。
在程序中,我们使用Scanner类来获取用户输入,并通过一系列的条件判断语句来验证输入的年份和月份是否在合理范围内。
3.2 闰年判断万年历中,2 月有时为 28 天,有时为 29 天,这取决于年份是否为闰年。
我们可以通过以下规则判断某一年是否为闰年:•若该年份能被 4 整除但不能被 100 整除,或者能被 400 整除,则该年份是闰年;•否则,该年份不是闰年。
根据这个规则,我们可以在程序中编写一个方法来判断某一年是否为闰年。
3.3 日历打印通过输入的年份和月份,我们可以计算出该月份的第一天是星期几,并据此来确定日历的布局。
在程序中,我们可以使用java.util.Calendar类来获取日期相关信息。
接下来,我们可以按照日历的布局,使用循环语句逐行打印出日历。
对于非当前月份的日期,我们可以用空格来进行占位处理。
4. 程序实现下面是一个简化版的代码示例,用于展示万年历应用程序的实现:import java.util.Calendar;import java.util.Scanner;public class CalendarApp {public static void main(String[] args) {// 获取用户输入的年份和月份Scanner scanner = new Scanner(System.in);System.out.print("请输入年份:");int year = scanner.nextInt();System.out.print("请输入月份:");int month = scanner.nextInt();// 验证输入的年份和月份是否合法if (year < 0 || month < 1 || month > 12) {System.out.println("输入的年份或月份不合法!");return;}// 创建 Calendar 对象并设置日期Calendar calendar = Calendar.getInstance();calendar.set(year, month - 1, 1);// 获取该月份的天数int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MON TH);// 获取该月份的第一天是星期几int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);// 打印日历System.out.println("日\t一\t二\t三\t四\t五\t六");for (int i = 1; i < firstDayOfWeek - 1; i++) {System.out.print(" \t");}for (int day = 1; day <= daysInMonth; day++) {System.out.print(day + "\t");if ((firstDayOfWeek + day - 1) % 7 == 0) {System.out.println();}}}}5. 测试与运行使用以上代码,我们可以编译并运行该 Java 应用程序。
java编写的万年历
System.exit(0);
}
});
setTitle("万年历 06专升本一班 06303103 冯占魁");
setSize(550,450); //////////////////////////////////////////////////定义万年历方框的大小为550*450
p1.add(textfield); /////////////////////////////////////////////////输入年份
p1.add(lmonth);
p1.add(Month);
Month.add("一月");
Month.add("二月");
Month.add("三月");
days[6].setLabel("Sat");
if ( myday>0)
{
int blank= myday;
for( ;blank>0;blank--,count++)
{
days[count].setLabel("");
}
}
for(int i=1;i<=mytotdays; i++,count++)
Year.add("1900");
Year.addItemListener(new myLis(this));
for(int i=0;i<49;i++)
{
days[i]=new Button("");
java万年历源代码(可运行)
private JScrollPane sp = new JScrollPane(table);
private JButton bLastYear = new JButton("上一年");
p3.add(jsp, BorderLayout.CENTER);
p3.add(p2, BorderLayout.SOUTH);
p3.add(ld, BorderLayout.NORTH);
private JTextArea jta = new JTextArea(); //jta--JTextArea
private JScrollPane jsp = new JScrollPane(jta);
private JLabel l = new JLabel("年份文本框中可直接键入要查找的年份,以提高查询效率");
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//import java.sql.Date;
cld.set(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1])-1, 0);
showCalendar(Integer.parseInt(strDate[0]), Integer.parseInt(strDate[1]), cld);
java万年历源代码
package wannianli;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;//import java.sql.Date;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.Icon;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class wannianli extends JFrame implements ActionListener, MouseListener{private Calendar cld = Calendar.getInstance();private String [] astr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};private DefaultTableModel dtm = new DefaultTableModel(null,astr);private JTable table = new JTable(dtm); //装日期的表格private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton("上一年");private JButton bNextYear = new JButton("下一年");private JButton bLastMonth = new JButton("上月");private JButton bNextMonth = new JButton("下月");private JTextField jtfYear = new JTextField(5);//jtfYear年份显示和输入文本框,允许编辑单行文本private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框private JPanel p1 = new JPanel(); //装入控制日期按钮的模块private JPanel p2 = new JPanel();private JPanel p3 = new JPanel(new BorderLayout());private JPanel p4 = new JPanel(new GridLayout(2,1));private JPanel p5 = new JPanel(new BorderLayout());private JButton bAdd = new JButton("保存日志");private JButton bDel = new JButton("删除日志");private JTextArea jta = new JTextArea(); //JTextArea 是一个显示纯文本的多行区域private JScrollPane jsp = new JScrollPane(jta); //管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口private JLabel l = new JLabel("小提示:可直接输入年份,提高查询效率!");private JLabel lt = new JLabel();//系统时间private JLabel ld = new JLabel();//日期是否被选择private int lastTime;JMenuBar jmb = new JMenuBar();JMenu view;public wannianli(){super("万年历"); //框架命名view = new JMenu("关于");JMenuItem banben = new JMenuItem("版本说明");banben.addActionListener(new banben_actionAdapter(this));view.add(banben);jmb.add(view);this.setJMenuBar(jmb);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数this.getContentPane().setLayout(new BorderLayout(10,0));jta.setLineWrap(true);//获取文本区的换行策略。
简单的java万年历代码
private Calendar a; //日历功能
private GridLayout MyGridLayout = new GridLayout(2, 1, 0, 5); //设计容器
private JPanel row1 = new JPanel();
private JPanel row2 = new JPanel();
private JTextField JTMonth=new JTextField(10); //月份显示文本框
private JTextField JTYear=new JTextField(10); //年份显示文本框
private JButton JBAddYear=new JButton(">>"); //增加年份按钮
private JLabel[] numbers = new JLabel[42];
//private JLabel MyJLabel1=new JLabel("设计:王 时间:2014年12月");
private JLabel MyJLabel2=new JLabel("日 一 二 三 四 五 六");
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
s = Integer.toString(MyYear); // 将年份转换为字符串类型
java万年历程序代码
package pack;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Calendar;import java.util.Date;public class rili extends JFrame implements ActionListener { JButton b_today, b_query;JLabel lb_Year, lb_Month;JButton b_week[] = new JButton[7];JButton b_day[][] = new JButton[6][7];Container thisContainer;JPanel pUp;JPanel pCenter;JPanel pCenter_week, pCenter_day;JComboBox year, month;public void init() {b_today = new JButton("Today");b_query = new JButton("Query");setTitle("日历");lb_Year = new JLabel("Year");lb_Month = new JLabel("Month");year = new JComboBox();month = new JComboBox();setDate();pUp = new JPanel();pUp.add(lb_Year);pUp.add(year);pUp.add(lb_Month);pUp.add(month);pUp.add(b_today);pUp.add(b_query);b_today.addActionListener(this);b_query.addActionListener(this);pCenter = new JPanel();pCenter_week = new JPanel();b_week[0] = new JButton("星期日");b_week[1] = new JButton("星期一");b_week[2] = new JButton("星期二");b_week[3] = new JButton("星期三");b_week[4] = new JButton("星期四");b_week[5] = new JButton("星期五");b_week[6] = new JButton("星期六");b_week[0].setSize(400, 200);b_week[1].setSize(400, 200);b_week[2].setSize(400, 200);b_week[3].setSize(400, 200);b_week[4].setSize(400, 200);b_week[5].setSize(400, 200);b_week[6].setSize(400, 200);for (int i = 0; i < 7; i++) {b_week[i].setEnabled(false);pCenter_week.add(b_week[i]);}pCenter_day = new JPanel();for (int cols = 0; cols < 6; cols++) {for (int rows = 0; rows < 7; rows++) {b_day[cols][rows] = new JButton("");b_day[cols][rows].setSize(400, 200);this.pCenter_day.add(b_day[cols][rows]);}}pCenter_day.setLayout(new GridLayout(6, 7));setDay(Integer.parseInt(this.year.getSelectedItem().toString()),Integer.parseInt(this.month.getSelectedItem().toString()));// setDay(2011,2);pCenter.setLayout(new BorderLayout());pCenter.add(pCenter_week, "North");pCenter.add(pCenter_day, "Center");thisContainer = this.getContentPane();thisContainer.setLayout(new BorderLayout());thisContainer.add(pUp, "North");thisContainer.add(pCenter, "Center");this.setVisible(true);this.setResizable(false);this.pack();}public void setDate() {int year, month, day, week;Calendar cal = Calendar.getInstance();year = cal.get(Calendar.YEAR);month = cal.get(Calendar.MONTH);day = cal.get(Calendar.DA TE);week = cal.get(Calendar.WEEK_OF_YEAR);int year_temp = year - 4;for (int i = 0; i < 10; i++) {this.year.addItem(year_temp);year_temp += 1;}this.year.setSelectedIndex(4);for (int n = 0; n < 12; n++) {this.month.addItem(n + 1);}this.month.setSelectedIndex(month);}public void setDay(int Year, int Month) {int count;Calendar c = Calendar.getInstance();c.clear();c.set(Year, Month-1, 1);count = c.getActualMaximum(Calendar.DAY_OF_MONTH); // 总天数System.out.print(count);int day = c.get(Calendar.DAY_OF_WEEK) - 1; // 0为星期天,6为星期六System.out.print(day);int i = 1 - day;for (int cols = 0; cols < 6; cols++) {for (int rows = 0; rows < 7; rows++) {String st = String.valueOf(i);b_day[cols][rows].setText(st);b_day[cols][rows].setEnabled(false);if (i > 0 && i <= count)b_day[cols][rows].setVisible(true);elseb_day[cols][rows].setVisible(false);i++;}}}public void actionPerformed(ActionEvent e) {if (e.getSource() == b_query) {this.setDay(Integer.parseInt(this.year.getSelectedItem().toString()), Integer.parseInt(this.month.getSelectedItem().toString()));}if (e.getSource() == b_today) {int year, month;Calendar cal = Calendar.getInstance();year = cal.get(Calendar.YEAR);month = cal.get(Calendar.MONTH)+1;this.setDay(year,month);}}public static void main(String[] args) {rili rl = new rili();rl.init();}}。
程序设计课程设计万年历源代码
附录二程序源代码#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();}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北科技学院课程设计报告面向对象程序设计(Java)班级: 电商B09-3 姓名: 周婷玉设计题目:__________万年历________________ 设计时间: 2011-12-28 至2012-01-06指导教师:_______ 郭慧____________ _____ 评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:___________评阅教师:_____________课程设计说明书1、课程设计的目的a)掌握面向对象程序设计基本要素(封装、继承、多态)b)掌握JA VA语言常用类包及其常用方法和JA VA语言基本语法c)掌握基于AWT的图形用户界面设计i.常用标准控件的使用,如标签、按钮、菜单、文本框、单选按钮、滚动条等。
ii.事件处理机制d)掌握布局、对话框的使用e)掌握发布JA VA应用程序2、功能模块简介和系统结构图需求分析:本程序的要求为:1.使用图形用户界面2.能够实现日期与星期的查询3.实现当日的时间备忘功能设计:1.能以月历形式显示日期与星期2.支持用户自己输入年份,并提供月份的下拉形式来选择查询3.添加当日行事历,储存与清除功能3、主要源程序及代码黄色突出显示今日日期选择一月五日,添加事件:今天我们放假啦!!!点击存储。
查询1991年选择9月点击查询代码实现:import java.io.*;//引入相关物件import java.util.*;import ng.Thread;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;import boBoxModel;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JDesktopPane;import javax.swing.JLabel;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.JScrollPane;import javax.swing.WindowConstants;import javax.swing.border.BevelBorder;import javax.swing.border.LineBorder;import javax.swing.border.SoftBevelBorder;public class NewJFrame extends javax.swing.JFrame //建立一视窗物件{private JDesktopPane jDesktopPane1;//相关物件宣告private JDesktopPane jDesktopPane2;private JButton jButton1;private JButton jButton2;private JLabel jLabel2;private JLabel jLabel4;private JLabel jLabel3;private JLabel jLabel5;private JLabel jLabel6;private JLabel jLabel7;private JLabel jLabel8;private JComboBox jComboBox1;private JTextField jTextField1;private JButton jButton3;private JTextArea jTextArea1;private JLabel jLabel1;public static void main(String[] args) throws IOException//主程式开始{NewJFrame inst = new NewJFrame();inst.setVisible(true);}//主程式結束public NewJFrame()//建立视窗开始{super();initGUI();//呼叫GUI函數}//建立视窗結束public int[] getdate()//取得系统日期函数开始{int[] date_array = new int[3];Calendar ca = new GregorianCalendar();date_array[0] = ca.get(Calendar.YEAR);//年date_array[1] = ca.get(Calendar.MONTH)+1;//月date_array[2] = ca.get(Calendar.DAY_OF_MONTH);//日return date_array;//回傳自訂日期陣列}//取得系統日期函數結束public void new_btn()//重新产生日期按钮函数开始{jTextArea1.setText("");//清空记事int year,month;year = Integer.parseInt(jLabel5.getText().substring(0,4));//設定為已選擇的年month = Integer.parseInt(jLabel5.getText().substring(7,9));//設定為已選擇的月date_btn_create(year,month);//呼叫產生日期按鈕函數}//重新產生日期按鈕函數結束public void date_btn_create(int year,int month)//產生日期按鈕{int y=0,x=0,x_add=0,y_add=0,week_add=0,date_acc=0,week_of_day=0;String syear,smonth,sday,filename;syear = String.valueOf(year);smonth = String.valueOf(month);if (smonth.length() == 1)//若小於10月(一位數)就在前面加0smonth = "0"+smonth;jDesktopPane1.remove(jDesktopPane2);//移除桌面2(日期按鈕附著,也就是把日期按鈕移除) jDesktopPane2 = new JDesktopPane();//產生一個新的桌面jDesktopPane1.add(jDesktopPane2);jDesktopPane2.setBounds(0, 30, 252, 196);//設定大小及位置jDesktopPane2.setBackground(new java.awt.Color(148,205,176));//設定顏色switch(month)//設定月份天數{case 1://大月31天case 3:case 5:case 7:case 8:case 10:case 12:date_acc = 31;break;case 4://小月30天case 6:case 9:case 11:date_acc = 30;break;case 2:if (leap_year(year))date_acc = 29;elsedate_acc = 28;}week_of_day = dow(year,month,1);//呼叫星期函數(取得當月第一天為星期幾)switch(week_of_day)//設定當月1日位置(像素){case 0:week_add = 0;break;case 1:week_add = 34;break;case 2:week_add = 68;break;case 3:week_add = 102;break;case 4:week_add = 136;break;case 5:week_add = 170;break;case 6:week_add = 204;break;}JButton btn[] = new JButton[date_acc];//建立日期按鈕陣列for (int i=0;i<date_acc;i++)//建立日期按鈕陣列回圈{btn[i] = new JButton();//建立對應日期按鈕jDesktopPane2.add(btn[i]);//加到桌面2上btn[i].setText(String.valueOf(i+1));//設定按鈕文字為日期if ((i-week_of_day>0 && (i+week_of_day)%7==0) || ((i+week_of_day)%7==0 && i != 0)){//設定當月第一天日期按鈕位置x=0;//X軸座標x_add=0;//下一個按鈕座標(X軸)加值y++;//Y軸座標y_add+=10;//換行座標(Y軸)加值week_add=0;//當月第一日按鈕座標加值}//下面設定按鈕大小及加值(X為起始10+第幾個按鈕*橫向寬度25+間隔+當月第一天星期幾加值)btn[i].setBounds(10+x*25+x_add+week_add, y*20+y_add, 25, 20);//(Y為第幾個按鈕*高度20+換行加值)按鈕寬為25高為20btn[i].setFont(new java.awt.Font("Arial",1,12));//設定字體大小及樣式btn[i].setBorder(BorderFactory.createT itledBorder(""));//設定按鈕文字不自動調整大小int[] now = new int[3];now = getdate();//取得當天日期if (year == now[0] && month == now[1] && i+1 == now[2])btn[i].setBackground(new java.awt.Color(233,238,164));//若為當天則設定按鈕為黃色elsebtn[i].setBackground(new java.awt.Color(148,205,176));//若不是當天則設定按鈕為綠色sday = String.valueOf(i+1);filename = syear+smonth+sday;//記事檔案名稱(年+月+日.txt)File file=new File(filename+".txt");//建立檔案物件if (file.exists())//若當天有記事檔案則設定按鈕字體顏色為藍色btn[i].setForeground(new java.awt.Color(0,0,255));btn[i].addActionListener(new ActionListener() {//設定按鈕監聽(觸發事件函數)public void actionPerformed(ActionEvent evt) {btnActionPerformed(evt);}});x++;//下一個按鈕X座標加權x_add+=9;//下一個按鈕間隔X座標加權}}public boolean leap_year(int year)//判斷閏年函數開始{boolean leap_year;//4的倍數,若為100的倍數則必須為4的倍數才是閏年if (year%4 == 0){if (year%100 == 0){if (year%400 == 0)leap_year = true;elseleap_year = false;}elseleap_year = true;}elseleap_year = false;return leap_year;}//判斷閏年函數結束public int dow(int y,int m,int d)//判斷星期幾{int[] ww={6, 2, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};//天文星體運行值int w;w=ww[m-1]+y+(y/4)-(y/100)+(y/400);//閏年設定if( ((y%4)==0) && (m<3) )//公式{w--;if((y%100)==0) w++;if((y%400)==0) w--;}return (w+d)%7;//回傳星期幾(0為星期日,1為星期一以此類推)}private void initGUI()//產生視覺化物件函數(Graph User Interface,圖形化使用者介面){try{setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//設定外框視窗主要功能列為標準(縮到最小,放到最大,關閉){this.setT itle("万年行事历");//設定視窗抬頭jDesktopPane1 = new JDesktopPane();//建立一桌面getContentPane().add(jDesktopPane1, BorderLayout.CENTER);jDesktopPane1.setPreferredSize(new java.awt.Dimension(464, 267));//設定桌面大小jDesktopPane1.setBackground(new java.awt.Color(148,205,176));//設定桌面顏色{//建立桌面2開始(放日期按鈕的桌面)jDesktopPane2 = new JDesktopPane();jDesktopPane1.add(jDesktopPane2);jDesktopPane2.setBounds(0, 30, 252, 196);jDesktopPane2.setBackground(new java.awt.Color(148,205,176));}//建立桌面2結束{//建立星期日標籤開始jLabel1 = new JLabel();jDesktopPane1.add(jLabel1);jLabel1.setText("Sun");jLabel1.setBounds(14, 7, 21, 21);jLabel1.setFont(new java.awt.Font("Arial",0,11));jLabel1.setForeground(new java.awt.Color(255,0,0));}//建立星期日標籤結束{//建立記事框開始jTextArea1 = new JTextArea(252, 35);jDesktopPane1.add(jTextArea1);jTextArea1.setText("");//預設內容清空jTextArea1.setBounds(252, 42, 175, 182);//設定大小jTextArea1.setFont(new java.awt.Font("新細明體",0,11));//設定字體樣式大小jTextArea1.setLineWrap(true);//文字過長自動換行jTextArea1.setWrapStyleWord(true);//文字過長自動換行JScrollPane scrollPane = new JScrollPane(jTextArea1,JScrollPane.VERTICAL_SCROLLBAR_ALWA YS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWA YS);jDesktopPane1.add(scrollPane);//上面為建立scorollpane(視窗旁邊的移動棒);將記事框建立在scrollpane上scrollPane.setBounds(252, 42, 175, 182);//設定大小及位置}//建立記事框結束{//建立清除按鈕開始jButton1 = new JButton();jDesktopPane1.add(jButton1);jButton1.setText("清除");jButton1.setBounds(252, 231, 63, 21);jButton1.setFont(new java.awt.Font("新細明體",0,11));jButton1.setBorder(BorderFactory.createT itledBorder(""));jButton1.addActionListener(new ActionListener() {//設定清除按鈕監聽函數public void actionPerformed(ActionEvent evt) {jButton1ActionPerformed(evt);}});}//建立清除按鈕結束{//建立儲存按鈕開始jButton2 = new JButton();jDesktopPane1.add(jButton2);jButton2.setText("储存");jButton2.setBounds(364, 231, 63, 21);jButton2.setFont(new java.awt.Font("新細明體",0,11));jButton2.setBorder(BorderFactory.createT itledBorder(""));jButton2.addActionListener(new ActionListener() {//設定儲存按鈕監聽函數public void actionPerformed(ActionEvent evt) {jButton2ActionPerformed(evt);}});}//建立儲存按鈕結束{//建立星期一~星期六標籤開始jLabel2 = new JLabel();jDesktopPane1.add(jLabel2);jLabel2.setText("Mon Tue Wed Thu Fri Sat");jLabel2.setBounds(49, 7, 189, 21);jLabel2.setFont(new java.awt.Font("Arial",0,11));}//建立星期一~星期六標籤結束{//建立查詢年份輸入框開始jTextField1 = new JTextField();jDesktopPane1.add(jTextField1);jTextField1.setText("");jTextField1.setBounds(14, 231, 63, 21);jTextField1.setFont(new java.awt.Font("Arial",0,12));}//建立查詢年份輸入框結束{//建立狀態標籤開始jLabel6 = new JLabel();jDesktopPane1.add(jLabel6);jLabel6.setText("TEST");jLabel6.setBounds(357, 7, 70, 21);jLabel6.setFont(new java.awt.Font("新細明體",0,11));jLabel6.setForeground(new java.awt.Color(0,0,255));}//建立狀態標籤開始{//建立隱藏日期按鈕暫存標籤開始jLabel7 = new JLabel();jDesktopPane1.add(jLabel7);jLabel7.setText("");jLabel7.setBounds(0, 0, 0, 0);//設定大小為0}//建立隱藏日期按鈕暫存標籤結束{//建立目前選擇日期標籤開始jLabel8 = new JLabel();jDesktopPane1.add(jLabel8);jLabel8.setText("目前无选择日期");jLabel8.setBounds(252, 28, 175, 14);jLabel8.setFont(new java.awt.Font("新細明體",0,11));}//建立目前選擇日期標籤結束{//建立月份下拉選單開始ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" });//內容設定1~12 jComboBox1 = new JComboBox();jDesktopPane1.add(jComboBox1);jComboBox1.setModel(jComboBox1Model);jComboBox1.setBounds(105, 231, 40, 21);jComboBox1.setFont(new java.awt.Font("Arial",0,11));}//建立月份下拉選單結束{//建立"月"標籤開始jLabel3 = new JLabel();jDesktopPane1.add(jLabel3);jLabel3.setText("月");jLabel3.setBounds(155, 231, 14, 21);jLabel3.setFont(new java.awt.Font("新細明體",0,12));}//建立"月"標籤結束{//建立"年"標籤開始jLabel4 = new JLabel();jDesktopPane1.add(jLabel4);jLabel4.setText("年");jLabel4.setFont(new java.awt.Font("新細明體", 0, 12));jLabel4.setBounds(84, 231, 14, 21);}//建立"年"標籤結束{//建立查詢按鈕開始jButton3 = new JButton();jDesktopPane1.add(jButton3);jButton3.setText("查询");jButton3.setBounds(180, 231, 35, 21);jButton3.setBorder(BorderFactory.createT itledBorder(""));jButton3.setFont(new java.awt.Font("新細明體",0,11));jButton3.addActionListener(new ActionListener() {//查詢按鈕監聽函數public void actionPerformed(ActionEvent evt) {jButton3ActionPerformed(evt);}});}//建立查詢按鈕結束{//建立目前年月位置標籤開始int[] now = new int[3];now = getdate();//預設為當年當月String year5,smonth;year5 = String.valueOf(now[0]);smonth = String.valueOf(now[1]);if (smonth.length() == 1)smonth = "0"+smonth;jLabel5 = new JLabel();jDesktopPane1.add(jLabel5);jLabel5.setText(year5+" 年"+smonth+" 月");jLabel5.setBounds(252, 7, 120, 21);jLabel5.setForeground(new java.awt.Color(255,255,255));//設定字體為白色}//建立目前年月位置標籤結束{//預設為當年當月日期按鈕產生開始int[] now = new int[3];now = getdate();date_btn_create(now[0],now[1]);//產生日期按鈕}//預設為當年當月日期按鈕產生結束}pack();this.setSize(444, 296);} catch (Exception e) {//例外處理e.printStackTrace();}}private void jButton1ActionPerformed(ActionEvent evt)//清除按鈕按下觸發事件{jTextArea1.setText("");//清除記事內容String year,month,day,filename,insert_str;year = jLabel5.getText().substring(0,4);month = jLabel5.getText().substring(7,9);day = jLabel7.getText();filename = year+month+day;File file=new File(filename+".txt");//刪除當日記事檔案file.delete();new_btn();//重新產生按鈕jLabel6.setText("行事曆已清除");//設定相關訊息jLabel7.setText("");jLabel8.setText("目前無選擇日期");}private void jButton2ActionPerformed(ActionEvent evt)//儲存按鈕按下觸發事件開始{String year,month,day,filename,insert_str;year = jLabel5.getText().substring(0,4);month = jLabel5.getText().substring(7,9);day = jLabel7.getText();filename = year+month+day;insert_str = jTextArea1.getText();//記事內容if (insert_str.length() != 0 && day.length() != 0)//若記事框內有文字且有選擇日期則儲存記事檔案{try{FileWriter fw=new FileWriter(filename+".txt");//啟用檔案寫入BufferedWriter bfw=new BufferedWriter(fw);//啟用緩衝區寫入bfw.write(insert_str); //將Textarea內容寫入緩衝區裡bfw.flush();//將緩衝區資料寫到檔案fw.close();//關閉檔案jLabel6.setText("行事历已记录");//設定相關訊息jLabel7.setText("");jLabel8.setText("目前无选择日期");new_btn();}catch(IOException e){e.printStackTrace();}}else//若無記事內容或無選擇日期{if (day.length() == 0)jLabel6.setText("日期未選擇");//設定相關訊息elsejLabel6.setText("行事曆無內容");}}//儲存按鈕按下觸發事件結束private void jButton3ActionPerformed(ActionEvent evt)//查詢按鈕按下觸發事件開始{String syear,smonth;try{jTextArea1.setText("");jLabel6.setText("查詢日期");syear = jTextField1.getText();smonth = String.valueOf(jComboBox1.getSelectedIndex() + 1);if (smonth.length() == 1)smonth = "0"+smonth;if (syear == "" || Integer.parseInt(syear)<1582)//若未輸入年份就觸發例外(1582年以前曾經改曆過,結果會不準確){int[] now = new int[3];now = getdate();syear = String.valueOf(now[0]);//若選擇年份小於1582年則預設為當年jLabel6.setText("請選1582以上");}jLabel5.setText(syear+" 年"+smonth+" 月");date_btn_create(Integer.parseInt(syear),Integer.parseInt(smonth));jLabel7.setText("");jLabel8.setText("目前無選擇日期");}catch(NumberFormatException e)//例外處理設定為當年及選擇的月份{int[] now = new int[3];now = getdate();syear = String.valueOf(now[0]);smonth = String.valueOf(jComboBox1.getSelectedIndex() + 1);if (smonth.length() == 1)smonth = "0"+smonth;jLabel5.setText(syear+" 年"+smonth+" 月");jLabel6.setText("請選1582以上");date_btn_create(Integer.parseInt(syear),Integer.parseInt(smonth));jLabel7.setText("");jLabel8.setText("目前無選擇日期");}}//查詢按鈕按下觸發事件結束private void btnActionPerformed(ActionEvent evt)//日期按鈕按下觸發事件開始{jTextArea1.setText("");String year,month,btn_date,filename,read_str;year = jLabel5.getText().substring(0,4);//取得年month = jLabel5.getText().substring(7,9);//取得月btn_date = evt.getActionCommand();//取得按下按鈕文字(日)filename = year+month+btn_date;jLabel7.setText(btn_date);try{FileReader fr = new FileReader(filename+".txt");//讀取選擇日期記事檔案BufferedReader bfr = new BufferedReader(fr);//將檔案讀到緩衝區boolean flag=false;//旗標while((read_str = bfr.readLine())!=null) // 每次讀取一行,直到檔案結束{if (flag)//從第二行開始每一行第一個位置加入斷行jTextArea1.append("\n");jTextArea1.append(read_str);//加入該行訊息flag=true;}jLabel6.setText("当天记事");jLabel8.setText("已选择"+year+"年"+month+"月"+btn_date+"日");fr.close();}catch(FileNotFoundException e)//如果沒有指定的記事檔案就印出當日無行事曆(例外處理) {jLabel6.setText("当日无行事历");jLabel8.setText("已选择"+year+"年"+month+"月"+btn_date+"日");}catch(IOException e)//例外處理{e.printStackTrace();}}//日期按鈕按下觸發事件結束}4、程序总结该程序能够很好的实现万年历的功能,包括选择年份,月份。