基于JAVA对象流写的图书进销存系统管理

1、用户登录
用户只需一个,即admin管理员,用户密码为123456,用户登录信息保存在属性文件user. properties中,用户登录时输入用户名和密码,如果成功则打印系统菜单,不成功则重新登录,不成功的次数最多3次,超过3次,则系统退出。
(在内存中一行一行读取出来,对字符串进行修改,然后覆盖)
2、系统菜单:1、库存管理 2、销售管理 3、查询库中所有图书信息
4、查询销售信息、5,退出
3、选择不同的菜单,进入不同的管理功能。1、库存管理 : 使用bookStore.txt文件作为图书数据文件,
进入库存管理后只能进行图书入库操作和退出,既向文件中添加图书信息,如果图书名称在文件中已经存在,则再录入此书的时候,需要在原有的图书的库存基础上添加数据。如果没有此书,则作为新的数据录入。
如果录入信息为: Java基础,则下一步只需要录入进货数量即可。
如果录入信息为:HTML,此书没有,则需要进行详细录入,下一步录入作者名称、进价、售价、库存等信息。
4、销售管理:使用sell.txt文件作为图书销售信息保存,
卖出去之后 用新的集合对象(盈利)

提示:第一次运行可能会抛出异常,因为第一次写入的时候会读到文件末尾流!!!后面运行一切正常!
第一个文件Book.java

package com.langxikeji.Object;
import java.io.Serializable;
//创建一个Book类,并且实现Serializable接口
public class Book implements Serializable{private int bookId;private String bookName;private String auther;private double purprice;private double sellprice;private int stock;private int salecount;private double profit;public int getBookId() {return bookId;}public void setBookId(int bookId) {this.bookId = bookId;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getAuther() {return auther;}public void setAuther(String auther) {this.auther = auther;}public double getPurprice() {return purprice;}public void setPurprice(double purprice) {this.purprice = purprice;}public double getSellprice() {return sellprice;}public void setSellprice(double sellprice) {this.sellprice = sellprice;}public int getStock() {return stock;}public void setStock(int stock) {this.stock = stock;}public int getSalecount() {return salecount;}public void setSalecount(int salecount) {this.salecount = salecount;}public double getProfit() {return profit;}public void setProfit(double profit) {this.profit = profit;}//读取和写入sell.txt文件public Book(int bookId, String bookName, String auther, double purprice,double sellprice, int salecount, double profit) {super();this.bookId = bookId;this.bookName = bookName;this.auther = auther;this.purprice = purprice;this.sellprice = sellprice;this.salecount = salecount;this.profit = profit;}//读取和写入bookStore.txt文件public Book(int bookId, String bookName, String auther, double purprice,double sellprice, int stock) {super();this.bookId = bookId;this.bookName = bookName;this.auther = auther;this.purprice = purprice;this.sellprice = sellprice;this.stock = stock;}//空的构造方法,初始化变量public Book() {// TODO Auto-generated constructor stub}
}

第二个文件Booksadd.java
使用对象流和集合输入和输出增加库存信息

package com.langxikeji.Object;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class BooksAdd {//保存bookStore.txt文件里面的对象public  List<Book>booklist=new ArrayList<Book>();//无参的构造方法,Book对象初始化public BooksAdd(){readFile();if(booklist.size()==0){Book book=new Book(1,"JAVA基础","李刚",36.80,45.50,50);insert(book);book=new Book(2,"JAVAEE编程","李刚",25.50,36.78,100);insert(book);}}//往booklist中传入对象,并且写入bookStore.txt文件中public void insert(Book book){booklist.add(book);writeFile();}public List<Book> totalBooks(){return booklist; }//对象输出流public void writeFile(){String name="C:\\Users\\lenovo\\Desktop\\bookStore.txt";try(FileOutputStream ops=new FileOutputStream(name);ObjectOutputStream oos=new ObjectOutputStream(ops);){oos.writeObject(booklist); oos.flush();System.out.println("数据保存成功!");}catch(Exception e){e.printStackTrace();}}//对象输入流public void readFile(){String name="C:\\Users\\lenovo\\Desktop\\bookStore.txt";try(FileInputStream ips=new FileInputStream(name);ObjectInputStream ois=new ObjectInputStream(ips)){booklist=(List<Book>)ois.readObject();}catch(Exception e){e.printStackTrace();}}
}

第三个文件Bookssell.java
输入和输出销售信息

package com.langxikeji.Object;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;public class BooksSell {//保存sell.txt文件里面的对象public  List<Book>selllist=new ArrayList<Book>();public BooksSell(){readFilesell();if(selllist.size()==0){Book book=new Book(1,"JAVA基础","李刚",36.80,45.50,0,0.0);insertsell(book);}}//往insertsell中传入对象,并且写入sell.txt文件中public void insertsell(Book book){selllist.add(book);writeFilesell();}public List<Book> sellBooks(){return selllist;}public void readFilesell(){String name="C:\\Users\\lenovo\\Desktop\\sell.txt";File file=new File(name);try(InputStream ips=new FileInputStream(file);ObjectInputStream ois=new ObjectInputStream(ips)){selllist=(List<Book>)ois.readObject();}catch(Exception e){e.printStackTrace();}}//对象输出流public void writeFilesell(){String name="C:\\Users\\lenovo\\Desktop\\sell.txt";File file=new File(name);try(OutputStream ops=new FileOutputStream(file);ObjectOutputStream oos=new ObjectOutputStream(ops);){oos.writeObject(selllist); oos.flush();System.out.println("数据保存成功!");}catch(Exception e){e.printStackTrace();}}
}

第四个文件,
登录程序,主程序

package com.langxikeji.Object;import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Booksmanagement {//新建一个BooksIO对象BooksAdd bio=new BooksAdd();BooksSell bis=new BooksSell();public void welcome(){System.out.println("***********************");System.out.println("*******|-------|*******");System.out.println("*******|welcome|*******");System.out.println("*******|-------|*******");System.out.println("***********************");System.out.println("提示:用户名格式为5-10位字母,密码格式为6位数字!");}public void Login(){if(Logininfo()){System.out.println("*****欢迎登陆图书进销存管理系统*****");adminLogin();}else{System.out.println("登录失败,系统退出");System.exit(0); }}public void adminLogin(){Scanner sc=new Scanner(System.in);System.out.println("请输入数字选择你需要的功能:");System.out.println("1,库存管理。2,销售管理。3,查询书库中的所有书籍。4,查询销售记录5,系统退出");switch(sc.nextInt()){case 1:Inmanagement();break;case 2:Outmanagement();break;case 3:polling();break;case 4:sellpolling();break;case 5:System.out.println("系统退出!");System.exit(0);break;default:System.out.println("输入错误,请从新输入!");break;}}//查询书库中所有的书籍信息public void polling(){System.out.println("序号\t\t书名\t\t作者\t\t进价\t\t售价\t\t库存\t\t");List<Book> booklist=bio.totalBooks() ;for(Book book:booklist){System.out.print(book.getBookId()+"\t\t");System.out.print(book.getBookName()+"\t\t");System.out.print(book.getAuther()+"\t\t");System.out.print(book.getPurprice()+"\t\t");System.out.print(book.getSellprice()+"\t\t");System.out.print(book.getStock()+"\n");} adminLogin();}//输出销售信息public void sellpolling(){System.out.println("序号\t\t书名\t\t作者\t\t进价\t\t售价\t\t销售数量\t\t盈利\t\t");List<Book>selllist=bis.sellBooks();for(Book book:selllist){System.out.print(book.getBookId()+"\t\t");System.out.print(book.getBookName()+"\t\t");System.out.print(book.getAuther()+"\t\t");System.out.print(book.getPurprice()+"\t\t");System.out.print(book.getSellprice()+"\t\t");System.out.print(book.getSalecount()+"\t\t");System.out.print(book.getProfit()+"\n");}adminLogin();}//库存管理模块public void Inmanagement(){Scanner sc=new Scanner(System.in);System.out.println("请按照提示输入选择以下功能:");System.out.println("1,图书入库。2,退出");switch(sc.nextInt()){case 1:jionBook();break;case 2:adminLogin();break;default:System.out.println("输入错误,请从新输入!");break;}}public void jionBook(){Scanner sc=new Scanner(System.in);System.out.println("请输入要入库书籍的名字:");String bookname=sc.nextLine();//创建一个对象List<Book>booklist=bio.totalBooks();Book book = new Book();//遍历booklist数组for(int i=0;i<booklist.size();i++){book=booklist.get(i);//判断书库中是否存在该书if(book.getBookName().equals(bookname)){System.out.println("库中已经存在该书!");System.out.println("请输入入库库存数量:");int store=sc.nextInt();store+=book.getStock();book.setStock(store);bio.writeFile();adminLogin(); }else{System.out.println("书库中该书不存在!");System.out.println("请输入增加图书信息:");System.out.println("请输入书籍序号:");int m=sc.nextInt();System.out.println("请输入书名:");String a=sc.next();System.out.println("请输入作者:");String b=sc.next();System.out.println("请输入书籍进价:");double c=sc.nextDouble();System.out.println("请输入书籍售价:");double d=sc.nextDouble();System.out.println("请输入库存");int e=sc.nextInt();Book book1=new Book(m,a,b,c,d,e);bio.insert(book1); adminLogin();}}}//销售管理public void Outmanagement(){Scanner sc=new Scanner(System.in);System.out.println("请按照提示输入选择以下功能:");System.out.println("1,图书销售。2,退出");switch(sc.nextInt()){case 1:outBook();break;case 2:adminLogin();break;default:System.out.println("输入错误,请从新输入!");break;}}//购买书籍改变bookStore中的库存public void outBook(){Scanner sc=new Scanner(System.in);System.out.println("请输入要购买书籍的名字:");String bookname=sc.nextLine();//创建一个对象Book book = new Book();List<Book>booklist=bio.totalBooks();//遍历booklist数组for(int i=0;i<booklist.size();i++){book=booklist.get(i);//判断书库中是否存在该书if(book.getBookName().equals(bookname)){System.out.println("书库中存在该书!"); System.out.println("请输入要购买的数量:");int num=sc.nextInt();if(num>book.getStock()){System.out.println("购买数量超过库存!");}else{System.out.println("购买成功!");//剩余库存int sum=book.getStock()-num;//改变原有库存book.setStock(sum);//写入bookStore.txt文件中bio.writeFile();//传入到下一个方法中Outsell(bookname,num);}adminLogin();}else{System.out.println("书库中不存在该书,返回主菜单!");adminLogin();}}}//链接OutBook方法 改变sell.txt文件里面的值public void Outsell(String bookname,int numbook){Scanner sc=new Scanner(System.in);Book book=new Book();List<Book>selllist=bis.sellBooks();BigDecimal num=new BigDecimal(numbook);for(int j=0;j<selllist.size();j++){book=selllist.get(j);if(book.getBookName().equals(bookname)){//改变售卖数量int salecount=book.getSalecount()+numbook;book.setSalecount(salecount);//改变售卖利润,处理精度丢失问题//进价转型BigDecimal purprice=new BigDecimal(book.getPurprice());//售价转型BigDecimal sellprice=new BigDecimal(book.getSellprice());//原有的利润转型double oldprofit=book.getProfit();BigDecimal oprofit=new BigDecimal(oldprofit);//进行计算double bigprofit=(((sellprice.subtract(purprice)).multiply(num)).add(oprofit)).doubleValue();book.setProfit(bigprofit);bis.writeFilesell(); }else{BigDecimal purprice=new BigDecimal(book.getPurprice());//售价转型BigDecimal sellprice=new BigDecimal(book.getSellprice());//进行计算double bigprofit=((sellprice.subtract(purprice)).multiply(num)).doubleValue();Book book3=new Book(book.getBookId(),book.getBookName(),book.getAuther(),book.getPurprice(),book.getSellprice(),numbook,bigprofit);bis.insertsell(book3);}}}//系统登录模块public static boolean Logininfo(){try{String adress="D:\\JAVA\\Workspaces\\sina\\src\\user.properties";File file=new File(adress);Properties p=new Properties();//使用输入流拿到p的key-value对p.load(new FileInputStream(file));//控制三次循环for(int i=3;i>0;i--){//控制台输入用户名和密码Scanner sc=new Scanner(System.in);System.out.println("请输入登录用户名:");String name=sc.nextLine();System.out.println("请输入登录密码:");String password=sc.nextLine();//判断输入格式是否正确和密码是否正确if(judge(name,password)&&p.containsKey(name)&&p.containsValue(password)){   System.out.println("登录用户名和密码正确,欢迎您!");return true;}else if(i>1){System.out.println("警告:用户名或密码错误,今日剩余输入次数为"+(i-1)+"次!");System.out.println("---------------------------");}}}catch(Exception e){e.printStackTrace();}return false;}//判断输入用户名和密码格式是否正确public static boolean judge(String name,String password){Pattern pattern1 =Pattern.compile("^[A-Za-z]{5,10}$");Matcher m1=pattern1.matcher(name);Pattern pattern2=Pattern.compile("^[0-9]{6}$");Matcher m2=pattern2.matcher(password);if(!m1.matches()||!m2.matches()){System.out.println("---------------------------");System.out.println("提示:用户名和密码输入格式不正确!");System.out.println("提示:用户名格式为5-10位字母,密码格式为6位数字!");System.out.println("-----------------------------");return false;}else{return true;}}public static void main(String[] args)  throws Exception{Booksmanagement bs=new Booksmanagement();bs.welcome();bs.Login();}
}

基于JAVA对象流写的图书进销存系统管理相关推荐

  1. 【java毕业设计】基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码)——工厂进销存管理系统

    基于java+Eclipse +SQL Server的工厂进销存管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse +SQL Server的工厂进销存管理系统 ...

  2. 基于JAVA+SpringBoot+Mybatis+MYSQL的药店进销存管理系统

    项目功能: (1) 用户管理:用户注册和用户登录. (2) 入库管理:添加进货单.修改进货单.进货退货. (3) 出库管理:添加销售单.修改销售单.销售退货. (4) 库存管理:库存盘点.价格修改. ...

  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的医药进销存管理系统

    项目功能: 系统主要分为管理员和客户两种角色,管理员端功能:登录与注册.个人面板管理(个人信息.修改信息.修改密码).药品管理(药品类别添加.药品类别查询.药品添加.药品查询).已购药品.药品管理.客 ...

  4. 基于javaweb的图书进销存管理系统(java+ssm+jsp+bootstrap+mysql)

    基于javaweb的图书进销存管理系统(java+ssm+jsp+bootstrap+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/m ...

  5. java图书进存销系统_【有源码】图书进销存系统

    本文介绍如何开发一个CS结构的图书进存销系统,该系统的主要有出版社管理.书本管理.书的入库管理.销售管理等功能,通过这些简单的功能,可以让我们了解如何利用JDBC进行数据库操作.如何使用Java的反射 ...

  6. java计算机毕业设计某日杂商店进销存管理系统设计源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计某日杂商店进销存管理系统设计源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计某日杂商店进销存管理系统设计源码+系统+数据库+lw文档+mybatis ...

  7. web图书销售管理系统_图书进销存管理软件的优势是什么?

    图书进销存软件的优势是什么?我相信很多想使用图书进销存软件的书店都想知道这个答案,然后用它作为判断选择哪一个更好的依据,所以今天我们就来看看哪一个更好,它有什么优点. 如果你想知道哪个图书进销存软件软 ...

  8. javaweb JSP JAVA 仓库库存管理系统(仓库进销存管理系统jsp服装库存管理系统仓库管理系统)

    javaweb JSP JAVA 仓库库存管理系统(仓库进销存管理系统jsp服装库存管理系统仓库管理系统) 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招 ...

  9. Java-私塾图书进销存项目视频--(趣盘下载)

    Java-私塾图书进销存项目视频地址: http://wuguo623778063.qupan.com/?folder=1273452

最新文章

  1. IE下ajax响应慢,IE9上的Jquery Ajax调用非常慢,但在IE9中非常快
  2. HTML5 Canvas动画效果实现原理
  3. opencv在pycharm上没有函数提示?(需要安装opencv-contrib-python)
  4. UVA 11235 Frequent values(RMQ)
  5. 找取照片上的25个特征点,并保存结果
  6. 华为交换机命令_华为交换机常用命令
  7. Exception和Error深入分析~~~
  8. mysql编程流程控制_MySql流程控制结构
  9. mysql常见函数的实列
  10. spring mybatis使用时报 java.lang.AbstractMethodError
  11. python爬取高考各高校分数线查询_python 爬虫 爬取高考录取分数线 信息
  12. java如何通过拼音搜索功能_如何实现拼音搜索
  13. 面试官:说说你最大的优缺点? (25题汇总版)
  14. wacom数位板怎么调压感_wacom手绘板_wacom手绘板的钢笔压力怎么设置?
  15. 那些年的 Hello World (HTML)
  16. Haproxy+Nginx搭建负载均衡集群
  17. 三菱FX3U PLC模拟量输出FB (FX2N-4DA)
  18. 数字源表LIV测试激光器方案
  19. 同花顺编程语言是基于c,同花顺编程语言
  20. Python网络爬虫-xpath模块

热门文章

  1. 【项目实战】Python基于KMeans算法进行文本聚类项目实战
  2. pyqt5 python版本_PyQt5下载-Qt库的Python版本 v5.8.2免费版 - 安下载
  3. 四国军棋引擎开发(4)子力判断和局面评估初步
  4. 数制转换技巧(十进制 to 二进制)
  5. 15.什么是双亲委派模型?
  6. PCIe扫盲——PCIe错误检测机制
  7. AI孙燕姿 ?AI东雪莲 !—— 本地部署DDSP-SVC一键包,智能音频切片,本地训练,模型推理,为你喜欢的角色训练AI语音模型小教程
  8. 新生支付对商户后续管理不力及支付接口监测不到位被央行处罚
  9. 【学习笔记】- 支付网关的设计
  10. matlab布林线代码,[转载]3个优秀的 布林线 指标源码