视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python实现超市扫码仪计费
2020-11-27 14:12:09 责编:小OO
文档
 这篇文章主要为大家详细介绍了python实现超市扫码仪计费,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

python实现超市扫码仪计费的程序主要是使用超市扫码仪扫商品的条形码,读取商品信息,实现计费功能。主要用到的技术是串口通信,数据库的操作,需要的环境包括:python环境,mysql,python库(serial,MySQLdb)等等。

这个程序的主要过程是:使用扫码仪扫描商品条形码,通过串口通信获取商品条形码,通过该条形码获取商品信息,显示该商品信息并统计总费用。其中商品信息保存在数据库中,可事先导入或者手动导入商品信息,而我的在这里是事先导入的(也可以边扫边倒入信息),导入到数据库中的信息如下:

程序代码如下:

#coding:utf8 
 
import serial 
import MySQLdb 
 
ser = serial.Serial('COM5',9600) 
 
 
#获取一行信息 
def recv(serial): 
 data = '' 
 while serial.inWaiting() > 0: 
 data += serial.read(1) 
 
 return data 
 
 
def GetInfo(db,data): 
 data = data[0:-1] #最后面有一个空格,需要去掉,否则会影响读数据库 
 print data 
 ret = 0.0 
 try: 
 cur = db.cursor() 
 sql="set names utf8" #这一条语句是告诉数据库编码方式为 utf8 
 cur.execute(sql) 
 
 sql = "select * from productinfo where code=%s"%(data) 
 #print sql 
 cur.execute(sql) 
 #sql = "select * from productinfo where(code=%s)" 
 #cur.execute(sql,data) 
 results = cur.fetchall() 
 #print results 
 for row in results: 
 code = row[0] 
 #print code 
 price = row[1] 
 #print price 
 info = row[2] 
 #print info 
 ret = price 
 #解析出来的信息可能为中文,直接print肯定是不行的,需要转化为windows下的GBK编码 
 print 'coding=',row[0],'price=',row[1],'info=',info.decode('UTF-8').encode('GBK') 
 except: 
 print 'it has no infomation about %s'%(data) 
 
 return ret 
 
 
db = MySQLdb.connect('localhost','root','',"zou",3306,'utf8') 
cursor = db.cursor() 
 
#cursor.execute("DROP TABLE IF EXISTS productinfo") 
 
''''' 
sql="""CREATE TABLE productinfo( 
 code CHAR(18), 
 price double(9,2), 
 info CHAR(25))""" 
cursor.execute(sql) 
''' 
 
sum = 0.0 
while True: 
 data = recv(ser) 
 if data != '': 
 #print data 
 sum += GetInfo(db,data) 
 print '总付款:',sum 
 
 
db.close() 
ser.close()

由于刚刚开始学习python,所以代码规范上做的还不是很好,希望大家多多指出,最后程序的运行如下:

其中我的程序中可以使用中文(刚刚开始不是显示?就是显示乱码),这个问题我在前面的博客中谈论过,需要处理数据库以及从数据库读取的数据的编码方式。若是大家看出什么错误或是有意见的话,欢饮大家留言。

下载本文
显示全文
专题