1. 功能和性能概要
登录功能
用户填写问卷
反馈用户问卷结果
浏览历史问卷数据
2.数据库设计
3.后端代码
下面展示一些 代码
。
# -*- coding: utf-8 -*-
import json
import pymysql
from flask import Flask, request, jsonify, render_template, app, redirect
from flask_cors import CORS
# 数据库连接
db = pymysql.connect("localhost", "root", "*****(个人数据库密码)", "ad(数据库名称)")
cursor = db.cursor()
# 后端服务启动
app = Flask(__name__, static_folder='static', static_url_path='/static')
cors = CORS(app, resources={r"/*": {"origins": "*"}})
# http server
@app.route("/")
def http_server():
return redirect('/static/test5.html')
# 首页_注册
@app.route('/login', methods=['POST'])
def login_add():
if request.method == "POST":
username = request.form.get("username")
try:
cursor.execute("insert into login(username) values (\"'" + str(username) + "'\")")
db.commit() # 提交,使操作生效
print("add a new user successfully!")
return "1"
except Exception as e:
print("add a new user failed:", e)
db.rollback() # 发生错误就回滚
return "-1"
# 首页_登录
@app.route('/login/login', methods=['POST'])
def login_login():
if request.method == "POST":
username = request.form.get("username")
password = request.form.get("password")
cursor.execute("select id,username,role,ctime from login where username=\"'"
+ str(username) + "'\" and password=\"'" + str(password) + "'\"")
data = cursor.fetchone()
if data is not None:
print("result:", data)
jsondata = {"id": str(data[0]), "username": str(data[1]),
"role": str(data[2]), "ctime": str(data[3])}
return jsonify(jsondata)
else:
print("result: NULL")
jsondata = {}
return jsonify(jsondata)
# 展示空白问卷界面
@app.route('/login/questionnaire', methods=['GET'])
def questionnaire_list():
cursor.execute("select Ques_type,Ques_title from subjects")
questiondata = cursor.fetchall()
subjects = {}
midlisk = []
for i in questiondata:
subjects["Ques_type"] = i[0]
subjects["subject"] = i[1]
cursor.execute("select Ans_type, Ans_title,val from ops where Ques_type='" + str(i[0]) + "'")
answerdata = cursor.fetchall()
answers = {}
littlelisk = []
for a in answerdata:
answers["Ans_type"] = a[0]
answers["option"] = a[1]
answers["fraction"] = a[2]
littlelisk.append(answers.copy())
subjects["options"] = littlelisk
midlisk.append(subjects.copy())
cursor.execute("select type,title from questionnaires")
questionnairesdata = cursor.fetchall()
dic3 = {}
largelisk = []
if questionnairesdata is not None:
for k in questionnairesdata:
dic3["type"] = k[0]
dic3["name"] = k[1]
dic3["list"] = midlisk
largelisk.append(dic3.copy())
return jsonify(largelisk)
# 用户填写答卷
@app.route('/login/questionnaire/add', methods=['POST'])
def questionnaire_add():
questionnna = request.json
user_name = questionnna["username"]
user_arr = questionnna["arr"]
cursor.execute("insert into login(username) values (\"" + str(user_name) + "\")")
try:
addnumber = 0
for line in user_arr:
answer1 = line["grade"]
answer2 = line["answer"]
# 求和
addnumber += int(answer1)
cursor.execute(
"insert into answerplus(username,sub_ans,sub_number) values (\"" + str(user_name) + "\",\"" + str(answer2) + "\",\"" + str(answer1) + "\")")
cursor.execute("update login set sumpoint="+str(addnumber)+" where username=\""+str(user_name)+"\"")
db.commit() # 提交,使操作生效
print("add a new questionnaire!")
return "1"
except Exception as e:
print("add a new user failed:", e)
db.rollback() # 发生错误就回滚
return "-1"
# 展示个人用户填写结果
@app.route('/show', methods=['POST'])
def personshow_list():
print(request.data)
id1 = request.json
#username = request.form.get("username")
id = id1["userid"]
cursor.execute("SELECT id, username, sumpoint FROM login WHERE id='" + str(id) + "'")
data = cursor.fetchall()
tem = {}
result = []
if data is not None:
for i in data:
tem["id"] = i[0]
tem["username"] = i[1]
tem["total"] = i[2]
cursor.execute("select sub_ans, sub_number from answerplus where username='" + str(i[1] ) + "'")
subdata = cursor.fetchall()
sub = {}
sublisk = []
for a in subdata:
sub["answer"] = a[0]
sub["grade"] = a[1]
if a[1] >= 3:
tem["littlest"] = "单项分≥3分,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
else:
tem["littlest"] = "单项合格"
sublisk.append(sub.copy()) # 特别注意要用copy,否则只是内存的引用
tem["arr"] = sublisk
if i[2] <= 5:
tem["judge"] = "营养状况良好"
elif i[2] <= 10:
tem["judge"] = "存在营养不良风险,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
elif i[2] <= 14:
tem["judge"] = "轻度营养不良,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
else:
tem["judge"] = "重度营养不良,建议陪同患者前往医院神经内科/老年科/营养科由专业医生进行诊断"
result.append(tem.copy())
print("result:", len(data))
return jsonify(result)
else:
print("result: NULL")
return jsonify([])
# 管理员汇总界面
@app.route('/login/master', methods=['GET'])
def master_show():
cursor.execute("select id,username,sumpoint from login")
data = cursor.fetchall()
temp = {}
result = []
if data is not None:
for i in data:
temp["id"] = i[0]
temp["username"] = i[1]
temp["total"] = i[2]
result.append(temp.copy()) # 特别注意要用copy,否则只是内存的引用
print("result:", len(data))
return jsonify(result)
else:
print("result: NULL")
return jsonify([])
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
print("Good bye!")