万年历程序全版.docx
《万年历程序全版.docx》由会员分享,可在线阅读,更多相关《万年历程序全版.docx(12页珍藏版)》请在冰豆网上搜索。
万年历程序全版
《万年历程序系统》的设计与实现
一、系统分析
1.1系统概述
本系统主要讲述如何利用JCreatorPro和SQLServer等工具完成万年历程序的开发,它主要为日期的查询,该系统除了可以实现现在的日期的查询之外,还可以实现对过去和未来年份日期的查询。
!
1.2系统运行环境
●操作系统:
WindowsXP/Server2003
●开发语言:
JAVA
●开发工具:
JCreatorPro
1.3功能需求描述
经过对万年历的程序编写和运行操作,最终我们确定该系统主要完成了以下这些功能:
1.日历、事件的分层次日程管理的方式便于用户更好的安排个人事务;
2.能够很方便的关注事情\任务录入,且可以通过快捷键直接调出;
3.可以很好的满足用户随时关注事件、任务的需求,同时在您关注其他工作的时候,它可以缩小到可忽略不计的程度;
二、总体设计
2.1功能图
万年历
月
日
年
闰年
双日
平年
单日
大月
小月
图2.1万年历框架图
2.2日历设计
日历
月
日
年
星期
图2.2日历设计框架图
三、系统实现
3.1主界面包括
图3.1
图3.2
3.2程序编写代码
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.ItemEvent;
importjava.awt.event.ItemListener;
importjava.util.Date;
importjava.util.GregorianCalendar;
importjavax.swing.JButton;
importjavax.swing.JComboBox;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
publicclassCalender2extendsJFrameimplementsActionListener,ItemListener{
/**
*实现简单的日历功能
*
*@authorJadieversion1.02009/12/29
*
*/
privatestaticfinallongserialVersionUID=1L;
publicstaticvoidmain(Stringargs[]){
try{
Calender2frame=newCalender2();
frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
privateDatedate=newDate();
privateGregorianCalendargregorianCalendar=newGregorianCalendar();
privateString[]stringWeek=newString[]{"SUN","MON","TUE","WED",
"THU","FRI","SAT"};
privateString[]stringWeekCn=newString[]{"星期天","星期一","星期二","星期三",
"星期四","星期五","星期六"};
privateString[]stringMonth=newString[]{"Jan","Feb","Mar","Apr",
"May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
privateString[]strSysTime=newString[6];
//存储当前日期信息
privateString[]strSysNowTime=newString[6];
//存储运行时日期信息
privateJButton[]buttonDay=newJButton[42];
privateJButton[]buttonWeek=newJButton[7];
privateJLabellabelMonth=newJLabel();
privateJButtonbuttonToday=newJButton();
privateJButtonbuttonLastMonth=newJButton();
privateJButtonbuttonNextMonth=newJButton();
privateJComboBoxcomboYear=newJComboBox();
privateJComboBoxcomboMonth=newJComboBox();
publicCalender2(){
super("万年历---揭德华制作2010-01-02");
getContentPane().setLayout(newGridLayout(8,7,3,5));
setBounds(250,200,530,360);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
comboYear.setForeground(newColor(0,0,255));
comboYear.setFont(newFont("",Font.PLAIN,14));
for(inty=1900;y<2101;y++){
comboYear.addItem(""+newInteger(y).toString());
}
getContentPane().add(comboYear);
comboYear.addItemListener(this);
finalJLabellabelYear=newJLabel();
labelYear.setForeground(Color.RED);
labelYear.setFont(newFont("新宋体",Font.PLAIN,14));
getContentPane().add(labelYear);
labelYear.setText("年");
comboMonth.setForeground(newColor(0,0,255));
comboMonth.setFont(newFont("",Font.PLAIN,14));
for(intm=1;m<13;m++){
comboMonth.addItem(""+newInteger(m).toString());
}
getContentPane().add(comboMonth);
comboMonth.addItemListener(this);
getContentPane().add(labelMonth);
labelMonth.setForeground(Color.BLUE);
labelMonth.setFont(newFont("新宋体",Font.PLAIN,14));
labelMonth.setText("月");
getContentPane().add(buttonLastMonth);
buttonLastMonth.setForeground(Color.BLUE);
buttonLastMonth.setFont(newFont("新宋体",Font.PLAIN,14));
buttonLastMonth.setText("上月");
buttonLastMonth.addActionListener(this);
getContentPane().add(buttonToday);
buttonToday.setForeground(Color.BLUE);
buttonToday.setFont(newFont("新宋体",Font.PLAIN,14));
buttonToday.setText("今天");
buttonToday.addActionListener(this);
getContentPane().add(buttonNextMonth);
buttonNextMonth.setForeground(Color.BLUE);
buttonNextMonth.setFont(newFont("新宋体",Font.PLAIN,14));
buttonNextMonth.setText("下月");
buttonNextMonth.addActionListener(this);
for(inti=0;i<7;i++){
buttonWeek[i]=newJButton();
if(i==0||i==6){
buttonWeek[i].setForeground(Color.RED);
}else{
buttonWeek[i].setForeground(Color.BLUE);
}
buttonWeek[i].setFont(newFont("新宋体",Font.PLAIN,12));
buttonWeek[i].setText(stringWeekCn[i]);
getContentPane().add(buttonWeek[i]);
}
for(inti=0;i<42;i++){
buttonDay[i]=newJButton();
buttonDay[i].setText("");
getContentPane().add(buttonDay[i]);
}
this.setResizable(false);
getSysNowTimeInfo();
setNowDate();
setNowDate();
}
publicvoidsetSysDate(intyear,intmonth){
//将日期设置为year年month月1日
gregorianCalendar.set(year,month,1);
}
publicvoidactionPerformed(ActionEventae){
if(ae.getSource()==buttonToday){
setNowDate();
setNowDate();
}elseif(ae.getSource()==buttonLastMonth){
setDate(-1);
}else{
setDate
(1);
}
}
publicvoiditemStateChanged(ItemEventarg0){
setDate(0);
}
publicvoidgetSysNowTimeInfo(){
//得到程序运行时的时间信息并存储在字符串数组strSysNowTime中
date=gregorianCalendar.getTime();
strSysNowTime=(date+"").split("");
}
publicvoidgetSysTimeInfo(){
//得到系统当前的时间信息并存储在字符串数组strSysTime中
date=gregorianCalendar.getTime();
strSysTime=(date+"").split("");
}
publicintgetNowMonth(){
intmonth=0;
for(inti=0;i<12;i++){
if(strSysNowTime[1].equalsIgnoreCase(stringMonth[i])){
month=i;
break;
}
}
returnmonth;
}
publicintweekStrat(StringstrWeek){
//返回字符串strWeek与星期中的第几天匹配,SUN为第一天
intstrat=0;
for(inti=0;i<7;i++){
if(strWeek.equalsIgnoreCase(stringWeek[i])){
strat=i;break;
}
}
returnstrat;
}
publicvoidsetNowDate(){
//将时间设置为程序运行时的时间
setSysTime(getNowYear(),getNowMonth());
getSysTimeInfo();
setDayNull();
getDay(getMonthDays(getNowYear(),getNowMonth()-1),getMonthDays(
getNowYear(),getNowMonth()),weekStrat(strSysTime[0]),
getNowDay());
comboYear.setSelectedIndex(getNowYear()-1900);
comboMonth.setSelectedIndex(getNowMonth());
}
publicvoidsetDate(intmove){
//将时间设置为选中的年月增加move个月之后的时间
setSysTime(getYear(),getMonth()+move);
getSysTimeInfo();
setDayNull();
getDay(getMonthDays(getYear(),getMonth()+move-1),getMonthDays(
getYear(),getMonth()+move),weekStrat(strSysTime[0]),-1);
if(move!
=0){
if(getMonth()==0&&move<0){
move=11;
comboYear.setSelectedIndex(getYear()-1901);
}elseif(getMonth()==11&&move>0){
move=-11;
comboYear.setSelectedIndex(getYear()-1899);
}else{
comboYear.setSelectedIndex(getYear()-1900);
}
comboMonth.setSelectedIndex(getMonth()+move);
}
}
publicvoidsetSysTime(intyear,intmonth){
gregorianCalendar.set(year,month,1);
}
publicintgetNowYear(){
returnInteger.parseInt(strSysNowTime[5]);}
publicintgetNowDay(){
returnInteger.parseInt(strSysNowTime[2]);
}
publicintgetYear(){
returncomboYear.getSelectedIndex()+1900;
}
publicintgetMonth(){
returncomboMonth.getSelectedIndex();
}
publicvoidsetDayNull(){
for(intd=0;d<42;d++){
buttonDay[d].setText("");
}
}
publicvoidgetDay(intlastMonDays,intmonthDays,intstartWeek,intday){
//设置日期颜色并打印
for(intd=0;dbuttonDay[d].setForeground(Color.GRAY);
buttonDay[d].setText((lastMonDays-startWeek)+d+1+"");
}
for(intd=startWeek;dif((d-startWeek+1)==day){
buttonDay[d].setForeground(Color.blue);
}elseif(d%7==0||d%7==6){
buttonDay[d].setForeground(Color.RED);
}else{
buttonDay[d].setForeground(Color.BLACK);
}
buttonDay[d].setText(d-startWeek+1+"");
}
for(intd=monthDays+startWeek;d<42;d++){
buttonDay[d].setForeground(Color.GRAY);
buttonDay[d].setText(d-(monthDays+startWeek)+1+"");
}
}
publicintgetMonthDays(intyear,intmonth){
//返回year年month月的天数
switch(month){
case3:
case5:
case8:
case10:
return30;
case1:
if(gregorianCalendar.isLeapYear(year)){
return29;
}else{
return28;
}
default:
return31;}
}
}
四、操作方法与试验结果
4.1操作方法
此方案的操作方法只要为:
1.依照万年历的功能编写程序代码。
2.程序运行之后,观察其运行效果和功能。
4.2实验结果
日历、事件的分层次日程管理的方式便于用户更好的安排个人事务。
能够很方便的关注事情\任务录入,且可以通过快捷键直接调出。
五、设计体会
通过设计万年历小程序,让我了解了很多程序方面的设计技巧和方法,主要为实现该类型程序的方法等,在编写的工程中让我了解了需要用到的代码、类、算法等。
但通过编写此程序之后让我知道了我们还是存在很多编写方面的问题和不足,比如内容字体的设置,颜色等等。
程序的设计是一个非常重要的过程,程序要想做的好,设计是最主要的,而程序的设计则需要相应的基础知识和经验,特别是对于我们这种初学者来说由为重要,所以我们要加强练习。
程序的编写也是个漫长的过程,我们需要的是耐心和细心才可以把一个程序完整的编写出来!
同时我们也得多学点编写技能和经常巩固自身知识。
多学点别人的编程技巧取长补短,努力让自己成为一个可以为社会所用的编程人员。