1、java课程设计报告2明达职业技术学院实训(实践)报告20102011学年度第一学期 信息工程 系 计算机应用技术 专业 班级 09计算机应用技术 学号 41083103 课题名称 Java课程设计 学生姓名 范钰钰指导教师 徐山 2010年6月11日Java课程设计任务书专业班级 09计算机 姓名 范钰钰 学号 03 指导老师 徐山 实训(实践)题目 万年历表 设计实训(实践)的主要内容:1、 利用Java语言编写一个万年历表的程序2、 利用Frame设计出万年历表的外框架并且加上swing、awt控件3、 实现100年以内日期的查询4、 实现所查当天的星期几的查询5、输出月份表要求完成的主
2、要任务:1、 完成设计内容2、 设计出万年历的外框3、 安插基本的查询控件4、 设计说明书,字数为2000字以上作业提交方式:java设计程序原代码及其字节码文件指导老师签名: Java课程设计任务书 1、可行方案的筛选方法及设计思路2、 注意已学过的相关知识提要以及与本课题有关的新知识3、 进度安排 明确设计内容,完成相关资料素材的搜索;(4学时) 完成Frame设计万年历表的外框架并且加上swing、awt控件;(4学时) 实现100年以内日期的查询;(2学时) 完成所查当天的星期几的查询;(3学时) 输出每月的月份表,完成界面绘制;(4学时) 完善代码文件,实现个性小功能;(3学时) 完
3、成实验说明书;(2学时)4、设计说明书撰写时注意随时注意保留在设计过程中的思路、计算过程及文字草稿。Java课程设计任务书(设计说明)一、万年历程序设计报告1.1需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。1.2功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过网页形式运行,实现图形界面。(2)能以月历形式显示日期与星期。 (3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。 (4)通过点击“更新”来刷新日历。2.概要设计2.1程序设计思路1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总
4、天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的
5、日历。4. 如果年份小于1582年则程序不予判断。3.各模块的功能及程序说明3.1.初始化组件import java.awt.*;import java.awt.event.*;3.2. 绘制程序界面class aa4 extends Frame implements ActionListener public int x,y,z,r; static aa4 fra=new aa4(); static TextField txt1=new TextField(10 ); static TextField txt2=new TextField(10 ); static Label lb; Str
6、ing days=星期日,星期一,星期二,星期三,星期四,星期五,星期六; String ww; String ee ; public static void main(String args) fra.setTitle( 万年历); fra.setBounds(0,0,320,400); fra.setLayout(new FlowLayout();/页面设置 txt1.setBounds(50,50,20,20);/设置文本框的大小 /txt1.addTextListener(fra); txt2.setBounds(60,60,20,20);/设置文本框的大小 /txt2.addText
7、Listener(fra); Button b=new Button(查询); b.setBounds(200,40,60,40); b.addActionListener(fra); lb=new Label(0000,Label.CENTER); lb.setBounds(75,70,130,25); lb.setForeground(Color.blue ); fra.add(txt1) ; /将 文本框添加到窗口中 fra.add(txt2) ; txt1.setText(2011); txt2.setText(6); fra.add(b); fra.add(lb); fra.setV
8、isible(true); /显示窗口3.3. 监听器的方法public void actionPerformed(ActionEvent e ) x=Integer.parseInt(txt1.getText(); y=Integer.parseInt(txt2.getText(); z=getyear(x,y); lb.setText(String.valueOf(daysz); repaint(); int getyear(int year ,int month) int s=0,i,j=0,u,w; int v=0,31,28,31,30,31,30,31,31,30,31,30,31
9、; u=year; w=month; for(i=0;iw;i+) if(u%4=0&u%100!=0|u%400=0) v2=29; j=j+vi; s=u-1+(u-1)/4-(u-1)/100+(u-1)/400+(j+1); s=s%7; return s; 4直线绘图的方法 public void paint(Graphics g) for (int i=100;i300;i+=30) g.drawLine(20,i,300,i); Font fnt=new Font(楷体Gb_2312,Font.PLAIN,12); g.setFont(fnt); int j=20; for(in
10、t i=0;i7;i+) g.drawString(daysi,j,120); j=j+40; int day,month=Integer.parseInt(txt2.getText(); int year=Integer.parseInt(txt1.getText(); if(month=2) if(year%4=0&year%100!=0|year%400=0) day=29; else day=28; else if(month=4)|(month=6)|(month=9)|(month=11) day=30; else day=31; ee=new Stringday; for(int
11、 i=0;iday;i+)eei=String.valueOf(i+1); for(int i=day;iee.length;i+)eei= ; ww=new Stringz+day; for(int i=0;i=z;i+) wwi= ; for(int i=z;iww.length;i+) wwi=eei-z; int w=0,p=0; for(int k=0;k6) w=0;p=p+30; g.drawString(wwk,20+w*40,150+p); w+; 二、连连看课程设计1、课题设计的目的:1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。2) 课程设
12、计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼我们的分析解决实际问题的能力,提高学生适应实际,实践编程的能力; 3)熟练掌握JAVA语言中图形用户界面程序的编写;4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。2、可行性论证:“连连看“游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。我通过所学的JAVA,设计了一个操作简单、界面美观、功能较齐全的“连连看”游戏。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。这个游戏是用图形界面实现的,通过编译解释后,出现一个图开界面。界面是由若干个小方格组成的,每一个小方格里有一个数
13、值,如果在一个边上有相同的数值,连续点击它们就会消失,同时界面上正上方的分数就会自动加分。游戏还设有退出、重列、再来一局的功能,方便游戏操作。31源程序:3.1.1 初始化 package cmdjava.lianliankan;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.File;import java.io.FilenameFilter;public class lianliankan implements ActionListener JFrame mainFrame; / 主
14、面板 Container thisContainer; JPanel centerPanel, southPanel, northPanel; / 子面板 JButton diamondsButton = new JButton65;/ 游戏按钮数组 JButton exitButton, resetButton, newlyButton; / 退出,重列,重新开始按钮 JLabel fractionLable = new JLabel(0); / 分数标签 JButton firstButton, secondButton; / 分别记录两次被选中的按钮public void xiao()
15、/相同的情况下能不能消去。仔细分析,不一条条注释 if(x0=x &(y0=y+1|y0=y-1) | (x0=x+1|x0=x-1)&(y0=y) /判断是否相邻 remove(); else for (j=0;jj) /如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边 for (i=y-1;i=j;i- ) /判断第二按钮左侧直到第一按钮中间有没有按钮 if (gridxi!=0) k=0; break; else k=1; /K=1说明通过了第一次验证 if (k=1) linePassOne(); if (yj) /如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮
16、在第二按钮右边 for (i=y+1;i=j ;i+ ) /判断第二按钮左侧直到第一按钮中间有没有按钮 if (gridxi!=0) k=0; break; else k=1; if (k=1) linePassOne(); if (y=j ) linePassOne(); if (k=2) if (x0=x) remove(); if (x0x) for (n=x0;nx) for (n=x0;n=x+1 ;n- ) if (gridnj!=0) k=0; break; if(gridnj=0 & n=x+1) remove(); for (i=0;ii) for (j=x-1;j=i ;j
17、- ) if (gridjy!=0) k=0; break; else k=1; if (k=1) rowPassOne(); if (xi) for (j=x+1;j=i;j+ ) if (gridjy!=0) k=0; break; else k=1; if (k=1) rowPassOne(); if (x=i) rowPassOne(); if (k=2) if (y0=y) remove(); if (y0y) for (n=y0;ny) for (n=y0;n=y+1 ;n-) if (gridin!=0) k=0; break; if(gridin=0 & n=y+1) remo
18、ve(); public void linePassOne() if (y0j) /第一按钮同行空按钮在左边 for (i=y0-1;i=j ;i- ) /判断第一按钮同左侧空按钮之间有没按钮 if (gridx0i!=0) k=0; break; else k=2; /K=2说明通过了第二次验证 if (y0j) /第一按钮同行空按钮在与第二按钮之间 for (i=y0+1;ii) for (j=x0-1;j=i ;j- ) if (gridjy0!=0) k=0; break; else k=2; if (x0i) for (j=x0+1;j=i ;j+ ) if (gridjy0!=0)
19、 k=0; break; else k=2; 5课程设计体会(1)选题目的:本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我们组决定做一个万年历的设计。主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们组每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。(2)对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。
20、通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。参考文献1.曾令明 索 望 甘 刚 宋 波,Java程序设计教程,西安电子科技大学出版社,2007.82.孙全党 王吴迪 赵枫朝,Java程序设计应用教程,电子工业出版社,2006.23.玉阳,Java从入门到精通,清华大学出版社,2006.8