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

2.文件Inventory.txt和NewInventory.txt的每行包含一个存货记录,没条记录包含下面一些字段息,这些字段之间用一个tab分开(见后面的文件格式)

3.字段Items按照从小到大的顺序写入文件的。注意Item号不必连续,如Item号为752的后面可能是800。
4.文件Transactions.txt包含几个不同的处理记录(每行一条记录)。每条记录前面以一个大写字母开头,表示这条记录是什么类型的事务。在不同的大写字母后面是不同的信息格式。所有的字段也是以tab键分开的(见Transactions.txt文件格式)。

5.以’O’开头的事务表示这是一个发货订单,即某一种货物应该发给特定的客户。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.

public class Inventory {public static void main(String[] args) throws IOException {String s=null;BufferedReader reader = new BufferedReader(new FileReader("Inventory.txt"));HashMap<String,Integer> ie = new HashMap<String,Integer>();//方便通过货物编号来找到存储在vector中的位置Vector<inventor> inventory =new Vector<inventor>();while((s=reader.readLine())!=null){String []split =s.split("\t");//根据tab键分割inventory.add(new inventor(split[0],Integer.parseInt(split[1]),split[2],split[3]));ie.put(split[0], inventory.size()-1);}reader.close();BufferedReader reader2 = new BufferedReader(new FileReader("Transactions.txt"));List<List<String>> trans =new ArrayList<>();for(int i=0;i<10;i++) {trans.add(new Vector<String>());}while((s=reader2.readLine())!=null) {switch(s.charAt(0)) {case'O':trans.get(0).add(s);break;case 'R':trans.get(1).add(s);break;case'D':trans.get(2).add(s);break;case'A':trans.get(3).add(s);break;default:break;}}reader2.close();for(int i=0;i<trans.get(3).size();i++) {//添加新货物String []split = trans.get(3).get(i).split("\t"); inventory.add(new inventor(split[1],0,split[2],split[3]));ie.put(split[1], inventory.size()-1);}for(int i=0;i<trans.get(1).size();i++) {//添加仓库中货物数量String []split=trans.get(1).get(i).split("\t");inventory.get(ie.get(split[1])).Quantity+=Integer.parseInt(split[2]);}Collections.sort(trans.get(0),new helper());//按照货物的数量排序Vector<shop> shopping =new Vector<>();HashMap<String,Integer> shopmap=new HashMap<>();BufferedWriter errorwriter = new BufferedWriter(new FileWriter("Error.txt"));for(int i=0;i<trans.get(0).size();i++) {String []split=trans.get(0).get(i).split("\t");if(Integer.parseInt(split[2])<inventory.get(ie.get(split[1])).Quantity) {inventory.get(ie.get(split[1])).Quantity-=Integer.parseInt(split[2]);if(shopmap.containsKey(split[3])&&shopping.get(shopmap.get(split[3])).item==split[1]) {shopping.get(shopmap.get(split[3])).Quantity+=Integer.parseInt(split[2]);}else {shopping.add(new shop(split[3],split[1],Integer.parseInt(split[2])));shopmap.put(split[3], shopping.size()-1);}}else {errorwriter.write(split[3]+"\t"+split[1]+"\t"+split[2]);errorwriter.newLine();}}for(int i=0;i<trans.get(2).size();i++) {String []split = trans.get(2).get(i).split("\t");if(inventory.get(ie.get(split[1])).Quantity>0) {errorwriter.write("0"+"\t"+split[1]+"\t"+inventory.get(ie.get(split[1])).Quantity);errorwriter.newLine();}inventory.remove((int)ie.get(split[1]));}errorwriter.close();BufferedWriter shoppingwriter = new BufferedWriter(new FileWriter("Shopping.txt"));for(int i=0;i<shopping.size();i++) {shoppingwriter.write(shopping.get(i).Suopplier+"\t"+shopping.get(i).item+"\t"+shopping.get(i).Quantity);shoppingwriter.newLine();}shoppingwriter.close();BufferedWriter newinventorywriter = new BufferedWriter(new FileWriter("NewInventory.txt"));for(int i=0;i<inventory.size();i++) {newinventorywriter.write(inventory.get(i).item+"\t"+inventory.get(i).Quantity+"\t"+inventory.get(i).Suopplier+"\t"+inventory.get(i).Description);newinventorywriter.newLine();;}newinventorywriter.close();}}class inventor{String item;int Quantity;String Suopplier;String Description;public inventor(String item, int quantity, String suopplier, String description) {super();this.item = item;Quantity = quantity;Suopplier = suopplier;Description = description;}/*public void cout() {System.out.println(this.item+","+this.Quantity+","+this.Suopplier+","+this.Description);*/}
}
class helper implements Comparator{@Overridepublic int compare(Object s1,Object s2) {String []t1 = ((String)s1).split("\t");String []t2 = ((String)s2).split("\t");return Integer.parseInt(t1[2])>Integer.parseInt(t2[2]) ? 1:-1;}}
class shop{String Suopplier;String item;int Quantity;public shop(String suopplier, String item, int quantity) {super();Suopplier = suopplier;this.item = item;Quantity = quantity;}}
``

java货物进销管理系统【电竞杜小帅】相关推荐

  1. java Thread的介绍【电竞杜小帅】

    java中的线程 java中的线程操作封装在Thread,Runnable中. 通过Thread中的相应方法可以启动线程.停止线程 每个线程都必须有run()方法(即线程体) Thread通过调用st ...

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

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

  3. Java基于GUI的网络通信程序设计【电竞杜小帅】

    1.设计一个基于GUI的客户-服务器的通信应用程序,如图1,图2所示. 图1 Socket通信服务器端界面 图2 Socket通信客户端界面 2.图1为Socket通信服务器端界面,点击该界面中的[S ...

  4. Vue最low的路由嵌套【电竞杜小帅】

    1.首先创建一个vue的项目 如果不知道vue项目环境搭配可以看我上一篇博客链接: link 2.打开创建的vue项目 2.1在components包(也可以在其他地方创建vue文件等会会提到)下面创 ...

  5. Vue的项目搭配以及实现页面跳转【电竞杜小帅】

    Vue的项目搭建 1.安装Node.js 下载Node.js,Node.js安装包及源码下载地址:https://nodejs.org/en/download,其他默认就行. 安装好了以后调出命令行输 ...

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

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

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

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

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

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

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

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

最新文章

  1. Matlab与数据结构 -- 如何获取完整文件名
  2. 浅谈自考学习方法(二)
  3. synergy在Windows和Linux下使用全攻略(多台PC共享一套键盘鼠标)
  4. 台式电脑主板插线步骤图_风味台式烤肠#夏天夜宵High起来!#
  5. strcmp java_C语言中strcmp的实现原型
  6. html表单input file,input标签type=file的文件上传
  7. 分布式网络游戏百万人同时在线服务器架构实现
  8. 《Jquery实战》第3版:译者序 Frank Xu Lei
  9. C++ 控制对象的创建方式和数量
  10. Web前端开发初学者十问集锦(4)
  11. 学前儿童语言教育模拟试卷c卷,学前儿童语言教育模拟试卷参考答案.doc
  12. c语言中有关逗号表达式
  13. 阿里架构师首次畅谈余额宝背后的故事
  14. ABAP学习笔记之五-报表的事件 [翱翔云天 ]
  15. ramda 函数 Math
  16. 获取取本月一号、本月月末 日期
  17. 小程序跳转公众号关注页面的两种方法
  18. Java实现比较APP版本号大小
  19. 【测试用例】文本框测试用例
  20. 小程序“Mustache”语法{{}}(双大括号)获取不到值或图片

热门文章

  1. 在DAZ3D STUDIO中使用.OBJ和.FBX三维模型
  2. Mysql优化(一)—Sql语句
  3. C/C++实现矩阵各种运算
  4. SIM7600CE应用程序调试流程
  5. 蓝桥杯--历届真题 最优包含【第十届】【决赛】【B组】
  6. backtracking及其应用
  7. 基于zynq的SGMII调试
  8. 小程序 | 小程序中常用的事件 + 事件对象的属性列表 +小程序事件传参 + 小程序全局配置 + 小程序页面配置 + 小程序发起网络数据请求
  9. LTE IPV6地址配置
  10. Scrapy爬虫项目的管理部署