用python写了一个购物车程序,主要是练习,代码如下

主入口文件:main.py

 1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 #先调用用户登录函数,在进行逻辑模块的循环
5 #入口程序
6
7 import enter,operate
8 if __name__ == '__main__':
9 print("\033[35m----------------------------请输入用户名密码----------------------------\033[0m")
10 enter.user()
11 while True:
12 operate.welcome()
入口

逻辑处理文件operate.py

#!/usr/bin/env python
#
-*- coding:utf-8 -*-

#逻辑结构
#
主要判断用户的输入,根据输入的关键字,来调用不同功能的函数

#初始化商品
huowu = {
"iphone6splus" : 6000,
"huaweimate8" :3700,
"asus" :4299,
"alienware" :21999,
"strix-gtx970" :3649,
}
#初始化个空的购物车
huo = {
}
#初始化话空的列表,保存当前登录用户
name = []
#功能判断函数
def welcome():
import enter,os,lists
s_1
= raw_input("请输入操作:")#捕获用户操作
if s_1 == 'car':
enter.catg()
elif s_1 == 'help':
print('''\033[31m
car___________________商品
help__________________帮助
buy___________________添加至购物车
shop__________________购物车结算
und___________________购物车移除商品
top___________________充值
bal___________________余额
enr___________________注册用户
exit__________________返回
\033[0m
''')
elif s_1 == 'buy':
enter.mone()
elif s_1 == 'shop':
print ("\033[35m-------------------------------已进入购物车-------------------------------\033[0m")
enter.shopp()
elif s_1 == 'und':
enter.dele()
elif s_1 == 'top':
enter.topup()
elif s_1 == 'bal':
b_1
= "\033[36m---------------------当前用户:{b_2},余额为:{b_3}----------------------\033[0m"
print b_1.format(b_2 = name[0],b_3 = lists.die[2])
elif s_1 == 'enr':
enter.login()
elif s_1 == 'exit':
os._exit(0)
逻辑处理

函数模块enter.py

  1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 #读出当前存在的用户名和密码,并生成字典
4 with open('users','rU')as u_1 :
5 ss = u_1.readlines()
6 dic = dict()
7 for lind in ss:
8 lind = lind.strip().split(':')
9 dic[lind[0]] = lind[1]
10 #用户登录欢迎模块
11 def welcome(wel):
12 sent = "!\033[31m{users}\033[0m!Welcome to the shopping mall"#设置欢迎信息
13 aa = (sent.format(users=wel)) #欢迎信息
14 scr = 80 #设置一个长度
15 text = len(aa)-9 #读出语言的长度,并减去9
16 box = text #设置变量
17 left = (scr - box) // 2 #设置前方空格的空隙
18 #下方输出的内容可以根据输入字符串的长度进行变化
19 print #输出空
20 print ' ' * left + '+'+ '-'*(box) + '+'
21 print ' ' * left + '|'+ ' '*text + '|'
22 print ' ' * left + '|'+aa + '|'
23 print ' ' * left + '|'+ ' '*text + '|'
24 print ' ' * left + '+'+ '-'*(box) + '+'
25
26
27 #用户登录验证模块
28 def user():
29 import operate #加载operate文件
30 while True: #设置循环
31 user_1 = raw_input("请输入你要登录的用户名:") #获取用户名密码
32 user_2 = raw_input("请输入你要登录的密码:")
33 operate.name.append(user_1) #将用户名写入operate.name,方便以后调用
34 if user_1 in dic.keys(): #判断当前用户是否存在,根据前面生成的所有用户名密码的列表
35 passw = dic[user_1] #如果用户存在则,根据字典的值传入变量
36 if user_2 == passw: #判断字典中密码和用户输入是否一致
37 welcome(user_1) #一致则调用用户欢迎模块
38 break #登录成功退出循环
39 else:
40 print("\033[35m您输入的账号或密码错误\033[0m")#不匹配则重新输出
41 print("")
42 else:
43 print("\033[35m您输入的账号或密码错误\033[0m")#不匹配则重新输出
44 print("")
45
46
47 #购买模块
48 def shopp():
49 import operate #加载operate
50 if not operate.huo: #判断huo是否为空,huo是设置为空的字典,存放当前用户所添加的东西,
51 print("\033[35m-------------------------------购物车没货物-------------------------------\033[0m")#如果是空这输出
52 else: #不为空则结算
53 cart() #加载显示购物车物品的函数
54 shop_1 = raw_input("是否进行结算(y/n):") #是否结算
55 if shop_1 == "y" :#判断用户输入
56 deal() #调用结算模块
57 elif shop_1 == "n" :#判断用户输入
58 print ("\033[35m-------------------------------已退出购物车-------------------------------\033[0m")
59 #显示购物车内容
60 def cart():
61 import operate #加载operate
62 shop_1 = 1 #为物品编号设置
63 for sho_1 in operate.huo.keys(): #从用户的存放货物的字典逐个读取货物名称
64 if sho_1 in operate.huowu.keys(): ##分别读取货物的键值对,这里的逻辑不太好没时间更改,后续更改
65 #设置中间的下划线长度
66 sh_2 = len(sho_1) #计算长度
67 sh_3 = 50-sh_2 #设置下划线长度
68 ca_4 = ("[{s_1}]商品名称:{s_2}"+"_"*sh_3+"{s_3}元")#设置提示信息
69 print ca_4.format(s_1=shop_1,s_2=sho_1,s_3=operate.huo[sho_1])#设置提示信息
70 shop_1 += 1#将货物编号加一
71
72
73
74 #支付模块
75 def deal():
76 import operate,lists #加载operate,lists
77
78 #支付过程
79 aas = int(lists.die[2]) #将lists的2索引(金额),转换成int类型
80 for sa in operate.huo.keys(): #sa从字典huo取key
81 sa_1 = int(operate.huo[sa]) #sa_1等于转换类型后的huo[sa]的值(购物车商品金额)
82 if aas >= sa_1: #判断文件中的当前用户金额是否大于等于huo[sa]的值
83 aas = aas - sa_1 #如果大于则进行运算用已存金额减去商品金额
84 lists.die[2] = aas #并将列表爹die[2](也就是用户的资金)更新成买完商品的钱
85 del operate.huo[sa] #然后删除该商品
86 ss_1 = '支付商品\033[35m{n}\033[0m成功,实付金额为:\033[31m{n_1}\033[0m元!' #设置提示信息
87 print ss_1.format(n=sa,n_1=sa_1) #设置提示信息
88 else:#当金钱不足的时候进行
89 ss_2 = '支付商品\033[35m{n}\033[0m失败,应付金额为:\033[31m{n_1}\033[0m元!请充值!'#设置提示信息
90 print ss_2.format(n=sa,n_1=sa_1)#设置提示信息
91 #写入文件过程,创建一个当前所有存在用户的列表,这样就可以判断当前用户在文件的第几行
92 clo = lists.dia.index(lists.aaa) #判断当前用户所在列表的位置
93 f=open('users','r+') #打开文件
94 flist=f.readlines() #按行读取
95 aa = '{a_1}:{a_2}:{a_3}\n' #设置文件内容
96 flist[clo]= aa.format(a_1=lists.die[0],a_2=lists.die[1],a_3=lists.die[2])#clo就是当前用户所在的文件行数,后面加上内容,a_1 当前用户 a_2 当前用户密码 a_3 当前用户余额
97 f=open('users','w') #以w的方式打开文件
98 f.writelines(flist) #写入
99 f.close()#关闭
100 print ("\033[35m-------------------------------已退出购物车-------------------------------\033[0m")
101
102 #从购物车删除模块
103 def dele():
104 import operate #加载模块
105 if not operate.huo: #如果为空则输出没有货物
106 print("购物车没有物品")
107 else:
108 cart() #否则调用显示购物车模块
109 while True:#循环
110 saa = raw_input("请输入删除商品的名称:")#删除的物品名称
111 if saa == 'exit':#判断输入exit为退出
112 break
113 elif saa in operate.huo.keys():#判断用户输入名称是否正确
114 del operate.huo[saa] #正确则删除
115 print('\033[35m-------------------------------删除商品成功!!--------------------------------\033[0m')
116 #退出删除判断
117 saa_1 = raw_input("是否退出(y/n):")
118 if saa_1 == 'y':
119 break
120 else:
121 print "\033[31m您输入有误请重新输入\033[0m"
122
123 #充值模块这里还可以写只有admin可以充值,或者验证充值用户的密码
124 def topup():
125 import lists#加载模块主要加载当前用户名
126 clb = lists.dia.index(lists.aaa) #判断当前用户所在列表的位置
127 while True:
128 q_1 = raw_input("请输入充值金额以整数为单位(元):") #输入充值金额
129 q_2 = str.isdigit(q_1) #判断是否是数字
130 if q_1 == 'exit' : #exit退出充值
131 break
132 if q_2 == True: #是数字则进行充值
133 q_1 = int(q_1) #转换类型
134 q_3 = type(q_1) #判断类型,主要通过长整形限制充值金额
135 if q_3 == int: #判断类型
136 lists.die[2] = int(lists.die[2]) #调用lists(当前用户的信息,账号,密码,余额),转换类型
137 lists.die[2] = lists.die[2] + q_1 #进行余额和充值金额相加
138 f=open('users','r+') #打开文件
139 flist=f.readlines() #按行读取
140 aa = '{a_1}:{a_2}:{a_3}\n' #设置文件内容
141 flist[clb]= aa.format(a_1=lists.die[0],a_2=lists.die[1],a_3=lists.die[2])#clo就是当前用户所在的文件行数,后面加上内容,a_1 当前用户 a_2 当前用户密码 a_3 当前用户金额
142 f=open('users','w') #以w的方式打开文件
143 f.writelines(flist) #写入
144 f.close() #关闭文件
145 vv_1 = ('充值成功,充值金额为\033[31m{vv}\033[0m,当前余额为\033[31m{v_1}\033[0m')
146 print(vv_1.format(vv=q_1,v_1=lists.die[2]))
147 break
148 else:#如果不是整形数字,是长整形数字则金额过大
149 print("\033[31m您输入的金额过大\033[0m")
150 else:#输入不是数字则输入有误
151 print("\033[31m---------------------------------输入有误---------------------------------\033[0m")
152
153
154 #商品模块
155 def catg():
156 import operate#读取模块
157 print("\033[35m---------------------------------购物商品---------------------------------\033[0m")#输出
158 car = 1#设置商品编号
159 for ca_1 in operate.huowu:#分别读取货物的键值对
160 ca_2 = len(ca_1) #读出键值对的长度
161 ca_3 = 50-ca_2 #中间下划线长度
162 ca_4 = ("[{s_1}]商品名称:{s_2}"+"_"*ca_3+"{s_3}元")#输出信息
163 print ca_4.format(s_1=car,s_2=ca_1,s_3=operate.huowu[ca_1])#输出信息
164 car += 1
165 print("\033[35m---------------------------------购物商品---------------------------------\033[0m")
166
167
168 #添加模块
169 def mone():
170 import operate
171 while True:#添加购物车模块
172 mon = raw_input("请输入加入购物车产品的名称:")#输入物品名称
173 if mon in operate.huo.keys(): #判断货物是否存在
174 print("\033[31m------------------------商品已经添加请先到购物车结算----------------------------\033[0m")
175 elif mon in operate.huowu.keys():#如果货物存在
176 print("\033[35m---------------------------添加成功请到购物车结算-------------------------------\033[0m")
177 operate.huo[mon] = operate.huowu[mon] #则添加至购物车的字典中
178 elif mon == "exit":#exit退出
179 print("\033[35m---------------------------------退出购物---------------------------------\033[0m")
180 break
181 else:#名称不对添加失败
182 print("\033[31m添加失败请核对产品名称\033[0m")
183
184 #注册用户模块,这里还可以写只有admin可以创建用户
185 def login():
186 import lists
187 #为了防止在运行中能够创建多个相同名称的用户
188 while True:
189 with open('users','rU')as u_3: #过程如上
190 ads = u_3.readlines()
191 diz = []
192 for lin in ads:
193 lin = lin.strip().split(':')
194 diz.append(lin[0])
195 w_1 = raw_input("请输入创建的用户名:")#创建的用户名称
196 if w_1 in diz:#判断用户是否存在
197 print('\033[31m----------------------------用户已存在请重新输入------------------------------\033[0m')
198 elif w_1 == "exit":
199 break
200 else:
201 w_2 = raw_input("请输入用户密码(大于5位数)")#设置的密码这里可以做更安全的双向认证,因为PYcharm对隐身的密码模块支持不好所以没使用
202 w_3 = len(w_2)#计算密码长度
203 if w_3 > 5 :#密码长度大于5
204 output = open('users', 'a') #打开文件以a的方式
205 aa = '{a_1}:{a_2}:{a_3}\n' #设置文件内容
206 flist= aa.format(a_1=w_1,a_2=w_2,a_3=10000)#clo就是当前用户所在的文件行数,后面加上内容,a_1 当前用户 a_2 当前用户密码 a_3 当前用户余额
207 output.write(flist) #写入
208 output.close()#关闭文件
209 ll = "\033[31m--------------------------成功创建用户:{l_1}------------------------------\033[0m"
210 print ll.format(l_1=w_1)
211 break
212 else:
213 print("\033[31m----------------------------密码长度过短------------------------------\033[0m") #密码过短从新设置
函数模块

全局调用模块lists.py

 1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 import operate
5 aaa = operate.name[0]
6
7
8
9 #生成当前用户,信息的列表
10 with open('users','rU')as u_2 : #打开文件users
11 ss = u_2.readlines() #设置变量ss等于按行读取的u_2
12 die = [] #设置空列表,保存登录用户的信息
13 for line in ss: #for循环从ss按行拿区内容
14 if aaa in line: #判断登录用户是否在line中,当line包含用户的时候则进行一下处理
15 line = line.strip().split(':') #分割字符串
16 die.append(line[0]) #在列表中添加元素 0索引代表用户
17 die.append(line[1]) #在列表中添加元素 1索引代表密码
18 die.append(line[2]) #在列表中添加元素 2索引代表金额
19 #生成
20 with open('users','rU')as u_3: #过程如上
21 ads = u_3.readlines()
22 dia = []
23 for lin in ads:
24 lin = lin.strip().split(':')
25 dia.append(lin[0])
全局调用

用户数据保存文件:users

文件格式为:

admin:123.com:10000

主要实现思路:

(1)所有的用户数据存在users上,默认admin,123.com user,123.com
(2)实现思路在程序中捕获用户输入的关键字,借鉴linux,根据命令不同调用不同的
  函数。
  ①商品展示功能,通过一个字典为商品,然后for循环,进行格式的输出前面的编
  号利用计数器原理
  ②添加至购物车,主要当用户登录的时候生成一个空的字典,然后根据用户输入名称
  与商品字典进行匹配,成功匹配后就加入空的字典,这里没使用序号加入
  ③购物车结算,在登录函数中将验证成功的用户名传入一个空的列表,通过将users
  文件的数据读取出来,然后以:进行分割,转换成字典,这样就可以匹配当前登录
  用户的余额,然后进行减的操作,并在购物车字典中删除此商品在写入的时候,
  没学awk,所以采用指定的方法,为了获取用户在文件的行数,我先将所有用户
  生成一个列表,然后进行匹配读出下标这样就可以正常的执行了
  ④删除商品,将匹配的用户输入,跟用户的购物车的字典匹配,然后删除
  ⑤充值,根据保存的用户列表,匹配文件中的用户余额,然后根据用户输入的金额进
  行相加,写入文件,这里可以做只有admin才可以充值,限定单词充值金额啥的
  ⑥余额,根据前面生成的当前登录用户的信息列表进行输出
  ⑦注册用户,因为数据结构users就是,用户名,密码,金额,所以只需捕获用户名
  密码就可,这里加入用户验证,不能生成相同名称,密码最短6位,为了防止重
  副生成相同用户,在这里吧读取电当前用户名加入while循环,生成一次,下次
  生成用户就加载一次。
(3)使用help可以输出帮助



更多相关文章

  1. 读取python中的unicode文件,该文件以与python源代码相同的方式声
  2. python 操作excel 读写同一个文件
  3. Python csv。读者:我如何返回到文件的顶部?
  4. 使用自定义qemu二进制文件与libvirt失败?
  5. 【python coding 1:网络检测】ping本地文件里的ip地址
  6. 如何输出NLTK块到文件?
  7. python 读写文本文件
  8. 批量重命名文件——python实现
  9. Django:测试成功加载静态文件

随机推荐

  1. curl获取网页内容出现乱码或为空的解决方
  2. PHP: Join two separate mysql queries i
  3. 从PHP智能模板中剥离空白
  4. 如何在“”之前删除多个UTF-8 BOM序列?
  5. php吧字符串直接转换成数组处理
  6. 为什么我对JSON对象的AJAX调用会返回其特
  7. PHP print_r 转换/还原为数组
  8. 如何在没有任何扩展名的php中保存图像
  9. thinkphp框架里怎么用linux的crontab写ph
  10. MySQL或PHP动态地将行转换为列