python+mysql 实现学生成绩管理系统

您所在的位置:网站首页 用python做成绩管理系统GUI大概多少钱 python+mysql 实现学生成绩管理系统

python+mysql 实现学生成绩管理系统

2024-07-13 10:21| 来源: 网络整理| 查看: 265

题目:学生成绩管理系统的设计与实现

利用项目管理器组织、设计并连编一个学生成绩管理系统应用程序。系统由数据库、表单、报表、菜单组成。系统中有一个数据库,数据库中包括三个数据表:学生表、课程表、成绩表,学生表中包括4个班,每个班5名学生,课程表中包括4门课程,成绩表至少有20条记录。

1.建立数据库和基本表,并建立合理的约束

(1) 在数据库中建立4张表: “学生表”表的结构

字段名字段类型字段宽度小数位索引学号字符型8——主索引姓名字符型8——普通索引性别字符型2————年龄数值型40——班级字符型10————密码字符型6————

“管理员表”表的结构

字段名字段类型字段宽度小数位索引帐号字符型8——主索引密码字符型6————

“课程表”表的结构

字段名字段类型字段宽度小数位索引课程号字符型4——主索引课程名称字符型20——普通索引学分数值型41——任课教师字符型8————

“成绩表”表的结构

字段名字段类型字段宽度小数位索引学号字符型8————课程号字符型4————成绩数值型41——

“成绩表”的主索引名称为“学生”,索引表达式为“学号+课程号+STR(成绩,4,1)”;“成绩表”的普通索引名称为“成绩”,索引表达式为“成绩”。

2.数据的录入

根据系统需要录入相应的记录数据。

3. 模块设计 成绩管理模块 – 课程信息录入模块:录入课程信息并保存; – 学生成绩录入模块:录入学生的成绩信息并保存;成绩查询模块:管理员能够根据课程名称、课程号或学号进行查询;学生只能查询自己的所有课程成绩。 创建数据库和表 CREATE DATABASE students_db CHARACTER SET utf8mb4; CREATE TABLE `学生表` ( `学号` varchar(8) NOT NULL, `姓名` varchar(8) DEFAULT NULL, `性别` varchar(2) DEFAULT NULL, `年龄` decimal(4,0) DEFAULT NULL, `班级` varchar(10) DEFAULT NULL, `密码` varchar(6) DEFAULT NULL, PRIMARY KEY (`学号`), KEY `姓名` (`姓名`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `成绩表` ( `学号` varchar(8) NOT NULL, `课程号` varchar(4) NOT NULL, `成绩` decimal(4,1) NOT NULL, PRIMARY KEY (`学号`,`课程号`,`成绩`), KEY `成绩` (`成绩`), KEY `课程号` (`课程号`), CONSTRAINT `学号` FOREIGN KEY (`学号`) REFERENCES `学生表` (`学号`), CONSTRAINT `课程号` FOREIGN KEY (`课程号`) REFERENCES `课程表` (`课程号`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `管理员表` ( `账号` varchar(8) NOT NULL, `密码` varchar(6) DEFAULT NULL, PRIMARY KEY (`账号`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `课程表` ( `课程号` varchar(4) NOT NULL, `课程名称` varchar(20) DEFAULT NULL, `学分` decimal(4,1) DEFAULT NULL, `任课教师` varchar(8) DEFAULT NULL, PRIMARY KEY (`课程号`), KEY `课程名称` (`课程名称`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; main.py # -*- coding=utf-8 -*- import pymysql import prettytable as pt def menu(): menu_info=''' ------------------ 1) 录入课程信息 2) 录入学生成绩 3) 查询学生成绩 0) 退出 ------------------ ''' print(menu_info) # 添加学生信息 def add_student(): student_id: str = input("请输入学号:") db = pymysql.Connect( host='localhost', port=3306, user='root', password='password', db='students_db', charset='UTF8MB4' ) cursor=db.cursor() sql: str = "SELECT * from 学生表 where 学号='%s'" % student_id cursor.execute(sql) while cursor.rowcount > 0: student_id = input("该学号已存在,请重新输入:") sql: str = "select * from 学生表 where 学号 = '%s'" % student_id cursor.execute(sql) name = input("请输入姓名:") sex = input("请输入性别:") age = input("请输入年龄:") student_class: str = input("请输入班级:") password = input("请输入密码:") sql = """INSERT INTO 学生表(学号,姓名,性别,年龄,班级,密码) VALUES (%s,%s,%s,%s,%s,%s)""" cursor.execute(sql, (student_id, name, sex, age, student_class, password)) db.commit() db.close() # 添加课程信息 def add_course(): course_id: str = input("请输入课程号:") db = pymysql.Connect( host='localhost', port=3306, user='root', password='lenovofa230', db='students_db', charset='UTF8MB4' ) cursor=db.cursor() sql: str = "SELECT * from 课程表 where 课程号='%s'" % course_id cursor.execute(sql) while cursor.rowcount > 0: course_id = input("该课程已存在,请重新输入:") sql: str = "select * from 课程表 where 课程号 = '%s'" % course_id cursor.execute(sql) course_name = input("请输入课程名称:") score = input("请输入学分:") teacher = input("请输入任课教师:") sql = """INSERT INTO 课程表(课程号,课程名称,学分,任课教师) VALUES (%s,%s,%s,%s)""" cursor.execute(sql, (course_id, course_name, score, teacher)) db.commit() db.close() # 成绩查询 def query_score(): user: str = input("请输入管理员帐号或你的姓名:") db = pymysql.Connect( host='localhost', port=3306, user='root', password='password', db='students_db', charset='UTF8MB4' ) cursor=db.cursor() sql: str = "SELECT * from 管理员表 where 账号='%s'" % user cursor.execute(sql) results = cursor.fetchall() if cursor.rowcount > 0: print("此帐号为管理员,可以根据课程名称、课程号或学号进行查询") password: str = input("请输入密码:") if password == results[0][1]: print("密码正确") while True: submenu() index = input("请输入选项序号:") while not index.isdigit(): index = input("输入错误,请重新输入:") # 根据课程名称查询 if int(index) == 1: course_name=input("请输入课程名称:") sql = "select 课程表.课程号,课程表.课程名称,学生表.学号,学生表.姓名,成绩表.成绩 \ from 课程表 INNER JOIN 成绩表 ON 课程表.课程号=成绩表.课程号 \ INNER JOIN 学生表 ON 成绩表.学号=学生表.学号 \ where 课程名称= '%s'" % course_name cursor.execute(sql) results = cursor.fetchall() table=pt.PrettyTable() table.field_names=['课程号', '课程名称','学号','姓名','成绩'] table.align='l' for row in results: table.add_row(list(row)) print("查询全部结果如下:") print(table) # 根据课程号查询 elif int(index) == 2: course_id = input("请输入课程号:") sql = "select 课程表.课程号,课程表.课程名称,学生表.学号,学生表.姓名,成绩表.成绩 \ from 课程表 INNER JOIN 成绩表 ON 课程表.课程号=成绩表.课程号 \ INNER JOIN 学生表 ON 成绩表.学号=学生表.学号 \ where 成绩表.课程号= '%s'" % course_id cursor.execute(sql) results = cursor.fetchall() table=pt.PrettyTable() table.field_names=['课程号', '课程名称','学号','姓名','成绩'] table.align='l' for row in results: table.add_row(list(row)) print("查询全部结果如下:") print(table) # 根据学号查询 elif int(index) == 3: student_id = input("请输入学号:") sql = "select 课程表.课程号,课程表.课程名称,学生表.学号,学生表.姓名,成绩表.成绩 \ from 课程表 INNER JOIN 成绩表 ON 课程表.课程号=成绩表.课程号 \ INNER JOIN 学生表 ON 成绩表.学号=学生表.学号 \ where 学生表.学号= '%s'" % student_id cursor.execute(sql) results = cursor.fetchall() table=pt.PrettyTable() table.field_names=['课程号', '课程名称','学号','姓名','成绩'] table.align='l' for row in results: table.add_row(list(row)) print("查询全部结果如下:") print(table) # 查询全部 elif int(index) == 4: sql = "select 课程表.课程号,课程表.课程名称,学生表.学号,学生表.姓名,成绩表.成绩 \ from 课程表 INNER JOIN 成绩表 ON 课程表.课程号=成绩表.课程号 \ INNER JOIN 学生表 ON 成绩表.学号=学生表.学号" cursor.execute(sql) results = cursor.fetchall() table=pt.PrettyTable() table.field_names=['课程号', '课程名称','学号','姓名','成绩'] table.align='l' for row in results: table.add_row(list(row)) print("查询全部结果如下:") print(table) # 退出 elif int(index) == 0: break else: print("输入无效") else: print("密码错误,你没有权限") else: print("此帐号非管理员,只能查询自己的所有课程成绩") sql: str = "SELECT * FROM 成绩表 where 姓名= '%s'" % user cursor.execute(sql) results=cursor.fetchall() for row in results: student_id=row[0] course_id=row[1] score=row[3] print("学号=%s,课程号=%s,成绩=%s" % (student_id,course_id,score)) db.close() def submenu(): menu_info=''' ------------------ 1) 课程名称 2) 课程号 3) 学号 4) 全部 0) 退出 ------------------ ''' print(menu_info) def main(): while True: menu() index = input("请输入选项序号:") while not index.isdigit(): index = input("输入错误,请重新输入:") if int(index) == 1: add_course() elif int(index) == 2: add_student() elif int(index) == 3: query_score() elif int(index) == 0: break else: print("输入无效") if __name__ == '__main__': main()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3