本文围绕Java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对计算器程序进行需求分析、概要设计、详细设计,最后使用Java编程实现的全过程。
java语言,是目前比较流行的编程语言。经过10多年的发展,java已经渗透到全球每个角落。在当今这个网络的时代,java语言在网络编程方面的优势使得网络编程有了更好的选择。Java语言最令人瞩目的特点是具有跨平台性,使其不受平台不同的影响,并得到了广泛的应用。
设计内容:设计GUI界面的计算器。用户可以通过鼠标依次输入参加计算的数值,进行加、减、乘、除等混合运算。
设计要求:
1.系统界面的上面是数字输入对话框,用来显示所输入的数字和运行的结果。
2.系统界面下面的左侧是记忆+-*/。
3.系统界面下面的中部是数字输入按钮,用来输入数字。
4.系统界面下面的右侧是运算符号按钮,用来实现具体的运算。
关键字:java面向对象计算器网络编程
第一章概述
1.1设计目的
计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的功能。本论文采用java编程语言实现计算器功能。该计算器大大的降低了数字计算的难度并且提高了计算的准确度和精确度。使用简单,适合广大工作人员和中小学生使用。
1.2计算器系统概述
标准计算器的界面采用“图形界面程序设计(GUI)”。GUI为用户和应用程序之间的交互提供了直观、方便的交流方式。用户使用鼠标、键盘操作图形界面上的按钮、菜单等元素湘计算机系统发送命令,系统运行的结果以图形的方式显示给用户。
编写java计算器主要使用了Swing组件和AWT布局类。Swing组件主要包括按钮、标签、文本输入类、等组件,AWT主要运用了其中的布局管理器。
1.2.1Swing组件
Swing组件的按钮用JButton类表示,计算器的界面主要由JButton按钮组成,以响应用户的操作;
Swing中的标签用JLabel类表示,标签上可以显示图标和文本;
Swing的文本输入类包括文本框JTextField、文本区JTextArea和密码框JPasswordField。
本计算器中仅仅使用了文本框JTextField,用于文本数字的显示。
1.2.2AWT组件
布局管理器管理组件如何放置在容器中,AWT中最常用的四种布局类:FlowLayout、BorderLayout、GridLayout、CardLayout。本项目主要采用了GridLayout布局。
1.3功能模块设计
★标准计算器。
以下是标准计算器的各项功能:
(1)加法:
两个及两个以上数据进行加法操作,可以为小数形式。
(2)减法:
两个及两个以上数据进行减法操作,可以为负数形式。
(3)乘法:
两个及两个以上数据进行乘法操作。
(4)除法:
两个及两个以上数据进行除法操作。
(5)开平方:
对任意数开平方,可以为小数(不能为负数)。
(6)求倒数:
对任意数求倒数,0除外。
(7)求百分数:
对任意一个数进行百分号操作。
1.4系统功能图。
标准计算器
求倒数
开平方
求百分号
加法
减法
乘法
除法
图1.1计算器系统功能图
第二章项目设计说明
2.1标准计算器设计界面
图2.1计算器设计界面
2.2标准计算器设计主要代码
标准计算器主要由一个菜单栏、一个文本框、27个按钮组成。
2.2.1整体框架代码
JFramef=newJFrame("标准计算器");
f.setLocation(400,300);
ContainercontentPane=f.getContentPane;
2.2.2菜单栏代码
图2.2菜单栏
JMenuBarmBar=newJMenuBar;
mBar.setOpaque(true);
mEdit=newJMenu("编辑(E)");
mEdit.setMnemonic(KeyEvent.VK_E);
mCopy=newJMenuItem("复制(C)");
mEdit.add(mCopy);
mPaste=newJMenuItem("粘贴(P)");
mEdit.add(mPaste);
mView=newJMenu("查看(V)");
mView.setMnemonic(KeyEvent.VK_V);
mView.add(newJMenuItem("标准型"));
mView.add(newJMenuItem("科学型"));
mView.addSeparator;
mView.add(newJMenuItem("查看分组"));
mHelp=newJMenu("帮助(H)");
mHelp.setMnemonic(KeyEvent.VK_H);
mHelp.add(newJMenuItem("帮助主题"));
mHelp.addSeparator;
mHelp.add(newJMenuItem("关于计算器"));
mBar.add(mEdit);
mBar.add(mView);
mBar.add(mHelp);
f.setJMenuBar(mBar);
contentPane.setLayout(newBorderLayout);
2.2.3文本框代码
图2.3文本框
JPanelpTop=newJPanel;
tResult=newJTextField("0.",26);
tResult.setHorizontalAlignment(JTextField.RIGHT);
tResult.setEditable(false);
pTop.add(tResult);
contentPane.add(pTop,BorderLayout.NORTH);
2.2.4计算器各功能键代码
图2.4各功能键图
bOther=newJButton("MC");
bOther.addActionListener(this);
bOther.setForeground(Color.red);//字体颜色
bOther.setMargin(newInsets(3,2,3,2));//按钮边框和标签之间的空白
pLeft.add(bOther);
bOther=newJButton("MR");
bOther.setForeground(Color.red);
bOther.setMargin(newInsets(3,2,3,2));
bOther=newJButton("MS");
bOther=newJButton("M+");
pBottom.add(pLeft,BorderLayout.WEST);
JPanelpRight=newJPanel;
pRight.setLayout(newBorderLayout);
JPanelpUp=newJPanel;
pUp.setLayout(newGridLayout(1,3,3,0));
bOther=newJButton("BackSpace");
bOther.setMargin(newInsets(3,0,3,5));
pUp.add(bOther);
bOther=newJButton("CE");
bOther=newJButton("C");
2.2.5数字键及运算符号代码
图2.5数字键图
JPanelpDown=newJPanel;
pDown.setLayout(newGridLayout(4,5,3,2));
bNumber=newJButton("7");
bNumber.setForeground(Color.blue);
bNumber.addActionListener(this);
bNumber.setMargin(newInsets(3,3,3,3));
pDown.add(bNumber);
(注:其他数字键、运算符号键与“7”定义相同。)
第三章程序运行效果
3.1加法运算
本计算器可以实现多个运算数相加,例如:1+2+3+4
计算结果为10,所有数据均为double类型。
3.2减法运算
本计算器可以实现多个运算数相减(正负数),例如:6-5-3-1
计算结果为-3,数据类型为double类型。
3.3乘法运算
本计算器可以实现多个运算数相乘,例如2*3*4*5
运算结果为120,数据类型为double类型。
3.4除法运算
本计算器可以实现多个运算数相除(除数不为0)例如:15/3/5/2
运算结果为0.5,数据类型为double类型
当除数为0时,计算器自动报错,例如:15/0
3.5开方运算
当被开方数为非负数时,计算器自动开方,例如:25开方
运算结果为5.
3.6求倒数运算
当按下求倒数键时,计算器自动为运算数求其倒数。例如:5的倒数
运算结果为0.2.
第四章项目重难点分析
4.1重难点分析
Java计算器中整体框架的建立,按钮的设置,整体布局在操作过程中都是很顺畅的。计算器的关键步骤也是重点是实现计算器的计算方法。
实现两个数的加减乘除等运算是比较简单的,但是一个计算器需要做到的是实现多个运算数的运算。此时就用到了我在项目一开始定义的两个数据
每执行一次运算操作就把运算结果赋值给操作数1“op1”,并判断下一步操作是“=”或者“其他运算符”,决定下一步计算器的操作。
4.2程序中存在的问题
(1)菜单栏中虽然设置了编辑、查看、帮助等选项,但是项目中并没有实际的功能。
(2)程序中设置了内存的有关操作但是并没有达到其预期的功能。
(3)百分号的实际功能并没有实现。
(4)当被开方数是负数时,计算器并不能给出错误提示。
[参考文献]
《Java编程实用技术与案例》译作者:杨绍方
《软件工程Java语言实现SoftwareEngineeringwithJava》StephenR.Schach译者:袁兆山等
程序员天堂(英文网站大量的程序,库,包)
一、引言
二、课题内容
三、系统程序要求
1、设计一个职工信息管理系统
2、要求包括职工信息包括职工号、姓名、性别、年龄、学历、工资、
3、本系统功能描述:
职工信息录入功能(职工信息用文本保存);
职工信息浏览功能;
查询功能(至少一种查询方式):
按工资查询,按学历查询
4、职工信息删除、修改功能(这两个功能任选)。
四、程序设计思想
该课题要求是输入职工信息,对职工信息进行一系列的处理。既要输入工号又要能查找到与之对应的职工,还要对实现建立,显示,查找,删除,信息的保存。
因为考虑到信息管理信息的实用性,我额外添加了一个“读文件”功能,使利用voidread方法来实现的。这个“读文件模块"!是我用来扩充信息管理系统功能的!可以使系统在用户不用输入信息就能读取先前已存在的职工信息文件。
根据课题要求,我是这样设计的:首先对要实现的功能类型分为三大类——Public类、方法类、信息类;然后细分为六个方法——voidcaidan、voidcreat、voidoutput、voidsearch、voiddelete、voidread。这些类和方法构成了能够实现不同功能的模块,很好地体现了面向对象的Java语言的编程模块块的思想。
五、程序源代码及其解析
packagestaff;//包
importjava.io.*;
publicclassStaffInfomation{
publicstaticvoidmain(finalStringargs)throwsIOException
//throwsIOException用来抛出io的错误,文件读写错误,主要涉及到java的安全机制
{
staffInfostaffOne=newstaffInfo[100];//定义100个类数组
for(intj=0;j<100;j++)staffOne[j]=newstaffInfo;
//建立这100个类的对象
finalwaysstaffTwo=newways;//建立这个方法类的对象
staffTwo.caidan(staffOne);
staffTwo.creat(staffOne);
staffTwo.output(staffOne);
staffTwo.search(staffOne);
staffTwo.delete(staffOne);
//以上几个方法分别对应着:caidan菜单选择、增加(建立)职工信息、输出(预览)、查询、删除这些功能,以数组类为参数
}
classstaffInfo
//职工信息类换句话说就相当与c语言里面的结构体,存放职工的信息
publicStringname;
publicStringnum;
publicStringsex;
publicStringage;
publicStringrecord;
publicStringposition;
publicStringwanges;
publicStringtel;
publicStringaddr;
classways//方法类,主要实现职工信息的建立,显示,查找,删除,信息的保存与读取;这个类是整个程序的操作类。
publicStringrecordkey;
publicinti=0;//i用来存放职工的人数
publicStringfilename="Infomation.txt";
BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));
//此处是JAVA语言中输入数据的基本格式,功能有如C中的scanf函数
voidcaidan(staffInfostaffOne)throwsIOException
finalBufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));
//参看书34页,产生Buf对象;buf是BufferedReader类的变量,此处将读入字符串至buf
intchoice;
do{
System.out.println("☆★☆★☆★☆★电子信息系40706班★贺雪设计★☆★☆★☆\n\n");
System.out.println("┏━━━━━━━━━━━━━━━━━━┓");
System.out.println("┃★职工管理系统主菜单界面★┃");
System.out.println("┣━━━━━━━━━━━━━━━━━━┫");
System.out.println("┃★①.输入职工信息★┃");
System.out.println("┃★②.预览职工信息★┃");
System.out.println("┃★③.查找职工信息★┃");
System.out.println("┃★④.删除职工信息★┃");
System.out.println("┃★⑤.安全退出系统★┃");
System.out.println("┃★⑥.读取数据★┃");
System.out.println("┗━━━━━━━━━━━━━━━━━━┛");
System.out.print("请输入您的选择(0--6):");
choice=Integer.parseInt(buf.readLine);
switch(choice)
case1:creat(staffOne);break;
case2:output(staffOne);break;
case3:search(staffOne);break;
case4:delete(staffOne);break;
case5:save(staffOne);break;
case6:read(staffOne);break;
}while(choice!=0);
voidcreat(staffInfostaffOne)throwsIOException
//这个方法是实现“增加(建立)职工信息”;是建立信息模块
System.out.print("\n请输入职工信息(以0结束)\n");
System.out.print("姓名:\n\n");
staffOne[i].name=buf.readLine;
while(staffOne[i].name.compareTo("0")!=0)
//用数组staffOne[i]来暂存职工的序号,并用compareTo方法确定判定是否应该写入新信息
System.out.print("工号:\n\n");
staffOne[i].num=buf.readLine;
System.out.print("性别:\n\n");
staffOne[i].sex=buf.readLine;
System.out.print("年龄:\n\n");
staffOne[i].age=buf.readLine;
System.out.print("学历:\n\n");
staffOne[i].record=buf.readLine;
System.out.print("职位:\n\n");
staffOne[i].position=buf.readLine;
System.out.print("工资:\n\n");
staffOne[i].wanges=buf.readLine;
staffOne[i].tel=buf.readLine;
System.out.print("住址:\n\n");
staffOne[i].addr=buf.readLine;
i++;
System.out.println("请输入下一个职工信息:\n\n");
voidoutput(staffInfostaffOne)throwsIOException
//这里是实现“输出(预览)职工信息”output的模块
System.out.println("--------------------------------------");
System.out.println("*员工信息表*);
System.out.println("------------------------------------");
System.out.println("---------------------------------");
if(i!=0)
for(intj=0;j
System.out.print(staffOne[j].name+""+staffOne[j].num+""+staffOne[j].sex+"");
System.out.print(staffOne[j].age+""+staffOne[j].record+""+staffOne[j].position+"");
System.out.print(staffOne[j].wanges+""+staffOne[j].tel+""+staffOne[j].addr+"\n");
System.out.println("------------------------------");
elseSystem.out.println("没有员工信息!");
voidsearch(staffInfostaffOne)throwsIOException
//这里是实现职工信息的查询功能的模块
System.out.println("\n请输入您要查找的职工学历:");
recordkey=buf.readLine;
booleanflg=true;
System.out.println("-----------------------------------");
System.out.println("---------------------------------------");
if(recordkey.equals(staffOne[j].record))
//equals是字符串比较函数相等返回true
flg=false;
if(flg)
System.out.println("对不起,查无此人!");
voiddelete(staffInfostaffOne)throwsIOException
System.out.println("\n请输入您要删除的职工姓名:");
//System.out.println("staffOne[j].name="+staffOne[j].name);
//System.out.println("recordkey="+recordkey);
//System.out.println("recordkey.equals(staffOne[j].name)="+recordkey.equals(staffOne[j].name));
if(recordkey.equals(staffOne[j].name))
for(intk=j;k<=i-1;k++)
//利用顺序表的删除算法,删除值之后,再把后面的值往前移位,从而实现删除
staffOne[k].name=staffOne[k+1].name;
staffOne[k].num=staffOne[k+1].num;
staffOne[k].sex=staffOne[k+1].sex;
staffOne[k].age=staffOne[k+1].age;
staffOne[k].record=staffOne[k+1].record;
staffOne[k].position=staffOne[k+1].position;
staffOne[k].wanges=staffOne[k+1].wanges;
staffOne[k].tel=staffOne[k+1].tel;
staffOne[k].addr=staffOne[k+1].addr;
i--;//职工人数要减一
System.out.println("对不起,查无此人!。");
elseSystem.out.println("已经删除!。");
voidsave(staffInfostaffOne)throwsIOException
//数据的保存模块,把输入的职工信息保存到相应的文件里。
intk;
finalFileWriterfw=newFileWriter(filename);
//调用构造函数FileWriter创建FileWriter类的对象。
//文件的读取(书216页13-2-2)
fw.write(i+"\n");//把职工的人数保存到文件中以便下次读取是使用
for(k=0;k
fw.write(staffOne[k].name+"\n");
fw.write(staffOne[k].num+"\n");
fw.write(staffOne[k].sex+"\n");
fw.write(staffOne[k].age+"\n");
fw.write(staffOne[k].record+"\n");
fw.write(staffOne[k].position+"\n");
fw.write(staffOne[k].wanges+"\n");
fw.write(staffOne[k].tel+"\n");
fw.write(staffOne[k].addr+"\n");
fw.close;
System.out.println("\n系统已经安全退出!感谢您的使用!");
System.exit(0);
voidread(staffInfostaffOne)throwsIOException
//这是程序的“读文件模块"!是我自己添加进去扩充系统功能的!可以使系统不用输入信息就能读取先前已存在的职工信息文件。
finalFileReaderfr=newFileReader(filename);
finalBufferedReaderbfr=newBufferedReader(fr);
//关于文件的读取不会的看看书216页13-2-2
if((recordkey=bfr.readLine)!=null)
i=Integer.parseInt(recordkey);
staffOne[j].name=bfr.readLine;这是程序的“读文件模块",
是我自己添加进去扩充系统功
staffOne[j].num=bfr.readLine;能的!可以使系统不用输入信息
就能读取先前已存在的职工信息
staffOne[j].sex=bfr.readLine;文件,从中读取数据。利用了书
staffOne[j].age=bfr.readLine;
staffOne[j].record=bfr.readLine;
staffOne[j].position=bfr.readLine;
staffOne[j].wanges=bfr.readLine;
staffOne[j].tel=bfr.readLine;
staffOne[j].addr=bfr.readLine;
fr.close;
System.out.println("\n数据已经成功读取!");
我自己感觉此次课程设计做得挺成功的,通过这一次,我学到了不少实际编程的知识。
在这次设计开始的第一天开始,我就开始着手修改一个用“职工信息管理系统”的JAVA程序。这一过程太不顺利,调试的时候都没有成功。后来我请教一个学长,在他的指导下我不断的发现错误,并改正它们,功夫不负有心人人,我的程序最后运行成功了。
参考资料
1、《程序天下》
2、洪维恩、何嘉《java2面向对象程序设计》
3、Java天下-java、jsp编程论坛[黑咖啡屋]
4、黄旭等《java课程设计指导》
5、C编程设计(第三版)谭浩强(著)
寻人启事是发布寻人启事寻人,是失踪者及其亲友间相互寻找的一种基本手段,以各种形式的寻人启事对失踪者展开寻找,如:各地粘贴寻人启事宣传单、报纸寻人,广播电台寻人、电视台寻人、以及寻人启事网络寻人找人,都是大部分失踪者及家属...
辞职信,也叫辞职书或辞呈,是辞职者向工作单位辞去职务时写的书信。辞职信是辞职者在辞去职务时的一个必要程序。辞职申请通常由标题、称谓、正文、结语、署名与日期五部分构成。下面是公司员工辞职申请范文,欢迎参阅。...
贸易公司的主要就是商品的买与卖,贸易公司最重要的是信息和业务渠道,要有货源和销售目标,并产生一定的利润。下面是外贸公司介绍范文,欢迎参阅。...
市人民政府关于在铁路压煤改线站建立交桥的函[]委员会:铁路压煤改线工业站,位于我市县镇。由于该站的建设,原有的站西侧的平交道口按设计要求将要封闭。这样就阻断了沟通南北三乡一镇的交通要道,给乡镇企业和商品经济的发展造成了困难。...
公司全体员工:为了加强全体员工的团队意识、增强交流、促进理解,提高全体员工的凝聚力,同时也为了舒缓员工的脑力,体力、精神压力,丰富节假日的生活,经公司领导研究决定进行一次全体员工外出旅游活动。...