gzhu_database_experiment3/school system/app.py
你是一个一个一个开发者啊 0b5c459120
Add files via upload
2023-06-20 12:03:01 +08:00

205 lines
8.8 KiB
Python

from flask import Flask, request, redirect,render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://db_experiment3:12345@192.168.15.179/db_experiment3"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class Student(db.Model):
sno = db.Column(db.String(10), primary_key=True)
sname = db.Column(db.String(20))
ssex = db.Column(db.String(4))
sage = db.Column(db.Integer)
pwd = db.Column(db.String(20))
class Teacher(db.Model):
tno = db.Column(db.String(7), primary_key=True)
tname = db.Column(db.String(20))
tposition = db.Column(db.String(3))
tsalary = db.Column(db.Integer)
pwd = db.Column(db.String(20))
class Course(db.Model):
cno = db.Column(db.String(4), primary_key=True)
cname = db.Column(db.String(40))
tno = db.Column(db.String(7))
ccredit = db.Column(db.Integer)
class SC(db.Model):
cno = db.Column(db.String(4),db.ForeignKey('course.cno'), primary_key=True)
sno = db.Column(db.String(10),db.ForeignKey('student.sno'), primary_key=True)
grade = db.Column(db.Integer)
tno = db.Column(db.String(7))
class Admin(db.Model):
ano = db.Column(db.String(10), primary_key=True)
pwd = db.Column(db.String(20))
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == "GET":
return render_template('login.html')
else:
if request.form['login-method'] == 'student':
to_login = db.session.query(Student).get(request.form['account'])
if to_login is None:
return "没有此用户"
if to_login.pwd == request.form['password']:
print(to_login.sno + "登录成功")
return redirect('/'+request.form['login-method']+'/'+request.form['account'])
else:
print(to_login.sno + "密码错误")
return "密码错误"
elif request.form['login-method'] == 'teacher':
to_login = db.session.query(Teacher).get(request.form['account'])
if to_login is None:
return "没有此用户"
if to_login.pwd == request.form['password']:
print(to_login.tno + "登录成功")
return redirect('/'+request.form['login-method']+'/'+request.form['account'])
else:
print(to_login.tno + "密码错误")
return "密码错误"
elif request.form['login-method'] == 'admin':
to_login = db.session.query(Admin).get(request.form['account'])
if to_login is None:
return "没有此用户"
if to_login.pwd == request.form['password']:
print(to_login.ano + "登录成功")
return redirect('/'+request.form['login-method']+'/'+request.form['account'])
else:
print(to_login.ano + "密码错误")
return "密码错误"
@app.route('/student/<sno>', methods=['GET', 'POST'])
def student(sno):
user_info = db.session.query(Student).get(sno)
user_course = db.session.query(SC,Course).join(SC,SC.cno == Course.cno).filter(SC.sno == sno).all()
course_list = db.session.query(Course).all()
credit_sum = sum([x[1].ccredit for x in user_course])
temp = [user_course[x][1] for x in range(len(user_course))]
selectable_course = [x for x in course_list if x not in [user_course[x][1] for x in range(len(user_course))]]
if request.method == 'GET':
return render_template('student.html',
username = user_info.sname,usergender = user_info.ssex,userage = user_info.sage,
usercourse = user_course,totalcredit = credit_sum,
selectablecourse = selectable_course)
if request.method == 'POST':
if request.form['type'] == 'changeinfo':
if user_info:
user_info.sname = request.form['name']
user_info.ssex = request.form['gender']
user_info.sage = request.form['age']
if request.form['password'] != "":
user_info.pwd = request.form['password']
db.session.commit()
return "个人信息修改完毕"
elif request.form['type'] == 'courseselection':
to_select = next(filter(lambda x: x.cno == request.form['course'],selectable_course))
to_submit = SC(cno = request.form['course'],sno = sno,tno = to_select.tno,grade = 0)
db.session.add(to_submit)
db.session.commit()
return "选课成功"
@app.route('/admin/<ano>', methods=['GET', 'POST'])
def admin(ano):
student_list = db.session.query(Student,db.func.coalesce(db.func.sum(Course.ccredit),0)).\
join(SC,Student.sno == SC.sno, isouter=True).join(Course,SC.cno == Course.cno, isouter=True).group_by(Student.sno).all()
teacher_list = db.session.query(Teacher).all()
teacher_position_list = db.session.query(Teacher.tposition,db.func.avg(Teacher.tsalary),db.func.count(Teacher.tno)).\
group_by(Teacher.tposition).all()
course_list = db.session.query(Course,db.func.max(SC.grade),db.func.min(SC.grade),db.func.avg(SC.grade)).\
join(SC,Course.cno == SC.cno).group_by(Course.cno).all()
sc_list = db.session.query(SC).group_by(SC.cno).all()
if request.method == 'GET':
return render_template("admin.html",studentlist=student_list,
teacherlist=teacher_list,
salary=teacher_position_list,
courselist=course_list,
sclist=sc_list)
if request.method == 'POST':
if request.form['type'] == 'changestudent':
student = db.session.query(Student).get(request.form['sno'])
student.sname = request.form['sname']
student.sage = request.form['sage']
student.pwd = request.form['pwd']
student.ssex = request.form['ssex']
db.session.commit()
return "修改学生信息成功"
elif request.form['type'] == 'addstudent':
db.session.add(Student(sno = request.form['sno'],
sname=request.form['sname'],
sage = request.form['sage'],
pwd = request.form['pwd'],
ssex=request.form['ssex']
))
db.session.commit()
return "添加学生成功"
elif request.form['type'] == 'deletestudent':
db.session.delete(Student.query.get(request.form['sno']))
db.session.commit()
return "学生已删除"
elif request.form['type'] == 'changeteacher':
teacher = db.session.query(Teacher).get(request.form['tno'])
teacher.tname = request.form['tname']
teacher.tposition = request.form['tposition']
teacher.pwd = request.form['pwd']
teacher.tsalary = request.form['tsalary']
db.session.commit()
return "修改教师信息成功"
elif request.form['type'] == 'addteacher':
db.session.add(Teacher(tno = request.form['tno'],
tname=request.form['tname'],
tposition = request.form['tposition'],
pwd = request.form['pwd'],
tsalary=request.form['tsalary']
))
db.session.commit()
return "添加教师成功"
elif request.form['type'] == 'deleteteacher':
db.session.delete(Teacher.query.get(request.form['tno']))
db.session.commit()
return "教师已删除"
elif request.form['type'] == 'changesc':
sc = db.session.query(SC).filter_by(sno=request.form['sno'],cno=request.form['cno']).first()
sc.grade = request.form['grade']
db.session.commit()
return "成绩修改成功"
elif request.form['type'] == 'addsc':
db.session.add(SC(cno = request.form['cno'],
sno=request.form['sno'],
grade = request.form['grade']
))
db.session.commit()
return "选课信息添加成功"
elif request.form['type'] == 'deletesc':
db.session.delete(Teacher.query().filter_by(sno=request.form['sno'],cno=request.form['cno']).first())
db.session.commit()
return "选课信息已删除"
@app.errorhandler(404)
def page_not_found(e):
return redirect('/login')
with app.app_context():
db.engine.connect()
if __name__ == '__main__':
app.run()