基于Java的計(jì)算器的設(shè)計(jì)與開發(fā)_第1頁
基于Java的計(jì)算器的設(shè)計(jì)與開發(fā)_第2頁
基于Java的計(jì)算器的設(shè)計(jì)與開發(fā)_第3頁
基于Java的計(jì)算器的設(shè)計(jì)與開發(fā)_第4頁
基于Java的計(jì)算器的設(shè)計(jì)與開發(fā)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余46頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、浙江科技學(xué)院信息與電子工程學(xué)院2009級(jí)Java程序課程設(shè)計(jì)報(bào)告Java程序課程設(shè)計(jì)報(bào)告報(bào)告題目:基于Java的計(jì)算器的設(shè)計(jì)與開發(fā)Java程序課程設(shè)計(jì)任務(wù)書一、主要任務(wù)與目標(biāo)1 .掌握java語言2 .創(chuàng)建一個(gè)簡單的計(jì)算器,具有簡單人機(jī)交互界面,易于操作,便于進(jìn)行數(shù)據(jù)之 問的簡單運(yùn)算。二、具體要求(包括技術(shù)要求等):1)能夠?qū)崿F(xiàn)基本的加、減、乘、除四則運(yùn)算及開方,乘方運(yùn)算;2)如輸入數(shù)據(jù)時(shí),出現(xiàn)錯(cuò)誤,可以修改;3)運(yùn)算結(jié)果能正確顯示;可以清零;4)擁有登陸注冊功能;5)可以查看歷史記錄;學(xué)習(xí)并掌握以下技術(shù):Java、awt, swing等熟練使用以下開發(fā)工具:Jdk, JCreate等實(shí)現(xiàn)計(jì)算

2、器的上述的功能。三、計(jì)劃進(jìn)度1. 12月28日12月29日:搜集資料、查閱文獻(xiàn),確定選題2. 12月30日-12月31日:需求分析,系統(tǒng)設(shè)計(jì),系統(tǒng)功能模塊完善3. 1月1日-1月3日:編程實(shí)現(xiàn)系統(tǒng)、系統(tǒng)測試與修改4. 1月4日-1月6日:課程設(shè)計(jì)報(bào)告撰寫5. 1月7日-1月8日:課程設(shè)計(jì)報(bào)告答辯四、主要參考文獻(xiàn)1耿祥義,張躍平.java大學(xué)實(shí)用教程(第二版).電子工業(yè)出版社.2008年5 月學(xué)生(簽字)2010年12月28日指導(dǎo)教師 2010年12月28日目錄JAVA程序課程設(shè)計(jì)任務(wù)書 II目錄 III第1章引言11.1課程設(shè)計(jì)內(nèi)容 11.3任務(wù)分工1第2章計(jì)算器定義 22.1 計(jì)算器登陸注冊

3、界面概述 22.1.1 計(jì)算器功能概述 22.1.2 計(jì)算結(jié)果的儲(chǔ)存與查看功能概述22.2 本章小結(jié)2第3章計(jì)算器的具體實(shí)現(xiàn) 33.1 界面設(shè)計(jì)33.1.1 用戶登陸界面圖33.1.3 計(jì)算器主界面83.2 計(jì)算功能實(shí)現(xiàn) 93.4本章小結(jié)14第4章結(jié)束語14致謝15參考文獻(xiàn) 15附錄源代碼15III浙江科技學(xué)院信息與電子工程學(xué)院2009級(jí)Java程序課程設(shè)計(jì)報(bào)告第1章引言1.1課程設(shè)計(jì)內(nèi)容這是我組設(shè)計(jì)的計(jì)算器會(huì)有一些獨(dú)特的功能,本項(xiàng)目用到了Java中的GUI界面和swing組件以及awt布局,所以簡單易用,它能完成如下的幾個(gè)功能:(1)數(shù)據(jù)計(jì)算處理功能點(diǎn)擊按鈕中的數(shù)字鍵和運(yùn)算符鍵就能進(jìn)行簡單的

4、加、 乘、乘、除四則運(yùn)算及 三角函數(shù),開方,乘方運(yùn)算;如果輸入有誤時(shí)可以按C撤銷后重新輸入新 數(shù)據(jù),有儲(chǔ)存修改鍵;(2)查詢功能查詢功能可以迅速方便地查找到相應(yīng)時(shí)段的執(zhí)行的操作及結(jié)果。(3)計(jì)算器使用權(quán)限功能對個(gè)人的操作實(shí)現(xiàn)口令。用戶在使用計(jì)算器前需通過登錄界面登錄,以保護(hù)計(jì)算器的數(shù)據(jù)安全。未有登錄資料的先進(jìn)行注冊。(4)時(shí)間顯示功能在計(jì)算器上顯示現(xiàn)在的時(shí)間,便于把握時(shí)間;1.3任務(wù)分工:職位組長,總監(jiān)整個(gè)計(jì)算器設(shè)計(jì)制作過程,制定相應(yīng)計(jì)劃與分布任務(wù),負(fù)責(zé)撰 寫任務(wù)書,報(bào)告書,登陸注冊界面的設(shè)計(jì),整體編碼框架的設(shè)定;:負(fù)責(zé)報(bào)告書的排版,創(chuàng)建計(jì)算器主界面的編碼,計(jì)算器;:負(fù)責(zé)數(shù)據(jù)計(jì)算功能的編碼,實(shí)

5、現(xiàn),計(jì)算器主界面的設(shè)計(jì);:負(fù)責(zé)注冊登錄界面的功能的編碼,儲(chǔ)存與查看功能的編碼,計(jì)算器整體功能的編碼的完善與調(diào)試;第2章計(jì)算器定義2.1 計(jì)算器登陸注冊界面概述這是對計(jì)算器使用權(quán)限功能的添加,這是以后軟件開發(fā)的一個(gè)重點(diǎn)發(fā)展方向。 用戶在使用計(jì)算器前需通過登錄界面登錄,以保護(hù)計(jì)算器的數(shù)據(jù)安全和使用權(quán)限的 設(shè)定。未有登錄資料的必須先進(jìn)行注冊;2.1.1 計(jì)算器功能概述一個(gè)計(jì)算器如果只有數(shù)據(jù)計(jì)算處理功能,或者是點(diǎn)擊按鈕中的數(shù)字鍵和運(yùn)算 符鍵就能進(jìn)行簡單的加、乘、乘、除四則運(yùn)算是遠(yuǎn)遠(yuǎn)不夠的,這太普通了,因此 加入三角函數(shù),開方,乘方運(yùn)算 ,并且如果輸入有誤時(shí)可以按C撤銷后重新輸入 新數(shù)據(jù),有儲(chǔ)存修改鍵;

6、最主要是加入了查詢功能:查詢功能可以迅速方便地查 找到相應(yīng)時(shí)段的執(zhí)行的操作及結(jié)果。還有就是計(jì)算器使用權(quán)限的設(shè)定,即登陸注 冊界面,用戶在使用計(jì)算器前需通過登錄界面登錄 ,以保護(hù)計(jì)算器的數(shù)據(jù)安全。未 有登錄資料的先進(jìn)行注冊。2.1.2 計(jì)算結(jié)果的儲(chǔ)存與查看功能概述計(jì)算結(jié)果有了,但是一般的計(jì)算器不能查詢之前進(jìn)行的操作和結(jié)果,不得不重新 計(jì)算,這就帶來了不少麻煩,我組設(shè)計(jì)制作的計(jì)算器擁有直接查看歷史記錄的功 能,還附有各個(gè)操作的時(shí)間,便于確認(rèn);2.2 本章小結(jié)這一章介紹了當(dāng)前進(jìn)銷存管理系統(tǒng)應(yīng)該具備的功能模塊,并提供了市面上比 較流行的進(jìn)銷存管理系統(tǒng)作為參考。在這一章中,我們可以了解什么是進(jìn)銷存管 理

7、系統(tǒng),當(dāng)前進(jìn)銷存管理系統(tǒng)的市場需求,還有一個(gè)進(jìn)銷存管理系統(tǒng)應(yīng)該的開發(fā)目標(biāo)。第3章計(jì)算器的具體實(shí)現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計(jì)的質(zhì)量, 并在很大程度上決定了軟件是否成功。3.1 界面設(shè)計(jì)3.1.1 計(jì)界面設(shè)計(jì)要求用GUI,界面設(shè)計(jì)中有用到swing組件的TextField和Button, 用到awt中的BorderLayout和GridLayout布局管理方式。3.1.2 用戶登陸界面圖如圖3.1.1和3.1.2所示圖3.1.1用戶登錄模塊框圖圖3.1.2 用戶登錄界面loginDialog與compareUserData函數(shù)的作用是用戶登錄界面創(chuàng)建和檢測用戶登的

8、合法性,并確認(rèn)用戶輸入了合法的登錄名和口令。部分代碼:private void loginDialog() login = new JDialog();login.setTitle("登錄");login.setLayout(new FlowLayout();login.add(new JLabel("用戶名:");final JTextField name = new JTextField(10);login.add(name);login.add(new JLabel("密碼:");final JPasswordField pas

9、sword = new JPasswordField(10);password.setEchoChar('*');login.add(password);JButton confirm = new JButton("登錄");confirm.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (compareUserData(name.getText().trim(), newString(password.getPassword() log

10、in.setVisible(false);f.setVisible(true); else JOptionPane.showMessageDialog(login,"用戶名或密碼錯(cuò)誤!"錯(cuò)誤提示", JOptionPane.ERROR_MESSAGE););login.add(confirm);final JDialog regDialog = new JDialog(login,"注冊", true);registerDialog(regDialog);JButton register = new JButton("注冊"

11、);register.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) regDialog.setVisible(true););login.add(register);login.setSize(200, 130);login.setResizable(false);login.setLocationRelativeTo(null);login.setVisible(true);private boolean compareUserData(String name, String

12、 password) try RandomAccessFile out = new RandomAccessFile("user.dat", "rw");String fname, fpassword = null;while (out.getFilePointer() < out.length() fname = out.readUTF();out.readUTF();fpassword = out.readUTF();if (fname.equals(name) && fpassword.equals(password) ret

13、urn true; out.close(); catch (lOException e) e.printStackTrace(); return false;3.1.3 用戶注冊界面如圖3.1.3所示圖3.1.3用戶注冊界面此registerDialog函數(shù)的作用就是注冊界面的創(chuàng)建及信息的填寫;部分代碼:private void registerDialog(final JDialog regDialog) Box box1 = Box.createVerticalBox();box1.add(new JLabel("用戶名:",JLabel.RIGHT);box1.add

14、(Box.createVerticalStrut(10);box1.add(new JLabel("性別:",JLabel.RIGHT);box1.add(Box.createVerticalStrut(10);box1.add(new JLabel("密碼:",JLabel.RIGHT), -1);box1.add(Box.createVerticalStrut(10);box1.add(new JLabel("確認(rèn)密碼:",JLabel.RIGHT);Box box2 = Box.createVerticalBox();final

15、 JTextField nameTextField = new JTextField(10);box2.add(nameTextField);box2.add(Box.createVerticalStrut(8);final CheckboxGroup cbg = new CheckboxGroup();Box box21 = Box.createHorizontalBox();final Checkbox cb1 = new Checkbox。男", cbg, true);box21.add(cb1);box21.add(new Checkbox。'女",cbg,

16、 false);box2.add(box21);box2.add(Box.createVerticalStrut(8);final JPasswordField passl = new JPasswordField(10);box2.add(pass1);box2.add(Box.createVerticalStrut(8);final JPasswordField pass2 = new JPasswordField(10);box2.add(pass2);Box baseBox = Box.createHorizontalBox();baseBox.add(boxl);baseBox.ad

17、d(box2);regDialog.setLayout(new FlowLayout();regDialog.add(baseBox);JButton confirm = new JButton("確定");JButton cancel = new JButton("取消"力regDialog.add(confirm);regDialog.add(cancel);regDialog.setSize(200, 200);regDialog.setResizable(false);regDialog.setLocationRelativeTo(null);c

18、onfirm.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) String sex = null;if (cbg.getSelectedCheckbox() = cb1) sex ="男"elsesex ="女";if (saveUserData(nameTextField.getText().trim(), sex,new String(pass1.getPassword(), new String(pass2.getPasswor

19、d() regDialog.setVisible(false);elseJOptionPane.showMessageDialog(regDialog,"輸入有誤,請檢查 ","錯(cuò)誤 提示”,JOptionPane.ERROR_MESSAGE););cancel.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) regDialog.setVisible(false););3.1.4 計(jì)算器主界面圖5.2計(jì)算器主界面為了能夠在同一頁面中管理多個(gè)頁面

20、,本系統(tǒng)的主界面采用了框架技術(shù)。3.2 計(jì)算功能實(shí)現(xiàn)通過ActionEvent事件的處理進(jìn)行計(jì)算功能的實(shí)現(xiàn);部分代碼:public void actionPerformed(ActionEvent e) String s = e.getActionCommand();(省略) else if (s.equals("CE") 如果是CE則清除文本框tResult.setText("0"); else if (s.equals("BackSpace") if(!tResult.getText().trim().equals("0

21、") /我口果文本框中有內(nèi)容StringBuffer temp = new StringBuffer(tResult.getText().trim();if(temp.length() > 1) tResult.setText(temp.delete(temp.length()-1, temp.length().toString(); else tResult.setText("0"); else if (s.equals("C") 如果是C刪除當(dāng)前計(jì)算tResult.setText("0");tf.setText(&

22、quot;");num1.replace(0, num1.length(), "0");num2.replace(0, num2.length(), "0");isExist = false;operate ='' else if (s.equals("兀")tResult.setText("" + Math.PI); else if (s.equals("sin") String temp = tResult.getText().trim();double dtemp

23、 = Math.PI / 180.0 * Double.parseDouble(temp);tResult.setText(""+Math.sin(dtemp);save("sin" + "(" + temp + ") = " + Math.sin(dtemp); else if (s.equals("cos") String temp = tResult.getText().trim();double dtemp = Math.PI / 180.0 * Double.parseDouble(t

24、emp);tResult.setText(""+Math.cos(dtemp);save("cos" + "(" + temp + ") = " + Math.cos(dtemp); else if (s.equals("tan") String temp = tResult.getText().trim();double dtemp = Math.PI / 180.0 * Double.parseDouble(temp);tResult.setText(""+Math.ta

25、n(dtemp);save("tan" + "(" + temp + ") = " + Math.tan(dtemp); else if (s.equals("log") String temp = tResult.getText().trim();double dtemp = Double.parseDouble(temp);tResult.setText(""+Math.log10(dtemp);save("log" + "(" + temp + &q

26、uot;) = " + Math.log(dtemp); else if (s.equals("MC") 如果是MC則清除緩沖區(qū)String temp = "0"memory.replace(0, memory.length(), temp);bM.setText(""); else if (s.equals("MR") 如果按鍵為MR則恢復(fù)緩沖區(qū)的數(shù)到文本框tResult.setText(memory.toString(); else if (s.equals("MS") 如果按鍵為

27、MS則將文本框的數(shù)存入緩沖區(qū)String si = tResult.getText().trim();memory.replace(0, memory.length(), si);bM.setText("M"); else if (s.equals("M+") 如果按鍵為MS則將文本框值與緩沖區(qū)的數(shù)相加但不顯示結(jié)果String tempi = tResult.getText().trim();double dtemp = Double.parseDouble(templ);String temp2 = memory.toString();if (temp

28、2.length() = 0) temp2 = "0"dtemp += Double.parseDouble(temp2);tempi = String.valueOf(dtemp);memory.replace(0, memory.length(), tempi);bM.setText("M"); else if (s.equals("1/x") 如果按鍵為1/x則將文本框中的數(shù)據(jù)為它的倒數(shù)String temp = tResult.getText().trim();double dtemp = Double.parseDouble

29、(temp);tResult.setText(""+1/dtemp); else if (s.equals("sqrt") 如果按鍵為sqrt則將文本框中的內(nèi)容求平方根String temp = tResult.getText().trim();double dtemp = Double.parseDouble(temp);tResult.setText(""+Math.sqrt(dtemp);save("sqrt" + "(" + temp + ") = " + Math.

30、sqrt(dtemp); else if (s.equals("xA2") 如果按鍵為xA2則將文本框中的內(nèi)容求平方String temp = tResult.getText().trim();double dtemp = Double.parseDouble(temp) * Double.parseDouble(temp);tResult.setText(""+dtemp);save(temp + "人2 = " + Math.sin(dtemp); else if (s.equals("+/-") String

31、 temp = tResult.getText().trim();double dtemp = -Double.parseDouble(temp);if (dtemp != 0) tResult.setText(""+dtemp); else if (s.equals("+") | s.equals("-") | s.equals("*") | s.equals("/") 加減乘除按鍵求結(jié)果if (operate = ' ') numl = num1.replace(0, num

32、1.length(), tResult.getText().trim();isClear = true;tf.setText(num1.toString() + s); else if (!isExist) num2 = num2.replace(0, num2.length(), tResult.getText().trim();String rlt = null;double a = Double.parseDouble(num1.toString().trim();double b = Double.parseDouble(num2.toString().trim(); switch(o

33、perate) 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 + n

34、um2.toString();num1.replace(0, num1.length(), rlt);isClear = true;operate = s.charAt(0); else if (s.equals("=")按鍵=顯不'結(jié)果if (!isExist)num2 = num2.replace(0, num2.length(), tResult.getText().trim();isExist = true;if (operate != ' ') String rlt = null;double a = Double.parseDouble(

35、num1.toString().trim();double b = 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

36、); break;tResult.setText(rlt);/存入文件save(" " + a + " " + operate + " " + b + " = " + rlt);tf.setText("" + num1.toString() + operate + num2.toString();num1.replace(0, num1.length(), rlt);isClear = true; else if(s.equals(".") 單擊“小數(shù)點(diǎn)”的處理當(dāng)前結(jié)果中不存

37、在".”if(tResult.getText().trim().indexOf('.') = -1) StringBuffer tmp = new StringBuffer(tResult.getText().trim();tResult.setText(tmp.append(s).toString(); else /數(shù)字鍵的處理if (!Character.isDigit(tResult.getText().charAt(0)tResult.setText("");if (isClear) isClear = false;tResult.setT

38、ext("");if (isExist) isExist = false; tf.setText("");operate =''tResult.setText("");StringBuffer tmp = new StringBuffer(tResult.getText().trim();if (tmp.toString().equals("0") tmp.setLength(O);tResult.setText(tmp.append(s).toString();end actionPerforme

39、d3.3 計(jì)算結(jié)果的儲(chǔ)存功能與查看功能1 .通過save函數(shù)來實(shí)現(xiàn)結(jié)果的儲(chǔ)存功能;部分代碼:private void save(String s) final SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH:mm:ss :");String time = sdf.format(new Date(System.currentTimeMillis();try File file = new File("data.txt");if (!file.exists() file.cre

40、ateNewFile();char口 ch = new char(int)file.length();FileReader in = new FileReader(file);in.read(ch);in.close();FileWriter out = new FileWriter(file);String tmp = new String(ch);out.write(tmp.trim() + System.getProperty("line.separator");out.write(time + s).trim() + System.getProperty("

41、;line.separator");out.close(); catch(IOException e) e.printStackTrace();2 .通過“查看”選項(xiàng)中的“歷史記錄”來查看歷史結(jié)果,止匕 showRecord函數(shù)的 作用就是把儲(chǔ)存在data.txt中的歷史記錄顯示在一面板中; 部分代碼如下:private void showRecord() JDialog dialog = new JDialog(f,"歷史記錄", true);JTextArea area = new JTextArea();area.setEditable(false);dia

42、log.add(new JScrollPane(area);dialog.setSize(640, 480);dialog.setLocationRelativeTo(null);try File file = new File("data.txt");if (!file.exists() file.createNewFile();char口 ch = new char(int)file.length();FileReader in = new FileReader(file);in.read(ch);in.close();area.setText(new String(c

43、h); catch(IOException e) e.printStackTrace();dialog.setVisible(true);3.4本章小結(jié)本章介紹了計(jì)算器的具體實(shí)現(xiàn)和部分關(guān)鍵代碼,其中包括用戶登錄界面創(chuàng)建 和檢測用戶登的合法性所要用到的loginDialog 與compareUserData函數(shù),注冊 界面的設(shè)計(jì)與儲(chǔ)存,主界面的框架設(shè)計(jì)和計(jì)算功能,儲(chǔ)存與查看歷史記錄功能的 具體實(shí)現(xiàn)。第4章結(jié)束語在做本項(xiàng)目是時(shí)候,會(huì)遇到很多小問題,比如說:如何保存輸入的數(shù)字和下一個(gè)數(shù)進(jìn)行加、減、乘、除運(yùn)算。如何保存結(jié)果與如何進(jìn)行登陸注冊頁面的添加 及用戶信息的儲(chǔ)存,經(jīng)過不斷地嘗試與調(diào)整,此次課程設(shè)

44、計(jì)讓我們更了解熟悉了 Java中的圖形用戶界面和它的編程方式。在完成課題的過程中也不斷充實(shí)了自己,學(xué)習(xí)到了很多以前沒有學(xué)習(xí)到的知識(shí), 收獲很大。最大的收獲就是對大學(xué)學(xué)習(xí)的總結(jié)和培養(yǎng)了解決困難的信心和能力, 使我們對所學(xué)知識(shí)能夠融會(huì)貫通,又不斷豐富了新知識(shí)。Java計(jì)算器設(shè)計(jì)使得我們對所學(xué)的專業(yè)課有了更為深刻的認(rèn)識(shí),使得知識(shí)得到了鞏固和提高。致謝首先我們要感謝指導(dǎo)老師xx老師,在我們學(xué)習(xí)Java程序設(shè)計(jì)與完成Java 程序課程設(shè)計(jì)的過程中所給予的熱情教導(dǎo)、精心指導(dǎo)與大力支持。在許老師的 教導(dǎo)和指導(dǎo)下,我們的Java程序設(shè)計(jì)知識(shí)和能力從無到有、由弱漸強(qiáng),理論和實(shí) 踐水平有了長足的進(jìn)步和顯著的提高,

45、不斷開闊了思路與視野,總結(jié)出了許多有 意義的設(shè)計(jì)與開發(fā)經(jīng)驗(yàn)。這些對我們來說是無比珍貴的知識(shí)和經(jīng)驗(yàn)財(cái)富。在此, 向許老師致以最誠摯的謝意。還要感謝組員之間的團(tuán)結(jié)與幫助。1耿祥義,張躍平,java大學(xué)實(shí)用教程(第二版).電子工業(yè)出版社,2008年5 月附錄源代碼/*引用數(shù)據(jù)包里的類與方法*/import java.awt.BorderLayout;import java.awt.Checkbox;import java.awt.CheckboxGroup;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayo

46、ut;import java.awt.Font;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;imp

47、ort java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.RandomAccessFile;import java.text.SimpleDateFormat;imp

48、ort java.util.Date;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.

49、swing.JPasswordField;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.KeyStroke;/*Javaimport javax.swing.Timer;計(jì)算器主類 */public class Calculator implements ActionListener JFrame f;JDialog login, addUser;JMenu mView;JMenu mEdit;JMenu mHelp;JMe

50、nuItem mRecord;JMenuItem mCopy;JMenuItem mPaste;JMenuItem about;JTextField tResult, tf;JButton bNumber;JButton bOperator;JButton bOther;JButton bM;JButton Pi;JButton sin, cos, tan;JButton log;char operate =''操作數(shù)StringBuffer numl = new StringBuffer("0"), num2 = new StringBuffer(&quo

51、t;0");boolean isExist = false, isClear = false;/M系列StringBuffer memory = new StringBuffer(20);系統(tǒng)剪切板Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();/Java計(jì)算器構(gòu)造器public Calculator。f = new JFrame("計(jì)算器");Container contentPane = f.getContentPane();final SimpleDateFormat sdf

52、 = new SimpleDateFormat("當(dāng)前時(shí)間 HH:mm:ss"); Timer time = new Timer(1000, new ActionListener() public void actionPerformed(ActionEvent e) f.setTitle("計(jì)算器 "+ sdf.format(new Date(System.currentTimeMillis(); );time.start();計(jì)算器菜單的創(chuàng)建 */*JavaJMenuBar mBar = new JMenuBar(); mBar.setOpaque(

53、true);mView = new JMenu("查看(V)”);mView.setMnemonic(KeyEvent.VK_V);mRecord = new JMenuItem("歷史紀(jì)錄(H)"); mRecord.setMnemonic(KeyEvent.VK_H);mRecord.addActionListener(this);mView.add(mRecord);mEdit = new JMenu("編輯(E)");mEdit.setMnemonic(KeyEvent.VK_E);mCopy = new JMenuItem("

54、;復(fù)制(C)");mCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK);mCopy.addActionListener(this);mEdit.add(mCopy);mPaste = new JMenuItem("粘貼(P)");mPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_VInputEvent.CTRL_MASK);mPaste.addActionListener(this);mEdit

55、.add(mPaste);mHelp = new JMenu("幫助(H)");mHelp.setMnemonic(KeyEvent.VK_H);about = new JMenuItem("關(guān)于計(jì)算器");about.addActionListener(this);mHelp.add(about);mBar.add(mView);mBar.add(mEdit);mBar.add(mHelp);f.setJMenuBar(mBar);contentPane.setLayout(new BorderLayout();JPanel pTop = new JP

56、anel();pTop.setLayout(new BorderLayout();tf = new JTextField();tf.setHorizontalAlignment(JTextField.RIGHT);tf.setEditable(false);pTop.add(tf, BorderLayout.NORTH);tResult = new JTextField("0", 20);tResult.setFont(new Font("黑體", Font.BOLD, 28);tResult.setHorizontalAlignment(JTextFi

57、eld.RIGHT);tResult.setEditable(false);pTop.add(tResult, BorderLayout.CENTER);contentPane.add(pTop,BorderLayout.NORTH);JPanel pBottom = new JPanel();pBottom.setLayout(new BorderLayout();JPanel pLeft = new JPanel();pLeft.setLayout(new GridLayout(5,2,3,3); bM = new JButton("");bM.setEnabled(f

58、alse);/*JavapLeft.add(bM);計(jì)算器功能鍵定義 */Pi = new JButton(" 兀");Pi.addActionListener(this); Pi.setForeground(Color.red); pLeft.add(Pi);bOther = new JButton("MC");bOther.addActionListener(this);bOther.setForeground(Color.red);pLeft.add(bOther);sin = new JButton("sin");sin.ad

59、dActionListener(this);sin.setForeground(Color.red);pLeft.add(sin);bOther = new JButton("MR");bOther.addActionListener(this);bOther.setForeground(Color.red);pLeft.add(bOther);cos = new JButton("cos");cos.addActionListener(this);cos.setForeground(Color.red);pLeft.add(cos);bOther = new JButton("MS");bOthe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論