• python-作业:员工信息表


    程序可实现以下功能:
    1、查询,输入select name,age from staff_table where age > 22,查询到符合要求的信息;
    输入select * from staff_table where dept = "IT",查询到符合要求的信息;
    输入select * from staff_table where enroll_date like "2013",查询到符合要求的信息。
    2、创建,输入insert Mickle,22,13651054608,IT,2013-04-01,加信息加入的员工信息表中。
    3、删除,输入delect id,将指定的id号员工信息删除。
    4、修改,输入update staff_table set dept = "Market" where dept = "IT",将要修改的内容修改。

    程序还提供help功能,为用户输入正确的sql语句格式提供帮助。

    import os           #导入os模块,方便文件的删除和改名
    
    def info_display():      #打印程序启动信息
        print("-".center(60, "-"))
        print("欢迎来到员工管理系统".center(50," "))
        print("【输入help显示帮助信息】".center(50, " "))
        print("-".center(60, "-"))
        sql = input("请输入33[1;31msql33[0m信息>>>>").strip("")
        if sql == "q" or sql == "quit":                #用户如果输入q,程序退出
            exit(" Bye Bye ".center(60, "-"))
        elif sql == "help":                            #用户输入help,打印help信息,help信息为打印的格式
            print("33[1;35m 查询 输入格式:
    	select name,age from staff_table where age > 2233[0m")
            print("33[1;35m 创建 输入格式:
    	insert Mickle,22,13651054608,IT,2013-04-0133[0m")
            print("33[1;35m 修改 输入格式:
    	update staff_table set dept = "Market" where dept = "IT"33[0m")
            print("33[1;35m 删除 输入格式:
    	delete 533[0m")
        else:
            sql_parse(sql)                              #用户输入正确的sql语法,调用sql解析函数
    
    def sql_parse(sql):                                #对用户输入的sql语句进行解析,根据sql语句调用不同的函数
        func_choice = {"insert": insert, "delete": delete, "update": update, "select": select}
        sql_list = sql.replace(",", " ").split()  # 将sql解析成列表形式
        if sql_list[0] == "select":                   #如果用户输入的sql语句是查询
            sql_dict = {"from": [], "where": [], "limit": []}
            tag = False
            for item in sql_list:                        #根据sql解析出sql_dict
                if tag and item in sql_dict:
                    tag = False
                if not tag and item in sql_dict:
                    tag = True
                    key = item
                    continue
                if tag:
                    sql_dict[key].append(item.strip('"'))
            func_choice.get(sql_list[0])(sql_dict)                  #解析出sql_dict后,传入查询函数,并调用查询函数
        elif sql_list[0] == "insert":                        #如果用户输入的sql语句是创建
            sql_dict = {}
            sql_list.remove("insert")
            sql_dict.setdefault("values",sql_list)                 #解析出sql_dict,传入创建函数
            insert(sql_dict)                                           #调用创建函数
        elif sql_list[0] == "delete":                               #解析出sql_dict后,传入删除函数,并调用查询函数
            delete_id = int(sql_list[1])                                #获取用户要删除的id
            delete(delete_id)                                       #调用删除函数
        elif sql_list[0] == "update":                                 #如果用户输入的sql语句是修改
            sql_dict = {"set":[],"where":[],"update":[]}
            tag = False
            for items in sql_list:                                #根据用户的sql,解析出sql_dict字典
                if tag and items in sql_dict:
                    tag = False
                if not tag and items in sql_dict:
                    tag = True
                    key = items
                    continue
                if tag:
                    sql_dict[key].append(items.strip('"'))
            update(sql_dict)                                 #传入修改函数,并调用修改函数
        return sql_list
    
    def insert(sql_dict):                                     #创建信息函数
        with open("staff_table","ab+") as f:
            offs = -100
            while True:
                f.seek(offs,2)
                lines = f.readlines()
                if len(lines) > 1:
                    last = lines[-1]
                    break
                offs *= 2
            last = last.decode(encoding="utf-8")
            last_id = int(last.split(",")[0])
            new_id = last_id + 1
            record = sql_dict.get("values")
            record.insert(0,str(new_id))
            record_str = ",".join(record)+"
    "
            f.write(bytes(record_str,encoding="utf-8"))
            f.flush()
            print("33[1;31m创建成功 33[0m")
    
    def delete(delete_id):                               #删除函数
        with open("staff_table","r",encoding="utf-8") as f1,open("staff_table_bak","w",encoding='utf-8') as f2:
            del_count = 1
            for line in f1:
                if del_count != delete_id:
                    f2.write(line)
                elif del_count == delete_id:
                    pass
                del_count += 1
        print("33[1;31m删除成功 33[0m")
        os.remove("staff_table")                      #删除原员工信息文件
        os.rename("staff_table_bak","staff_table")              #修改新员工信息文件名
    
    def update(sql_dict):                             #修改函数
        set_list = sql_dict.get("set")                   #获取要修改的内容
        set_key = set_list[0]
        where_list = sql_dict.get("where")               #获取要修改的文件内容
        with open("staff_table", "r", encoding="utf-8") as f1, open("staff_table_bak", "w", encoding='utf-8') as f2:
            for line in f1:
                title = "id,name,age,phone,dept,enroll_date"
                dic = dict(zip(title.split(","),line.split(",")))          #将文件每一行打包成字典的形式
                if logic_action(dic,where_list):                           # 逻辑判断,调用逻辑判断函数
                    line = line.replace(dic[set_key],set_list[2])           #修改需要修改的那一行内容
                f2.write(line)                                              #将原文件写进新文件
        print("33[1;31m修改成功 33[0m")
        os.remove("staff_table")
        os.rename("staff_table_bak", "staff_table")
    
    def select(sql_dict):                                         #查询函数
        title = "id,name,age,phone,dept,enroll_date"
        f = open("staff_table", "r", encoding="utf-8")    # 1、找到数据库
        res = []
        for line in f:
            dict1 = dict(zip(title.split(","), line.strip().split(",")))
            where_list = sql_dict.get("where")
            if len(where_list) != 0:
                if logic_action(dict1, where_list):  # 逻辑判断,调用逻辑判断函数
                    res.append(line.strip())
            else:
                res = f.readlines()
        print("查询到的信息有 33[1;35m %s 33[0m 条"%len(res))
        for i in res:
            print("分别是33[1;35m [%s]33[0m "%i)
        return res
    
    def logic_action(dict1, where_list):       #逻辑判断函数,如果文件的信息符合要求,就返回True
        tag = False
        if where_list[1] == "<":
            if dict1[where_list[0]] < where_list[2]:
                tag = True
        elif where_list[1] == "=":
            if dict1[where_list[0]] == where_list[2]:
                tag = True
            else:pass
        elif where_list[1] == ">":
            if dict1[where_list[0]] > where_list[2]:
                tag = True
            else:pass
        elif where_list[1] == "like":
                if where_list[2] in dict1[where_list[0]]:
                    tag = True
        return tag
    
    while True:
        try:
            info_display()
        except IndexError as e:
            print("【%s】,请输入正确的格式"%e)              #如果用户输入的格式不正确,就打印提示
    

      

  • 相关阅读:
    SSRS应用理解与实现
    idea2022.1乱码问题
    yum安装mysql8
    curl fsSL
    IntelliJ IDEA 快捷键大全
    MYSQLcheck管理
    人机验证reCAPTCHA v3使用完备说明
    图像的梯度
    复数的理解
    傅里叶变换的理解
  • 原文地址:https://www.cnblogs.com/japhi/p/6869585.html
Copyright © 2020-2023  润新知