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

JAVA大作业目录作业要求 (3)项目概述 (3)具体功能介绍 (4)设计与实现 (4)作业要求:编写一个万年历程序,要求能够查询历史时间,能够添加、查看、删除备忘录。
项目概述这个项目是一个简单的Java万年历,可以实现所有年份的公历日期的查询,并且在相应的日期做备忘录,以及可以显示当前的日期以及时间。
使用的是Oracle数据库进行连接。
具体功能介绍:(1)万年历查询:点击图形界面中的上年、下年键用来调整要查询的年份,或者可以直接在上年下年按钮直接的文本框中输入年份(负数表示公元前),以回车结束;点击上月或者下月来调整要查询的月份,然后可以看到这个月的每一天所对应的星期。
(2)Clock功能:在万年历下面显示当前的年月日时分秒,相当于一个时钟的功能。
(3)记事本功能:可以任选某年某月的某一天,单击,在右侧会出现这一天的备忘录,如果存在,则显示某年某月某日有日志记载,是否想看,否则,则在文本框中显示无记录;然后可以编辑这一天的备忘录,编辑好了之后,点击保存日志,弹出对话框某年某月某日保存日志吗,点击保存,则日志被保存,反之未被保存;若想删除某日的日志,则单击这一天,然后点击右侧的删除日志,显示删除某年某月某日的日志吗,点击是,则日志被删除。
从文件中读取备忘录的内容,用数据库进行存储和删除操作。
设计与实现(需要附全部代码,GUI自动生成代码除外):1 类的设计(继承、多态、数据结构):核心类是Month,Year,NotePad,Clock,DBAccess,CalendarPad.(其中继承用粗体,接口用粗斜体,数据结构是哈希表,用粗下划线,多态用斜体+点点短线式下划线)2 Java IO (文件访问):用的是粗体+浪线3 JDBC (数据库访问):使用Oracle数据库连接,是直连(双下划线)数据库是:create table mynotes(mydate varchar2(50) primary key,note varchar2(100) not null);4 Socket + Multi-Thread:斜体(定义在Clock中的Thread t)5 GUI (用户界面):点下划线来表示GUI用户界面6 其他功能:(无)以下是全部代码(共六个.Java文件)//对月份的选择package javaapplication13;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Month extends Box implements ActionListener//ActionListener接口{int month;JTextField showMonth=null;JButton RMonth,NMonth;CalendarPad cal;public Month(CalendarPad c){super(BoxLayout.X_AXIS);this.cal=c;showMonth=new JTextField(2);month=c.getMonth();showMonth.setEditable(false);showMonth.setForeground(Color.blue);showMonth.setFont(new Font("TimesRomn",Font.BOLD,16));NMonth=new JButton("下月");RMonth=new JButton("上月");add(RMonth);add(showMonth);add(NMonth);RMonth.addActionListener(this);NMonth.addActionListener(this);showMonth.setText(""+month);}public void setMonth(int month){if(month<=12&&month>=1){this.month=month;}else{this.month=1;}showMonth.setText(""+month);}public int getMonth(){return month;}public void actionPerformed(ActionEvent e){if(e.getSource()==RMonth){if(month>=2){month=month-1;cal.setMonth(month);cal.setCal(cal.getYear(),month);}else if(month==1){month=12;cal.setMonth(month);cal.setCal(cal.getYear(),month);}showMonth.setText(""+month);}else if(e.getSource()==NMonth){if(month<12){month=month+1;cal.setMonth(month);cal.setCal(cal.getYear(),month);}else if(month==12){month=1;cal.setMonth(month);cal.setCal(cal.getYear(),month);}showMonth.setText(""+month);}}}//对年分的选择package javaapplication13;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Year extends Box implements ActionListener//ActionListener接口{int year;JTextField showYear=null;JButton NYear,RYear;CalendarPad cal;public Year(CalendarPad c){super(BoxLayout.X_AXIS);showYear=new JTextField(4);showYear.setForeground(Color.blue);showYear.setFont(new Font("TimesRomn",Font.BOLD,14));this.cal=c;year=cal.getYear();NYear=new JButton("下年");RYear=new JButton("上年");add(RYear);add(showYear);add(NYear);showYear.addActionListener(this);RYear.addActionListener(this);NYear.addActionListener(this);}public void setYear(int year){this.year=year;showYear.setText(""+year);}public int getYear(){return year;}public void actionPerformed(ActionEvent e){if(e.getSource()==RYear){year=year-1;showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}else if(e.getSource()==NYear){year=year+1;showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}else if(e.getSource()==showYear){try{year=Integer.parseInt(showYear.getText());showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}catch(NumberFormatException ee){showYear.setText(""+year);cal.setYear(year);cal.setCal(year,cal.getMonth());}}}}//对备忘录的操作package javaapplication13;import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.event.*;import java.io.*;public class NotePad extends JPanel implements ActionListener {JTextArea text;JButton save_log,del_log;Hashtable table;JLabel mes_label;int year,month,day;File file;CalendarPad calendar;public NotePad(CalendarPad calendar)//构造函数{this.calendar=calendar;Calendar now = Calendar.getInstance();int hour=now.get(Calendar.HOUR);int minute=now.get(Calendar.MINUTE);year=calendar.getYear();month=calendar.getMonth();day=calendar.getDay();;table=calendar.getHashtable();file=calendar.getFile();mes_label=new JLabel(""+year+"年"+month+"月"+day+"日"+" "+hour+":"+minute,JLabel.CENTER);mes_label.setFont(new Font("TimesRoman",Font.BOLD,16));mes_label.setForeground(Color.MAGENTA);text=new JTextArea(10,8);save_log=new JButton("保存日志") ;del_log=new JButton("删除日志") ;save_log.addActionListener(this);del_log.addActionListener(this);setLayout(new BorderLayout());JPanel pSouth=new JPanel();add(mes_label,BorderLayout.NORTH);pSouth.add(save_log);pSouth.add(del_log);add(pSouth,BorderLayout.SOUTH);add(new JScrollPane(text),BorderLayout.CENTER);}public void actionPerformed(ActionEvent e){if(e.getSource()==save_log){saveLog(year,month,day);}else if(e.getSource()==del_log){delLog(year,month,day);}}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 void setDay(int day){this.day=day;}public int getDay(){return day;}public void setMesLabel(int year,int month,int day){mes_label.setText(""+year+"年"+month+"月"+day+"日");}public void setText(String s){text.setText(s);}public void getLog(int year,int month,int day){String key=""+year+""+month+""+day;try{FileInputStream inOne=new FileInputStream(file);ObjectInputStream inTwo=new ObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOne.close();inTwo.close();}catch(Exception ee){}if(table.containsKey(key)){String m=""+year+"年"+month+"月"+day+"这一天有日志记载,想看吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){text.setText((String)table.get(key));}else{text.setText("");}}else{text.setText("无记录");}}public void saveLog(int year,int month,int day){String 日志内容=text.getText();String key=""+year+""+month+""+day;String m=""+year+"年"+month+"月"+day+"保存日志吗?";int ok=JOptionPane.showConfirmDialog(this,m,"询问",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);if(ok==JOptionPane.YES_OPTION){try{FileInputStream inOne=new FileInputStream(file);ObjectInputStream inTwo=new ObjectInputStream(inOne);table=(Hashtable)inTwo.readObject();inOne.close();inTwo.close();table.put(key,日志内容);FileOutputStream out=new FileOutputStream(file);ObjectOutputStream objectOut=new ObjectOutputStream(out);objectOut.writeObject(table);objectOut.close();out.close();}catch(Exception ee){}}//向数据库中添加数据。
JAVA课程设计--基于JAVA的万年历设计与实现

JAVA课程设计--基于JAVA的万年历设计与实现Java课程设计报告:万年历课程设计题目:万年历指导老师:**********学生姓名:*********专业:**********学号:*******1.课程设计目的本学期我们研究了Java语言,它是当今世界最流行的开发语言之一,具有面向对象、跨平台、分布应用等特点。
为了巩固所学知识,锻炼学生熟练应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
本次课程设计要求我们利用已学的Java知识,编辑一个电子万年历,通过自主研究和实践,将理论变成实践,将知识真正学以致用。
2.需求分析2.1 本程序要求本程序要使用图形用户界面,能够实现日期与星期查询,同时显示此时的时间。
2.2 功能设计本程序要构建万年历程序,其功能如下:1) 通过窗口形式运行,实现界面功能;2) 以月历的形式来显示日期与星期;3) 为用户提供年份与月份的下拉形式菜单,选择年份与月份;4) 同时显示查看时的时刻。
3.课程设计的基本算法在Java程序中,通过定义中英文字符数组来存储星期信息,用于转换显示。
同时,使用Date类和GregorianCalendar 类来获取日期和时间信息,实现万年历的功能。
以上是本次Java课程设计的基本内容和算法,通过此次实践,我们巩固了Java语言的基本知识,掌握了JDK、JCreator等开发工具的运用,拓宽了常用类库的应用,对Java这门课程有了更深的了解和认识。
public class DateUtil {private static final String[] stringWeekEn = {"Sun"。
"Mon"。
"Tue"。
"Wed"。
"Thu"。
"Fri"。
"Sat"};private static final String[] stringMonthEn = {"Jan"。
用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告学习中心(点):泾阳学习中心专业:计算机科学与技术层次:专升本姓名:李永固批次: 112目录一、设计分析 (1)1、需求分析 (1)2、功能设计 (1)3、概要设计 (1)3.1程序设计思路 (1)3.2程序运行界面 (2)二、程序结构 (3)三、各模块的功能及程序说明 (4)1、初始化组件 (4)2、初始化数据 (4)3、绘制程序界面 (5)四、源程序 (6)五、操作方法 (14)六、试验结果 (14)七、设计体会 (16)用Java程序编写万年历程序的设计报告一、设计分析1、需求分析本程序的要求为:1.使用图形用户界面;2.实现日期与星期的查询。
2、功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。
(2)能以月历形式显示日期与星期。
(3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。
(4)通过点击“更新”来刷新日历。
3、概要设计3.1程序设计思路1、总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。
然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。
2、输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。
3、算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。
4、如果年份小于1582年则程序不予判断。
3.2程序运行界面二、程序结构流程图:三、各模块的功能及程序说明1、初始化组件import java.applet.Applet;import java.awt.*;import java.util.*;2、初始化数据public class CalendarApplet extends Applet{static final int TOP = 70; //顶端距离static final int CELLWIDTH=50,CELLHEIGHT = 30; //单元格尺寸static final int MARGIN = 3; //边界距离static final int FEBRUARY = 1;TextField tfYear = new TextField("2004", 5); //显示年份的文本域Choice monthChoice = new Choice(); //月份选择下拉框Button btUpdate = new Button("更新"); //更新按钮GregorianCalendar calendar=new GregorianCalendar(); //日历对象Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //显示小字体Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //显示大字体String days[] = {"星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"};String months[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"};int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每个月的天数int searchMonth,searchYear; //查询的年份及月份3、绘制程序界面public void init(){setBackground(Color.white); //设置背景颜色searchMonth = calendar.get(Calendar.MONTH); //得到系统年份searchYear = calendar.get(Calendar.YEAR); //得到系统月份add(new Label(" 年:")); //增加组件到ApplettfYear.setText(String.valueOf(searchYear)); //设置文本域文字add(tfYear);add(new Label(" 月:"));monthChoice.setFont(smallFont); //设置月份选择下拉框的显示字体for (int i = 0; i < 12; i++) {monthChoice.addItem(months[i]); //增加下拉框选项}monthChoice.select(searchMonth); //设置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.getComponentCount(); //得到Applet中的组件数量for (int i=0;i<componentCount;i++){getComponent(i).setFont(smallFont); //设置所有组件的显示字体}}四、源程序import java.applet.Applet;import java.awt.*;import java.util.*;public class CalendarApplet extends Applet{static final int TOP = 70; //顶端距离static final int CELLWIDTH=50,CELLHEIGHT = 30; //单元格尺寸static final int MARGIN = 3; //边界距离static final int FEBRUARY = 1;TextField tfYear = new TextField("2004", 5); //显示年份的文本域Choice monthChoice = new Choice(); //月份选择下拉框Button btUpdate = new Button("更新"); //更新按钮GregorianCalendar calendar=new GregorianCalendar(); //日历对象Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //显示小字体Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //显示大字体String days[] = {"星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"};String months[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", "十二月"};int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每个月的天数int searchMonth,searchYear; //查询的年份及月份public void init(){setBackground(Color.white); //设置背景颜色searchMonth = calendar.get(Calendar.MONTH); //得到系统年份searchYear = calendar.get(Calendar.YEAR); //得到系统月份add(new Label(" 年:")); //增加组件到ApplettfYear.setText(String.valueOf(searchYear)); //设置文本域文字add(tfYear);add(new Label(" 月:"));monthChoice.setFont(smallFont); //设置月份选择下拉框的显示字体for (int i = 0; i < 12; i++) {monthChoice.addItem(months[i]); //增加下拉框选项}monthChoice.select(searchMonth); //设置下拉框当前选择项add(monthChoice);add(btUpdate);int componentCount=this.getComponentCount(); //得到Applet中的组件数量for (int i=0;i<componentCount;i++){getComponent(i).setFont(smallFont); //设置所有组件的显示字体}}public void paint(Graphics g){FontMetrics fontMetric; //显示字体的FontMetrics对象int fontAscent;int dayPos;int totalWidth, totalHeight; //总的宽度,高度int numRows; //行数int xNum, yNum; //水平和垂直方向单元格数量int numDays;String dayStr; //显示天数字符串int margin;g.setColor(Color.lightGray); //设置当前颜色g.setFont(bigFont); //设置当前使用字体g.drawString(searchYear+"年",60,TOP+70); //绘制字符串g.drawString((searchMonth+1)+"月",200,TOP+130);g.setColor(Color.black);g.setFont(smallFont);fontMetric = g.getFontMetrics(); //获取变量初值fontAscent = fontMetric.getAscent();dayPos = TOP + fontAscent / 2;totalWidth = 7 * CELLWIDTH; //得到总的表格宽度for (int i = 0; i < 7; i++) {g.drawString(days[i], (CELLWIDTH-fontMetric.stringWidth(days[i]))/2 + i*CELLWIDTH,dayPos-20); //绘制表格标题栏}numRows = getNumberRows(searchYear, searchMonth); //计算需要的行的数量totalHeight = numRows * CELLHEIGHT; //得到总的表格高度for (int i = 0; i <= totalWidth; i += CELLWIDTH) {g.drawLine(i, TOP , i, TOP+ totalHeight); //绘制表格线}for (int i = 0, j = TOP ; i <= numRows; i++, j += CELLHEIGHT) {g.drawLine(0, j, totalWidth, j); //绘制表格线}xNum = (getFirstDayOfMonth(searchYear, searchMonth) + 1) * CELLWIDTH - MARGIN;yNum = TOP + MARGIN + fontAscent;numDays = daysInMonth[searchMonth] + ((calendar.isLeapYear(searchYear) && (searchMonth == FEBRUARY)) ? 1 : 0);for (int day = 1; day <= numDays; day++) {dayStr = Integer.toString(day);g.drawString(dayStr, xNum - fontMetric.stringWidth(dayStr), yNum); //绘制字符串xNum += CELLWIDTH;if (xNum > totalWidth) {xNum = CELLWIDTH - MARGIN;yNum += CELLHEIGHT;}}}public boolean action(Event e, Object o){int searchYearInt;if (e.target==btUpdate){searchMonth = monthChoice.getSelectedIndex(); //得到查询月份searchYearInt = Integer.parseInt(tfYear.getText(), 10); //得到查询年份if (searchYearInt > 1581) {searchYear = searchYearInt;}repaint(); //重绘屏幕return true;}return false;}private int getNumberRows(int year, int month) { //得到行数量int firstDay;int numCells;if (year < 1582) { //年份小于1582年,则返回-1return (-1);}if ((month < 0) || (month > 11)) {return (-1);}firstDay = getFirstDayOfMonth(year, month); //计算月份的第一天if ((month == FEBRUARY) && (firstDay == 0) && !calendar.isLeapYear(year)) { return 4;}numCells = firstDay + daysInMonth[month];if ((month == FEBRUARY) && (calendar.isLeapYear(year))) {numCells++;}return ((numCells <= 35) ? 5 : 6); //返回行数}private int getFirstDayOfMonth(int year, int month) { //得到每月的第一天int firstDay;int i;if (year < 1582) { //年份小于1582年,返回-1return (-1);}if ((month < 0) || (month > 11)) { //月份数错误,返回-1return (-1);}firstDay = getFirstDayOfYear(year); //得到每年的第一天for (i = 0; i < month; i++) {firstDay += daysInMonth[i]; //计算每月的第一天}if ((month > FEBRUARY) && calendar.isLeapYear(year)) {firstDay++;}return (firstDay % 7);}private int getFirstDayOfYear(int year){ //计算每年的第一天int leapYears;int hundreds;int fourHundreds;int first;if (year < 1582) { //如果年份小于1582年return (-1); //返回-1}leapYears = (year - 1581) / 4;hundreds = (year - 1501) / 100;leapYears -= hundreds;fourHundreds = (year - 1201) / 400;leapYears += fourHundreds;first=5 + (year - 1582) + leapYears % 7; //得到每年第一天return first;}}五、操作方法1、出提示语句,并接受用户输入的年、月。
java课程设计万年历程序设计报告

java课程设计万年历程序设计报告山东科技大学信息学院JAVA程序设计学院:信息科学与工程学院班级:计算机 11-3学号: 01050230姓名:赵乐目录目录 (1)前言 (1)1需求分析 (2)2.概要设计 (3)3.各模块的功能及程序说明 (5)4.测试分析 (13)5.源程序清单 (13)6.课程设计体会 (22)前言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)经过网页形式运行,实现图形界面。
(2)能以月历形式显示日期与星期。
用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告一、引言本文档是针对使用Java程序编写万年历程序的设计报告,旨在详细介绍该程序的设计思路和实现细节。
二、需求分析1.背景介绍在现代社会中,人们经常需要查看特定日期的日历信息。
为了方便用户直观地查看任意年月的日历信息,设计一个万年历程序,可以满足用户的需求。
2.功能需求万年历程序具备以下功能:●显示指定年月的日历信息●支持用户输入任意年月●能够高亮当前日期●具备简洁易读的界面设计3.性能需求●用户界面响应迅速,无明显卡顿●日历信息准确无误,支持闰年判断三、概要设计1.系统架构万年历程序采用MVC(Model.View.Controller)架构,将数据模型、用户界面和控制逻辑分离。
模型层:负责处理日期计算和数据存储视图层:负责展示日历信息,接收用户输入控制器层:负责协调模型层和视图层的交互2.关键模块●日历模块:负责日期计算,并提供接口给视图层调用●用户界面模块:提供用户交互界面,并接收用户输入●控制器模块:负责协调日历模块和用户界面模块四、详细设计1.日历模块设计●定义日期对象:包括年、月、日等属性●实现日期计算功能:如计算指定年月的第一天是星期几,判断某年是否为闰年等●提供接口给其他模块调用:如获取指定年月的日历信息2.用户界面设计●设计主界面:包括输入年月的文本框和显示日历信息的面板●设计按钮事件:响应用户输入的年月,调用日历模块计算并显示日历信息3.控制器设计●建立模型与视图之间的联系:将用户输入传递给日历模块,并将计算后的日历信息传递给视图层进行显示五、测试计划1.单元测试●对日历模块进行单元测试,测试日期计算功能的准确性●对用户界面模块进行单元测试,测试界面的交互和显示是否正常2.集成测试●测试控制器模块与日历模块、用户界面模块之间的功能协调是否正常六、附录1.附件●无2.法律名词及注释●无。
java课程设计万年历程序设计报告

山东科技大学信息学院JAVA程序设计学院:信息科学与工程学院班级:计算机 11-3学号:0230姓名:赵乐目录目录 (1)前言 (1)1需求分析 (2)2.概要设计 (3)3.各模块的功能及程序说明 (5)4.测试分析 (13)5.源程序清单 (13)6.课程设计体会 (22)前言Java的前身是Oak,它一开始只是被应用于消费性电子产品中。
后来它的开发者们发现它还可以被用于更大范围的Internet上。
1995年,Java语言的名字从Oak编程了Java。
1997年发布。
1998年发布,标志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.使用图形用户界面;2.本程序能够实现日期与星期的查询。
功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。
(2)能以月历形式显示日期与星期。
(3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。
万年历的实训报告模板

摘要:本实训报告旨在通过对万年历的设计与应用,加深对时间管理、编程技术以及用户界面设计的理解。
通过实训,我们不仅学会了万年历的基本原理,还掌握了编程实现和用户体验优化的方法。
以下是对实训过程的详细记录和分析。
一、实训目的1. 理解万年历的基本原理和设计思路。
2. 掌握编程语言(如Python、Java等)在万年历开发中的应用。
3. 提升用户界面设计能力,优化用户体验。
4. 培养团队合作与沟通能力。
二、实训环境1. 操作系统:Windows 102. 开发工具:Python3.8、PyCharm3. 用户界面设计工具:Qt Designer4. 数据库:SQLite三、实训原理万年历是一种用于记录和显示日历的工具,它按照公历或农历的日期排列,方便用户查看和查询。
万年历的设计原理主要包括以下几个方面:1. 闰年判断:通过判断年份是否为4的倍数来确定是否为闰年,同时还需考虑能被100整除但不能被400整除的年份不是闰年。
2. 月份天数:根据月份和闰年/非闰年的判断来确定每月的天数。
3. 星期计算:根据年、月、日计算出星期几。
4. 农历转换:根据农历的算法将公历日期转换为农历日期。
四、实训过程1. 确定项目需求:根据实训要求,设计一个功能齐全、界面友好的万年历软件。
2. 设计软件架构:确定软件的模块划分,包括主界面、日期计算、农历转换等模块。
3. 编写代码实现:使用Python语言实现万年历的各个功能模块。
4. 用户界面设计:使用Qt Designer设计软件的用户界面,包括日期选择、查询结果展示等。
5. 数据库设计:使用SQLite数据库存储万年历的数据,包括日期、农历信息等。
6. 调试与优化:对软件进行调试,修复可能出现的问题,并优化用户体验。
五、实训结果1. 成功实现万年历的基本功能,包括公历和农历的日期转换、查询等。
2. 软件界面简洁美观,用户操作方便。
3. 数据库设计合理,保证了数据的完整性和安全性。
万年历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 应用程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开始算起,把第一天的星期数字减去 1 后即为此天在该序列中的序号,从此天开
始算,利用该序列的序号对 6 取余得 0 换行,即可完整的输出该月的日历。
(5)在选择项中加入 showMessageDialog 的问题:在本程序中,首先定义了
关于“版本说明”的适配器,在这个类中定义了这个选择项的 actionPerformed 方
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗 口关闭函数
this.getContentPane().setLayout(new BorderLayout(10,0));
jta.setLineWrap(true);//获取文本区的换行策略。如果设置为
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("下月");
时这一天背景黑色
table.setSelectionForeground(Color.YELLOW);//选定的日期字
体是黄色的
table.setBackground(new Color(200,255,255));//日期显 示 表
格颜色
table.setFont(new Font("黑体",Font.BOLD,24));//日期数字字
体格式
table.setRowHeight(30);//表格的高度
table.addMouseListener(this);
//鼠标监听器
jtfYear.addActionListener(this);//可输入年份的文本框 //为各个按钮添加监听函数 bAdd.addActionListener(this); bDel.addActionListener(this); bLastYear.addActionListener(this); bNextYear.addActionListener(this);
private JTextField jtfYear = new JTextField(5);//jtfYear 年份 显示和输入文本框,允许编辑单行文本
private JTextField jtfMonth = new JTextField(2);//jtfMonth 月 份显示文本框
private JPanel p1 = new JPanel();
(2)所选月份天数的算法:用 if 语句实现。一三五七八十二月份为 31 天, 四六九十一月份为 30 天,对于二月份进行闰年与非闰年的讨论。
(3)所选月份第一天为星期几的算法:使用 get(Calendar.DAY_OF_WEEK) 函数实现。
(4)输出所选月份该月日历的算法:算出所选月份第一天为星期几后,把该 日期以前的位置用空格补上,并从该日起一次输出天数直到月底。从前面的空格
2
import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel;
public class wannianli extends JFrame implements ActionListener,
//装入控制日期
按钮的模块
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());
true,则当行的长度大于所分配的宽度时,将换行。如果设置为 false,则始终
不换行。
table.setGridColor(Color.BLACK); //星期之间的网格线是
黑色的
table.setColumnSelectionAllowed(true);
table.setSelectionBackground(Color.BLACK);//当选 定某 一天
口、可选的垂直和水平滚动条以及可选的行和列标题视口
JTextArea(); //管理视
private JLabel l = new JLabel("小提示:可直接输入年份,提高查 询效率!");
private JLabel lt = new JLabel();//系统时间
3
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);
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;
MouseListener
{
private Calendar cld = Calendar.getInstance();
private String [] astr = {"星期一", "星期二", "星期三", "星期
四", "星期五", "星期六", "星期日"};
private
DefaultTableModel
成绩:
本科专业实训报告
课题名称:java万年历设计 院系专业:信息工程学院通信工程专业 学号姓名:0967119104 李少华 指导教师:赵建峰 完成日期:2012年6月 28 日星期 四
报告正文
一、简介
(1)选题依据:本次课程设计为自选题。思考一段时间后,我决定做一个万 年历的设计。主要考虑到自己 JAVA 课程基础内容掌握并不是很扎实。而而对于 设计一个万年历程序,由于其功能简单设计也相对较易,并且通过设计这样的一 个日历小组件,也能使自己对 JAVA 的一些基础知识掌握的更加牢固。
private JButton bAdd = new JButton("保存日志"); private JButton bDel = new JButton("删除日志");
private
JTextArea
jta
=
new
//JTextArea 是一个显示纯文本的多行区域
private JScrollPane jsp = new JScrollPane(jta);
p3.add(jsp, BorderLayout.CENTER); p3.add(p2, BorderLayout.SOUTH); p3.add(ld, BorderLayout.NORTH); p4.add(l); p4.add(lt); p5.add(p4, BorderLayout.SOUTH); p5.add(sp, BorderLayout.CENTER); p5.add(p1, BorderLayout.NORTH);
法。其次,在主程序中为“版本说明”选择项加一个监听器,监听器中调用了刚
才定义的适配器。最后,同样在主程序中详细说明 actionPerformed 方法。
四、数据分析
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;