《java课程设计报告-万年历.docx》由会员分享,可在线阅读,更多相关《java课程设计报告-万年历.docx(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、java课程设计报告-万年历 山西大学Java课程设计报告 题目:万年历 班级:14 班 学号: 姓名: 2022年12月 目录 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选题目的及意义 选题目的:本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我们组决定做一个万年历的设计。主要考
2、虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA 的一些基础知识掌握的更加牢固。 1.2 系统概述 随着电子技术的不断发展,人们的不断创新,万年历已经不再局限于书本形式,而是以电脑软件或者电子产品的形式出现。让其更加便捷。在学习了JAVA课程后,将以JAVA 形式编译出一个简易的万年历。 1.3 人员组成及分工 :负责搜集查找资料 :调试程序 最后进行程序的编写与修改 2.需求分析 本程序的要求为:1.使用图形用户界面; 2.本程序能够
3、实现日期与星期的查询。 3.可以添加或者删除日志 3.总体设计 (1)可以通过图形界面显示日历。 (2)能以月历形式显示日期与星期。 (3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。(4)可以添加或者删除并且点击对应日期显示日志。 4.详细设计 1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是 闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,
4、否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。 2. 输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是 0,则为星期日。 3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该 日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。 4. 查询年份必须为四位有效数字,否则不予显示。 5.显示系统时间。 6.流程图 流程图 5.系统实现 5.1 开发环境 myeclipse-8.5.0-win32 5.2 关键技术 (1)界面的绘制与显示 public c
5、lass 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 JSc
6、rollPane 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 JText
7、Field 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 JButto
8、n bAdd = new JButton(保存日志); private JButton bDel = new JButton(删除日志); 背景颜色,字体的显示 table.setGridColor(Color.GRAY); /星期之间的网格线是灰色的 table.setColumnSelectionAllowed(true); table.setSelectionBackground(Color.BLACK);/当选定某一天时这一天背景黑色 table.setSelectionForeground(Color.GREEN);/选定的日期字体是绿色的 table.setBackground(n
9、ew Color(184,207,229);/日期显示表格颜色浅蓝色 table.setFont(new Font(黑体,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 =
10、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; return 28; (3)日志的添加与删除 if(e.getSource() = bDel) int r = table.getSelectedRow(); int c = table.getSelectedColumn(); File filedel = new File
11、(ld.getText() + .txt); if(filedel.exists() if(filedel.delete() jta.setText(日志删除成功); else jta.setText(日志删除失败); else jta.setText(没有找到日志文件); (4)判断年份输入是否正确 public void actionPerformed(ActionEvent e) if(e.getSource() = jtfYear | e.getSource() = bLastYear | e.getSource() = bNextYear | e.getSource() = bLas
12、tMonth | e.getSource() = bNextMonth) int m, y; try/控制输入的年份正确,异常控制 if (jtfYear.getText().length() != 4) throw new NumberFormatException(); y = Integer.parseInt(jtfYear.getText(); m = Integer.parseInt(jtfMonth.getText(); catch (NumberFormatException ex) JOptionPane.showMessageDialog(this, 请输入4位0-9的数字!
13、, 年份有误, JOptionPane.ERROR_MESSAGE); return; (5)显示系统时间 lass Timer extends Thread/显示系统时间 private JLabel lt; private SimpleDateFormat fy = new SimpleDateFormat(yyyy.MM.dd G at HH:mm:ss z); private SimpleDateFormat fn = new SimpleDateFormat(yyyy.MM.dd G at HH mm ss z); private boolean b = true; public Timer(JLabel lt) this.lt = lt; public void run() while (true) try if (b) lt.setText(fy.format(new Date(); else lt.setText(fn.format(new Date(); b = !b; this.sleep(500); catch (InterruptedException ex) ex.printStackTrace();
限制150内