編寫購物商城(1)
作业:购物商城
商品展示,价格
买,加入购物车
付款,钱不够
具体实现了如下功能:
1、可购买的商品信息显示
2、显示购物车内的商品信息、数量、总金额
3、购物车内的商品数量进行增加、减少和商品的删除
4、用户余额的充值
5、用户购买完成进行结账,将最终余额回写到用户文件中。
一、用户文件说明:
kevin 123 50000sky 123 54000mobi 123 80000
其中第一列为用户名,第二列为密码,第三列为帐户余额。
二、流程图如下:
import sys,os,getpass,time def input_handle(s):'''用户输入字符数字转化为数字'''if s.isdigit(): #判断用户输入是否是字符数字 s = int(s) #是的话就进行转换return s def 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_dict def 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] = num modify_dict[index][4] = modify_dict[index][1] * num modify_goods_dict[name]['num'] = modify_dict[index][2] - num b_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_num recharge_now_balance += recharge_num recharge_money += recharge_num recharge_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_balance my_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_num user_shopping_cart[goods_index][4] += my_goods_sum now_balance -= my_goods_sum goods_list[goods_name]['num'] -= buy_num second_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,"#"));
以上是編寫購物商城(1)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用C#編寫布林過濾器演算法布隆過濾器(BloomFilter)是一種空間效率非常高的資料結構,可以用來判斷一個元素是否屬於集合。它的基本思想是透過多個獨立的雜湊函數將元素映射到一個位數組中,並將對應位數組的位元標記為1。當判斷一個元素是否屬於集合時,只需要判斷對應位數組的位是否都為1,如果有任何一位為0,則可以判定元素不在集合中。布隆過濾器具有快速查詢和

如何在C語言中編寫乘方函數乘方(exponentiation)是數學中常用的運算,表示將一個數自乘若干次的操作。在C語言中,我們可以透過寫一個乘方函數來實現這個函數。以下將詳細介紹如何在C語言中編寫乘方函數,並給出具體的程式碼範例。確定函數的輸入和輸出乘方函數的輸入通常包含兩個參數:底數(base)和指數(exponent),輸出為計算得到的結果。因此,我們

飯店預訂系統是一種重要的資訊管理系統,它可以幫助飯店實現更有效率的管理和更良好的服務。如果你想學習如何使用C++來編寫一個簡單的飯店預訂系統,那麼這篇文章將為您提供一個基本的框架和詳細的實作步驟。飯店預訂系統的功能需求在開發飯店預訂系統之前,我們需要確定其實現的功能需求。一個基本的飯店預訂系統至少需要實現以下幾個功能:(1)客房資訊管理:包括客房類型、房間號碼、房

如何透過C++寫一個簡單的掃雷遊戲?掃雷遊戲是一款經典的益智類遊戲,它要求玩家根據已知的雷區佈局,在沒有踩到地雷的情況下,揭示所有的方塊。在這篇文章中,我們將介紹如何使用C++來寫一個簡單的掃雷遊戲。首先,我們需要定義一個二維陣列來表示掃雷遊戲的地圖。數組中的每個元素可以是一個結構體,用於儲存方塊的狀態,例如是否揭示、是否有雷等資訊。另外,我們還需要定義

如何使用C#撰寫動態規劃演算法摘要:動態規劃是求解最最佳化問題的常用演算法,適用於多種場景。本文將介紹如何使用C#編寫動態規劃演算法,並提供具體的程式碼範例。一、什麼是動態規劃演算法動態規劃(DynamicProgramming,簡稱DP)是一種用來求解具有重疊子問題和最優子結構性質的問題的演算法想法。動態規劃將問題分解成若干個子問題來求解,透過記錄每個子問題的解,

如何使用C++寫一個簡單的學生選課系統?隨著科技的不斷發展,電腦程式設計成為了一種必備的技能。而在學習程式設計的過程中,一個簡單的學生選課系統可以幫助我們更好地理解和應用程式語言。在本文中,我們將介紹如何使用C++來寫一個簡單的學生選課系統。首先,我們需要先明確這個選課系統的功能和需求。一個基本的學生選課系統通常包含以下幾個部分:學生資訊管理、課程資訊管理、選

如何用Python寫KNN演算法? KNN(K-NearestNeighbors,K近鄰演算法)是一種簡單而常用的分類演算法。它的思想是透過測量不同樣本之間的距離,將測試樣本分類到最近的K個鄰居。本文將介紹如何使用Python編寫並實作KNN演算法,並提供具體的程式碼範例。首先,我們需要準備一些數據。假設我們有一組二維的資料集,每個樣本都有兩個特徵。我們將資料集分

如何使用C#編寫二分查找演算法二分查找演算法是一種高效率的查找演算法,它在有序數組中尋找特定元素的位置,時間複雜度為O(logN)。在C#中,我們可以透過以下幾個步驟來編寫二分查找演算法。步驟一:準備資料首先,我們需要準備一個已經排好序的陣列作為尋找的目標資料。假設我們要在陣列中尋找特定元素的位置。 int[]data={1,3,5,7,9,11,13
