首页 > 编程语言 >Java商超管理系统

Java商超管理系统

时间:2023-05-31 18:33:24浏览次数:46  
标签:SC Java 管理系统 更改 System 商品 商超 println out

该商超管理系统是为了能够帮助超市进行更加有效的人员管理,更加高效的完成购物结算以及库存管理,使用Java来模拟设计该系统统一进行商品信息和职员信息的管理,大大降低人工和时间成本。该系统在之前学习的java知识体系中运用到文件流、面向对象、集合、泛型等诸多知识,是一个知识更加综合运用的小项目。

对该系统进行功能需求分析,该系统是应用于小型超市,需要满足超市以下的基本功能:1.对日常商品信息的维护功能(对商品进行增删改查),2.对购买商品后的结算收银功能,3.对商品当日销量和总收入进行统计和管理,4.对超市工作人员进行管理(对工作人员进行增删改查)。

现在就对系统中的各个主要对象类进行设计:

1.Menu 类:菜单类定义了菜单的选择菜单的返回等操作。

Java商超管理系统_数据存储

2.Market 类:商超类定义了商品、管理员存放的集合。

Java商超管理系统_小型商超管理系统_02

3.Manager 类:管理员类,定义了管理员的增删改查及收银等操作。

Java商超管理系统_数据存储_03

4.Goods 类:商品类定义了商品的增删改及各种查询方式。

Java商超管理系统_小型商超管理系统_04

5.DataManager 类,定义了读取写入数据的方法。

Java商超管理系统_小型商超管理系统_05

6.其他类:加密工具类MD5Util,测试类TestMarket,当日商品销售类 DailySales。


设计好系统各类后,接下来简述一下实现思路和具体的功能实现。首先由于本次系统没有使用到数据库,所以数据还是使用文件进行存储,在项目中新建存储系统人员信息的manager.txt文件,存储商品信息的goods.txt文件以及存储当天销售的商品信息todaysales.txt文件。在启动程序的同时需要把manager.txt文件和goods.txt文件里存储的信息读取到对应的List<Manager>  manager管理员集合和List<Goods>  goods商品集合中为后续的操作奠定数据基础,但我设计的文件中初始都为空(即使为空也需要读取,预防里面已经存有数据),然后就调用菜单类进入菜单界面。程序代码顺序如图:

Java商超管理系统_小型商超管理系统_06

登录系统之前需要做一个小操作,因为之前的manager.txt文件中没有任何数据,默认没有数据的情况下创建一个用户名为:admin ;密码为:admin 的管理员权限级别的用户作为超级管理员。实现逻辑如图:

Java商超管理系统_数据存储_07

接下来展现登录界面,让用户进行登录,输入自己的用户名和密码,用户名或密码3次输入错误将强制退出系统。效果展示如下:

Java商超管理系统_小型商超管理系统_08

输入正确的用户名和密码,进入到主菜单显示界面。效果展示如下:

Java商超管理系统_小型商超管理系统_09

进入主菜单后根据功能进行选择,此处也有一个细节需要注意:只有管理员才有权限对所有功能进行操作,而普通收银员只有前台收银的功能,所以在选择后需要对当前登录用户的权限进行判断,权限足够才能进入相关功能界面。目前我添加了一个用户名为spring的收银员权限的员工,让他选择商品维护功能是不能进入的。效果展示如下:

Java商超管理系统_数据存储_10

为了演示其他功能还是使用超级管理员权限进行登录操作,现在逐一介绍商品维护、前台收银、商品管理、员工管理这四个功能包含的具体实现。选择1进入商品维护界面,该界面下具有添加商品、更改商品、删除商品、显示所有商品、查询商品这5个功能。效果展示如下:

Java商超管理系统_数据存储_11

这里面的商品的增删改查最核心的就是根据控制台的输入匹配到对应的商品对象,并在容器集合中调用方法进行操作。以更改商品功能作为展示,控制台输入要进行更改的商品名称,通过把商品名称传入findGood(name)中,返回一个商品对象,之后对该对象进行判断是否为空,如果不为空就对该商品进行更改操作,可以选择更改商品的数量、名称及价格,更改成功重新添加到集合容器并写入文件中保存,其他几个功能可以自行模仿。效果展示如下:

Java商超管理系统_数据存储_12

更改商品核心功能代码:

// 更新商品
    public static void updateGoods() {
        while (true) {
            System.out.println("执行更改商品操作:");
            System.out.println("输入更改商品的名称:");
            String name = SC.next();
            //根据商品名称找到集合中的具体对象
            Goods good = findGood(name);
            if(good != null) {
                showInfo(name);
                System.out.println("请选择你要更改的内容:");
                System.out.println("1.更改商品名称:");
                System.out.println("2.更改商品价格:");
                System.out.println("3.更改商品数量:");
                int command = SC.nextInt();
                switch (command) {
                    case 1:
                        System.out.println("请输入已更改商品名称:");
                        String newShopName = SC.next();
                        // 修改商品名称
                        good.setName(newShopName);
                        System.out.println("修改成功!");
                        showInfo(newShopName);
                        break;
                    case 2:
                        System.out.println("请输入已更改商品价格:");
                        double newPrice = SC.nextDouble();
                        good.setPrice(newPrice);
                        System.out.println("修改成功!");
                        break;
                    case 3:
                        System.out.println("请输入已更改商品数量:");
                        int newNumber = SC.nextInt();
                        good.setStorage(newNumber);
                        System.out.println("修改成功!");
                        break;
                    default:
                        System.out.println("输入错误,请重新输入");
                }
            }
            DataManage.writeFile("goods",good);
            if(good == null){
                System.out.println("没有找到该商品的信息");
                return;
            }
            System.out.println("是否继续(y/n)");
            String input = SC.next();
            switch (input) {
                case "y":
                    break;
                default:
                   return;//回到菜单1
            }
        }

    }

选择2进入前台收银界面,该界面下只有购物收银和退出收银这2个功能。效果展示如下:

Java商超管理系统_数据存储_13

购物结算顾名思义就是根据顾客购买的商品数量和价格进行金额计算并收银的操作。根据用户的商品名称和数量,查找该商品对象如果不为空就对进行结算收银操作,金额等于商品单价*商品数量(若有多个不同商品金额累加),结算后让对应商品库存数量减少卖出数量:(g.getStorage() - buyNum),该销售量增加卖出数量: g.setSale(g.getSale() + buyNum),并把当前卖出时间记录一起写入到当日销量todaysales文件中保存起来。效果展示如下:

Java商超管理系统_数据存储_14

购物结算核心功能代码:

// 购物结算
    public static void pay() {
        while (true) {
            System.out.print("请选择商品:");
            String shopName = SC.next();
            System.out.print("请输入购买数量:");
            int buyNum = SC.nextInt();
            Goods g = findGood(shopName);
            if(g != null) {
                double price = 0;
                price += buyNum * g.getPrice();
                System.out.println(shopName + "\t\t\t\t\t¥" + g.getPrice() + "\t\t\t\t\t购买数量" + buyNum + "\t\t\t\t\t" +
                        shopName + "总价" + price);
                g.setStorage(g.getStorage() - buyNum);
                g.setSale(g.getSale() + buyNum);
                Date time = new Date();
                String nowTime = Format(time);
                g.setTime(nowTime);
                // 把更新后的数据写入文件中
                DataManage.writeFile("goods",g);
                DataManage.writeFile("todaysales",g);
                System.out.println("是否继续购买(y/n)");
                String input = SC.next();
                switch (input) {
                    case "y":
                        break;
                    default:
                        System.out.println("总计:" + price);
                        System.out.println("请输入实际缴费金额:");
                        double money = SC.nextDouble();
                        // 判断金额是否足够
                        if(money >= price){
                            System.out.println("找钱:" + (money - price));
                            System.out.println("谢谢光临!");
                            return;
                        }
                        if(money < price){
                            System.out.println("总价:" + price + "元" + "客户已付" + money + "客户应补" + (price - money) + "元");
                            return;
                        }
                }
            }
            if(g == null){
                System.out.println("该商品不存在");
            }

        }

    }

             选择3进入商品管理界面,该界面下只有展示今日售出商品和收银情况这个功能。效果展示如下:

Java商超管理系统_小型商超管理系统_15

展示数据其实就是去读取对应文件中的数据封装成对象后展示,今日售出商品和收银情况功能最重要的就是判断数据中存放的时间和当前查看时间的时间跨度是否在一天之类,取出todaysales文件中商品售出是的时间字符串与当前的时间对象进行比较。

商品管理核心功能代码:

// 商品管理
    public static void manageGoods() {
        System.out.println("今日售出商品情况:");
        // 查看前读文件
        DataManage.readFile("todaysales");
        double money = 0;
        int totalSales = 0;
        System.out.println("商品名称\t\t\t\t\t" + "商品价格\t\t\t\t\t" + "商品数量\t\t\t\t\t" + "销量\t\t\t\t\t" + "备注");
        for (DailySales ds : Market.dailySales) {
            //判断是否是当天
            String day = ds.getTime().split("-")[2];
            Date time = new Date();
            String s = Format(time).split("-")[2];
            if(day.equals(s)) {
                //说明都是当日售出的商品
                System.out.println(day);
                System.out.println(ds.getName() + "\t\t\t\t\t" + ds.getPrice() + "\t\t\t\t\t" +
                        ds.getStorage() + "\t\t\t\t\t" + ds.getSale() + (ds.getStorage() < 10 ? "\t\t\t\t\t*库存不足10件!" : ""));
            }
            money += ds.getPrice()*ds.getSale();
            totalSales += ds.getSale();
            System.out.println( "今日总销量:" + totalSales);
            System.out.println("今日收银:" + money);
        }
    }

选择4进入员工管理界面,该界面下有添加员工信息、更改员工信息、删除员工信息、显示所有员工信息、查询员工这5个功能。效果展示如下:

Java商超管理系统_数据存储_16

这里面的员工的增删改查最核心的就是获取到对应的Manager对象,并在容器集合中调用方法进行操作。以添加员工功能作为展示,管理员控制台输入新添加的员工姓名,密码默认同一设置为123,权限默认设置为收银员,把这些属性封装到manager容器集合中并把数据写入到manager.txt文本文件中进行保存,其他功能大同小异,可借鉴此操作。

添加员工信息核心功能代码:

// 添加员工
    public static void addStaff(){
        while (true) {
            System.out.println("请输入新员工的姓名:");
            String userName = SC.next();
            String pass = "123";
            pass = MD5Util.MD5ToString(pass);
            String  roleId = "2";
            Manager m = new Manager(userName,pass,roleId);
            Market.manager.add(m);
            System.out.println("员工添加成功");
            DataManage.writeFile("manager",m);
            System.out.println("是否继续(y/n)");
            String input = SC.next();
            switch (input) {
                case "y":
                    break;
                default:
                    return;//回到调用处
            }
        }

    }

到这里此次的商超管理系统的分享就到此结束了,希望学习的人都能学有所成,在技术方面愈加精进,代码之路没有捷径,熟能生巧,实践出真知!

标签:SC,Java,管理系统,更改,System,商品,商超,println,out
From: https://blog.51cto.com/u_15101214/6388856

相关文章

  • 函数式编程和java
    函数式编程和java在计算机科学中,函数式编程是一种编程范式,通过应用和组合函数来构建程序。它是一种声明式编程范式(对应命令式编程),其中函数定义是将数值映射到其他数值的表达式树,而不是更新程序运行状态的命令式语句序列。函数的定义数学上的函数是自变量到因变量的映射关系,......
  • java 中字符型 和 字符串类型有什么区别
    在Java中,字符型和字符串类型都是常用的数据类型,但是它们有着本质的不同。字符型是基本数据类型,表示单个字符,使用char表示。例如:'A'、'1'、'中'等。字符串类型是引用数据类型,表示由多个字符组成的字符串,使用String表示。例如:"hello"、"world"、"你好"等。下面列举一些它们......
  • 关于第一次学习JavaScript程序调试心得
    源程序如上,源代码来源(刘永富博士-ExcelVBA编程开发下册)。运行之后,网页无反应,alert不弹窗。经查询https://www.runoob.com/jsref/event-body-onload.htmlhttps://blog.csdn.net/sinat_29398599/article/details/65450485需添加onload事件。Bodyonload事件,onload事件在页......
  • 关于Java中的String类
    我们知道String声明的字符串是不能被改变的。那么如果我们使用下面的语句:Stringstr="Hello";str=str+"World!";你会发现,我们如果输出str,答案是:HelloWorld!那么,从表面上看str被改变了,而实际上是这样的:当我们执行上面的两条语句后,中间的过程用如下图来表示:也就是说开始用Str......
  • JavaScript中的Hook技术:特性、优点、缺点和使用场景
    引言:随着JavaScript的不断发展,开发者们正在寻找更灵活和可扩展的方式来修改或扩展现有的代码。其中一种广泛应用的技术是"Hook",它允许开发者拦截和修改现有的函数或方法的行为。本文将详细介绍JavaScript中的Hook技术,包括其特性、优点、缺点和使用场景,并提供示例代码进行说明。什么......
  • (动力节点)老杜零基础Java笔记-第一章 学前准备
    Java零基础教程视频(零基础学Java必刷,适合Java0基础,Java初学入门)课堂截图为什么使用截图工具在听课的过程中,有的时候老师操作的比较快,通过截图的方式将老师的操作保存下来,以便后期的操作。另外截图之后的图片也可以用于笔记的记录,在笔记当中最好采用图文并茂的方式,这样更加利于......
  • java的包和权限
    注:同一个文件夹下不能有相同的类包的作用:1.区分形同名字的类2.当有很多类时,可以很好的额管理类(如javaAPI文档)3.控制访问范围包的本质:创建不同的文件夹来保存类文件。语法:packagecom.douyin;package是关键字,表示打包com.douyin表示包名。相......
  • java.lang.ClassCastException: com.alibaba.fastjson2.JSONArray cannot be cast to
    是这样的,今天跟着写springboot项目的时候,前端登录的时候报403错误。检查了半天,是后端的问题报错代码: 第二句报错提示如下 说是JSONArray不能转String,但我这也不是JSONArry转String而是Object转String啊。网上搜了半天,用了好多种方法也没什么用最后索性死马当活马医,让它......
  • Java中的List
    Java中的List有ArrayList和LinkdList,前者底层是数组,后者底层是链表,前者适合遍历查找,后者适合插入删除1.List的add方法有两种情况,第一种就是默认添加,在末尾往List里添加元素,第二种就是指定位置添加内容,原来位置的内容就会向后移动一位。2.List的set方法也有两种情况,第一种就......
  • Java的12种常用注解!
    1.声明bean的注解......