实验目的
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作业】实验二 货物进销管理系统(运行成功完整代码相关推荐

  1. Java实验二 货物进销管理系统【简单易懂】

    写在前面:这个题目主要通过仔细阅读题目的需求,再通过对文件流以及Vector.ArrayList等容器的控制来完成整个代码体系的构建.因为当时正在学习,对代码的构建逻辑不够规范,思想不够到位的地方也难 ...

  2. Java技术实验三 货物进销管理系统

    一.实验目的 1.掌握Java中文件的读写操作. 2.学会使用Java提供的实用类(Vector, ArrayList)来完成特定的功能. 3.掌握字符串类(String, StringBuffer) ...

  3. 实验二 货物进销管理系统

    1.掌握Java中文件的读写操作. 2.学会使用Java提供的实用类(Vector, ArrayList)来完成特定的功能. 3.掌握字符串类(String, StringBuffer)的使用. 4. ...

  4. java货物进销管理系统_java实验 货物进销管理系统

    实验二货物进销管理系统 一.实验目的 1.掌握Java中文件的读写操作. 2.学会使用Java提供的实用类(Vector, ArrayList)来完成特定的功能. 3.掌握字符串类(String, S ...

  5. java货物进销管理系统【电竞杜小帅】

    1.程序首先打开并读取Inventory.txt中记录的所有库存记录,然后读取Transactions.txt,处理这个文件中包含的事务,记录发货记录到Shipping.txt,并记录错误信息到Err ...

  6. java计算机毕业设计企业进销管理系统的设计与实现源代码+数据库+系统+lw文档

    java计算机毕业设计企业进销管理系统的设计与实现源代码+数据库+系统+lw文档 java计算机毕业设计企业进销管理系统的设计与实现源代码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 ...

  7. java计算机毕业设计珠宝首饰进销存管理系统源码+数据库+系统+lw文档

    java计算机毕业设计珠宝首饰进销存管理系统源码+数据库+系统+lw文档 java计算机毕业设计珠宝首饰进销存管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  8. 基于JAVA企业进销管理系统的设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA企业进销管理系统的设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA企业进销管理系统的设计与实现计算机毕业设计源码+数据库+lw文档+系统+部署 项目架构:B/S架构 ...

  9. Java毕设项目珠宝首饰进销存管理系统计算机(附源码+系统+数据库+LW)

    Java毕设项目珠宝首饰进销存管理系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

最新文章

  1. 第20章 使用LNMP架构部署动态网站环境
  2. 「技术综述」一文道尽传统图像降噪方法
  3. OWASP Top 10 – 2013, 最新十大安全隐患(ASP.NET解决方法)
  4. .NET url 的编码与解码
  5. 可选版本 安装软件_【Linux软件】在Deepin系统下安装LibreOffice 6.1.4版本的方法
  6. oracle 12c alert,Oracle 12c DG备库Alert报错ORA-01110
  7. tar 打包、压缩和备份
  8. 【网络流24题】【LOJ6010】数字梯形(费用流)
  9. mysql 数据库取前后几秒 几分钟 几小时 几天的语句
  10. mysql从备份,mysql 主从同步范例-从同步备份步骤
  11. 黑客攻防实战入门(第三版)
  12. 难得清醒好文:年轻人你活着不是为了看K线——李小鹏
  13. HTC Vive榜单:盘点一周最受欢迎的VR应用
  14. excel如何随机生成不重复的数字
  15. 全面领跑中国DevOps云服务市场,为什么是华为云?
  16. 第二届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2023)
  17. 智能驾驶功能软件平台设计规范 第一部分:系统架构
  18. win10怎么录屏幕视频带声音?有哪些需要注意的地方?
  19. Unity--内置转换矩阵
  20. 方框如何打勾、打叉与涂黑(转)

热门文章

  1. mysql sqlite 分页查询_php基于SQLite实现的分页功能示例
  2. android 8.0手机开服务端,Android 8.0 + Service开启方式兼容处理
  3. python3 获取当前路径_python3获取当前目录(转)
  4. java 多网卡ip_java获取双网卡ip地址
  5. Android ListView与Arrayadapter之间的搭配使用
  6. leetcode复习1
  7. webpack 语法
  8. ​GPLinker:基于GlobalPointer的实体关系联合抽取
  9. TPAMI 2021 | 时间走向二维,基于文本的视频时间定位新方法兼顾速度与精度
  10. 消费级GPU、速度提升3000倍,微软FastNeRF实现200FPS高保真神经渲染