北大青鸟第一单元超市收银管理系统(版)_超市收银管理系统设计

其他范文 时间:2020-02-29 02:20:24 收藏本文下载本文
【www.daodoc.com - 其他范文】

北大青鸟第一单元超市收银管理系统(版)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“超市收银管理系统设计”。

包结构

四个包,九个类,一个资源文件

客户端类

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;import com.supermarket.Tools.SysConstans;import com.supermarket.entity.Goods;

public cla Client {

//定义扫描器,用于键盘输入

public static Scanner input=new Scanner(System.in);//创建客户端业务类对象,调用方法

public static ClientB cb=new ClientB();public static void main(String[] args){ do{

System.out.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”)){ //退出

System.exit(0);} else{ //输入有误,报错

System.out.println(“无此选项!”);} }while(true);System.out.println(“***********谢谢使用青鸟超市系统*************”);

} /**

* 登录视图

* 通过输入的用户名与密码验证用户身份,管理员则进入管理界面,收银员则进入收银界面,都不是则提示错误,并重新进行输入

*/

public static void createLoginView(){ do { //提示登录信息

System.out.println(“请输入用户名:”);String name = input.next();System.out.println(“请输入密码:”);String paword = input.next();//调用客户端登录方法,接收返回值,判断登录者的身份 Datas datas = cb.doLogin(name, paword);//判断是管理员还是收银员

if(datas.getFlag().equals(SysConstans.SYS_ADMIN)){

createAdminView();

break;

} else if

(datas.getFlag().equals(SysConstans.SYS_CASHIER)){

createCashierView();

break;

} else { System.out.println(“用户名或密码有误,请重新输入”);

}

} while(true);}

/**

* 管理员菜单 * 实现管理员功能:

* 1.商品入库 2.商品出库 3.新增商品 4.查询全部商品 5.按编号查询商品 6.退出

*/

private static void createAdminView(){

//循环操作 // 管理员菜单

System.out.println(“管理员登录成功,进入管理员界面”);do{

System.out.println(“***********欢迎进入青鸟超市库存管理系统*************”);System.out.println(“1.商品入库t2.商品出库t3.新增商品t4.查询全部商品t5.按序号查询商品t6.退出”);

//提示用户选择

System.out.println(“请输入您的选择”);int choice=input.nextInt();switch(choice){ //商品入库,调入库方法 case 1:

//提示输入要入库的编号

System.out.println(“请输入入库商品编号:”);//定义变量接收输入的编号

String goodnum=input.next();//调用方法判断库存中是否有要入库的商品

if(cb.Find(goodnum).getFlag().equals(SysConstans.SYS_SUCCESS)){

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{

System.out.println(“入库数量必须大于0”);

} }else{ System.out.println(“无此商品,请选择3新增”);} break;//商品出库,调出库方法

case 2: do{

//提示输入出库商品编号

System.out.println(“请选择出库商品编号:”);//定义变量接收编号

String goodid=input.next();//先查询是否由此商品

if(cb.Find(goodid).getFlag().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(datas);break;}else{

System.out.println(“出库成功!”);

showList(datas);

break;

} }else{ }

System.out.println(“出库数量必须大于0!”);

}else{ System.out.println(“库存中无此商品,请选择3新增”);

break;} }while(true);break;case 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(“请输入商品名称:”);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,unit,count);

//把要新增的商品通过调用方法传给业务类,并接收返回值 Datas datas=cb.Add(good);System.out.println(“新增商品成功!”);//打印商品列表

showList(cb.FindAll());

break;} }while(true);break;//查询全部商品的方法 case 4: //查询商品,调用showList方法参数为Datas类型,是FindAll传回来的 showList(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)){

showGood(datas);

}else{

System.out.println(“没有此商品”);} break;case 6: //退出

System.out.println(“管理员退出成功!”);System.exit(0);default :

//提示无此选项

System.out.println(“无此选项,请重新输入:”);

} }while(true);} /**

* 收银员管理界面.* 实现收银员的功能:

* 1.扫描商品 2.修改购买商品的数量

*/

//收银员管理界面

private static void createCashierView(){

//循环操作收银界面 while(true){ System.out.println(“收银员登录成功,进入收银员界面”);System.out.println(“***********欢迎进入青鸟超市收银

3.结账

4.退出

管理系统*************”);System.out.println(“1.扫描商品t2.修改数量t3.结账t4.退出”);

//提示用户输入操作选项

System.out.println(“请输入您的选择:”);int choice=input.nextInt();switch(choice){ case 1:

//调用扫描方法 do{ //提示输入扫描编号

System.out.println(“请输入要扫描的商品编号:”);

String scannum=input.next();//如果查询到编号,说明商品存在,否则商品不存在if(cb.Find(scannum).getFlag().equals(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(“扫描失败”);//

showScan(datas);

break;} }else{

System.out.println(“商品不存在!”);

break;

} }while(true);

break;case 2: //修改数量的方法 //判断购买列表是否为空

if(cb.result().getFlag().equals(SysConstans.SYS_ERROR)){ System.out.println(“购买列表中还没有购买物品!”);

continue;}

//循环操作数据 do{ //提示用户输入要修改的编号,并判断购买列表中是否存在此编号

System.out.println(“请输入要修改的商品编号:”);String changeid=input.next();Datas datas=new Datas();//调用方法判断是否存在商品编号 if(hasid(changeid)){

//存在,提示修改数量

System.out.println(“请输入修改后的数量”);

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{

System.out.println(“修改成功!”);

showScan(cb.result());

break;}

}else{

System.out.println(“购买数量必须大于0!”);

break;} } //如果包含,提示修改数量

System.out.println(“购买列表中无此商品,请核实”);

continue;}while(true);break;case 3: //调用结账方法

creatOver();break;case 4: //退出

System.out.println(“收银员退出系统成功!”);System.exit(0);default: //错误提示 System.out.println(“输入有问题,请重新输入:”);

}

}

} /**

* 打印商品列表的方法,参数是Datas类型,无返回值 * 通过调用客户端业务类的方法得到返回值,打印商品列表 * @param datas */ //打印商品列表

private static void showList(Datas datas){

System.out.println(“---”);System.out.println(“商品编号tt商品名称tttt商品单价tt单位tt数量”);

for(Goods good:datas.getGoodslist()){

System.out.println(good.getGoodid()+“tt”+good.getGoodname()+“tt”+good.getGoodprice()+“tt”+good.getGoodunit()+“tt”+good.getGoodcount());

}

System.out.println(“---”);

} /**

* 按编号查询商品的方法.得到返回值,直接打印返回值中的商品 * @param datas */

//打印单个商品

private static void showGood(Datas datas){

System.out.println(“---”);System.out.println(“商品编号tt商品名称tttt商品单价tt单位tt数量”);

System.out.println(datas.getGood().getGoodid()+“tt”+datas.getGood().getGoodname()+“tt”

+datas.getGood().getGoodprice()+“tt”+datas.getGood().getGoodunit()+“tt”+datas.getGood().getGoodcount());

System.out.println(“---”);

} /**

* 收银员菜单中的扫描商品的方法后打印扫描商品列表的方法 *

* @param datas */

//打印扫描商品列表

private static void showScan(Datas datas){ if(datas.getFlag().equals(SysConstans.SYS_SUCCESS)){

//定义列表接收扫描后的购买列表

ArrayList scanlist=datas.getBuylist();//输出商品列表

System.out.println(“商品编号t商品名称tttt数量tt单价tt金额”);

System.out.println(“---”);

for(Goods good:scanlist){

System.out.println(good.getGoodid()+“t”+good.getGoodname()+“tt”+good.getGoodcount()+“tt”+good.getGoodprice()+“tt”+

(good.getGoodprice()*good.getGoodcount()));

}

System.out.println(“---”);

} } /**

* 查询购买列表中是否存在要修改数量的商品

* 参数为商品编号,如果存在,返回true.不存在则返回false * @param id * @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;} /**

* 结账方法,分为普通结账和会员结账

* 普通结账和会员结账,分别调用普通结账方法和会员结账方法 */ //结账方法

private static void creatOver(){ //首先打印购买列表,算出总金额.调用普通结账,或vip结账 double money=sum(cb.result());System.out.println(“您的消费金额是:”+money);//提示选择结账方法 if(money!=0){

System.out.println(“请选择结账方法:”);System.out.println(“1.普通结账t2.会员结账”);int choice=input.nextInt();if(choice==1){

//普通会员结账方法

System.out.println(“您的消费金额是:”+money);do{

System.out.println(“请输入金额:”);int pay=input.nextInt();if(pay

System.out.println(“请输入正确金额!”);//

}else if(pay

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会员结账方法,会员卡号2011.System.out.println(“您的消费金额是:”+money);System.out.print(“请输入您的会员卡号:”);do{ int vip = input.nextInt();if(vip==2013){

System.out.print(“会员卡号正确,请输入您要支付的金额:”);

int vippay=input.nextInt();if(vippay>0){

if(vippay>money){

//金额足够时调用vip结账方法

VipOver(money, vippay);break;}else{

System.out.println(“付款金额不足”);

} }else{

System.out.println(“付款金额必须大于0!”);

} }else{

System.out.println(“您的会员卡号不正确:”);} }while(true);}else{ System.out.println(“无此结账方法”);} }else { System.out.println(“您还没有扫描商品”);}

} /**

* 结账时用到的计算购买金额的方法,如果buylist不为空,则返回购买金额.否则返回0.*

* @param result * @return */

//算出购买总金额的方法

private static double sum(Datas result){ //首先判断购买列表是否为空,不为空则算出购买金额

if(cb.result().getFlag().equals(SysConstans.SYS_SUCCESS)){

ArrayList list=cb.result().getBuylist();

double sum=0;//购买总额

for(int i=0;i

sum+=list.get(i).getGoodprice()*list.get(i).getGoodcount();

}

} return sum;}else

return 0;

//计算购买数量的方法

private static int sumBuyListCount(Datas result){

if(cb.result().getFlag().equals(SysConstans.SYS_SUCCESS)){

ArrayList list=cb.result().getBuylist();

int goodscount=0;

for(int i=0;i

goodscount+=list.get(i).getGoodcount();

}

return goodscount;

}else{

return 0;

}

} /**

* 普通结账方法.返回结账视图,并清空购买菜单 * @param money * @param pay */

//普通用户结账的方法

private static void Over(double money,int pay){ //首先打印,小票的表头

System.out.println(“***************************************************************************************************”);

System.out.println(“tttt青鸟超市”);System.out.println(“收银员:1001t小票号:” + ticket());//显示购买列表

showbuylist();//显示购买金额和购买的数量,结账提示 System.out.println(“总数量:” + sumBuyListCount(cb.result())+ “ttt应收: ” + money);System.out.println(“实收: ” + pay + “tt找零: ” +(pay-money));

System.out.println(Date());System.out.println(“此小票是您退换货及核对积分的凭证,请妥善保存!”);

System.out.println(“***************************************************************************************************”);

//购买列表清空

cb.clear();} /**

* Vip会员结账方法.返回结账视图,累计会员积分,并清空购买菜单 * @param money * @param pay */

//vip用户结账方法

private static void VipOver(double money,int vippay){ //首先打印,小票的表头

System.out.println(“***************************************************************************************************”);

System.out.println(“tttt青鸟超市”);System.out.println(“收银员:1001t小票号:” + ticket());//显示购买列表

showbuylist();//显示购买金额和购买的数量,结账提示 System.out.println(“总数量:”

+sumBuyListCount(cb.result())+ “ttt应收: ” + money);System.out.println(“实收: ” + vippay + “tt找零: ” +(vippay-money));

//Vip积分提示

System.out.println(“本次累计积分成功tt卡号:2011”);System.out.println(“消费前积分 + 本次消费积分 = 消费后积分”);

System.out.println(2000+“+”+(int)money+“=”+(2000+(int)money));

System.out.println(Date());System.out.println(“此小票是您退换货及核对积分的凭证,请妥善保存!”);

System.out.println(“***************************************************************************************************”);

//购买列表清空

cb.clear();} /**

* 打印购买菜单的方法.*/

//打印购买列表的方法

private static void showbuylist(){ ArrayList buylist=cb.result().getBuylist();System.out.println(“序tt商品名称(单位)tttt数量

tt单价tt金额”);

System.out.println(“---”);

for(int i=0;i

System.out.println((i+1)+“tt(”+buylist.get(i).getGoodid()+“)”+buylist.get(i).getGoodname()+buylist.get(i).getGoodunit()+“ttt”+buylist.get(i).getGoodcount()+“tt”+buylist.get(i).getGoodprice()+“tt”+buylist.get(i).getGoodcount()*buylist.get(i).getGoodprice());

}

System.out.println(“---”);} /**

* 得到日期的方法,在结账时显示日期用 * @return */

//显示日期的方法

private static String Date(){

Date date=new Date();

SimpleDateFormat sdf=new

SimpleDateFormat(“yyyy/MM/dd/ hh:mm:”);

String paydate= sdf.format(date);

return paydate;} /**

* 得到小票号的方法.日期+(1-1000)的随机数 * @return */

//打印票据的方法

private static String ticket(){

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddhhmm”);

String ticket = sdf.format(date)+(int)(Math.random()* 1000);

return ticket;} }

客户端业务类

package com.supermarket.Client;/**

* 客户端业务类.* 功能:客户端调用业务类的方法,实现和服务器端的数据交互 */

import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.Socket;import java.net.UnknownHostException;

import com.supermarket.Tools.Datas;import com.supermarket.Tools.SysConstans;import com.supermarket.Tools.Tools;import com.supermarket.entity.Goods;import com.supermarket.entity.User;

public cla ClientB {

//创建Socket实例 Socket socket=null;//创建输入输出流

ObjectOutputStream oos=null;ObjectInputStream ois=null;/**

* 初始化输入输出流的方法,每次调用方法时都要初始化 输入输出流 */

//初始化流的方法

public void initSocket(){ try {//socket=new Socket(localhost,8888)

socket=new

Socket(Tools.getVlaue(SysConstans.SYS_HOSTNAME),Integer.parseInt(Tools.getVlaue(SysConstans.SYS_LISTENERPORT)));//获得输入输出流

oos=new

ObjectOutputStream(socket.getOutputStream());

ois=new

ObjectInputStream(socket.getInputStream());

} catch(NumberFormatException e){

// TODO 自动生成的 catch 块

e.printStackTrace();} catch(UnknownHostException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} catch(IOException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} } /**

* 关闭输入输出流的方法.* 每次调用方法之后都要关闭输入输出流 */

public void closeSocket(){

//关闭流的方法

try {

oos.close();ois.close();socket.close();} catch(IOException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}

} /**

* 客户端登录方法.* 接收客户端发送参数,发送到服务器端验证,并接收服务器端返回的数据信息

* @param name

* @param paword

* @return

*/

//登录方法

public Datas doLogin(String name, String paword){

initSocket();

User user=new User();

user.setUsername(name);

user.setPaword(paword);

Datas datas=new Datas();

datas.setFlag(SysConstans.SYS_LOGIN);

datas.setUser(user);

//写入流

try {

oos.writeObject(datas);

//接收服务器返回值

datas=(Datas)ois.readObject();

return datas;

} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();

}

finally{

closeSocket();

}

return null;} /**

* 客户端查询全部商品的方法

* @return */

//查询全部商品的方法

public Datas FindAll(){ initSocket();Datas datas=new Datas();datas.setFlag(SysConstans.SYS_FINDALL);try {

oos.writeObject(datas);

datas=(Datas)ois.readObject();

return datas;} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}finally{

closeSocket();} return null;} /**

* 客户端实现按编号查询商品的方法 * 功能:接收编号,到服务器查询,接收返回值 * @param goodid * @return */

//按编号查询商品的方法

public Datas Find(String goodid){ initSocket();Goods good=new Goods();good.setGoodid(goodid);Datas datas=new Datas();datas.setFlag(SysConstans.SYS_FIND);datas.setGood(good);try {

oos.writeObject(datas);

datas=(Datas)ois.readObject();return datas;} catch(IOException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} finally{

closeSocket();} return null;} /**

* 客户端管理员实现入库商品的方法 * @param goodid * @param count * @return */ //入库方法

public Datas RuKu(String goodid,int count){ initSocket();Goods good=new Goods();good.setGoodid(goodid);good.setGoodcount(count);Datas datas=new Datas();datas.setFlag(SysConstans.SYS_RUKU);datas.setGood(good);try {

oos.writeObject(datas);

datas=(Datas)ois.readObject();

return datas;} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} finally{

closeSocket();} return null;} /**

* 客户端管理员实现商品出库的方法

* @param goodid * @param count * @return */

public Datas ChuKu(String goodid, int count){ initSocket();// 接收参数

Goods good=new Goods();good.setGoodid(goodid);good.setGoodcount(count);Datas datas=new Datas();datas.setFlag(SysConstans.SYS_CHUKU);datas.setGood(good);try {

oos.writeObject(datas);

datas =(Datas)ois.readObject();

return datas;} catch(IOException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}finally{

closeSocket();} return null;} /**

* 客户端管理员实现商品新增的方法

* @param good * @return */

//新增商品方法

public Datas Add(Goods good){ initSocket();Datas datas=new Datas();datas.setFlag(SysConstans.SYS_ADD);datas.setGood(good);try {

oos.writeObject(datas);

datas=(Datas)ois.readObject();} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}finally{

closeSocket();} return null;} /**

* 客户端收银员实现扫描商品的方法 * @param scannum * @return */ //扫描方法

public Datas scan(String scannum){

// TODO 自动生成的方法存根

initSocket();Goods good=new Goods();good.setGoodid(scannum);Datas datas=new Datas();datas.setGood(good);datas.setFlag(SysConstans.SYS_SCAN);try {

oos.writeObject(datas);datas =(Datas)ois.readObject();return datas;} catch(IOException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}finally{

closeSocket();}

return null;} /**

* 客户端收银员实现结账时返回购买列表的方法 * @return */

//结账方法.返回购买列表

public Datas result(){ initSocket();Datas datas=new Datas();datas.setFlag(SysConstans.SYS_RESULT);try {

oos.writeObject(datas);

datas=(Datas)ois.readObject();

return datas;} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}finally{ closeSocket();}

{

return null;

} /**

* 客户端收银员实现修改数量的方法 * @param changeid * @param changenum * @return */

//收银员,修改数量的方法

public Datas ChangeCount(String changeid, int changenum)

initSocket();Goods good=new Goods();good.setGoodid(changeid);good.setGoodcount(changenum);Datas datas=new Datas();datas.setFlag(SysConstans.SYS_UPDATA);datas.setGood(good);try { oos.writeObject(datas);datas=(Datas)ois.readObject();return datas;} catch(IOException e){ // TODO 自动生成的 catch 块

e.printStackTrace();} catch(ClaNotFoundException e){ // TODO 自动生成的 catch 块

e.printStackTrace();}finally{

closeSocket();} return null;

} /**

* 客户端收银员实现清空购买列表的方法 * @return */

public Datas clear(){

// TODO 自动生成的方法存根

initSocket();Datas datas=new Datas();datas.setFlag(SysConstans.SYS_CLEAR);try { oos.writeObject(datas);datas=(Datas)ois.readObject();

return datas;

} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch(ClaNotFoundException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

}finally{

closeSocket();

}

return null;

} }

商品类

package com.supermarket.entity;/** * 商品类

* 实现序列化

* 属性:String goodid商品编号

*

String goodname商品名称

*

String goodprice商品单价

*

String goodunit商品单位

*

String goodcount商品库存(数量)* 商品属性和Set/Get方法

* 有参和无参的构造方法

*/ import java.io.Serializable;

public cla Goods implements Serializable { private String goodid;//商品编号

private String goodname;//商品名称

private double goodprice;//商品单价

private String goodunit;//商品单位

private int goodcount;//商品数量

//商品无参数构造方法

public Goods(){

} //商品有参数构造方法

public Goods(String goodid,String goodname,double goodcount){

this.goodid=goodid;

this.goodname=goodname;

this.goodprice=goodprice;

this.goodunit=goodunit;

this.goodcount=goodcount;

} public String getGoodid(){

return goodid;} public void setGoodid(String goodid){

this.goodid = goodid;} public String getGoodname(){

return goodname;} public void setGoodname(String goodname){

this.goodname = goodname;} public double getGoodprice(){

return goodprice;} public void setGoodprice(double goodprice){

if(goodprice>0){

this.goodprice = goodprice;

}

else{

System.out.println(“价格必须大于0”);

} } public String getGoodunit(){

return goodunit;} public void setGoodunit(String goodunit){

goodprice,String goodunit,int

this.goodunit = goodunit;} public int getGoodcount(){

return goodcount;} public void setGoodcount(int goodcount){

this.goodcount = goodcount;

}

}

用户类

package com.supermarket.entity;/** * 用户类

* 实现序列化

* 属性:用户名和密码

* 方法:Set和Get方法

*/ import java.io.Serializable;

public cla User implements Serializable { private String username;//用户名

private String paword;//密码 /* public User(){

//无参数构造方法

} //有参数构造方法

public User(String username,String paword){

this.username=username;

this.paword=paword;}*/ //Set和Get方法

public String getUsername(){

return username;} public void setUsername(String username){

this.username = username;} public String getPaword(){

return paword;}

public void setPaword(String paword){

this.paword = paword;}

}

服务器类

package com.supermarket.Server;/** * 服务器

* 继承线程类,创建ServerService接口,监听客户端请求

* 判断客户端传递的标识,通过标识调用服务端业务类操作数据的方法,并给与客户端响应

*/ import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;

import com.supermarket.Tools.Datas;import com.supermarket.Tools.SysConstans;import com.supermarket.Tools.Tools;

public cla ServerListener extends Thread{ public static void main(String[] args){

// TODO 自动生成的方法存根

new ServerListener().start();} @Override public void run(){

//服务器启动

System.out.println(“服务器启动”);

//创建ServerSocket,Socket服务器socket初始化

ServerSocket serversocket = null;

Socket socket =null;

ObjectOutputStream oos =null;

ObjectInputStream ois= null;

try {//实例化ServerSocketsocket 端口号8888

serversocket =new ServerSocket(Integer.parseInt(Tools.getVlaue(SysConstans.SYS_LISTENERPORT)));

//死循环监听请求

while(true){

socket=serversocket.accept();

oos=new ObjectOutputStream(socket.getOutputStream());

} ois = new ObjectInputStream(socket.getInputStream());//接受客户请求的对象

Datas datas =(Datas)ois.readObject();String flag = datas.getFlag();//创建服务器服务类的对象

ServerService =new ServerService();//判断客户端传过来的标识是想调用什么方法

if(datas.getFlag().equals(SysConstans.SYS_LOGIN)){ datas=.doLogin(datas);}else if(flag.equals(SysConstans.SYS_ADD)){ datas =.add(datas);// 商品出库

} else if(flag.equals(SysConstans.SYS_CHUKU)){ datas =.down(datas);// 商品入库

} else if(flag.equals(SysConstans.SYS_RUKU)){ datas =.up(datas);// 编号查看

} else if(flag.equals(SysConstans.SYS_FIND)){ datas =.find(datas);// 查看所有

} else if(flag.equals(SysConstans.SYS_FINDALL)){ datas =.findAll(datas);// 扫描商品

} else if(flag.equals(SysConstans.SYS_SCAN)){ datas =.scan(datas);// 修改商品

} else if(flag.equals(SysConstans.SYS_UPDATA)){ datas =.upData(datas);// 商品结账

} else if(flag.equals(SysConstans.SYS_RESULT)){ datas =.result(datas);//商品清空

} else if(flag.equals(SysConstans.SYS_CLEAR)){ datas =.clear();}else{ datas.setFlag(SysConstans.SYS_ERROR);} //把datas作为返回值写入客户端 oos.writeObject(datas);oos.flush();socket.shutdownOutput();

} catch(NumberFormatException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch(ClaNotFoundException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

}finally{

//关闭流

try {

oos.close();

ois.close();

socket.close();

} catch(IOException e){

// TODO 自动生成的 catch 块

e.printStackTrace();

}

}

System.out.println(“服务器终止服务!”);} }

服务器业务类

package com.supermarket.Server;

import java.util.ArrayList;

import com.supermarket.Tools.Datas;import com.supermarket.Tools.SysConstans;import com.supermarket.entity.Goods;import com.supermarket.entity.User;/** * 服务业务类.* 用来初始化商品列表,创建管理员和收银员对象

* 存放服务器端调用的方法

* @author Administrator * */ public cla ServerService { /**

* 初始化管理员对象和收银员对象

* 管理员对象:用户名:admin 密码:admin

* 收银员对象:用户名:user 密码:user

* 初始化商品列表和购买列表

*/ private static User stockman;//库管对象

private static User cashier;//收银对象

private static ArrayList goodslist=new ArrayList();//商品列表

private static ArrayList buylist=new ArrayList();//购买列表

static{

//初始化库管和收银

stockman=new User();

stockman.setUsername(“1101”);

stockman.setPaword(“1111”);

cashier=new User();

cashier.setUsername(“1001”);

cashier.setPaword(“0000”);

//初始化商品列表

goodslist=new ArrayList();

goodslist.add(new Goods(“1001”, “吉百芝麻油 t”,9.5,“125ml”,200));

goodslist.add(new Goods(“1002”, “雀巢奶香咖啡t”,1.5,“13g”,200));

goodslist.add(new Goods(“1003”, “脉动水蜜桃 t”,7.0,“1.5l”,500));

goodslist.add(new Goods(“1004”, “旺仔苹果Q糖t”,2.5,“70g”,700));

goodslist.add(new Goods(“1005”, “桃李熟切片 t”,6.5,“400g”,150));

goodslist.add(new Goods(“1006”, “白玉黄豆芽 t”,2.4,“350g”,200));

goodslist.add(new Goods(“1007”, “白如内酯豆腐t”,1.0,“400g”,100));} /**

* 登录方法验证客户端传过来的信息,判断登录人员身份

* 管理员,返回管理员标识

* 收银员,返回收银员标识

* 都不是则返回错误标识

* @param datas

* @return

*/ //登录方法.验证是管理员还是收银员登录,如果错误,返回错误标识

public Datas doLogin(Datas datas){

if(datas.getUser().getUsername().equals(stockman.getUsername())&&datas.getUser().getPaword().equals(stockman.getPaword())){

datas.setFlag(SysConstans.SYS_ADMIN);

}else if(datas.getUser().getUsername().equals(cashier.getUsername())&&datas.getUser().getPaword().equals(cashier.getPaword())){

datas.setFlag(SysConstans.SYS_CASHIER);

}else{

datas.setFlag(SysConstans.SYS_ERROR);

}

return datas;

} /**

* 仓库管理员的方法

*/ /**

* 管理员新增商品的方法,* @param datas

* @return

*/ //新增商品

public Datas add(Datas datas){

// TODO 自动生成的方法存根

goodslist.add(datas.getGood());

datas.setFlag(SysConstans.SYS_SUCCESS);// datas.setGoodslist(goodslist);

return datas;} /**

* 管理员商品出库的方法

* 判断商品列表中是否存在,如果存在判断库存是否充足,充足,返回成功标识,并操作商品列表中的数量

* 如果库存不充足,返回缺货标识

* 如果商品列表中没有此商品,返回失败标识

* @param datas

* @return

*/ //出库方法

public Datas down(Datas datas){

// TODO 自动生成的方法存根

for(int i=0;i

if(goodslist.get(i).getGoodid().equals(datas.getGood().getGoodid())){

if(goodslist.get(i).getGoodcount()>=datas.getGood().getGoodcount()){

goodslist.get(i).setGoodcount(goodslist.get(i).getGoodcount()-datas.getGood().getGoodcount());

datas.setGoodslist(goodslist);

datas.setFlag(SysConstans.SYS_SUCCESS);

return datas;

}else{

datas.setFlag(SysConstans.SYS_LACK);

return datas;

}

}

}

datas.setFlag(SysConstans.SYS_ERROR);

return datas;} /**

* 管理员商品入库方法

* 在商品列表中查询到商品的位置,并修改数量

* @param datas

* @return

*/ //入库的方法

public Datas up(Datas datas){

// TODO 自动生成的方法存根

for(int i=0;i

if(goodslist.get(i).getGoodid().equals(datas.getGood().getGoodid())){

goodslist.get(i).setGoodcount(goodslist.get(i).getGoodcount()+datas.getGood().getGoodcount());

datas.setGoodslist(goodslist);

datas.setFlag(SysConstans.SYS_SUCCESS);

return datas;

}

}

return null;} /**

* 管理员按编号查找商品的方法

* 查询到返回成功标识

* 否则返回错误标识

* @param datas

* @return

*/ //按编号查找商品

public Datas find(Datas datas){

// TODO 自动生成的方法存根

for(int i=0;i

if(goodslist.get(i).getGoodid().equals(datas.getGood().getGoodid())){

datas.setFlag(SysConstans.SYS_SUCCESS);

datas.setGood(goodslist.get(i));

return datas;

}

}

datas.setFlag(SysConstans.SYS_ERROR);

return datas;} /**

* 管理员查询全部商品的方法

* @param datas

* @return

*/ //查询全部商品列表的方法

public Datas findAll(Datas datas){

//设置标识为succe,并设置商品列表.返回datas数据

datas.setFlag(SysConstans.SYS_SUCCESS);

datas.setGoodslist(goodslist);

return datas;} /**

* 收银员调用的方法

* @param datas

* @return

*/ /**

* 管理员扫描商品的方法

* 首先查询购买列表中是否存在扫描的商品,如果没有则从商品列表中找到,修改数量后添加到购买列表

* 如果购买列表中存在扫描商品,则数量加1,商品列表中相对应的商品数量-1;

* @param datas

* @return

*/ //管理员扫描商品的方法

public Datas scan(Datas datas){

// TODO 自动生成的方法存根

for(int i=0;i

//如果购买列表中存在商品说明已经扫描过了,数量加一并返回,商品列表中数量-1

if(buylist.get(i).getGoodid().equals(datas.getGood().getGoodid())){

buylist.get(i).setGoodcount(buylist.get(i).getGoodcount()+1);

datas.setFlag(SysConstans.SYS_SUCCESS);

datas.setBuylist(buylist);

goodslist.get(i).setGoodcount(goodslist.get(i).getGoodcount()-1);//

datas.setBuylist(buylist);

return datas;

}

}

//遍历之后如果没有,说明商品还没有扫描,在商品列表中扫描,并加入到购买列表

for(int j=0;j

//如果编号正确,判断数量

if(goodslist.get(j).getGoodid().equals(datas.getGood().getGoodid())){

if(goodslist.get(j).getGoodcount()>0){

//如果商品数量大于1,则扫描成功,把扫描的商品加入购买列表,把商品列表中的数量-1,返回datas.Goods good=new Goods();

good.setGoodid(goodslist.get(j).getGoodid());

good.setGoodname(goodslist.get(j).getGoodname());

good.setGoodprice(goodslist.get(j).getGoodprice());

good.setGoodunit(goodslist.get(j).getGoodunit());

good.setGoodcount(1);

buylist.add(good);

datas.setFlag(SysConstans.SYS_SUCCESS);

datas.setBuylist(buylist);

goodslist.get(j).setGoodcount(goodslist.get(j).getGoodcount()-1);

return datas;

}else{

datas.setFlag(SysConstans.SYS_LACK);

return datas;

}

}

}

datas.setFlag(SysConstans.SYS_ERROR);

return datas;} /**

* 收银员修改商品数量的方法

* 首先在商品列表中找到商品,判断数量是否足够,够则操作数量,返回成功标识

* 不够则返回缺乏标识

* 如果不存在则返回错误标识

* @param datas

* @return

*/ public Datas upData(Datas datas){

// 遍历购买列表得到购买商品id

for(int i=0;i

if(buylist.get(i).getGoodid().equals(datas.getGood().getGoodid())){//得到id判断库存数量是否足够

if(datas.getGood().getGoodcount()

buylist.get(i).setGoodcount(datas.getGood().getGoodcount());

goodslist.get(i).setGoodcount(goodslist.get(i).getGoodcount()+1-datas.getGood().getGoodcount());

datas.setFlag(SysConstans.SYS_SUCCESS);

datas.setBuylist(buylist);

return datas;

}

else{

datas.setFlag(SysConstans.SYS_LACK);

return datas;

}

}

}//遍历购买列表后没找到商品编号,返回错误标识

datas.setFlag(SysConstans.SYS_ERROR);

return datas;} /**

* 收银员返回购买列表的方法

* 如果购买列表不为空,返回列表和成功标识

* 如果为空,返回错误标识

* @param datas

* @return

*/ //产生购买列表用以查询

public Datas result(Datas datas){

// TODO 自动生成的方法存根

if(buylist.size()!= 0){

datas.setBuylist(buylist);

datas.setFlag(SysConstans.SYS_SUCCESS);

return datas;

}

datas.setFlag(SysConstans.SYS_ERROR);

return datas;} /**

* 收银员结账后清空购买列表的方法

* @return

*/ //结账后清空购买列表

public Datas clear(){

// TODO 自动生成的方法存根

buylist.clear();

Datas datas=new Datas();

return datas;} }

传递数据类

package com.supermarket.Tools;/** * 数据类.用来传递数据

* 属性:标识符 flag *

用户

user *

商品

good *

商品列表 goodslist *

购买列表 buylist * 方法:Set和Get方法

*/ import java.io.Serializable;import java.util.ArrayList;

import com.supermarket.entity.Goods;import com.supermarket.entity.User;

public cla Datas implements Serializable { private String flag;//传递对象

private User user;//传递用户

private Goods good;//传递商品

private ArrayList goodslist;//传递的商品列表

private ArrayList buylist;//结账列表

//Set和Get方法

public String getFlag(){

return flag;} public void setFlag(String flag){

this.flag = flag;} public User getUser(){

return user;} public void setUser(User user){

this.user = user;} public Goods getGood(){

return good;}

public void setGood(Goods good){

this.good = good;} public ArrayList getGoodslist(){

return goodslist;} public void setGoodslist(ArrayList goodslist){

this.goodslist = goodslist;} public ArrayList getBuylist(){

return buylist;} public void setBuylist(ArrayList buylist){

this.buylist = buylist;}

} 常量列表类

package com.supermarket.Tools;/**

* 常量列表类.用来存放常量

* @author Administrator * */

public cla SysConstans {

public static final String SYS_PROPERTYNAME =“sys.properties”;public static final String SYS_LISTENERPORT =“PORT”;public static final String SYS_HOSTNAME =“HOST”;public static final String SYS_SUCCESS =“SUCCESS”;public static final String SYS_ERROR =“ERROR”;public static final String SYS_LOGIN =“LOGIN”;//添加一个 管理员常量

public static final String SYS_ADMIN=“ADMIN”;//添加一个收银常量

public static final String SYS_CASHIER= “CASHIER”;;//查询商品

public static final String SYS_FIND =“FIND”;//查询所有

public static final String SYS_FINDALL =“FINDALL”;//添加一个入库常量

public static final String SYS_RUKU =“RUKU”;//添加一个出库常量

public static final String SYS_CHUKU =“CHUKU”;//添加一个添加常量

public static final String SYS_ADD=“ADD”;//商品扫描

public static final String SYS_SCAN=“SCAN”;//修改商品数量

public static final String SYS_UPDATA=“UPDATA”;

//删除商品

public static final String SYS_DELETE =“DELETE”;//商品结账

public static final String SYS_RESULT = “RESULL”;//商品清空

public static final String SYS_CLEAR = “CLEAR”;//库存缺乏

public static final String SYS_LACK = “LACK”;

}

工具类

package com.supermarket.Tools;/** * 工具类.用来调用常量

*/ import java.io.IOException;import java.util.Properties;public cla Tools { private static Properties p= new Properties();

//读取properties配置文件信息

static {

//加载资源文件

try {

p.load(Tools.cla.getClaLoader().getResourceAsStream(SysConstans.SYS_PROPERTYNAME));

} catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//通过关键字取值

public static String getVlaue(String key){

return p.getProperty(key);

} } 资源文件

HOST=localhost PORT=8888

下载北大青鸟第一单元超市收银管理系统(版)word格式文档
下载北大青鸟第一单元超市收银管理系统(版).doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文