JAVA课程设计简单地计算器含代码.docx

上传人:b****3 文档编号:4051507 上传时间:2022-11-27 格式:DOCX 页数:40 大小:114KB
下载 相关 举报
JAVA课程设计简单地计算器含代码.docx_第1页
第1页 / 共40页
JAVA课程设计简单地计算器含代码.docx_第2页
第2页 / 共40页
JAVA课程设计简单地计算器含代码.docx_第3页
第3页 / 共40页
JAVA课程设计简单地计算器含代码.docx_第4页
第4页 / 共40页
JAVA课程设计简单地计算器含代码.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

JAVA课程设计简单地计算器含代码.docx

《JAVA课程设计简单地计算器含代码.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计简单地计算器含代码.docx(40页珍藏版)》请在冰豆网上搜索。

JAVA课程设计简单地计算器含代码.docx

JAVA课程设计简单地计算器含代码

Java程序课程设计任务书

一、主要任务与目标

1.掌握java语言

2.创建一个简单的计算器,具有简单人机交互界面,易于操作,便于进行数据之间的简单运算。

二、具体要求(包括技术要求等):

1)能够实现基本的加、减、乘、除四则运算及开方,乘方运算;

2)如输入数据时,出现错误,可以修改;

3)运算结果能正确显示;可以清零;

4)拥有登陆注册功能;

5)可以查看历史记录;

学习并掌握以下技术:

Java、awt,swing等

熟练使用以下开发工具:

Jdk,JCreate等

实现计算器的上述的功能。

三、计划进度

1.12月28日—12月29日:

搜集资料、查阅文献,确定选题

2.12月30日--12月31日:

需求分析,系统设计,系统功能模块完善

3.1月1日--1月3日:

编程实现系统、系统测试与修改

4.1月4日--1月6日:

课程设计报告撰写

5.1月7日--1月8日:

课程设计报告答辩

四、主要参考文献

[1]耿祥义,张跃平.java大学实用教程(第二版).电子工业出版社.2008年5月

 

第1章引言

1.1课程设计内容

这是我组设计的计算器会有一些独特的功能,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个功能:

(1)数据计算处理功能

点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算及三角函数,开方,乘方运算;如果输入有误时可以按C撤销后重新输入新数据,有储存修改键;

(2)查询功能

查询功能可以迅速方便地查找到相应时段的执行的操作及结果。

(3)计算器使用权限功能

对个人的操作实现口令。

用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全。

未有登录资料的先进行注册。

(4)时间显示功能

在计算器上显示现在的时间,便于把握时间;

1.2任务分工

 

第2章计算器定义

2.1计算器登陆注册界面概述

这是对计算器使用权限功能的添加,这是以后软件开发的一个重点发展方向。

用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全和使用权限的设定。

未有登录资料的必须先进行注册;

2.1.1计算器功能概述

一个计算器如果只有数据计算处理功能,或者是点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算是远远不够的,这太普通了,因此加入三角函数,开方,乘方运算,并且如果输入有误时可以按C撤销后重新输入新数据,有储存修改键;最主要是加入了查询功能:

查询功能可以迅速方便地查找到相应时段的执行的操作及结果。

还有就是计算器使用权限的设定,即登陆注册界面,用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全。

未有登录资料的先进行注册。

2.1.2计算结果的储存与查看功能概述

计算结果有了,但是一般的计算器不能查询之前进行的操作和结果,不得不重新计算,这就带来了不少麻烦,我组设计制作的计算器拥有直接查看历史记录的功能,还附有各个操作的时间,便于确认;

2.2本章小结

这一章介绍了当前进销存管理系统应该具备的功能模块,并提供了市面上比较流行的进销存管理系统作为参考。

在这一章中,我们可以了解什么是进销存管理系统,当前进销存管理系统的市场需求,还有一个进销存管理系统应该的开发目标。

 

第3章计算器的具体实现

界面是系统之间最直接的交互界面,界面的友好性体现了软件设计的质量,并在很大程度上决定了软件是否成功。

3.1界面设计

1.界面设计

界面设计要求用GUI,界面设计中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式。

3.1.1用户登陆界面图

如图3.1.1和3.1.2所示

图3.1.1用户登录模块框图

图3.1.2用户登录界面

loginDialog与compareUserData函数的作用是用户登录界面创建和检测用户登的合法性,并确认用户输入了合法的登录名和口令。

部分代码:

privatevoidloginDialog(){

login=newJDialog();

login.setTitle("登录");

login.setLayout(newFlowLayout());

login.add(newJLabel("用户名:

"));

finalJTextFieldname=newJTextField(10);

login.add(name);

login.add(newJLabel("密码:

"));

finalJPasswordFieldpassword=newJPasswordField(10);

password.setEchoChar('*');

login.add(password);

JButtonconfirm=newJButton("登录");

confirm.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

if(compareUserData(name.getText().trim(),newString(password.getPassword()))){

login.setVisible(false);

f.setVisible(true);

}else{

JOptionPane.showMessageDialog(login,"用户名或密码错误!

","错误提示",JOptionPane.ERROR_MESSAGE);

}

}

});

login.add(confirm);

finalJDialogregDialog=newJDialog(login,"注册",true);

registerDialog(regDialog);

JButtonregister=newJButton("注册");

register.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente){

regDialog.setVisible(true);

}

});

login.add(register);

login.setSize(200,130);

login.setResizable(false);

login.setLocationRelativeTo(null);

login.setVisible(true);

}

privatebooleancompareUserData(Stringname,Stringpassword){

try{

RandomAccessFileout=newRandomAccessFile("user.dat","rw");

Stringfname,fpassword=null;

while(out.getFilePointer()

fname=out.readUTF();

out.readUTF();

fpassword=out.readUTF();

if(fname.equals(name)&&fpassword.equals(password))returntrue;

}

out.close();

}catch(IOExceptione){

e.printStackTrace();

}

returnfalse;

}

3.1.2用户注册界面

如图3.1.3所示

图3.1.3用户注册界面

此registerDialog函数的作用就是注册界面的创建及信息的填写;

部分代码:

privatevoidregisterDialog(finalJDialogregDialog){

Boxbox1=Box.createVerticalBox();

box1.add(newJLabel("用户名:

",JLabel.RIGHT));

box1.add(Box.createVerticalStrut(10));

box1.add(newJLabel("性别:

",JLabel.RIGHT));

box1.add(Box.createVerticalStrut(10));

box1.add(newJLabel("密码:

",JLabel.RIGHT),-1);

box1.add(Box.createVerticalStrut(10));

box1.add(newJLabel("确认密码:

",JLabel.RIGHT));

Boxbox2=Box.createVerticalBox();

finalJTextFieldnameTextField=newJTextField(10);

box2.add(nameTextField);

box2.add(Box.createVerticalStrut(8));

finalCheckboxGroupcbg=newCheckboxGroup();

Boxbox21=Box.createHorizontalBox();

finalCheckboxcb1=newCheckbox("男",cbg,true);

box21.add(cb1);

box21.add(newCheckbox("女",cbg,false));

box2.add(box21);

box2.add(Box.createVerticalStrut(8));

finalJPasswordFieldpass1=newJPasswordField(10);

box2.add(pass1);

box2.add(Box.createVerticalStrut(8));

finalJPasswordFieldpass2=newJPasswordField(10);

box2.add(pass2);

BoxbaseBox=Box.createHorizontalBox();

baseBox.add(box1);

baseBox.add(box2);

regDialog.setLayout(newFlowLayout());

regDialog.add(baseBox);

JButtonconfirm=newJButton("确定");

JButtoncancel=newJButton("取消");

regDialog.add(confirm);

regDialog.add(cancel);

regDialog.setSize(200,200);

regDialog.setResizable(false);

regDialog.setLocationRelativeTo(null);

confirm.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventarg0){

Stringsex=null;

if(cbg.getSelectedCheckbox()==cb1)sex="男";

elsesex="女";

if(saveUserData(nameTextField.getText().trim(),sex,

newString(pass1.getPassword()),newString(pass2.getPassword())))

regDialog.setVisible(false);

else

JOptionPane.showMessageDialog(regDialog,"输入有误,请检查","错误提示",JOptionPane.ERROR_MESSAGE);

}

});

cancel.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventarg0){

regDialog.setVisible(false);

}

});

}

3.1.3计算器主界面

图5.2计算器主界面

为了能够在同一页面中管理多个页面,本系统的主界面采用了框架技术。

3.2计算功能实现

通过ActionEvent事件的处理进行计算功能的实现;

部分代码:

publicvoidactionPerformed(ActionEvente){

Strings=e.getActionCommand();

………………………………(省略)

}elseif(s.equals("CE")){

//如果是CE则清除文本框

tResult.setText("0");

}elseif(s.equals("BackSpace")){

if(!

tResult.getText().trim().equals("0")){

//如果文本框中有内容

StringBuffertemp=newStringBuffer(tResult.getText().trim());

if(temp.length()>1){

tResult.setText(temp.delete(temp.length()-1,temp.length()).toString());

}else{

tResult.setText("0");

}

}

}elseif(s.equals("C")){

//如果是C删除当前计算

tResult.setText("0");

tf.setText("");

num1.replace(0,num1.length(),"0");

num2.replace(0,num2.length(),"0");

isExist=false;

operate='';

}elseif(s.equals("π")){

tResult.setText(""+Math.PI);

}elseif(s.equals("sin")){

Stringtemp=tResult.getText().trim();

doubledtemp=Math.PI/180.0*Double.parseDouble(temp);

tResult.setText(""+Math.sin(dtemp));

save("sin"+"("+temp+")="+Math.sin(dtemp));

}elseif(s.equals("cos")){

Stringtemp=tResult.getText().trim();

doubledtemp=Math.PI/180.0*Double.parseDouble(temp);

tResult.setText(""+Math.cos(dtemp));

save("cos"+"("+temp+")="+Math.cos(dtemp));

}elseif(s.equals("tan")){

Stringtemp=tResult.getText().trim();

doubledtemp=Math.PI/180.0*Double.parseDouble(temp);

tResult.setText(""+Math.tan(dtemp));

save("tan"+"("+temp+")="+Math.tan(dtemp));

}elseif(s.equals("log")){

Stringtemp=tResult.getText().trim();

doubledtemp=Double.parseDouble(temp);

tResult.setText(""+Math.log10(dtemp));

save("log"+"("+temp+")="+Math.log(dtemp));

}elseif(s.equals("MC")){

//如果是MC则清除缓冲区

Stringtemp="0";

memory.replace(0,memory.length(),temp);

bM.setText("");

}elseif(s.equals("MR")){

//如果按键为MR则恢复缓冲区的数到文本框

tResult.setText(memory.toString());

}elseif(s.equals("MS")){

//如果按键为MS则将文本框的数存入缓冲区

Strings1=tResult.getText().trim();

memory.replace(0,memory.length(),s1);

bM.setText("M");

}elseif(s.equals("M+")){

//如果按键为MS则将文本框值与缓冲区的数相加但不显示结果

Stringtemp1=tResult.getText().trim();

doubledtemp=Double.parseDouble(temp1);

Stringtemp2=memory.toString();

if(temp2.length()==0)temp2="0";

dtemp+=Double.parseDouble(temp2);

temp1=String.valueOf(dtemp);

memory.replace(0,memory.length(),temp1);

bM.setText("M");

}elseif(s.equals("1/x")){

//如果按键为1/x则将文本框中的数据为它的倒数

Stringtemp=tResult.getText().trim();

doubledtemp=Double.parseDouble(temp);

tResult.setText(""+1/dtemp);

}elseif(s.equals("sqrt")){

//如果按键为sqrt则将文本框中的内容求平方根

Stringtemp=tResult.getText().trim();

doubledtemp=Double.parseDouble(temp);

tResult.setText(""+Math.sqrt(dtemp));

save("sqrt"+"("+temp+")="+Math.sqrt(dtemp));

}elseif(s.equals("x^2")){

//如果按键为x^2则将文本框中的内容求平方

Stringtemp=tResult.getText().trim();

doubledtemp=Double.parseDouble(temp)*Double.parseDouble(temp);

tResult.setText(""+dtemp);

save(temp+"^2="+Math.sin(dtemp));

}elseif(s.equals("+/-")){

Stringtemp=tResult.getText().trim();

doubledtemp=-Double.parseDouble(temp);

if(dtemp!

=0)tResult.setText(""+dtemp);

}elseif(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){

//加减乘除按键求结果

if(operate==''){

num1=num1.replace(0,num1.length(),tResult.getText().trim());

isClear=true;

tf.setText(num1.toString()+s);

}elseif(!

isExist){

num2=num2.replace(0,num2.length(),tResult.getText().trim());

Stringrlt=null;

doublea=Double.parseDouble(num1.toString().trim());

doubleb=Double.parseDouble(num2.toString().trim());

switch(operate){

case'+':

rlt=""+(a+b);break;

case'-':

rlt=""+(a-b);break;

case'*':

rlt=""+(a*b);break;

case'/':

rlt=""+(a/b);break;

}

tResult.setText(rlt);

tf.setText(""+num1.toString()+operate+num2.toString());

num1.replace(0,num1.length(),rlt);

isClear=true;

}

operate=s.charAt(0);

}elseif(s.equals("=")){

//按键=显示结果

if(!

isExist)

num2=num2.replace(0,num2.length(),tResult.getText().trim());

isExist=true;

if(ope

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1