真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java大作業(yè)報告含代碼 java大作業(yè)

需要一份500行的java程序,期末大作業(yè),最好帶詳細注釋。

Java生成CSV文件簡單操作實例

創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)江城,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108

CSV是逗號分隔文件(Comma Separated Values)的首字母英文縮寫,是一種用來存儲數(shù)據(jù)的純文本格式,通常用于電子表格或數(shù)據(jù)庫軟件。在 CSV文件中,數(shù)據(jù)“欄”以逗號分隔,可允許程序通過讀取文件為數(shù)據(jù)重新創(chuàng)建正確的欄結(jié)構(gòu),并在每次遇到逗號時開始新的一欄。如:

123? ?1,張三,男2,李四,男3,小紅,女? ?

Java生成CSV文件(創(chuàng)建與導(dǎo)出封裝類)

package com.yph.omp.common.util;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

import org.junit.Test;

/**

* Java生成CSV文件

*/

public class CSVUtil {

/**

* 生成為CVS文件

*

* @param exportData

*? ? ? ? ? ? 源數(shù)據(jù)List

* @param map

*? ? ? ? ? ? csv文件的列表頭map

* @param outPutPath

*? ? ? ? ? ? 文件路徑

* @param fileName

*? ? ? ? ? ? 文件名稱

* @return

*/

@SuppressWarnings("rawtypes")

public static File createCSVFile(List exportData, LinkedHashMap map,

String outPutPath, String fileName) {

File csvFile = null;

BufferedWriter csvFileOutputStream = null;

try {

File file = new File(outPutPath);

if (!file.exists()) {

file.mkdir();

}

// 定義文件名格式并創(chuàng)建

csvFile = File.createTempFile(fileName, ".csv",

new File(outPutPath));

// UTF-8使正確讀取分隔符","

csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(

new FileOutputStream(csvFile), "GBK"), 1024);

// 寫入文件頭部

for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator

.hasNext();) {

java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator

.next();

csvFileOutputStream

.write("\"" + (String) propertyEntry.getValue() != null ? (String) propertyEntry

.getValue() : "" + "\"");

if (propertyIterator.hasNext()) {

csvFileOutputStream.write(",");

}

}

csvFileOutputStream.newLine();

// 寫入文件內(nèi)容

for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {

Object row = (Object) iterator.next();

for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator

.hasNext();) {

java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator

.next();

/*-------------------------------*/ 

//以下部分根據(jù)不同業(yè)務(wù)做出相應(yīng)的更改

StringBuilder sbContext = new StringBuilder("");

if (null != BeanUtils.getProperty(row,(String) propertyEntry.getKey())) {

if("證件號碼".equals(propertyEntry.getValue())){

//避免:身份證號碼 ,讀取時變換為科學(xué)記數(shù) - 解決辦法:加 \t(用Excel打開時,證件號碼超過15位后會自動默認科學(xué)記數(shù))

sbContext.append(BeanUtils.getProperty(row,(String) propertyEntry.getKey()) + "\t");

}else{

sbContext.append(BeanUtils.getProperty(row,(String) propertyEntry.getKey()));? ? ? ? ? ? ? ? ? ? ? ? ?

}

}

csvFileOutputStream.write(sbContext.toString());

/*-------------------------------*/? ? ? ? ? ? ? ? ?

if (propertyIterator.hasNext()) {

csvFileOutputStream.write(",");

}

}

if (iterator.hasNext()) {

csvFileOutputStream.newLine();

}

}

csvFileOutputStream.flush();

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

csvFileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return csvFile;

}

/**

* 下載文件

*

* @param response

* @param csvFilePath

*? ? ? ? ? ? 文件路徑

* @param fileName

*? ? ? ? ? ? 文件名稱

* @throws IOException

*/

public static void exportFile(HttpServletRequest request,

HttpServletResponse response, String csvFilePath, String fileName)

throws IOException {

response.setCharacterEncoding("UTF-8");

response.setContentType("application/csv;charset=GBK");

response.setHeader("Content-Disposition", "attachment; filename="

+ new String(fileName.getBytes("GB2312"), "ISO8859-1"));

InputStream in = null;

try {

in = new FileInputStream(csvFilePath);

int len = 0;

byte[] buffer = new byte[1024];

OutputStream out = response.getOutputStream();

while ((len = in.read(buffer)) 0) {

out.write(buffer, 0, len);

}

} catch (FileNotFoundException e1) {

System.out.println(e1);

} finally {

if (in != null) {

try {

in.close();

} catch (Exception e1) {

throw new RuntimeException(e1);

}

}

}

}

/**

* 刪除該目錄filePath下的所有文件

*

* @param filePath

*? ? ? ? ? ? 文件目錄路徑

*/

public static void deleteFiles(String filePath) {

File file = new File(filePath);

if (file.exists()) {

File[] files = file.listFiles();

for (int i = 0; i files.length; i++) {

if (files[i].isFile()) {

files[i].delete();

}

}

}

}

/**

* 刪除單個文件

*

* @param filePath

*? ? ? ? ? ? 文件目錄路徑

* @param fileName

*? ? ? ? ? ? 文件名稱

*/

public static void deleteFile(String filePath, String fileName) {

File file = new File(filePath);

if (file.exists()) {

File[] files = file.listFiles();

for (int i = 0; i files.length; i++) {

if (files[i].isFile()) {

if (files[i].getName().equals(fileName)) {

files[i].delete();

return;

}

}

}

}

}

@SuppressWarnings({ "unchecked", "rawtypes" })

@Test

public void createFileTest() {

List exportData = new ArrayListMap();

Map row1 = new LinkedHashMapString, String();

row1.put("1", "11");

row1.put("2", "12");

row1.put("3", "13");

row1.put("4", "14");

exportData.add(row1);

row1 = new LinkedHashMapString, String();

row1.put("1", "21");

row1.put("2", "22");

row1.put("3", "23");

row1.put("4", "24");

exportData.add(row1);

LinkedHashMap map = new LinkedHashMap();

map.put("1", "第一列");

map.put("2", "第二列");

map.put("3", "第三列");

map.put("4", "第四列");

String path = "d:/export";

String fileName = "文件導(dǎo)出";

File file = CSVUtil.createCSVFile(exportData, map, path, fileName);

String fileNameNew = file.getName();

String pathNew = file.getPath();

System.out.println("文件名稱:" + fileNameNew );

System.out.println("文件路徑:" + pathNew );

}

}

//注:BeanUtils.getProperty(row,(String) propertyEntry.getKey()) + "\t" ,只為解決數(shù)字格式超過15位后,在Excel中打開展示科學(xué)記數(shù)問題。

java實驗報告總結(jié)

源代碼:

public class Exe1_1 {

public static void main (String args[]){

byte a1=127;

int a2=12345;

long a3=123456789L;

float a4=1.23e-5f;

double a5=1.4567e3;

char a6=65;

boolean a7=true;

System.out.println("a1="+a1+"\na2="+a2+"\na3="+a3+"\na4="+a4+"\na5="+a5+"\na6="+a6+"\na7="+a7);

}

}運行結(jié)果:

2.編寫Java小應(yīng)用程序,輸出兩行字符串:“Java很有趣?!焙汀芭W(xué)習(xí)Java編程?!?,輸出的起點坐標(biāo)是(20,20),行距是50像素。源程序代碼:

import java.awt.Graphics;

import java.applet.Applet;

public class Exe1_2 extends Applet{

public void paint(Graphics g){

g.drawString("Java很有趣。",20,20);

g.drawString("努力學(xué)習(xí)Java編程。",20,70);

}

}運行情況:

3.使用算術(shù)運算符得到一個4位十進制數(shù)的各位數(shù)字并輸出,然后輸出該數(shù)的逆序數(shù)和各位數(shù)字平方后相加的和。

源程序代碼:

public class Exe1_3 {

public static void main (String args[]){

int n=3756,a,b,c,d,n1;

a=n/1000;

b=(n-1000*a)/100;

d=n%10;

c=(n%100-d)/10;

System.out.println("3756的逆序數(shù)為:"+d+" "+c+" "+b+" "+a);

System.out.print("各位數(shù)字平方后相加的和為:");

System.out.print(a*a+b*b+c*c+d*d);

}

}

運行結(jié)果:

三、實驗總結(jié)(是否完成實驗、實驗過程中的問題以及解決方法分析等)

本次是我第一次使用JAVA來進行編程,感覺很是不一樣,在前兩節(jié)課中我們學(xué)習(xí)了有關(guān)Java的一些簡單知識。然后這次的實驗是對最初的一種練習(xí)。

在第一題中,我們重要是認識java的運行環(huán)境,并且了解各種變量的數(shù)據(jù)類型。只要通過簡單的語句就可以通過運行。其中出現(xiàn)了一些單詞的拼寫錯誤,這些是可以修改正確的。第二題我們練習(xí)的十一個小的applet應(yīng)用程序,需要設(shè)置一個網(wǎng)頁來顯示,這是一個很不一樣的地方,最后成功測試,里面需要注意的是顯示位置的問題。第三題我們做的是一個有算法要求的解決問題,在測試中出現(xiàn)了一點小問題,程序的算法出了錯。還有一個問題是有關(guān)于顯示問題,最后的數(shù)據(jù)輸出需要用到兩行分別顯示字符和數(shù)據(jù),這樣才不會出錯。

JAVA實訓(xùn)報告

1、 實訓(xùn)的題目及簡介:

題目:java計算器應(yīng)用程序

簡介:通過本程序可以實現(xiàn)計算器的基本功能。程序是Frame類的子類。使用GridLayout的布局方式對組件進行布局,用Panel類的容器存放按扭、文本框組件,程序中也用到大量的else-----if語句。

2、 設(shè)計說明:

一實驗?zāi)康?/p>

通過實訓(xùn)能夠結(jié)合實例進一步理解面向?qū)ο蟪绦蛟O(shè)計的基本概念,掌握程序設(shè)計的基本方法和技巧,靈活的使用包,進一步的理解接口,熟練的掌握在接口中對事件的實現(xiàn)。深入理解和靈活運用面向?qū)ο蟪绦蛟O(shè)計的基本特性,培養(yǎng)良好的程序設(shè)計風(fēng)格,提高抽象思維、邏輯思維的能力。

二實驗內(nèi)容

編寫一個實現(xiàn)計算器應(yīng)用程序

三 程序介紹及其功能的實現(xiàn)

程序需要導(dǎo)入import java.awt.*、 import java.awt.event.*、 import java.lang.*、 import javax.swing.*包。①程序的基本框架是:首先定義一個Frame類的子類,之后聲明三個面板的布局,即定義了GridLayout類的三個對象gl1、gl2、gl3。之后是定義了Panel類的容器的四個對象p0、p1、p2、p3,其中p0用來存放顯示屏文本框組件,p1采用gl1布局,用來存放刪除和歸零按鈕,p3采用gl3布局,用來存放數(shù)字按鈕和運算符按鈕,p2采用gl2布局,用來存放其它功能按鈕鍵按鈕。②具體的實現(xiàn)過程是:⑴、程序定義了JTextField類的對象tf1和TextField類的對象tf2及26個button類的按鈕,在Counter類的構(gòu)造方法中分別對各個對象進行了初始化,對面板進行了合適的布局,各個按鈕也相應(yīng)的添加到相應(yīng)的容器中,在實例化所有按鈕、設(shè)置其前景色的同時并注冊監(jiān)聽器。

⑵、對各個組件進行相應(yīng)的設(shè)計之后,即程序運行之后的可視化界面完成之后開始實現(xiàn)程序內(nèi)部的事件過程,即接口的實現(xiàn)。定義了一個名為 Bt的類來實現(xiàn)接口,程序在actionPerformed( )方法中對各個按鈕和文本框組件的具體方法進行實現(xiàn),程序中不斷的用else—if語句對按鈕操作事件的實現(xiàn),并對事件的異常進行處理。

3.程序清單

import java.awt.*;

import java.awt.event.*;

import java.lang.*;

import javax.swing.*;

public class Counter extends Frame

{

//聲明三個面板的布局

GridLayout gl1,gl2,gl3;

Panel p0,p1,p2,p3;

JTextField tf1;

TextField tf2;

Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20,b21,b22,b23,b24,b25,b26;

StringBuffer str;//顯示屏所顯示的字符串

double x,y;//x和y都是運算數(shù)

int z;//Z表示單擊了那一個運算符.0表示"+",1表示"-",2表示"*",3表示"/"

static double m;//記憶的數(shù)字

public Counter()

{

gl1=new GridLayout(1,4,10,0);//實例化三個面板的布局

gl2=new GridLayout(4,1,0,15);

gl3=new GridLayout(4,5,10,15);

tf1=new JTextField(27);//顯示屏

tf1.setHorizontalAlignment(JTextField.RIGHT);

tf1.setEnabled(false);

tf1.setText("0");

tf2=new TextField(10);//顯示記憶的索引值

tf2.setEditable(false);

//實例化所有按鈕、設(shè)置其前景色并注冊監(jiān)聽器

b0=new Button("Backspace");

b0.setForeground(Color.red);

b0.addActionListener(new Bt());

b1=new Button("CE");

b1.setForeground(Color.red);

b1.addActionListener(new Bt());

b2=new Button("C");

b2.setForeground(Color.red);

b2.addActionListener(new Bt());

b3=new Button("MC");

b3.setForeground(Color.red);

b3.addActionListener(new Bt());

b4=new Button("MR");

b4.setForeground(Color.red);

b4.addActionListener(new Bt());

b5=new Button("MS");

b5.setForeground(Color.red);

b5.addActionListener(new Bt());

b6=new Button("M+");

b6.setForeground(Color.red);

b6.addActionListener(new Bt());

b7=new Button("7");

b7.setForeground(Color.blue);

b7.addActionListener(new Bt());

b8=new Button("8");

b8.setForeground(Color.blue);

b8.addActionListener(new Bt());

b9=new Button("9");

b9.setForeground(Color.blue);

b9.addActionListener(new Bt());

b10=new Button("/");

b10.setForeground(Color.red);

b10.addActionListener(new Bt());

b11=new Button("sqrt");

b11.setForeground(Color.blue);

b11.addActionListener(new Bt());

b12=new Button("4");

b12.setForeground(Color.blue);

b12.addActionListener(new Bt());

b13=new Button("5");

b13.setForeground(Color.blue);

b13.addActionListener(new Bt());

b14=new Button("6");

b14.setForeground(Color.blue);

b14.addActionListener(new Bt());

b15=new Button("*");

b15.setForeground(Color.red);

b15.addActionListener(new Bt());

b16=new Button("%");

b16.setForeground(Color.blue);

b16.addActionListener(new Bt());

b17=new Button("1");

b17.setForeground(Color.blue);

b17.addActionListener(new Bt());

b18=new Button("2");

b18.setForeground(Color.blue);

b18.addActionListener(new Bt());

b19=new Button("3");

b19.setForeground(Color.blue);

b19.addActionListener(new Bt());

b20=new Button("-");

b20.setForeground(Color.red);

b20.addActionListener(new Bt());

b21=new Button("1/X");

b21.setForeground(Color.blue);

b21.addActionListener(new Bt());

b22=new Button("0");

b22.setForeground(Color.blue);

b22.addActionListener(new Bt());

b23=new Button("+/-");

b23.setForeground(Color.blue);

b23.addActionListener(new Bt());

b24=new Button(".");

b24.setForeground(Color.blue);

b24.addActionListener(new Bt());

b25=new Button("+");

b25.setForeground(Color.red);

b25.addActionListener(new Bt());

b26=new Button("=");

b26.setForeground(Color.red);

b26.addActionListener(new Bt());

//實例化四個面板

p0=new Panel();

p1=new Panel();

p2=new Panel();

p3=new Panel();

//創(chuàng)建一個空字符串緩沖區(qū)

str=new StringBuffer();

//添加面板p0中的組件和設(shè)置其在框架中的位置和大小

p0.add(tf1);

p0.setBounds(10,25,300,40);

//添加面板p1中的組件和設(shè)置其在框架中的位置和大小

p1.setLayout(gl1);

p1.add(tf2);

p1.add(b0);

p1.add(b1);

p1.add(b2);

p1.setBounds(10,65,300,25);

//添加面板p2中的組件并設(shè)置其的框架中的位置和大小

p2.setLayout(gl2);

p2.add(b3);

p2.add(b4);

p2.add(b5);

p2.add(b6);

p2.setBounds(10,110,40,150);

//添加面板p3中的組件并設(shè)置其在框架中的位置和大小

p3.setLayout(gl3);//設(shè)置p3的布局

p3.add(b7);

p3.add(b8);

p3.add(b9);

p3.add(b10);

p3.add(b11);

p3.add(b12);

p3.add(b13);

p3.add(b14);

p3.add(b15);

p3.add(b16);

p3.add(b17);

p3.add(b18);

p3.add(b19);

p3.add(b20);

p3.add(b21);

p3.add(b22);

p3.add(b23);

p3.add(b24);

p3.add(b25);

p3.add(b26);

p3.setBounds(60,110,250,150);

//設(shè)置框架中的布局為空布局并添加4個面板

setLayout(null);

add(p0);

add(p1);

add(p2);

add(p3);

setResizable(false);//禁止調(diào)整框架的大小

//匿名類關(guān)閉窗口

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e1)

{

System.exit(0);

}

});

setBackground(Color.lightGray);

setBounds(100,100,320,280);

setVisible(true);

}

//構(gòu)造監(jiān)聽器

class Bt implements ActionListener

{

public void actionPerformed(ActionEvent e2)

{

try{

if(e2.getSource()==b1)//選擇"CE"清零

{

tf1.setText("0");//把顯示屏清零

str.setLength(0);//清空字符串緩沖區(qū)以準備接收新的輸入運算數(shù)

}

else if(e2.getSource()==b2)//選擇"C"清零

{

tf1.setText("0");//把顯示屏清零

str.setLength(0);

}

else if(e2.getSource()==b23)//單擊"+/-"選擇輸入的運算數(shù)是正數(shù)還是負數(shù)

{

x=Double.parseDouble(tf1.getText().trim());

tf1.setText(""+(-x));

}

else if(e2.getSource()==b25)//單擊加號按鈕獲得x的值和z的值并清空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);//清空緩沖區(qū)以便接收新的另一個運算數(shù)

y=0d;

z=0;

}

else if(e2.getSource()==b20)//單擊減號按鈕獲得x的值和z的值并清空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);

y=0d;

z=1;

}

else if(e2.getSource()==b15)//單擊乘號按鈕獲得x的值和z的值并清空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);

y=0d;

z=2;

}

else if(e2.getSource()==b10)//單擊除號按鈕獲得x的值和z的值并空y的值

{

x=Double.parseDouble(tf1.getText().trim());

str.setLength(0);

y=0d;

z=3;

}

else if(e2.getSource()==b26)//單擊等號按鈕輸出計算結(jié)果

{

str.setLength(0);

switch(z)

{

case 0 : tf1.setText(""+(x+y));break;

case 1 : tf1.setText(""+(x-y));break;

case 2 : tf1.setText(""+(x*y));break;

case 3 : tf1.setText(""+(x/y));break;

}

}

else if(e2.getSource()==b24)//單擊"."按鈕輸入小數(shù)

{

if(tf1.getText().trim().indexOf('.')!=-1)//判斷字符串中是否已經(jīng)包含了小數(shù)點

{

}

else//如果沒數(shù)點有小

{

if(tf1.getText().trim().equals("0"))//如果初時顯示為0

{

str.setLength(0);

tf1.setText((str.append("0"+e2.getActionCommand())).toString());

}

else if(tf1.getText().trim().equals(""))//如果初時顯示為空則不做任何操作

{

}

else

{

tf1.setText(str.append(e2.getActionCommand()).toString());

}

}

y=0d;

}

else if(e2.getSource()==b11)//求平方根

{

x=Double.parseDouble(tf1.getText().trim());

tf1.setText("數(shù)字格式異常");

if(x0)

tf1.setText("負數(shù)沒有平方根");

else

tf1.setText(""+Math.sqrt(x));

str.setLength(0);

y=0d;

}

else if(e2.getSource()==b16)//單擊了"%"按鈕

{

x=Double.parseDouble(tf1.getText().trim());

tf1.setText(""+(0.01*x));

str.setLength(0);

y=0d;

}

else if(e2.getSource()==b21)//單擊了"1/X"按鈕

{

x=Double.parseDouble(tf1.getText().trim());

if(x==0)

{

tf1.setText("除數(shù)不能為零");

}

else

{

tf1.setText(""+(1/x));

}

str.setLength(0);

y=0d;

}

else if(e2.getSource()==b3)//MC為清除內(nèi)存

{

m=0d;

tf2.setText("");

str.setLength(0);

}

else if(e2.getSource()==b4)//MR為重新調(diào)用存儲的數(shù)據(jù)

{

if(tf2.getText().trim()!="")//有記憶數(shù)字

{

tf1.setText(""+m);

}

}

else if(e2.getSource()==b5)//MS為存儲顯示的數(shù)據(jù)

{

m=Double.parseDouble(tf1.getText().trim());

tf2.setText("M");

tf1.setText("0");

str.setLength(0);

}

else if(e2.getSource()==b6)//M+為將顯示的數(shù)字與已經(jīng)存儲的數(shù)據(jù)相加要查看新的數(shù)字單擊MR

{

m=m+Double.parseDouble(tf1.getText().trim());

}

else//選擇的是其他的按鈕

{

if(e2.getSource()==b22)//如果選擇的是"0"這個數(shù)字鍵

{

if(tf1.getText().trim().equals("0"))//如果顯示屏顯示的為零不做操作

{

}

else

{

tf1.setText(str.append(e2.getActionCommand()).toString());

y=Double.parseDouble(tf1.getText().trim());

}

}

else if(e2.getSource()==b0)//選擇的是“BackSpace”按鈕

{

if(!tf1.getText().trim().equals("0"))//如果顯示屏顯示的不是零

{

if(str.length()!=1)

{

tf1.setText(str.delete(str.length()-1,str.length()).toString());//可能拋出字符串越界異常

}

else

{

tf1.setText("0");

str.setLength(0);

}

}

y=Double.parseDouble(tf1.getText().trim());

}

else//其他的數(shù)字鍵

{

tf1.setText(str.append(e2.getActionCommand()).toString());

y=Double.parseDouble(tf1.getText().trim());

}

}

}

catch(NumberFormatException e){

tf1.setText("數(shù)字格式異常");

}

catch(StringIndexOutOfBoundsException e){

tf1.setText("字符串索引越界");

}

}

}

public static void main(String args[])

{

new Counter();

}

}

4、調(diào)試結(jié)果

5、實習(xí)體會

Java計算器實驗報告(含代碼),急?。。?!

給你一個吧。

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTextField;

/**

* 一個計算器,與Windows附件自帶計算器的標(biāo)準版功能、界面相仿。

* 但還不支持鍵盤操作。

*/

public class Calculator extends JFrame implements ActionListener {

/** 計算器上的鍵的顯示名字 */

private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",

"*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };

/** 計算器上的功能鍵的顯示名字 */

private final String[] COMMAND = { "Backspace", "CE", "C" };

/** 計算器左邊的M的顯示名字 */

private final String[] M = { " ", "MC", "MR", "MS", "M+" };

/** 計算器上鍵的按鈕 */

private JButton keys[] = new JButton[KEYS.length];

/** 計算器上的功能鍵的按鈕 */

private JButton commands[] = new JButton[COMMAND.length];

/** 計算器左邊的M的按鈕 */

private JButton m[] = new JButton[M.length];

/** 計算結(jié)果文本框 */

private JTextField resultText = new JTextField("0");

// 標(biāo)志用戶按的是否是整個表達式的第一個數(shù)字,或者是運算符后的第一個數(shù)字

private boolean firstDigit = true;

// 計算的中間結(jié)果。

private double resultNum = 0.0;

// 當(dāng)前運算的運算符

private String operator = "=";

// 操作是否合法

private boolean operateValidFlag = true;

/**

* 構(gòu)造函數(shù)

*/

public Calculator(){

super();

//初始化計算器

init();

//設(shè)置計算器的背景顏色

this.setBackground(Color.LIGHT_GRAY);

this.setTitle("計算器");

//在屏幕(500, 300)坐標(biāo)處顯示計算器

this.setLocation(500, 300);

//不許修改計算器的大小

this.setResizable(false);

//使計算器中各組件大小合適

this.pack();

}

/**

* 初始化計算器

*/

private void init() {

// 文本框中的內(nèi)容采用右對齊方式

resultText.setHorizontalAlignment(JTextField.RIGHT);

// 不允許修改結(jié)果文本框

resultText.setEditable(false);

// 設(shè)置文本框背景顏色為白色

resultText.setBackground(Color.white);

//初始化計算器上鍵的按鈕,將鍵放在一個畫板內(nèi)

JPanel calckeysPanel = new JPanel();

//用網(wǎng)格布局器,4行,5列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素

calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3));

for (int i = 0; i KEYS.length; i++) {

keys[i] = new JButton(KEYS[i]);

calckeysPanel.add(keys[i]);

keys[i].setForeground(Color.blue);

}

//運算符鍵用紅色標(biāo)示,其他鍵用藍色表示

keys[3].setForeground(Color.red);

keys[8].setForeground(Color.red);

keys[13].setForeground(Color.red);

keys[18].setForeground(Color.red);

keys[19].setForeground(Color.red);

//初始化功能鍵,都用紅色標(biāo)示。將功能鍵放在一個畫板內(nèi)

JPanel commandsPanel = new JPanel();

//用網(wǎng)格布局器,1行,3列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素

commandsPanel.setLayout(new GridLayout(1, 3, 3, 3));

for (int i = 0; i COMMAND.length; i++) {

commands[i] = new JButton(COMMAND[i]);

commandsPanel.add(commands[i]);

commands[i].setForeground(Color.red);

}

//初始化M鍵,用紅色標(biāo)示,將M鍵放在一個畫板內(nèi)

JPanel calmsPanel = new JPanel();

//用網(wǎng)格布局管理器,5行,1列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素

calmsPanel.setLayout(new GridLayout(5, 1, 3, 3));

for (int i = 0; i M.length; i++) {

m[i] = new JButton(M[i]);

calmsPanel.add(m[i]);

m[i].setForeground(Color.red);

}

//下面進行計算器的整體布局,將calckeys和command畫板放在計算器的中部,

//將文本框放在北部,將calms畫板放在計算器的西部。

//新建一個大的畫板,將上面建立的command和calckeys畫板放在該畫板內(nèi)

JPanel panel1 = new JPanel();

//畫板采用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素

panel1.setLayout(new BorderLayout(3, 3));

panel1.add("North", commandsPanel);

panel1.add("West", calckeysPanel);

//建立一個畫板放文本框

JPanel top = new JPanel();

top.setLayout(new BorderLayout());

top.add("Center", resultText);

//整體布局

getContentPane().setLayout(new BorderLayout(3, 5));

getContentPane().add("North", top);

getContentPane().add("Center", panel1);

getContentPane().add("West", calmsPanel);

//為各按鈕添加事件偵聽器

//都使用同一個事件偵聽器,即本對象。本類的聲明中有implements ActionListener

for (int i = 0; i KEYS.length; i++) {

keys[i].addActionListener(this);

}

for (int i = 0; i COMMAND.length; i++) {

commands[i].addActionListener(this);

}

for (int i = 0; i M.length; i++) {

m[i].addActionListener(this);

}

}

/**

* 處理事件

*/

public void actionPerformed(ActionEvent e) {

//獲取事件源的標(biāo)簽

String label = e.getActionCommand();

if (label.equals(COMMAND[0])){

//用戶按了"Backspace"鍵

handleBackspace();

} else if (label.equals(COMMAND[1])) {

//用戶按了"CE"鍵

resultText.setText("0");

} else if (label.equals(COMMAND[2])){

//用戶按了"C"鍵

handleC();

} else if ("0123456789.".indexOf(label) = 0) {

//用戶按了數(shù)字鍵或者小數(shù)點鍵

handleNumber(label);

// handlezero(zero);

} else {

//用戶按了運算符鍵

handleOperator(label);

}

}

/**

* 處理Backspace鍵被按下的事件

*/

private void handleBackspace() {

String text = resultText.getText();

int i = text.length();

if (i 0) {

//退格,將文本最后一個字符去掉

text = text.substring(0, i - 1);

if (text.length() == 0) {

//如果文本沒有了內(nèi)容,則初始化計算器的各種值

resultText.setText("0");

firstDigit = true;

operator = "=";

} else {

//顯示新的文本

resultText.setText(text);

}

}

}

/**

* 處理數(shù)字鍵被按下的事件

* @param key

*/

private void handleNumber(String key) {

if (firstDigit) {

//輸入的第一個數(shù)字

resultText.setText(key);

} else if ((key.equals(".")) (resultText.getText().indexOf(".") 0)){

//輸入的是小數(shù)點,并且之前沒有小數(shù)點,則將小數(shù)點附在結(jié)果文本框的后面

resultText.setText(resultText.getText() + ".");

} else if (!key.equals(".")) {

//如果輸入的不是小數(shù)點,則將數(shù)字附在結(jié)果文本框的后面

resultText.setText(resultText.getText() + key);

}

//以后輸入的肯定不是第一個數(shù)字了

firstDigit = false;

}

/**

* 處理C鍵被按下的事件

*/

private void handleC() {

//初始化計算器的各種值

resultText.setText("0");

firstDigit = true;

operator = "=";

}

/**

* 處理運算符鍵被按下的事件

* @param key

*/

private void handleOperator(String key) {

if (operator.equals("/")) {

//除法運算

//如果當(dāng)前結(jié)果文本框中的值等于0

if (getNumberFromText() == 0.0){

//操作不合法

operateValidFlag = false;

resultText.setText("除數(shù)不能為零");

} else {

resultNum /= getNumberFromText();

}

} else if (operator.equals("1/x")) {

//倒數(shù)運算

if (resultNum == 0.0){

//操作不合法

operateValidFlag = false;

resultText.setText("零沒有倒數(shù)");

} else {

resultNum = 1 / resultNum;

}

} else if (operator.equals("+")){

//加法運算

resultNum += getNumberFromText();

} else if (operator.equals("-")){

//減法運算

resultNum -= getNumberFromText();

} else if (operator.equals("*")){

//乘法運算

resultNum *= getNumberFromText();

} else if (operator.equals("sqrt")) {

//平方根運算

resultNum = Math.sqrt(resultNum);

} else if (operator.equals("%")){

//百分號運算,除以100

resultNum = resultNum / 100;

} else if (operator.equals("+/-")){

//正數(shù)負數(shù)運算

resultNum = resultNum * (-1);

} else if (operator.equals("=")){

//賦值運算

resultNum = getNumberFromText();

}

if (operateValidFlag) {

//雙精度浮點數(shù)的運算

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

resultText.setText(String.valueOf(t1));

} else {

resultText.setText(String.valueOf(resultNum));

}

}

//運算符等于用戶按的按鈕

operator = key;

firstDigit = true;

operateValidFlag = true;

}

/**

* 從結(jié)果文本框中獲取數(shù)字

* @return

*/

private double getNumberFromText() {

double result = 0;

try {

result = Double.valueOf(resultText.getText()).doubleValue();

} catch (NumberFormatException e){

}

return result;

}

public static void main(String args[]) {

Calculator calculator1 = new Calculator();

calculator1.setVisible(true);

calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}


本文題目:java大作業(yè)報告含代碼 java大作業(yè)
轉(zhuǎn)載來源:http://weahome.cn/article/dojcjdo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部