河南工程学院计算机学院课程设计报告书学号:201312211115姓名:陈晏猛学院:计算机学院专业班级:软件工程1341专业课程:Java程序设计指导教师:汪伟2014年12月27日题目1、计算器(此处写自己设计的程序名)的设计与实现2、2048(此处写自己设计的程序名)的设计与实现考核项目考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)要个按照规范要求完成课程设计源代码的排版总评成绩指导教师评语:日期:年月日I目录第1章计算器的设计与实现.............................11.1设计目的.........................................21.2系统实现思路.....................................31.3系统详细设计......................................41.4系统调试运行......................................7第2章2048的设计与实现.............................11.1设计目的.........................................21.2系统实现思路.....................................31.3系统详细设计......................................41.4系统调试运行......................................7第3章课程设计体会..............................8参考文献..............................................9附录...............................................101第1章计算器的设计与实现1.1设计目的本课程设计的目的就是通过一次集中的强化训练,使学生能巩固自己的学识,补充未学的但有必要的内容。进行课程设计的目的在于加深对程序设计基础中理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计的能力。同时,在程序设计方法及上机操作方面受到比较系统严格的训练,培养软件工作所需要的动手能力。(1)使学生更深入的理解和掌握课程中有关基本概念,程序设计的思想和方法。(2)培养学生综合运用所学知识独立完成课题的能力。(3)培养学生勇于探索,严谨推理,实事求是,有错必改,用实践来验证理论,全方位考虑问题等科学技术人员应具有的素质。(4)提高学生对工作认真负责,一丝不苟,对同学团结友爱,协作攻关的基本素质。(5)培养学生从资料文献,科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。(6)对学生掌握知识的深度,运用理论去处理问题的能力,实验能力,课程设计的能力,书面及口头表达能力进行考核。21.2系统实现思路1.2.1系统目标编写程序代码设计一个计算器,要有以下几个功能:二进制,八进制,十进制及十六进制的加,减,乘,除,乘方,取模等简单计算:科学计算函数,包括(反)正弦,(反)余弦,(反)正切,(反)余切,开方,指数等函数运行。我们可以把计算器的编译分成两大步骤:第一步骤:设计出计算器的雏形(框架),也就是计算器的排版布局;第二步骤:逐步实现计算器的功能。1.2.2主题功能进行的运算单视图实现的计算:加,减,除,乘;用科学视图实现科学运算:用简进制用户根据程序提示,输入数字,选择要转换,三角函数,开方,对数,求底等。1.2.3系统的功能模块划分进入计算器主菜单,计算器按功能模块划分为:简单计算器模块和科学计算模块。简单计算器模块包括:加法运算,减法运算,乘法运算,除法运算。科学计算器模块包括:进制转换,三角函数,对数,开方。根据用户需求选择需要的计算模式。3其模式图形如1.2.3图:计算器简单计算科学计算加法减法乘法除法开方对数三角函数进制转换图1.2.3系统模块图41.3系统详细设计从表面上看,计算器就包括一个文本框和一系列按钮(面板)。文本框在上面,按钮平均分布在文本框的下方。例如文本框的初建模型如下图所示:1.3.1文本框的设计从表面上看,计算器就包括一个文本框和一系列按钮(面板)。文本框在上面,按钮平均分布在文本框的下方所以整体把文本框看做一部分,把按钮看做一部分,采用BorderLayout布局较好。5JPanelpanel2=newJPanel(newBorderLayout());panel2.add(Center,display);panel2.add(East,reset);添加到窗口上方JPanelpanel1=newJPanel(newGridLayout(4,5));for(i=0;istr.length;i++){buttons[i]=newJButton(str[i]);panel1.add(buttons[i]);}添加到窗口中区,即下方。其次,按钮我们可以看出是平均分布在面板上的(四列五行)采用GridLayout布局较好。最后,布局分析好了,该添加按钮和文本框了。当然文本按钮都需要在窗口类中定义。6再加上代码方法就会如图所示:这样计算器的雏形出来了。1.3.2源程序importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassJCalculatorextendsJFrameimplementsActionListener{inti;//数字和字符串运算符按钮。privatefinalString[]str={7,8,9,+,-,4,5,6,*,/,1,2,3,0,.,=,%,+/-,倒数,sqrt};//创建按钮。7JButton[]buttons=newJButton[str.length];//创建重置按钮。JButtonreset=newJButton(C);//文本框。JTextFielddisplay=newJTextField(0)//无参构造函数,界面布局publicJCalculator(){super(Calculator);//panel1操作区//设置布局管理器为GridLayout,将界面区域划分为4行5列。JPanelpanel1=newJPanel(newGridLayout(4,5));for(i=0;istr.length;i++){buttons[i]=newJButton(str[i]);panel1.add(buttons[i]);}//panel2文本输出和重置区JPanelpanel2=newJPanel(newBorderLayout());panel2.add(Center,display);panel2.add(East,reset);//界面JPanelgetContentPane().setLayout(newBorderLayout());getContentPane().add(North,panel2);getContentPane().add(Center,panel1);//每位操作按钮添加动作监听器;for(i=0;istr.length;i++)buttons[i].addActionListener(this);//重置按钮添加监听器。reset.addActionListener(this);//显示按钮添加监听器。8display.addActionListener(this);//初始化窗口大小。setSize(400,300);//初始化窗口的位置setLocation(300,200);//显示窗口。setVisible(true);//关闭窗口addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEventwe){System.exit(0);}});}//实现监听器doublenumber=0.0;Stringoperator==;booleanisFirstDigit=true;//数字处理。publicvoidhandleNumber(Stringkey){if(isFirstDigit)display.setText(key);elseif((key.equals(.))&&(display.getText().indexOf(.)0))display.setText(display.getText()+.);elseif(!key.equals(.))9display.setText(display.getText()+key);isFirstDigit=false;}//重置计算器。publicvoidhandleReset(){display.setText(0);isFirstDigit=true;operator==;}//运算符操作publicvoidhandleOperator(Stringkey){if(operator.equals(+))//加法运算number+=Double.valueOf(display.getText());elseif(operator.equals(-))//减法运算number-=Double.valueOf(display.getText());elseif(operator.equals(*))//乘法运算number*=Double.valueOf(display.getText());elseif(operator.equals(/))//除法运算number/=Double.valueOf(display.getText());else10if(operator.equals(=))//赋值运算number=Double.valueOf(display.getText());elseif(operator.equals(sqrt))//平方根运算number=Math.sqrt(number);elseif(operator.equals(%))//百分号运算number=number/100;elseif(operator.equals(+/-))//正负号运算number=number*(-1);elseif(operator.equals(倒数))//倒数运算if(number==0){System.out.println(输入有误,0没有倒数!);}else{number=1/number;}display.setText(String.valueOf(number));operator=key;isFirstDigit=true;}//监听器11publicvoidactionPerformed(ActionEvente){Objecttarget=e.getSource();Stringlabel=e.getActionCommand();if(target==reset)handleReset();elseif(0123456789..indexOf(label)0)handleNumber(label);elsehandleOperator(label);}//main函数publicstaticvoidmain(String[]args){newJCalculator();}}1.4系统调试运行根据以上程序设计的内容,为了避免比必要的错误出现,严谨求实,遵循探索精神,要对源程序进行自我检测(系统