1、 北大青鸟第一单元超市收银管理系统 88 2020年5月29日 文档仅供参考 包结构 四个包,九个类,一个资源文件 客户端类 package com.supermarket.Client; /** * 客户端界面 */ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Scanner; import com.supermarket.Tools.Datas;
2、 import com.supermarket.Tools.SysConstans; import com.supermarket.entity.Goods; public class Client { //定义扫描器,用于键盘输入 public static Scanner input=new Scanner(System.in); //创立客户端业务类对象,调用方法 public static ClientB cb=new ClientB(); public static void main(String[] args) { do{ System.o
3、ut.println("***********欢迎使用青鸟超市系统*************"); System.out.println("1.登录"+"\n2.退出"); System.out.println("***********请选择1/2*************"); String choice=input.next(); if(choice.equals("1")){ //登录视图 createLoginView(); break; } else if(choice.equals("2")){ //退出
4、System.exit(0); } else{ //输入有误,报错 System.out.println("无此选项!"); } }while(true); System.out.println("***********谢谢使用青鸟超市系统*************"); } /** * 登录视图 * 经过输入的用户名与密码验证用户身份,管理员则进入管理界面,收银员则进入收银界面,都不是则提示错误,并重新进行输入 */ public static void createLoginView(){ do {
5、 //提示登录信息 System.out.println("请输入用户名:"); String name = input.next(); System.out.println("请输入密码:"); String password = input.next(); //调用客户端登录方法,接收返回值,判断登录者的身份 Datas datas = cb.doLogin(name, password); //判断是管理员还是收银员 if (datas.getFlag().equals(SysConstans.SYS_ADMIN))
6、{ createAdminView(); break; } else if (datas.getFlag().equals(SysConstans.SYS_CASHIER)) { createCashierView(); break; } else { System.out.println("用户名或密码有误,请重新输入"); } } while (true); } /** * 管理员菜单 * 实现管理员功能: * 1.商品入库 2.商品出库 3.新增商品 4.查询全部商品 5.按编号查询商
7、品 6.退出 */ private static void createAdminView() { //循环操作 // 管理员菜单 System.out.println("管理员登录成功,进入管理员界面"); do{ System.out.println("***********欢迎进入青鸟超市库存管理系统*************"); System.out.println("1.商品入库\t2.商品出库\t3.新增商品\t4.查询全部商品\t5.按序号查询商品\t6.退出"); //提示用户选择 System.out.pri
8、ntln("请输入您的选择"); int choice=input.nextInt(); switch(choice){ //商品入库,调入库方法 case 1: //提示输入要入库的编号 System.out.println("请输入入库商品编号:"); //定义变量接收输入的编号 String goodnum=input.next(); //调用方法判断库存中是否有要入库的商品 if(cb.Find(goodnum).getFlag().equals(SysConstans.SYS_SUCCESS)
9、){ System.out.println("请输入入库数量:"); int count=input.nextInt(); if(count>=0){ Datas datas=cb.RuKu(goodnum,count); if(datas.getFlag().equals(SysConstans.SYS_SUCCESS)){ System.out.println("入库成功!"); showList(cb.FindAll()); } }else{
10、 System.out.println("入库数量必须大于0"); } }else{ System.out.println("无此商品,请选择3新增"); } break; //商品出库,调出库方法 case 2: do{ //提示输入出库商品编号 System.out.println("请选择出库商品编号:"); //定义变量接收编号 String goodid=input.next(); //先查询是否由此商品 if(cb.Find(goodid).getF
11、lag().equals(SysConstans.SYS_SUCCESS)){ //提示输入出库数量 System.out.println("请输入出库数量:"); int count=input.nextInt(); if(count>0){ Datas datas=cb.ChuKu(goodid,count); if(datas.getFlag().equals(SysConstans.SYS_LACK)){ System.out.println("库存不足!"); showGood
12、datas); break; }else{ System.out.println("出库成功!"); showList(datas); break; } }else{ System.out.println("出库数量必须大于0!"); } }else{ System.out.println("库存中无此商品,请选择3新增"); break; } }while(true); break; cas
13、e 3: //新增商品,调新增方法 do{ //提示输入新增商品编号 System.out.println("请输入新增商品的编号:"); String newgoodid=input.next(); if(cb.Find(newgoodid).getFlag().equals(SysConstans.SYS_SUCCESS)){ System.out.println("商品已存在"); break; } else{ System.out.println("请输入商品名称:");
14、 String name=input.next(); System.out.println("请输入商品单价:"); double price=input.nextDouble(); System.out.println("请输入商品单位:"); String unit=input.next(); System.out.println("请输入商品数量:"); int count=input.nextInt(); Goods good=new Goods(newgoodid,(name+" \t"),price
15、unit,count); //把要新增的商品经过调用方法传给业务类,并接收返回值 Datas datas=cb.Add(good); System.out.println("新增商品成功!"); //打印商品列表 showList(cb.FindAll()); break; } }while(true); break; //查询全部商品的方法 case 4: //查询商品,调用showList方法参数为Datas类型,是FindAll传回来的 showList
16、cb.FindAll()); break; //按编号查询商品,调按编号查询方法 case 5: //提示输入编号 System.out.println("请输入要查询的编号:"); //定义变量接收输入 String id=input.next(); //判断库存中是否存在编号为goodid的商品 Datas datas=cb.Find(id); //如果存在,调用方法,打印商品 if(datas.getFlag().equals(SysConstans.SYS_SUCCESS)
17、){ showGood(datas); }else{ System.out.println("没有此商品"); } break; case 6: //退出 System.out.println("管理员退出成功!"); System.exit(0); default : //提示无此选项 System.out.println("无此选项,请重新输入:"); } }while(true); } /** * 收银员管理界面. * 实现收银
18、员的功能: * 1.扫描商品 2.修改购买商品的数量 3.结账 4.退出 */ //收银员管理界面 private static void createCashierView() { //循环操作收银界面 while(true){ System.out.println("收银员登录成功,进入收银员界面"); System.out.println("***********欢迎进入青鸟超市收银管理系统*************"); System.out.println("1.扫描商品\t2.修改数量\t3.结账\t4.退出");
19、 //提示用户输入操作选项 System.out.println("请输入您的选择:"); int choice=input.nextInt(); switch(choice){ case 1: //调用扫描方法 do{ //提示输入扫描编号 System.out.println("请输入要扫描的商品编号:"); String scannum=input.next(); //如果查询到编号,说明商品存在,否则商品不存在 if(cb.Find(scannum).getFlag().eq
20、uals(SysConstans.SYS_SUCCESS)){ //如果商品存在,调用扫描的方法 Datas datas=cb.scan(scannum); //判断返回的标识 if(datas.getFlag().equals(SysConstans.SYS_SUCCESS)){ System.out.println("扫描成功"); showScan(datas); break; }else{ System.out.println("扫描失败"); //
21、 showScan(datas); break; } }else{ System.out.println("商品不存在!"); break; } }while(true); break; case 2: //修改数量的方法 //判断购买列表是否为空 if(cb.result().getFlag().equals(SysConstans.SYS_ERROR)){ System.out.println("购买列表中还没有购买物品!");
22、 continue; } //循环操作数据 do{ //提示用户输入要修改的编号,并判断购买列表中是否存在此编号 System.out.println("请输入要修改的商品编号:"); String changeid=input.next(); Datas datas=new Datas(); //调用方法判断是否存在商品编号 if(hasid(changeid)){ //存在,提示修改数量 System.out.println("请输入修改后的数量")
23、 int changenum=input.nextInt(); if(changenum>1){ datas=cb.ChangeCount(changeid,changenum); if(datas.getFlag().equals(SysConstans.SYS_LACK)){ System.out.println("数量不足,请确认!"); showGood(cb.Find(changeid)); continue; }else{ Syste
24、m.out.println("修改成功!"); showScan(cb.result()); break; } }else{ System.out.println("购买数量必须大于0!"); break; } } //如果包含,提示修改数量 System.out.println("购买列表中无此商品,请核实"); continue; }while(true); break; case 3:
25、 //调用结账方法 creatOver(); break; case 4: //退出 System.out.println("收银员退出系统成功!"); System.exit(0); default: //错误提示 System.out.println("输入有问题,请重新输入:"); } } } /** * 打印商品列表的方法,参数是Datas类型,无返回值 * 经过调用客户端业务类的方法得到返回值,打印商品列表 * @param datas
26、 */ //打印商品列表 private static void showList(Datas datas){ System.out.println("------------------------------------------------------------------------------------------------"); System.out.println("商品编号\t\t商品名称\t\t\t\t商品单价\t\t单位\t\t数量"); for(Goods good:datas.getGoodslist()){ Syste
27、m.out.println(good.getGoodid()+"\t\t"+good.getGoodname()+"\t\t"+good.getGoodprice()+"\t\t"+good.getGoodunit()+"\t\t"+good.getGoodcount()); } System.out.println("------------------------------------------------------------------------------------------------"); } /** * 按编号查询商品的方法.得到返
28、回值,直接打印返回值中的商品 * @param datas */ //打印单个商品 private static void showGood(Datas datas){ System.out.println("------------------------------------------------------------------------------------------------"); System.out.println("商品编号\t\t商品名称\t\t\t\t商品单价\t\t单位\t\t数量"); System.out.print
29、ln(datas.getGood().getGoodid()+"\t\t"+datas.getGood().getGoodname()+"\t\t" +datas.getGood().getGoodprice()+"\t\t"+datas.getGood().getGoodunit()+"\t\t"+datas.getGood().getGoodcount()); System.out.println("----------------------------------------------------------------------------------------
30、");
}
/**
* 收银员菜单中的扫描商品的方法后打印扫描商品列表的方法
*
* @param datas
*/
//打印扫描商品列表
private static void showScan(Datas datas){
if(datas.getFlag().equals(SysConstans.SYS_SUCCESS)){
//定义列表接收扫描后的购买列表
ArrayList
31、rintln("商品编号\t商品名称\t\t\t\t数量\t\t单价\t\t金额"); System.out.println("------------------------------------------------------------------------------------------------"); for(Goods good:scanlist){ System.out.println(good.getGoodid()+"\t"+good.getGoodname()+"\t\t"+good.getGoodcount()+"\t\t"+goo
32、d.getGoodprice()+"\t\t"+ (good.getGoodprice()*good.getGoodcount())); } System.out.println("------------------------------------------------------------------------------------------------"); } } /** * 查询购买列表中是否存在要修改数量的商品 * 参数为商品编号,如果存在,返回true.不存在则返回false * @param id
33、 * @return */ //查询购买列表中是否存在要修改数量商品的编号 private static boolean hasid(String id){ Datas datas=new Datas(); datas.setBuylist(cb.result().getBuylist()); for(Goods good:datas.getBuylist()){ if(good.getGoodid().equals(id)){ return true; } } return false; } /**
34、 * 结账方法,分为普通结账和会员结账 * 普通结账和会员结账,分别调用普通结账方法和会员结账方法 */ //结账方法 private static void creatOver() { //首先打印购买列表,算出总金额.调用普通结账,或vip结账 double money=sum(cb.result()); // System.out.println("您的消费金额是:"+money); //提示选择结账方法 if(money!=0){ System.out.println("请选择结账方法:"); System.out.p
35、rintln("1.普通结账\t2.会员结账");
int choice=input.nextInt();
if(choice==1){
//普通会员结账方法
System.out.println("您的消费金额是:"+money);
do{
System.out.println("请输入金额:");
int pay=input.nextInt();
if(pay<0){
System.out.println("请输入正确金额!");
}else if(pay 36、 System.out.println("金额不足,请确认!");
}else if(pay>=money){
// System.out.println();
//结账成功.调用结账方法,打印小票,并跳出结账.
Over(money, pay);
break;
}else{
System.out.println("请输入正确格式:");
}
}while(true);
}else if(choice==2){
//vip会员结账方法,会员卡号 .
S 37、ystem.out.println("您的消费金额是:"+money);
System.out.print("请输入您的会员卡号:");
do{
int vip = input.nextInt();
if(vip== ){
System.out.print("会员卡号正确,请输入您要支付的金额:");
int vippay=input.nextInt();
if(vippay>0){
if(vippay>money){
//金额足够时调用vip结账方法
38、 VipOver(money, vippay);
break;
}else{
System.out.println("付款金额不足");
}
}else{
System.out.println("付款金额必须大于0!");
}
}else{
System.out.println("您的会员卡号不正确:");
}
}while(true);
}else{
System.out.println("无此结账方 39、法");
}
}else {
System.out.println("您还没有扫描商品");
}
}
/**
* 结账时用到的计算购买金额的方法,如果buylist不为空,则返回购买金额.否则返回0.
*
* @param result
* @return
*/
//算出购买总金额的方法
private static double sum(Datas result){
//首先判断购买列表是否为空,不为空则算出购买金额
if(cb.result().getFlag().equals(SysC 40、onstans.SYS_SUCCESS)){
ArrayList 41、ListCount(Datas result){
if(cb.result().getFlag().equals(SysConstans.SYS_SUCCESS)){
ArrayList 42、
}
}
/**
* 普通结账方法.返回结账视图,并清空购买菜单
* @param money
* @param pay
*/
//普通用户结账的方法
private static void Over(double money,int pay){
//首先打印,小票的表头
System.out.println("***************************************************************************************************");
43、System.out.println("\t\t\t\t青鸟超市");
System.out.println("收银员:1001\t小票号:" + ticket());
//显示购买列表
showbuylist();
//显示购买金额和购买的数量,结账提示
System.out.println("总数量:" + sumBuyListCount(cb.result())+ "\t\t\t应收: " + money);
System.out.println("实收: " + pay + "\t\t找零: " + (pay-money));
System.o 44、ut.println(Date());
System.out.println("此小票是您退换货及核对积分的凭证,请妥善保存!");
System.out.println("***************************************************************************************************");
//购买列表清空
cb.clear();
}
/**
* Vip会员结账方法.返回结账视图,累计会员积分,并清空购买菜单
* @param money
* @pa 45、ram pay
*/
//vip用户结账方法
private static void VipOver(double money,int vippay){
//首先打印,小票的表头
System.out.println("***************************************************************************************************");
System.out.println("\t\t\t\t青鸟超市");
System.out.println("收银员:1001\t小票 46、号:" + ticket());
//显示购买列表
showbuylist();
//显示购买金额和购买的数量,结账提示
System.out.println("总数量:" +sumBuyListCount(cb.result()) + "\t\t\t应收: " + money);
System.out.println("实收: " + vippay + "\t\t找零: " + (vippay-money));
//Vip积分提示
System.out.println("本次累计积分成功\t\t卡号: ");
System.out.printl 47、n("消费前积分 + 本次消费积分 = 消费后积分");
System.out.println( +"+"+(int)money+"="+( +(int)money));
System.out.println(Date());
System.out.println("此小票是您退换货及核对积分的凭证,请妥善保存!");
System.out.println("***************************************************************************************************");
48、 //购买列表清空
cb.clear();
}
/**
* 打印购买菜单的方法.
*/
//打印购买列表的方法
private static void showbuylist(){
ArrayList 49、");
for(int i=0;i 50、st.get(i).getGoodcount()*buylist.get(i).getGoodprice());
}
System.out.println("------------------------------------------------------------------------------------------------");
}
/**
* 得到日期的方法,在结账时显示日期用
* @return
*/
//显示日期的方法
private static String Date(){
Date date=new Da






