Exemple #1
0
def create_teacher():
    if request.method == 'POST':
        tno = request.form['tno']
        tpwd = request.form['tpwd']
        tname = request.form['tname']
        tsex = request.form['tsex']
        ttitle = request.form['ttitle']
        tdept = request.form['tdept']
        ttel = request.form['ttel']
        tmail = request.form['tmail']

        try:
            validators.Teacher.tno(tno)
            validators.Teacher.tpwd(tpwd, True)
            validators.Teacher.tname(tname)
            validators.Teacher.tsex(tsex)
            validators.Teacher.ttitle(ttitle)
            validators.Teacher.tdept(tdept)
            validators.Teacher.ttel(ttel)
            validators.Teacher.tmail(tmail)

            db = get_db()
            cursor = db.cursor()
            cursor.callproc('create_teacher',
                            (tno, generate_password_hash(tpwd), tname, tsex,
                             ttitle, tdept, ttel, tmail))
            db.commit()
            cursor.close()
            flash('创建成功!')
        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.create_teacher'))

    return render_template('admin/create_teacher.html')
Exemple #2
0
def select_course(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute('select * from student_course where sno = %s and cno = %s',
                   (current_user.no, cno))
    if cursor.fetchone() is not None:
        flash('您已选修过该课程!')
    else:
        cursor.execute('select ccap, cselect from course where cno = %s',
                       (cno, ))
        item = cursor.fetchone()
        if item['cselect'] >= item['ccap']:
            flash('课程容量已满!')
        else:
            cursor.execute(
                'select pcno from course_course where cno = %s and pcno not in'
                '(select cno from student_course where sno = %s)',
                (cno, current_user.no))
            if cursor.fetchone() is not None:
                flash('先修条件未满足!')
            else:
                cursor.callproc('select_course', (current_user.no, cno))
                db.commit()
                flash('选课成功!')
    cursor.close()
    return redirect(url_for('student.list_unselected_courses'))
Exemple #3
0
def update_course(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    if request.method == 'POST':
        cname = request.form['cname']
        ctype = request.form['ctype']
        ccredit = request.form['ccredit']
        cdept = request.form['cdept']
        ccap = request.form['ccap']

        try:
            validators.Course.cname(cname)
            validators.Course.ctype(ctype)
            validators.Course.ccredit(ccredit)
            validators.Course.cdept(cdept)
            validators.Course.ccap(ccap)

            cursor.callproc('update_course',
                            (cno, cname, ctype, ccredit, cdept, ccap))
            db.commit()
            cursor.close()
            flash('修改成功!')

        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.update_course', cno=cno))
    else:
        cursor.execute('select * from course where cno = %s', (cno, ))
        course = cursor.fetchone()
        cursor.close()
        if course is None:
            abort(404)
        return render_template('admin/update_course.html', course=course)
Exemple #4
0
def create_admin():
    if request.method == 'POST':
        ano = request.form['ano']
        apwd = request.form['apwd']
        aname = request.form['aname']
        atel = request.form['atel']
        amail = request.form['amail']

        try:
            validators.Admin.ano(ano)
            validators.Admin.apwd(apwd)
            validators.Admin.aname(aname)
            validators.Admin.atel(atel)
            validators.Admin.amail(amail)

            db = get_db()
            cursor = db.cursor()
            cursor.callproc(
                'create_admin',
                (ano, generate_password_hash(apwd), aname, atel, amail))
            db.commit()
            cursor.close()
            flash('创建成功!')

        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.create_admin'))

    return render_template('admin/create_admin.html')
Exemple #5
0
def timetable():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select course.cno cno, cname, rname, time '
        'from course, room, room_course, student_course '
        'where course.cno = room_course.cno and room.rno = room_course.rno '
        'and room_course.cno = student_course.cno and sno = %s',
        (current_user.no, ))
    course_rooms = cursor.fetchall()
    table = [[[] for j in range(4)] for i in range(5)]
    for course_room in course_rooms:
        time = course_room['time'].split('-')
        dim0 = int(time[0]) - 1
        dim1 = int(time[1]) - 1
        item = dict()
        item['cname'] = course_room['cname']
        item['rname'] = course_room['rname']
        cursor.execute(
            'select tname from teacher, teacher_course '
            'where teacher.tno = teacher_course.tno and cno = %s',
            (course_room['cno'], ))
        entries = cursor.fetchall()
        item['tname'] = [entry['tname'] for entry in entries]
        table[dim0][dim1].append(item)
    cursor.close()
    return render_template('student/timetable.html', table=table)
Exemple #6
0
def select_course():
    sno = request.form['sno']
    cno = request.form['cno']
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute('select * from student_course where sno = %s and cno = %s',
                   (sno, cno))
    if cursor.fetchone() is not None:
        flash('该学生已选修过该课程!')
    else:
        cursor.execute('select * from student where sno = %s', (sno, ))
        if cursor.fetchone() is None:
            flash('不存在该学生!')
        else:
            cursor.execute('select ccap, cselect from course where cno = %s',
                           (cno, ))
            item = cursor.fetchone()
            if item is None:
                flash('不存在该课程!')
            elif item['cselect'] >= item['ccap']:
                flash('课程容量已满!')
            else:
                cursor.callproc('select_course', (sno, cno))
                db.commit()
                flash('选课成功!')
    cursor.close()
    return redirect(request.referrer or url_for('index'))
Exemple #7
0
def update_textbook(bno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    if request.method == 'POST':
        bname = request.form['bname']
        bauthor = request.form['bauthor']
        bpress = request.form['bpress']

        try:
            validators.Textbook.bname(bname)
            validators.Textbook.bauthor(bauthor)
            validators.Textbook.bpress(bpress)

            cursor.callproc('update_textbook', (bno, bname, bauthor, bpress))
            db.commit()
            cursor.close()
            flash('修改成功!')

        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.update_textbook', bno=bno))
    else:
        cursor.execute('select *' ' from textbook' ' where bno = %s', (bno, ))
        textbook = cursor.fetchone()
        cursor.close()
        if textbook is None:
            abort(404)
        return render_template('admin/update_textbook.html', textbook=textbook)
Exemple #8
0
def room_to_course(rno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select course.cno cno, cname, time '
        'from course, room_course '
        'where course.cno = room_course.cno '
        'and room_course.rno = %s', (rno, ))
    courses = cursor.fetchall()
    table = [[[] for j in range(4)] for i in range(5)]
    for course in courses:
        time = course['time'].split('-')
        dim0 = int(time[0]) - 1
        dim1 = int(time[1]) - 1
        item = dict()
        item['cno'] = course['cno']
        item['cname'] = course['cname']
        cursor.execute(
            'select tname from teacher where tno in '
            '(select tno from teacher_course where cno = %s)',
            (course['cno'], ))
        entries = cursor.fetchall()
        item['tname'] = [entry['tname'] for entry in entries]
        table[dim0][dim1].append(item)
    cursor.execute('select rno, rname from room where rno = %s', (rno, ))
    room = cursor.fetchone()
    cursor.close()
    return render_template('admin/room_to_course.html', table=table, room=room)
Exemple #9
0
def create_course():
    if request.method == 'POST':
        cname = request.form['cname']
        ctype = request.form['ctype']
        ccredit = request.form['ccredit']
        cdept = request.form['cdept']
        ccap = request.form['ccap']

        try:
            validators.Course.cname(cname)
            validators.Course.ctype(ctype)
            validators.Course.ccredit(ccredit)
            validators.Course.cdept(cdept)
            validators.Course.ccap(ccap)

            db = get_db()
            cursor = db.cursor()
            cursor.callproc('create_course',
                            (cname, ctype, ccredit, cdept, ccap))
            db.commit()
            cursor.close()
            flash('创建成功!')

        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.create_course'))

    return render_template('admin/create_course.html')
Exemple #10
0
def list_ratings(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)

    cursor.execute('select cno, cname from course where cno = %s', (cno, ))
    course = cursor.fetchone()

    cursor.execute(
        'select avg(score) avg_score, count(*) cnt '
        'from rating, course '
        'where rating.cno = course.cno '
        'and rating.cno = %s', (cno, ))
    rating_info = cursor.fetchone()

    cursor.execute(
        'select student.sno sno, sname, score, tags, comment '
        'from rating, student '
        'where rating.sno = student.sno '
        'and rating.cno = %s', (cno, ))
    ratings = cursor.fetchall()
    for rating in ratings:
        tags = rating['tags']
        for i in range(1, 7):
            target = 'tag' + str(i)
            rating[target] = int(tags[i - 1])

    cursor.close()
    return render_template('admin/list_ratings.html',
                           course=course,
                           rating_info=rating_info,
                           ratings=ratings)
Exemple #11
0
def assign_prev_course():
    pcno = request.form['pcno']
    cno = request.form['cno']
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute('select * from course_course where pcno = %s and cno = %s',
                   (pcno, cno))
    if cursor.fetchone() is not None:
        flash('已存在该先修课程!')
    else:
        cursor.execute('select * from course where cno = %s', (cno, ))
        if cursor.fetchone() is None:
            flash('不存在该课程!')
        else:
            cursor.execute('select * from course where cno = %s', (pcno, ))
            if cursor.fetchone() is None:
                flash('不存在该课程!')
            elif pcno == cno:
                flash('不允许设置自己为自己的先修课!')
            else:
                cursor.callproc('assign_prev_course', (pcno, cno))
                db.commit()
                flash('先修课程指定成功!')
    cursor.close()
    return redirect(request.referrer or url_for('index'))
Exemple #12
0
def info_room():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    if request.method == 'POST':
        str_select = ''
        for key in request.form.keys():
            value = request.form[key]
            if key == 'rno':
                if len(value) > 0:
                    if not str.isdigit(value):
                        flash('教室号只能为数字!')
                        return redirect(url_for('admin.info_room'))
                    str_select += key + '=' + value + ' and '
            else:
                if type(value) == str:
                    if len(value) > 0:
                        str_select += key + ' LIKE \'%' + value + '%\' and '
                else:
                    abort(500)
        if len(str_select) == 0:
            return redirect(url_for('admin.info_room'))
        sql = 'select *' \
              ' from room where {} order by rno'.format(str_select[:-4])
        cursor.execute(sql)
    else:
        cursor.execute('select * from room order by rno')
    rooms = cursor.fetchall()
    cursor.close()
    return render_template('admin/info_room.html', rooms=rooms)
Exemple #13
0
def update_room(rno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    if request.method == 'POST':
        rname = request.form['rname']
        rcap = request.form['rcap']

        try:
            validators.Room.rname(rname)
            validators.Room.rcap(rcap)

            cursor.callproc('update_room', (rno, rname, rcap))
            db.commit()
            cursor.close()
            flash('修改成功!')

        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.update_room', rno=rno))
    else:
        cursor.execute('select *' ' from room' ' where rno = %s', (rno, ))
        room = cursor.fetchone()
        cursor.close()
        if room is None:
            abort(404)
        return render_template('admin/update_room.html', room=room)
Exemple #14
0
def create_textbook():
    if request.method == 'POST':
        bno = request.form['bno']
        bname = request.form['bname']
        bauthor = request.form['bauthor']
        bpress = request.form['bpress']

        try:
            validators.Textbook.bno(bno)
            validators.Textbook.bname(bname)
            validators.Textbook.bauthor(bauthor)
            validators.Textbook.bpress(bpress)

            db = get_db()
            cursor = db.cursor()
            cursor.callproc('create_textbook', (bno, bname, bauthor, bpress))
            db.commit()
            cursor.close()
            flash('创建成功!')

        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('admin.create_textbook'))

    return render_template('admin/create_textbook.html')
Exemple #15
0
def info_stu():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    if request.method == 'POST':
        str_select = ''
        for key in request.form.keys():
            value = request.form[key]
            if type(value) == str:
                if len(value) > 0:
                    str_select += key + ' LIKE \'%' + value + '%\' and '
            else:
                abort(500)
        if len(str_select) == 0:
            return redirect(url_for('admin.info_stu'))
        sql = 'select sno, sname, ssex, sid, sgrade, sdept, stel, smail' \
              ' from student where {} order by sno'.format(str_select[:-4])
        cursor.execute(sql)
    else:
        cursor.execute(
            'select sno, sname, ssex, sid, sgrade, sdept, stel, smail'
            ' from student'
            ' order by sno')
    students = cursor.fetchall()
    cursor.close()
    return render_template('admin/info_stu.html', students=students)
Exemple #16
0
def delete_stu(sno):
    db = get_db()
    cursor = db.cursor()
    cursor.callproc('delete_student', (sno, ))
    db.commit()
    cursor.close()
    flash('删除成功!')
    return redirect(url_for('admin.info_stu'))
Exemple #17
0
def delete_room(rno):
    db = get_db()
    cursor = db.cursor()
    cursor.callproc('delete_room', (rno, ))
    db.commit()
    cursor.close()
    flash('删除成功!')
    return redirect(url_for('admin.info_room'))
Exemple #18
0
def delete_textbook(bno):
    db = get_db()
    cursor = db.cursor()
    cursor.callproc('delete_textbook', (bno, ))
    db.commit()
    cursor.close()
    flash('删除成功!')
    return redirect(url_for('admin.info_textbook'))
Exemple #19
0
def list_untaught_courses():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select * from course where cno not in '
        '(select cno from teacher_course where tno = %s) '
        'order by cno', (current_user.no, ))
    courses = cursor.fetchall()
    cursor.close()
    return render_template('teacher/list_untaught_courses.html',
                           courses=courses)
Exemple #20
0
def list_taught_courses():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select course.cno cno, cname, ctype, ccredit, cdept, ccap, cselect '
        'from course, teacher_course '
        'where course.cno = teacher_course.cno and tno = %s '
        'order by cno', (current_user.no, ))
    courses = cursor.fetchall()
    cursor.close()
    return render_template('teacher/list_taught_courses.html', courses=courses)
Exemple #21
0
def delete_admin(ano):
    if current_user.no == ano:
        flash('不能删除当前用户!')
        return redirect(url_for('admin.info_admin'))
    db = get_db()
    cursor = db.cursor()
    cursor.callproc('delete_admin', (ano, ))
    db.commit()
    cursor.close()
    flash('删除成功!')
    return redirect(url_for('admin.info_admin'))
Exemple #22
0
def unteach_course(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute('select * from teacher_course where tno = %s and cno = %s',
                   (current_user.no, cno))
    if cursor.fetchone() is None:
        flash('您并未教授该课程!')
    else:
        cursor.callproc('unteach_course', (current_user.no, cno))
        db.commit()
        flash('取消教授课程成功!')
    cursor.close()
    return redirect(url_for('teacher.list_taught_courses'))
    def sid(input_str, cur_sno=None):
        if not str.isdigit(input_str) or len(input_str) != 18:
            raise ValidateException("身份证号不合法!")

        db = get_db()
        cursor = db.cursor(dictionary=True)
        cursor.execute('select *'
                       ' from student'
                       ' where sid = %s', (input_str, ))
        student = cursor.fetchone()
        cursor.close()
        if student is not None and student['sno'] != cur_sno:
            raise ValidateException("身份证号不能重复!")
Exemple #24
0
def unrate_course(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute('select * from rating where sno = %s and cno = %s',
                   (current_user.no, cno))
    item = cursor.fetchone()
    if item is None:
        flash('您并未评价过该课程!')
    else:
        cursor.callproc('unrate_course', (current_user.no, cno))
        flash('删除评价成功!')
    db.commit()
    cursor.close()
    return redirect(url_for('student.list_ratings', cno=cno))
Exemple #25
0
def update_stu():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    if request.method == 'POST':
        spwd = request.form['spwd']
        sname = request.form['sname']
        ssex = request.form['ssex']
        sid = request.form['sid']
        sgrade = request.form['sgrade']
        sdept = request.form['sdept']
        stel = request.form['stel']
        smail = request.form['smail']

        try:
            validators.Student.sname(sname)
            validators.Student.spwd(spwd, True)
            validators.Student.ssex(ssex)
            validators.Student.sid(sid, cur_sno=current_user.no)
            validators.Student.sgrade(sgrade)
            validators.Student.sdept(sdept)
            validators.Student.stel(stel)
            validators.Student.smail(smail)

            cursor.callproc('update_student',
                            (current_user.no, sname, ssex, sid, sgrade, sdept,
                             stel, smail))

            if len(spwd) > 0:
                cursor.callproc(
                    'update_student_pwd',
                    (current_user.no, generate_password_hash(spwd)))

            db.commit()
            cursor.close()
            flash('修改成功!')
        except validators.ValidateException as e:
            flash(e.info)

        return redirect(url_for('student.update_stu', sno=current_user.no))
    else:
        cursor.execute(
            'select sno, sname, ssex, sid, sgrade, sdept, stel, smail'
            ' from student'
            ' where sno = %s', (current_user.no, ))
        student = cursor.fetchone()
        cursor.close()
        if student is None:
            abort(404)
        return render_template('student/update_stu.html', student=student)
Exemple #26
0
def unassign_textbook():
    bno = request.form['bno']
    cno = request.form['cno']
    db = get_db()
    cursor = db.cursor()
    cursor.execute('select * from textbook_course where bno = %s and cno = %s',
                   (bno, cno))
    if cursor.fetchone() is None:
        flash('该教材并未被该课程指定!')
    else:
        cursor.callproc('unassign_textbook', (bno, cno))
        db.commit()
        flash('取消指定教材成功!')
    cursor.close()
    return redirect(request.referrer or url_for('index'))
Exemple #27
0
def textbook_to_course(bno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select course.cno cno, cname, ctype, ccredit, cdept, ccap, cselect '
        'from course, textbook_course '
        'where course.cno = textbook_course.cno and bno = %s '
        'order by cno', (bno, ))
    courses = cursor.fetchall()
    cursor.execute('select bno, bname from textbook where bno = %s', (bno, ))
    textbook = cursor.fetchone()
    cursor.close()
    return render_template('admin/textbook_to_course.html',
                           courses=courses,
                           textbook=textbook)
Exemple #28
0
def unteach_course():
    tno = request.form['tno']
    cno = request.form['cno']
    db = get_db()
    cursor = db.cursor()
    cursor.execute('select * from teacher_course where tno = %s and cno = %s',
                   (tno, cno))
    if cursor.fetchone() is None:
        flash('该老师并未教授该课程!')
    else:
        cursor.callproc('unteach_course', (tno, cno))
        db.commit()
        flash('取消教授课程成功!')
    cursor.close()
    return redirect(request.referrer or url_for('index'))
Exemple #29
0
def course_to_textbook(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select textbook.bno bno, bname, bauthor, bpress '
        'from textbook, textbook_course '
        'where textbook.bno = textbook_course.bno and cno = %s '
        'order by bno', (cno, ))
    textbooks = cursor.fetchall()
    cursor.execute('select cno, cname from course where cno = %s', (cno, ))
    course = cursor.fetchone()
    cursor.close()
    return render_template('admin/course_to_textbook.html',
                           textbooks=textbooks,
                           course=course)
Exemple #30
0
def course_to_teacher(cno):
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute(
        'select teacher.tno tno, tname, tsex, ttitle, tdept, ttel, tmail '
        'from teacher, teacher_course '
        'where teacher.tno = teacher_course.tno and cno = %s '
        'order by tno', (cno, ))
    teachers = cursor.fetchall()
    cursor.execute('select cno, cname from course where cno = %s', (cno, ))
    course = cursor.fetchone()
    cursor.close()
    return render_template('admin/course_to_teacher.html',
                           teachers=teachers,
                           course=course)