日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【Java作业】实验二 货物进销管理系统(运行成功完整代码

發布時間:2024/9/30 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java作业】实验二 货物进销管理系统(运行成功完整代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗目的
1.掌握Java中文件的讀寫操作。
2.學會使用Java提供的實用類(Vector, ArrayList)來完成特定的功能。
3.掌握字符串類(String, StringBuffer)的使用。
4.掌握用面向對象的方法分析和解決復雜問題。
二.實驗內容
編寫一個Inventory.java完成以下功能:
1.程序首先打開并讀取Inventory.txt中記錄的所有庫存記錄,然后讀取Transactions.txt,處理這個文件中包含的事務,記錄發貨記錄到Shipping.txt,并記錄錯誤信息到Errors.txt中。最后更新庫存到另外一個文件NewInventory.txt中。
2.文件Inventory.txt和NewInventory.txt的每行包含一個存貨記錄,沒條記錄包含下面一些字段息,這些字段之間用一個tab分開(見后面的文件格式):

字段 格式和含義
Item number 字符串型,貨物編號
Quantity 整型,貨物數量
Supplier 字符串型,供應商編號
Description 字符串型,貨物描述
3.字段Items按照從小到大的順序寫入文件的。注意Item號不必連續,如Item號為752的后面可能是800。
4.文件Transactions.txt包含幾個不同的處理記錄(每行一條記錄)。每條記錄前面以一個大寫字母開頭,表示這條記錄是什么類型的事務。在不同的大寫字母后面是不同的信息格式。所有的字段也是以tab鍵分開的(見Transactions.txt文件格式)。
5.以’O’開頭(Order的首字母)的事務表示這是一個發貨訂單,即某一種貨物應該發給特定的客戶。Item number和Quantity的格式如上面表格定義。Custom編號和上面的Supplier編號一致。處理一條定單記錄(以’O’開頭的事務)意味著從減少庫存記錄中相應貨物的數量(減少的數量=發貨單中的數量),記錄發貨信息到Shipping.txt中。注意:Inventory.txt中的quantity不應該小于0,如果對于某一種貨物,庫存的數量小于發貨單的數量的話,系統應該停止處理發貨單,并記錄出錯信息到Errors.txt。如果對于某一種貨物有多個發貨單,而且庫存總量小于這些發貨單的總和的話,系統應該按照發貨單中的數量從小到大的有限原則滿足客戶。也就是說,對于某一種貨物如果一個數量Quantity少的發貨單沒有處理之前,數量Quantity多的發貨單永遠不會被處理。(這種處理原則不受發貨單記錄在Transactions.txt的先后順序影響)
6.以’R’開頭的事務表示這是一個到貨單記錄,在’R’后面是Item number和它的數量Quanlity。處理一條到貨單意味著增加庫存中相應貨物的數量(增加的數量=到貨單中的數量)。注意:如果在Transactions.txt文件中,到貨單出現在發貨單之后,到貨單中的貨物數量可以用來填補發貨單中的數量(可以理解成在Transactions.txt中,優先處理到貨單)。
7.以’A’開頭的事務表示向庫存中增加一種新的貨物(即這種貨物以前庫存中沒有),在’A’后面是Item number,供應商supplier以及貨物的描述description。處理一個新增貨物記錄意味著向庫存中增加一個數量Quantity為0的新的Item。你可以假設在一個Transactions.txt中,新增貨物記錄總是出現在第一個到貨單之前。
8.以’D’開頭的事務表示從庫存中刪除一種貨物,在’D’后面是Item號。刪除操作總是在所有的事物處理之后才被處理,以保證對于可能出現的同一種貨物的發貨單的操作能在刪除之前被正確處理。如果要刪除的某種貨物的庫存量Quantity不為0的話,系統應該向Errors.txt記錄出錯信息。
9.文件Shipping.txt中的每一行代表給某一客戶的發貨信息。Shipping.txt中的每一行分別是客戶編號、Item號、貨物數量,它們之間用tab鍵分隔。如果發貨單中有兩條客戶編號和Item編號一樣的記錄,在Shipping.txt中應該將這兩條發貨信息合并(即將它們的數量相加)。
10.Errors.txt文件包含未發送的發貨記錄和庫存量大于0的刪除記錄。Errors.txt每一行包含Custom編號、Item編號以及發貨單上的數量Quantity。對于刪除操作,Custom編號為0,數量Quntity為庫存中的Quantity.
11.實驗測試數據:
Inventory.txt
17 42 6 blue
1234 0 4 whatsit
123123 999999 98 doohicky
Transactions.txt
O 123123 1000 9
O 17 36 8
O 17 12 4
R 123123 1
D 1234
A 5 4 Thingy
代碼:(目前還不完整,含有讀取transanctions.txt和寫入到shipping.txt中的)
先附資料:

vector:

public static void main(String args[])throws IOException{Vector hs = new Vector();Integer integer1 = new Integer(1);hs.addElement(integer1);Integer integer2 = new Integer(111);hs.addElement(integer2);Iterator iterator = hs.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}

ArrayList是最常用的List實現類,內部是通過數組實現的,它允許對元素進行快速隨機訪問。數組的缺點是每個元素之間不能有間隔,當數組大小不滿足時需要增加存儲能力,就要講已經有數組的數據復制到新的存儲空間中。當從ArrayList的中間位置插入或者刪除元素時,需要對數組進行復制、移動、代價比較高。因此,它適合隨機查找和遍歷,不適合插入和刪除。
Vector與ArrayList一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。
vector是線程(Thread)同步(Synchronized)的,所以它也是線程安全的,而Arraylist是線程異步(ASynchronized)的,是不安全的

public class Student {public static void main(String[] args) throws IOException { // Item number 字符串型,貨物編號 // Quantity 整型,貨物數量 // Supplier 字符串型,供應商編號 // Description 字符串型,貨物描述 String ItemNumber []=new String[10]; int Cliens []= new int[5]; int Quantity[]= new int[10];//庫存數量int ItemFa[]= new int[10];//發貨編號 String Supplier[]=new String[10]; String Description[]=new String[10]; String opertion[]=new String[10];//操作 String Matter[]=new String[10];//事務類型 String TransactionsItem[]=new String[10]; int numbers[]= new int[10] ;String data2[][]= new String[100][100];HashMap<String, Integer> ham = new HashMap<>(); int TotalLines=0;//一共多少行String datas[][] = new String[100][100];try{FileReader fr = new FileReader("D:\\Inventory.txt");BufferedReader bffr = new BufferedReader(fr);String s = null;int i = 0;while((s=bffr.readLine())!=null){datas[i] = s.split("\t");System.out.println("第"+i+"行"+s);// System.out.println(datas[i][0]+","+datas[i][1]); ItemNumber[i] = datas[i][0]; Quantity[i] = Integer.parseInt(datas[i][1]); Supplier[i]= datas[i][2];Description[i]= datas[i][3];i++;}bffr.close();fr.close();}catch(Exception e1){e1.printStackTrace();}try{FileReader mfr = new FileReader("D:\\Transactions.txt");BufferedReader mbffr = new BufferedReader(mfr);String s = null;int i = 0;while((s=mbffr.readLine())!=null){data2[i] = s.split("\t");// System.out.println("第"+(i+1)+"行"+s); // System.out.println(Integer.parseInt(data2[i][2])); if(data2[i][0]!=null){Matter[i]= data2[i][0]; if(Matter[i].matches("O")) {Cliens[i] = Integer.parseInt(data2[i][3]); ItemFa[i]= Integer.parseInt(data2[i][1]); } }if( data2[i][1]!=null)TransactionsItem[i] = data2[i][1];if(data2[i].length>2)numbers[i] = Integer.parseInt(data2[i][2]);if(ham.containsKey(TransactionsItem[i])) {int total = ham.get(TransactionsItem[i])+numbers[i];ham.put(TransactionsItem[i],total); } elseham.put(TransactionsItem[i],numbers[i]);//if(Matter[i].matches("O")) System.out.print("YES");TotalLines++;i++;}mbffr.close();mfr.close();}catch(Exception e1){e1.printStackTrace();}File file2 = new File("D:\\Shipping.txt");for(int m = 0;m < Matter.length;m++){if(Matter[m].matches("O")){System.out.println(Cliens[m]);try {FileWriter fw = new FileWriter(file2,true);BufferedWriter writer = new BufferedWriter(fw);writer.write(String.valueOf(Cliens[m]));writer.write("\t");writer.write(String.valueOf(numbers[m]));writer.write("\t");writer.write(String.valueOf(ItemFa[m]));writer.newLine(); writer.close(); fw.close();}catch (Exception e){e.printStackTrace();}}}// for(String key:ham.keySet())// System.out.println(ham.get(key));for(int j = 0;j < TotalLines-1;j++){for(int z = j+1;z < TotalLines;z++){System.out.print(TransactionsItem[j]+":");if(TransactionsItem[j].matches(TransactionsItem[z])) {numbers[j] = numbers[j]+numbers[z];}// System.out.println(numbers[j]);};} } }

用vector思路的版本:

class goods{private String Itemnumber;private int Quatity;private String Supplier;private String Description;public String getItemnumber() {return Itemnumber;} public void update(int num) {this.Quatity = this.Quatity+num;//修改總庫存的函數 }public void setItemnumber(String itemnumber) {Itemnumber = itemnumber;}public int getQuatity() {return Quatity;}public void setQuatity(int quatity) {Quatity = quatity;}public String getSupplier() {return Supplier;}public void setSupplier(String supplier) {Supplier = supplier;}public String getDescription() {return Description;}public void setDescription(String description) {Description = description;} public void less(int num) {//發貨時數量減少的函數this.Quatity = this.Quatity-num; }public goods(String itemnumber, int quatity, String supplier, String description) {Itemnumber = itemnumber;Quatity = quatity;Supplier = supplier;Description = description;} } class Fagood{private String operaion;private String Item;private int total;private String receiver;public String getOperaion() {return operaion;}public void setOperaion(String operaion) {this.operaion = operaion;}public String getItem() {return Item;}public void setItem(String item) {Item = item;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public Fagood(String operaion, String item, int total, String receiver) {this.operaion = operaion;Item = item;this.total = total;this.receiver = receiver;}public Fagood(String operaion, String item) {this.operaion = operaion;Item = item;}public Fagood(String operaion, String item, int total) {this.operaion = operaion;Item = item;this.total = total;} } public class Student {public static void main(String[] args) throws IOException {String datas[][] = new String[10][10];String data2[][] = new String[10][10];Vector<goods> Good = new Vector<goods>(0);// int Quantity[] = new int[1000000];//庫存數量Vector<Fagood> FaGood = new Vector<Fagood>(0);PrintWriter out1 = new PrintWriter("D:\\Error.txt","UTF-8");FileReader mfr = new FileReader("D:\\Transactions.txt");BufferedReader mbffr = new BufferedReader(mfr);FileReader fr = new FileReader("D:\\Inventory.txt");PrintWriter out = new PrintWriter(new FileWriter("D:\\Shipping.txt",true));out.println("客戶編號 "+" "+"Item號 "+"貨物數量");BufferedReader bffr = new BufferedReader(fr);try {String s = null;int i = 0;while ((s = bffr.readLine()) != null) {datas[i] = s.split("\t");System.out.println("第" + i + "行" + s);goods agood = new goods(datas[i][0], Integer.parseInt(datas[i][1]), datas[i][2], datas[i][3]);// System.out.println(agood.getDescription());Good.addElement(agood);//把一個商品加入到vector數組中i++;}bffr.close();fr.close();} catch (Exception e1) {e1.printStackTrace();}System.out.println(Good.capacity()); //處理D:\Transactions.txttry {String s = null;int i = 0;while ((s = mbffr.readLine()) != null){data2[i] = s.split("\t");// System.out.println("第"+(i+1)+"行"+s); // System.out.println(Integer.parseInt(data2[i][2]));Iterator iterator = Good.iterator();if (data2[i][0].matches("O")){Fagood fagood = new Fagood(data2[i][0], data2[i][1], Integer.parseInt(data2[i][2]), data2[i][3]);FaGood.add(fagood);for (int j = 0; j < Good.capacity()-1; j++){//System.out.println(good.getQuatity());if (Integer.parseInt(Good.get(j).getItemnumber()) == Integer.parseInt(fagood.getItem())){int num = Good.get(j).getQuatity();System.out.println(num);num = num - fagood.getTotal();System.out.println("減去后"+num);if (num < 0) {//驗錯,如果發貨的總量超過了庫存則寫入error.txttry{File file2 = new File("D:\\Error.txt");FileWriter in = new FileWriter(file2, true);out1.println(String.valueOf(fagood.getItem()) + "發貨庫存量不足\n");}catch (Exception ee) {ee.printStackTrace();}}else {Good.get(j).less(fagood.getTotal());try {File ship = new File("D:\\Shipping.txt");System.out.println("發貨一次");FileWriter fw = new FileWriter(ship, true);out.println( fagood.getReceiver()+"\t"+fagood.getTotal()+"\t"+fagood.getItem()+"\n");} catch (Exception e) {e.printStackTrace();}}}}// System.out.println(Good.capacity());}if (data2[i][0].matches("D"))//刪除一種商品{for (goods good : Good) {if (Integer.parseInt(good.getItemnumber()) == Integer.parseInt(data2[i][1])) {Good.remove(good);//刪除該種商品}}}if (data2[i][0].matches("R")) {//到貨單記錄,在'R'后面是Item number和它的數量Quanlity。for (goods good : Good) {if (Integer.parseInt(good.getItemnumber()) == Integer.parseInt(data2[i][1])) {System.out.println("是R");good.update(Integer.parseInt(data2[i][2]));//增加庫存}}}i++;}out.flush();out.close();out1.close();} catch (Exception e) {e.printStackTrace();} finally {}for (goods good : Good){ System.out.println(good.getItemnumber()+" "+good.getQuatity()+" "+good.getDescription());}}}

為了同學們自己看,于是刪掉了代碼注釋,有問題的私我吧~

附上結果圖:



總結

以上是生活随笔為你收集整理的【Java作业】实验二 货物进销管理系统(运行成功完整代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。