最近python课程结课,要做一个课程设计,幸运的我抽到了比较简单的职工信息管理系统。在这里把代码分享给大家:
先分享本题的思路流程图:
首先是菜单页的显示,为方便起见,本菜单页只是采用了个最基础的print输出的形式,让菜单页显示,用户指令输入以及操作结果的显示都在python运行框内显现。代码如下:
def denglu():
print('--------------------------------')
print(' 欢迎来到职工管理系统! ')
print('--------------------------------')
print('请选择您要办理的事项:')
print('1.新增职工信息')
print('2.删除职工信息')
print('3.查询职工信息')
print('4.修改职工信息')
print('5.排序职工信息')
print('0:退出程序')
print('--------------------------------')
二、通过用户输入序号来选择要执行的操作,代码如下:
def select():
a=input('请输入序号:')
return a
三、python自带数据库sqlite的前期导包以及数据库创建(数据库创建仅需要创建一次,若已存在该名称的数据库,则无须创建,将第五行到最后一行其注释掉即可):
import sqlite3
conn1 = sqlite3.connect('职工信息.db')
print ("数据库打开成功")
c = conn1.cursor()
sql_text_1 = '''CREATE TABLE scores
(姓名 TEXT,
性别 TEXT,
出生年月 DATE,
工作年月 DATE,
学历 TEXT,
职务 TEXT,
住所 TEXT,
电话 TEXT);'''
c.execute(sql_text_1)
print ("数据表创建成功")
四、第一个功能,新增职工信息所用到的函数add()
本代码主要采用字典作为“数据中转站”,讲用户要输入的信息以及各自对数据的操作存入字典,再将字典数据存入数据库中。
1、主体采用一个大的while循环配套末尾answer使用,一次添加信息操作结束会询问是否继续添加,若继续添加(answer值输入为‘y’),则继续循环;若不继续添加(answer值输入为‘n’),则break中止循环
2、c.execute("INSERT INTO scores (姓名,性别,出生年月,工作年月,学历,职务,住所,电话) VALUES(?,?,?,?,?,?,?,?)",(i['name'],i['xingbie'],i['birthdate'],i['workdate'],i['xueli'],i['turn'],i['address'],i['phone']))
该代码是将字典信息以sqlite语言存入到数据库中(具体语言内容可查询sqlite语言的基础用法)
global name,xingbie,birthdate,workdate,xueli,turn,address,phone
def add():
xinxi_list = []
while True:
name = input('请输入职工姓名:')
if not name:
break
try:
xingbie = input('请输入职工性别:')
if xingbie!='男' and xingbie!='女':
print('请正确输入!')
continue
birthdate = input('请输入职工出生年月(xxxx.xx.xx):')
workdate = input('请输入职工工作年月(xxxx.xx.xx):')
xueli=input('请输入职工学历:')
turn=input('请输入职工职务')
address=input('请输入职工住址')
phone=input('请输入职工电话:')
except:
print("输入无效,请重新输入")
xinxi={'name': name, 'xingbie': xingbie, 'birthdate': birthdate, 'workdate':workdate,'xueli':xueli, 'turn':turn, 'address':address, 'phone':phone}
xinxi_list .append(xinxi)
answer = input("是否继续添加y/n?")
if answer == 'y':
continue
else:
break
for i in xinxi_list:
c.execute("INSERT INTO scores (姓名,性别,出生年月,工作年月,学历,职务,住所,电话) VALUES(?,?,?,?,?,?,?,?)",(i['name'],i['xingbie'],i['birthdate'],i['workdate'],i['xueli'],i['turn'],i['address'],i['phone']))
print('添加成功!')
五、 第二个功能,删除职工信息所用到的函数delete()
1、整体思路与add()函数相同,while循环与answer等等。。
2、先查询后删除,即先找找要删除的职工名字是否在数据库中存在在进行删除操作。代码中是将数据库中数据以字典形式导出到列表中,再遍历搜索是否存在,若存在执行删除操作
c.execute('delete from scores where 姓名=?', (xinxi_name,))
def delete():
while True:
xinxi_name = input("请输入删除职工的姓名:")
xinxi_n={'姓名':f'{xinxi_name}'}
cursor = c.execute("SELECT 姓名,性别,出生年月,工作年月,学历,职务,住所,电话 from scores")
T = False
jieguo = []
for row in cursor:
if row[0] == xinxi_name:
jieguo = row
T = True
break
if xinxi_name !='':
if T==True:
#c.execute("delete from scores where 姓名='456'")
c.execute('delete from scores where 姓名=?', (xinxi_name,))
else:
print('数据库中无此人!')
answer = input("是否继续删除?y/n")
if answer == 'y':
continue
else:
break
六、第三个功能,查询职工信息所用到的函数find()
查询思路与上个功能所用到的delete函数中查询相同,若查询到则输出该职工信息,若查询不到则输出‘数据库中无此人’
def find():
while True:
xinxi_name = input("请输入要查询职工的姓名:")
cursor = c.execute("SELECT 姓名,性别,出生年月,工作年月,学历,职务,住所,电话 from scores")
T=False
jieguo=[]
for row in cursor:
if row[0]==xinxi_name:
jieguo=row
T=True
break
if xinxi_name != '':
if T==True:
print('姓名:',jieguo[0])
print('性别:',jieguo[1])
print('出生年月:',jieguo[2])
print('工作年月:',jieguo[3])
print('学历:',jieguo[4])
print('职务:',jieguo[5])
print('住所:',jieguo[6])
print('电话:',jieguo[7])
else:
print('数据库中无此人!')
answer = input("是否继续查询 ?y/n")
if answer == 'y':
continue
else:
break
七、第四个功能,修改职工信息所用到的函数modify()
可以是这个思路:查询加删除加增添,即先找到这个职工信息,再删除原来职工信息,再输入新的职工信息
但是我直接就更改职工信息了,没有删除这个步骤,采用
“UPDATE scores set 性别=?,出生年月=?,工作年月=?,学历=?,职务=?,住所=?,电话=? where 姓名=?”
def modify():
while True:
xinxi_name = input("请输入要修改职工的姓名:")
xinxi_n = {'姓名': f'{xinxi_name}'}
cursor = c.execute("SELECT 姓名,性别,出生年月,工作年月,学历,职务,住所,电话 from scores")
T = False
jieguo = []
for row in cursor:
if row[0] == xinxi_name:
jieguo = row
T = True
break
if xinxi_name != '':
if T==True:
print(jieguo)
liebiao=[]
for i in jieguo:
liebiao.append(i)
print(liebiao)
liebiao[1] = input('请输入职工性别:')
liebiao[2] = input('请输入职工出生年月(xxxx.xx.xx):')
liebiao[3] = input('请输入职工工作年月(xxxx.xx.xx):')
liebiao[4] = input('请输入职工学历:')
liebiao[5] = input('请输入职工职务')
liebiao[6] = input('请输入职工住址')
liebiao[7] = input('请输入职工电话:')
c.execute("UPDATE scores set 性别=?,出生年月=?,工作年月=?,学历=?,职务=?,住所=?,电话=? where 姓名=?",(liebiao[1],liebiao[2],liebiao[3],liebiao[4],liebiao[5],liebiao[6],liebiao[7],liebiao[0]))
else:
print('数据库中无此人!')
answer = input("是否继续修改 ?y/n")
if answer == 'y':
continue
else:
break
八、第五个功能,对职工信息排序所用到的函数sott()
三种排序方法,姓名,出生年月,以及工作年月,本程序排序的功能模块比较简单,未设立升序降序选项,全部设立升序。需注意,排序结果仅输出到运行框内,不会对数据库内容做出改变。
def sortt():#按姓名排序
print('----------------------------------------')
print(' 1.姓名 ')
print(' 2.出生年月 ')
print(' 3.工作年月 ')
print('----------------------------------------')
while True:
choice=input('选择那种排序方法?')
if choice=='1':
c.execute("SELECT * FROM scores ORDER BY 姓名 ASC")
elif choice=='2':
c.execute("SELECT * FROM scores ORDER BY 出生年月 ASC")
elif choice=='3':
c.execute("SELECT * FROM scores ORDER BY 工作年月 ASC")
print(c.fetchall())
answer = input("是否继续排序 ?y/n")
if answer == 'y':
continue
else:
break
九、主程序以及退出功能
调用了前面定义的所有函数,来实现功能的选用;
conn1.commit()是对数据库的操作进行保存,否则操作无效
def main():
while True:
denglu()
choice = int(input('请选择功能'))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
answer = input('您确定退出系统吗?y/n')
if answer == 'y' or answer == 'Y':
print("欢迎您的使用!!")
break
else:
continue
elif choice == 1:
add()
conn1.commit()
elif choice == 2:
delete()
conn1.commit()
elif choice == 3:
find()
conn1.commit()
elif choice == 4:
modify()
conn1.commit()
elif choice == 5:
sortt()
conn1.commit()
input()
全部代码如下:
# -*- coding:utf-8 -*-
import sqlite3
conn1 = sqlite3.connect('职工信息.db')
print ("数据库打开成功")
c = conn1.cursor()
# sql_text_1 = '''CREATE TABLE scores
# (姓名 TEXT,
# 性别 TEXT,
# 出生年月 DATE,
# 工作年月 DATE,
# 学历 TEXT,
# 职务 TEXT,
# 住所 TEXT,
# 电话 TEXT);'''
# c.execute(sql_text_1)
# print ("数据表创建成功")
def denglu():
print('--------------------------------')
print(' 欢迎来到职工管理系统! ')
print('--------------------------------')
print('请选择您要办理的事项:')
print('1.新增职工信息')
print('2.删除职工信息')
print('3.查询职工信息')
print('4.修改职工信息')
print('5.排序职工信息')
print('0:退出程序')
print('--------------------------------')
def select():
a=input('请输入序号:')
return a
global name,xingbie,birthdate,workdate,xueli,turn,address,phone
def add():
xinxi_list = []
while True:
name = input('请输入职工姓名:')
if not name:
break
try:
xingbie = input('请输入职工性别:')
if xingbie!='男' and xingbie!='女':
print('请正确输入!')
continue
birthdate = input('请输入职工出生年月(xxxx.xx.xx):')
workdate = input('请输入职工工作年月(xxxx.xx.xx):')
xueli=input('请输入职工学历:')
turn=input('请输入职工职务')
address=input('请输入职工住址')
phone=input('请输入职工电话:')
except:
print("输入无效,请重新输入")
xinxi={'name': name, 'xingbie': xingbie, 'birthdate': birthdate, 'workdate':workdate,'xueli':xueli, 'turn':turn, 'address':address, 'phone':phone}
xinxi_list .append(xinxi)
answer = input("是否继续添加y/n?")
if answer == 'y':
continue
else:
break
for i in xinxi_list:
c.execute("INSERT INTO scores (姓名,性别,出生年月,工作年月,学历,职务,住所,电话) VALUES(?,?,?,?,?,?,?,?)",(i['name'],i['xingbie'],i['birthdate'],i['workdate'],i['xueli'],i['turn'],i['address'],i['phone']))
print('添加成功!')
def delete():
while True:
xinxi_name = input("请输入删除职工的姓名:")
xinxi_n={'姓名':f'{xinxi_name}'}
cursor = c.execute("SELECT 姓名,性别,出生年月,工作年月,学历,职务,住所,电话 from scores")
T = False
jieguo = []
for row in cursor:
if row[0] == xinxi_name:
jieguo = row
T = True
break
if xinxi_name !='':
if T==True:
#c.execute("delete from scores where 姓名='456'")
c.execute('delete from scores where 姓名=?', (xinxi_name,))
else:
print('数据库中无此人!')
answer = input("是否继续删除?y/n")
if answer == 'y':
continue
else:
break
def find():
while True:
xinxi_name = input("请输入要查询职工的姓名:")
cursor = c.execute("SELECT 姓名,性别,出生年月,工作年月,学历,职务,住所,电话 from scores")
T=False
jieguo=[]
for row in cursor:
if row[0]==xinxi_name:
jieguo=row
T=True
break
if xinxi_name != '':
if T==True:
print('姓名:',jieguo[0])
print('性别:',jieguo[1])
print('出生年月:',jieguo[2])
print('工作年月:',jieguo[3])
print('学历:',jieguo[4])
print('职务:',jieguo[5])
print('住所:',jieguo[6])
print('电话:',jieguo[7])
else:
print('数据库中无此人!')
answer = input("是否继续查询 ?y/n")
if answer == 'y':
continue
else:
break
def modify():
while True:
xinxi_name = input("请输入要修改职工的姓名:")
xinxi_n = {'姓名': f'{xinxi_name}'}
cursor = c.execute("SELECT 姓名,性别,出生年月,工作年月,学历,职务,住所,电话 from scores")
T = False
jieguo = []
for row in cursor:
if row[0] == xinxi_name:
jieguo = row
T = True
break
if xinxi_name != '':
if T==True:
print(jieguo)
liebiao=[]
for i in jieguo:
liebiao.append(i)
print(liebiao)
liebiao[1] = input('请输入职工性别:')
liebiao[2] = input('请输入职工出生年月(xxxx.xx.xx):')
liebiao[3] = input('请输入职工工作年月(xxxx.xx.xx):')
liebiao[4] = input('请输入职工学历:')
liebiao[5] = input('请输入职工职务')
liebiao[6] = input('请输入职工住址')
liebiao[7] = input('请输入职工电话:')
c.execute("UPDATE scores set 性别=?,出生年月=?,工作年月=?,学历=?,职务=?,住所=?,电话=? where 姓名=?",(liebiao[1],liebiao[2],liebiao[3],liebiao[4],liebiao[5],liebiao[6],liebiao[7],liebiao[0]))
else:
print('数据库中无此人!')
answer = input("是否继续修改 ?y/n")
if answer == 'y':
continue
else:
break
def sortt():#按姓名排序
print('----------------------------------------')
print(' 1.姓名 ')
print(' 2.出生年月 ')
print(' 3.工作年月 ')
print('----------------------------------------')
while True:
choice=input('选择那种排序方法?')
if choice=='1':
c.execute("SELECT * FROM scores ORDER BY 姓名 ASC")
elif choice=='2':
c.execute("SELECT * FROM scores ORDER BY 出生年月 ASC")
elif choice=='3':
c.execute("SELECT * FROM scores ORDER BY 工作年月 ASC")
print(c.fetchall())
answer = input("是否继续排序 ?y/n")
if answer == 'y':
continue
else:
break
def main():
while True:
denglu()
choice = int(input('请选择功能'))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
answer = input('您确定退出系统吗?y/n')
if answer == 'y' or answer == 'Y':
print("欢迎您的使用!!")
break
else:
continue
elif choice == 1:
add()
conn1.commit()
elif choice == 2:
delete()
conn1.commit()
elif choice == 3:
find()
conn1.commit()
elif choice == 4:
modify()
conn1.commit()
elif choice == 5:
sortt()
conn1.commit()
input()
'''姓名、性别、出生年月、工作年月、学历、职务、住址、电话'''
main()