资源描述
西安科技大学
程序设计综合实训课程设计汇报
题目: 万 年 历
班级:
学号:
姓名:
2112月
目 录
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 DefaultTableModel 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("下月");
private JTextField jtfYear = new JTextField(5);//jtfYear年份显示和输入文本框
private JTextField 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 JButton 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(new 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 == 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)
{
int r = table.getSelectedRow();
int c = table.getSelectedColumn();
File filedel = new File(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() == bLastMonth || 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数字!", "年份有误", 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();
}
}
6.运行结果
7.软件测试
年份输入错误显示
闰年2月份演示和日志保留
8.总结
对于本程序设计,首先考虑其功效有哪些,需要显示什么,怎样进行窗体构建布局,需要用哪些知识点,如相关类和对象等。最终,就是依据初步设计功效和布局构架,考虑用源代码进行实现了。
经过了长时间反复编写调试,书本和网上查阅相关资料相关文章,最终完成了整个课程设计。在这个过程中,在把书本上知识给系统复习了一下同时,同时也发觉了自己太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地利用所学知识点。自己编程方法也不是太标准,常常出现代码写错而调试很久低级错误情况出现。
经过这次课程设计,我明白了编写程序,不仅要求对书本知识有较深刻了解,同时要求程序设计者有较强思维和动手能力。还要熟悉常见编程技巧和编程思想,不能只关心程序运行结果,更要重视程序代码结构,编程者更要有严谨地态度。还有经过设计过程中大量地查阅网络文章,对部分关键知识点逐一地了解并处理相关问题。所以网络这个强大工具,确实是我们学习之中能够借助一个很好帮手。网络是我们学习最好老师之一。有问题,问网络,是一个很好习惯。
9.参考文件
1. 赤金 聂松 JavaApplet实例编程
2.部分资料起源于网络
展开阅读全文