Windowspython修改文件权限777_User

# 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