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,所以代碼規範上做的還不是很好,希望大家多多指出,最後程序的運行如下:


其中我的程序中可以使用中文(剛剛開始不是顯示?就是顯示亂碼),這個問題我在前面的博客中談論過,需要處理數據庫以及從數據庫讀取的數據的編碼方式。若是大家看出什麼錯誤或是有意見的話,歡飲大家留言。

發佈了194 篇原創文章 · 獲贊 88 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章