学生管理系统
一、程序功能(Function)
1、功能概述
利用Python完成一个学生信息的增删改查程序,主要涉及知识点:程序控制结构(实现可进可退的多级菜单)、文件读写操作(学生信息要保存到磁盘上的文件里)、利用函数实现功能模块化。
2、思维导图
- 百度脑图
https://naotu.baidu.com/
创建自己的思维导图,整理思绪,更有利于创建项目。
二、学生实体(Entity)
1、思维导图
2、关系模式
- 学生(学号, 姓名, 性别, 年龄, 班级, 专业, 系部, 电话)
3、学生表
- 行——记录——元组
- 列——字段——属性
- 在数据库中创建一个students表,将数据信息保存到表中,以便调用
2021001 李晓红 女 19 2021级软件4班 软件技术 人工智能与大数据学院 15945456780
2021002 王晓刚 男 18 2021级软件4班 软件技术 人工智能与大数据学院 13890904567
2021003 唐雨涵 女 19 2021级软件4班 软件技术 人工智能与大数据学院 18878789023
2021101 张三丰 男 18 2021级大数据1班 大数据技术 人工智能与大数据学院 15945456780
2021102 肖雨林 男 18 2021级大数据1班 大数据技术 人工智能与大数据学院 18890904560
2021103 郑小翠 女 19 2021级大数据1班 大数据技术 人工智能与大数据学院 15890904567
三、构造系统框架
1、创建主程序
- 效果图
- 代码
# 主程序
while True:
print('用户登录')
print('==========')
print('1.登录')
print('2.退出')
print('==========')
mc1 = int(input('输入菜单号: '))
if mc1 == 1:
print('成功登入!')
elif mc1 == 2:
print('\n谢谢使用本程序\n')
break
2、建立主菜单
- 运用def定义函数定义学生管理系统主菜单,并调用。运行程序,查看结果。
3、建立二级菜单
-
运用def定义函数创建学生管理系统二级菜单并调用。
-
运行程序,查看结果
四、建立链接
1、安装pymysql库
(1)在spyder中安装
- 若是用spyder编写程序,则需要打开Anaconda Powershell Prompt (anaconda3)
- 并且输入pip in stall pymysql
- 等待下载完成
- 这里是已经下载好了的。
(2)在PyCharm中安装库
- 这个方法有很多种:
- 在命令提示符中安装:Win+R打开运行,输入cmd,进入命令提示符界面并输入pip install pymysql 回车等待安装完成即可。
- 这里提示已经安装。
2、将程序链接到数据库
- 这里运用的是SSCursor,下面可以直接运用位置数即可;
- 若是在这里运用DictCursor,那么下面就必须使用字段名来引用。
五、对学生管理系统中的数据进行操作
1、增加学生记录
-
定义add_student()函数,并调用。
-
运行查看结果,并录入新的信息。
2、查询学生记录
(1)查询全部学生记录
-
为查询全部学生定义一条函数dis_all_stu()
-
运行程序查看结果
-
成功显示所有学生信息。
-
因为为了书写代码简洁明了,于是把这这条链接到数据库的代码放在了最开头,这样就不用在每次定义的时候再去书写一遍。
(2)按学号查询学生记录
-
为进行按学号查询学生记录,定义一条id_dis_stu()函数
-
运行程序,查看结果
-
成功按学号显示学生信息
(3)按姓名查询学生记录
-
为进行按姓名查询学生记录,定义一条name_dis_stu()函数
-
运行程序,查看结果
-
成功按学号显示学生信息.
3、修改学生信息
(1)修改姓名
-
为进行姓名信息修改,定义一条modify_stu_name()函数
-
运行程序,查看结果
-
成功修改姓名
-
利用查询功能查看是否修改成功
-
操作成功!
(2)修改电话
- 为进行姓名信息修改,定义一条modify_stu_phone()函数
- 运行程序,查看结果
- 利用查询功能查看是否修改成功
- 修改成功
- 这里可以看出,其他字段内容的修改其实也大相径庭,只需将字段名修改即可。
4、删除学生信息
- 为删除信息定义一个del_stu()函数
- 运行程序,查看结果
- 查询记录,检测是否成功删除记录。
- 操作成功
- 学生管理系统(数据库版)成功完成。
- 现在还是一个简陋的一个程序,还有许多需要改进的地方,需要慢慢改进,如果有好的建议,评论区见,谢谢!
六、完整代码
# -*- coding: utf-8 -*-
"""
功能:学生管理系统
作者:zwh
日期:2021年12月7日
"""
import pymysql
# 定义数据链接参数
host = '127.0.0.1'
port = 3306
db = 'student'
user = 'root'
password = 'zl202111'
# 获取数据链接
conn = pymysql.connect(host=host, port=port, db=db, user=user, password=password)
cursor = conn.cursor(pymysql.cursors.SSCursor)
def add_student(): # 添加学生信息
sql = 'insert into students values(%s, %s, %s, %s, %s, %s, %s, %s )'
print('录入信息:')
id = int(input('id:'))
name = input('name:')
gender = input('gender:')
age = int(input('age:'))
class_grade = input('class_grade:')
major = input(('major:'))
college = input('college:')
telephone = input('telephone:')
row = (id, name, gender, age, class_grade, major, college, telephone)
print(row)
count = cursor.execute(sql, row)
if count > 0:
# 提交数据修改
conn.commit()
# 提示用户操作成功
print('记录插入成功!')
else:
# 提示操作失败
print('记录插入失败!')
def dis_all_stu(): # 查询所有学生信息
cursor.execute('select * from students ')
# 获取全部学生数据
students = cursor.fetchall()
# print(students)
for stu in students:
# print(students[i])
print('{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}'.format(stu[0], stu[1], stu[2], stu[3], stu[4],stu[5], stu[6], stu[7]))
def id_dis_stu(): # 以学号查询学生信息
# 执行SQL查询
id = input('输入待查id:')
cursor.execute('select * from students where id = %s', (id))
# 获取全部学生数据
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
for i in student:
print('{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}'.format(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7]))
def name_dis_stu(): # 以姓名查询学生信息
# 执行SQL查询
name = input('输入待查name:')
cursor.execute('select * from students where name = %s', (name))
# 获取全部学生数据
student = cursor.fetchall()
if student == []:
print(f'未查到姓名为{name}的学生!')
for i in student:
print('{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}'.format(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7]))
# 修改学生姓名
def modify_stu_name():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_name = input('输入修改后的姓名:')
count = cursor.execute('update students set name = %s where id = %s', (new_name, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_stu_gender():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_gender = input('输入修改后的性别:')
count = cursor.execute('update students set gender = %s where id = %s', (new_gender, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_stu_age():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_age = input('输入修改后的年龄:')
count = cursor.execute('update students set age = %s where id = %s', (new_age, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_stu_cg():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_class_grade = input('输入修改后的班级:')
count = cursor.execute('update students set class_grade = %s where id = %s', (new_class_grade, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_stu_major():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_major = input('输入修改后的专业:')
count = cursor.execute('update students set major = %s where id = %s', (new_major, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_stu_college():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_college = input('输入修改后的学院:')
count = cursor.execute('update students set college = %s where id = %s', (new_college, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_stu_phone():
while True:
id = input('输入待修改信息的id:')
cursor.execute('select * from students where id = %s', (id))
student = cursor.fetchall()
if student == []:
print(f'未查到学号为{id}的学生!')
else:
new_phone = input('输入修改后的电话:')
count = cursor.execute('update students set telephone = %s where id = %s', (new_phone, id))
if count > 0:
conn.commit()
print('数据修改成功!')
break
else:
print('数据修改失败!')
def modify_student(): # 修改学生信息
while True:
print('\n查询学生记录\n')
print('=================')
print('1.修改姓名')
print('2.修改性别')
print('3.修改年龄')
print('4.修改班级')
print('5.修改专业')
print('6.修改学院')
print('7.修改电话')
print('8.返回上级菜单')
print('=================')
mc4 = int(input('输入菜单号:'))
if mc4 == 1:
modify_stu_name()
elif mc4 == 2:
modify_stu_gender()
elif mc4 == 3:
modify_stu_age()
elif mc4 == 4:
modify_stu_cg()
elif mc4 == 5:
modify_stu_major()
elif mc4 == 6:
modify_stu_college()
elif mc4 == 7:
modify_stu_phone()
else:
break
def query_student(): # 查询学生记录
while True:
print('\n查询学生记录\n')
print('=================')
print('1.按学号查询学生记录')
print('2.按姓名查询学生记录')
print('3.查询全部学生记录')
print('4.返回上级菜单')
print('=================')
mc3 = int(input('输入菜单号:'))
if mc3 == 1:
id_dis_stu()
elif mc3 == 2:
name_dis_stu()
elif mc3 == 3:
dis_all_stu()
else:
break
# 删除信息
def del_stu():
# 执行SQL查询
id = input('输入待查学号:')
count = cursor.execute('delete from students where id = %s', (id))
if count > 0:
# 提交数据修改
conn.commit()
print('记录删除成功!')
else:
print('记录删除失败!')
def login():
username = input('输入用户名: ')
password = input('输入密码: ')
if username == 'zl' and password == '0':
while True:
print('\n学生信息管理\n')
print('===========')
print('1. 增加学生记录')
print('2. 查询学生记录')
print('3. 修改学生记录')
print('4. 删除学生记录')
print('5. 返回上级菜单')
print('===========')
mc2 = int(input('输入菜单号: '))
if mc2 == 1:
add_student()
elif mc2 == 2:
query_student()
elif mc2 == 3:
modify_student()
elif mc2 == 4:
del_stu()
else:
break
else:
print('\n用户名或密码错误,请重新登录\n')
# 主程序
while True:
print('用户登录')
print('==========')
print('1.登录')
print('2.退出')
print('==========')
mc1 = int(input('输入菜单号: '))
if mc1 == 1:
login()
elif mc1 == 2:
print('\n谢谢使用本程序\n')
break
七、总结
1、关于该系统现存在的问题
- 1.关于登录界面,当输入字符时会报错,这个问题可以将代码改为:
while True:
print('用户登录')
print('==========')
print('1.登录')
print('2.退出')
print('==========')
mc1 = input('输入菜单号: ')
if mc1 == str(1):
login()
elif mc1 == str(2):
print('\n谢谢使用本程序\n')
break
elif mc1 != 1 or mc1 != 2:
print('请输入正确的菜单号!')
- 2、修改学生记录还可以按照其他字段的信息修改,也可以单独修改一个字段的信息。
…… - 该系统现在还是一个简陋的程序,还有许多需要改进的地方,需要慢慢改进,如果有好的建议,评论区见,谢谢!
2、学习总结
- 书写程序时需要有一个好的思路,这样有利于对整个系统结构结构框架进行构建。
- 在写程序时,为防止出错找不到原因,可以先打开另一个页面,进行代码测试,书写正确后在放入主程序,这样可以高效避免错误发生。
- 书写程序需要有一个清晰的头脑,所以一定要注意休息。
- 学习python不是一天两天的事,要懂得《劝学》中的“锲而舍之,朽木不折;锲而不舍,金石可镂”
- 注意:Road in the foot!!!