已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java大作业-by小意思编写一个网络计算器。部分截图如下:标准型界面: 科学型界面:查看帮助文档:关于计算器:基本运算:历史记录如下:部分代码如下:由于是草稿,会存在这样或那样的错误,见谅。/Calculator源代码:/Calculator.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.border.*;import java.io.*;import .*;import java.util.*;class SubtleSquareBorder implements Border /给显示数值的Panel设置圆角矩形边框,参数true控制圆角,false表示矩形边框 protected int m_w=6; protected int m_h=6; protected int flag1=0,flag2=0,flag3=0,flag4=0; protected Color m_topColor=Color.blue; protected Color m_bottomColor=Color.blue; protected boolean roundc; public SubtleSquareBorder(boolean round_corners,int flag_1,int flag_2,int flag_3,int flag_4,Color color) roundc=round_corners; flag1=flag_1; flag2=flag_2; flag3=flag_3; flag4=flag_4; m_topColor=m_bottomColor=color; public Insets getBorderInsets(Component c) return new Insets(m_h,m_w,m_h,m_w); public boolean isBorderOpaque() return true; public void paintBorder(Component c,Graphics g,int x,int y,int w,int h) w=w-3; h=h-3; x+; y+; /Rounded corners if(roundc) g.setColor(m_topColor); if (flag1=1) g.drawLine(x,y+2,x,y+h-2); /left if (flag2=1) g.drawLine(x+2,y,x+w-2,y); /up g.drawLine(x,y+2,x+2,y); / Top left diagonal g.drawLine(x,y+h-2,x+2,y+h); /Bottom left diagonal g.setColor(m_bottomColor); if (flag3=1) g.drawLine(x+w,y+2,x+w,y+h-2); /right if (flag4=1) g.drawLine(x+2,y+h,x+w-2,y+h); /down g.drawLine(x+w-2,y,x+w,y+2); /Top right diagonal g.drawLine(x+w,y+h-2,x+w-2,y+h); / Bottom right diagonal /Square corners else g.setColor(m_topColor); if (flag1=1) g.drawLine(x,y,x,y+h); /left if (flag2=1) g.drawLine(x,y,x+w,y); /up g.setColor(m_bottomColor); if (flag3=1) g.drawLine(x+w,y,x+w,y+h); /right if (flag4=1) g.drawLine(x,y+h,x+w,y+h); /down public class Calculator extends JFrame implements Runnableprivate JMenuBar mb;private JMenu viewMenu,editMenu,helpMenu;private JMenuItem standard,science,copy,paste,history,help,about;private StringBuffer copytext=new StringBuffer(); private JPanel panel,panel1,panel2,panel_1,panel_2,panel_3,panel_4,historyPanel; private JRadioButton du,tidu,hudu; private ButtonGroup bg; private JTextArea historyText; private JLabel label; private JLabel label1; private String names=,CE,C,7,8,9,+,4,5,6,-,1,2,3,*,0,.,=,/; private String names1=sin,cos,tan,(,),X2,X3,XY,3X,YX,Mod; private JButton buttons=new JButton20; private JButton buttons1=new JButton12; private historyFrame historyframe; private int start_label1,start_num,kuohao_num; /同级运算时,使用的标记 private int location_num,location_label1; /记录括号的起始位置 MyListener mylistener=new MyListener(); double ans=0; char sign=0; String num=; String PI=3.141592653589793; int flag=1,flag2=0;/标记flag记录的是该算式是否计算出结果了,flag2记录的是是否涉及根号,1表示涉及。 int mark_pow=0;BufferedReader in=null;PrintStream out=null;Socket socket=null;Thread thread;public Calculator(String title)super(title);socket=new Socket();mb=new JMenuBar();viewMenu=new JMenu(查看);editMenu=new JMenu(编辑);helpMenu=new JMenu(帮助); standard=new JMenuItem( 标准型); science=new JMenuItem( 科学型); copy=new JMenuItem(复制); paste=new JMenuItem(粘贴); history=new JMenuItem( 历史); help=new JMenuItem(关于帮助); about=new JMenuItem(关于计算器); du=new JRadioButton(度,true); tidu=new JRadioButton(梯度,false); hudu=new JRadioButton(弧度,false); bg=new ButtonGroup(); bg.add(du); bg.add(tidu); bg.add(hudu);mb.add(viewMenu);mb.add(editMenu);mb.add(helpMenu);viewMenu.add(standard);viewMenu.add(science);viewMenu.addSeparator();viewMenu.add(history);editMenu.add(copy);editMenu.add(paste);helpMenu.add(help);helpMenu.add(about);standard.addActionListener(mylistener);science.addActionListener(mylistener);copy.addActionListener(mylistener);paste.addActionListener(mylistener);history.addActionListener(mylistener);help.addActionListener(mylistener);about.addActionListener(mylistener);label=new JLabel(0,4);label1=new JLabel(,4);panel=new JPanel();panel1=new JPanel();panel2=new JPanel();panel_1=new JPanel();panel_2=new JPanel();panel_3=new JPanel();panel_4=new JPanel();panel.setLayout(new GridLayout(5,4,1,1);panel1.setLayout(new GridLayout(2,1);panel1.setBorder(new SubtleSquareBorder(false,1,1,1,1,Color.blue);panel2.setLayout(new BorderLayout();/label1.setBackground(Color.white);/label.setBackground(Color.white);panel1.add(label1);panel1.add(label);historyframe=new historyFrame();historyPanel=new JPanel();historyPanel.setLayout(new GridLayout(1,1,0,0);historyText=new JTextArea(3,1);historyText.setEditable(false);historyText.setBackground(panel1.getBackground();/(new Color(190,220,250);JScrollPane jscroll=new JScrollPane(historyText);historyPanel.add(jscroll,BorderLayout.CENTER);/historyPanel.add(historyText,BorderLayout.CENTER);historyframe.add(historyPanel);panel2.add(historyPanel,BorderLayout.CENTER);add(mb,BorderLayout.NORTH);add(panel1,BorderLayout.CENTER);add(panel,BorderLayout.SOUTH);thread=new Thread(this);start_label1=start_num=kuohao_num=0;location_num=new int10;location_label1=new int10;for (int i=0; i10; i+)location_numi=location_label1i=0;for (int i=0; ibuttons.length; i+) buttonsi=new JButton(namesi); buttonsi.setFont(new Font(宋体,Font.PLAIN,21); buttonsi.addActionListener(mylistener); panel.add(buttonsi);if (buttonsi.getText().equals(0)|(buttonsi.getText().equals(1)|(buttonsi.getText().equals(2)|(buttonsi.getText().equals(3)|(buttonsi.getText().equals(4)|(buttonsi.getText().equals(5)|(buttonsi.getText().equals(6)|(buttonsi.getText().equals(7)|(buttonsi.getText().equals(8)|(buttonsi.getText().equals(9)|(buttonsi.getText().equals(0)|(buttonsi.getText().equals(.)|(buttonsi.getText().equals(=)buttonsi.setBackground(new Color(255,255,254);buttonsi.setForeground(Color.blue);for (int i=0; ibuttons1.length; i+)buttons1i=new JButton(names1i);buttons1i.setFont(new Font(宋体,Font.PLAIN,21);buttons1i.addActionListener(mylistener);pack();/setSize(240,250);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void reset(int flag)if (flag=0)standard.setText( 标准型);science.setText( 科学型);/label1.setBackground(Color.white);/label.setBackground(Color.white);panel.removeAll();panel.setLayout(new GridLayout(5,4,1,1);for (int i=0; ibuttons.length; i+)panel.add(buttonsi);pack();elsestandard.setText( 标准型);science.setText( 科学型);panel.removeAll();panel.setLayout(new BorderLayout();panel.add(panel_1,BorderLayout.WEST);panel.add(panel_2);panel_2.setLayout(new GridLayout(5,4,1,1);panel_1.setLayout(new BorderLayout();panel_1.add(panel_3,BorderLayout.NORTH);panel_1.add(panel_4);panel_3.setLayout(new GridLayout(1,3);panel_4.setLayout(new GridLayout(4,3,1,1);du.setFont(new Font(宋体,Font.PLAIN,13);hudu.setFont(new Font(宋体,Font.PLAIN,13);tidu.setFont(new Font(宋体,Font.PLAIN,13);panel_3.add(du); panel_3.add(hudu); panel_3.add(tidu);panel_3.setBorder(new SubtleSquareBorder(true,1,1,1,1,Color.gray);for (int i=0; ibuttons1.length; i+)panel_4.add(buttons1i);for (int i=0; ibuttons.length; i+)panel_2.add(buttonsi);pack();thread.start(); public double calculate(double ans,char sign,String num)if (sign=0 & num=) return ans;if (sign=0 & num!=)ans=Double.parseDouble(num); return ans;elseif (num.length()=0) num=0; switch(sign)case +: ans+=Double.parseDouble(num); break;case -: ans-=Double.parseDouble(num); break;case *: ans*=Double.parseDouble(num); break;case /: if (!(Double.parseDouble(num)=0) ans/=Double.parseDouble(num); return ans; public String round(double ans) /判断是否为整数,如果是整数的话化简成整形 if (ans-(int)(ans)=0.00000000001) return +(int)(ans); else if (1-(ans-(int)(ans)=0.00000000001) return +(int)(ans)+1); else return +ans; public void run() String ans1; try InetAddress address=InetAddress.getByName(); InetSocketAddress socketAddress=new InetSocketAddress(address,4331); socket.connect(socketAddress); in=new BufferedReader(new InputStreamReader(socket.getInputStream(); out=new PrintStream(socket.getOutputStream(); catch(Exception e)System.out.println(与服务器断开); while(true) try ans1=in.readLine(); if (ans1.equals(ERROR) label1.setHorizontalAlignment(0); label1.setText(ERRORn); label.setText(); else/historyText.append(label1.getText()+label.getText(); label.setText(round(Double.parseDouble(ans1);historyText.append(=+label.getText()+n); catch(IOException e) class MyListener implements ActionListenerpublic void actionPerformed(ActionEvent e)if (e.getSource()=standard)reset(0);/设置标准型的面板和功能函数else if (e.getSource()=science)reset(1);/设置科学型的面板和功能函数else if (e.getSource()=copy)copytext.delete(0,copytext.length();copytext.append(label.getText();/复制类容else if (e.getSource()=paste)if (flag=1)num+=copytext.substring(0,copytext.length();else num=num.substring(0,num.length()-label.getText().length();num+=copytext.substring(0,copytext.length();label.setText(copytext.substring(0,copytext.length();/粘贴功能else if (e.getSource()=history)if (history.getText().equals( 历史)history.setText( 历史);remove(panel1);panel2.add(panel1,BorderLayout.SOUTH);panel2.setBorder(new SubtleSquareBorder(false,1,1,1,1,Color.blue);panel1.setBorder(new SubtleSquareBorder(false,0,1,0,0,Color.blue);add(panel2,BorderLayout.CENTER);pack();validate();elsehistory.setText( 历史);remove(panel2);add(panel1,BorderLayout.CENTER);panel1.setBorder(new SubtleSquareBorder(false,1,1,1,1,Color.blue);pack();validate();/historyframe.setVisible(true);/historyframe.setSize(200,300);else if (e.getSource()=help)trynew aboutFrame();catch(Exception fra)else if (e.getSource()=about)/ 关于菜单:弹出程序及作者信息JOptionPane.showOptionDialog(null, 程序名称:n 计算器nn+ 设计者:n 茅志仁+ 兰州大学信息科学与工程学院电商专业nn + 关于本计算器:n+ 本计算器可以完成任意的通常借助手持计算器n+ 来完成的标准运算,同时还具有科学计算器的功能。n+ 本计算器完全免费,欢迎网友下载研究交流QQ1437895850, 关于计算器,JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE, null, null, null);if (standard.getText().equals( 标准型) /客户端直接计算的情况 for (int i=0; i20; i+)if (e.getSource()=buttonsi) if (label1.getText().equals(ERROR) label1.setHorizontalAlignment(4); label1.setText(); switch (i) case 0: /1) label.setText(label.getText().substring(0,label.getText().length()-1); num=num.substring(0,num.length()-1); else label.setText(+0); num=; flag=1; break; case 1: /CE键 if (flag2!=1) label.setText(+0); flag=1; num=; break; case 2: /C键 label1.setText(); label.setText(0); flag=1; flag2=0; ans=0; num=; sign=0; start_num=start_label1=0; break; case 3: /算根号,有点地方要设计一下; if (label1.getText().endsWith() label1.setText(label1.getText().substring(0,start_label1) +sqrt(+label1.getText().substring(start_label1,label1.getText().length()+); num=+round(Math.sqrt(Double.parseDouble(label.getText(); label.setText(num); else if (Double.parseDouble(label.getText()=0) label1.setText(label1.getText()+sqrt(+label.getText()+); num=+round(Math.sqrt(Double.parseDouble(label.getText(); label.setText(num); else label1.setHorizontalAlignment(0); label1.setText(ERROR); /label1.setHorizontalAlignment(2); label.setText(); flag2=1; /flag=1; break;case 7: /加号if(flag=1&label1.getText().length()0)label1.setText(label1.getText().substring(0,label1.getText().length()-1)+);sign=+;break;ans=calculate(ans,sign,num);if (sign=/ & (Double.parseDouble(num)=0) label1.setHorizontalAlignment(0); label1.setText(ERROR); /输出ERROR并设置居中 label.setText();else if (flag2!=1) label1.setText(label1.getText()+label.getText()+); else flag2=0; label1.setText(label1.getText()+); label.setText(round(ans);flag=1; sign=+; num=;start_label1=label1.getText().length();break;case 11: /减号if(flag=1&label1.getText().length()0)label1.setText(label1.getText().substring(0,label1.getText().length()-1)+-);sign=-;break;ans=calculate(ans,sign,num);if (sign=/ & (Double.parseDouble(num)=0) label1.setHorizontalAlignment(0); label1.setText(ERROR); /label1.setHorizontalAlignment(2); label.setText();else if (flag2!=1) label1.setText(label1.getText()+label.getText()+-); else flag2=0; label1.setText(label1.getText()+-); label.setText(round(ans);flag=1;sign=-; num=; start_label1=label1.getText().length();break;case 15: /乘号if(flag=1&label1.getText().length()0)label1.setText(label1.getText().substring(0,label1.getText().length()-1)+*);sign=*;break;ans=calculate(ans,sign,num);if (sign=/ & (Double.parseDouble(num)=0) label1.setHorizontalAlignment(0); label1.setText(ERROR); /label1.setHorizontalAlignment(2); label.setText();else if (flag2!=1) label1.setText(label1.getText()+label.getText()+*); else flag2=0; label1.setText(label1.getText()+*); label.setText(round(ans);flag=1;sign=*; num=; start_label1=label1.getText().length();break;case 16: /数字0if (flag=1) label.setText(0); flag=0;else label.setText(label.getText()+0);num+=0; break;case 17: /小数点if (num.endsWith(.) break;if (num.length()=0)label.setText(label.getText()+.);num+=label.getText();elselabel.setText(label.getText()+.);num+=.; break;case 18: /等于号 if (sign=/ & (num.length()=0)|(Double.parseDouble(num)=0) label1.setHorizontalAlignment(0); label1.setText(ERROR); label.setText();else ans=calculate(ans,sign,num); /开始计算 historyText.append(label1.getText(); if (!(label1.getText().endsWith() historyText.append(label.getText(); label.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026茉莉花茶行业市场分析及出口管理与发展研究报告
- 2026芬兰林业行业市场供需分析及投资评估规划分析研究报告
- 棚户线路改造方案范本
- 枣庄市中考信息模拟考试试题及答案
- 《幽门螺杆菌》研究性教学设计-临床医学专业本科(基础医学整合课程)
- 农村广场改造规划方案范本
- 八年级语文上学期课内教学设计-名著导读《红星照耀中国》
- 陕西中考英语考试试题及答案
- 部编版初中历史九年级上册《古代日本》教案
- 进料检验应急方案范本
- 2026年高考语文全国二卷真题卷及答案
- AI模型在头颈部CTA中的血管狭窄程度分级优化
- DB32∕T 4166-2021 力值检测数据采集传输技术规程
- T∕CI 1119-2025 青藏高原多年冻土区矿山生态修复成效评价规程
- 供应商绩效考核标准及管理办法
- 2025年上海市嘉定区网格员招聘考试题库及答案解析
- 《苏州市“工业上楼”设计引导指南》
- Unit5LetsgoStratup(课件)-外研版英语四年级上册
- 以工代赈项目培训
- 煤矿防灭火安全培训课件
- 以工代赈培训课件
评论
0/150
提交评论