超市收银员管理(通用6篇)
篇1:超市收银员管理
超市收银员管理手册
文章关键字:收银 作者:超市168 发布时间:2009-2-14
一、前言
自选式售货是超级市场的经营特色之一,顾客可以在超市内随意选购需要的商品,然后做一次总结付帐,在这种状态之下,收银作业显得格外重要,而成为超市作业中相当重要的一环。由于一般的超级市场,往往将入口和收银处设计在同一区,顾客一踏进超市商场,看到的第一个工作人员就是收银员,等到顾客选购商品完毕,最后来到的地方,还是收银员的服务区,因此收银员的工作除了执行各项收银业务之外,也是超市的门面亲善大使,收银员的一举一动,都代表了超市的形象。一次完善的服务是顾客再次光临的保证,但是一个小小的错误,也可能为超市带来立即的负面评价和影响。
事实上,收银作业不只是单纯的为顾客提供结帐的服务而已;收银员收取了顾客的钱款后,也并不代表整个超市销售就此结束,因为在整个收银作业的流程中,还包括了对顾客的礼仪态度和资讯的提供,现金作业的管理,促销活动的推广,损耗的预防,以及商场安全管理的配合等各项前置和后续的管理作业。因此,公司制定下列收银部门操作规范,以便加强收银作业的管理。
二、每日收银工作流程安排
1、营业前;
(1)清洁、整理收银台和收银作业区:包括收银台、收银机、收银柜台四周的地板、垃圾桶。
(2)补充必备的物品:包括购物袋(所有尺寸)、收银纸、必要的记录本及笔、干净抹布、钱袋、暂停结帐牌。
(3)整理补充收银台前头柜的商品,核对价目牌。
(4)准备好一定数量的备用金,包括各种面值的纸币与硬币。(5)检验收银机:包括:
收款机的大类键,数字键是否正确,日期是否正确; 机内的程序设定是否正确,各项统计数值是否归零。(6)收银员服装仪容的检查:包括: 制服是否整洁;
发型、仪容是否清爽整洁; 是否正确佩带工牌。
(7)熟记并确认当日特价商品,当日调价商品,促销活动以及重要商品所在位置及各大类商品位置。
2、营业中:
(1)主动招呼顾客;(2)为顾客做结帐服务;
(3)为顾客做商品入袋服务,同时将小票放入购物袋;(4)无顾客结帐时:
整理及补充收银台各项必备物品; 兑换零钱;
整理及补充收银台前头柜的商品; 整理孤儿商品擦拭收银柜台; 联系敲码,提高收银速度。
(5)处理顾客废弃小票,保持收银台及周围环境的清洁;(6)协助保卫人员做好通道安全工作;(7)顾客询问及抱怨处理;(8)收银员交接班工作。
3、营业后:
(1)整理作废的收银小票以及归零的储值卡;(2)结算营业总额;
(3)整理收银台及周围环境;
(4)正确关闭收银机及电源并盖上防尘罩;(5)协助现场人员处理善后工作。
三、收银作业规定
1、收银员作业守则:
现金的收受与处理是收银员相当重要的工作之一,这也使得收银员的行为与操作格外的引人注意,为了保护收银员,避免引起不必要的猜疑与误会,也为了确保现金管理的安全性,收银员在执行收银作业时必须遵守下列守则;
(1)收银员身上不可带现金,收银员在执行作业时,身上如有现金,容易让人误认为是店内公款,而造成不必要困挠。如果收银员当天带有大额现金,并且不方便放在存包处时,可请经理代为保管。
(2)收银台不可放置任何私人物品。收银台随时会有顾客退货,或临时删除购买的品项,若有私人物品亦放置在收银台,容易与顾客的退货混淆,引起他人的误会。
(3)收银员在收银台执行作业时,不可擅自离位,如果擅自离机,将使歹徒有机可乘,造成店内的损失,而且当顾客需要服务时,也可能因为找不到工作人员而引起顾客的抱怨。
(4)收银员不可为自己的亲朋好友结帐,避免收银员利用职务上的方便而图利亲友,同时也可避免引起不必要的误会。
(5)收银员在工作时不可嬉笑聊天,随时注意收银台前的动态,如有异常情况,应通知收银主管或保安人员处理。不启用的收银通道必须用链条或其它物品围住,收银员在工作时嬉笑聊天,会给顾客留下不佳印象,破坏企业形象,导致公司的损失,此外收银员位于商场的入口,较方便留意商场的出入人员,协助保卫做好安全工作。
(6)收银员应熟悉超市便民特色服务的内容,促销活动,当日特价商品及商品存放的位置等讯息,收银员熟悉上述各项讯息,除了可以迅速回答顾客的询问,亦可主动告知店内促销商品,让顾客有宾至如归,受到重视的感觉,同时还可以增加公司的业绩。
2、结帐程序:
为顾客提供正确的结帐服务,除了可以让顾客安心购物、取得顾客的信任之外,还可以做为公司计算经营收益的基础,其正确性可谓相当重要,在整个结帐过程中,收银员必须达到三个要点,即正确、礼貌和迅速。其中迅速一项以正确性为前提,而不是单单追求速度,收银员应根据正确及礼貌二项要求,完成下列步骤:
(1)欢迎顾客收银标准用语:欢迎光临
配合之工作:面带笑容,与顾客的目光接触。等待顾客将购物篮,或是购物车上的商品放置收银台上。将收银机的顾客显示牌面向顾客。
(2)商品登录逐项审视每项商品价格以左手拿取商品,并确定该商品的售价是否无误。以右手按键,将商品的售价正确登录在收银机上。登录完的商品必须与未登录的商品分开放置,避免混淆。检查购物车(或购物篮)底部是否还留有未结帐的商品。并询问顾客是否持有记分卡。
(3)结算商品总金额告知顾客合计___元将购物车(篮)推(叠)一旁。若无他人协助入袋工作时,收银员可以趁顾客拿钱时,先行将商品入袋,但是在顾客拿现金付帐时,应立即停止手边的工作。
(4)收取顾客支付的金钱收您___元,确认顾客支付的金额,并检查是否伪钞。若顾客未付帐,应礼貌性的重复一次,不可表现不耐烦的态度。
(5)找钱顾客找您___元,找出正确零钱,将大钞放下面,零钱放在上面,双手将现金连同收银小票交给顾客。询问顾客是否需要购物袋。
(6)商品入袋根据入袋原则,将商品依次放入购物袋内;
(7)一手托着购物袋的底部,确定顾客拿稳后,才可将双手放开。确定顾客没有遗忘的商品,面带笑容,目送顾客离开;
3、入袋原则:为顾客做入袋服务时,必须遵守下列原则:(1)必须选择适合尺寸的购物袋;
(2)不同性质的商品必须分开入袋子,例如:生鲜与干货类,容器与洗化用品,以及生食与熟食;(3)入袋程序: A、重、硬物置袋底;
B、正方形或长方形的商品入进袋子的两侧,做为支架;
C、瓶装及罐装的商品放在中间,易碎品或较轻的商品置于上方;
(4)冷藏(冻)品、乳制品等容易出水的商品,肉、鱼、蔬菜等容易渗漏流出汁液的商品,或是味道较为强烈的食品;
(5)确定附有盖子的物品都已经拧紧;
(6)货物不能高过袋口,避免顾客不方便提拿;(7)确定公司的宣传品及赠品已放入顾客的购物袋中;(8)提醒顾客带走所有包装好的购物袋,避免遗忘。
如果由于人手不足,没有为顾客提供入袋服务时,由顾客自行将商品放入购物袋时,收银员仍需注意下列事项:将登录完的商品小心地从购物篮中拿出,以免商品损坏。将结帐完毕的商品交给顾客时,应同时附上收银小票,并对顾客说声:“麻烦您”或“谢谢”。
4、离开收银台的作业事项:
当收银员必须离开收银台时,应注意下列事项:
(1)离开收银台时,必须将“暂停结帐”牌摆放在顾客容易看到的地方或是用链条将收银通道围住。然后将所有现金全部锁入钱箱内,同时将收银机上的锁匙转至锁定的位置,锁匙必须随身带去,交由相关人员保管或放置在规定的地方;
(2)将离开柜台的原因及回来时间告知另外的收银人员或收银主管;
(3)离机前,若还有顾客排队等候结帐,不可立即离开。如果商品的标价低于正确价格时,应向顾客委婉解释,并立即通知店内人员检查其他商品的标价是否正确。
5、收银台的支援工作:
让顾客以最短的时间完成结帐程序,并且迅速通过收银台,是店内每一位同仁的责任,收银区必须随时保持机动性,当收银台有五位以上的顾客在等待结帐时,必须立刻加开收银机,或者安排店内人员帮忙收银员为顾客做入袋服务,以减少顾客等候的时间。
6、退换货收银专用通道:
(1)收银员无权退换货,所有退换货到客服部办理:(2)负责收取顾客退换货单,注意清理退货及日期;(3)收存退换货单据下班后交收。
四、收银中的礼仪服务规定:
收银员是整个超市中直接对顾客提供服务的人员,其一举一动都代表超市对外的形象,因此,只要是一个小小的疏忽,都可能让顾客对整个超市产生不良的观感,尤其在目前市场竞争激烈的情况下,亲切友善的服务以及良好顾客关系的建立就成为服务成功的基础。
1、收银员的仪容:
(1)整洁的制服:每位收银员的制服,必须整洁,不起皱。在工作时,必须正确佩戴工牌;(2)清爽的发型:收银员的头发应梳理整齐;
(3)适度的化妆:收银员上点淡妆可以让自己显得更有朝气,但切勿浓妆艳抹,反而造成与顾客有距离感;(4)干净的双手。超市出售的商品绝大部分属于食品,若收银员的指甲藏污纳垢,会使顾客感觉不舒服。而且过长的指甲,也会造成工作上的不便。
2、举止态度:
(1)收银员在工作时应随时保持笑容,以礼貌和主动的态度来接待和协助顾客。与顾客应对时,必须带有感情,而不是表现虚伪、僵化的表情;
(2)当顾客发生错误时,切勿当面指责,应以委婉有礼的口气为顾客解说;
(3)收银员在任何情况下,皆应保持清醒,控制自身的情绪,切勿与顾客发生争执;(4)员工与员工之间切勿大声呼叫。
3、正确的待客用语
收银员与顾客接触,除了应将“请”、“谢谢”、“对不起”、随时挂在口边上,还有以下常用待客用语:(1)当顾客走近收银台时,“欢迎光临,您好!”(2)欲离开顾客,为顾客做其他服务时,必须先说“对不起,请您稍等一下”。同时将离开的理由告知对方,例如“我马上去加磁”。
(3)当顾客等候一段时间时,应该说:“对不起,让您久等了!”(4)顾客在叙述事情或接到顾客的指令时,不能默不吭声,必须有所表示:“是的/好的/我知道了/我明白了”。
(5)顾客结束购物时,必须感谢顾客的惠顾,说:”谢谢!“"再会!”(6)为顾客做好结帐服务时说:“总共××元/收您××元/找您××元”
篇2:超市收银员管理
2、收银员负责看管收银台的所有物品,严禁非收银员进入收银台。负责看管机房严禁外非网管进入。如有丢失物品由收银员全部负责。
3、收银台所有售卖的商品属于网吧所有。严禁私买私卖,影响营业额。如有发现每次现场罚款现金50。如果情节严重开除处理。
4、帐目清楚细致,及时上交现金。交接要清楚细致双方签名确认,任何人不得以任可理由从收银台支取现金。
5、耐心解答顾客提出的帐务及网吧资费方面的问题。
6、时刻了解上座率,协助服务员对长时间上网超过5小时以上的顾客进行提醒。
7、24小时保持收银台的清洁、整齐、干净
8、严守财务制度,做到现金与帐目相符,所有现金只可以财务人员收取,其他任何人不得以任何理由从收银台支取现金违者由当事承担。
篇3:超市收银管理信息化浅析
超市作为当今国内销售商品最广、数量最多、人流最多的一种市场, 有种类繁多的商品信息和其他信息需要处理。以前人们对信息管理的主要方式是基于文本、表格等纸介质, 对于各种商品的购销存情况的统计和核实等往往进行人工检查。不仅数据信息处理量大, 而且数据繁多, 容易丢失、不易整理。当今时代对效率的要求日益提高, 如果利用传统的手工收银方式, 那么不仅收银员辛苦, 还会导致效率低下, 收银台前排起长队。因而需要用软件控制销售和管理来取代传统手工方式。
二、我国超市收银管理系统的现状
目前我国的超市一般使用超市POS收银系统。
大中型超市现在的收银系统一般都是C/S架构的, 即客户端/服务器模式。前台的客户端程序直接访问服务器程序, 服务器程序查询、操纵后台的SQL数据库, 并把操作结果返回给客户端程序。这里的客户端即超市pos收银系统前台收银机。
小型超市一般使用单机版POS收银系统。一般由负责日常销售工作的前台收银系统和作为管理商品信息的后台管理系统两部分组成。前台收银系统支持商品的销售、退货、打折、变价处理, 销售数据的挂起、恢复功能, 销售小票的打印功能, 销售数据查询等统计功能。后台管理系统对货物流转进行全面管理。它可以实现各种单据的电脑化, 并对销售数据的进行统计;可以管理仓库、储存会员的所有个人和购物信息以及完整的财务管理。
另外, 我国许多大型超市的物流管理也进入电子化。例如家家旺连锁超市原来在物流配送上存在物流配送基础薄弱, 配送成本高, 物流、资金流、信息流不协调等问题。采用电子化物流结算平台, 开展物流配送的垂直一体化和水平一体化, 建设区域物流网络, 加强信息系统建设, 完善信息服务功能。物流管理的电子化, 给超市管理带来了便利。
三、国外超市收银管理的研究情况
目前国外几乎所有的大型超市拥有完善的物流配送体系, 例如沃尔玛等大型超市都有自己的物流配送中心, 采用先进的物流和信息技术实现对商品采购、库存、销售的实时动态管理。连锁超市的经营管理, 从进货、销售到调拨和库存管理, 都采用MIS系统进行现代化管理, 从而大大提高管理水平, 使企业获得良好的经济效益。
对于商品采购, 国外已将VMI---Vendor Managed Inventory运用于超市的物流管理。供应链管理强调供应商与超市建立长期合作伙伴关系, 在信息和知识共享、合作关系充分发展的基础上, 供应链伙伴将寻求更深层次的整合。他们开始交换某些决策权、工作职责和资源, 以加强协作, 共同努力开拓市场。
四、超市收银管理系统的优缺点
1. 优点
(1) 能迅速而准确地完成前台收银的工作, 同时能保存完整的一段时间的记录; (2) 能够自动储存、整理所记录的销售资料, 作为提供给后台电脑处理的依据, 并且可打印出各种收银报表、读帐、清帐和时段部门帐; (3) 能准确、迅速地获得商品销售信息, 在商品管理上有助于调整进货, 有的放矢的进行商品的进货和销售; (4) 有利于合理地分配人力资源, 节省人工费用; (5) 对于连锁超市, 中央电脑可利用通讯联网系统向每一家超市门店输送下达管理指令、商品价格变动、商品配送等, 便于管理。
2. 缺点
(1) 因采用C/S结构, 需用户在客户端安装软件; (2) 体系封闭, 无法实现网络化管理, 更无法支持电子商务; (3) 由于技术方面的限制, 传统软件无法做到库存信息的实时动态处理事前的预测并提供前瞻性信息, 造成信息单一、落后且缺乏前瞻性; (4) 很少考虑管理, 其目的是对外报告, 软件仍没有摆脱传统束缚; (5) ;现有的大型商品管理系统, 成本很高, 且功能过于强大而造成工作繁琐。
五、总结
随着信息技术和市场经济的飞速发展, 超市收银管理系统的数字化、信息化将成为主流。超市收银管理的信息化将使超市的资金流、物流、客户流控制结合在一起, 在进货、销售、库存管理、财务结算等方面, 给超市的运营提供有力的帮助。因此, 建立超市收银管理系统是有积极意义的。
摘要:超市有种类繁多的商品信息和其他信息需要处理, 使用信息化管理, 能够及时、有效的对各种商品的购、销、存进行统计和整理。本文通过对国内外超市收银管理现状的介绍和现有超市收银管理系统优缺点的分析, 指出超市收银管理的发展趋势。
关键词:超市管理,收银系统,管理系统
参考文献
[1]向征, 刘世俊.超市管理信息系统的设计与实现[J].软件导刊, 2009 (08) , pp:84-85[1]向征, 刘世俊.超市管理信息系统的设计与实现[J].软件导刊, 2009 (08) , pp:84-85
[2]赵明才.商品管理系统的研究开发设计及利用[D].山东大学硕士学位论文, 2009-10-10[2]赵明才.商品管理系统的研究开发设计及利用[D].山东大学硕士学位论文, 2009-10-10
篇4:全食超市的民主管理
有这么一家公司,它并不认为自己是一家公司,它认为自己是由一群致力于改变世界的人们组成的共生社区。在这家公司,员工可以自己决定商品库存;他们的工作压力并非来自老板,而是源自身边的同事;应聘者的去留是由他所在的团队而非公司管理者决定的。
上述场景描绘的,便是美国的全食超市。
这家以销售有机天然绿色食品为主的连锁超市,年年入选《财富》杂志“100家最佳雇主”。2007年,全食超市更是被评为“全美最值得为之工作的公司”的第五名。
现在,全食超市拥有194家分店,每年创造接近60亿美元的市场销售总额。它也是美国按平方米面积计算利润最丰厚的食品零售商。2002年至2007年间,全食超市开业1年以上的单店销售额年均增长11%,是同行的3倍。2006年,全食超市每平方米收入900美元,是竞争者的两倍。
全食超市留给旁观者的是惊叹,留给对手的是绝望!
员工自我掌控
并决定自身的成败
在全食超市,最基础的组织单元不是门店,而是团队。精练的授权型团队被赋予零售业中空前的高度自治权。每个门店约由8个团队组成,他们对门店的各个环节进行管理,从海鲜食品到食品制作、到收银。
按规定,每位新来的同事都会被分配到某一团队,通过4周的试用,团队成员投票决定这位新同事的命运——新同事必须获得2/3以上的赞成票,才能获得全职岗位。这种基于同事投票决定是否录用应聘者的流程适用于所有的应聘者。全食超市相信,关键的决策问题,应当由那些受该决策结果影响最大的人做出,例如雇佣谁的问题就应该由未来和他共事的人决定。
这种突破性的分权管理精神贯穿于全食超市管理模式的每个环节。小型团队负责所有的核心经营决策,包括产品定价、商品陈列、人员招聘和促销策略。以商品选择为例,团队领导与门店经理商量之后,可以自由决定采购的商品品种及库存,这与传统的超市运作方式大相径庭。传统的超市采购决策由公司总部采购部门做出,并且明确规定各门店经营的产品。此外,大型食品制造商为了让它们的商品占据货架,通常需要支付大量的进场费。
然而。在全食超市,没有任何一个总部的管理人员会坐在办公室里决定货架上应该陈列什么商品。全食超市鼓励门店在执行公司严格的产品标准下,任何产品都可以进行当地采购。因此,全食超市的每个门店都有其独特的产品组合。在各自的部门中,也由团队自行决定员工的岗位配置,不过门店经理拥有优先选择权。
简而言之,每个团队就像一个利润中心一样运作,以劳动产出来评价绩效。在高度授权的同时,职员也承担高度的责任。每隔四周,全食超市都会计算每个门店各个团队每单位劳动时间所创造的利润。绩效超过一定额度的团队将获得奖金。每个团队都有权了解公司全部的绩效考核数据。没有一个团队愿意成为落后者,因此每个团队都备受鼓励地努力工作。
不难理解,在全食超市,新员工的聘用决策特别重要,因为如果你决定让一个懒散的人进入团队,你下个月的奖金就可能减少!事实上,公司CEO麦基认为,如果各个团队成员没能勇敢地站起来反对那些无效的团队领导,或者没能否决雇佣低效率的新员工,就不算真正行使了绩效管理的主权。
这种高度自治的管理方式传递了一个简单但却令人神清气爽的信息:员工自我掌控并决定自身的成败,而不是由管理人员决定。实际上,这种赋予员工的高度自治权与员工的高度责任感是相匹配的,在保障员工自由运用决策权的同时推动了公司的发展。与其他公司不一样,全食超市的一线员工有充分的权利尽力做好对客户有利的事情,也有充足的动力做好能为公司创造更多利润的工作.
在一个科层体制的公司内部,高层管理者通常只能发现那些公司中已经普遍存在的管理问题,而这时候采取纠正措施往往代价高昂.在全食超市,商业指挥与充分的决策权力确保了各类小问题在行动之前即可采取措施解决,避免了它们演变成为大问题。充分授权的当地决策模式与激励雇员向最佳绩效门店借鉴最佳实践经验的系统结合在一起,形成了全食超市弹性的运作系统。
自治权与责任感的紧密联系不仅避免了员工士气的削弱,也减少了科层控制的必要。麦基说:”门店的管理规则,我们有许多自我检查措施。来自同事间的压力替代了传统科层体制中自上而下的管理压力,而同事间的压力所促成的高度忠诚是传统科层体制无法实现的。”
无秘密的开放管理
是构建公司信任的基础
对员工充分授权的基础是公司高层管理者对员工的极大信任,相信员工能够采取有利于公司的行动。与之相对应的是,只有员工相信公司高层管理者能够通过奖金的形式让员工分享他们高效的劳动生产率所带来的成果,员工才能获得持续激励。
全食超市为了形成员工和高层管理者之间的这种双向信任,在多方面做了努力。例如,每位员工都有权查阅其他门店员工的薪资状况。这种管理的透明度使管理者在薪水决策方面必须完全公正,不搞任何偏袒或特殊待遇,因为当员工对薪资分配不满时,有权提出置疑。同时,由于所有员工的薪资状况都是透明的,就能越发激励员工提高自身技能并承担更多的工作责任,因为他们可以清楚地看到哪些工作、哪类员工可以获得最丰厚的薪水回报。
事实上,薪酬公开制度仅是全食超市管理透明的一个方面。许多公司敏感的经营数据、财务数据,例如每日各门店的销售状况、团队销售绩效、生产成本、每个门店的利润等,这些数据都是向每位员工开放的。这种制度的设立,不仅仅是因为每个门店团队在制定订货、定价决策时需要相应的财务数据,更是全食超市“无秘密”管理哲学的体现,因为无秘密的开放管理是构建公司信任的基础。
通常,许多普通公司标准管理方式是将信息保密制度作为控制员工的手段,其实这种做法对于构建相互信任极其不利。相形之下,全食超市的高层管理者认为,如果想构建高度信任的组织,就不能对员工保守公司的秘密。
全食是一个为其他人创造价值而共同努力工作的社团
全食超市的无数迹象表明,员工在公司内部的关系更像是社团关系而非科层关系。全食超市在其制度的“独立宣言”中阐述了自己的使命:“全食是一个为其他人创造价值而共同努力工作的社团。”
对局外人而言,这种表达是随意和不切实际的。因为普通的企业高层表面上常常对员工们说“我们是一起的”,而事实上他们的薪酬水平与普通员工相比,存在严重的薪资不平等关系,就像瑞士和索马里的贫富差距一样严重。当然这种管理模式的结果则直接导致了无数雇员的愤世嫉俗。
相形之下,全食超市的高层管理者则遵循了钱从哪儿来则往哪儿去的原则,他们相信高层管理者薪水是普通员工100倍的逻辑与全食超市社区管理的精神不符,100倍薪水的差异将导致怨恨并破坏信任,因此公司规定高层管理者的最高薪水限额不得超过普通员工平均薪水的19倍(根据《财富》500强公司的平均数据,高层管理人员的薪水与普通员工薪水的比例是400:1)。
同理,全食超市非管理人员控制公司93%的的股票期权份额(普通公司往往由5个或者少于5个的公司资深高层管理人员控制75%的股份)。为了进一步深化社区和共生的思想,全食超市每一次会议结束都以“感恩”作为结束语,让每位与会者都感激他们的同事们所做出的贡献。
全食超市的管理团队深刻理解公司的成功需要员工每日辛勤地付出,而且不仅是体力的付出,更需要脑力的贡献。高层管理者常常在讲演中引用马斯洛的需求层次理论,因为高层管理者深知只有当员工充分运用他们更高层次的能力(例如主动性、想象力和激情)时,员工才能体会到满足感和成就感。
我们正在为我们的使命而奋斗
将全食超市三万多名员工凝聚在一起从而形成共生社团的核心是公司所倡导的共同目标,即转变世界食品供应的工业化现状,给人类提供更好的食物。让我们看看下面几个全食超市的例子:
全食超市运用自身的采购权改变了现代农业生产,使动物在屠宰前能受到更为人道的对待。
全食超市创立了“行动”中心,使顾客能了解到鲑鱼的PCB(多氯联苯)水平,农场饲养的鸭群的生活状况。
全食超市是全美唯一拥有自己的海鲜养殖场的超市,公司的鲑鱼捕获政策被海洋管理委员会认定是可持续的。
2006年1月,全食超市从风能发电厂购买了其所有门店、工厂、烘焙作坊、配送中心、办公室、美国和加拿大的总部所使用电量的RECs(可更新能源证书),成为在美国和加拿大使用绿电最多的《财富》500强企业。
麦基发现食物的美味与健康之间并无冲突,环境可持续发展的激情与获得利润的激情也并不矛盾。“客户希望我们以对环境友善和负责的态度销售产品。”他说,“为了让股东利益最大化,你最好在这个共生的社区中起积极的促进作用。”
社区是建立在共同的感知和目标基础上的,全食超市也不例外。对于许多公司员工而言,在全食超市工作展示了他们的生活风格与价值理念:出售营养丰富的食品,为农场的可持续发展做出贡献,支持无杀虫剂农业。这些理念凝结在全食超市的口号中——“健康的食品,强健的人类,生机勃勃的星球”。正如一位公司高管所言:“我们并不追求像MBA常常说的品牌扩张,我们正在为我们的使命而奋斗。”
正是基于这种对共生命运的分享、对共同使命的忠诚,使全食超市成为一个共生社区。基于团队的报酬体系、透明的财务信息制度、高层管理者的薪资最高限制制度,是公司“共生命运的分享”最好的诠释。
“对共同使命的忠诚”体现在全食超市不仅提倡并且正在努力改变世界工业方式和食物供给。你不必担心公司团队成员会围坐在一起,振臂高唱悲伤之曲。全食超市是一个所向披靡的强大竞争者,因为它总是在和自己竞争。各团队与他们的标杆团队竞争,与统一门店的其他团队竞争,和其他门店的同类团队竞争,他们获得的成功直接体现在团队认同、奖金和岗位提拔中。每个门店都由总部管理者和区域主管共同采取300种不同的方法对门店绩效进行评价,这样的绩效评价每年要进行10次。每个门店的“客户印象”评价则由其他门店做出,通过这种方式,激发员工间的相互竞争。
首席执行官麦基认为利润是最终实现全食超市社会目标的手段。他在一篇博客中写道:“我们希望通过提供更高质量和更有营养的食物,改变这个星球上任何一个人的健康和福利。”“除非我们是高利润率,否则我们将无法实现这个使命。”在全食超市,利润是得分,而不是比赛。然而许多公司则将这二者的顺序倒置了,对那些公司的高管来说,股票的价值比公司的目标和使命重要。
民主和纪律、信任与义务、团结的共同体与激烈的内部竞争,这些看似矛盾的价值观,在全食超市得到了和谐的统一。正是这种特殊的能力造就了公司独特高效、难以复制的管理机制。■
链接:
民主和纪律、信任与义务、团结的共同体与激烈的内部竞争……在企业管理中,类似不可调和的矛盾,并不少见。于是,我们想方设法地采用固化的结构、流程、决策规则,让相互矛盾的目标组合的一方占据主导地位。最后的结果往往是,短期的利益驱动打败了长期的发展目标,常规制度限制了管理创新,内部竞争削弱了团队协作。
那么,究竟有没有办法平衡这些矛盾?全食超市为我们提供了一个可资借鉴的样本。
管理创新的挑战
如何在减少管理的同时,保证被授权的员工遵守纪律且目标明确?
如何创造一个用共生社区精神凝聚员工的公司?
如何构建被员工接受和认可的使命,并促使员工自觉做出更多贡献?
全食超市与众不同的做法
给员工提供大量的决策机会,为提供做出明智决策的充足信息,由员工对决策结果负责。
深信股东的利益是共生的,并依此管理,构建高度透明的财务体系,限制薪酬分配不均。
让员工对全食超市使命的认同如追求利润一样真切和可感知。
[编辑 杨 晶]
篇5:超市收银员管理
四个包,九个类,一个资源文件
客户端类
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 class 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 password = input.next();//调用客户端登录方法,接收返回值,判断登录者的身份 Datas datas = cb.doLogin(name, password);//判断是管理员还是收银员
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
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<0){
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 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 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 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:ss”); 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 class 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 password * @return */ //登录方法 public Datas doLogin(String name, String password){ initSocket(); User user=new User(); user.setUsername(name); user.setPassword(password); 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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(ClassNotFoundException 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 class 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 class User implements Serializable { private String username;//用户名 private String password;//密码 /* public User(){ //无参数构造方法 } //有参数构造方法 public User(String username,String password){ this.username=username; this.password=password;}*/ //Set和Get方法 public String getUsername(){ return username;} public void setUsername(String username){ this.username = username;} public String getPassword(){ return password;} public void setPassword(String password){ this.password = password;} } 服务器类 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 class 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 ss=new ServerService();//判断客户端传过来的标识是想调用什么方法 if(datas.getFlag().equals(SysConstans.SYS_LOGIN)){ datas=ss.doLogin(datas);}else if(flag.equals(SysConstans.SYS_ADD)){ datas = ss.add(datas);// 商品出库 } else if(flag.equals(SysConstans.SYS_CHUKU)){ datas = ss.down(datas);// 商品入库 } else if(flag.equals(SysConstans.SYS_RUKU)){ datas = ss.up(datas);// 编号查看 } else if(flag.equals(SysConstans.SYS_FIND)){ datas = ss.find(datas);// 查看所有 } else if(flag.equals(SysConstans.SYS_FINDALL)){ datas = ss.findAll(datas);// 扫描商品 } else if(flag.equals(SysConstans.SYS_SCAN)){ datas = ss.scan(datas);// 修改商品 } else if(flag.equals(SysConstans.SYS_UPDATA)){ datas = ss.upData(datas);// 商品结账 } else if(flag.equals(SysConstans.SYS_RESULT)){ datas = ss.result(datas);//商品清空 } else if(flag.equals(SysConstans.SYS_CLEAR)){ datas = ss.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(ClassNotFoundException 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 class ServerService { /** * 初始化管理员对象和收银员对象 * 管理员对象:用户名:admin 密码:admin * 收银员对象:用户名:user 密码:user * 初始化商品列表和购买列表 */ private static User stockman;//库管对象 private static User cashier;//收银对象 private static ArrayList private static ArrayList static{ //初始化库管和收银 stockman=new User(); stockman.setUsername(“1101”); stockman.setPassword(“1111”); cashier=new User(); cashier.setUsername(“1001”); cashier.setPassword(“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().getPassword().equals(stockman.getPassword())){ datas.setFlag(SysConstans.SYS_ADMIN); }else if(datas.getUser().getUsername().equals(cashier.getUsername())&&datas.getUser().getPassword().equals(cashier.getPassword())){ 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){ //设置标识为success,并设置商品列表.返回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()<=goodslist.get(i).getGoodcount()+1){ 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 class Datas implements Serializable { private String flag;//传递对象 private User user;//传递用户 private Goods good;//传递商品 private ArrayList private ArrayList //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 return goodslist;} public void setGoodslist(ArrayList this.goodslist = goodslist;} public ArrayList return buylist;} public void setBuylist(ArrayList this.buylist = buylist;} } 常量列表类 package com.supermarket.Tools;/** * 常量列表类.用来存放常量 * @author Administrator * */ public class 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 class Tools { private static Properties p= new Properties(); //读取properties配置文件信息 static { //加载资源文件 try { p.load(Tools.class.getClassLoader().getResourceAsStream(SysConstans.SYS_PROPERTYNAME)); } catch(IOException e){ // TODO Auto-generated catch block e.printStackTrace(); } } //通过关键字取值 public static String getVlaue(String key){ return p.getProperty(key); } } 资源文件 1、对顾客有礼貌,欢迎顾客光临运用礼貌用语。 例如:您好、 欢迎光临、谢谢您、早上好。 2、 顾客离开时要帮助顾客将商品装入购物袋内并运用礼貌用语。 例如:欢迎再来。 二、收银员在结算时必须唱收唱付,不要将钱扔给顾客,应将钱和 收银员在结算时必须唱收唱付,不要将钱扔给顾客, 小票一起交给顾客。 小票一起交给顾客。 1、 唱收唱付, 收顾客钱款时, 要唱票 “您的商品多少钱”, “收 您多少钱”找零钱时唱票 “找您多少钱”。 2、对顾客要保持亲切友善的笑容。 3、耐心的回答顾客的提问。 4、在营业高峰时间,听从当日负责人安排其它工作。 .例如:查 价格,清理手推车,对换零用金。 三、顾客提供购物袋 食品非食品分开,生熟分开放置,如硬重的放在底层,易碎品,膨 化食品放在最上放,冷冻品,豆制品等容易出水的商品单独放置,装 入袋中的商品不应高过袋口,避免顾客提拿不方便。 四、确保商品 1、超市在促销活动中所发的广告或赠品确认后放入袋内。 2、 装袋时避免不是同一位顾客的商品放在同一购物袋中的现象。 3、对体积过大的物品要用绳子捆好,方便顾客提拿。 4、提醒顾客带走所有商品,防止遗忘在收银台上的事情发生。 五、保持收银台时刻整洁干净。 保持收银台时刻整洁干净。 六、仔细检查特殊商品。 例如:皮箱、提袋、盒子(铅笔盒)家电 仔细检查特殊商品。篇6:超市收银员辞职