# readme
1、csss.py文件 ,他是一个初始化程序,只运行一次即可
2、有一个目录是data,他是保存客户信息和用户信息
3、customer.py保存了一个客户类
4、user.py保存了一个用户类
5、main.py是客户信息管理程序,可以添加客户信息,删除客户信息,修改客户信息,查询客户信息
6、readme是说明文档
7、
manage_tools.py功能代码,实现了 不同权限显示不同信息的功能。
manage_tools.py功能代码,实现了 添加客户功能。
manage_tools.py功能代码,实现了 修改功能。
manage_tools.py功能代码,实现了 删除功能。
#csss.py
# 文件说明:
# 建立数据源,包括两个客户的信息,三个用户的信息
# 此程序仅需要执行一次即可
# 根据客户姓名当关键字
import shelve
from customer import Customer
from user import User
if __name__ == '__main__':
db = shelve.open('data/customer')
customer = Customer('永盛科技', '北京海淀区', "大型", "张永盛", "市场总监", "13912345678", 5000000)
db[customer.lxr] = customer
customer = Customer('永强科技', '山东青岛市', "中型", "王永强", "技术总监", "13912345678", 2000000)
db[customer.lxr] = customer
db.close()
db = shelve.open('data/user')
user = User('user1', '123456', 1)
db[user.yhm] = user
user = User('user2', '123456', 2)
db[user.yhm] = user
user = User('user3', '123456', 3)
db[user.yhm] = user
db.close()
print("成功建立数据源,包括两个客户的信息,三个用户的信息")#main.py
import shelve
from user import User
from manage_tools import show, add, modify, delete
commands = [show, add, modify, delete]
def get_user():
"""
通过控制台获取用户名和密码,制作一个User对象
:return: 返回一个User对象
"""
username = input('请输入用户名: ')
password = input('请输入密码: ')
return User(username, password)
def check(db, user):
"""
检查用户名和密码是否匹配
:param db: 数据库
:param user: 用户对象
:return: 如果匹配返回True,否则返回False
"""
for u in db:
if user == db[u]:
user.lx = db[u].lx # 找到此人,把记录里的类型给user
return True
return False
def menu():
print('-' * 10 + "系统功能" + '-' * 10)
menus = """ 1 查看客户信息
2 新增客户信息
3 修改客户信息
4 删除客户信息
5 退出系统"""
print(menus)
if __name__ == '__main__':
db = shelve.open('data/user')
print('~' * 20 + "欢迎使用CRM客户管理系统" + '~' * 20)
# 一直输入,只有完全匹配才退出 不需要异常处理
while True:
user = get_user()
if check(db, user):
print('登录成功')
db.close()
break
else:
print('用户名或密码错误')
# #### 以上内容完成 登录的问题 ###########
menu()
while True:
choice = input('请输入功能序号: ')
try:
choice = int(choice)
if choice == 1:
commands[0](user)
pass
elif choice == 2:
commands[1](user)
pass
elif choice == 3:
commands[2](user)
pass
elif choice == 4:
commands[3](user)
pass
elif choice == 5:
break
else:
print('没有此项功能,请重新输入')
except ValueError as e:
print('输入错误,请重新输入')
else:
menu()
print('程序结束')#customer.py
class Customer:
'''
客户信息
'''
def __init__(self, gsmc, dz, gm, lxr, zw, dh, njyl):
"""
:param info: 格式【公司名称 地址 规模 联系人 职务 电话 年交易量】
"""
self.gsmc = gsmc
self.dz = dz
self.gm = gm
self.lxr = lxr
self.zw = zw
self.dh = dh
self.njyl = njyl
def str_nopwd(self):
header =[self.gsmc,self.dz,self.gm,self.lxr,self.zw,self.dh,self.njyl]
# 使用制表符 \t 分隔各列,并使用制表符 \t 进行对齐
formatted = "{:<15}{:<10}{:<8}{:<10}{:<8}{:<12}{:<12}".format(*header)
return formatted
def __str__(self):
return f"{self.gsmc}\t{self.dz}\t{self.gm}\t{self.lxr}\t{self.zw}\t{self.dh}\t{self.njyl}"
def str_pwd(self):
dh = self.dh[:3]+"****"+self.dh[7:]
header = [self.gsmc, self.dz, self.gm, self.lxr, self.zw, dh, self.njyl]
# 使用制表符 \t 分隔各列,并使用制表符 \t 进行对齐
formatted = "{:<15}{:<10}{:<8}{:<10}{:<8}{:<12}{:<12}".format(*header)
return formatted
def __eq__(self, other):
return self.lxr == other.lxr#user.py
class User:
def __init__(self, yhm, mm,lx=1):
self.yhm = yhm
self.mm = mm
self.lx = lx
def __str__(self):
return f"用户名:{self.yhm}, 密码:{self.mm}, 类型:{self.lx}"
# 分析两个对象是否相同
def __eq__(self, other):
if not isinstance(other, User):
# 不是User类型,无法比较
return False
return self.yhm == other.yhm and self.mm == other.mm#manage_tools.py
"""
通过权限管理客户信息
包括,查找 增加,修改,删除
"""
import shelve
import re
from customer import Customer
def show(user):
"""
通过user的类型,显示客户信息
:param user:
:return:
"""
print("显示功能")
if user.lx == 3:
print('您没有权限查看信息')
return
elif user.lx in [1, 2]:
db = shelve.open('data/customer')
header = "序号\t公司名称\t地址\t规模\t联系人\t职务\t电话\t年交易量"
# 使用制表符 \t 分隔各列,并使用制表符 \t 进行对齐
formatted_header = "{:<5}{:<15}{:<10}{:<8}{:<10}{:<8}{:<12}{:<12}".format(*header.split('\t'))
print(formatted_header)
if user.lx == 1:
for i, v in enumerate(db):
print(" " + str(i + 1) + " " + db[v].str_nopwd()) # 打印不带星的字符串
else:
for i, v in enumerate(db):
print(" " + str(i + 1) + " ", end="")
print(db[v].str_pwd()) # 打印带星的字符串
db.close()
return
def add(user):
"""
添加功能 user类型为1的可以加,其他类型不可以加
:param user:
:return:
"""
print("添加功能")
if user.lx != 1:
print("您没有权限添加信息")
return
# 录信息
# 添加:
gsmc = "" # 公司名称
while gsmc == "":
gsmc = input("请输入公司名称")
gsdz = "" # 公司地址
while gsdz == "":
gsdz = input("请输入公司地址")
gsgm = "" # 公司规模
while gsgm == "":
gsgm = input("请输入公司规模(小型 中型 大型)")
gslxr = "" # 公司联系人
while gslxr == "":
gslxr = input("请输入公司联系人")
gszw = "" # 公司联系人职务
while gszw == "":
gszw = input("公司联系人职务")
gsdh = "" # 公司电话
p = re.compile(r'^1[3456789]\d{9}$')
while not p.match(gsdh):
gsdh = input("请输入正确公司电话(开头是1,11位的数字)")
gsjyl = "" # 年交易量
while gsjyl == "":
gsjyl = input("请输入年交易量")
# 将信息组成一个实例对象
c = Customer(gsmc=gsmc, dz=gsdz, gm=gsgm, lxr=gslxr, zw=gszw, dh=gsdh, njyl=gsjyl)
# 查找此对象是否在表里,如果在,添加失败,如果不存入表
db = shelve.open('data/customer')
if c.lxr in db:
print("此联系人已存在,添加失败")
else:
db[c.lxr] = c
print("添加成功")
pass
db.close()
pass
def modify(user):
"""
修改功能
:param user:
:return:
"""
print("修改功能")
# 权限
if user.lx in [2, 3]:
print("您没有权限修改信息")
return
# 先列出所有人名单
db = shelve.open('data/customer')
header = "序号\t公司名称\t地址\t规模\t联系人\t职务\t电话\t年交易量"
# 使用制表符 \t 分隔各列,并使用制表符 \t 进行对齐
formatted_header = "{:<5}{:<15}{:<10}{:<8}{:<10}{:<8}{:<12}{:<12}".format(*header.split('\t'))
print(formatted_header)
for i, v in enumerate(db):
print(" " + str(i + 1) + " " + db[v].str_nopwd()) # 打印不带星的字符串
# 正确输入联系人
gslxr = ""
while gslxr == "":
gslxr = input("请输入要修改的联系人:")
# 查找此人是否存在
# 如果不在
if gslxr not in db:
print("此联系人不存在")
else:
customer = db[gslxr]
# 如果在 提示用户输入要修改的列项【公司名称 地址 规模 职务 电话 年交易量】
lm = "" # 列名
while lm not in ["公司名称", "地址", "规模", "职务", "电话", "年交易量"]:
lm = input("请输入要修改的列项【公司名称 地址 规模 职务 电话 年交易量】:")
tmp = ""
if lm == "公司名称":
jsdlm = "请输入新的公司名称"
while tmp == "":
tmp = input(jsdlm)
customer.gsmc = tmp
elif lm == "地址":
jsdlm = "请输入新的地址"
while tmp == "":
tmp = input(jsdlm)
customer.dz = tmp
elif lm == "规模":
jsdlm = "请输入新的规模"
while tmp == "":
tmp = input(jsdlm)
customer.gm = tmp
elif lm == "职务":
jsdlm = "请输入新的职务"
while tmp == "":
tmp = input(jsdlm)
customer.zw = tmp
elif lm == "电话":
p = re.compile(r'^1[3456789]\d{9}$')
jsdlm = "请输入正确的新的公司电话(开头是1,11位的数字)"
while not p.match(tmp):
tmp = input(jsdlm)
customer.dh = tmp
elif lm == "年交易量":
jsdlm = "请输入新的年交易量"
while True:
try:
tmp = int(input(jsdlm))
customer.njyl = tmp
except ValueError as e:
print("输入错误,请重新输入")
else:
break
db[customer.lxr] = customer
print("修改成功")
db.close()
return
def delete(user):
"""
删除联系人
:param user:
:return:
"""
print("删除功能")
#权限
# 打开数据库
# 先展示所有人
# 提示输入要删除的联系人
# 分析此人是否在表里
# 如果在
# 如果不在
# 关库
# 权限
if user.lx in [2, 3]:
print("您没有权限修改信息")
return
# 先列出所有人名单
db = shelve.open('data/customer')
header = "序号\t公司名称\t地址\t规模\t联系人\t职务\t电话\t年交易量"
# 使用制表符 \t 分隔各列,并使用制表符 \t 进行对齐
formatted_header = "{:<5}{:<15}{:<10}{:<8}{:<10}{:<8}{:<12}{:<12}".format(*header.split('\t'))
print(formatted_header)
for i, v in enumerate(db):
print(" " + str(i + 1) + " " + db[v].str_nopwd()) # 打印不带星的字符串
# 正确输入联系人
gslxr = ""
while gslxr == "":
gslxr = input("请输入要修改的联系人:")
# 查找此人是否存在
# 如果不在
if gslxr not in db:
print("此联系人不存在")
else:
del db[gslxr]
print("删除成功")
db.close()
pass
Windowspython修改文件权限777
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:支付宝订单码java开发
下一篇:UnitySerial
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章