基于ArrayList增删改查实现的java商品管理系统

简介: 基于ArrayList增删改查实现的java商品管理系统

系统简介

某超市开业,为了实现仓库商品标准管理化,需要一套操作简单的商品管理系统。主要业务

有:添加商品、删除商品、修改商品属性、查看某一种商品信息、查看所有商品信息。


细节提示

需要管理的商品有以下几种属性:商品编号、商品名、商品价格以及商品库存。商品编号是

唯一的,每种商品的编号都不能一样。

业务细节


添加功能

添加商品信息时需要手动输入商品编号、商品名、商品价格以及商品库存,每次录入完一种

商品后可提示是否继续录入或返回上一级,该系统录入的商品数量是不受限制的。

需要注意在输入商品编号时判断该商品编号是否已经存 在,保证它的唯一性,如果已存在则

当前商品不能被录入系统。


查询指定信息

在录入信息后可以根据商品编号查看指定商品信息。

注意:查询时输入的商品编号需要进行验证是否存在,如 果存在则显示商品信息,如果不存

在则提示要查找的商品不存在。


查询所有商品信息

查询所有已经录入系统的商品信息


修改商品信息

可以修改已经录入的商品信息属性。需要输


删除某个商品

在删除某个商品的时候要输入目标商品的商品编号,删除前需要输入商品编号显示一次目标

商品的信息,然后确定删除。注意:删除某一个商品后自该商品编号之后的所有商品编号依

次往前移。 删除前系统已经录入的所有信息展示。


程序实现如下所示:

package homeWork;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class productSystem {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    //调用程序主界面
    /*
     * 这里写一个主界面函数而不是写在主函数里面是因为下面程序要递归调用这个函数,
     * 为避免递归调用main函数所以就单独把主界面函数列出来了!
     */
    index();
  }
  //静态创建zeng'cang'ai'cha增删改查操作对象
  //如果将这句话卸载index()函数中则再次递归调用的时候会重新创建对象,
  //就会导致再次递归调用的时候list为空
  static Curd c = new Curd();
  //主界面函数
  public static void index(){
    System.out.println("欢迎使用商品信息管理系统");
    System.out.println("请输入序号选择您的业务:");
    System.out.println("1、添加商品信息"+"\t2、修改信息"+"\t3、删除信息"+
    "\t4、查看指定信息"+"\t5、查看所有信息!");
    //创建输入
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    //创建输入选择器
    switch(n){
      case 1:
        c.add();
        //add()方法的ruturn到这里之后再递归调用下面的index()函数,
        index();
        break;
      case 2:
        c.mod();
        index();
        break;
      case 3:
        c.del();
        index();
        break;
      case 4:
        c.searchOne();
        index();
        break;
      case 5:
        c.searchAll();
        index();
        break;
      default :
        System.out.println("输入有误");
        break;
    }
  }
}
//商品Product 实体类
class Product{
  //商品编号
  private Integer number;
  //商品名称
  private String name;
  //商品价格
  private double price;
  //商品库存
  private int count;
  // getter()  &&  setter ()
  public int getNumber() {
    return number;
  }
  public void setNumber(Integer number) {
    this.number = number;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public double getPrice() {
    return price;
  }
  public void setPrice(double price) {
    this.price = price;
  }
  public int getCount() {
    return count;
  }
  public void setCount(int count) {
    this.count = count;
  }
  //无参构造
  public Product() {
    super();
    // TODO Auto-generated constructor stub
  }
  //有参构造
//  public Product(Integer number, String name, double price, int count) {
//    super();
//    this.number = number;
//    this.name = name;
//    this.price = price;
//    this.count = count;
//  }
//  
  //重写 toString方法
  @Override
  public String toString() {
    return "Product [number=" + number + ", name=" + name + ", price="
        + price + ", count=" + count + "]";
  }
}
//增删改查操作实现类
class Curd{
  Scanner sc = new Scanner(System.in);
  List<Product> list = new ArrayList<Product>();
  //商品的添加方法
  public void add(){
    //循环添加
    while(true){
      //商品Product对象的创建必须写在循环里面,否则添加不进去
      //如果写在循环外面则添加的结果都是最后一个添加的数据
      Product p = new Product();
      System.out.println("请输入商品编号:");
      //本来想用Integer创建输入的
      p.setNumber(Integer.parseInt(sc.next()));
      System.out.println("请输入商品名称:");
      String name = sc.next();
      p.setName(name);
      System.out.println("请输入商品价格:");
      double price = sc.nextDouble();
      p.setPrice(price);
      System.out.println("请输入商品库存:");
      int count = sc.nextInt();
      p.setCount(count);
      //将添加的数据存到list中
      list.add(p);
      System.out.println("添加成功!\n请继续选择您的操作:");
      System.out.println("1、继续添加。\t2、返回主界面");
      int x = sc.nextInt();
        switch(x){
          //跳出本循环,继续执行添加操作
          case 1:
            break;
          //跳出本方法,返回index()函数
          case 2:
            return;
          default :
            System.out.println("输入错误!");
            break;
        }
    }
  }
  //查找所有商品
  public void searchAll(){
    //输出所有商品的toString方法
    System.out.println(list);
    System.out.println("遍历成功!\n请继续选择您的操作:");
    System.out.println("1、返回主界面");
    int x = sc.nextInt();
      switch(x){
        case 1:return;
        default :System.out.println("输入错误!");break;
      }
  }
  //查找单个商品
  public void searchOne(){
    System.out.println("请输入您要查找的商品编号:");
    Integer i = sc.nextInt();
    boolean b = true;
    //foreach遍历
    for (Product p : list) {
      if (p.getNumber() == i) {
        //如果找到就输出,并且把遍历设为false
        b=false;
        System.out.println(p);
      }
    }
    if (b) {
      System.out.println("您输入的商品编号不存在!");
    }
    System.out.println("查找"+(b?"失败!":"成功!")+"\n请继续选择您的操作:");
    System.out.println("1、返回主界面");
    int x = sc.nextInt();
    switch(x){
        case 1:
          return;
        default :
          System.out.println("输入错误!");
          break;
    }
  }
  //删除单个商品
  public void del(){
    System.out.println("请输入您要删除的商品编号:");
    Integer i = sc.nextInt();
    boolean b = true;
    //循环遍历删除
    for (int j = 0; j < list.size(); j++) {
      if (list.get(j).getNumber()==i) {
        //如果找打就删除此元素的下标
        list.remove(j);
        b=false;
      }
    }
    if (b) {
      System.out.println("商品编号不存在!");
    }
    System.out.println("删除"+(b?"失败!":"成功!")+"\n请继续选择您的操作:");
    System.out.println("1、返回主界面");
    int x = sc.nextInt();
    switch(x){
      case 1:
        return;
      default :
        System.out.println("输入错误!");
        break;
    }
  }
  //修改单个商品
  public void mod(){
    //循环遍历修改
    while(true){
      System.out.println("请输入您要修改的商品编号:");
      Integer i = sc.nextInt();
      boolean b = true;
      for (Product p : list) {
        if (p.getNumber() == i) {
          System.out.println("请输入商品编号:");
          //Integer num = sc.nextInt();
          p.setNumber(Integer.parseInt(sc.next()));
          System.out.println("请输入商品名称:");
          String name = sc.next();
          p.setName(name);
          System.out.println("请输入商品价格:");
          double price = sc.nextDouble();
          p.setPrice(price);
          System.out.println("请输入商品库存:");
          int count = sc.nextInt();
          p.setCount(count);
          //list.set(i, p);
          b=false;
        }
      }
      if (b) {
        System.out.println("商品编号不存在!");
      }
      System.out.println("修改"+(b?"失败!":"成功!")+"\n请继续选择您的操作:");
      System.out.println("1、继续修改 \t2、返回主界面");
      int x = sc.nextInt();
      switch(x){
        case 1:
          break;
        case 2:
          return;
        default :
          System.out.println("输入错误!");
          break;
      }
    }
  }
}
目录
相关文章
|
12天前
|
Java 索引 容器
Java ArrayList扩容的原理
Java 的 `ArrayList` 是基于数组实现的动态集合。初始时,`ArrayList` 底层创建一个空数组 `elementData`,并设置 `size` 为 0。当首次添加元素时,会调用 `grow` 方法将数组扩容至默认容量 10。之后每次添加元素时,如果当前数组已满,则会再次调用 `grow` 方法进行扩容。扩容规则为:首次扩容至 10,后续扩容至原数组长度的 1.5 倍或根据实际需求扩容。例如,当需要一次性添加 100 个元素时,会直接扩容至 110 而不是 15。
Java ArrayList扩容的原理
|
16天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
14天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
45 3
|
18天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
17 1
|
20天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
23天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
26天前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
49 3
|
25天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
47 1
|
29天前
|
Java 关系型数据库 API
介绍一款Java开发的企业接口管理系统和开放平台
YesApi接口管理平台Java版,基于Spring Boot、Vue.js等技术,提供API接口的快速研发、管理、开放及收费等功能,支持多数据库、Docker部署,适用于企业级PaaS和SaaS平台的二次开发与搭建。
|
1月前
|
前端开发 Java 数据库连接
基于Java的校车管理系统(下)
基于Java的校车管理系统(下)
20 0