源代码下载链接:https://download.csdn.net/download/xust_kevin/10743109


问题重述:

1.正常餐品结算和找零。

2.基本套餐结算和找零。

3.使用优惠劵购买餐品结算和找零。

4.可在一定时间段参与店内活动(自行设计或参考官网信息)。

5.模拟打印小票的功能(写到文件中)。

代码实现所用到的工具和包:

1.pycharm

2.mysql

3.pymysql(python包)

4.datetime(python包)

基本思路:

思考一下去快餐店就餐的情景:一个顾客走进快餐店,他只需要直接去找服务员点餐,服务员给了他一份菜单,在顾客看过菜单后选择出了他想要的食物,服务员计算好顾客需要支付的金额后顾客支付所需要的人名币,服务员打印出小票,并结束服务。这就是一个完整的快餐店点餐的过程。

在这个过程中涉及到的人员有:顾客、服务员

在这个过程中涉及到的设备有:点餐机、小票打印机

他们之间的关系为:服务员使用点餐机为顾客点餐,顾客根据服务员提供的菜单进行点餐,点餐后服务员用小票打印机打印小票。从中看出服务员与顾客课设备相关联,顾客与服务员相关联,因此我设计了一个顾客类、服务员类、食物类,因为设计到使用数据库,因此又增加了一个数据库类。服务员类中包含食物类和数据库类的成员变量,顾客类中包含服务员类的成员变量。

实现步骤:

1.数据库类

数据库主要负责连接在本地客户端的MySQL应用服务程序,执行相应的查询、添加、删除和更新操作。

在次我的设计是将食物餐点和需要保存的销售量和营业额存储在MySQL数据库中,因此在数据库中至少需要三张表(食物表、销售量表、营业额统计表)来存放信息,分别要执行的操作为查询食物信息,添加营业额统计信息和添加或更新销售量信息

1.查询食物信息:

因为需要在控制台打印出菜单信息,所以只需要执行一个select操作就可以将数据库中的信息得到

2.统计销售量:

因为在统计销售量是可能存在有部分食物已经在数据库中,因此只需要执行更新数量操作,而如果数据库中没有该项食物的记录,则需要执行插入操作

3.统计营业额:因为营业额是以天来计算的,而且是在结束营业后才进行统计,所以只需要执行插入操作

代码如下:

import pymysql
import datetimeclass Connector:host = '你的端口号'user = '你的用户名'passwd = '你的密码'db = '你的数据库'# 连接数据库并返回数据库连接对象def connect_db(self):try:db = pymysql.Connect(self.host, self.user, self.passwd, self.db)return dbexcept pymysql.err.OperationalError:print('连接数据库失败')exit()# 查询单品食物信息def select_singalmeal(self):select_sql = 'select number,name,price from singalmeal'db = self.connect_db()cursor = db.cursor()try:cursor.execute(select_sql)except pymysql.err.IntegrityError:print('查询失败')db.commit()db.close()return cursor.fetchall()# 查询套餐食物信息def select_setmeal(self):select_sql = 'select number,name,price from setmeal'db = self.connect_db()cursor = db.cursor()try:cursor.execute(select_sql)except pymysql.err.IntegrityError:print('查询失败')db.commit()db.close()return cursor.fetchall()# 统计销售物品信息并写入数据库def insert_sell(self, prodect):select_sql = 'select name from sell'db = self.connect_db()cursor = db.cursor()try:cursor.execute(select_sql)except pymysql.err.IntegrityError:print('查询失败')db.commit()result1 = cursor.fetchall()existence_list = []for each in result1:existence_list.append(each[0])for each in prodect:try:if each in existence_list:update_sql = "update sell set amount=amount+1 where name = '%s'" % eachcursor.execute(update_sql)else:insert_sql = "insert into sell (name,amount) values ('%s','%d')" % (each, 1)cursor.execute(insert_sql)except pymysql.err.IntegrityError:print('更新或插入数据库失败')db.commit()db.close()# 统计营业额def insert_turnover(self, turnover):time = datetime.datetime.now()curent_time = datetime.datetime.strftime(time, '%Y-%m-%d %H:%M:%S')insert_sql = "insert into turnover (date,money) values ('%s','%f')" % (curent_time, turnover)db = self.connect_db()cursor = db.cursor()try:cursor.execute(insert_sql)except pymysql.err.IntegrityError:print('插入数据库失败')db.commit()db.close()

2.食物类

因为我将食物分成了单品和套餐,所以我定义了一个食物的基本类,定义一个方法来显示食物的信息,用单品类和套餐类继承食物基类

代码如下:

from KFC import SQLConnectorclass Meal(object):connection = SQLConnector.Connector()def show_meal(self):passclass Singalmeal(Meal):# 显示单品食物信息def show_meal(self):list_number = []list_name = []list_price = []result = self.connection.select_singalmeal()count = 1print('餐号          名称                   价格')for each in result:list_number.append(each[0])list_name.append(each[1])list_price.append(each[2])length = 10 - len(each[1])space = ' ' * lengthprint('%3d       %s     %s %.1f元' % (each[0], each[1].ljust(10), space, each[2]))# print(-*length, str(each[2]).ljust(10))count = count + 1dic_meal = list(zip(list_number, list_name, list_price))return dic_mealclass Setmeal(Meal):# 显示套餐食物信息def show_meal(self):list_number = []list_name = []list_price = []result = self.connection.select_setmeal()count = 1print('餐号          名称                   价格')for each in result:list_number.append(each[0])list_name.append(each[1])list_price.append(each[2])length = 10 - len(each[1])space = ' ' * lengthprint('%3d       %s     %s %.1f元' % (each[0], each[1].ljust(10), space, each[2]))# print(-*length, str(each[2]).ljust(10))count = count + 1dic_meal = list(zip(list_number, list_name, list_price))return dic_mealclass Allmeal(Meal):# 显示所有食物信息def show_meal(self):list_number = []list_name = []list_price = []count = 1result_sin = self.connection.select_singalmeal()result_set = self.connection.select_setmeal()print('餐号          名称                   价格')for each in result_sin:list_number.append(count)list_name.append(each[1])list_price.append(each[2])length = 10 - len(each[1])space = ' ' * lengthprint('%3d       %s     %s %.1f元' % (count, each[1].ljust(10), space, each[2]))count = count + 1for each in result_set:list_number.append(count)list_name.append(each[1])list_price.append(each[2])length = 10 - len(each[1])space = ' ' * lengthprint('%3d       %s     %s %.1f元' % (count, each[1].ljust(10), space, each[2]))count = count + 1dic_meal = list(zip(list_number, list_name, list_price))return dic_meal

3.服务员类

服务员需要接待客人、打印小票、统计销售额等,因此定义一个方法用来接待客人(用于显示和接收控制台信息),定义一个方法用来专门打印小票(将订单信息写入文件),定义一个方法来统计当天的销售额,我添加了一个优惠的方法在里面

代码如下:

from KFC import Meal
from KFC import SQLConnector
import datetimeclass Clerk(object):turnover = 0temp_money = 0conn = SQLConnector.Connector()# 打印小票(写入文件)def print_smalltick(self, text):with open('D:\\实验-程序方法学\\作业包4-KFC\\result.txt', 'a') as f:f.write(text)# 周五9折def friday_discount(self):time = datetime.datetime.now()curent_time = datetime.datetime.strftime(time, '%Y-%m-%d %H:%M:%S')day = time.weekday()# 0-星期一。。。。6-星期天if day == 4:return 0.9, curent_timeelse:return 1, curent_time# 售货员服务客人def server_client(self):print('请选择点个餐类型 :')print('1.单点     2.套餐        3.单点+套餐')select_kind = int(input('请选择:'))if select_kind == 1:meal = Meal.Singalmeal()elif select_kind == 2:meal = Meal.Setmeal()else:meal = Meal.Allmeal()# 显示点餐信息dic_money = meal.show_meal()select_food = list(map(int, input('请选择你的餐号并用空格隔开:').split()))self.temp_money = 0smalltick = ''sellproduct_list = []for count in range(len(select_food)):for each in dic_money:if each[0] == select_food[count]:sellproduct_list.append(each[1])self.temp_money = self.temp_money + each[2]length = 0 - len(each[1])space = ' ' * length# print('%3d%s%s%.1f元' % (count + 1, '   ' + each[1].ljust(10), space, each[2]))smalltick = smalltick + str(count + 1) + '       ' + each[1].ljust(10) + space + str(each[2]) + '元\n'discount, date = self.friday_discount()self.temp_money = self.temp_money * discountself.temp_money = round(self.temp_money, 2)space = ' ' * 15# print('折扣:%.1f%s总计:%.1f元' % (discount, space, self.temp_money))smalltick = smalltick + '折扣:' + str(discount) + space + '  总计:¥' + str(self.temp_money) + '\n'self.turnover = self.turnover + self.temp_moneyprint(smalltick)print('1.使用优惠卷     2.不使用优惠卷')select_co = int(input('请选择:'))if select_co == 1:coupon = int(input('请输入优惠券金额:'))else:coupon = 0print('您的订单总共需要支付%.1f元' % round(float(self.temp_money) - coupon, 2))pay_money = int(input('请输入付款金额:'))if pay_money < self.temp_money - coupon:print('金额不足以支付')else:rest_money = round(pay_money - self.temp_money + coupon, 2)smalltick = smalltick + '应付款:¥' + str(self.temp_money) + '         优惠金额:¥' + str(coupon) + '\n'smalltick = smalltick + '实付款:¥' + str(pay_money) + '              找零:¥' + str(rest_money) + '\n'smalltick = smalltick + date +'\n\n'print(smalltick)self.print_smalltick(smalltick)self.conn.insert_sell(sellproduct_list)# 停止营业,显示当天营业额def close(self):print('营业结束,当天营业额为%.1f元' % self.turnover)self.conn.insert_turnover(self.turnover)

4.顾客类

顾客只需要跟服务员沟通,顾客只用联系服务员点餐,所以在顾客类定义一个点餐方法

代码如下:

from KFC import Clerkclass Client(object):waiter = Clerk.Clerk()def oder_meal(self):order = Truewhile order:print('1.点餐     2.退出')select = int(input('请选择:'))if select == 1:self.waiter.server_client()else:order = Falseself.waiter.close()client = Client()
client.oder_meal()

限于本人技术有限,只是提供一个基本思路,还有很多改进地方

源代码下载链接:https://download.csdn.net/download/xust_kevin/10743109

KFC简易点餐收银模拟系统相关推荐

  1. python点餐系统早餐_python+pyqt5实现KFC点餐收银系统

    本文实例为大家分享了python实现KFC点餐收银系统的具体代码,供大家参考,具体内容如下 这个kfc收银系统我实现了的以下功能: 1.正常餐品结算和找零. 2.基本套餐结算和找零. 3.使用优惠劵购 ...

  2. 简单的javaweb版kfc点餐收银系统

    简单的javaweb版kfc点餐收银系统,包含单例模式与工厂模式详解 说明:本次作业实现为简单的网页版,由 两人组队 共同完成. 基本需求: 1.正常餐品结算和找零. 2.基本套餐结算和找零. 3.使 ...

  3. 【C++】收银模拟系统【大学课程设计】

    这个课程设计是本人在大一下学期的课程结课设计,完全由个人开发完成! 现在来给大家进行我的课程设计思路详解! 欢迎点赞.关注.交流!! 看帖点赞是种美德! 文章目录 [收银模拟系统] 一.设计要求 二. ...

  4. 聚客点餐收银系统无法连接服务器,第八章:点菜和收银

    ## 点菜 1.开台:登录聚客点餐收银,双击一张空台,输入人数,开台. ![](https://box.kancloud.cn/b539b7ffe3996e97f76496ce6aff9639_102 ...

  5. 餐饮收银管理系统如何连接mysql_基于jsp+mysql+Spring+mybatis的SSM餐厅点餐收银管理系统...

    运行环境: 最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以. IDE环境: Eclipse,Myeclipse,IDEA都可以 tomcat环境: 最好是Tomcat 7 ...

  6. 一套手机点餐收银系统源码,系统功能完善、页面美观,开源分享!

    淘源码:国内知名的源码免费下载平台 需要源码学习可私信我获取. 一套手机点餐收银系统源码,系统功能完善.页面美观,非常适合有编程基础的进行学习.本套点餐系统解决了餐饮复杂繁琐的点餐程序,实现从点餐到后 ...

  7. 基于javaweb的餐厅点餐收银管理系统(java+ssm+jsp+bootstrap+mysql)

    基于javaweb的餐厅点餐收银管理系统(java+ssm+jsp+bootstrap+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/ ...

  8. 基于SSM的餐馆饭店酒店点餐收银系统设计与实现

    10017_餐馆饭店酒店点餐收银系统 技术 Spring + SpringMVC + MyBatis 工具 eclipse + tomact + mysql + jdk 功能详情: 桌位 账单 日常 ...

  9. 肯德基点餐收银系统(java GUI实现)

    1.系统介绍 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: ...

最新文章

  1. 组合计数 ---- Codeforces 737C Div2 C. Moamen and XOR [多阶段决策计数dp]
  2. 7.LARS lasso 模型
  3. [SpringSecurity]HelloWorld入门案例
  4. 如何看当前windows是utf8还是gbk_监理工程师5月份出教材,现在如何备考?
  5. java war包更新 部署_关于Linux系统下基于Tomcat部署和升级war包的详细过程
  6. Nacos高可用集群解决方案-Docker版本
  7. mysql 远程访问
  8. mysql拼接字符串的方式_mysql 字符串拼接,你知道几种方式?
  9. pascal指针 c语言指针,pascal指针 - Pascal教程
  10. 苦涩程序员公考上岸之路
  11. Windows网络共享方式
  12. this beta version of Typora is expired, please download and install a newer version.Typora
  13. python作中国地图背景气泡图_Python数据可视化:香港地图、房价可视化,绘制气泡图...
  14. c语言实现一个密码管理器(更新中)
  15. 什么是 UI 自动化测试?
  16. idea 2018版的无法在线下载安装插件解决方法
  17. from origin ‘null‘ has been blocked by CORS policy: Cross origin requests are only supported for ...
  18. 一个简单的滑块拖动验证码实例
  19. 说说java NIO的一些个人总结
  20. 超低功耗Wifi片上系统WizFi 210 !应用笔记--多路连接

热门文章

  1. mysql多表查询连接的种类_MySQL中基本的多表连接查询教程
  2. SqlServer修改表设计提示The object ‘DF__CompanyTr__Creat__0CDAE408’ is dependent on column ‘Created’
  3. 浙江大学公开课:博弈论基础良句收录和观后观想
  4. 实现文件中名词的统计计数_SOLIDWORKS PDM系统中如何实现PDF文件批量签章?
  5. 计算机不上电维修流程,电脑坏了自己怎么修,电脑维修流程
  6. android window manager
  7. 2021年中国政府引导基金设立数量、目标规模、认缴规模及分布[图]
  8. 【自动驾驶】运动控制自行车模型运动规律图解
  9. 中国朝代更替的地理规律
  10. 设计模式沉思录:一 资源池