在线人员管理系统开发 - 前后端代码示例

本项目提供了一个小型在线人员管理系统的完整代码示例,涵盖登录验证、人员信息管理、出勤记录、图表展示和数据导出等功能,适合作为学习和实践参考。

后台代码

  1. 登录验证
from flask import Flask, request, session

app = Flask(__name__)
app.secret_key = 'your_secret_key'

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']
    
    if username == 'admin' and password == 'admin_password':
        session['logged_in'] = True
        return 'login success'
    else:
        return 'login failed'
  1. 添加、删除和修改人员信息
import sqlite3

@app.route('/add_person', methods=['POST'])
def add_person():
    if not session.get('logged_in'):
        return 'access denied'
        
    name = request.form['name']
    gender = request.form['gender']
    age = request.form['age']
    phone_number = request.form['phone_number']
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('INSERT INTO person (name, gender, age, phone_number) VALUES (?, ?, ?, ?)', (name, gender, age, phone_number))
    conn.commit()
    conn.close()
    
    return 'person added'

@app.route('/delete_person/<int:person_id>', methods=['POST'])
def delete_person(person_id):
    if not session.get('logged_in'):
        return 'access denied'
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('DELETE FROM person WHERE id = ?', (person_id,))
    conn.commit()
    conn.close()
    
    return 'person deleted'

@app.route('/update_person/<int:person_id>', methods=['POST'])
def update_person(person_id):
    if not session.get('logged_in'):
        return 'access denied'
    
    name = request.form['name']
    gender = request.form['gender']
    age = request.form['age']
    phone_number = request.form['phone_number']
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('UPDATE person SET name = ?, gender = ?, age = ?, phone_number = ? WHERE id = ?', (name, gender, age, phone_number, person_id))
    conn.commit()
    conn.close()
    
    return 'person updated'
  1. 查询人员信息
@app.route('/get_person', methods=['GET'])
def get_person():
    if not session.get('logged_in'):
        return 'access denied'
    
    name = request.args.get('name', '')
    gender = request.args.get('gender', '')
    age = request.args.get('age', '')
    phone_number = request.args.get('phone_number', '')
    order_by = request.args.get('order_by', 'id')
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('SELECT * FROM person WHERE name LIKE ? AND gender LIKE ? AND age LIKE ? AND phone_number LIKE ? ORDER BY ?', ('%'+name+'%', '%'+gender+'%', '%'+age+'%', '%'+phone_number+'%', order_by))
    result = c.fetchall()
    conn.close()
    
    return str(result)
  1. 记录人员的出勤情况
@app.route('/add_attendance', methods=['POST'])
def add_attendance():
    if not session.get('logged_in'):
        return 'access denied'
        
    person_id = request.form['person_id']
    leave = request.form['leave']
    overtime = request.form['overtime']
    business_trip = request.form['business_trip']
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('INSERT INTO attendance (person_id, leave, overtime, business_trip) VALUES (?, ?, ?, ?)', (person_id, leave, overtime, business_trip))
    conn.commit()
    conn.close()
    
    return 'attendance added'
  1. 提供图表功能
import matplotlib.pyplot as plt
import numpy as np

@app.route('/get_chart', methods=['GET'])
def get_chart():
    if not session.get('logged_in'):
        return 'access denied'
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('SELECT person.name, attendance.leave, attendance.overtime, attendance.business_trip FROM person INNER JOIN attendance ON person.id = attendance.person_id')
    result = c.fetchall()
    conn.close()
    
    names = [r[0] for r in result]
    leave = [r[1] for r in result]
    overtime = [r[2] for r in result]
    business_trip = [r[3] for r in result]
    
    ind = np.arange(len(names))
    width = 0.3
    
    fig, ax = plt.subplots()
    rects1 = ax.bar(ind - width, leave, width, label='leave')
    rects2 = ax.bar(ind, overtime, width, label='overtime')
    rects3 = ax.bar(ind + width, business_trip, width, label='business_trip')
    
    ax.set_ylabel('days')
    ax.set_xticks(ind)
    ax.set_xticklabels(names)
    ax.legend()
    
    plt.savefig('chart.png')
    
    return 'chart generated'
  1. 导出数据
import csv

@app.route('/export_data', methods=['GET'])
def export_data():
    if not session.get('logged_in'):
        return 'access denied'
    
    conn = sqlite3.connect('person.db')
    c = conn.cursor()
    c.execute('SELECT * FROM person')
    result = c.fetchall()
    conn.close()
    
    with open('data.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['id', 'name', 'gender', 'age', 'phone_number'])
        for r in result:
            writer.writerow(r)
    
    return 'data exported'

前台代码

  1. 登录页面
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form action='/login' method='POST'>
        <label>Username:</label>
        <input type='text' name='username'><br>
        <label>Password:</label>
        <input type='password' name='password'><br>
        <input type='submit' value='Login'>
    </form>
</body>
</html>
  1. 添加、删除和修改人员信息页面
<!DOCTYPE html>
<html>
<head>
    <title>Person Management</title>
</head>
<body>
    {% if session.logged_in %}
    <form action='/add_person' method='POST'>
        <label>Name:</label>
        <input type='text' name='name'><br>
        <label>Gender:</label>
        <input type='text' name='gender'><br>
        <label>Age:</label>
        <input type='text' name='age'><br>
        <label>Phone Number:</label>
        <input type='text' name='phone_number'><br>
        <input type='submit' value='Add Person'>
    </form>
    {% endif %}
    
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Gender</th>
            <th>Age</th>
            <th>Phone Number</th>
            {% if session.logged_in %}
            <th>Action</th>
            {% endif %}
        </tr>
        {% for person in persons %}
        <tr>
            <td>{{ person[0] }}</td>
            <td>{{ person[1] }}</td>
            <td>{{ person[2] }}</td>
            <td>{{ person[3] }}</td>
            <td>{{ person[4] }}</td>
            {% if session.logged_in %}
            <td>
                <form action='/delete_person/{{ person[0] }}' method='POST'>
                    <input type='submit' value='Delete'>
                </form>
                <form action='/update_person/{{ person[0] }}' method='POST'>
                    <label>Name:</label>
                    <input type='text' name='name' value='{{ person[1] }}'><br>
                    <label>Gender:</label>
                    <input type='text' name='gender' value='{{ person[2] }}'><br>
                    <label>Age:</label>
                    <input type='text' name='age' value='{{ person[3] }}'><br>
                    <label>Phone Number:</label>
                    <input type='text' name='phone_number' value='{{ person[4] }}'><br>
                    <input type='submit' value='Update'>
                </form>
            </td>
            {% endif %}
        </tr>
        {% endfor %}
    </table>
</body>
</html>
  1. 查询人员信息页面
<!DOCTYPE html>
<html>
<head>
    <title>Person Search</title>
</head>
<body>
    {% if session.logged_in %}
    <form action='/get_person' method='GET'>
        <label>Name:</label>
        <input type='text' name='name'><br>
        <label>Gender:</label>
        <input type='text' name='gender'><br>
        <label>Age:</label>
        <input type='text' name='age'><br>
        <label>Phone Number:</label>
        <input type='text' name='phone_number'><br>
        <label>Order By:</label>
        <select name='order_by'>
            <option value='id'>ID</option>
            <option value='name'>Name</option>
            <option value='gender'>Gender</option>
            <option value='age'>Age</option>
            <option value='phone_number'>Phone Number</option>
        </select>
        <input type='submit' value='Search'>
    </form>
    {% endif %}
    
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Gender</th>
            <th>Age</th>
            <th>Phone Number</th>
        </tr>
        {% for person in persons %}
        <tr>
            <td>{{ person[0] }}</td>
            <td>{{ person[1] }}</td>
            <td>{{ person[2] }}</td>
            <td>{{ person[3] }}</td>
            <td>{{ person[4] }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>
  1. 记录人员的出勤情况页面
<!DOCTYPE html>
<html>
<head>
    <title>Attendance Management</title>
</head>
<body>
    {% if session.logged_in %}
    <form action='/add_attendance' method='POST'>
        <label>Person ID:</label>
        <input type='text' name='person_id'><br>
        <label>Leave:</label>
        <input type='text' name='leave'><br>
        <label>Overtime:</label>
        <input type='text' name='overtime'><br>
        <label>Business Trip:</label>
        <input type='text' name='business_trip'><br>
        <input type='submit' value='Add Attendance'>
    </form>
    {% endif %}
</body>
</html>
  1. 提供图表功能页面
<!DOCTYPE html>
<html>
<head>
    <title>Chart</title>
</head>
<body>
    {% if session.logged_in %}
    <form action='/get_chart' method='GET'>
        <input type='submit' value='Generate Chart'>
    </form>
    {% endif %}
    
    {% if chart_generated %}
    <img src='chart.png'>
    {% endif %}
</body>
</html>
  1. 导出数据页面
<!DOCTYPE html>
<html>
<head>
    <title>Data Export</title>
</head>
<body>
    {% if session.logged_in %}
    <form action='/export_data' method='GET'>
        <input type='submit' value='Export Data'>
    </form>
    {% endif %}
    
    {% if data_exported %}
    <a href='data.csv'>Download Data</a>
    {% endif %}
</body>
</html>
在线人员管理系统开发 - 前后端代码示例

原文地址: https://www.cveoy.top/t/topic/nqVD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录