JAVA 一个序列号项目,请大神帮忙看下思路是不是正确?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 一个序列号项目,请大神帮忙看下思路是不是正确?相关的知识,希望对你有一定的参考价值。

首先编写三个类:订单类,产品类,顾客类。
1,订单类属性:订单编号、产品列表
2,产品类属性:编号、名称、数量、价格
3,顾客类属性:名字、订单编号。。。。。。。。。。。。。。。这是视频上提示。
按照视频提示和要求,我想的步骤如下:
1、编写三个类,全部继承Serializable接口,实现可序列化。
2、顾客类包含一个订单类对象(因为订单编号是在订单类里面的),订单类包含一个产品类对象(因为产品列表都在产品类里面)。
3,编写INIT()购买方法,此方法编写在顾客类中,接受一个产品类对象,调用GET和SET方法,编写购买流程。
4,编写Save()方法,这个就是序列化吧,这个方法编写在顾客类中?此方法暂时搁置。。
5,编写LOAD()方法,获得对象,意思是 顾客类存在多个顾客对象,然后获取这些对象?
求大神看下,补充或者修改,在线等!
订单编号怎么设计比较好? 最后的序列化,比如我最终将顾客类里面各种属性都设置好,最用用 writeObject方法直接将顾客对象打包?

简单的写了下,但存在一些不足,比如一些格式校验,一个订单中某个商品买多个的情况。你可以参考下。IO由于比较简单就没自己写方法了,用了apache的 FileUtils


参考技术A 1、订单编号要的是惟一,所以可以使用UUID策略来生成订单号,只要拿到订单号之后我们可以查询到订单信息即可,在实际项目中我们都会以时间当作前缀来标识这个订单号,比如
2014092410410101-后边可以加随机码
2、序列化有多种方式,你可以将数据直接writeObject到txt,也可以给这订单类实现toString方法,直接输出到txt
参考技术B 1、产品类 产品编号、产品详细信息。。。
2、顾客类 顾客编号、顾客详细信息。。。
3、订单类 订单号,顾客编号
4、订单产品关联类 订单号,产品编号,产品数量
参考技术C //产品类
package cn.pojo;
import java.io.Serializable;

public class Product implements Serializable
private static final long serialVersionUID = 1L;
//产品编号
private int id;
//产品名
private String name;
//库存
private int stock;
//单价
private double price;

public Product()


public int getId()

return id;

public void setId(int id)

this.id = id;

public String getName()
return name;

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

public int getStock()
return stock;

public void setStock(int stock)
this.stock = stock;

public double getPrice()
return price;

public void setPrice(double price)
this.price = price;



//订单类
package cn.pojo;
import java.io.Serializable;
import java.util.List;
public class Order implements Serializable

private static final long serialVersionUID = 1L;
//订单号
private String orderId;

//产品列表
private List<Product> productList;

public Order()


public String getOrderId()
return orderId;

public void setOrderId(String orderId)
this.orderId = orderId;

public List<Product> getProductList()
return productList;

public void setProductList(List<Product> productList)
this.productList = productList;



//顾客类
package cn.pojo;
import java.io.Serializable;
public class Customer implements Serializable

private static final long serialVersionUID = 1L;

//顾客姓名
private String name;

//订单对象
private Order order;

public Customer()


public String getName()
return name;

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

public Order getOrder()
return order;

public void setOrder(Order order)
this.order = order;



//顾客服务(测试)
package cn.pojo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.UUID;
public class CustomerBiz
//顾客对象
private static Customer customer = new Customer();

//编写save()方法保存对象到"save.bin"二进制文件。
private static void save()
ObjectOutputStream oos = null;
try
oos = new ObjectOutputStream(new FileOutputStream("data\\save.bin"));
oos.writeObject(customer);
oos.flush();
System.out.println("保存成功!");
catch (Exception e)
e.printStackTrace();
finally
if(oos != null)
try
oos.close();
oos = null;
catch (IOException e)
e.printStackTrace();






//编写load()方法获得对象,计算顾客所需的付款

private static void load()

ObjectInputStream ois = null;
try
ois = new ObjectInputStream(new FileInputStream("data/save.bin"));
customer = (Customer)ois.readObject();
System.out.println("加载成功!");
catch (Exception e)
e.printStackTrace();
finally
if(ois != null)
try
ois.close();
ois = null;
catch (IOException e)
e.printStackTrace();




//显示产品信息
private static void showProduct()
double total = 0.0;
List<Product> proList= customer.getOrder().getProductList();
System.out.println("产品名\t单价\t数量");
for (Product product : proList)
if(product != null)
total += (product.getPrice() * product.getStock());
System.out.println(product.getName() + "\t" + product.getPrice() + "\t" + product.getStock());



System.out.println("订单总价:" + total);



//编写InitData()初始化数据的方法,提供从控制台输入购买产品的信息
private static void initData()
BufferedReader input = null;
try
input = new BufferedReader(new InputStreamReader(System.in));
String reply = null;
Product product = null;
List<Product> proList = new ArrayList<>();
//声明订单对象
Order order = new Order();
//使用UUID随机生成订单流水号
//UUID 通用唯一标识符(Universally Unique Identifier)
order.setOrderId(UUID.randomUUID().toString().replaceAll("-", ""));

System.out.print("请输入顾客姓名:");
String name = input.readLine();
System.out.println("请输入选择的产品");
do
System.out.print("请输入产品号:");
int proId = Integer.parseInt(input.readLine());
System.out.print("请输入产品名:");
String proName = input.readLine();
System.out.print("请输入购买数量:");
int proNum = Integer.valueOf(input.readLine());
System.out.print("请输入产品单价:");
double proPrice = Double.parseDouble(input.readLine());
System.out.print("是否继续购买(Y/N)?");
reply = input.readLine();

//创建产品对象,封装产品数据
product = new Product();
product.setId(proId);
product.setName(proName);
product.setStock(proNum);
product.setPrice(proPrice);

//将每一次购买的产品添加容器里面

proList.add(product);

while("y".equalsIgnoreCase(reply));
order.setProductList(proList); //将产品列表添加到订单对象中
customer.setName(name);
customer.setOrder(order); //订单对象添加顾客对象
//序列化
save();
catch (IOException e)
e.printStackTrace();
finally
if(null != input)
try
input.close();
input = null;
catch (IOException e)
e.printStackTrace();





/*
* 程序在运行的时候,如果不存在"save.bin",则进行新订单录入,如果存在,
则显示并计算客户所需付款
* */
private static void orderInput()
File file = new File("data\\save.bin");
if(!file.exists())
initData();
showProduct();

else
load();
showProduct();




public static void main(String[] args)
CustomerBiz cb = new CustomerBiz();
cb.orderInput();


请大神帮忙解决一个用java解压缩一个zip压缩格式字节流中文内容乱码问题!

问题是这样的:我有一个现成的服务器程序,通过android程序来访问那个服务器,协议是TCP,服务器端发来的是按GB2312这个字符集的字节流,且在服务器端用zip格式压缩,现在的问题是:如果服务器端发来的没有中文内容,android这边解压缩很正常,如果服务器端发来的内容含有中文,这边除了非中文外,所有中文都是乱码,且我找了很多资料,也都没有解决,使用的关键代码是:

ByteArrayInputStream in = new ByteArrayInputStream(newbytes);//将字节数组转成输入流
ZipInputStream zipis=new ZipInputStream(in);

zipis.getNextEntry();//将输入流定位在当前entry数据项位置

DataInputStream dis=new DataInputStream(zipis);

//用ZIP输入流构建DataInputStream
str=dis.readLine();//

dis.close();//关闭文件

outSteam.close();

return str;

我想肯定是字符集的问题,但找了很多资料,都没有解决掉,请哪位大神,帮忙解决一下
注:我按网上有人说的修改zipinputstream.java这个类,自行添加一个字符集参数,没有成功,原因可能是,我现在用的java1.7上的zipinputstream里没有他们说的几个关键方法,且我看这个类里有一个可以带字符集参数的方法,但在我的开发环境里,怎么也找到不这个带参数的方法,不知是怎么回事儿

参考技术A 这个问题我有点印象,好像是包的问题。好像不能用zip的那个,换另一个包就好了。具体我也不记得了 参考技术B 服务器端一般不是采用的是gzip吗。

以上是关于JAVA 一个序列号项目,请大神帮忙看下思路是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

clion莫名其妙的报错,请各位大神帮忙看下是啥原因

java 项目开发,出现如下错误dependency. java.lang.NoSuchMethodError:,请大神帮帮忙

JAVA程序的几个小问题,有空的大神帮我看下谢谢啦~也可以让我给你发程序帮忙调一下万分感谢3QQQQQQ

java shiro报错,请大神帮忙

有用梅林固件上SS大神麻烦帮忙看下啥问题,怎么解决

求助各位大神帮我看下 Unity3d 与 Android 交互的问题