水果库存系统(基础版)

Posted Guarding and trust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了水果库存系统(基础版)相关的知识,希望对你有一定的参考价值。

不为失败找理由,只为成功找方法。所有的不甘,因为还心存梦想,所以在你放弃之前,好好拼一把,只怕心老,不怕路长。

文章目录


一、知识储备

    本系统涉及的主要技术点有如下:

  1. 控制流程语句
  2. 面向对象(比如封装、多态、接口)
  3. Java类库的使用(如Scanner 扫描器)
  4. 集合(如List)
  5. 多线程的基本方法

如果您已经掌握了这些知识点,但是又不太会运用,那么这个系统就很适合观摩观摩。


二、系统设计

1、系统介绍

本系统名叫水果库存,相当于一个存放水果的仓库。功能实现了简单的新增、查询、修改、删除、退出。

2、系统结构

本系统结构清晰明了,一共三个模块。第一个是存放水果的类(或者叫实体类),第二个仓库的操作(或者叫业务逻辑层),第三个是主程序入口模块。如图:

三、效果展示

  1. 系统主菜单

  2. 新增功能

  3. 查询功能

  4. 修改功能

  5. 删除功能

  6. 退出系统

四、功能详解

1.实体类

package com.nan.opjo;

/**
 * 水果实体类
 */
public class Fruit 
	private Integer id; //水果编号
	private String name; //水果名称
	private double price; //水果价格
	private String described; //描述
	
	/*构造方法*/
	public Fruit(Integer id, String name, double price, String described) 
		this.id = id;
		this.name = name;
		this.price = price;
		this.described = described;
	
	
	public Fruit() 
	
	/*get、set方法*/
	public Integer getId() 
		return id;
	
	public void setId(Integer id) 
		this.id = id;
	
	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 String getDescribed() 
		return described;
	
	public void setDescribed(String described) 
		this.described = described;
	
	
	/*toString方法 方便打印数据*/
	@Override
	public String toString() 
		return "编号:" + id + ", 名称:" + name + ", 价格:" + price + ", 描述:" + described;
	


【分析】这个类为水果类,字段有编号,名称,价格和描述,使用了参数构造方法,这样方便创建对象的时候直接赋值。后面的代码就是setter、getter方法了,由于该类实现了面向对象的封装,所有必须使用这两种方式暴露出去。toString方法方便了打印信息。

2、业务逻辑类

  1. 库存接口
package com.nan.service;

import com.nan.opjo.Fruit;

/**
 * 水果库存接口
 */
public interface FruitImpl 
	/*新增库存*/
	void addFruit(Fruit fruit);
	
	/*查询库存*/
	void selectFruit();
	
	/*根据水果编号查询库存*/
	int selectById(Integer id);
	
	/*修改库存*/
	void updateFruit(Fruit newFruit);
	
	/*删除库存*/
	void deleteFruit(Integer id);

【分析】这步操作就是定义了几个规范,每个规范都有注释。

  1. 库存接口实现类
package com.nan.service;

import java.util.ArrayList;
import java.util.List;

import com.nan.opjo.Fruit;

/**
 * 水果库存逻辑类
 */
public class FruitService implements FruitImpl 
	//定义一个仓库
	private List<Fruit> fruitList = new ArrayList<Fruit>();
	
	/**
	 * 新增库存
	 */
	@Override
	public void addFruit(Fruit fruit) 
		//获取水果信息
		Integer id = fruit.getId();
		//调用校验编号是否唯一
		if(!number(id)) 
			System.out.println("该编号已存在");
			return;
		
		String name = fruit.getName();
		double price = fruit.getPrice();
		String described = fruit.getDescribed();
		//创建一个水果类并生产水果信息
		Fruit fruit1 = new Fruit(id,name,price,described);
		//把水果放入仓库
		fruitList.add(fruit1);
		System.out.println("新增成功");
	

	/**
	 * 查询库存
	 */
	@Override
	public void selectFruit() 
		if(fruitList.size() == 0 || fruitList == null) 
			System.out.println("库存空空如也~~~");
			return;
		
		//遍历查询
		for(Fruit fruit : fruitList) 
			//直接打印
			System.out.println(fruit.toString());
		
	
	
	/**
	 * 设置水果编号唯一性 false:不唯一,true:唯一
	 */
	public boolean number(Integer id) 
		if(fruitList.size() >0 || fruitList != null) 
			//遍历查询
			for(Fruit fid : fruitList) 
				Integer number = fid.getId();
				if(number.equals(id)) 
					System.out.println();
					return false;
				
			
		
		return true;
	
	
	/**
	 * 根据水果编号查询对应的水果库存
	 */
	@Override
	public int selectById(Integer id) 
		//遍历查询
		for(Fruit fruit : fruitList) 
			//获取水果编号
			Integer fid = fruit.getId();
			//判断编号是否一致
			if(id.equals(fid)) 
				return 200;
			
		
		return -1;
	

	/**
	 * 根据水果编号修改对应库存信息
	 */
	@Override
	public void updateFruit(Fruit newFruit) 
		//遍历查询
		for(Fruit fruit : fruitList) 
			//获取水果编号
			Integer fid = fruit.getId();
			//获取传进来的水果编号
			Integer newId = newFruit.getId();
			//判断编号是否一致
			if(newId.equals(fid)) 
				//修改水果库存信息
				fruit.setName(newFruit.getName());
				fruit.setPrice(newFruit.getPrice());
				fruit.setDescribed(newFruit.getDescribed());
				System.out.println("修改成功");
				return;
			
		
	

	/**
	 * 根据水果编号删除对应的库存
	 */
	@Override
	public void deleteFruit(Integer id) 
		//遍历查询
		for(Fruit fruit : fruitList) 
			//获取水果编号
			Integer fid = fruit.getId();
			//判断编号是否一致
			if(fid.equals(id)) 
				//删除水果库存
				fruitList.remove(fruit);
				System.out.println("删除成功");
				return;
			
		
	

【分析】这步操作是这个系统的核心,基本的逻辑操作就在这里,比如新增、查询、修改和查询都是在这个类中。这里需要说明的是本系统存入的所有水果都是放在 一个集合fruitList中的,由此保证了仓库的唯一性。

3、程序主入口类

package com.nan.main;

import java.util.Scanner;

import com.nan.opjo.Fruit;
import com.nan.service.FruitService;

/**
 * 水果库存的主菜单
 */
public class Main 
	//创建水果库存逻辑类
	private static FruitService fruitService = new FruitService();

	public static void main(String[] args)  //程序的主入口
		//循环使程序一直执行
		while(true) 
			// 设置菜单项
			System.out.println("<=====欢迎使用水果库存系统======>");
			System.out.println("本系统菜单功能如下:");
			System.out.println("【1】新增库存");
			System.out.println("【2】查询库存");
			System.out.println("【3】修改库存");
			System.out.println("【4】删除库存");
			System.out.println("【5】退出系统");
		
			//使用扫描器 获取用户输入的信息
			Scanner sc = new Scanner(System.in);
			System.out.println("请输入您要选择的操作:");
			String inputUser = sc.next();
		
			//判断用户输入的信息进行不同场景的设计
			switch(inputUser) 
				case "1": //新增库存
					System.out.println("请您根据下面的指示进行操作:");
					System.out.print("请输入水果编号:");
					Integer id = sc.nextInt();
					//校验编号是否唯一
					if(!fruitService.number(id)) 
						System.out.println("该编号已存在");
						break;
					
					
					System.out.print("请输入水果名称:");
					String name = sc.next();
					
					System.out.print("请输入水果价格:");
					double price = sc.nextDouble();
					
					System.out.print("请输入水果描述:");
					String desbriced = sc.next();
					
					//存储水果的对象并把水果信息存入其中
					Fruit fruit = new Fruit(id, name, price, desbriced);
					//调用逻辑类添加库存
					fruitService.addFruit(fruit);
					break;
				case "2": //查询库存
					System.out.println("正在查询...");
				try 
					Thread.sleep(2000);
				 catch (InterruptedException e) 
					e.printStackTrace();
				
					System.out.println("<===============水果库存列表===============>");
					fruitService.selectFruit();
					System.out.println("<================库存列表=================>");
					System.out.println(""); //换行
					break;
				case "3": //修改库存
					System.out.println("请输入您要修改的水果编号:");
					Integer uId = sc.nextInt();
					//在仓库里查询一边是否存在
					int msg = fruitService.selectById(uId);
					if(msg == 200) 
						//存在,可以修改
						System.out.println("请您根据下面的指示进行操作:");
						
						System.out.print("请输入水果名称:");
						String uname = sc.next();
						
						System.out.print("请输入水果价格:");
						double uprice = sc.nextDouble();
						
						System.out.print("请输入水果描述:");
						String udesbriced = sc.next();
						//存储水果的对象并把水果信息存入其中
						Fruit uFruit = new Fruit(uId,uname, uprice, udesbriced);
						//调用逻辑类添加库存
						fruitService.updateFruit(uFruit);
					else 
						System.out.println("您输入的水果编号不存在");
					
					break;
				case "4": //删除库存
					System.out.println("请输入您要删除的水果编号:");
					Integer fid = sc.nextInt();
					//调用逻辑类
					fruitService.deleteFruit(fid);
					break;
				case "5": //退出系统
					System.out.println("系统已退出");
					System.exit(0);
				default: //其他不存在操作
					System.out.println("您输入的操作不存在!");
					break;	
			
			
	

【分析】这个类是程序的主入口,就是运行程序的地方了。这一步就是设计界面,使用分支语句根据用户输入的信息进行对应场景的业务逻辑操作。


五、写在最后

以上就是本系统的全部功能,但是本系统还有些潜在bug,而且有些地方也是可以再优化一下的,还有如果有对GUI感兴趣的小伙伴,可以在本系统的基础上增添色彩。最后如果本篇文章对您有所帮助,请给作者点个赞。

以上是关于水果库存系统(基础版)的主要内容,如果未能解决你的问题,请参考以下文章

水果库存系统(基础版)

水果库存系统(基础版)

水果销售系统功能设计

Web实战-Tomcat-Servlet-Thymeleaf -JDBC-MySQL浏览器页面显示数据库数据(水果库存系统)

Spring AOP 切点指示器

markdown 将库存指示器按钮添加到产品页面