当前位置: 首页 > 图灵资讯 > 技术篇> Java商超管理系统

Java商超管理系统

来源:图灵教育
时间:2023-06-01 09:44:09

超市管理系统旨在帮助超市更有效地管理人员,更有效地完成购物结算和库存管理。采用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文件和存储当天销售的商品信息todaysaless.txt文件。manager在启动程序时需要.goodst文件.存储在txt文件中的信息读取相应的List<Manager> manager管理员集合和Listt<Goods> goods商品集合为后续操作奠定了数据基础,但我设计的文件最初是空的(即使是空的也需要读取,预防数据已经存在),然后将菜单类调用到菜单界面。程序代码顺序如图所示:

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

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

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

接下来,显示登录界面,让用户登录,输入用户名和密码,用户名或密码三次输入错误将被迫退出系统。效果如下:

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

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

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

进入主菜单后,根据功能进行选择。这里还有一个细节需要注意:只有管理员有权操作所有功能,而普通出纳员只有前台出纳员的功能。因此,在选择后,有必要判断当前登录用户的权限,并且有足够的权限进入相关功能界面。目前,我已经增加了一个名为spring的收银员权限的员工,他无法选择商品维护功能。效果显示如下:

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

为了演示其他功能或使用超级管理员权限进行登录操作,我们现在逐一介绍了商品维护、前台出纳、商品管理和员工管理的具体实现。选择1进入商品维护界面,具有五个功能:添加、更改、删除、显示所有商品和查询商品。效果显示如下:

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(二)改变商品价格:");                System.out.println(三)改变商品数量:;                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进入前台出纳界面,只有购物出纳和退出出纳两个功能。效果如下:

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进入员工管理界面,有五个功能:添加员工信息、更改员工信息、删除员工信息、显示所有员工信息和查询员工。效果如下:

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;//回到调用处            }        }    }

在这里,超市管理系统的分享到此结束。我希望所有学习的人都能学到一些东西,在技术上变得越来越先进。代码之路没有捷径。熟能生巧,实践真知!