在线人员管理系统开发 - 前后端代码示例
在线人员管理系统开发 - 前后端代码示例
本项目提供了一个小型在线人员管理系统的完整代码示例,涵盖登录验证、人员信息管理、出勤记录、图表展示和数据导出等功能,适合作为学习和实践参考。
后台代码
- 登录验证
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'
- 添加、删除和修改人员信息
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'
- 查询人员信息
@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)
- 记录人员的出勤情况
@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'
- 提供图表功能
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'
- 导出数据
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'
前台代码
- 登录页面
<!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>
- 添加、删除和修改人员信息页面
<!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>
- 查询人员信息页面
<!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>
- 记录人员的出勤情况页面
<!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>
- 提供图表功能页面
<!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>
- 导出数据页面
<!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 著作权归作者所有。请勿转载和采集!