java课程设计实验报告.docx
《java课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《java课程设计实验报告.docx(47页珍藏版)》请在冰点文库上搜索。
java课程设计实验报告
一实验目的
加深学生对课堂讲授内容的理解,从计算机语言的基本概念、程序设计的基本方法、语法规则等方面加深理解,打好程序设计、开发软件的良好基础。
在上机实验中,提高学生对Java语言各部分内容的综合使用能力,逐步掌握Java语言程序设计的规律与技巧。
在对Java程序的调试过程中,提高学生分析程序中出现的错误和排除这些错误的能力。
通过上机实践,加深学生对计算机软件运行环境,以及对操作系统与计算机语言支持系统相互关系的了解。
二、实验要求
(1)问题描述准确、规范;
(2)程序结构合理,调试数据准确、有代表性;
(3)界面布局整齐,人机交互方便;
(4)输出结果正确;
(5)正确撰写实验报告。
三、设计内容
1、计算器
计算器要有GUI界面,用户可以输入所需计算的数值,可以进行加、减、乘、除四种最基本的运算和混合运算,可以求一个数值的平方及倒数,可以进行阶乘运算,要能运算小数,并且不会产生精度损失,在必要情况下,可以进行四舍五入的运算。
允许正负数间的运算。
要求使用Applet实现该计算器,当用浏览器运行程序时,点击网页中的按钮,则计算器弹出,浮在网页上,再次点击按钮时,计算器消失。
2、文本编辑器
可以设置文本的字体、大小、颜色等基本参数,可以读取计算机中TXT文件,可以生成一个新的TXT文件。
其他功能参照windows的文本编辑器。
四.实验步骤
(1)上机实验之前,为课程设计的内容作好充分准备。
对每次上机需要完成的任务进行认真的分析,画出程序流程图,手工写出符合任务要求的程序清单,准备出调试程序使用的数据,以便提高上机实验的效率。
(2)按照实验目的和实验内容进行上机操作。
录入程序,编译调试,反复修改,直到使程序正常运行,得出正确的输出结果为止。
(3)根据实验结果,写出实验报告。
五.源代码及运行结果
1.计算器源代码
importjava.awt.*;
importjava.awt.event.*;
importjava.lang.*;
importjavax.swing.*;
publicclassjisuanqiextendsWindowAdapter
{
//创建三个面板
Panelp1=newPanel();
Panelp2=newPanel();
Panelp3=newPanel();
TextFieldtxt;
privateButton[]b=newButton[21];
privateStringss[]={"7","8","9","/","清空","4","5","6","*","1/x","1","2",
"3","-","平方","0",".","=","+","n!
","关闭"};
staticdoublea,sum=1;
staticStrings,str;//定义变量创建对像
//创建文本框
publicstaticvoidmain(Stringargs[])
{
(newjisuanqi()).frame();
}
publicvoidframe()
{
//设置文本框的名称
Framefm=newFrame("简单计算器");
for(inti=0;i<=20;i++)
{
b[i]=newButton(ss[i]);
}
for(inti=0;i<=19;i++)
{
p2.add(b[i]);//创建按钮并添加到P2
}
//按钮20背景色黄色
b[20].setBackground(Color.yellow);
txt=newTextField("");
txt.setEditable(false);//不能编辑文本框里面的内容
txt.setBackground(Color.white);
for(inti=0;i<=20;i++)
{
b[i].addActionListener(newbuttonlistener());//添加监听器
}
//设置关闭按钮
b[20].addActionListener(newclose());
fm.addWindowListener(this);
p1.setLayout(newBorderLayout());//设置布局管理器
p1.add(txt,"North");//p1面板放到区域南部
p2.setLayout(newGridLayout(4,5,2,2));//布局:
四行五列,间隔为二
p2.setBackground(Color.red);
p3.setLayout(newBorderLayout());
p3.add(b[20]);
将三个面板分别放到不同位置
fm.add(p1,"North");
fm.add(p2,"Center");
fm.add(p3,"South");
fm.pack();
fm.setVisible(true);//都是些窗中设置添加相关组件和监听器
}
publicvoidwindowClosing(WindowEvente){
System.exit(0);//退出系统
}
classbuttonlistenerimplementsActionListener
{
//编写监听器事件通过按键得出给果
publicvoidactionPerformed(ActionEvente)
{
Buttonbtn=(Button)e.getSource();
if(btn.getLabel()=="=")
{
jisuan();
str=String.valueOf(a);
txt.setText(str);//显示当前数字
s="";//清零
}
elseif
(btn.getLabel()=="+")
{
//设置一个方法
jisuan();
txt.setText("");
s="+";
}
elseif
(btn.getLabel()=="-")
{
jisuan();
txt.setText("");
s="-";
}
elseif
(btn.getLabel()=="/")
{
jisuan();
txt.setText("");
s="/";
}
elseif
(btn.getLabel()=="*")
{
jisuan();
txt.setText("");
s="*";
}
elseif
(btn.getLabel()=="平方")
{
a=Double.parseDouble(txt.getText());
a*=a;
txt.setText(""+String.valueOf(a));
}
elseif
(btn.getLabel()=="n!
")
{
a=Double.parseDouble(txt.getText());
sum=1;
for(inti=1;i<=a;i++)
sum=sum*i;
txt.setText(""+String.valueOf(sum));
}
elseif
btn.getLabel()=="1/x")
{
a=Double.parseDouble(txt.getText());
txt.setText(""+String.valueOf(1/a));
}
else
{
txt.setText(txt.getText()+btn.getLabel());
if(btn.getLabel()=="清空")
txt.setText("");
}
}
publicvoidjisuan(){//编写具体计算方法
if(s=="+")
a+=Double.parseDouble(txt.getText());
elseif(s=="-")
a-=Double.parseDouble(txt.getText());
elseif(s=="*")
a*=Double.parseDouble(txt.getText());
elseif(s=="/")
a/=Double.parseDouble(txt.getText());
else
a=Double.parseDouble(txt.getText());
}
}
}
classcloseimplementsActionListener
{
//退出
publicvoidactionPerformed(ActionEvente)
{
System.exit(0);
}
}
.2.计算器运行界面
(1)计算器主界面
(2)面板的实现
1.创建三个面板分别是显示数字的面板、按钮的面板和“关闭”的面板
Panelp1=newPanel();
Panelp2=newPanel();
Panelp3=newPanel();
2.创建一个文本框参数
TextFieldtxt;
3.创建一群按钮参数并给按钮赋值
privateButton[]b=newButton[21];
privateStringss[]={"7","8","9","/","清空","4","5","6","*","1/x","1","2",
"3","-","平方","0",".","=","+","n!
","关闭"};
4.创建文本框
publicstaticvoidmain(Stringargs[])
{
(newjisuanqi()).frame();
}
5.设置文本框方法
publicvoidframe()
{
//设置文本框的名称
Framefm=newFrame("简单计算器");
6.设置按钮
for(inti=0;i<=20;i++)
{
b[i]=newButton(ss[i]);
}
7.设将按钮添加到面板
for(inti=0;i<=19;i++)
{
p2.add(b[i]);//创建按钮并添加到P2
}
8.设置按钮20背景色黄色
b[20].setBackground(Color.yellow);
9.创建文本框,并规定不能编辑内容和背景为白色
txt=newTextField("");
txt.setEditable(false);
txt.setBackground(Color.white);
10.为按钮添加监听器
for(inti=0;i<=20;i++)
{
b[i].addActionListener(newbuttonlistener());//添加监听器
}
11.设置“关闭”按钮可以关闭界面并设置监听器
b[20].addActionListener(newclose());
fm.addWindowListener(this);
12.设置布局
p1.setLayout(newBorderLayout());//设置布局管理器
p1.add(txt,"North");//p1面板放到区域南部
p2.setLayout(newGridLayout(4,5,2,2));//布局:
四行五列,间隔为二
p2.setBackground(Color.red);
p3.setLayout(newBorderLayout());
p3.add(b[20]);
13.将三个面板分别放到不同位置
fm.add(p1,"North");
fm.add(p2,"Center");
fm.add(p3,"South");
fm.pack();
fm.setVisible(true);//都是些窗中设置添加相关组件和监听器
}
14.退出系统
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
(3)将按钮添加到计算这个事件中
1.编写监听器事件通过按键得出给果
publicvoidactionPerformed(ActionEvente)
{
//将按钮赋予这个事件中
Buttonbtn=(Button)e.getSource();
2.如果点击“=”这个按钮,将出现当前数字
if(btn.getLabel()=="=")
{
jisuan();
str=String.valueOf(a);
txt.setText(str);//显示当前数字
s="";//清零
}
3.如果点击“+”“-”“*”“/”分别完成一个方法并将结果显示到文本框
elseif
(btn.getLabel()=="+")
{
//设置一个方法
jisuan();
txt.setText("");
s="+";
}
elseif
(btn.getLabel()=="-")
{
jisuan();
txt.setText("");
s="-";
}
elseif
(btn.getLabel()=="/")
{
jisuan();
txt.setText("");
s="/";
}
elseif
(btn.getLabel()=="*")
{
jisuan();
txt.setText("");
s="*";
}
4.如果点击“平方”则当前数字与原数字形成即完成相关方法
结果显示最终的数字
elseif
(btn.getLabel()=="平方")
{
a=Double.parseDouble(txt.getText());
a*=a;
txt.setText(""+String.valueOf(a));//显示a
}
5.当输入“n!
”,就用for循环完成阶乘,此方法属于c语言基础方法,
不做相关解释
elseif
(btn.getLabel()=="n!
")
{
a=Double.parseDouble(txt.getText());
sum=1;//归一
for(inti=1;i<=a;i++)
sum=sum*i;
txt.setText(""+String.valueOf(sum));//文本框中显示“sum”的数值
}
6.当输入“1/x”时,显示1/a。
elseif
btn.getLabel()=="1/x")
{
a=Double.parseDouble(txt.getText());
txt.setText(""+String.valueOf(1/a));
}
7.如果输入“清空”文本框成为空文本框
else
{
txt.setText(txt.getText()+btn.getLabel());
if(btn.getLabel()=="清空")
txt.setText("");
}
(4)设置“jisuan”方法
1.编写具体计算方法其实这些方法可以放到上面事件的实现中,从“平方”,“n!
”,“1/x”就可以看出。
但为了程序的美观和高识别性,我们传建一个方法来实现
if(s=="+")
a+=Double.parseDouble(txt.getText());
elseif(s=="-")
a-=Double.parseDouble(txt.getText());
elseif(s=="*")
a*=Double.parseDouble(txt.getText());
elseif(s=="/")
a/=Double.parseDouble(txt.getText());
else
a=Double.parseDouble(txt.getText());
3.文本编辑器源代码
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjavax.swing.event.*;
importjava.io.*;
publicclassTextEditor
{
publicstaticvoidmain(Stringargs[])
{
TextFrameframe=newTextFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
classTextFrameextendsJFrame
{
//文件中的参数
Filefile=null;
staticStringd,k,s;
//编辑中的参数
Stringselected,text;
//格式中的参数
StringsizeNames[]={"5","10","15","20","25","30","35","40","45","50"};
StringcolorNames[]={"黑色","红色","蓝色","绿色","白色","黄色","粉红"};
StringfontNames[]={"宋体","华文行楷","隶书","黑体","仿宋","华文彩云","楷体","方正姚体"};
StringstyleNames[]={"粗体","斜体"};
publicTextFrame()
{
//设置文本框大小、名称
setTitle("西西牌文本编辑器");
setSize(400,400);
addWindowListener(newLogoutAction());
filechooser=newJFileChooser();//创建一个文件选择器
//创建文本区
t1=newJTextArea(0,0);//面板与文本框无间隙
scrollPane=newJScrollPane(t1);//设置滚动条
getContentPane().add(scrollPane);
//创建菜单栏
menuBar=newJMenuBar();
setJMenuBar(menuBar);
//文件
files=newJMenu("文件(F)");
files.setMnemonic('F');//设置快捷键
newItem=newJMenuItem("新建(N)",'N');
openItem=newJMenuItem("打开(O)...",'O');
saveItem=newJMenuItem("保存(S)",'S');
exitItem=newJMenuItem("退出(E)",'E');
//设置监听器
newItem.addActionListener(newFileListener());
openItem.addActionListener(newFileListener());
saveItem.addActionListener(newFileListener());
exitItem.addActionListener(newFileListener());
//设置加速器
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
//添加按钮到文件菜单栏
files.add(newItem);
files.add(openItem);
files.add(saveItem);
files.add(exitItem);
//编辑
edit=newJMenu("编辑(E)");
edit.setMnemonic('E');
//创建菜单项
cutItem=newJMenuItem("剪切(T)");
copyItem=newJMenuItem("复制(C)");
pasteItem=newJMenuItem("粘贴(P)");
deleteItem=newJMenuItem("删除(L)");
selectAllItem=newJMenuItem("全选(A)");
//设置加速器
cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
deleteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
selectAllItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
//设置监听器
cutItem.addActionListener(newEditListener());
copy