基于python以及sqlite3数据库的职工信息管理系统

最近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()

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦亦甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值