资源描述
题目:超级市场销售系统
需求:该系统有如下功能,系统中记录了每一种商品的编号、名称、单价等信息,收银员可通过该系统为顾客选购的商品计价、收费、打印清单。系统可支持会员制销售方式,对于会员,每次在超市中消费后,系统会根据其消费金额折算一定的积分并进行累加,会员进行消费时系统会按照其已有积分值再在所购商品的总金额的基础上进行一定优惠。销售商品事支持其他促销方式,如打折等。另外,超市管理人员可进行分析操作,如按照销售金额的高低顺序对销售清单进行查看,统计每天的销售总金额等。
分析过程:
1. 首先发现对象 1)收银员(该对象模拟收银员这种活动者进行交互),可完成登陆,销售等行为;2)管理员(该对象模拟管理员这种活动者进行交互),可完成销售统计等行为;3)商品:这是系统中最明显的对象,每个对象实例表示一种商品,记录该商品的编号、名称、价格等信息;4)折扣商品:这是一类较特殊的商品,该类商品在制定的时间内按优惠价格销售,它有自己的特殊的属性。5)销售事件:顾客购买一组商品,只要是通过一次计价收款完成的,就称作一个销售事件,每个这样的事件都需要在系统中保存一段时间,以便管理人员进行分析或者进行账务管理等,而且由于该事件中涉及到较多的信息,所以单独设立一个“销售事件”对象来记录这些信息;6)销售事件列表:保存一系列的销售事件。7)顾客类:保存顾客的基本信息如顾客编号,姓名等信息,并模拟选购商品等行为。8)会员类:在一般顾客的基础上添加会员积分等特性,并享受一定得优惠。
2. UML 类层次图如下:
3. 详细类图如下:
在本系统中,大家首先分析出需要的各种类:要充分利用面向对象中的继承机制:继承是一种由已有的类创建新类的机制。利用继承,可以先创建一个拥有共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类自动拥有一般类的属性和行为,并根据需要可以增加新的属性和行为,或者改变父类的行为。
上图给出了7个类的具体声明。
4.注意事项:
1)DiscountedProduct类的实现主要注意在实现getPrice()方法时,要考虑好时间期限问题,来决定折扣商品的价格计算问题,当然要用到系统日期类,Calendar,通过这个类的getInstance()方法得到当前日期;
2)Employee类中的login方法中涉及到输入问题,输入收银员编号及密码,请用Scanner类,相对简单一些。
3)Operator类中有一个方法checkOut(),顾客结账方式,在进行实现的时候,具体算法流程如下:
首先要获得顾客所选购得商品信息列表,然后获得选购某种商品的数量,然后应该根据商品编号在商品信息列表中检索相应商品(目前还没有学习JDBC,暂不用数据库),然后获得价格,最后计算选购商品总价格。
5.商品列表类的实现:
为了便于收银员在结账时根据商品编号快速检索商品信息,我们需要设定一个“商品一览表”对象,它保持一个商品目录表,并提供对商品项的检索及增删等功能。为了提供这些功能,我们可以利用java.util包中的集合类HashMap作为商品列表类的父类,以便能够利用其功能。具体使用请大家参看帮助文档或上网查阅。下面给出此类的设计,请按照说明补充。
class ProductList extends HashMap<String,Product>{
public ProductList(){
此构造方法中生成若干个商品对象和折扣商品对象,注意折扣商品对象有时间期限。
}
}
6.商品选购信息类如下
class OrderInfo { //商品选购信息类
private String ID; //商品编号
private int num; //选购数量
public OrderInfo(String ID,int n){
//补充代码
}
public String getProductID(){ //获取商品编号
//补充代码
}
public int getNum(){ //获取该类商品的选购数量
//补充代码
}
}
7.销售事件列表类:
class sellEvents extends ArrayList<sellEvent> {//销售事件列表类
private static sellEvents events=null; //属性修饰能够保证销售事件列表的唯一性
private sellEvents(){
super();
}
//返回销售事件列表对象的唯一实例
public static sellEvents getInstance(){
if(events==null)
events=new sellEvents();
return events;
}
}
8.销售事件类:
class sellEvent implements Comparable<sellEvent>{
private Calendar sellDate=Calendar.getInstance(); //销售日期
private String operatorID; //收银员编号
private ArrayList<OrderInfo> sellList; //销售商品列表
private double price; //应收金额
private String CustomerID; //顾客编号
private double sid; //销售流水号
static private double ID=0;
public sellEvent(String oid,String cid,ArrayList<OrderInfo> sellList,double price){
sid=++ID;
operatorID=oid;
CustomerID=cid;
this.sellList=sellList;
this.price=price;
}
public String toString() {
String str="***********顾客购物清单*****************\n";
str+="收银员: "+operatorID+"\t 日期"+
sellDate.getTime().toString()+" 顾客编号:"+CustomerID+" "+"\t 流水号:"+sid+"\n";
for(int i=0;i<sellList.size();i++) {
//得到顾客所选购商品的编号
String pID=sellList.get(i).getProductID();
//得到顾客所选购商品的数量
int num=sellList.get(i).getNum();
ProductList pList=new ProductList();
//根据商品编号在商品列表中检索商品信息
Product p=pList.get(pID);
str+=p.toString()+" 数量:"+num+"\n";
}
str+="收款总额:"+price;
return str;
}
public int compareTo(sellEvent other) {
//完成此部分
}
}
上面给出了主要类的部分设计和一些完成代码,没有完成的请同学们认真编写代码完成,组织成一个完整的超市的销售系统。
最后输出结果界面请大家参照如下:
展开阅读全文