java万年历课程报告

时间:2024.5.4

Java程序设计

课程设计报告

设计题目:电子日历设计

班级:

学号:

姓名:

--目录--

一 需求分析. 2

二 概要设计. 3

三 详细设计. 3

四 程序代码. 9

五 运行结果. 16

六 设计总结. 17

一 需求分析

对于万年历系统,其主要功能是:查看当日日期(年、月、日)、查看当时时间、查看其他年月的月历。主要使用流程是:查看万年历系统,查看其他月份或年份日历,选中其他日期查看,查看当日日期。主要功能的用例描述如下:

1.查看万年历

(1)、进入万年历系统;

(2)、系统获取当日日期并设置日历为当月,黑框选中当日日期;

2.查询当月其他年份

改变年份的方法是选择年份。

(1)、点击选择年份的下拉菜单,选择年份;

(2)、系统获取已选择的年份;

(3)、系统设置为已选年份当月的月历并显示在界面显示。

3.查询当年的其他月份

改变月份的方法是选择月份。

(1)、点击选择月份的下拉菜单,选择年份;

(2)、系统获取已选择的月份;

(3)、系统设置已选月份为当年的月历并在界面显示。

4.选择其他日期查看

(1)、点击其他日期;

(2)、系统对所有日期的label进行监听,判断点击的那个label;

(3)、返回被点击的label的数组下标;

(4)、对该下标的label设置蓝色边框,表示选中。

二 概要设计

(1)可以通过图形界面显示日历。

(2)能以月历形式显示日期与星期。   

(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。

三 详细设计

1.总天数的算法:

首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。     

2.输出月份第一天为星期几的算法:

使总天数除以7取余加2得几既为星期几,若是7,则为星期日。 

3.算出输出月份第一天为星期几的算法:

算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。 

4.输出年份介于1970-2100

5.显示系统时间。

6.功能实现

7.关键技术

(1)界面的绘制与显示

public class CalendarSample extends JFrame implements

ActionListener,ItemListener{

  int width,height;

  static int year=1990, month=1;

  JButton jl1,jl2;

  JLabel endfield;

  JPanel jp;

  Choice chyear;

  JTable table;

  Object tab[][];

  CalendarBean ca;

  String[] a;

  Object name[]={"日","一","二","三","四","五","六"};

  public static void main(String[] args) {

     new CalendarSample();  

  }

  public CalendarSample(){

     jp=new JPanel();

     ca= new CalendarBean();

    

     year=ca.getYear();

     month=ca.getMonth();

     jl1=new JButton("上月");   

     jl2=new JButton("下月");

     chyear=new Choice();

     for(int i=1970;i<2100;i++){

         chyear.add(String.valueOf(i));

     }

     tab=new Object[6][7];      

     jl1.addActionListener(this);

     jl1.setActionCommand("left");

     jl2.addActionListener(this);

     jl2.setActionCommand("right");

     chyear.addItemListener(this);

     chyear.setName("c1");

     endfield= new JLabel(""+year+"年

"+month+"月",JLabel.CENTER);

     update();

    

     jp.add(jl1);

     jp.add(jl2);

     jp.add(new JScrollPane(table),BorderLayout.CENTER);

     this.add(chyear,BorderLayout.NORTH);

     this.add(jp,BorderLayout.CENTER);

     this.add(endfield,BorderLayout.SOUTH);

     width=500;

     height=210;

     this.setTitle("日历");

     this.setResizable(false);

     this.setSize(width, height);

     Dimension screenSize = Toolkit.getDefaultToolkit

().getScreenSize();

     this.setLocation((screenSize.width-width)/2,

(screenSize.height-height)/2);

     this.setVisible(true);

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     validate();

  }

  public void actionPerformed(ActionEvent e) {

     if(e.getActionCommand().equals("left")){

         if(month==1){

             year-=1;

             month=12;

         }else{

             month--;

         }      

     }else if(e.getActionCommand().equals("right")){

         if(month==12){

             year+=1;

             month=1;

         }else{

             month++;

         }

     }

     update();

     validate();

  }

  public void itemStateChanged(ItemEvent e) {

     Choice tmp = (Choice) e.getSource();

     if(tmp.getName().equals("c1")){

         year= Integer.parseInt((String) e.getItem());

     }

     update();

     validate();

  }

  public void update(){

     ca.setYear(year);

     ca.setMonth(month);

     endfield.setText(""+year+"年 "+month+"月");

     chyear.select(String.valueOf(year));

     int n=0;

     a = ca.getCalendar();

     for(int i=0;i<6;i++){

         for(int j=0;j<7;j++){

             if(!(""+a[n]).equals(""+null)){

                 tab[i][j]=""+a[n]; 

             }else{tab[i][j]="";}

             n++;

         }

     }

     table=new JTable(tab,name);

     getContentPane().removeAll();

     this.add(chyear,BorderLayout.NORTH);

     this.add(jp,BorderLayout.CENTER);

     this.add(endfield,BorderLayout.SOUTH);

     validate();

    

  }

}

(2)根据月份判断每个月的天数以及判断是否为闰年来判断2月的天数

public int getDaysOfMonth(int year, int Month)   //显示所选月份的天数

    {

     if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12)

        {

            return 31;

        }

        if(Month == 4 || Month == 6 || Month == 9 || Month == 11)

        {

            return 30;

        }

        if(year%4 == 0 && year%100 != 0 || year%400 == 0)//闰年

        {

            return 29;

        }

        else

        {

            return 28;

        }

    }

四 程序代码

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.util.Calendar;

import java.util.Date;

public class CalendarSample extends JFrame implements

ActionListener,ItemListener{

       int width,height;

       static int year=1990, month=1;

       JButton jl1,jl2;

       JLabel endfield;

       JPanel jp;

       Choice chyear;

       JTable table;

       Object tab[][];

       CalendarBean ca;

       String[] a;

       Object name[]={"日","一","二","三","四","五","六"};

       public static void main(String[] args) {

              new CalendarSample(); 

       }

       public CalendarSample(){

              jp=new JPanel();

              ca= new CalendarBean();

             

              year=ca.getYear();

              month=ca.getMonth();

              jl1=new JButton("上月");    

              jl2=new JButton("下月");

              chyear=new Choice();

              for(int i=1970;i<2100;i++){

                     chyear.add(String.valueOf(i));

              }

              tab=new Object[6][7];         

              jl1.addActionListener(this);

              jl1.setActionCommand("left");

              jl2.addActionListener(this);

              jl2.setActionCommand("right");

              chyear.addItemListener(this);

              chyear.setName("c1");

              endfield= new JLabel(""+year+"年

"+month+"月",JLabel.CENTER);

              update();

             

              jp.add(jl1);

              jp.add(jl2);

              jp.add(new JScrollPane(table),BorderLayout.CENTER);

              this.add(chyear,BorderLayout.NORTH);

              this.add(jp,BorderLayout.CENTER);

              this.add(endfield,BorderLayout.SOUTH);

              width=500;

              height=210;

              this.setTitle("日历");

              this.setResizable(false);

              this.setSize(width, height);

              Dimension screenSize = Toolkit.getDefaultToolkit

().getScreenSize();

              this.setLocation((screenSize.width-width)/2,

(screenSize.height-height)/2);

              this.setVisible(true);

              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

              validate();

       }

       public void actionPerformed(ActionEvent e) {

              if(e.getActionCommand().equals("left")){

                     if(month==1){

                            year-=1;

                            month=12;

                     }else{

                            month--;

                     }           

              }else if(e.getActionCommand().equals("right")){

                     if(month==12){

                            year+=1;

                            month=1;

                     }else{

                            month++;

                     }

              }

              update();

              validate();

       }

       public void itemStateChanged(ItemEvent e) {

              Choice tmp = (Choice) e.getSource();

              if(tmp.getName().equals("c1")){

                     year= Integer.parseInt((String) e.getItem());

              }

              update();

              validate();

       }

       public void update(){

              ca.setYear(year);

              ca.setMonth(month);

              endfield.setText(""+year+"年 "+month+"月");

              chyear.select(String.valueOf(year));

              int n=0;

              a = ca.getCalendar();

              for(int i=0;i<6;i++){

                     for(int j=0;j<7;j++){

                            if(!(""+a[n]).equals(""+null)){

                                   tab[i][j]=""+a[n];  

                            }else{tab[i][j]="";}

                            n++;

                     }

              }

              table=new JTable(tab,name);

              getContentPane().removeAll();

              this.add(chyear,BorderLayout.NORTH);

              this.add(jp,BorderLayout.CENTER);

              this.add(endfield,BorderLayout.SOUTH);

              validate();

             

       }

}

class CalendarBean {

        String day[];

        Calendar kalendar;

        int year = 1990, month = 1;

        {

               kalendar = Calendar.getInstance();

               kalendar.setTime(new Date());

               month = kalendar.get(Calendar.MONTH)+1;

               year = kalendar.get(Calendar.YEAR);

        }

        public void setYear(int year) {

         this.year = year;

        }

        public int getYear() {

         return year;

        }

        public void setMonth(int month) {

         this.month = month;

        }

        public int getMonth() {

         return month;

        }

        public String[] getCalendar() {

         String a[] = new String[42];

        

         kalendar.set(year, month - 1, 1);

         int week = kalendar.get(Calendar.DAY_OF_WEEK) - 1;

         int day = 0;

         if (month == 1 || month == 3 || month == 5 || month == 7 || month

== 8 || month == 10 || month == 12) {

          day = 31;

         }

         if (month == 4 || month == 6 || month == 9 || month == 11) {

          day = 30;

         }

         if (month == 2) {

          if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))

          {

           day = 29;

          } else {

           day = 28;

          }

         }

         for (int i = week, n = 1; i < week + day; i++) {

          a[i] = String.valueOf(n);

          n++;

         }

         return a;

        }

       }

class Look extends JDialog implements ItemListener{

       Choice skin;

      

       public Look(){

              skin=new Choice();

              skin.add("");

              skin.add("");

              skin.add("");

              skin.addItemListener(this);

              this.add(skin);

             

              this.setSize(200, 150);

              Dimension screenSize = Toolkit.getDefaultToolkit

().getScreenSize();

              this.setLocation((screenSize.width-200)/2,

(screenSize.height-150)/2);

              this.setVisible(true);

              this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

              validate();

       }

       public void itemStateChanged(ItemEvent arg0) {

              // TODO Auto-generated method stub

             

       }

      

}

五 运行结果

1.在下拉列表中选择20##年,选择12月30日后点击查看情况:

2.选择20##年12月30日后点击上月按钮查看情况:

3. 选择20##年12月30日后点击下月按钮查看情况:

六 设计总结

1 Java 语言是解释执行的高级编程语言,是面向对象的程序设计语言,功能强大,它是解释执行的,能跨平台使用,具有较高的性能和高度的安全性。经过了一个学期对《Java程序设计》的学习,我们学习了理论知识,了解了Java语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。

2经过这次课程设计使我对JAVA图形用户界面的有关知识有了更深入了解,如几种布局管理器的使用方法,事件的处理机制,SWING的基本体系结构,SWING组件的使用方法,多媒体的实现手段等知识。完成了简单的万年历功能。

3本次课程设计的主要内容就是设计一个可以查询日期的程序,通过选择下拉列表中的年份以及月份来实现日期的查询,及按键改变年月通过它可以查询到日期的一些具体信息,可以查询所选日期是星期几,还对星期六与星期日有特殊颜色的标记,方便查看。此外,还可以实现显示数字时间的功能,简单实用。

4通过课程设计,能够达到全面、深入理解和掌握所学内容,能够进行简单的分析和判断。此次课程设计一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。是对自己学习的一次很好的检验。能完成这次的课程设计,和身边的同学和老师的帮助分不开的。在此对指导老师表示感谢,还有帮助过我的一些同学,在此也表示谢意。在今后的学习中我也会更加努力的。

更多相关推荐:
用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告学习中心点泾阳学习中心专业计算机科学与技术层次专升本姓名批次112目录一设计分析11需求分析12功能设计13概要设计131程序设计思路132程序运行界面2二程序结构3三各模...

java 万年历课程设计报告

西安科技大学程序设计综合实训课程设计报告题目:万年历班级:学号:姓名:20XX年12月1.1选题目的及意义11.绪论1.1选题目的及意义选题目的:本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我…

java万年历课程设计实训报告

成绩本科专业实训报告课题名称java万年历设计院系专业信息工程学院通信工程专业学号姓名0967119xx4李少华指导教师赵建峰完成日期四报告正文一简介1选题依据本次课程设计为自选题思考一段时间后我决定做一个万年...

Java万年历课程设计报告

杭州师范大学钱江学院课程设计题目学院专业班级姓名指导教师万年历钱江学院信电分院计算机科学与技术计算机1101崔伊平王李冬20xx年9月20日目录一概述1二总体方案设计2三详细设计3四最终输出7五课程设计总结8参...

java万年历设计报告

1JAVA大作业2目录作业要求3项目概述3具体功能介绍4设计与实现43作业要求编写一个万年历程序要求能够查询历史时间能够添加查看删除备忘录项目概述这个项目是一个简单的Java万年历可以实现所有年份的公历日期的查...

Java版万年历设计报告及流程图

Java课程设计题目万年历班级计本0901班姓名秘密学号20xx08111053指导教师韩瑞峰要求功能要求可两人对下用鼠标操作判断胜负界面要求美观简洁有简单操作说明设计方案界面设计界面主要由两部分组成查询输入部...

java课程设计程序设计报告万年历

XXX学院学生课程设计论文题目万年历学生姓名XXX学号所在院系数学与计算机学院专业网络工程班级20xx级指导教师职称讲师20xx年12月30日XXX学院本科学生课程设计任务书注任务书由指导教师填写课程设计论文指...

java课程设计报告之万年历程序

徐州工业职业技术学院目录前言21需求分析211需求分析212功能设计22概要设计221程序设计思路222程序运行界面323流程图33各模块的功能及程序说明431初始化组件432初始化数据433绘制程序界面54测...

java课程设计程序设计报告万年历

攀枝花学院攀枝花学院学生课程设计论文题目JAVA程序设计万年历学生姓名啊用学号20xx20xx007所在院系计算机学院专业信心安全技术班级20xx级指导教师吴建碧职称老师20xx1212攀枝花学院教务处制第1页...

万年历课程设计报告

西安文理学院软件学院课程设计报告设计名称设计题目万年历学生学号1402110147专业班级软件工程一班学生姓名罗强强学生成绩指导教师职称课题工作时间20xx1115至20xx1129软件学院课程设计任务书指导教...

电子万年历课程设计报告

课程创新与综合课程设计电子与电气工程系实践教学环节说明书题目名称电子万年历院系电子与电气工程学院专业电子信息工程班级学号1109635010学生姓名11指导教师q1起止日期13周周一14周周五1电子万年历一设计...

万年历课程设计报告

面向对象课程设计题目系部专业班级学号学生姓名指导教师编写日期第一章需求分析3第二章概要设计4第三章详细设计与编码6第四章调试分析11第五章用户使用说明13第六章设计心得14第一章需求分析如今的社会是一个信息的时...

java万年历实验报告(16篇)