python--员工信息管理系统编译及思路
员工管理系统,顾名思义,应该具有增删查改功能。拿到需求后,应该按照一定的流程依次编写,最后达到程序的统一和兼容。 系统需求如下:
文件存储格式如下:
id,name,age,phone,job
1,Alex,22,13651054608,IT
2,Egon,23,13304320533,Tearcher
3,nezha,25,1333235322,IT
现在需要对这个员工信息文件进行增删改查。
基础必做:
a.可以进行查询,支持三种语法:
select 列名1,列名2,… where 列名条件
支持:大于小于等于,还要支持模糊查找。
示例:
select name,age where age>22 #> <
select * where job=IT # =
select * where phone like 133 #看起来像 ‘abc’in ‘1232abcahj’
#充分的利用函数
#文件处理 字符串处理
#str #where split
进阶选做:
b.可创建新员工记录,id要顺序增加
c.可删除指定员工记录,直接输入员工id即可
d.修改员工信息
语法:set 列名=“新的值” where 条件
#先用where查找对应人的信息,再使用set来修改列名对应的值为“新的值”
注意:要想操作员工信息表,必须先登录,登陆认证需要用装饰器完成
其他需求尽量用函数实现
-----------------------------------------------------------------------------------------------------------------------
这样我们拿到了需求,首先应该按照需求来设计流程,然后按照流程再编写程序。首先应该想到的就是查询功能的实现。
代码如下:
def cha():
f = open('员工信息',encoding='utf-8') #打开文件,编码格式utf-8,文件名员工信息,存储格式按需求
def chaxun(a):
xinxi,tiaojian=a.split('where') #将获取到的内容进行分割,分割标志是'where',分割原因就是由where分别可以分割出条件和信息
xinxi = xinxi.strip().strip('select') #将信息去空格去掉select 这样可以得到查询的信息了
if '*'in xinxi and 'job'in tiaojian: #如果得到的信息中含有*而且条件中含有job
j,d=tiaojian.strip().split('=') #那么条件按等号分割,将条件d分割出来
d = d.strip()
for line in f: #循环每一行内容
i = line.strip().split(',') #内容去空格,按照逗号分割
#print(line)
job = i[4] #job在第五位
if job==d: #拿出第五位数据对比,如果相等
print(line) #打印这行数据,就是查询的,因为前面的循环循环打印所有符合条件的数据
else:
continue
elif '*'in xinxi and 'phone'in tiaojian: #如果*在信息中,然后phone 在条件中
j, d = tiaojian.strip().split('like') #按照like将条件分割
d = d.strip()
for line in f:
i = line.strip().split(',')
# print(line)
phone = i[3] #phone在数据第四位
if d in phone: #如果分割出的条件在phone数据中
print(line) #打印这条数据
else:
continue else:
for line in f: #如果不在两个条件中,进入第三个语法
i = line.strip().split(',')
age = i[2] #age数据在第三位
age = int(age) #将age数据变成int整型,才能继续接下来的判断
if eval(tiaojian): #用eval直接将条件信息转化成可以用的条件,就可以直接调用之前int的age
print(line) #打印查询到的年龄数据
else:
continue
chaxun_shuru=input('请输入查询语法') #input让用户键入条件
v = chaxun(chaxun_shuru)
return v
if n==1: #主界面中要用到的启动条件
cha()
---------------------------------------------------------------------------------------------------------------------------------
查询部分的代码写完了,就可以注释了,因为这样编写其他部分代码的时候会妨碍运行,接下来按照客户需求,编写创建新员工信息部分的代码
代码如下:
def chuang():
f = open('员工信息',encoding='utf-8',mode='r') #同上,首先要处理员工信息的文件首先要调用文件数据
def cha():
print('请输入要创建的员工记录格式如Alex,22,13651054608,IT'
'name,age,phone,job')
yuangong = input('输入:') #用户按照创建格式来输入创建的员工信息
i=1 #先设定一个变量值为1
li=[] #设定一个空列表
print(f)
for lin in f:
i+=1 #每次读取了一行文件中的数据,i就+1
li.append(i) #将加的1放进列表中
i =li[-1]+1 #最后得出了一个列表li,最后一位+1就是下一位的ID
i = str(i) #将i变成字符串才可以跟字符串一起添加到信息中
if '\n'not in lin: #如果这行数据中没有\n的话
y = ('\n'+i+','+yuangong) #就将i和用户输入的员工信息还有前置的\n一起加入到数据中 ps:做这行的目的不是多余的,因为添加的数据,前面有\n下次添加就会隔一行
else: 而且添加数据按行来读ID,删除了的话还空了一行这样有bug,没\n就在上一条末尾了
y=(i+','+yuangong) #如果有的话直接添加数据不用加\n
f.close()
f1 = open('员工信息', encoding='utf-8', mode='a')
f1.write(y)
f1.close()
cha()
if n==2:
chuang()
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
编写完了创建功能,接下来就要完成客户需要的删除功能。同样,要按照ID删的话,思路要清晰,要想尽办法获取到信息中的ID,然后再想办法怎么调用这个ID来处理数据
def shan():
import os
f=open('员工信息',encoding='utf-8',mode='r')
v = f.readlines() #v接收到的是文件中每行的信息
f.close()
y = input('请输入要删除的员工ID') #用户输入要删除的员工ID
for item in v: #for循环得到的文件数据
if item:
if item[0] ==y: #如果循环的数据中含有用户要删除的ID
o=v.index(item) #那么用o来接收,用index来查找这一行数据的索引
v[o]=v[o].lstrip('\n') #索引取出,按照v来取出这个值去掉左侧的\n否则删除的时候是不会删除\n的
del v[o] #删除这条数据
f1=open('员工信息2',encoding='utf-8',mode='w')
f1.writelines(v) #新建文件写入除了删掉的数据的所有数据
f1.close()
os.remove('员工信息') #移除旧的文件
os.rename('员工信息2','员工信息') #将新文件名改成旧文件,做成更新状态
f3=open('员工信息2',encoding='utf-8',mode='w') #再创建一个同名新文件,以备下次使用
f3.close()
if n==3:
shan()
-------------------------------------------------------------------------------------------------------------------------------------------------------
删除员工信息写完了,主要的工作就是寻找关键ID,然后写入新文件删除旧文件,以及创建一个下次使用的新文件。接下来编写最后一项功能,修改员工信息的功能。
代码如下:
def gai():
import os
j=input('请输入想要修改的信息,语法为set 列名 =新的值 where 条件') #让用户按键规则输入修改信息
lieming,tiaojian=j.strip().split('where') #按照where分割用户输入的信息
tiaojian=tiaojian.strip()
lieming,zhi=lieming.strip().split('=') #按照等号分割列名,取出列名和值,列名是要修改的内容属性,值是修改后的新值
zhi=zhi.strip()
zhi=str(zhi) #将值的数据类型改为字符串
lieming= lieming.strip().lstrip('set') #将列名去掉左侧的set
lieming=lieming.strip()
f=open('员工信息',encoding='utf-8',mode='r')
v=f.readlines()
for line in v:
x=v.index(line) #用x接受line的索引值
if tiaojian in line: #如果条件值在line数据中
if lieming in 'name': #如果用户输入的列名是name的话
line=line.replace(tiaojian,zhi) #将这一行数据中用replace方法将条件值替换成修改新值
v[x]=line #将这一行新的数据按照索引值替换v中的原数据
elif lieming in 'age':
line = line.replace(tiaojian, zhi)
v[x] = line
elif lieming in 'phone':
line = line.replace(tiaojian, zhi)
v[x] = line
elif lieming in 'job':
line = line.replace(tiaojian, zhi)
v[x] = line
f.close()
f2=open('员工信息2',encoding='utf-8',mode='w')
f2.writelines(v)
f2.close()
os.remove('员工信息')
os.rename('员工信息2','员工信息')
f3=open('员工信息2',encoding='utf-8',mode='w')
f3.close()
if n==4:
gai()
----------------------------------------------------------------------------------------------------------------------------------------------- 写完了所有功能的程序,分别写完后接下来就是整合,想要用户循环使用的话,那就要加上循环加上退出。
代码如下放在开头包含所有功能函数:
while True:
print('员工信息管理系统')
print('1.查找员工信息')
print('2.创建新员工记录')
print('3.删除指定员工记录')
print('4.修改员工信息')
print('5.退出')
n = input('请输入功能序号')
n=int(n)
让用户按照功能序号进行功能选择,还包含了退出功能
所有功能及循环都完成了,那么久要用装饰器来装饰一下,只用登录一次的登录系统
----------------------------------------------------------------------------------------------------------------------------------------------
flag = False
def login(func):
def inner(*args,**kwargs):
global flag
while True:
if not flag:
a = input('username:')
b = input('password')
with open('用户登录',encoding='utf-8') as f:
for line in f:
name,pwd=line.strip().split('|')
if name == a and pwd ==b:
print('登录成功')
flag = True
if flag:
res=func(*args,**kwargs)
return res return inner
用法在前面的博客有说明 用语法糖将装饰器添加到所有函数中,这样,员工信息管理系统就完成了
python--员工信息管理系统编译及思路的更多相关文章
- Python 员工信息管理系统
学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- qt项目:员工信息管理系统
开发一个员工信息管理系统 一.项目具体要求: 1.用qt开发界面,数据库用QSqlite 数据库文件名:demostudent.db 2.通过界面能够查看到数据库中员工信息表中内容,包括员工姓名.年龄 ...
- Python员工信息表练习
1.用户可以模糊查询员工信息 2.显示匹配了多少条,匹配字符需要高亮显示 employee_db.txt 总经办 龚丽丽 总经理 男 -- 1月18日 汉 族 中共党员 已婚 总经办 李惠 副总经理 ...
- Python学生信息管理系统的开发
# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...
- python 学生信息管理系统
python与数据库的例子 初始化数据库 链接数据库创建库和表并插入数据 init.py import pymysql sql_base='create database school;' sql_t ...
- Python:员工信息增删改查
一:需求 homework.txt文件中有如下格式的人员信息: 1,Jack Wang,28,13451024608,HR,2015‐01‐072,Rain Wang,21,13451054608,I ...
- python作业员工信息表程序(第四周)
作业需求: 1. 员工信息表程序,实现增删改查操作: 2. 可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 ...
- python员工管理系统(基础版)
各位小伙伴们大家好,最近自学python已经差不多把基础学完了,现在运用这些基础知识写了一个简单版本的员工管理系统 因为在大学里我是学过java的,所以,当有了一定的基础和熏陶外,真心觉得python ...
随机推荐
- php单一入口和多入口模式详细讲解
php单一入口模式可谓是现在一种比较流行的大型web应用开发模式,比如当前比较流行的一些php开发框架,zend,thinkphp,qeephp,还有cakephp 等他们都是采用的单一入口模式的.本 ...
- BZOJ4571 [Scoi2016]美味 【主席树】
题目 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为第 ...
- 刷题总结——影魔(HNOI2017 BZOJ4826 线段树+扫描线)
题目: Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄 ...
- [转]使用ProxyFactoryBean创建AOP代理
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ 7.5. 使用ProxyFactoryBean创建AOP代理 - Spring F ...
- POJ1167 The Buses
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6234 Accepted: 1698 Description A man ...
- 【HDU3507】Print Article(斜率优化DP)
单调队列DP复出练手题 朴素方程dp[i]=min(dp[j]+(s[i]-s[j-1])^2+m 你懂得 ..]of int64; a,q:array[..]of longint; n,m,i,t, ...
- 两个时间相差多少 .net中的timespan应用
原文发布时间为:2008-10-31 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- MySQL 源码编译安装
脚本须知: 1. 该脚本目前只测试过mysql版本为5.6.x的源码,其他源码可以对本脚本稍作修改即可 2. 本脚本也可以使用wget mysql源码的方式进行,但考虑到后期提供源码的地址不可用,所以 ...
- 天梯赛 - L2-003 月饼
题目链接:https://www.patest.cn/contests/gplt/L2-003 现在只能做水题~ #include <iostream> #include <cstd ...
- mysql数据库引擎(InnoDB MyISAM)
MySQL的默认存储引擎’在5.5版本以前是MYISAM,5.5之后是INNODB. 两种存储引擎的索引结构都是B+树,B+树的详细介绍可参考https://www.cnblogs.com/yange ...