基于Java的计算器的设计与开发.docx
- 文档编号:11980095
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:62
- 大小:93.60KB
基于Java的计算器的设计与开发.docx
《基于Java的计算器的设计与开发.docx》由会员分享,可在线阅读,更多相关《基于Java的计算器的设计与开发.docx(62页珍藏版)》请在冰豆网上搜索。
基于Java的计算器的设计与开发
Java程序课程设计报告
报告题目:
基于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月
学生(签字)
2010年12月28日
指导教师2010年12月28日
第1章引言
1.1课程设计内容
这是我组设计的计算器会有一些独特的功能,本项目用到了Java中的GUI界面和swing组件以及awt布局,所以简单易用,它能完成如下的几个功能:
(1)数据计算处理功能
点击按钮中的数字键和运算符键就能进行简单的加、乘、乘、除四则运算及三角函数,开方,乘方运算;如果输入有误时可以按C撤销后重新输入新数据,有储存修改键;
(2)查询功能
查询功能可以迅速方便地查找到相应时段的执行的操作及结果。
(3)计算器使用权限功能
对个人的操作实现口令。
用户在使用计算器前需通过登录界面登录,以保护计算器的数据安全。
未有登录资料的先进行注册。
(4)时间显示功能
在计算器上显示现在的时间,便于把握时间;
1.3任务分工
:
职位组长,总监整个计算器设计制作过程,制定相应计划与分布任务,负责撰写任务书,报告书,登陆注册界面的设计,整体编码框架的设定;
:
负责报告书的排版,创建计算器主界面的编码,计算器;
:
负责数据计算功能的编码,实现,计算器主界面的设计;
:
负责注册登录界面的功能的编码,储存与查看功能的编码,计算器整体功能的编码的完善与调试;
第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()+oper
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Java 计算器 设计 开发