JAVA课程设计基于JAVA的万年历设计与实现.docx
- 文档编号:9582564
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:15
- 大小:27.62KB
JAVA课程设计基于JAVA的万年历设计与实现.docx
《JAVA课程设计基于JAVA的万年历设计与实现.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计基于JAVA的万年历设计与实现.docx(15页珍藏版)》请在冰豆网上搜索。
JAVA课程设计基于JAVA的万年历设计与实现
Java课程设计报告
课程设计题目:
万年历
指导老师:
**********
学生姓名:
*********
专业:
**********
学号:
*******
Java课程设计-万年历
1、课程设计目的:
这学期我们学习了Java语言,Java语言是面向对象的开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。
它具有面向对象、跨平台、分布应用等特点。
它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。
很多程序开发人员得第一选择。
为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。
让学生自己动手动脑,将书本上得知识运用到实践当中去,使知识能更好得融会贯通。
为了达到这个目的,我们需要自己动手做一个Java的课程设计,在这个课程设计里我们需要根据我们手中现有得软件与知识基础,独立得将它完成,只有这样,我们才能把理论变成实践,将知识真正得做到学以致用。
这次课程设计我主要研究了利用已学的Java知识编辑一个电子万年历。
通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。
并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识。
2、需求分析:
2.1、本程序要求:
1、使用图形用户界面;
2、本程序能够实现日期与星期查询,同时显示此时的时间。
2.2、功能设计:
本程序要构建万年历程序,其功能如下:
(1)通过窗口形式运行,实现界面功能;
(2)以月历的形式来显示日期与星期;
(3)为用户提供年份与月份的下拉形式菜选择年份与月份;
(4)同时显示查看时的时刻。
3、课程设计的基本算法
publicclasswnlextendsJFrameimplementsActionListener,ItemListener{
Datedate=newDate();
privateGregorianCalendargregorianCalendar=newGregorianCalendar();
//定义中英文字符数组存储星期信息,用于转换显示
privateString[]stringWeekEn=newString[]{"SUN","MON","TUE","WED",
"THU","FRI","SAT"};
privateString[]stringWeekCn=newString[]{"星期日","星期一","星期二","星期三",
"星期四","星期五","星期六"};
//定义存储月份的信息数组,用于转换显示方式
privateString[]stringMonthEn=newString[]{"Jan","Feb","Mar","Apr",
"May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"};
privateString[]stringMonthCn={"1月","2月","3月","4月","5月","6月",
"7月","8月","9月","10月","11月","12月"};
privateString[]sysNowTime=newString[6];//sysNowTime用于存储系统时间的变量
privateString[]sysRunTime=newString[6];
privateJLabel[]labelWeek=newJLabel[7];
privateJLabel[]labelDay=newJLabel[42];
privateJLabellabelTime=newJLabel();
privateJPanelpanel1=newJPanel();
privateJPanelpanel2=newJPanel();
privateJPanelpanel3=newJPanel();
privateJComboBoxcombo1=newJComboBox();
privateJComboBoxcombo2=newJComboBox();
privateJButtonbuttonToday=newJButton();
privateBorderborder=BorderFactory.createRaisedBevelBorder();
privateBorderborder1=BorderFactory.createLineBorder(Color.cyan,3);
publicwnl(Stringtitle){
super(title);
for(inty=1900;y<2200;y++){
combo1.addItem(""+newInteger(y).toString()+"年");
}
for(intm=0;m<12;m++){
combo2.addItem(""+stringMonthCn[m]);
}
buttonToday.setText("现在时刻");
setLayout(newFlowLayout());
add(panel1);
add(panel2);
add(panel3);
panel1.setLayout(newGridLayout(2,3,10,2));
panel1.add(combo1);
combo1.addItemListener(this);
panel1.add(combo2);
combo2.addItemListener(this);
panel1.add(buttonToday);
//buttonToday.addActionListener(this);
labelTime.setFont(newFont("宋体",Font.PLAIN,16));
labelTime.setForeground(Color.red);
panel1.add(labelTime);
Timertime=newTimer(1000,newTimerListener());
time.addActionListener(newTimerListener());
//time.setRepeats(true);
time.start();
//labelTime.addAncestorListener(newTimerListener());
panel2.setLayout(newGridLayout(7,7,10,10));
panel2.setBackground(Color.white);
for(inti=0;i<7;i++){
labelWeek[i]=newJLabel();
labelWeek[i].setHorizontalAlignment(0);
if(i==0||i==6){
labelWeek[i].setBackground(Color.blue);
labelWeek[i].setForeground(Color.RED);
labelWeek[i].setFont(newFont("黑体",Font.BOLD,14));
}
else{
labelWeek[i].setForeground(Color.BLACK);
labelWeek[i].setFont(newFont("新宋体",Font.PLAIN,14));
}
labelWeek[i].setText(stringWeekCn[i]);
panel2.add(labelWeek[i]);
}
for(inti=0;i<42;i++){
labelDay[i]=newJLabel();
labelDay[i].setHorizontalAlignment(0);
labelDay[i].setText("");
panel2.add(labelDay[i]);
}
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
setSize(300,300);
setBounds(250,200,400,360);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getSysDate();
setNowDate();
}
publicvoidactionPerformed(ActionEventae){
if(ae.getSource()==buttonToday){
setNowDate();
}
}
publicvoiditemStateChanged(ItemEventaa){
setChangeDate();
}
publicintturnWeek(Stringweek){
inti;
for(i=0;i<7;i++)
if(week.equalsIgnoreCase(stringWeekEn[i]))
break;
returni;
}
publicintturnMonth(Stringmonth){
/**
*intturnMonth(Stringmonth)
*@month系统日期中的月,诸如Jan\Feb
*@returnint
*返回一个整数值,用于寻找stringMonthCn[]数组中对应的中文月份
*/
inti;
for(i=0;i<12;i++)
if(month.equalsIgnoreCase(stringMonthEn[i]))
break;
returni;
}
/**
*setNowDate()
*设置当前系统日期
*/
publicvoidsetNowDate(){
setSysDate(getNowYear(),getNowMonth());
getSysRunDate();
setDateNull();
combo1.setSelectedIndex(getShowYear()-1900);
combo2.setSelectedIndex(getShowMonth());
setDays(getMonthDays(getNowYear(),getNowMonth()),getInitWeek(sysRunTime[0]),getNowDay());
labelTime.setText(sysNowTime[3]);
labelTime.setHorizontalAlignment(0);
}
/**IntegergetShowYear()
*获取组合框中应该显示的年份
*/
publicvoidsetSysDate(intyear,intmonth){
gregorianCalendar.set(year,month,1);
}
publicvoidsetDateNull(){
for(inti=0;i<42;i++){
labelDay[i].setText("");
}
}
publicvoidsetChangeDate(){
setSysDate(getComboYear(),getComboMonth());
getSysRunDate();
setDateNull();
setDays(getMonthDays(getComboYear()+1,getComboMonth()+1),getInitWeek(sysRunTime[0]),-1);
/**
*返回所选年月的天数,因为数组中的数值从0开始,所以各月必须加1.
*而2月,经过是否为闰年判断,选择返回28或29天.
*其余月份为大月,返回31天.
**/
}
publicintgetMonthDays(intyear,intmonth){
switch(month){
case4:
case6:
case9:
case11:
return30;//小月返回30天
case2:
if(gregorianCalendar.isLeapYear(year)){
//isLeapYear(year)确定当前纪元中的指定年份是否为闰年。
return29;
}else{
return28;
}//闰年的二月返回29天,平年返回28天
default:
return31;
//大月返回31天
}
}
/**
*intgetComboYear()
*获取组合框中的年份
*/
publicvoidgetSysDate(){
date=gregorianCalendar.getTime();
sysNowTime=(date.toString()).split("");
}
publicvoidgetSysRunDate(){
date=gregorianCalendar.getTime();
sysRunTime=(date.toString()).split("");
}
publicintgetComboYear(){
returncombo1.getSelectedIndex()+1900;
}
/***intgetComboMonth()
*获取月组合框中的整数值,
*/
publicintgetComboMonth(){
returncombo2.getSelectedIndex();
}
publicintgetInitWeek(StringinitWeek){
/**
*getWeekNow(StringinitWeek)
*@paranowWeek系统日期中的星期
*返回当月中的1号是从星期几开始
*/
intnowWeek=0;
for(inti=0;i<7;i++){
if(initWeek.equalsIgnoreCase(stringWeekEn[i])){
nowWeek=i;
break;
}
}
returnnowWeek;
}
publicintgetNowYear(){
returnInteger.parseInt(sysNowTime[5]);
}
publicintgetNowMonth(){
intnowMonth=0;
for(inti=0;i<12;i++){
if(sysNowTime[1].equalsIgnoreCase(stringMonthEn[i]));
nowMonth=i;
break;
}
returnnowMonth;
}
publicintgetNowDay(){
returnInteger.parseInt(sysNowTime[2]);
}
publicIntegergetShowYear(){
returnInteger.parseInt(sysNowTime[5]);
}
publicIntegergetShowMonth(){
/**
*IntegergetShowMonth()
*获取在组给框中显示的中文格式月份:
如七月\八月等
*/
returnturnMonth(sysNowTime[1]);
}
publicvoidsetDays(intmonthDays,intinitWeek,intday){
/**
*voidsetDays(intmonthDays,intinitWeek,intday)
*@paramonthDays本月天数
*@parainitWeek初始星期
*@paraday今天日
*设置月历
*/
setDateNull();
for(inti=initWeek;i if((i-initWeek+1)==day){ labelDay[i].setBorder(border1); labelDay[i].setForeground(Color.BLUE); labelDay[i].setFont(newFont("黑体",Font.BOLD,20)); }elseif((i%7==0)||(i%7==6)) labelDay[i].setForeground(Color.RED); else{ labelDay[i].setForeground(Color.BLACK); } labelDay[i].setText(String.valueOf(i-initWeek+1)); } for(inti=initWeek+monthDays;i<42;i++) labelDay[i].setText(""); } classTimerListenerimplementsActionListener{ //AdapterDemovar=newAdapterDemo("万年历"); publicvoidactionPerformed(ActionEvente){ GregorianCalendarg=newGregorianCalendar(); Stringclock=newString((g.getTime().toString().split(""))[3]); labelTime.setText(clock); } } 4、运行结果: 在安装有JRE平台的环境下,双击生成的万年历.jar运行: 说明: 简洁而明晰的运行结果,足以证明实验的正确性 5、体会心得: 经过短暂的一周的Java程序设计,使我又学到了很多的知识,尤其是运用Java知识去解决实际问题的能力又得到了很大的提高。 尽管所设计的程序比较简单,但是程序中的每个功能的实现都经过了自己的一定认真的思考。 由于把所学的知识做到很灵活的运用在实际中,对于现在的我还有一定的难度,故而,在设计的每个的环节中,都会多多少少的遇到一些问题,这就促使我去查阅各种资料,或者请教老师和同学,极大的提高我的专业素养,同时对在有些书上的理论知识在实际的运用,以及应该注意的问题有了比较深刻的认识。 当然,仍然有些理论问题不是很好的去运用,或者是了解的不深刻。 这就使的在实践中的所设计的程序有些功能不是自己所想的那样的完美。 不过,既然发现了问题的所在,我就不会放弃的,直至问题得到解决。 这些也同时反映出了平时运用知识去实践这方面做的太少。 太缺乏经验。 对所设计中将所面临的问题认识不够。 是Java课程设计让我认识到了这些问题的存在。 同时给我提供了去面对这些问题的平台。 也使我充分的认识到在以后也应该怎样去实践,怎样去学习一门计算机语言,以及如何去运用这门语言去解决实际问题等等。 总之,在经过这次Java的课程设计,使我认识到了自己很多的缺点,同时,也是我学到新知识和新方法的一个机会。 这给我在以后继续学习好这门语言指明了方向。 6、参考文献: [1]《Java2从入门到精通》,印旻编、许伟编著,清华大学出版社 [2]《Java编程思想》,周文龙等著,青年出版社 [3]《Java学习指南》,寒露、王梅等著,教育出版社 [4]《Java2实用教程》(第三版),耿祥义张跃平编著,清华大学出版社 [5]《Java语言与面向对象程序设计》,印旻编著,清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 课程设计 基于 万年历 设计 实现