1.1 课题描述
学校教室管理系统是一个用于管理学校教室资源,辅助学校课程配置的系统。就目前大多数学校的情况而言,教室信息是一组庞大复杂的数据,难以通过传统管理方法进行处理。而通过运用计算机进行管理,与之相比有运算速度快、管理效率高、成本低等诸多优势。
同时,教室管理信息化也是学校应用信息技术及其产品的过程,是信息技术应用于教师管理的过程。当今世界,业务管理信息化已经成为一种趋势,就学校对于教师管理方面,建立教室管理信息系统无疑是学校发展的一种趋势,使学校管理更加方便、快捷。因此,学校信息化建设工作具有长期性,复杂性和内容的多变性;正因如此,教室信息管理系统也不是一个简单的、封闭的、静止的系统,而是一个复杂的,开放的、具有变化性和发展性的系统。
综上,我认为学校教室管理系统的开发具备较为重要的意义和价值。+
1.2 系统目标
学校教室管理系统的目标包括:
1. 实现包括教室信息的存储、课程信息的存储、教师信息的存储和学生信息的存储。
2. 实现准确地根据教室、课程、教师、学生四组对象之一来查询对应信息。
3. 实现对数据的添加删除和改动,比如临时调课等。
4. 实现能够实时更新学校教师信息因增删改而发生的变动,比如临时调课等。
5. 实现用户信息管理,使使用者如学生、教师等能够安全地管理用户的个人信息。
6. 实现异常情况反馈,如果系统在某一环节出现异常,则将此异常显示给管理员以便解决。
3.1 tb_ser模块功能描述
tb_ser模块由四个部分组成,第一个部分用于连接数据库和建表,以及对下面写的方法在数据库中进行的处理和操作。第二个部分是用来对用到的所有字段进行定义,并定义get和set方法,用于在后面的文件中可以获取字段信息;第三个部分是用来写实现添加、删除、查找、排序功能在pycharm中实现的主要函数;第四个部分写在数据库中调用的主要函数,主要是sql语句的定义与使用。在该项目模块中使用了pymysql模块。
3.2 课程信息管理模块
3.2.1 添加课程信息
- 描述:
在实现添加功能的过程中,调用def manage()函数先输入需要进行的操作,再输入添加的记录条数,根据记录条数循环遍历,在分别输入时间、专业、任课老师、教学教室、选课人数、学分。然后调用def add和def addser的函数在数据库中进行插入操作,并根据在数据库中的插入条数判断插入是否正确。若插入条数大于零,则插入成功,否则,即失败。
- 关键代码
# 添加信息
elif n=='2':
while True:
print('--------------课程信息--------------')
m = 0
print('1.增加课程信息')
print('2.修改课程信息')
print('3.删除课程信息')
print('4.查询课程信息')
print('5.返回')
j = input('请选择您要查询的序号:')
# 判断用户选择的操作
if j == '1':
# 增加课程信息
j1 = input('请输入要增加课程的时间:')
j2 = input('请输入要增加课程的专业:')
j3 = input('请输入要增加课程的任课老师:')
mycursor = conn.cursor() # 创建数据库游标
# 查询数据库中是否已有相同信息的课程
sql = 'select * from 课程' # 查询所有课程信息
mycursor.execute(sql)
myresult = mycursor.fetchall() # 获取查询结果
for i in myresult: # 遍历查询结果
if i[0] == j1 and i[1] == j2 and i[2] == j3: # 如果找到相同信息的课程
print('该课程信息已存在...')
m = 1 # 设置标记为已存在相同信息
break # 退出循环
if m == 0: # 如果标记为0,表示没有相同信息的课程
j4 = input('请输入要增加的课程选课人数:')
j5 = input('请输入要增加的课程教学教室:')
j6 = input('请输入要增加的课程学分:')
mycursor = conn.cursor() # 创建数据库游标,准备插入数据
sql = 'insert into 课程 (时间,专业,任课老师,选课人数,教学教室,学分) values (%s,%s,%s,%s,%s,%s)' # 编写插入数据的SQL语句
val = (j1, j2, j3, j4, j5, j6) # 准备插入的数据值
mycursor.execute(sql, val) # 执行SQL语句,插入数据到数据库中
conn.commit() # 提交事务,确保数据被保存到数据库中
print('课程添加成功...') # 输出提示信息,表示课程添加成功
- 界面设计截图
图3-1添加功能界面设计
- 程序流程图
图3-2添加功能程序流程图
3.2.2 删除课程信息
- 描述
在实现删除功能模块中,通过输入的编号进行删除数据,显示根据输入的信息在数据库中找到的信息,选择是否删除,如继续删除,则将所查找到的信息删除,如选择不删除,则返回到上一级菜单。
- 关键代码
# 删除信息
elif j == '3': # 如果用户选择删除课程信息
j1 = input('请输入要删除的课程时间:') # 获取用户输入的课程时间
j2 = input('请输入要删除的课程专业:') # 获取用户输入的课程专业
j3 = input('请输入要删除的课程任课老师:') # 获取用户输入的任课老师
mycursor = conn.cursor() # 创建数据库游标
# 查询数据库中是否存在该课程信息
sql = 'select * from 课程' # 查询所有课程信息
mycursor.execute(sql)
myresult = mycursor.fetchall() # 获取查询结果
for i in myresult: # 遍历查询结果
if i[0] == j1 and i[1] == j2 and i[2] == j3: # 如果找到匹配的课程信息
mycursor = conn.cursor() # 创建数据库游标,准备删除数据
# 编写SQL语句,用于删除课程信息
sql = 'delete from 课程 where 时间 = %s'
val = (j1,) # 准备删除的数据值
mycursor.execute(sql, val) # 执行SQL语句,删除数据库中的课程信息
conn.commit() # 提交事务,确保数据被保存到数据库中
m = 1 # 设置标记为已成功删除
print('课程删除成功...') # 输出提示信息,表示课程删除成功
if m == 0: # 如果标记为0,表示该课程信息不存在
print('该课程信息不存在...') # 输出提示信息,表示该课程信息不存在
- 界面设计截图
图3-3删除功能界面设计
- 程序流程图
图3-4删除功能程序流程图
3.2.3 修改课程信息
- 描述
在实现修改信息的过程中,需要先输入编号,根据编号查找到信息,输入选择,在确定需要修改的字段进行修改。该模块只使用了一个被调用函数用以完成对信息的修改,但选择一次只能修改一个字段。在修改的过程中,先后调用了两次函数,第一次调用查找函数,显示要修改的信息,第二次调用修改函数,修改需要的字段信息。
- 关键代码
# 更新信息
elif j == '2': # 如果用户选择修改课程信息
j1 = input('请输入要修改课程时间:') # 获取用户输入的课程时间
mycursor = conn.cursor() # 创建数据库游标
# 查询数据库中是否存在该课程时间
sql = 'select * from 课程' # 查询所有课程信息
mycursor.execute(sql)
myresult = mycursor.fetchall() # 获取查询结果
for i in myresult: # 遍历查询结果
if i[0] == j1: # 如果找到相同课程时间的课程
j2 = input('请输入要修改的课程专业:') # 获取用户输入的课程专业
j3 = input('请输入要修改的课程任课老师:') # 获取用户输入的任课老师
j4 = input('请输入要修改的课程选课人数:') # 获取用户输入的选课人数
j5 = input('请输入要修改的课程教学教室:') # 获取用户输入的教学教室
j6 = input('请输入要修改的课程学分:') # 获取用户输入的课程学分
mycursor = conn.cursor() # 创建数据库游标,准备更新数据
# 编写SQL语句,用于更新课程信息
sql = 'update 课程 set 专业 = %s,任课老师 = %s,选课人数 = %s,教学教室 = %s,学分 = %s where 时间 = %s'
val = (j2, j3, j4, j5, j6, j1) # 准备更新的数据值
mycursor.execute(sql, val) # 执行SQL语句,更新数据库中的课程信息
conn.commit() # 提交事务,确保数据被保存到数据库中
print('课程修改成功...') # 输出提示信息,表示课程修改成功
m = 1 # 设置标记为已修改成功
if m == 0: # 如果标记为0,表示该课程信息不存在
print('该课程信息不存在...') # 输出提示信息,表示该课程信息不存在
- 界面设计截图
图3-5修改功能界面设计
- 程序流程图
图3-6修改功能程序流程图
3.2.4 查找课程信息
- 描述
在实现查找课程信息的过程中,有3种查找方式,第一种是查找全部信息,第二种是按编号查找,第三种是课程姓名查找。这几种方式中不同的一点是sql语句的不同,不同的sql语句导致查找的信息不同。
- 关键代码
# 通过服务查询信息
elif j == '4': # 如果用户选择查询课程信息
while True: # 无限循环,持续等待用户输入查询方式
a = input('请输入要查询的课程:1.时间 2.专业 3.任课老师 4.全部 5.返回') # 获取用户输入的查询方式
if a == '1': # 如果用户选择按时间查询
b = input('请输入要查询的时间:') # 获取用户输入的具体时间
mycursor = conn.cursor() # 创建数据库游标
sql = 'select * from 课程' # 编写SQL查询语句,查询所有课程信息
mycursor.execute(sql) # 执行SQL语句
myresult = mycursor.fetchall() # 获取查询结果
c = [] # 初始化空列表,用于存放符合条件的课程信息
for i in myresult: # 遍历查询结果
if i[0] == b: # 如果课程时间与用户输入的时间匹配
c.append(i) # 将该课程信息添加到列表中
if len(c) > 0: # 如果列表c中有数据,即找到了匹配的课程信息
df = pd.DataFrame(data=c, columns=['时间', '专业', '任课老师', '选课人数', '教学教室', '学分']) # 将数据转化为DataFrame格式
print(df) # 输出查询结果
else: # 如果列表c中没有数据,即没有找到匹配的课程信息
print('输入的课程信息不存在...') # 输出提示信息
elif a == '2': # 如果用户选择按专业查询
b = input('请输入要查询的专业:') # 获取用户输入的具体专业
mycursor = conn.cursor() # 创建数据库游标
sql = 'select * from 课程' # 编写SQL查询语句,查询所有课程信息
mycursor.execute(sql) # 执行SQL语句
myresult = mycursor.fetchall() # 获取查询结果
c = [] # 初始化空列表,用于存放符合条件的课程信息
for i in myresult: # 遍历查询结果
if i[1] == b: # 如果课程专业与用户输入的专业匹配
c.append(i) # 将该课程信息添加到列表中
if len(c) > 0: # 如果列表c中有数据,即找到了匹配的课程信息
df = pd.DataFrame(data=c, columns=['时间', '专业', '任课老师', '选课人数', '教学教室', '学分']) # 将数据转化为DataFrame格式
print(df) # 输出查询结果
else: # 如果列表c中没有数据,即没有找到匹配的课程信息
print('输入的课程信息不存在...') # 输出提示信息
elif a == '3': # 如果用户选择按任课老师查询
b = input('请输入要查询的任课老师:') # 获取用户输入的任课老师姓名
mycursor = conn.cursor() # 创建数据库游标
sql = 'select * from 课程' # 编写SQL查询语句,查询所有课程信息
mycursor.execute(sql) # 执行SQL语句
myresult = mycursor.fetchall() # 获取查询结果
c = [] # 初始化空列表,用于存放符合条件的课程信息
for i in myresult: # 遍历查询结果
if i[2] == b: # 如果课程任课老师与用户输入的姓名匹配
c.append(i) # 将该课程信息添加到列表中
if len(c) > 0: # 如果列表c中有数据,即找到了匹配的课程信息
df = pd.DataFrame(data=c, columns=['时间', '专业', '任课老师', '选课人数', '教学教室', '学分']) # 将数据转化为DataFrame格式
print(df) # 输出查询结果
else: # 如果列表c中没有数据,即没有找到匹配的课程信息
print('输入的课程信息不存在...') # 输出提示信息
elif a == '4': # 如果用户选择查询所有课程信息
mycursor = conn.cursor() # 创建数据库游标
sql = 'select * from 课程' # 编写SQL查询语句,查询所有课程信息
mycursor.execute(sql) # 执行SQL语句
myresult = mycursor.fetchall() # 获取查询结果
df = pd.DataFrame(data=myresult, columns=['时间', '专业', '任课老师', '选课人数', '教学教室', '学分']) # 将数据转化为DataFrame格式
print(df) # 输出所有课程信息
elif a == '5':
break
else:
print('输入有误,请重新输入...')
- 界面设计截图
图3-7查找功能界面设计
- 程序流程图
图3-8查找功能程序流程图
3.2.5 主界面设计
- 描述
在主界面设计过程中,需要完成对项目信息子系统功能的需求,即需要有添加功能、删除功能、查找功能、修改功能、排序功能、退出功能。每种功能前面加入了编号,便于选择时输入。主界面作为媒介,可以跳转到各个功能的主界面,在功能中选择即可完成最后的需求。
- 关键代码
#主页面
print('--------------------欢迎使用学校教室管理系统------------------')
# 无限循环,持续显示菜单选项,直到用户选择退出
while True:
# 打印菜单选项
print('1.教室') # 第一个选项是关于教室的管理
print('2.课程') # 第二个选项是关于课程的管理
print('3.学生') # 第三个选项是关于学生的管理
print('4.教师') # 第四个选项是关于教师的管理
print('0.退出') # 第五个选项是退出系统
# 提示用户输入要查询的序号,并将输入的值存储在变量n中
n = input('请选择您要查询的序号:')
# 分主页面
elif n=='2': # 如果变量n的值等于2,则执行以下代码块
while True: # 无限循环,直到遇到break语句才会退出
print('--------------课程信息--------------') # 打印分隔线,用于显示课程信息的标题
m = 0 # 初始化变量m的值为0,但这个变量在后续代码中并没有被使用
# 打印课程信息的菜单选项
print('1.增加课程信息') # 打印第一个菜单选项
print('2.修改课程信息') # 打印第二个菜单选项
print('3.删除课程信息') # 打印第三个菜单选项
print('4.查询课程信息') # 打印第四个菜单选项
print('5.返回') # 打印第五个菜单选项
# 从用户处获取选择,并将输入的值存储在变量j中
j = input('请选择您要查询的序号:') # 提示用户输入选择的序号
- 界面设计截图
图3-11主界面设计
- 程序流程图
图3-12主界面程序流程图