python学生成绩管理系统结合sqlite3,需要有按钮和界面设计(酬金可加)

img

img

img

代码(望采纳):


import sqlite3
import sys


# conn = sqlite3.connect(database="SQLite3.db")
# # 创建Account表
# sql="""create table Account
#             ( username varchar(20) not null,
#             password varchar(30) not null)
#         """
# conn.execute(sql)
# conn.commit()
# conn.close()

# 创建GradeTable表
# sql="""create table GradeTable
#             (Number varchar(20) not null,
#             Name varchar(10),
#             Chinese varchar(10),
#             Math varchar(10),
#             English varchar(10) )
#         """
# conn.execute(sql)
# conn.commit()
# conn.close()

#账号登录
class Account:

    def __init__(self):
        __conn = sqlite3.connect(database="SQLite3.db")
        self.__conn = __conn

    def __Login(self):
        print("\n-------------- 1.账号登录 --------------")
        self.__cur = self.__conn.cursor()
        self.__user = input("请输入账号:").strip()
        self.__pwd = input("请输入密码:").strip()
        self.__sql = """select count(*) from Account where username=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__user,))
        self.__st = self.__result.fetchone()
        if self.__user == "" or self.__pwd == "":
            print("账号或密码不得为空!\n")
            self.__Login()
        elif self.__st[0] == False:
            while True:
                self.__num = input("账号不存在!是否选择注册一个新账号?\n1、是;2、否\n")
                if self.__num == "1":
                    self.__Register()
                elif self.__num == "2":
                    self.Main()
                else:
                    self.__num = input("请重新选择:")
        else:
            self.__VerifyLogin(self.__user, self.__pwd)

    def __VerifyLogin(self, user, pwd):
        self.__cur = self.__conn.cursor()
        self.__sql = """select password from Account where username=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__user,))
        self.__st = self.__result.fetchone()
        if self.__st[0] == self.__pwd:
            print("账号登录成功!\n")
            self.__st = GradeTable()
            self.__st.Main2()
        else:
            print("账号密码错误!\n")
            self.__Login()

    def __Register(self):
        print("\n-------------- 2.账号注册 --------------")
        self.__cur = self.__conn.cursor()
        self.__user = input("请输入账号:").strip()
        self.__pwd = input("请输入密码:").strip()
        self.__repwd = input("请确认密码:").strip()
        self.__sql = "select count(*) from Account where username=?;"
        self.__result = self.__cur.execute(self.__sql, (self.__user,))
        self.__st = self.__result.fetchone()
        while True:
            if self.__user == "":
                self.__user = input("账号不得为空!\n请输入账号:").strip()
            elif self.__pwd == "":
                self.__pwd = input("密码不得为空!\n请输入密码:").strip()
            elif self.__repwd == "" or self.__pwd != self.__repwd:
                repwd = input("请重新确认密码:").strip()
            elif self.__st[0] == True:
                print("该账号已存在!请重新注册!")
                self.__Register()
            else:
                self.__SaveRegister(self.__user, self.__pwd)

    def __SaveRegister(self, user, pwd):
        self.__cur = self.__conn.cursor()
        self.__sql = "insert into Account (username,password) values (?,?);"
        self.__cur.execute(self.__sql, (self.__user, self.__pwd,))
        self.__conn.commit()
        print("账号注册成功!\n")
        self.Main()

    def __Change(self):
        print("\n-------------- 3.修改密码 --------------")
        self.__cur = self.__conn.cursor()
        self.__user = input("请输入账号:").strip()
        self.__oldpwd = input("请输入密码:").strip()
        self.__newpwd = input("请输入新密码:").strip()
        sql = """select count(*) from Account where username=?;"""
        self.__result = self.__cur.execute(sql, (self.__user,))
        self.__st = self.__result.fetchone()
        while True:
            if self.__user == "":
                self.__user = input("账号不得为空!\n请输入账号:").strip()
            elif self.__oldpwd == "":
                self.__oldpwd = input("密码不得为空!\n请输入密码:").strip()
            elif self.__oldpwd == self.__newpwd or self.__newpwd == "":
                newpwd = input("请重新输入新密码:").strip()
            elif self.__st[0] == False:
                print("账号不存在!\n")
                self.Main()
            else:
                self.__VerifyChange(self.__user, self.__oldpwd, self.__newpwd)

    def __VerifyChange(self, user, oldpwd, newpwd):
        self.__cur = self.__conn.cursor()
        self.__sql = """select password from Account where username=?;"""
        self.__result = self.__cur.execute(self.__sql, (user,))
        self.__st = self.__result.fetchone()
        if self.__st[0] == self.__oldpwd:
            self.__SaveChange(self.__user, self.__newpwd)
        else:
            print("账号密码错误!\n")
            self.__Change()

    def __SaveChange(self, user, newpwd):
        try:
            print("账号密码修改成功!\n")
            self.__cur = self.__conn.cursor()
            self.__sql = """update Account set password=? where username=?;"""
            self.__cur.execute(self.__sql, (self.__newpwd, self.__user))
            self.__conn.commit()
            self.Main()
        except:
            print("账号密码修改失败!\n")
            self.Main()

    def __Cancel(self):
        print("\n-------------- 4.账号注销 --------------")
        self.__cur = self.__conn.cursor()
        self.__user = input("请输入账号:").strip()
        self.__pwd = input("请输入密码:").strip()
        self.__sql = """select count(*) from Account where username=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__user,))
        self.__st = self.__result.fetchone()
        if self.__user == "" or self.__pwd == "":
            print("账号或密码不得为空!\n")
            self.__Cancel()
        elif self.__st[0] == False:
            print("账号不存在!\n")
            self.Main()
        else:
            self.__VerifyCancel(self.__user, self.__pwd)

    def __VerifyCancel(self, user, pwd):
        self.__cur = self.__conn.cursor()
        self.__sql = """select password from Account where username=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__user,))
        self.__st = self.__result.fetchone()
        if self.__st[0] == self.__pwd:
            self.__DeleteCancel(user)
        else:
            print("账号密码错误!\n")
            self.Main()

    def __DeleteCancel(self, user):
        try:
            cur = self.__conn.cursor()
            sql = """delete from Account where username=?;"""
            cur.execute(sql, (self.__user,))
            self.__conn.commit()
            print("账号注销成功!\n")
            self.Main()
        except:
            print("账号注销失败!\n")
            self.Main()

    def Main(self):
        print("1、账号登录;2、账号注册;3、修改密码;4、账号注销;0、退出.")
        self.__num = input("请输入选择:").strip()
        if self.__num == "1":
            self.__Login()
        elif self.__num == "2":
            self.__Register()
        elif self.__num == "3":
            self.__Change()
        elif self.__num == "4":
            self.__Cancel()
        elif self.__num == "0":
            print("程序已退出!")
            self.__conn.close()
            sys.exit(0)
        else:
            self.Main()

#学生成绩管理类
class GradeTable:
    def __init__(self):
        __conn = sqlite3.connect(database="SQLite3.db")
        self.__conn = __conn

    def __GradeInput(self):
        print("\n------------------ 1.学生成绩输入 -----------------")
        self.__cur = self.__conn.cursor()
        self.__number = input("请输入学生学号:").strip()
        self.__name = input("请输入学生姓名:").strip()
        self.__chinese = input("请输入语文成绩:").strip()
        self.__math = input("请输入数学成绩:").strip()
        self.__english = input("请输入英语成绩:").strip()
        self.__sql = """select count(*) from GradeTable where Number=?;"""
        self.__reslut = self.__cur.execute(self.__sql, (self.__number,))
        self.__st = self.__reslut.fetchone()
        while True:
            if self.__name == "":
                self.__number = input("学生学号不得为空!\n请输入学生学号:").strip()
            elif self.__number == "":
                self.__name = input("学生姓名不得为空!\n请输入学生姓名:").strip()
            elif self.__chinese == "":
                chinese = input("语文成绩不得为空!\n请输入语文成绩:").strip()
            elif self.__math == "":
                self.__math = input("数学成绩不得为空!\n请输入数学成绩:").strip()
            elif self.__english == "":
                self.__english = input("英语成绩不得为空!\n请输入英语成绩:").strip()
            elif self.__st[0] == True:
                print("该学生的成绩信息已输入!\n")
                self.__GradeInput()
            else:
                self.__Input(self.__number, self.__name, self.__chinese, self.__math, self.__english)

    def __Input(self, number, name, chinese, math, english):
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """insert into GradeTable(Number,Name,Chinese,Math,English) values (?,?,?,?,?)"""
            self.__cur.execute(self.__sql, (self.__name, self.__number, self.__chinese, self.__math, self.__english))
            self.__conn.commit()
            print("学生成绩输入成功!\n")
            self.__GradeOutput()
        except:
            print("学生成绩输入失败!\n")
            self.Main2()

    def __GradeOutput(self):
        print("\n************************* 2.学生成绩输出 *****************************")
        print("-----------------------------------------------------------------------------")
        print("    学号    |    姓名    |    语文    |    数学    |    英语    |    总分    |    平均分    ")
        print("------------------------------------------------------------------------------")
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """select* from GradeTable"""
            self.__result = self.__cur.execute(self.__sql)
            self.__st = self.__result.fetchall()
            for i in self.__st:
                self.__sum = int(i[2]) + int(i[3]) + int(i[4])
                self.__avg = self.__sum / 3.0
                print("    " + i[0] + "   |   " + i[1] + "    |     " + i[2] + "      |      " + i[3] + "     |      " +
                      i[4] + "     |    " + str(self.__sum) + "    |     " + str(round(self.__avg, 2)) + "  ")
                print("------------------------------------------------------------------------------")
            print()
            self.Main2()
        except:
            print("学生成绩信息输出失败!\n")
            self.Main2()

    def __GradeSearch(self):
        print("\n------------------ 3.学生成绩查询 -----------------")
        print("1、按学生姓名查询;2、按学生学号查询;0、返回.")
        self.__num = input("请输入选择:")
        if self.__num == "1":
            self.__SelectName()
        elif self.__num == "2":
            self.__SelectNumber()
        elif self.__num == "0":
            self.Main2()
        else:
            self.__GradeSearch()

    def __SelectName(self):
        self.__cur = self.__conn.cursor()
        self.__name = input("请输入学生姓名:").strip()
        self.__sql = """select count(*) from GradeTable where Name=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__name,))
        self.__st = self.__result.fetchall()
        if self.__st[0] == (0,):
            print("查无此人!")
            self.__GradeSearch()
        elif self.__st[0] == (1,):
            self.__OutputName(self.__name)
        else:
            print("该学生姓名有多个!请按学号查询!")
            self.__GradeSearch()

    def __OutputName(self, name):
        print("\n-----------------------------------------------------------------------------")
        print("    学号    |    姓名    |    语文    |    数学    |    英语    |    总分    |    平均分    ")
        print("------------------------------------------------------------------------------")
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """select * from GradeTable where Name =?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__name,))
            self.__st = self.__result.fetchall()
            for i in self.__st:
                self.__sum = int(i[2]) + int(i[3]) + int(i[4])
                self.__avg = self.__sum / 3.0
                print("    " + i[0] + "   |   " + i[1] + "    |     " + i[2] + "      |      " + i[3] + "     |      " +
                      i[4] + "     |    " + str(self.__sum) + "    |     " + str(round(self.__avg, 2)) + "  ")
                print("------------------------------------------------------------------------------")
            self.__GradeSearch()
        except:
            print("学生成绩查询失败!\n")
            self.__GradeSearch()

    def __SelectNumber(self):
        self.__cur = self.__conn.cursor()
        self.__number = input("请输入学生学号:").strip()
        self.__sql = """select count(*) from GradeTable where Number =?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__number,))
        self.__st = self.__result.fetchall()
        if self.__number == "":
            print("学号不得为空!")
            self.__SelectNumber()
        elif self.__st[0] == True:
            self.__OutputNumber(self.__number)
        else:
            print("该学号不存在!\n")
            self.__GradeSearch()

    def __OutputNumber(self, number):
        print("\n-----------------------------------------------------------------------------")
        print("    学号    |    姓名    |    语文    |    数学    |    英语    |    总分    |    平均分    ")
        print("------------------------------------------------------------------------------")
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """select* from GradeTable where Number=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__number,))
            self.__st = self.__result.fetchall()
            for i in self.__st:
                self.__sum = int(i[2]) + int(i[3]) + int(i[4])
                self.__avg = self.__sum / 3.0
                print("    " + i[0] + "   |   " + i[1] + "    |     " + i[2] + "      |      " + i[3] + "     |      " +
                      i[4] + "     |    " + str(self.__sum) + "    |     " + str(round(self.__avg, 2)) + "  ")
                print("------------------------------------------------------------------------------")
            self.__GradeSearch()
        except:
            print("学生成绩查询失败!\n")
            self.__GradeSearch()

    def __GradeChange(self):
        self.__cur = self.__conn.cursor()
        print("\n------------------ 4.学生成绩修改 -----------------")
        self.__number = input("请输入学生学号:").strip()
        self.__name = input("请输入学生姓名:").strip()
        self.__sql = """select count(*) from GradeTable where Number=? and Name=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__number, self.__name,))
        self.__st = self.__result.fetchone()
        if self.__number == "" or self.__name == "":
            print("学号或姓名不得为空!\n")
            self.__GradeChange()
        elif self.__st[0] == True:
            self.__ChangeNumber(self.__number)
        else:
            print("查无此人!\n")
            self.Main2()

    def __ChangeNumber(self, number):
        print("\n1、语文;2、数学;3、英语;0、返回.")
        self.__num = input("请选择要修改成绩的学科:").strip()
        if self.__num == "1":
            self.__chinese = input("请输入修改后的语文成绩:").strip()
            self.__AlterChineser(self.__num, number, self.__chinese)
        elif self.__num == "2":
            self.__math = input("请输入修改后的数学成绩:").strip()
            self.__AlterMath(self.__num, self.__number, self.__math)
        elif self.__num == "3":
            self.__english = input("请输入修改后的英语成绩:")
            self.__AlterEnglish(self.__num, self.__number, self.__english)
        elif self.__num == "0":
            self.Main2()
        else:
            self.__ChangeNumber(self.__number)

    def __AlterChineser(self, num, number, chinese):
        self.__cur = self.__conn.cursor()
        try:
            self.__sql = """update GradeTable set Chinese=? where Number =?;"""
            self.__cur.execute(self.__sql, (self.__chinese, self.__number))
            self.__conn.commit()
            print("语文成绩修改成功!\n")
            self.__ChangeNumber(number)
        except:
            print("语文成绩修改失败!\n")
            self.__ChangeNumber(self.__number)
        finally:
            self.__ChangeNumber(self.__number)

    def __AlterMath(self, num, number, math):
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """update GradeTable set Math=? where Number =?;"""
            self.__cur.execute(self.__sql, (self.__math, self.__number))
            self.__conn.commit()
            print("数学成绩修改成功!\n")
            self.__ChangeNumber(self.__number)
        except:
            print("数学成绩修改失败!\n")
            self.__ChangeNumber(self.__number)
        finally:
            self.__ChangeNumber(self.__number)

    def __AlterEnglish(self, num, number, english):
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """update GradeTable set English=? where Number =?;"""
            self.__cur.execute(self.__sql, (self.__english, self.__number))
            self.__conn.commit()
            print("英语成绩修改成功!\n")
            self.__ChangeNumber(number)
        except:
            print("英语成绩修改失败!\n")
            self.__ChangeNumber(number)
        finally:
            self.__ChangeNumber(number)

    def __DeleteGrade(self):
        print("\n------------------ 5.学生成绩删除 -----------------")
        self.__cur = self.__conn.cursor()
        self.__number = input("请输入学生学号:").strip()
        self.__name = input("请输入学生姓名:").strip()
        self.__sql = """select count(*) from GradeTable where Number=? and Name=?;"""
        self.__result = self.__cur.execute(self.__sql, (self.__number, self.__name,))
        self.__st = self.__result.fetchone()
        if self.__number == "":
            print("学号或姓名不得为空!\n")
            self.__DeleteGrade()
        elif self.__st[0] == True:
            self.__CancelDelete(self.__number)
        else:
            print("查无此人!\n")
            self.Main2()

    def __CancelDelete(self, number):
        try:
            self.__cur = self.__conn.cursor()
            self.__sql = """delete from GradeTable where Number =?;"""
            self.__cur.execute(self.__sql, (self.__number,))
            self.__conn.commit()
            print("学生成绩信息删除成功!\n")
            self.Main2()
        except:
            print("学生成绩信息删除失败!\n")
            self.Main2()

    def Main2(self):
        print("**************************************************************************")
        print("1、学生成绩输入;2、学生成绩输出;3、学生成绩查询;4、学生成绩修改;5、学生成绩删除;6、返回登录界面;0、退出当前程序.")
        print("**************************************************************************")
        self.__num = input("请输入选择:").strip()
        if self.__num == "1":
            self.__GradeInput()
        elif self.__num == "2":
            self.__GradeOutput()
        elif self.__num == "3":
            self.__GradeSearch()
        elif self.__num == "4":
            self.__GradeChange()
        elif self.__num == "5":
            self.__DeleteGrade()
        elif self.__num == "6":
            sd = Account()
            sd.Main()
        elif self.__num == "0" or self.__num == "":
            self.__conn.close()
            print("程序已退出!")
            sys.exit(0)
        else:
            self.Main2()


if __name__ == '__main__':
    st = Account()
    st.Main()




可借阅:
http://t.csdn.cn/4X7V1

如有帮助,望采纳


# -*- coding: utf-8 -*-
from datetime import datetime

from flask import Flask, render_template, request, flash, url_for, redirect
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms.fields import *
from wtforms.validators import DataRequired, Length
import numpy as np

from dbSqlite3 import *

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

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'

# set default button sytle and size, will be overwritten by macro parameters
app.config['BOOTSTRAP_BTN_STYLE'] = 'primary'
app.config['BOOTSTRAP_BTN_SIZE'] = 'sm'

bootstrap = Bootstrap(app)

db = SQLAlchemy(app)


#登陆界面设计
class HelloForm(FlaskForm):
    username = StringField(u'用户名', validators=[DataRequired(), Length(1, 20)])
    password = PasswordField(u'密码', validators=[Length(0, 10)])
    select = SelectField(u'身份', choices=[('student', 'Student'), ('teacher', 'Teacher')])
    submit = SubmitField(u'登录')


class AccountForm(FlaskForm):

    secret = PasswordField(u'旧密码', validators=[DataRequired(), Length(0, 10)], render_kw={'placeholder': '旧密码'})
    password = PasswordField(u'新密码', validators=[DataRequired(), Length(0, 10)], render_kw={'placeholder': '新密码'})
    submit = SubmitField(u'修改密码')


class SelectForm(FlaskForm):
    title = StringField(u'课程代码', render_kw={'placeholder': '课程代码'})
    submit = SubmitField(u'选课')


class DeleteForm(FlaskForm):
    title = StringField(u'课程代码', render_kw={'placeholder': '课程代码'})
    submit = SubmitField(u'退课')


class ScoreForm(FlaskForm):
    title_sno = StringField(u'学号', render_kw={'placeholder': '学号'})
    title_cno = StringField(u'课程号', render_kw={'placeholder': '课程号'})
    title_score = StringField(u'分数', render_kw={'placeholder': '分数'})
    submit = SubmitField(u'录入')

class SortForm(FlaskForm):
    title_keda = StringField(u'课程号', render_kw={'placeholder': '课程号'})
    submit22 = SubmitField(u'成绩排序')

#调课界面设计
class ChangeForm(FlaskForm):
    title_cno = StringField(u'课程号', render_kw={'placeholder': '课程号'})
    select1 = SelectField(u'星期几', choices=[('星期一', '星期一'), ('星期二', '星期二'), ('星期三', '星期三'), ('星期四', '星期四'), ('星期五', '星期五'), ('星期六', '星期六'), ('星期日', '星期日')])
    select2 = SelectField(u'时间段',choices=[('8:15~10:05', '8:15~10:05'), ('10:25~12:00', '10:25~12:00'), ('15:00~13:35', '15:00~13:35'), ('18:00~20:25', '18:00~20:25')])

    submit = SubmitField(u'调课')

class AllsortForm(FlaskForm):
    select = SelectField(u'班别',
                          choices=[('整个专业', '整个专业'),  ('计科181', '计科181'),('计科182', '计科182'), ('计科183', '计科183'), ('计科184', '计科184'), ('计科185', '计科185'),
                                   ('计科186', '计科186'),('返回', '返回')])
    submit = SubmitField(u'成绩排序')
# 登录页
@app.route('/', methods=['GET', 'POST'])
def index():
    form = HelloForm()
    if request.method == "GET":
        return render_template('index.html', form=form)

    if form.validate_on_submit():
        if form.select.data == 'student':
            result, _ = GetSql2("select * from student where sno='%s'" % form.username.data)
            if not result:
                flash(u'用户名不存在', 'warning')
                return render_template('index.html', form=form)

            if result[0][5] == form.password.data:
                return render_template('student.html', sno=form.username.data)
            else:
                flash(u'密码错误', 'warning')
                return render_template('index.html', form=form)

        if form.select.data == 'teacher':
            result, _ = GetSql2("select * from teacher where tno='%s'" % form.username.data)
            if not result:
                flash(u'用户名不存在', 'warning')
                return render_template('index.html', form=form)

            if result[0][2] == form.password.data:
                if result[0][4] == 1:
                    return render_template('head_teacher.html', tno=form.username.data)
                else:
                    return render_template('teacher.html', tno=form.username.data)
            else:
                flash(u'密码错误', 'warning')
                return render_template('index.html', form=form)


# 学生主页
@app.route('/student/<int:sno>', methods=['GET', 'POST'])
def student(sno):
    return render_template('student.html', sno=sno)


# 基本信息查看、学生个人登录密码修改功能
@app.route('/student/<int:sno>/account', methods=['GET', 'POST'])
def student_account(sno):
    form = AccountForm()

    result, _ = GetSql2("select * from student where sno='%s'" % sno)
    name = result[0][1]
    gender = result[0][2]
    birthday = result[0][3]
    birthtime = birthday
    major = result[0][4]
    classno = result[0][6]

    result2, _ = GetSql2("select * from classes where classno='%s'" % classno)
    classes = result2[0][1]
    tno = result2[0][2]

    result3, _ = GetSql2("select * from teacher where tno='%s'" % tno)
    tea_name = result3[0][1]

    if form.validate_on_submit():
        result, _ = GetSql2("select * from student where sno='%s'" % sno)
        if form.secret.data == result[0][5]:
            data = dict(
                sno=sno,
                name=name,
                gender=gender,
                birthday=birthday,
                major=major,
                password=form.password.data,
                classno = classno,
            )
            UpdateData(data, "student")
            flash(u'修改成功!', 'success')
        else:
            flash(u'原密码错误', 'warning')

    return render_template('student_account.html', sno=sno, name=name, gender=gender, birthday=birthtime,
                           major=major,classes = classes,tea_name = tea_name, form=form)


# 学生查看课表安排(开设课程基本信息、开设课程学生名单)
@app.route('/student/<int:sno>/course_table', methods=['GET', 'POST'])
def student_course_table(sno):

    messages=[[],[],[],[],  [],[],[],[],  [],[],[],[],  [],[],[],[],  [],[],[],[] ,  [],[],[],[] ,  [],[],[],[]]
    result_score, _ = GetSql2("select * from score where sno='%s'" % sno)
    result_student, _ = GetSql2("select * from student where sno='%s'" % sno)
    name = result_student[0][1]

    for i in result_score:
        result_course, _ = GetSql2("select * from course where cno='%s'" % i[1])
        result_teacher = GetSql2("select * from teacher where tno='%s'" % result_course[0][2])
        result_group = GetSql2("select * from groups  where gno='%s'" % result_course[0][3])

        message =[]
        time = result_course[0][4].split('/')[0]
        strs = result_course[0][1]
        message.append(strs)
        strs = time + '/' + result_course[0][6] + '/' + result_teacher[0][0][1] + '/' + result_group[0][0][
            3] + '/总学时:' + str(
            result_group[0][0][4]) + '/学分:' + str(result_group[0][0][5])
        message.append(strs)

        dijijie = result_course[0][4].split('/')[2]
        week = result_course[0][4].split('/')[1]
        num = 0
        if week == '星期一': num = 0
        elif week == '星期二': num = 1
        elif week == '星期三': num = 2
        elif week == '星期四': num = 3
        elif week == '星期五': num = 4
        elif week == '星期六': num = 5
        elif week == '星期日': num = 6

        if dijijie =='8:15~10:05' : num = num*4 +0
        elif dijijie == '10:25~12:00': num = num * 4 + 1
        elif dijijie == '15:00~16:35': num = num * 4 + 2
        elif dijijie == '18:00~20:25': num = num * 4 + 3

        messages[num].append(message)

        import time
        now = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        day = now[:10].split('-')[2]
        kaoshi = 20 - int(day)

    return render_template('student_course_table.html', sno=sno,messages=messages,name= name,kaoshi =kaoshi)


# 学生选课功能
@app.route('/student/<int:sno>/course_select', methods=['GET', 'POST'])
def student_course_select(sno):
    form = SelectForm()

    result_student, _ = GetSql2("select * from student where sno='%s'" % sno)
    classno = result_student[0][6]

    result_course_class, _ = GetSql2("select * from class_course where classno='%s'" % classno)

    messages = []
    message1=[]
    message2 =[]
    for i in result_course_class:
        result_course, _ = GetSql2("select * from course where cno='%s'" % i[0] )
        result_teacher = GetSql2("select * from teacher where tno='%s'" % result_course[0][2])
        result_score = GetSql2("select count(*) from score where cno='%s'" % i[0])
        result_group = GetSql2("select * from groups  where gno='%s'" % result_course[0][3])
        message = {'category':result_group[0][0][2],'grade':result_group[0][0][5],  'gno': result_course[0][3], 'name': result_course[0][1], 'tname': result_teacher[0][0][1], 'count': result_score[0][0][0],'time':result_course[0][4]}
        if result_group[0][0][2] == '专业必修课程':
            message1.append(message)
        else :message2.append(message)

    messages.append(message1)
    messages.append(message2)
    titles = [('gno', '课程代码'), ('name', '课程名'), ('tname', '任课教师'),('grade','学分'),('time','上课时间'),('count', '已选课人数')]

    if form.validate_on_submit():
        if not form.title.data:
            flash(u'请填写课程代码', 'warning')
        else:
            result =[]
            for i in result_course_class:
                result_course, _ = GetSql2("select * from course where cno='%s'" % i[0])
                if int(result_course[0][3]) == int(form.title.data):
                    result.append(result_course[0][0])
                    break

            #result, _ = GetSql2("select * from course where cno='%s'" % form.title.data)
            if not result:
                flash(u'课程不存在', 'warning')
            else:
                result1 = result[0]
                result, _ = GetSql2("select * from score where sno='%s' and cno='%s'" % (sno, result[0]))
                if result:
                    flash(u'课程选过了', 'warning')
                else:
                    data = dict(
                        sno=sno,
                        cno=result1
                    )
                    InsertData(data, "score")
                    flash('选课成功', 'success')
                    messages = []
                    message1 = []
                    message2 = []
                    for i in result_course_class:
                        result_course, _ = GetSql2("select * from course where cno='%s'" % i[0])
                        result_teacher = GetSql2("select * from teacher where tno='%s'" % result_course[0][2])
                        result_score = GetSql2("select count(*) from score where cno='%s'" % i[0])
                        result_group = GetSql2("select * from groups  where gno='%s'" % result_course[0][3])
                        message = {'category': result_group[0][0][2], 'grade': result_group[0][0][5],
                                   'gno': result_course[0][3], 'name': result_course[0][1],
                                   'tname': result_teacher[0][0][1], 'count': result_score[0][0][0],
                                   'time': result_course[0][4]}
                        if result_group[0][0][2] == '专业必修课程':
                            message1.append(message)
                        else:
                            message2.append(message)

                    messages.append(message1)
                    messages.append(message2)

    return render_template('student_course_select.html', sno=sno, messages=messages, titles=titles, form=form)


# 学生退课功能
@app.route('/student/<int:sno>/course_delete', methods=['GET', 'POST'])
def student_course_delete(sno):
    form = DeleteForm()

    result_score, _ = GetSql2("select * from score where sno='%s'" % sno)
    messages = []
    for i in result_score:
        result_course, _ = GetSql2("select * from course where cno='%s'" % i[1])
        result_teacher, _ = GetSql2("select * from teacher where tno='%s'" % result_course[0][2])
        result_group = GetSql2("select * from groups  where gno='%s'" % result_course[0][3])

        message = {'category': result_group[0][0][2],'method': result_group[0][0][3], 'grade': result_group[0][0][5], 'gno': result_course[0][3],
                   'name': result_course[0][1], 'tname': result_teacher[0][1],'time': result_course[0][4]}
        messages.append(message)

    titles = [('gno', '课程代码'), ('name', '课程名'), ('tname', '任课教师'),('grade','学分'),('category', '课程性质'),('method','考察方式')]

    result_student, _ = GetSql2("select * from student where sno='%s'" % sno)
    classno = result_student[0][6]
    result_course_class, _ = GetSql2("select * from class_course where classno='%s'" % classno)
    if form.validate_on_submit():
        if not form.title.data:
            flash(u'请填写课程号', 'warning')
        else:
            result = []
            for i in result_course_class:
                result_course, _ = GetSql2("select * from course where cno='%s'" % i[0])
                if int(result_course[0][3]) == int(form.title.data):
                    result.append(result_course[0][0])
                    break

            if not result:
                flash(u'课程不存在', 'warning')
            else:
                result_group, _ = GetSql2("select * from groups where gno='%s'" % form.title.data)

                if result_group[0][2] == '专业必修课程':
                    flash(u'必修课程不可退!', 'warning')
                else:
                    DelDataById('sno', 'cno', sno, result[0], "score")
                    flash('退课成功', 'success')
                    return redirect(url_for('student_course_delete', sno=sno, messages=messages, titles=titles,
                                            form=form))

    return render_template('student_course_delete.html', sno=sno, messages=messages, titles=titles, form=form)


# 学生成绩查询功能
@app.route('/student/<int:sno>/score', methods=['GET', 'POST'])
def student_score(sno):
    result_score, _ = GetSql2("select * from score where sno='%s'" % sno)

    all_jidian = 0
    all_xuefen = 0
    messages = []
    for i in result_score:
        result_course, _ = GetSql2("select * from course where cno='%s'" % i[1])
        result_teacher, _ = GetSql2("select * from teacher where tno='%s'" % result_course[0][2])
        result_group = GetSql2("select * from groups  where gno='%s'" % result_course[0][3])
        jidian = 0

        if not i[2]:
            message = {'gno': result_course[0][3], 'cname': result_course[0][1], 'tname': result_teacher[0][1], 'score': '无成绩','jidian':'无绩点'}
        else:
            if i[2]<60:
                jidian = 1
            else :
                jidian = (i[2]-60)/10 + 1
                if jidian>=4:
                    jidian =4
            all_xuefen += result_group[0][0][5]
            all_jidian += result_group[0][0][5] * jidian

            message = {'gno': result_course[0][3], 'cname': result_course[0][1], 'tname': result_teacher[0][1], 'score': i[2],'jidian':jidian}
        messages.append(message)

    titles = [('gno', '已选课程号'), ('cname', '课程名'), ('tname', '任课教师'), ('score', '成绩'), ('jidian', '绩点')]
    all_jidian = all_jidian /all_xuefen
    return render_template('student_score.html', sno=sno, messages=messages, titles=titles, all_jidian=round(all_jidian,2))


# 老师主页
@app.route('/teacher/<int:tno>', methods=['GET', 'POST'])
def teacher(tno):
    return render_template('teacher.html', tno=tno)


# 老师个人登录密码修改功能
@app.route('/teacher/<int:tno>/account', methods=['GET', 'POST'])
def teacher_account(tno):
    form = AccountForm()

    result, _ = GetSql2("select * from teacher where tno='%s'" % tno)
    name = result[0][1]
    gender = result[0][3]
    head= result[0][4]
    str = '任课教师'
    if head:
        str = "教导主任"
    if form.is_submitted():
        result, _ = GetSql2("select * from teacher where tno='%s'" % tno)
        if form.secret.data == result[0][2]:
            data = dict(
                tno=tno,
                name=result[0][1],
                password=form.password.data,
                gender = gender,
                head = head
            )
            UpdateData(data, "teacher")
            flash(u'修改成功!', 'success')
        else:
            flash(u'原密码错误', 'warning')

    return render_template('teacher_account.html', tno=tno, name=name ,str = str,gender = gender,form=form)

# 老师开课信息查看(开设课程基本信息、开设课程学生名单)
@app.route('/teacher/<int:tno>/course', methods=['GET', 'POST'])
def teacher_course(tno):
    form =  ChangeForm()
    result_course, _ = GetSql2("SELECT * FROM course WHERE tno='%s'" % tno)

    classe = []
    messages = []
    for i in result_course:
        result_group, _ = GetSql2("SELECT * FROM groups WHERE gno='%s'" % i[3])

        row = {'cno': i[0],'gno': result_group[0][0], 'name': result_group[0][1], 'category': result_group[0][2], 'method': result_group[0][3],
               'keshi': result_group[0][4], 'xuefen': result_group[0][5], 'time': i[4],'banji':i[5],'station':i[6]}
        classe.append(row)


        message = []
        result_score, _ = GetSql2("SELECT sno FROM score WHERE cno='%s'" % i[0])
        if not result_score:
            continue
        else:
            for j in result_score:
                result_student, _ = GetSql2("select * from student where sno='%s'" % j[0])
                classno = result_student[0][6]

                result2, _ = GetSql2("select * from classes where classno='%s'" % classno)
                classes = result2[0][1]
                row = {'cno': i[0], 'cname': i[1], 'sno': result_student[0][0], 'name': result_student[0][1],
                       'gender': result_student[0][2], 'major': result_student[0][4],'classes':classes }
                message.append(row)
        messages.append(message)