15-作业:员工信息表查询

1.作业说明

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

 

 

    文件存储时可以这样表示
    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.以上每条语名执行完毕后,要显示这条语句影响了多少条纪录。 比如查询语句 就显示 查询出了多少条、修改语句就显示修改了多少条等。

 

2.我的版本

# # -*- coding:utf-8 -*-
"""
需求基本完成,程序还存在bug,感觉代码写的有点混乱!不太清楚思路
难度有点大,思考了好几天,睡觉都在想。。。
重要知识点:read  readline
            join  split
"""
import os


def find():
    msg = """
    查询格式:1> find * from staff_table where dept = "IT"
             2> find * from staff_table where enroll_date like "2013"
             3> find name,age from staff_table where age > 22
    你要查询的语句格式序号》》"""
    choice = input(msg)
    all_list = []
    list1 = []
    list2 = []
    with open('staff', 'r') as f:
        for i in f:
            list1.append(i)
            i = i.split(',')
            all_list.append(i)
    if choice.isdigit():
        choice = int(choice)
        if choice == 1:
            select = input('find * from staff_table where dept = ').strip()
            select = select[1:-1]
            for index,item in enumerate(all_list):
                #print(item[4])
                if select == item[4]:
                    print(item)
                    print(item[4])
                    print(item[4][0:5])
                    print(list1[index],end='')
                    list2.append(list1[index])
            print('\n查询到了%s条数据'%len(list2))

        elif choice == 2:
            select = input('find * from staff_table where enroll_date like ').strip()
            select = select[1:-1]
            if select.isdigit():
                for index,item in enumerate(all_list):
                    if int(select) == int(item[-1][0:4]):
                        print(list1[index],end='')
                        list2.append(list1[index])
                print('\n查询到了%s条数据'%len(list2))
            else:
                print('你输入的有误')
        elif choice == 3:
            select = input('find name,age from staff_table where age > ').strip()
            if select.isdigit():
                for index,item in enumerate(all_list):
                    if int(select) < int(item[2]):
                        list2.append(list1[index])
                for i in list2:
                    line = i.split(',')
                    print(line[1],line[2])
                print('\n查询到了%s条数据'%len(list2))
            else:
                print('你输入的有误')
        else:
            print('你输入的有误')
    else:
        print('你输入的有误')


def add():
    add_data = '''
    请输入新员工信息:
    [格式:Alex Li,25,134435344,IT,2015-10-29]
    >>'''
    add_data = input(add_data)   # 如何判断输入不是Alex Li,25,134435344,IT,2015-10-29这种格式?
    if len(add_data.split(',')) == 5:
        phone = add_data.split(',')[2]
        data_list = []
        phone_list = []
        with open('staff', 'r+') as f:
            for line in f:
                line = line.split(',')
                data_list.append(line)
                phone_list.append(line[3])
            if phone in phone_list:
                print('该手机号已经存在!')
            else:
                new_index = int(data_list[-1][0])+1
                add_data = str(new_index)+','+add_data
                f.write('\n'+add_data)
                print('添加成功')
    else:
        print('你输入的有误')


def delete():
    del_data = '''
        请输入要删除的员工信息:
        格式: del from staff where id=3
        del from staff where id='''
    del_data = input(del_data)
    if del_data.isdigit():
        del_data = int(del_data)
        f_name = "staff"
        f_new_name = "%s.bak" % f_name
        data_list = []
        f1 = open(f_name, 'r')
        f2 = open(f_new_name, 'w')
        for line in f1:
            line = line.split(',')
            if del_data == int(line[0]):
                line = ','.join(line)
                data_list.append(line)
        if len(data_list) > 0:
            f1.seek(0)
            for line in f1:
                if data_list[0] in line:
                    new_line = ''
                else:
                    new_line = line
                f2.write(new_line)
            print("删除成功")
            f1.close()
            f2.close()
            os.replace(f_new_name, f_name)
        else:
            print('你要删除的用户不存在')

    else:
        print("输入有误请重新输入")


def update():
    update_data = '''
        请输入要修改的员工信息:
        格式:1> UPDATE staff_table SET dept="Market" WHERE  dept = "IT"
              2> UPDATE staff_table SET age=25 WHERE  name = "Alex Li"
        >>>'''
    choice = input(update_data).strip()
    if choice.isdigit():
        choice = int(choice)
        if choice == 1:
            new_dept = input('UPDATE staff_table SET dept=').strip()
            new_dept = new_dept[1:-1]
            old_dept = input('WHERE  dept = ').strip()
            old_dept = old_dept[1:-1]
            f_name = "staff"
            f_new_name = "%s.bak" % f_name
            data_list = []
            list2 = []
            f1 = open(f_name, 'r')
            f2 = open(f_new_name, 'w')
            for line in f1:
                line = line.split(',')
                data_list.append(line)

            for item in data_list:
                if old_dept == item[4]:
                    item[4] = new_dept
                    list2.append(item)
                    new_item = (',').join(item)
                else:
                    new_item = (',').join(item)
                f2.write(new_item)
            if len(list2) > 0 and new_dept:
                f1.close()
                f2.close()
                os.replace(f_new_name, f_name)
                print("修改%s条数据成功" % len(list2))

            else:
                print("你要修改的数据不存在")
        elif choice == 2:
            sql_age = input('UPDATE staff_table SET age=')
            sql_name = input('WHERE  name = ')
            sql_name = sql_name[1:-1]
            f_name = "staff"
            f_new_name = "%s.bak" % f_name
            data_list = []
            f1 = open(f_name, 'r')
            f2 = open(f_new_name, 'w')
            for line in f1:
                line = line.split(',')
                if sql_name == line[1]:
                    data_list.append(line)
            if len(data_list) > 0 and sql_age.isdigit():
                old_line = (',').join(data_list[0])
                data_list[0][2] = sql_age
                new_list = (',').join(data_list[0])
                f1.seek(0)
                for line in f1:
                    if old_line in line:
                        new_line = new_list
                    else:
                        new_line = line
                    f2.write(new_line)
                print("修改%s条数据成功"%len(data_list))
                f1.close()
                f2.close()
                os.replace(f_new_name, f_name)
            else:
                print("你要修改的数据不存在")
        else:
            print("你输入的有误!")
    else:
        print("你输入的有误!")


def main():
    menu = '''
        --------员工信息管理系统------
            1.模糊查询
            2.创建新员工记录
            3.删除员工记录
            4.修改员工信息
        ---------------------------
        '''
    while True:
        print(menu)
        choice = input('q 退出| 输入你的选择>')
        if choice.isdigit():
            choice = int(choice)
            if choice == 1:
                find()
            elif choice == 2:
                add()
            elif choice == 3:
                delete()
            elif choice == 4:
                update()
            else:
                print("11输入错误,请重新输入")
        elif choice == 'q':
            exit()
        else:
            print("输入错误,请重新输入")

if __name__ == '__main__':
    main()

 

3.修改意见

  • 100个elif 是否写100个函数?
  • 变量名命名不规范
  • 先判断用户输入的非法性,再进行下一步
  • read 、readlines 和for i in f :read 的区别
  • join 和 split

 

 4.修改程序

 

 

# # -*- coding:utf-8 -*-
"""
需求基本完成,程序还存在bug,感觉代码写的有点混乱!不太清楚思路
难度有点大,思考了好几天,睡觉都在想。。。
重要知识点:read  readline
            join  split
"""
import os



def find():
    msg = """
    查询格式:1> find * from staff_table where dept = "IT"
             2> find * from staff_table where enroll_date like "2013"
             3> find name,age from staff_table where age > 22
    你要查询的语句格式序号》》"""
    choice = input(msg)
    if choice.isdigit():
        choice = int(choice)

        all_list = []
        all_list2 = []
        find_list = []
        with open('staff', 'r') as f:
            for i in f:
                all_list2.append(i)
                i = i.split(',')
                all_list.append(i)

        if choice == 1:
            select = input('find * from staff_table where dept = ').strip()
            select = select[1:-1]
            for index,item in enumerate(all_list):
                if select == item[4]:
                    print(item)
                    print(item[4])
                    print(item[4][0:5])
                    print(all_list2[index],end='')
                    find_list.append(all_list2[index])
            print('\n查询到了%s条数据'%len(find_list))

        elif choice == 2:
            select = input('find * from staff_table where enroll_date like ').strip()
            select = select[1:-1]
            if select.isdigit():
                for index,item in enumerate(all_list):
                    if int(select) == int(item[-1][0:4]):
                        print(all_list2[index],end='')
                        find_list.append(all_list2[index])
                print('\n查询到了%s条数据'%len(find_list))
            else:
                print('你输入的有误')
        elif choice == 3:
            select = input('find name,age from staff_table where age > ').strip()
            if select.isdigit():
                for index,item in enumerate(all_list):
                    if int(select) < int(item[2]):
                        find_list.append(all_list2[index])
                for i in find_list:
                    line = i.split(',')
                    print(line[1],line[2])
                print('\n查询到了%s条数据'%len(find_list))
            else:
                print('你输入的有误')
        else:
            print('你输入的有误')
    else:
        print('你输入的有误')


def add():
    add_data = '''
    请输入新员工信息:
    [格式:Alex Li,25,134435344,IT,2015-10-29]
    >>'''
    add_data = input(add_data)   # 如何判断输入不是Alex Li,25,134435344,IT,2015-10-29这种格式?
    if len(add_data.split(',')) == 5:
        phone = add_data.split(',')[2]
        data_list = []
        phone_list = []
        with open('staff', 'r+') as f:
            for line in f:
                line = line.split(',')
                data_list.append(line)
                phone_list.append(line[3])
            if phone in phone_list:
                print('该手机号已经存在!')
            else:
                new_index = int(data_list[-1][0])+1
                add_data = str(new_index)+','+add_data
                f.write('\n'+add_data)
                print('添加成功')
    else:
        print('你输入的有误')


def delete():
    del_data = '''
        请输入要删除的员工信息:
        格式: del from staff where id=3
        del from staff where id='''
    del_data = input(del_data)
    if del_data.isdigit():
        del_data = int(del_data)
        f_name = "staff"
        f_new_name = "%s.bak" % f_name
        data_list = []
        f1 = open(f_name, 'r')
        f2 = open(f_new_name, 'w')
        for line in f1:
            line = line.split(',')
            if del_data == int(line[0]):
                line = ','.join(line)
                data_list.append(line)
        if len(data_list) > 0:
            f1.seek(0)
            for line in f1:
                if data_list[0] in line:
                    new_line = ''
                else:
                    new_line = line
                f2.write(new_line)
            print("删除成功")
            f1.close()
            f2.close()
            os.replace(f_new_name, f_name)
        else:
            print('你要删除的用户不存在')

    else:
        print("输入有误请重新输入")


def update():
    update_data = '''
        请输入要修改的员工信息:
        格式:1> UPDATE staff_table SET dept="Market" WHERE  dept = "IT"
              2> UPDATE staff_table SET age=25 WHERE  name = "Alex Li"
        >>>'''
    choice = input(update_data).strip()
    if choice.isdigit():
        choice = int(choice)
        if choice == 1:
            new_dept = input('UPDATE staff_table SET dept=').strip()
            new_dept = new_dept[1:-1]
            old_dept = input('WHERE  dept = ').strip()
            old_dept = old_dept[1:-1]
            f_name = "staff"
            f_new_name = "%s.bak" % f_name
            data_list = []
            list2 = []
            f1 = open(f_name, 'r')
            f2 = open(f_new_name, 'w')
            for line in f1:
                line = line.split(',')
                data_list.append(line)

            for item in data_list:
                if old_dept == item[4]:
                    item[4] = new_dept
                    list2.append(item)
                    new_item = (',').join(item)
                else:
                    new_item = (',').join(item)
                f2.write(new_item)
            if len(list2) > 0 and new_dept:
                f1.close()
                f2.close()
                os.replace(f_new_name, f_name)
                print("修改%s条数据成功" % len(list2))

            else:
                print("你要修改的数据不存在")
        elif choice == 2:
            sql_age = input('UPDATE staff_table SET age=')
            sql_name = input('WHERE  name = ')
            sql_name = sql_name[1:-1]
            f_name = "staff"
            f_new_name = "%s.bak" % f_name
            data_list = []
            f1 = open(f_name, 'r')
            f2 = open(f_new_name, 'w')
            for line in f1:
                line = line.split(',')
                if sql_name == line[1]:
                    data_list.append(line)
            if len(data_list) > 0 and sql_age.isdigit():
                old_line = (',').join(data_list[0])
                data_list[0][2] = sql_age
                new_list = (',').join(data_list[0])
                f1.seek(0)
                for line in f1:
                    if old_line in line:
                        new_line = new_list
                    else:
                        new_line = line
                    f2.write(new_line)
                print("修改%s条数据成功"%len(data_list))
                f1.close()
                f2.close()
                os.replace(f_new_name, f_name)
            else:
                print("你要修改的数据不存在")
        else:
            print("你输入的有误!")
    else:
        print("你输入的有误!")


def main():
    menu = '''
        --------员工信息管理系统------
            1.模糊查询
            2.创建新员工记录
            3.删除员工记录
            4.修改员工信息
        ---------------------------
        '''

    func_dict = {
        '1': find,
        '2': add,
        '3': delete,
        '4': update
    }
    while True:
        print(menu)
        choice = input('q 退出| 输入你的选择>')
        if choice in func_dict:
            func_dict[choice]()
        elif choice == 'q':
            exit()
        else:
            print("输入错误,请重新输入")

if __name__ == '__main__':
    main()
View Code

 

5.文件读取

# 几种不同的读取和遍历文件的方法比较:
#
# 如果文件很小,read()一次性读取最方便;
# 如果不能确定文件大小,反复调用read(size)比较保险;
# 如果是配置文件,调用readlines()最方便。
# 普通情况,使用for循环更好,速度更快。

with open('aaa.txt', 'r') as f:
    data = f.read()
print(data)
print(type(data))
# 1,Alex Li,22,13651054608,IT,2013-04-01
# 2,Jack Wang,28,13451024608,HR,2015-01-07
# 3,Rain Liu,25,1383235322,Sales,2016-04-22

all_list=list(data)
print(all_list)  # ['1', ',', 'A', 'l', 'e', 'x', ' ', 'L', 'i', ',', '2', '2', ',', '1', ]

msg_list = []
line = data.split(',')  # ['1', 'Alex Li', '22', '13651054608', 'IT', '2013-04-01\n2',]
print(line)
msg_list.append(line)
print(msg_list)     # [['1', 'Alex Li', '22', '13651054608', 'IT', '2013-04-01\n2',]]

 

 

with open('aaa.txt', 'r') as f:
    data = f.readlines()
print(data)          # ['1,Alex Li,22,13651054608,IT,2013-04-01\n', '2,Jack Wang,28,13451024608,HR,2015-01-07\n']
print(type(data))    # <class 'list'>

split_list = []
for line in data:
    item = line.split(',')   # ['1', 'Alex Li', '22', '13651054608', 'IT', '2013-04-01\n2',]
    split_list.append(item)
print(split_list)    # [['1', 'Alex Li', '22', '13651054608', 'IT', '2013-04-01\n2',]]

 

 

all_list = []
with open('aaa.txt', 'r') as f:
    for line in f:
        all_list.append(line)  # 1,Alex Li,22,13651054608,IT,2013-04-01\n
print(all_list)  # ['1,Alex Li,22,13651054608,IT,2013-04-01\n', '2,Jack Wang,28,13451024608,HR,2015-01-07\n']

 

 

 

6.join split方法

# join方法 split方法
# list---> str
data = ('\n').join(all_list)
print(data)



# str --> list
li = data.split(',')
print(li)

  

 

 

 

 

 







posted @ 2018-02-08 17:15  venicid  阅读(435)  评论(0编辑  收藏  举报