写留的商务超市管理系统~~~第二部分

紧跟着上一章~

随后我们实现goodbiz的Goods类和SalesmanGroup类,这个有点类似MVC里面的控制器,在底层进行增删改查的处理

这里就很快明白了我们为什么底层还要再放good和salesman类,因为他们是我的map里面保存的对象,只作为保存的对象而其实并不参与业务

我觉得只用java实现的弊端在于没有mysql之类的数据库在后端对数据进行存储,于是我就用了Map<String,Good/Salesman>来对每一对对象进行存储

整体的思路如下图:

/**
 * 商品信息库
 */
package com.pb.goodbiz;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.pb.good.Good;

//@SuppressWarnings("serial")
public class Goods  {

	@SuppressWarnings("unused")
	private Good good = new Good();

	// 定义HashMap集合,用于存放商品信息。因为HashMap是健、值成对存放的
	// 所以使用HashMap做增、删、改、查比较方便
	public static Map<String, Good> goodMap = new HashMap<String, Good>();

	//从硬盘直接读取信息
	public Goods(){
		ObjectInputStream ois = null;
		File file = new File("d:/mydoc/goods.txt");
		try {
			if(!file.exists())
				file.createNewFile();
			ois = new ObjectInputStream(new FileInputStream(file));//就这么写!
			try {
				List list = (List) ois.readObject();
				goodMap = (Map<String,Good>) list.get(0);
				Good.count = (Integer) list.get(1);
				Good.alertnum = (Integer) list.get(2);
			} catch (ClassNotFoundException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}

	// 初始化HashMap,使用反序列化,从硬盘读取信息。
	//其实用constructor直接new出来也可以
//	@SuppressWarnings("unchecked")
//	public static void initializeUser() {
//		ObjectInputStream ois = null;
//		try {
//			File file = new File("d:/mydoc/goods.txt");
//			if (!file.exists())
//				file.createNewFile();
//			ois = new ObjectInputStream(new FileInputStream(file));
//			try {
//				List list = (List) ois.readObject();
//				goodMap = (Map<String, Good>) list.get(0);
//				Good.count = (Integer) list.get(1);
//				Good.alertnum = (Integer) list.get(2);
//			} catch (ClassNotFoundException e) {
//				e.printStackTrace();
//			}
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//	}

	// 增加商品
	public void addGood(Good good) {
		goodMap.put(good.getName(), good);
	}

	// 修改商品
	public void modifyGood(Good good) {
		goodMap.put(good.getName(), good);
	}

	// 删除商品
	public void deleteGood(String name) {
		goodMap.remove(name);
	}

	// 商品入库
	public void in(String name, int num) {
		goodMap.get(name).setStorage(goodMap.get(name).getStorage() + num);
	}

	// 商品出库
	public void out(Good good, int num) {
		good.setStorage(good.getStorage() - num);
	}

	// 设置警戒库存、检查商品库存是否在安全线以上
	public void checkStorage(int num) {
		Good.alertnum = num;// 因为alertnum是静态的,所以直接赋值
		// 遍历goodMap,如果库存小于警戒库存,增加备注信息,反之,删除备注信息。
		for (Entry<String, Good> e : goodMap.entrySet()) {
			if (e.getValue().getStorage() < Good.alertnum) {
				e.getValue().setNote("*该商品已不足" + Good.alertnum + "件");
			} else {
				e.getValue().setNote("");
			}
		}
	}

	// 查询指定商品
	public void queryGood(String name) {
		if (goodMap.get(name) != null) {
			System.out.println("商品ID" + "\t\t商品名称" + "\t\t商品价格" + "\t\t商品库存"
					+ "\t\t备注");
			System.out.println(goodMap.get(name));
		} else
			System.out.println("商品不存在");

	}

	// 查询全部商品
	public void queryAll() {
		System.out.println("商品ID" + "\t\t商品名称" + "\t\t商品价格" + "\t\t商品库存"
				+ "\t\t备注");
		for (Entry<String, Good> e : goodMap.entrySet()) {
			System.out.println(e.getValue().getId() + "\t"
					+ e.getValue().getName() + "\t\t" + e.getValue().getPrice()
					+ "\t\t" + e.getValue().getStorage() + "\t\t"
					+ e.getValue().getNote());
		}
	}

	// 查询当日买出商品
	public void dayQuery() {
		System.out.println("商品ID" + "\t\t商品名称" + "\t\t商品价格" + "\t\t商品库存"
				+ "\t\t销量" + "\t\t备注");
		for (Entry<String, Good> e : goodMap.entrySet()) {
			if (e.getValue().getSale() != 0) {
				System.out.println(e.getValue().getId() + "\t"
						+ e.getValue().getName() + "\t\t"
						+ e.getValue().getPrice() + "\t\t"
						+ e.getValue().getStorage() + "\t\t"
						+ e.getValue().getSale() + "\t\t"
						+ e.getValue().getNote());
			}
		}
	}

	// 模糊查找商品信息
	public boolean fuzzyQuery(String str) {
		int count = 0;
		Pattern p = Pattern.compile("\\w*" + str + "\\w*");
		System.out.println("商品ID" + "\t\t商品名称" + "\t\t商品价格" + "\t\t商品库存"
				+ "\t\t备注");
		for (Entry<String, Good> e : goodMap.entrySet()) {
			Matcher m = p.matcher(e.getValue().getName());
			if (m.matches()) {
				System.out.println(e.getValue().getId() + "\t"
						+ e.getValue().getName() + "\t\t"
						+ e.getValue().getPrice() + "\t\t"
						+ e.getValue().getStorage() + "\t\t"
						+ e.getValue().getSale() + "\t\t"
						+ e.getValue().getNote());
				count++;
			}
		}
		if (count == 0)
			return false;
		return true;
	}

	// 按价格升序查询
	// 因为HashMap没有排序的功能,所以把集合中的值取出来,放到ArrayList集合里
	// 使用Collections.sort()方法,对ArrayList进行升序排序
	@SuppressWarnings("unchecked")
	public void priceQuery() {
		List<Good> goodlist = new ArrayList<Good>();
		for (Entry<String, Good> e : goodMap.entrySet()) {
			goodlist.add(e.getValue());
			System.out.println(e.getValue().getPrice());
		}
		Collections.sort(goodlist);
		System.out.println("商品ID" + "\t\t商品名称" + "\t\t商品价格" + "\t\t商品库存"
				+ "\t\t备注");
		for (int i = 0; i < goodlist.size(); i++) {
			System.out.println(goodlist.get(i).getId() + "\t"
					+ goodlist.get(i).getName() + "\t\t"
					+ goodlist.get(i).getPrice() + "\t\t"
					+ goodlist.get(i).getStorage() + "\t\t"
					+ goodlist.get(i).getNote());
		}
	}

	// 保存商品信息
	// 使用序列化,把HashMap写到硬盘。
	@SuppressWarnings("unchecked")
	public void save() {
		File file = new File("d:/mydoc/goods.txt");
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new FileOutputStream(file));
			List list = new ArrayList();
			list.add(goodMap);
			list.add(Good.count);
			list.add(Good.alertnum);
			oos.writeObject(list);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (oos != null) {
			try {
				oos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	// 结账
	public double settlement(Good good, int sale) {
		return good.settlement(good, sale);
	}
}

之后同理对salesmanGroup也进行增删改查管理

/**
 * 售货员库
 */
package com.pb.salesmanBiz;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.pb.salesman.Salesman;

//@SuppressWarnings("serial")
public class SalesmanGroup  {

	//定义HashMap集合,用于存放售货员信息。
	public static Map<String, Salesman> userMap = new HashMap<String, Salesman>();

	//直接new的时候读取硬盘信息
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public SalesmanGroup(){
		ObjectInputStream ois = null;
		try {
			File file = new File("d:/mydoc/user.txt");
			if(!file.exists())
				file.createNewFile();
			ois = new ObjectInputStream(new FileInputStream(file));
			List list = (List) ois.readObject();
			userMap = (Map<String, Salesman>) list.get(0);
			Salesman.sum = (Integer) list.get(1);
		} catch (FileNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}

	// 初始化HashMap,使用反序列化,从硬盘读取信息。
//	@SuppressWarnings("unchecked")
//	public static void initializeSalesman() {
//		ObjectInputStream ois = null;
//		try {
//			File file = new File("d:/mydoc/user.txt");
//			if (!file.exists())
//				file.createNewFile();
//			ois = new ObjectInputStream(new FileInputStream(file));
//			try {
//				List list = (List) ois.readObject();
//				userMap = (Map<String, Salesman>) list.get(0);
//				Salesman.sum = (Integer) list.get(1);
//			} catch (ClassNotFoundException e) {
//				e.printStackTrace();
//			}
//		} catch (FileNotFoundException e) {
//			e.printStackTrace();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//	}

	// 增加售货员
	public void add(Salesman user) {
		userMap.put(user.getName(), user);
	}

	// 修改售货员
	public void modify(Salesman user) {
		userMap.put(user.getName(), user);
	}

	// 删除售货员
	public void delete(String name) {
		userMap.remove(name);
	}

	// 查询指定售货员
	public void query(String name) {
		if (userMap.get(name) != null) {
			System.out.println("用户名" + "\t密码" + "\t\t年龄");
			System.out.println(userMap.get(name));
		} else
			System.out.println("用户不存在");

	}

	// 查询全部售货员
	public void queryAll() {
		System.out.println("用户名" + "\t密码" + "\t\t年龄");
		for (Entry<String, Salesman> e : userMap.entrySet()) {
			System.out.println(e.getValue().getName() + "\t"
					+ e.getValue().getPsd() + "\t\t" + e.getValue().getAge());
		}
	}

	// 保存售货员信息,使用序列化,把HashMap写到硬盘。
	@SuppressWarnings("unchecked")
	public void save() {
		File file = new File("d:/mydoc/user.txt");
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new FileOutputStream(file));
			List list = new ArrayList();
			list.add(userMap);
			list.add(Salesman.sum);
			oos.writeObject(list);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (oos != null) {
			try {
				oos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

然后我们再几乎没有写代码都之间点一点完成底层对Good和Salesman的描述,完成类

/*
 * 定义商品信息
 */
package com.pb.good;

import java.io.Serializable;

import com.pb.number.ID;

@SuppressWarnings( { "serial", "unchecked" })
public class Good implements Serializable, Comparable {

	public static int count = 1;// 记录增加商品的总数量
	public static int alertnum = 10;// 警戒库存

	private String id;// 商品ID
	private String name;// 名称
	private double price;// 价格
	private int storage;// 库存
	private int sale;// 销售数量
	private String note;// 备注

	//无参购造方法(每使用new购造一次count加1,代表商品总数加1)
	public Good() {
		this.id = ID.returnID(count);
		count++;
	}

	//有参购造方法(每使用new购造一次count加1,代表商品总数加1,判断库存,如果小于
	//警戒库存,则添加备注信息)
	@SuppressWarnings("static-access")
	public Good(String name, double price, int storage) {
		this.id = ID.returnID(count);
		this.name = name;
		this.price = price;
		this.storage = storage;
		if (this.storage < this.alertnum)
			this.setNote("*该商品已不足" + this.alertnum + "件");
		this.note = "";
		count++;
	}

	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 getStorage() {
		return storage;
	}

	//set库存足,如果实际库存小于警戒库存,则添加备注信息
	@SuppressWarnings("static-access")
	public void setStorage(int storage) {
		this.storage = storage;
		if (this.storage < this.alertnum)
			this.setNote("*该商品已不足" + this.alertnum + "件");
		else
			this.setNote("");
	}

	public int getSale() {
		return sale;
	}

	public void setSale(int sale) {
		this.sale = sale;
	}

	public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}

	public String getId() {
		return id;
	}

//	// 返回购买商品的金额
//	public double cost(int sale) {
//		return sale * this.price;
//	}

	// 重写toString()方法
	@Override
	public String toString() {
		return this.getId() + "\t" + this.getName() + "\t\t" + this.getPrice()
				+ "\t\t" + this.getStorage() + "\t\t" + this.getNote();
	}

	// 重写compareTo()方法,用于ArrayList排序
	public int compareTo(Object obj) {
		Good good = (Good) obj;
		if (this.price == good.getPrice()) {
			return 0;
		} else {
			if (this.price > good.getPrice()) {
				return 1;
			} else {
				return -1;
			}
		}
	}

	// 返回购买商品的金额,如果库存小于购买数量,提式,如果不小于,返回该商品总价,并出库
	public double settlement(Good good, int sale) {
		this.sale += sale;
		if (good.getStorage() < sale) {
			System.out.println("库存不足!");
			return 0;
		} else {
			good.setStorage(good.getStorage() - sale);
			return good.getPrice() * sale;
		}
	}
}
/**
 * 定义售货员类
 */
package com.pb.salesman;

import java.io.Serializable;

import com.pb.number.ID;

@SuppressWarnings("serial")
public class Salesman implements Serializable {

	public static int sum=1;// 用于计录售货员的人数,所以用static

	@SuppressWarnings("unused")
	private String id;//售货员ID
	private String name;//用户名
	private String psd;//密码
	private int age;//年龄

	public Salesman() {
		this.id=ID.returnID(sum++);
	}

	public Salesman(String name, String psd, int age) {
		this.id=ID.returnID(sum);
		this.name = name;
		this.psd = psd;
		this.age = age;
		sum++;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPsd() {
		return psd;
	}

	public void setPsd(String psd) {
		this.psd = psd;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return this.getName() + "\t" + this.getPsd() + "\t\t" + this.getAge();
	}
}

现在程序的框架基本已经搭好啦~

时间: 2024-10-07 19:27:27

写留的商务超市管理系统~~~第二部分的相关文章

写留的商务超市管理系统~~~第一部分

需求请见:http://pan.baidu.com/s/1pJPsYF5 有机会希望再补po到blog上面~ 首先用menu把进入后的框架搭起来 /* * 各级菜单显示 */ package com.pb.menu; public class Menu { /** * 登陆菜单 */ public void login() { System.out.println("欢迎使用商超管理系统"); System.out.println("1.登陆系统"); System

蓝缘管理系统第二个版本开源了。springMVC+springSecurity3.x+Mybaits3.x 系统

蓝缘管理系统第二个版本开源了 继于 http://blog.csdn.net/mmm333zzz/article/details/16863543 版本一.版本二 对springMVC+springSecurity3.x+Mybaits3.x的权限系统 进行很多优化方面,继续进行开源,. 预览地址:http://www.lanoss.com      多谢群友们的支持,该网站是用到啊里云服务+香港主机,希望大家继续支持捐 助!群主支付账号 [email protected] 捐助时,记得备注!谢

超市管理系统制定测试计划

http://www.cnblogs.com/panguangmei/ 超市管理系统测试计划 1. 简介 1. 1目的 超市管理系统“超市管理系统测试计划”文档有助于实现以下目标: 确定超市管理系统的信息和应超市管理系统测试的软件构件. 针对超市管理系统推荐可采用的超市管理系统测试策略,并对这些策略加以说明. 确定所需的资源,并对超市管理系统测试的工作量进行估计. 列出超市管理系统超市管理系统测试项目的可交付元素. 1. 2背景 对超市管理系统(构件.应用程序.系统等)及其目标进行简要说明.需要

哪里可以找到基于JAVA设计帮做的超市管理系统

一,关于我们我们是专业从事于定做计算机相关毕业设计,拥有专业的写手团队和严格的保密制度.我们的工程师们在软件工程开发与设计的各个领域积累了丰富的经验,保证服务水平.我们致力于为客户提供各专业高质量的毕业设计定做服务,为即将毕业的同学提供毕业设计指导.毕设代做.毕设定制等一站式服务.强大的专业能力,高效的服务水平,多年以来一直深得客户好评,毕业只有一次,我们将尽心尽力为你完成毕设. 联系我们:.扣.扣.号(幺零三贰三七幺贰幺) 与我们取得联系,向我们提出您的写作要求:我们咨询师会根据您的服务需求和

超市管理系统—NABCD模型

1) N (Need 需求) 需求分析: 超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生.依靠现代化的计算机信息处理技术来管理超市,节省了大量的人力.物力,改善了员工的并且能够快速反映出商品的进.销.存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率. 2) A (Approach 做法) 本系统主要包括四大模块,分别是人事管理模块,销售管理模块,进货管理模块,库存管理模块.每

java写的一个简单学生管理系统[改进]

用Java写的一个简单学生管理系统 import java.util.*; public class student_cj {  public static void main(String[] args){      Scanner in=new Scanner(System.in);   System.out.print("请输入学生人数:");   int num=in.nextInt();//学生人数   String[] str=new String[num];//结合一行数

超市管理系统---总结篇

花费一周左右的时间完成一个练习项目:超市管理系统,基于C#winform+ADO.NET+SQLServer,分为前台系统+后台系统.有兴趣的小伙伴可以围观: GitHub: https://github.com/EasonDongH/SupermarketManagementSystem 总结一下: 技术点: ADO.NET:带参数SQL:存储过程:三层架构:分页查询等 学习点: 三层的练习:分页查询的实现 原文地址:https://www.cnblogs.com/EasonDongH/p/8

文献综述十一:基于商品的商业超市管理系统的改进

一.基本信息 标题:基于商品的商业超市管理系统的改进 时间:2017 出版源:潍坊学院学报 文件分类:对商品系统的研究 二.研究背景 根据超市实际需求进行扩展 ,由重结果向行为转为重过程控制 ,实现超市系统的自动管理和优化. 三.具体内容 大部分超市系统的商品管理着重点在于数据库管理.供应链管理等理论性研究,而国外的先进品类管理软件水土不服,不适合国内的超市管理特点.本文献主要从调研 .采购 .订单 .收货 .库存 .销售到回款等各个环节实施全程计算机控制 ,实现系统的自动判断和优化.文献的主要

SSM超市管理系统

每天记录学习,每天会有好心情.*^_^* 今天将为大家分析一个基于SSM的超市管理系统的设计与实现,给超市管理营造 出了一种现代化的气氛,至少也能促使人们的管理观念进行一点更新或者给超市罩上一层现代管理的外衣.采用当前非常流行的B/S体系结构,以JSP作为开发技术,主要依赖SSM技术框架,mysql数据库建立本系统.关键词,管理系统的设计与实现,超市管理系统设计与实现,设计超市管理系统),基于SSM的超市管理系统的设计与实现项目使用框架为SSM(MYECLIPSE),选用开发工具为MYECLIP