java-万年历课程设计报告

合集下载

Java万年历课程设计报告

Java万年历课程设计报告

杭州师范大学钱江学院课程设计题目万年历学院钱江学院专业信电分院计算机科学与技术班级计算机1101姓名崔伊平指导教师王李冬2013 年9 月20 日目录一.概述 (1)二.总体方案设计 (2)三.详细设计 (3)四.最终输出 (7)五.课程设计总结 (8)参考文献 (9)一、概述1.课程设计的目的通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。

通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《java语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了java语言的好处和其可用性!2.课程设计的要求2.1输入查询的年份与月份,单击“更新”按扭,则可得到相应的日历。

本实验是对图形用户界面,布局管理器的综合运用。

要掌握APPLET容器中添加组件的方法,理解JAVA 的事件处理机制,编写独立的运行窗口。

2.2 输出形式使用独立的运行窗口进行显示。

界面主要由两部分组成——查询输入部分和结果显示部分。

查询输入部分包括两个文本域,一个用于输入年份:一个用于选择月份:一个更新按扭,用来触发查询事件。

二总体方案设计1.程序开发环境a.开发环境:eclipseb.系统环境:windows xp/7c.设计工具:Microsoft office 20032.整体流程图图1 流程图3.功能模块图图2 结构图三.详细设计3.1导入的包import java.applet.*;import java.awt.*;import java.awt.event.*;import java.util.*;3.2Applet的初始化public void init(){Label L1 = new Label("输入年份");Label L2 = new Label("输入月份");TextField F1 = new TextField(5);TextField F2 = new TextField(5);Button B1 = new Button("查询");int arr = new int[12];add(L1);add(F1);add(L2);add(F2);add(B1);Date date = new Date();F1.setText(String.valueOf(date.getYear() + 1900));F2.setText(String.valueOf(date.getMonth() + 1));B1.addActionListener(this);arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31; arr[3] = arr[5] = arr[8] = arr[10] = 30;date.setDate(1);//设置每月第一天var = date.getDay();//得到每月最后一天}3.3监听器public void actionPerformed(ActionEvent e) {int x = Integer.parseInt(F1.getText()), i = Integer.parseInt(F2.getText()) - 1, s = 0;if(F1.getText().isEmpty()||F2.getText().isEmpty()){JOptionPane.showMessageDialog(null,"输入不能为空!");}Date date = new Date();date.setYear(x - 1900);date.setMonth(i);date.setDate(1);var = date.getDay();repaint();}3.3paint()public void paint(Graphics g) {int xpos, ypos;//arr[0] = arr[2] = arr[4] = arr[6] = arr[7] = arr[9] = arr[11] = 31; //arr[3] = arr[5] = arr[8] = arr[10] = 30;int x = Integer.parseInt(F1.getText()), i = Integer.parseInt(F2.getText()) - 1;if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0))arr[1] = 29;elsearr[1] = 28;g.drawString("星期一", 50, 50);g.drawString("星期二", 100, 50);g.drawString("星期三", 150, 50);g.drawString("星期四", 200, 50);g.drawString("星期五", 250, 50);g.drawString("星期六", 300, 50);g.drawString("星期日", 350, 50);ARR = new String[arr[i]];int j = 0, k = 1;while (k <= arr[i]) {ARR[j] = String.valueOf(k);//获得每个月日期k ++;j ++;}int line = 0;for (int m = 0 ; m < ARR.length ; m ++) { //设置日期显示的位置ypos = 50 + 50 * (line + 1);xpos = (var * 50 + 50 * (m % 7)) % 350;if (xpos == 0) {xpos = 350;line ++;}g.drawString(ARR[m], xpos, ypos);}}}四.最终输出1.输入年月界面2.显示界面4.输入为空情况五.课程设计总结在最初设计这个程序的时候走了不少弯路,一开始对Applet程序没有深入理解,就把初始化部分写到构造函数里去了,后来在老师的提醒下,自己修改过来了。

Java万年历实验报告

Java万年历实验报告

J a v a万年历实验报告-CAL-FENGHAI.-(YICAI)-Company One1Java课程实验报告姓名:易乃杰学号:2110505171作业要求:编写一个万年历程序,要求能够查询历史时间,能够添加、查看、删除备忘录。

项目概述:这个项目是一个简单的Java万年历,可以实现所有年份的公历日期的查询,并且在相应的日期做备忘录,以及可以显示当前的日期以及时间。

程序截图:具体功能介绍:(1)万年历查询:点击图形界面中年份钱下拉框用来调整要查询的年份,点击月份前来调整要查询的月份,然后可以看到这个月的每一天所对应的星期。

(2)Clock功能:在万年历下面显示当前的年月日时间,相当于一个时钟的功能。

(3)记事本功能。

设计与实现(需要附全部代码,GUI自动生成代码除外):1 类的设计(继承、多态、数据结构):核心类是CalendarWindow. findPassWordDialog等。

2 Java IO ;文件访问2 GUI (用户界面):点下划线来表示GUI用户界面6 其他功能:(无)程序代码:package app;import calendar.CalendarWindow;public class Client {public static void main(String[] args){new CalendarWindow().setVisible(true);}}第一个包package account;public class Account {private String name;private String passWord;public Account(String name, String passWord){ = name;this.passWord = passWord;}public String getName(){return name;}public void setName(String name){ = name;}public String getPassWord(){return passWord;}public void setPassWord(String passWord){this.passWord = passWord;}@Overridepublic String toString() {return"账户"+name+",密码"+passWord;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Account other = (Account) obj;if (name == null) {if ( != null)return false;} else if (!name.equals())return false;if (passWord == null) {if (other.passWord != null)return false;} else if (!passWord.equals(other.passWord))return false;return true;}}第二个包(含三个类)package calendar;public class CalendarWindow extends javax.swing.JFrame implements Observer {private Time time;private int year;private int month;private int day;private Week week;private Datex current;private ILoginService loginService;private boolean isLogin;private IEventService eventService;/** Creates new form TimeWindow */public CalendarWindow() {initComponents();setLocationRelativeTo(null);loginService = new LoginService();eventService=new EventService();init();}private void init() {table.setGridColor(Color.GREEN);table.setRowHeight(table.getRowHeight() * 2 + 9);time = new Time();week = new Week();current = time.getSystemDate();year = current.getYear();month = current.getMonth();day=current.getDay();TimeUnit unit = time.getSystemTime();hourText.setText(unit.getHour() + "");secondText.setText(unit.getMinute() + "");initTable(current);initComboBox();initInfoTextArea(current);}// 初始化ComboBoxprivate void initComboBox() {for (int i = 0; i <= 20; i++)yearComboBox.addItem(current.getYear() - 10 + i);yearComboBox.setSelectedIndex(10);monthComboBox.setSelectedIndex(current.getMonth() - 1);}// 初始化TextAreaprivate void initInfoTextArea(Datex date) {infoTextArea.setFont(new Font("楷体", Font.BOLD, 16));infoTextArea.setLineWrap(true);infoTextArea.setColumns(15);infoTextArea.setRows(8);infoTextArea.setTabSize(10);infoTextArea.setText("【龙年】\n\n" + date.toString() + "\n "+ week.getWeek(date) + "\n\n\n" + "【忌讳】: 无\n\n\n"+ "【适宜】: 无\n\n");}// 初始化tableprivate void initTable(Datex today) {DefaultTableModel model = new DefaultTableModel();model.addColumn("星期日");model.addColumn("星期一");model.addColumn("星期二");model.addColumn("星期三");model.addColumn("星期四");model.addColumn("星期五");model.addColumn("星期六");Weeks week1 = week.getWeek(new Datex(today.getYear(), today.getMonth(),1));Weeks[] weeks = Weeks.values();int index = 0;int numx = 1;Object[] o = new Object[7];for (int i = weeks.length - 1; i >= 0; i--) {if (week1.equals(weeks[i]))index = i;}for (int j = index; j < 7; j++)o[j] = numx++;model.addRow(o);for (int i = 1; i < 6; i++) {o = new Object[7];for (int j = 0; j < 7; j++)if (numx <= stday(today.getYear(), today.getMonth()))o[j] = numx++;model.addRow(o);}table.setModel(model);}private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {System.exit(0);}private voidyearComboBoxActionPerformed(java.awt.event.ActionEvent evt) {year =Integer.valueOf(yearComboBox.getSelectedItem().toString());Datex temp = new Datex(year, month, 1);initTable(temp);initInfoTextArea(temp);}private voidmonthComboBoxActionPerformed(java.awt.event.ActionEvent evt) {month =Integer.valueOf(monthComboBox.getSelectedItem().toString());Datex temp = new Datex(year, month, 1);initTable(temp);initInfoTextArea(temp);}private void todayActionPerformed(java.awt.event.ActionEvent evt) {initTable(time.getSystemDate());initInfoTextArea(current);}private voidloginButtonActionPerformed(java.awt.event.ActionEvent evt) {isLogin = loginService.isOkOfLogin();if (isLogin) {JOptionPane.showMessageDialog(this, "已登录,不能重复登录!");return;}new loginDialog(this, loginService).setVisible(true);isLogin = loginService.isOkOfLogin();if (isLogin)setTitle("万年历 (登录状态: * 已登录 * )");}private voideventButtonActionPerformed(java.awt.event.ActionEvent evt) {if (isLogin)new EventDialog(this,newDatex(year,month,day),eventService).setVisible(true);else {JOptionPane.showMessageDialog(this, "个人文档已加密,如需访问请先登录!");}}private void tableMouseClicked(java.awt.event.MouseEvent evt) { int row = table.getSelectedRow();int column = table.getSelectedColumn();if (row < 0 || column < 0)return;try {table.setSelectionBackground(Color.WHITE);table.setSelectionMode(1);day = Integer.valueOf(table.getValueAt(row, column).toString());initInfoTextArea(new Datex(year, month, day));} catch (Exception e) {}}package calendar;import dateandweek.Datex;import uitl.Uitll;public class Calendarx {private Datex current;public Calendarx(int year, int month, int day){if (year <= 0)throw new IllegalArgumentException("输入的年份有误!");if (month <= 0 || month > 12)throw new IllegalArgumentException("输入的月份有误!");if (day <= 0 || day > stday(year, month))throw new IllegalArgumentException("输入的日期有误!");current = new Datex(year, month, day);}public Datex getcurrent() {return current;}public Datex getPreviousDate() {int year = current.getYear();int month = current.getMonth();int day = current.getDay();if (current.getDay() != 1)return new Datex(year, month, day-1);if (current.getMonth() == 1)return new Datex(year - 1, 12, stday(year - 1, 12));return new Datex(year, month - 1,stday(year,month - 1));}public Datex getNextDate() {int year = current.getYear();int month = current.getMonth();int day = current.getDay();if (stday(year, month) != day)return new Datex(year, month, day + 1);if (month == 12) {return new Datex(year + 1, 1, 1);}return new Datex(year, month + 1, 1);}// public int lastday(int year, int month)// 使用数据表确定最后一天;// {// int[] m = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };// if (year % 4 == 0)// m[2] = 29;// return m[month];// }}第三个包(含两个类)package event;public class EventDialog extends javax.swing.JDialog {private Datex current;private IEventService eventService;private JFrame parent;public EventDialog(JFrame parent, Datex current, IEventService eventService) {super(parent, true);initComponents();setLocationRelativeTo(parent);this.parent = parent;this.eventService = eventService;this.current = current;init();}private void init() {timeText.setText(current.toString());try {int i = 0;String[] stateStrings = new String[] { "一般", "较重要", "很重要" };String statex = eventService.getState(current);stateText.setText(statex);for (i = 0; i < stateStrings.length; i++)if (statex.equals(stateStrings[i]))break;stateComboBox.setSelectedIndex(i);textArea.setText(eventService.readAll(current));} catch (RuntimeException e) {stateText.setText("(无)");stateItem.setEnabled(false);}}private void formWindowClosing(java.awt.event.WindowEvent evt) {try {String state;state = stateComboBox.getSelectedItem().toString();String infos = textArea.getText();try {if(eventService.getState(current).equals(state)&&eventService.readAll(current).equals(infos)) {this.setVisible(false);return;}} catch (Exception e) {}int result = JOptionPane.showConfirmDialog(this, "今日日程已经改变,是否保存","关闭信息框",JOptionPane.YES_NO_OPTION);if (result == JOptionPane.YES_OPTION) {eventService.saveAll(current, state, infos);this.setVisible(false);return;}} catch (RuntimeException e) {setVisible(false);JOptionPane.showMessageDialog(parent, "建立" + current.toString()+ "日程时出错,请重新建立!");}}private voidstateComboBoxActionPerformed(java.awt.event.ActionEvent evt) {String state;try {state = stateComboBox.getSelectedItem().toString();stateText.setText(state);if (!stateItem.getText().equals("(无)"))stateItem.setEnabled(true);} catch (RuntimeException e) {JOptionPane.showMessageDialog(parent, "设置日程状态出错!");}}private voidstateItemActionPerformed(java.awt.event.ActionEvent evt) {String state;try {if (stateText.getText().equals("(无)"))stateItem.setEnabled(false);state = eventService.getState(current);stateText.setText(state);} catch (RuntimeException e) {}}private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {setVisible(false);}private void saveItemActionPerformed(java.awt.event.ActionEvent evt) {String state;try {state = stateComboBox.getSelectedItem().toString();String infos = textArea.getText();eventService.saveAll(current, state, infos);} catch (RuntimeException e) {setVisible(false);JOptionPane.showMessageDialog(parent, "建立" + current.toString()+ "日程时出错,请重新建立!");}}package event;public class EventService implements IEventService {@Overridepublic String readAll(Datex date) throws RuntimeException { if(date==null)throw new RuntimeException("日期不能为null!");String result = "";try {FileInputStream in = newFileInputStream("schedules/"+ date.toString());Scanner scanner = new Scanner(in);if (scanner.hasNextLine())scanner.nextLine();while (scanner.hasNextLine())result += scanner.nextLine();in.close();} catch (IOException e) {throw new RuntimeException("从" + date.toString() + "磁盘读信息时出错!");}return result;}@Overridepublic void saveAll(Datex date, String state, String info)throws RuntimeException {if(date==null||state==null)throw new RuntimeException("日期和日程状态都不能为null!");try {FileWriter out = new FileWriter("schedules/" + date.toString());out.write(state + "\n" + info);out.close();} catch (IOException e1) {throw new RuntimeException("信息写入" +date.toString() + "磁盘时出错!");}}@Overridepublic String getState(Datex date) throws RuntimeException { if(date==null)throw new RuntimeException("日期不能为null!");String result = "";try {FileInputStream in = newFileInputStream("schedules/"+ date.toString());Scanner scanner = new Scanner(in);if (scanner.hasNextLine())result = scanner.nextLine();in.close();} catch (IOException e) {throw new RuntimeException("从" + date.toString() + "磁盘读信息时出错!");}return result;}}package event;import dateandweek.Datex;public interface IEventService {//保存此日日程void saveAll(Datex date,String state,String info)throws RuntimeException;//读取此日日程String readAll(Datex date)throws RuntimeException;//获得此日日程状态String getState(Datex date)throws RuntimeException;}第四个包(含五个类)package login;public class findPassWordDialog extends javax.swing.JDialog {private ILoginService loginService;private String name;private String problem;private String answer;private int errorNumber1 = 0;private int errorNumber2 = 0;public findPassWordDialog(java.awt.Dialog parent,ILoginService loginService) {super(parent, true);initComponents();setLocationRelativeTo(parent);this.loginService=loginService;}private voidfindButtonActionPerformed(java.awt.event.ActionEvent evt) {if(errorNumber1>0||errorNumber2>0){JOptionPane.showMessageDialog(this, "填写的信息还有错,不能查找!");return;}String passWord="";try {passWord=loginService.findPassWord(name,problem,answer);} catch (Exception e) {JOptionPane.showMessageDialog(this,e.getMessage());}newPasswordText.setText(passWord);this.setVisible(true);}private void nameTextFocusLost(java.awt.event.FocusEvent evt) { errorNumber1=0;try {name = nameText.getText().trim();if (name.length() < 3 || name.length() > 15) {n ameOk.setText("×");errorNumber1++;} else {nameOk.setText("√");errorNumber1--;}} catch (Exception e) {JOptionPane.showMessageDialog(this, "账户名不合法,此功能无法运行!");}}private void answerTextFocusLost(java.awt.event.FocusEvent evt) {errorNumber2=0;try {problem =problemComboBox.getSelectedItem().toString();answer = answerText.getText().trim();if (answer.length() <= 0) {problemOK.setText("×");errorNumber2++;} else {problemOK.setText("√");errorNumber2--;}} catch (Exception e) {JOptionPane.showMessageDialog(this, "问题选择有误,此功能无法运行!");}}}package login;import account.Account;public interface ILoginService {//获得账户Account loginAccount(String newName,String newPassWord) throws RuntimeException;//获得Self账户Account getAccount() throws RuntimeException;//注册账户void registerAccount(String newName,String newPassWord,String problem,String answer)throws RuntimeException;//判断是否登录成功boolean isOkOfLogin();String findPassWord(String name,String problem,String answer)throws RuntimeException;//判断记住密码是否已选择boolean isChooseOfPassWord();//设置记住密码,自动登录void set(String rembPassWord);}package login;import java.awt.Color;import javax.swing.JOptionPane;import account.Account;public class loginDialog extends javax.swing.JDialog {private ILoginService loginService;private boolean isRembPassWord = false;public loginDialog(java.awt.Frame parent, ILoginService loginService) {super(parent, true);initComponents();setLocationRelativeTo(parent);this.loginService = loginService;initLogin();}private void initLogin() {try {isRembPassWord = loginService.isChooseOfPassWord();if (isRembPassWord)passwordCheckBox.setSelected(true);Account account = loginService.getAccount();if (isRembPassWord == false)return;accountText.setText(account.getName());passwordField.setText(account.getPassWord());} catch (Exception e) {JOptionPane.showMessageDialog(this, "登录失败!");}}private void findPasswordMouseExited(java.awt.event.MouseEvent evt) {findPassword.setForeground(Color.BLACK);}private void findPasswordMouseEntered(java.awt.event.MouseEvent evt) {findPassword.setForeground(Color.RED);}private void gainAccountMouseExited(java.awt.event.MouseEvent evt) {gainAccount.setForeground(Color.BLACK);}private void gainAccountMouseEntered(java.awt.event.MouseEvent evt) {gainAccount.setForeground(Color.RED);}private voidpasswordCheckBoxMouseClicked(java.awt.event.MouseEvent evt) {String rembPassWord = "关";if (passwordCheckBox.isSelected())rembPassWord = "开";try {loginService.set(rembPassWord);} catch (Exception e) {JOptionPane.showMessageDialog(this, e.getMessage());}}private void findPasswordMouseClicked(java.awt.event.MouseEvent evt) {new findPassWordDialog(this,loginService).setVisible(true);}private void gainAccountMouseClicked(java.awt.event.MouseEvent evt) {new RegisterAccountDialog(this,loginService).setVisible(true);}private voidloginButtonActionPerformed(java.awt.event.ActionEvent evt) {try {String name = accountText.getText();if (name.equals("")) {JOptionPane.showMessageDialog(this, "账户不能空!");return;}String passWord =String.valueOf(passwordField.getPassword());if (passWord.equals("")) {JOptionPane.showMessageDialog(this, "密码不能空!");return;}loginService.loginAccount(name, passWord);this.setVisible(false);} catch (Exception e) {JOptionPane.showMessageDialog(this, e.getMessage());}}}package login;import java.io.*;import java.util.Scanner;import account.Account;public class LoginService implements ILoginService {private String newName;private String newPassWord;@Overridepublic Account loginAccount(String newName, String newPassWord)throws RuntimeException {this.newName = newName;this.newPassWord = newPassWord;return judgeAccount(newName, newPassWord);}private String[] readInfo(String fileName, int num) {String[] result = new String[num];try {FileInputStream in = new FileInputStream(fileName);Scanner scanner = new Scanner(in);for (int i = 0; i < num; i++)if (scanner.hasNextLine())result[i] = scanner.nextLine();in.close();} catch (IOException e) {throw new RuntimeException("从"+fileName+"磁盘读信息时出错!");}return result;}private void writeInfo(String fileName,String info){try {FileWriter out = new FileWriter(fileName);out.write(info);out.close();} catch (IOException e1) {throw new RuntimeException("信息写入"+fileName+"磁盘时出错!");}}private Account judgeAccount(String newName, String newPassWord) {String[] info;if (newName == null || newPassWord == null)throw new RuntimeException("输入的账户和密码都不能为null");try {info=readInfo("account", 2);} catch (Exception e) {throw new RuntimeException(e.getMessage());}if (!info[0].equals(newName))throw new RuntimeException("输入的账户名有误!");if (!info[1].equals(newPassWord))throw new RuntimeException("输入的密码有误!");return new Account(info[0], info[1]);}@Overridepublic void registerAccount(String newName, String newPassWord,String problem, String answer) throws RuntimeException {if (newName == null || problem == null || answer == null|| newPassWord == null)throw new RuntimeException("输入的账户,密码,问题和答案都不能为null");try {writeInfo("account",newName + "\n" + newPassWord + "\n" + problem + "\n"+ answer);} catch (Exception e) {throw new RuntimeException(e.getMessage());}}@Overridepublic boolean isOkOfLogin() {try {judgeAccount(newName, newPassWord);} catch (Exception e) {return false;}return true;}@Overridepublic String findPassWord(String newName, String problem, String answer)throws RuntimeException {String[] info;if (newName == null || problem == null || answer == null)throw new RuntimeException("输入的账户,问题和答案都不能为null");try {info=readInfo("account", 4);} catch (Exception e) {throw new RuntimeException(e.getMessage());}if (!info[0].equals(newName))throw new RuntimeException("输入的账户名有误!");if (!info[2].equals(problem))throw new RuntimeException("选择的问题有误!");if (!info[3].equals(answer))throw new RuntimeException("问题的答案有误!");return info[1];}@Overridepublic boolean isChooseOfPassWord() {String[] info;try {info=readInfo("set", 1);} catch (Exception e) {throw new RuntimeException(e.getMessage());}if (info[0].equals("开"))return true;return false;}@Overridepublic void set(String rembPassWord) {if (rembPassWord == null)throw new RuntimeException("输入的记住密码设置和自动登录设置都不能为null");try {writeInfo("set", rembPassWord + "\n");} catch (Exception e) {throw new RuntimeException(e.getMessage());}}@Overridepublic Account getAccount() throws RuntimeException {String[] info;try {info=readInfo("account", 2);} catch (Exception e) {throw new RuntimeException(e.getMessage());}return new Account(info[0], info[1]);}}/** RegisterAccountDialog.java** Created on __DATE__, __TIME__*/package login;import java.awt.Font;import javax.swing.JOptionPane;public class RegisterAccountDialog extends javax.swing.JDialog {private String name;private String passWord;private String answer;private String problem;private ILoginService loginService;private int errorNumber1=0;private int errorNumber3=0;private int errorNumber2=0;private int errorNumber4=0;]public RegisterAccountDialog(java.awt.Dialog parent,ILoginService loginService) {super(parent, true);initComponents();setLocationRelativeTo(parent);this.loginService = loginService;}private voidregisterButtonActionPerformed(java.awt.event.ActionEvent evt) {try {if (name == null || passWord == null || answer == null) {JOptionPane.showMessageDialog(this, "还有未填写的空,不能注册!");return;}if(errorNumber1>0||errorNumber2>0||errorNumber3>0||errorNumber4 >0){JOptionPane.showMessageDialog(this, "填写的信息还有错,不能注册!");return;}loginService.registerAccount(name, passWord,problem, answer);this.setVisible(false);} catch (Exception e) {JOptionPane.showMessageDialog(this, "对不起!注册失败,请稍后注册。

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课程设计--基于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课程设计报告万年历程序设计报告

JAVA程序设计目录目录 (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,uilder,JDeveloper和Eclipse等。

其中Java Development Kit 简称JDK是大多开发工具的根底。

以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种适宜的开发工具。

1需求分析1.1需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。

1.2功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。

〔2〕能以月历形式显示日期与星期。

〔3〕支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。

〔4〕通过点击“更新〞来刷新日历。

2.概要设计2.1程序设计思路1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告

用Java程序编写万年历程序的设计报告一、引言本文档是针对使用Java程序编写万年历程序的设计报告,旨在详细介绍该程序的设计思路和实现细节。

二、需求分析1.背景介绍在现代社会中,人们经常需要查看特定日期的日历信息。

为了方便用户直观地查看任意年月的日历信息,设计一个万年历程序,可以满足用户的需求。

2.功能需求万年历程序具备以下功能:●显示指定年月的日历信息●支持用户输入任意年月●能够高亮当前日期●具备简洁易读的界面设计3.性能需求●用户界面响应迅速,无明显卡顿●日历信息准确无误,支持闰年判断三、概要设计1.系统架构万年历程序采用MVC(Model.View.Controller)架构,将数据模型、用户界面和控制逻辑分离。

模型层:负责处理日期计算和数据存储视图层:负责展示日历信息,接收用户输入控制器层:负责协调模型层和视图层的交互2.关键模块●日历模块:负责日期计算,并提供接口给视图层调用●用户界面模块:提供用户交互界面,并接收用户输入●控制器模块:负责协调日历模块和用户界面模块四、详细设计1.日历模块设计●定义日期对象:包括年、月、日等属性●实现日期计算功能:如计算指定年月的第一天是星期几,判断某年是否为闰年等●提供接口给其他模块调用:如获取指定年月的日历信息2.用户界面设计●设计主界面:包括输入年月的文本框和显示日历信息的面板●设计按钮事件:响应用户输入的年月,调用日历模块计算并显示日历信息3.控制器设计●建立模型与视图之间的联系:将用户输入传递给日历模块,并将计算后的日历信息传递给视图层进行显示五、测试计划1.单元测试●对日历模块进行单元测试,测试日期计算功能的准确性●对用户界面模块进行单元测试,测试界面的交互和显示是否正常2.集成测试●测试控制器模块与日历模块、用户界面模块之间的功能协调是否正常六、附录1.附件●无2.法律名词及注释●无。

Java万年历课程设计报告

Java万年历课程设计报告

Java课程设计设计题目:万年历系别:计算机科学与工程学院专业:信息管理与信息系统学号: 1100340116 姓名:岑少兵指导教师:汪华澄时间: 2013-6-29目录摘要 (3)系统功能结构图 (3)1 系统模块设计 (4)1.1 需求设计 (4)1.2 开发和运行环境 (4)1.3 功能设计 (4)2 万年历详细设计思路 (4)2.1 程序设计思路 (5)2.2 程序运行主界面 (5)2.3 流程图 (6)3 各模块功能实现及代码说明 (6)3.1 MainFramel类 (6)3.2 Lunar类 (14)3.3 national类 (22)3.4 SetClock类 (26)4 小结 (34)5 参考文献 (34)基于Myeclipse的万年历摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。

在万年历上添加了显示本地时间以后会更加准确地显示时间。

无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。

系统功能结构图:主要描述系统要实现的各个模块的功能。

1系统模块设计1.1需求分析本程序的要求为:1.使用图形用户界面2.能够实现日期与星期的查询3.能够显示农历4.能够查看世界时间5.能够添加闹钟1.2 开发和运行环境开发工具:Myeclipse运行环境: windows 71.3功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过(2)提供年份、月份的下拉形式菜单来选择年份和月份。

(3)通过Lunar类实现农历日期。

(4)通过national类实现世界时间。

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

(6)通过SetClock类来实现闹钟功能。

(7)通过点击世界时间按钮查询世界时间(8)通过点击闹钟按钮设置闹钟(9)显示系统当前时间和日期。

万年历java课程设计报告

万年历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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安科技大学程序设计综合实训课程设计报告题目:万年历班级:学号:姓名:年12 月2103目录1绪论 (1)1.1选题目的及意义 (1)1.2系统概述. (1)1.3人员组成及分工. (1)2需求分析 (1)3总体设计 (1)4详细设计 (1)5系统实现 (2)5.1 开发环境. (3)5.2 关键技术. (3)6.运行结果 (6)7.软件测试 (7)8.总结 (7)9 参考文献 (8)1.绪论1.1选题目的及意义选题目的:本次课程设计为课本后设计题目任选一题进行设计。

思考一段时间后,我们组决定做一个万年历的设计。

主要考虑到以前时间少课程内容多,JAVA 课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们组每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA 的一些基础知识掌握的更加牢固。

1.2系统概述随着电子技术的不断发展,人们的不断创新,万年历已经不再局限于书本形式,而是以电脑软件或者电子产品的形式出现。

让其更加便捷。

在学习了JAVA 课程后,将以JAVA 形式编译出一个简易的万年历。

1.3人员组成及分工付磊:负责搜集查找资料王杜超:调试程序两人共同负责程序的编写与修改2.需求分析本程序的要求为:1. 使用图形用户界面;2.本程序能够实现日期与星期的查询。

3.可以添加或者删除日志3.总体设计(1)可以通过图形界面显示日历。

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

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

(4)可以添加或者删除并且点击对应日期显示日志。

4.详细设计1.总天数的算法:首先用if 语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

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

2.输出月份第一天为星期几的算法:使总天数除以7 取余得几既为星期几,若是0,则为星期日。

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

4.查询年份必须为四位有效数字,否则不予显示。

5.显示系统时间。

6.流程图开始获取当前系统时间年份等数据流程图5.系统实现5.1 开发环境myeclipse-8.5.0-win32 5.2 关键技术 1)界面的绘制与显示public class wannianli extends JFrame implements ActionListener, MouseListener{private Calendar cld = Calendar. getInstance ();private String []astr = { " 星期一 " , " 星期二 " , " 星期三" , " 星期四 " , " 星期 五" , " 星期六 " , " 星期日 " };private DefaultTableModeldtm = 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 JTextFieldjtfYear= new JTextField(5); //jtfYear年份显示和输 入文本框private JTextFieldjtfMonth= new JTextField(2); //jtfMonth月份显示文本框private JPanel p1 = new JPanel();// 装入控制日期按钮的模块private JPanel p2 = new JPanel();privateJPanelp3 = new JPanel( new BorderLayout()); private JPanel p4 = new JPanel(new GridLayout(2,1));private JPanelp5 = new JPanel(newBorderLayout()); private JButtonbAdd = new JButton( " 保存日志 " ); private JButtonbDel = new JButton(" 删除日志 " );背景颜色,字体的显示table .setGridColor(Color. GRAY);table .setColumnSelectionAllowed( table .setSelectionBackground(Color.景黑色table .setSelectionForeground(Color. GREEN); // 选定的日期字体是绿色的 table .setBackground( new Color(184,207,229)); // 日期显示表格颜色浅蓝// 星期之间的网格线是灰色的 true );BLACK); // 当选定某一天时这一天背table .setFont( new Font( " 黑体 BOLD,24)); // 日期数字字体格table .setRowHeight(30); // 表格的高度table .addMouseListener(this );// 鼠标监听器(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;}3)日志的添加与删除if (e.getSource() == bDel ) {if (filedel.delete()){jta .setText(}else{jta .setText( " 日志删除失败 " );elseint r =table .getSelectedRow();int c =table .getSelectedColumn();File filedel =new File( ld .getText() +".txt"{if (filedel.exists())日志删除成功 " );jta .setText ( " 没有找到日志文件 " ); 4 )判断年份输入是否正确public { void actionPerformed(ActionEvent e) if (e.getSource() == e.getSource() == e.getSource()jtfYear || e.getSource() == bLastYear ||in t tr y i fbNextYear || == bLastMonth || e.getSource() m, y;控制输入的年份正确,异常控制 // jtfYea r throw.getText().length() != 4)new NumberFormatException();== bNextMonth )y = Integer. m = Integer.parseIn tparseIn t( jtfYear ( jtfMont h .getText());.getText());catch (NumberFormatException ex)JOptionPane." 年份有误 " , JOptionPane. return showMessageDialogERROR_MESSAGE);5)显示系统时间lass Timer {private private extends Thread // 显示系统时间 HH:mm:ss z" privat e HH mm ss z" privat e publi c {( this , " 请输入 4 位 0-9 的数字! " ,JLabel lt ; SimpleDateFormat ); SimpleDateFormat );boolean b = trueTimer(JLabellt)this . lt = lt;fy = new SimpleDateFormat( fn = new SimpleDateFormat( "yyyy.MM.dd"yyyy.MM.ddG 'at' G 'at'public void run()while ( true ){try{if ( b){lt .setText( fy .format(newDate()));}else{lt .setText( fn .format(newDate()));}b= ! b;this . sleep (500);}catch (InterruptedException ex){ex.printStackTrace();}}6.运行结果7.软件测试年份输入错误显示闰年2 月份演示以及日志保存8. 总结对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。

相关文档
最新文档