java实验报告 - 计算器 - 记事本 - 井字游戏
更新时间:2023-10-20 01:33:01 阅读量: 综合文库 文档下载
- java实验报告心得体会推荐度:
- 相关推荐
课程设计报告
实验内容: 综合课程设计 相关课程: Java程序设计 学 期: 2009-2010学年第2学期 学时学分: 48学时 3学分 专业班级: xxxxxxxx 学 号: xxxxxxxxxxx 姓 名: xxxxxxx 指导老师: xxx 提交日期: xxxx年 xx月xx日
- 1 -
题目JAVA课程设计
一、实验目的
通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。信科0821班学生的课程设计主要是Java语言程序设计的实现。通过该课程设计,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。
二、实验环境
硬件环境 CPU:AMD5000+ 双核 主板:华硕M2N-X 显示器:1024x768/256色
操作系统:Windows XP;JDK:jdk-6u18-windows-i586; 运行环境以及调试软件:JCreator Pro
三、实验内容
内容一:设计一个计算器,利用它可以进行简单的四则运算(加、减、乘、除、开方)等,但仅限于十进制下,此外还可以进行(八进制,十进制,十六进制)之间的相互转换。
内容二:设计一个记事本,菜单中要求有文件,编辑,和帮助。文件中有新建、打开、保存和退出;编辑中有剪切、复制和粘贴;帮助中显示开发人和版本信息。
内容三:编写tic-tac-toe游戏程序。即 3*3的9个方格子,每人下一次看谁先连成一行3个
四、算法分析、设计与描述 1.算法分析和设计
内容(1) 算法分析:
首先,设计对输入数字的进行转换,不进行转换操作则默认为十进制,然后进行符号转换操作以及正弦函数等,接着可以进行加减乘除等运算,添加“C”、“CE”按钮进行退格和清空操作,清空操作显示“0” ,最后在帮助中显示开发人信息。
功能及界面设计:
功能1:按下数字键在液晶平上会显示数字,这时计算器最基本的功能。
功能2:输入数字后,点击进制转换,可转换成二、八进制;按“exp”“log”键,则进行e次幂运算和自然对数运算;按“tan”“cos”“sin”则进行三角函数运算。
功能3:按“+”“-”“*”“/”分别进行四则运算
功能4:在任何时候按下“+/-”键,计算器文本框上的数字置反号。 功能5:第一次按下“运算”键,再按下数字键,将重新输入第二个数字。再次按下“运算”键,将算出前两个数字运算的结果,然后按下数
- 2 -
字,将又重新输入新的数字。
功能6:按下“C”键向前退格,按下“CE”键,数据被全部清除 功能7:按下“帮助”键查看制作人信息
功能8:按下“选项”键,点“退出”键退出
算法描述
计算器面板设计
选项 进制转换 帮助 (输出区域) sqrt +/- exp C CE 7 8 9 log / 4 5 6 tan * 1 2 3 cos - 0 . = sin +
- 3 -
开始 进制转换 选择你要计算运行的进制10、8、16 八进制 默认十进制 十六进制 接受用户输入 处理异常 计算结果显示 否 退出 是否再次计算 是
刷新
内容(2)
算法分析:此程序应当符合大众化,因为记事本是一个常用程序,因此我们常用计算机系统带的记事本进行设计本程序,其功能有以下几个方面:
(1)“菜单”中有“文件”,“编辑”,“帮助”三个主菜单。
(2)“文件”中有“新建”,“打开”,“保存”,“退出”四个子菜单:分别用于新建文件,打开文件,保存文件,退出记事本。
(3)“编辑”中有“剪切”,“复制”,“粘贴”三个子菜单:用于剪切文字,复制文字,粘贴文字。
(4)“帮助”菜单中有“关于”用来显示作者信息
- 4 -
记事本面板设计:
文件 编辑 帮助 (文本区) 内容(3) 算法分析:
1初始化游戏,2检查棋子是否布满游戏格局,格局被布满则进行赢者判断,没布满则“X”下棋,3再次检查游戏格局是否被棋子布满,没布满则轮到“O”下棋,且跳到步骤2,若布满格局则进行赢者判断
- 5 -
算法描叙:
Y 是否占满游戏是否占满游戏格局 初始化游戏 N “X”下棋 Y
是否有玩家赢 N “O”下棋 平局 N Y N 是否有玩家赢 Y 输出赢家
五、程序设计
1.程序设计的基本思路 内容(1):
计算结果显示区设计
private JTextField displayField 保存+,-,*,/,=命令
private String lastCommand 保存计算结果
private double result 判断是否为数字的开始 private boolean start
设置布局、为按钮注册事件监听器 public Calculator()
- 6 -
调用成员方法添加菜单 this.addmyMenu()
按钮的单击事件处理方法
public void actionPerformed(ActionEvent e) 退格键的实现方法
if(input.equals(\ { if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1)); // 清零键的实现方法 input.equals(\
displayField.setText(\ start=true;
内容(2): 使用的包如下: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*;
为按钮添加行为监听器: ActionListener 为按钮添加键盘适配器: KeyListener 菜单设计:
JMenuBar mbar;
JMenu mnuFile, mnuEdit, mnuHelp;
JMenuItem fileNew, fileOpen, fileSave, fileExit;
JMenuItem editCut, editCopy, editPaste, editSelectAll, editDel;
JMenuItem helpAbout; JToolBar tlbr;
ImageIcon iconNew, iconOpen, iconSave; ImageIcon iconCut, iconCopy, iconPaste; JButton bttnNew, bttnOpen, bttnSave; JButton bttnCut, bttnCopy, bttnPaste; 打开异常处理:
catch(Exception ex) {
JOptionPane.showMessageDialog (
- 7 -
this,
ex.getMessage(), \打开失败\
JOptionPane.ERROR_MESSAGE ); }
退出异常处理: if(txtChanged) {
int res;
res = JOptionPane.showConfirmDialog (
this,
\保存更改?\\退出\
JOptionPane.YES_NO_CANCEL_OPTION );
if(res == JOptionPane.YES_OPTION) {
saveFile(); }
else if(res == JOptionPane.CANCEL_OPTION) {
return; }
内容(3)
创建并且初始化盘区单位
private char whoseTurn = 'X';
创建并且初始化状态标签
private Cell[][] cells = new Cell[3][3];
private JLabel jlblStatus = new JLabel(\
确认玩家顺序
public TicTacToe() {
JPanel p = new JPanel(new GridLayout(3, 3, 0, 0)); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++)
p.add(cells[i][j] = new Cell()); 判断盘区单位全部是否被棋子占领 public boolean isFull() {
- 8 -
for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++)
if (cells[i][j].getToken() == ' ') return false;
return true; }
判断有指定的象征的玩家胜利
public boolean isWon(char token) { for (int i = 0; i < 3; i++)
if ((cells[i][0].getToken() == token) && (cells[i][1].getToken() == token) && (cells[i][2].getToken() == token)) { return true; }
for (int j = 0; j < 3; j++)
if ((cells[0][j].getToken() == token) && (cells[1][j].getToken() == token) && (cells[2][j].getToken() == token)) { return true; }
if ((cells[0][0].getToken() == token) && (cells[1][1].getToken() == token) && (cells[2][2].getToken() == token)) { return true; }
if ((cells[0][2].getToken() == token) && (cells[1][1].getToken() == token) && (cells[2][0].getToken() == token)) { return true; }
return false; }
2.程序代码 内容(1):
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
- 9 -
public class Calculator extends Frame implements ActionListener, WindowListener
{
private Container container; private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField; //计算结果显示区 private String lastCommand; //保存+,-,*,/,=命令0 private double result; //保存计算结果 private boolean start; //判断是否为数字的开始 private JMenuBar menubar;
private JMenuItem m_exit,m2_ejz,m2_bjz; private Dialog dialog;
private Label label_dialog; private JButton button_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2,
button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,
button_plus,button_minus,button_multiply,button_divide,button_point,
button_equal,button_log,button_tan,button_cos,button_sin,button_exp;
public Calculator() //构造方法设置布局、为按钮注册事件监听器
{
super(\
this.setLocation(240,200); this.setSize(350,300); this.setResizable(true);
this.setLayout(new GridLayout(7,1));
this.addmyMenu(); //调用成员方法添加菜单 displayField=new JTextField(30); this.add(displayField);
displayField.setEditable(true);
start=true; result=0;
lastCommand = \
JPanel panel0=new JPanel();
panel0.setLayout(new GridLayout(1,4,4,4));
JPanel panel1=new JPanel();
panel1.setLayout(new GridLayout(1,5,4,4)); this.add(panel1);
button_sqrt=new JButton(\ button_plusminus=new JButton(\
- 10 -
button_exp=new JButton(\ button_CE=new JButton(\
button_cancel=new JButton(\
JPanel panel2=new JPanel();
panel2.setLayout(new GridLayout(1,5,4,4)); this.add(panel2);
button_7=new JButton(\ button_8=new JButton(\ button_9=new JButton(\ button_log=new JButton(\ button_divide=new JButton(\
JPanel panel3=new JPanel();
panel3.setLayout(new GridLayout(1,5,4,4)); this.add(panel3);
button_4=new JButton(\ button_5=new JButton(\ button_6=new JButton(\ button_tan=new JButton(\ button_multiply=new JButton(\
JPanel panel4=new JPanel();
panel4.setLayout(new GridLayout(1,5,4,4)); this.add(panel4);
button_1=new JButton(\ button_2=new JButton(\ button_3=new JButton(\ button_cos=new JButton(\ button_minus=new JButton(\
JPanel panel5=new JPanel();
panel5.setLayout(new GridLayout(1,5,4,4)); this.add(panel5);
button_0=new JButton(\ button_point=new JButton(\ button_equal=new JButton(\ button_sin=new JButton(\ button_plus=new JButton(\
panel1.add(button_sqrt);
panel1.add(button_plusminus); panel1.add(button_exp); panel1.add(button_CE); panel1.add(button_cancel); panel2.add(button_7); panel2.add(button_8); panel2.add(button_9); panel2.add(button_log);
panel2.add(button_divide); panel3.add(button_4);
- 11 -
panel3.add(button_5); panel3.add(button_6); panel3.add(button_tan);
panel3.add(button_multiply); panel4.add(button_1); panel4.add(button_2); panel4.add(button_3); panel4.add(button_cos); panel4.add(button_minus); panel5.add(button_0); panel5.add(button_point); panel5.add(button_equal); panel5.add(button_sin); panel5.add(button_plus);
button_sqrt.addActionListener(this);
button_plusminus.addActionListener(this); button_exp.addActionListener(this); button_CE.addActionListener(this); button_cancel.addActionListener(this); button_7.addActionListener(this); button_8.addActionListener(this); button_9.addActionListener(this); button_log.addActionListener(this); button_divide.addActionListener(this); button_4.addActionListener(this); button_5.addActionListener(this); button_6.addActionListener(this); button_tan.addActionListener(this);
button_multiply.addActionListener(this); button_1.addActionListener(this); button_2.addActionListener(this); button_3.addActionListener(this); button_cos.addActionListener(this); button_minus.addActionListener(this); button_0.addActionListener(this); button_point.addActionListener(this); button_equal.addActionListener(this); button_sin.addActionListener(this); button_plus.addActionListener(this);
this.addWindowListener(new WinClose()); //器
this.setVisible(true); }
private void addmyMenu() //菜单的添加 {
JMenuBar menubar=new JMenuBar(); this.add(menubar);
JMenu m1=new JMenu(\选项\
- 12 -
注册窗口监听
JMenu m2=new JMenu(\进制转换\
JMenuItem m1_exit=new JMenuItem(\退出\ m1_exit.addActionListener(this);
JMenuItem m2_ejz=new JMenuItem(\二进制\ m2_ejz.addActionListener(this);
JMenuItem m2_bjz=new JMenuItem(\八进制\ m2_bjz.addActionListener(this); JMenu m3 = new JMenu(\帮助\
JMenuItem m3_Help = new JMenuItem(\作者\ m3_Help.addActionListener(this);
dialog = new Dialog(this,\关于\模式窗口 dialog.setSize(240,80);
label_dialog = new Label(\标签的字符串为空,居中对齐
dialog.add(label_dialog);
dialog.addWindowListener(this); //为对话框注册窗口事件监听器
m1.add(m1_exit); menubar.add(m1); m2.add(m2_ejz); m2.add(m2_bjz); menubar.add(m2); m3.add(m3_Help); menubar.add(m3); }
public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法
{
if(e.getSource().equals(button_1)||e.getSource().equals(button_2)||
e.getSource().equals(button_3)||e.getSource().equals(button_4)|| e.getSource().equals(button_5)|| e.getSource().equals(button_6)|| e.getSource().equals(button_7)|| e.getSource().equals(button_8)|| e.getSource().equals(button_9) ||e.getSource().equals(button_0)|| e.getSource().equals(button_point)||e.getSource().equals(button_plusminus)||
e.getSource().equals(button_cancel)||e.getSource().equals(button_CE))
{ //非运算符的处理方法
String input=e.getActionCommand();
if (start) {
displayField.setText(\ start=false;
if(input.equals(\
displayField.setText(displayField.getText()+\
}
- 13 -
if(!input.equals(\ {
String str=displayField.getText();
if(input.equals(\退格键的实现方法 {
if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1));
} else if(input.equals(\清零键的实现方法
{
displayField.setText(\ start=true; } else
displayField.setText(displayField.getText()+input);
} }
else if (e.getActionCommand()==\二进制\二进制的转换 {
int n=Integer.parseInt(displayField.getText()); displayField.setText(Integer.toBinaryString(n)); }
else if (e.getActionCommand()==\八进制\八进制的转换 {
int n=Integer.parseInt(displayField.getText()); displayField.setText(Integer.toOctalString(n)); }
else if (e.getActionCommand()==\退出\选项中退出的处理方法
{
System.exit(0); }
else if (e.getActionCommand()==\作者\按下'帮助'菜单栏中用法的处理方法
{
label_dialog.setText(\熊瑛琪制作 \\n学号:080320618\ dialog.setLocation(400,250); dialog.setVisible(true); }
else //各运算符的识别 {
String command=e.getActionCommand(); if(start) {
lastCommand=command; } else {
- 14 -
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command; start=true; } } }
public void calculate(double x) //各运算符的具体运算方法
{
double d=0;
if (lastCommand.equals(\ result+= x;
else if (lastCommand.equals(\ result-=x;
else if (lastCommand.equals(\ result*=x;
else if (lastCommand.equals(\ result/=x;
else if (lastCommand.equals(\ result=x;
else if (lastCommand.equals(\ {
d=Math.sqrt(x); result=d; }
else if (lastCommand.equals(\ {
d=Math.exp(x); result=d; }
else if (lastCommand.equals(\ {
d=Math.log(x); result=d; }
else if (lastCommand.equals(\ {
d=Math.tan(x); result=d; }
else if (lastCommand.equals(\ {
d=Math.cos(x); result=d; }
else if (lastCommand.equals(\ {
d=Math.sin(x); result=d;
- 15 -
}
displayField.setText(\ }
public void windowClosing(WindowEvent e) {
if(e.getSource()==dialog)
dialog.setVisible(false); //隐藏对话框 else
System.exit(0); }
public void windowOpened(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { }
public static void main(String args[]) {
Calculator calculator=new Calculator(); } }
class WinClose implements WindowListener {
public void windowClosing(WindowEvent e) //单击窗口关闭按钮时触发并执行实现窗口监听器接口
{
System.exit(0); //结束程序运行 }
public void windowOpened(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowIconified(WindowEvent e){} public void windowDeiconified(WindowEvent e){} }
内容(2):
import java.awt.*;
import java.awt.event.*; import javax.swing.*; import java.io.*;
class MyPad extends JFrame implements ActionListener, KeyListener {
boolean txtChanged = false; String fname = \JMenuBar mbar;
- 16 -
JMenu mnuFile, mnuEdit, mnuHelp;
JMenuItem fileNew, fileOpen, fileSave, fileExit;
JMenuItem editCut, editCopy, editPaste, editSelectAll, editDel; JMenuItem helpAbout; JToolBar tlbr;
ImageIcon iconNew, iconOpen, iconSave; ImageIcon iconCut, iconCopy, iconPaste; JButton bttnNew, bttnOpen, bttnSave; JButton bttnCut, bttnCopy, bttnPaste;
JTextArea txtPad; Container c; MyPad() {
initComponents(); setTitle(\setSize(400,300); setVisible(true);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WinHandler()); }
void initComponents() {
c = getContentPane();
c.setLayout(new BorderLayout()); initMenu();
txtPad = new JTextArea();
Font f = new Font(\txtPad.setFont(f);
txtPad.addKeyListener(this);
JScrollPane jscroll = new JScrollPane(txtPad); c.add(jscroll, BorderLayout.CENTER); }
void initMenu() {
mbar = new JMenuBar();
mnuFile = new JMenu(\文件\mnuEdit = new JMenu(\编辑\mnuHelp= new JMenu(\帮助\
fileNew = new JMenuItem(\新建\fileOpen= new JMenuItem(\打开\fileSave= new JMenuItem(\保存\fileExit = new JMenuItem(\退出\editCut = new JMenuItem(\剪切\editCopy= new JMenuItem(\复制\editPaste = new JMenuItem(\黏贴\editSelectAll = new JMenuItem(\全选\editDel= new JMenuItem(\删除\helpAbout= new JMenuItem(\关于\
- 17 -
mnuFile.add(fileNew); mnuFile.add(fileOpen); mnuFile.add(fileSave); mnuFile.add(fileExit); mnuEdit.add(editCut); mnuEdit.add(editCopy); mnuEdit.add(editPaste); mnuEdit.addSeparator(); mnuEdit.add(editSelectAll); mnuEdit.add(editDel); mnuHelp.add(helpAbout); mbar.add(mnuFile); mbar.add(mnuEdit); mbar.add(mnuHelp); setJMenuBar(mbar);
fileNew.addActionListener(this); fileOpen.addActionListener(this); fileSave.addActionListener(this); fileExit.addActionListener(this); editCut.addActionListener(this); editCopy.addActionListener(this); editPaste.addActionListener(this); editSelectAll.addActionListener(this); editDel.addActionListener(this); helpAbout.addActionListener(this); }
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if(src.equals(bttnNew) || src.equals(fileNew)) {
newFile(); }
else if(src.equals(bttnOpen) || src.equals(fileOpen)) {
openFile(); }
else if(src.equals(bttnSave) || src.equals(fileSave)) {
saveFile(); }
else if(src.equals(fileExit)) {
exitFile(); }
else if(src.equals(bttnCut) || src.equals(editCut)) {
txtPad.cut(); }
- 18 -
else if(src.equals(bttnCopy) || src.equals(editCopy)) {
txtPad.copy(); }
else if(src.equals(bttnPaste) || src.equals(editPaste)) {
txtPad.paste(); }
else if(src.equals(editSelectAll)) {
txtPad.selectAll(); }
else if(src.equals(editDel)) {
txtPad.replaceSelection(\}
else if(src.equals(helpAbout)) {
aboutHelp(); } }
void newFile() {
if(txtChanged) {
int res;
res = JOptionPane.showConfirmDialog ( this,
\保存修改?\\新建文件\
JOptionPane.YES_NO_CANCEL_OPTION );
if(res == JOptionPane.YES_OPTION) {
saveFile(); }
else if(res == JOptionPane.CANCEL_OPTION) {
return; } }
fname = \
txtChanged = false; txtPad.setText(\
- 19 -
}
void saveFile() {
if(fname.equals(\{
JFileChooser jfc = new JFileChooser(); int res;
res = jfc.showSaveDialog(this); if(res == jfc.APPROVE_OPTION) {
fname = jfc.getSelectedFile().getAbsolutePath(); } else {
return; } } try {
FileWriter fw = new FileWriter(fname); fw.write(txtPad.getText()); fw.flush(); fw.close();
txtChanged = false; }
catch(Exception ex) {
JOptionPane.showMessageDialog ( this,
ex.getMessage(), \保存失败\
JOptionPane.ERROR_MESSAGE ); } }
void openFile() {
int res;
JFileChooser jfc = new JFileChooser(\res = jfc.showOpenDialog(this); if(res == jfc.APPROVE_OPTION) {
fname = jfc.getSelectedFile().getAbsolutePath();
- 20 -
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 井字
- 计算器
- 记事本
- 实验
- 报告
- 游戏
- java
- 智慧厕所整体解决方案 - 图文
- 河南省中小学教师职工作政策解读
- 广东省深圳市2015届高三上学期第一次五校联考文综 - 图文
- 东营市驾考中心C1科目二心得 - 图文
- 《管理会计(第二版)》(潘飞)习题答案
- 债券久期、免疫方法与凸性
- 掩耳盗铃教案
- 2015-2016学年高二生物人教版必修3课时作业第2章第9课时 免疫调节
- 南方低山丘陵复习
- 《面向对象程序设计》复习(2)
- VFP2002-2011年二级历年考试真题
- 1109政府经济学练习题-答案
- 国美大争下的中国公司治理启示
- 会计从业资格会计实务操作题每日一练(2016.1.7)
- 电缆局放试验的特点和要求
- 个人理财教学大纲
- 犬猫子宫卵巢摘除术
- 常用词句整理50余组写心得体会值得参考的排比句(学习参考)
- 计算机组成原理试卷及其答案(A卷5套)
- 利用微流控装置合成单分散胶壳和功能型微凝胶