day2编写购物商城(1)
作業:購物商城
??? 商品展示,價格
??? 買,加入購物車
??? 付款,錢不夠
??? 具體實現了如下功能:
1、可購買的商品信息顯示
2、顯示購物車內的商品信息、數量、總金額
3、購物車內的商品數量進行增加、減少和商品的刪除
4、用戶余額的充值
5、用戶購買完成進行結賬,將最終余額回寫到用戶文件中。
??? 一、用戶文件說明:
kevin 123 50000 sky 123 54000 mobi 123 80000??? 其中第一列為用戶名,第二列為密碼,第三列為帳戶余額。
??? 二、流程圖如下:
???
import sys,os,getpass,timedef input_handle(s):'''用戶輸入字符數字轉化為數字'''if s.isdigit(): #判斷用戶輸入是否是字符數字s = int(s) #是的話就進行轉換return sdef framework(user="",init_money='',now_money='',recharge_money='',value=''):'''架構函數,展示用戶的基本信息'''os.system("clear")init_money = int(init_money)now_money = int(now_money)recharge_money = int(recharge_money)message = ''' *******************************************************************************\033[32;1m歡迎來到小豬豬購物商城\033[0m******************************************************************************* 會員:%s\t金額:%d\t當前余額:%d\t充值金額:%d\t購物車:%d''' %(user,init_money,now_money,recharge_money,value) print(message)def goods_list_show(my_dict):'''商品展示模塊,用于展示商品'''local_dict = {}'''對商品列表進行遍歷并加上數字編號'''i = 1print("商品列表:")print("=================================================================================================")print("%-5s %-15s %-10s %-10s %-10s" %("編號","商品名稱","商品價格(元)","商品總數量(個)","商品剩余數量(個)"))for k in my_dict.keys():v = my_dict[k]if type(v) == dict:print("%-5s %-20s %-15d %-18d %-10d" %(i,k,v['price'],v['num'],v['sum']))local_dict[i] = [k,v["price"],v['num'],v['sum']]i += 1print("=================================================================================================")return local_dictdef cart_goods_show(show_dict):'''顯示購物車商品,并加上數字編號'''show_all_sum = 0show_all_num = 0'''對商品列表進行遍歷并加上數字編號'''message = ('編號',"商品名稱","商品價格(元)","商品總數量(個)","購買數量(個)","購買金額(元)")print("%-5s \t %-20s \t %-10s \t %-10s \t %-10s \t %-10s" %message)for k in show_dict:v = show_dict[k]if type(v) is dict:print("%-5s \t %-10s \t %-10d \t %-10d \t %-10d \t %-10d" %(k,v[0],v[1],v[2],v[3],v[4]))show_all_num += v[4]show_all_num += 1print("請確認你購買的商品,總金額:%d元"%(show_all_sum))return (show_all_sum,show_all_num)def cart_goods_modify(modify_dict,modify_goods_dict):'''購物車商品修改列表'''a_flag = 1while a_flag:index = input("請輸入商品編號|完成修改(q):" %modify_dict[index][2])if len(index) != 0:index = input_handle(index)if index == "q":breakelif index in modify_dict:b_flag = 1name = modify_dict[index][0]while b_flag:num = input("請輸入新的商品數量(最大值為%d)|完成修改(q):" %modify_dict[index][2])if len(num) != 0:num = input_handle(num)if num == 'q':breakelif num == 0:modify_goods_dict[name]['num'] = modify_dict[index][2]del modify_dict[index]b_flag = 0elif num > 0 and num <= modify_dict[index][2]:modify_dict[index][3] = nummodify_dict[index][4] = modify_dict[index][1] * nummodify_goods_dict[name]['num'] = modify_dict[index][2] - numb_flag = 0else:passelse:passreturn (modify_dict,modify_goods_dict)def shopping_cart_show(my_cart,my_goods_dict):'''購物車展示'''print("歡迎來到你的購物車".center(80,"#"))goods_all_sum = 0goods_all_num = 0if my_cart:'''調用購物車商品列表函數,并返回商品總金額和總數量'''(goods_all_sum,goods_all_num) = cart_goods_show(my_cart)choice = input("請進行如下操作:修改記錄(c)|繼續購物(!c)")if choice == "c":(my_shop_cart,my_goods_dict) = cart_goods_modify(my_cart,my_goods_dict)(goods_all_sum,goods_all_num) = cart_goods_show(my_cart)else:passelse:print("您當前的購物車為空".center(80,"#"))time.sleep(2)return (goods_all_sum,goods_all_num,my_goods_dict)def balance_recharge(recharge_init_balance,recharge_now_balance,recharge_money):recharge_flag = 1while recharge_flag:recharge_num = input("請輸入充值金額|返回(b)|退出(q):")if len(recharge_num) != 0:recharge_num = input_handle(recharge_num)if recharge_num == "q":sys.exit(0)elif recharge_num == 'b':breakelif type(recharge_flag) is int and recharge_num > 0:recharge_init_balance += recharge_numrecharge_now_balance += recharge_numrecharge_money += recharge_numrecharge_flag = 0print("充值成功,請查收".center(80,"#"))else:passreturn (recharge_init_balance,recharge_now_balance,recharge_money)def user_billing(billing_list,my_cart,billing_balance):'''結帳模塊'''print("歡迎來到結帳模塊".center(80,"#"))if my_cart:'''調用購物車商品列表函數'''cart_goods_show(my_cart)billing_flag = input("請確認是否商品結算(y|n):")if billing_flag == "y":billing_file = open("info.txt",'w')for user_info in billing_list:billing_file.writelines(user_info)billing_file.close()sys.exit("結帳成功,您當前余額:%d".center(80,"#") %billing_balance)else:print("退出結算菜單,繼續購物".center(80,"#"))time.sleep(2)else:print("您當前的購物車為空,無需結算!")time.sleep(2)'''主程序開始''' if __name__ == "__main__":goods_list = {'iphone6': {'price':6000,'num':10,'sum':10},'ipad': {'price':3000,'num':20,'sum':20},'mi4': {'price':2000,'num':43,'sum':43},'huawei6_plus': {'price':1999,'num':8,'sum':8},}i = 0while i < 3: #只要用戶登錄不超過3次就不斷循環username = input("請輸入用戶名:")password = input("請輸入密碼:")user_file = open("info.txt",'r')user_list = user_file.readlines()user_file.close()for user_line in user_list:'''分別獲取當前賬號、密碼和余額信息'''user,passwd,init_balance = user_line.strip('\n').split()init_balance = int(init_balance)now_balance = init_balancemy_goods_sum = 0if user == username and password == passwd:user_shopping_cart = {}user_shopping_cart_count = 0recharge_value = 0line_num = user_list.index(user_line)first_flag = 1while first_flag:'''調用框架函數輸出用戶信息'''framework(username,init_balance,now_balance,recharge_value,user_shopping_cart_count)goods_output_dict = goods_list_show(goods_list) #輸出商品信息goods_index = input("請選擇菜單:輸入商品編號 | 購物車(c) | 余額充值(r) | 結賬(b) | 退出(q) :")if len(goods_index) != 0:goods_index = input_handle(goods_index)if goods_index == 'q':sys.exit(0)elif goods_index == 'c':'''調用購物車顯示函數,并返回購物車商品總金額'''(my_goods_sum,user_shopping_cart_count,goods_list) = shopping_cart_show(user_shopping_cart,goods_list)now_balance = init_balance - my_goods_sumif now_balance < 0:print("您的余額不足,請及時充值!")time.sleep(2)elif goods_index == 'r':(init_balance,now_balance,recharge_value) = balance_recharge(init_balance,now_balance,recharge_value)elif goods_index == 'b':'''更新用戶的余額'''user_list[line_num] = user + ' ' + passwd + ' ' + repr(now_balance) + '\n'user_billing(user_list,user_shopping_cart,now_balance)elif goods_index in goods_output_dict:'''取出goods_index商品列表信息并進行賦值和展示'''(goods_name,goods_price,goods_num) = (goods_output_dict[goods_index][0],goods_output_dict[goods_index][1],goods_output_dict[goods_index][2])print('【 編號:%-5d \t 名稱:%-15s \t 價格:%-5d(元) \t 數量:%-5d(個)】' % (goods_index, goods_name, goods_price, goods_num))second_flag = 1while second_flag:buy_num = input('請輸入購買商品個數(最大值為%d) | 返回(b) | 退出(q): ' % goods_num)if len(buy_num) != 0:buy_num = input_handle(buy_num)if buy_num == 'q':sys.exit(0)elif buy_num == 'b':breakelif type(buy_num) is int and buy_num > 0 and buy_num <= goods_num:my_goods_sum = goods_price * buy_numif my_goods_sum <= now_balance:print('購買商品 %s 總價格為 : %d' % (goods_name, my_goods_sum))add_flag = input("請確認是否加入購物車(y | n):")if add_flag == "y":'''判斷購物車不存在該商品'''if goods_index not in user_shopping_cart:user_shopping_cart_count += 1'''購物車商品數量加一'''user_shopping_cart[goods_index] = [goods_name,goods_price,goods_num,buy_num,my_goods_sum]else:user_shopping_cart[goods_index][3] += buy_numuser_shopping_cart[goods_index][4] += my_goods_sumnow_balance -= my_goods_sumgoods_list[goods_name]['num'] -= buy_numsecond_flag = 0else:breakelse:print("您的余額不足,請充值或重新選擇,謝謝!")time.sleep(2)else:passelse:passelse:if i != 2:print('用戶或密碼錯誤,請重新輸入,還有 %d 次機會' % (2 - i))i += 1else:sys.exit('用戶或密碼輸入錯誤超過三次,退出系統,歡迎下次光臨')??? 上述代碼不難,難的是思路,思路很重要,要知道如何一步一步去操作,用的也都是我們常用的知識,其實歸根揭底我們寫程序,大部分使用的都是字符串,字典,列表的功能。還有一些模塊之類的。在寫程序的過程中,思路顯得尤為重要。知道了思路,就考慮如何使用代碼去實現,上面程序中學到了如下知識點;
??? 1、輸出格式對其:print("%-5s %-15s %-10s %-10s %-10s" %("編號","商品名稱","商品價格(元)","商品總數量(個)","商品剩余數量(個)")),上面代碼能夠實現對其格式的功能,讓我們輸出的字符串格式統一,比如上述代碼中,編號左對齊5個字符,商品名稱左對齊15個字符等等;
??? 2、str.center()的使用,如print("歡迎來到你的購物車".center(80,"#"));
?
轉載于:https://www.cnblogs.com/gengcx/p/6970102.html
總結
以上是生活随笔為你收集整理的day2编写购物商城(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq互联php版本
- 下一篇: Kafka controller重设计