• 第四十七天Python学习记录


    作业

    现要求你写一个简单的员工信息增删改查程序,需求如下:

    当然此表你在文件存储时可以这样表示

    1,Alex Li,22,13651054608,IT,2013-04-01
    2,Jack Wang,28,13451024608,HR,2015-01-07
    3,Rain Wang,21,13451054608,IT,2017-04-01
    4,Mack Qiao,44,15653354208,Sales,2016-02-01
    5,Rachel Chen,23,13351024606,IT,2013-03-16
    6,Eric Liu,19,18531054602,Marketing,2012-12-01
    7,Chao Zhang,21,13235324334,Administration,2011-08-08
    8,Kevin Chen,22,13151054603,Sales,2013-04-01
    9,Shit Wen,20,13351024602,IT,2017-07-03
    10,Shanshan Du,26,13698424612,Operation,2017-07-02
    

    1.可进行模糊查询,语法至少支持下面3种查询语法:

    find name,age from staff_table where age > 22
    
    find * from staff_table where dept = "IT"
    
    find * from staff_table where enroll_date like "2013"
    

    2.可创建新员工纪录,以phone做唯一键(即不允许表里有手机号重复的情况),staff_id需自增

    语法: add staff_table Alex Li,25,134435344,IT,2015-10-29
    

    3.可删除指定员工信息纪录,输入员工id,即可删除

    语法: del from staff where  id=3
    

    4.可修改员工信息,语法如下:

    UPDATE staff_table SET dept="Market" WHERE  dept = "IT" 把所有dept=IT的纪录的dept改成Market
    UPDATE staff_table SET age=25 WHERE  name = "Alex Li"  把name=Alex Li的纪录的年龄改成25
    

    5.以上每条语名执行完毕后,要显示这条语句影响了多少条纪录。 比如查询语句 就显示 查询出了多少条、修改语句就显示修改了多少条等。

    注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码!

      1 import os
      2 
      3 
      4 def table_staff():  # 将txt文本信息转换成列表,并向外部函数返回
      5     data_file = open('data.txt', 'r+')
      6     data = data_file.readlines()
      7     data_list = []
      8     for i in data:
      9         data_list.append(str(i).split(','))
     10     return data_list
     11 
     12 
     13 def del_update_share(data_value, data_file1):  # 删除更改共享函数,实现去掉最末行换行符、转换、写文件和更名的功能
     14 
     15     a = (','.join(data_value[len(data_value) - 1]).replace("
    ", "")).split(",")  # 去掉最末行换行符
     16     data_value[len(data_value) - 1] = a
     17 
     18     for i in data_value:
     19         str_i = ','.join(i)
     20         data_file1.write(str_i)
     21 
     22     data_file1.flush()
     23     data_file1.close()
     24 
     25     os.remove("data.txt")
     26     os.rename("data1.txt", "data.txt")
     27 
     28 
     29 def query_staff():  # 员工信息查询,通过切片方式获取用户输入关键字,根据关键字获取用户查询信息
     30     data_value = table_staff()
     31     # print(data_value)
     32     input_query = input("请输入查询语句:")
     33     num1 = input_query[0:input_query.rfind('from', 0) + -1][5:]  # 截取 name,age
     34     num2 = input_query[input_query.rfind('>', 1) + 2:]  # 截取22
     35     num3 = input_query[input_query.rfind('where', 1) + 6:]  # 截取 dept = "IT"
     36 
     37     if num1 == '*':
     38         value = 'dept = "IT"'
     39         if value == num3:
     40             count = 0
     41             for k in data_value:
     42                 if "IT" in k[4]:
     43                     str_i = ','.join(k).replace("
    ", "").replace(",", " ")
     44                     print(str_i)
     45                     count += 1
     46             print("查询到%s条结果!" % count)
     47 
     48         else:
     49             count = 0
     50             for k in data_value:
     51                 if "2013" in k[5]:
     52                     str_i = ','.join(k).replace("
    ", "").replace(",", " ")
     53                     print(str_i)
     54                     count += 1
     55             print("查询到%s条结果!" % count)
     56 
     57     else:
     58         count = 0
     59         for k in data_value:
     60             if int(k[2]) > int(num2):
     61                 print(k[1], k[2])
     62                 count += 1
     63         print("查询到%s条结果!" % count)
     64 
     65 
     66 def add_staff():  # 增加员工信息,phone不能重复,通过a+在data.txt后追加,
     67     data_value = table_staff()
     68 
     69     input_add = input("请输入新增语句:")
     70     input_list = list(input_add[16:].split(','))
     71 
     72     phone_list = []
     73     for i in data_value:
     74         phone_list.append(i[3])
     75 
     76     if input_list[2] in phone_list:
     77         print("手机号已存在!")
     78         exit()
     79 
     80     else:
     81         staff_id = len(data_value) + 1
     82         input_list.insert(0, str(staff_id))
     83         input_list_str = ','.join(input_list)
     84 
     85         data_file = open('data.txt', 'a+')
     86         data_file.write("
    ")
     87         data_file.write(input_list_str)
     88         data_file.close()
     89 
     90         print("新增1条员工记录!")
     91 
     92 
     93 def remove_staff():  # 删除员工信息,利用输入的切片信息作为判断条件,以占硬盘的方式的删除
     94     data_value = table_staff()
     95     input_remove = input('请输入删除语句:')
     96     id_value = input_remove[input_remove.rfind('=', 1) + 2:]
     97 
     98     if input_remove[:32] == "del from staff_table where id = ":
     99         data_file1 = open('data1.txt', 'a+', encoding='utf-8')
    100 
    101         del data_value[int(id_value) - 1]
    102         del_update_share(data_value, data_file1)
    103 
    104         print("删除1条员工记录!")
    105 
    106     else:
    107         print("您输入的格式不正确!")
    108 
    109 
    110 def update_staff():  # 修改员工信息,利用输入的切片信息作为判断条件,以占硬盘的方式的修改
    111     data_value = table_staff()
    112 
    113     input_update = input('请输入修改语句:')
    114     if input_update[:22] == "UPDATE staff_table SET":
    115         num1 = input_update[:35][29:]  # 截取Market
    116         num2 = input_update[:29][27:]  # 截取age
    117 
    118         data_file1 = open('data1.txt', 'a+', encoding='utf-8')
    119         if input_update[:28] == "UPDATE staff_table SET dept=":
    120             count = 0
    121             for i in data_value:
    122                 if i[4] == 'IT':
    123                     i[4] = num1
    124                     count += 1
    125 
    126             del_update_share(data_value, data_file1)
    127             print("您修改了%s条员工信息!" % count)
    128 
    129         elif input_update[:27] == "UPDATE staff_table SET age=":
    130             count = 0
    131             for i in data_value:
    132                 if i[1] == 'Alex Li':
    133                     i[2] = num2
    134                     count += 1
    135 
    136             del_update_share(data_value, data_file1)
    137             print("您修改了%s条员工信息!" % count)
    138 
    139         else:
    140             print("您输入的格式不正确!")
    141 
    142     else:
    143         print("您输入的格式不正确!")
    144 
    145 
    146 while True:  # 一直循环主程序,直到用户选择功能后退出
    147     print(
    148         '欢迎进入员工信息增删改查程序'.center(50, '*'), """
    149     1. 模糊查询  (语法: find name,age from staff_table where age > 22 
    150                        find * from staff_table where dept = "IT"
    151                        find * from staff_table where enroll_date like "2013" )
    152                        
    153     2. 新增信息  (语法: add staff_table Alex,25,134435344,IT,2015-10-29 )
    154     
    155     3. 删除信息  (语法: del from staff_table where id = 3)
    156     
    157     4. 修改信息  (语法: UPDATE staff_table SET dept="Market" WHERE dept = "IT"
    158                        UPDATE staff_table SET age=25 WHERE name = "Alex Li" )
    159     5. 退出                  
    160     """,
    161         '欢迎进入员工信息增删改查程序'.center(50, '*'))
    162 
    163     choice = int(input("请选择要进入的功能序号:"))
    164     if choice == 1:
    165         print("成功进入查询功能".center(50, '*'))
    166         query_staff()
    167         break
    168 
    169     elif choice == 2:
    170         print("成功进入新增功能".center(50, '*'))
    171         add_staff()
    172         break
    173 
    174     elif choice == 3:
    175         print("成功进入删除功能".center(50, '*'))
    176         remove_staff()
    177         break
    178 
    179     elif choice == 4:
    180         print("成功进入新增功能".center(50, '*'))
    181         update_staff()
    182         break
    183 
    184     elif choice == 5:
    185         print("退出成功!")
    186         break
    187     else:
    188         print("您输入的信息有误!")

    注意:此代码有个bug,只能顺序增加和删除,不能从中间删除和添加,从中间删除后,会导致staff_id 和 索引的混乱,

  • 相关阅读:
    点击刷新验证码
    自定义shiro实现权限验证方法isAccessAllowed
    trackerClient.getConnection()为null
    spring boot集成FastDFS
    云服务器80端口无法访问
    linux搭建FastDFS文件服务器
    maven仓库有jar包还是报错怎么办?
    input表单强制大小写
    springboot集成freemarker静态资源无法访问
    idea 错误: 找不到或无法加载主类
  • 原文地址:https://www.cnblogs.com/xudachen/p/8464048.html
Copyright © 2020-2023  润新知