目录
升序排序(这里是按照python进行升序的,数据量较少不太明显)
项目背景:
每个学校都有自己的教学管理系统,其中关于学生而言,最关心的就是学生关系系统,因为一般每个学生都会在该系统中对自己的成绩进行查看,对于老师来说就可以对学生的成绩进行更改和填入,有时候需要对成绩或者人数进行统计,而整个系统是如何进行编写的呢?
项目目的和意义
制作一个简易的学生管理系统,来实现对数据的增删改查操作,加强对python的基础知识了解程度
项目环境:
Pycharm,python,windows操作系统,
项目功能:
对学生信息进行增删改查,以及排序和统计学生人数等
项目功能模块的代码实现:
主函数模块
说明:用于将多个函数模块综合起来,按照输入的数来确定执行的功能
代码实现:
def main():
while True:
menu()
choice=int(input('请选择:'))
if choice in [0, 1, 2, 3, 4, 5, 6]:
if choice==0:
answer=input('您确定要退出系统吗:y/n')
if answer=='y' or answer=='Y':
print('感谢您的使用!')
break
else:
continue
elif choice==1:
insert()
elif choice==2:
modify()
elif choice==3:
delete()
elif choice==4:
show()
elif choice==5:
sort()
elif choice==6:
total()
菜单模块
说明:提供一个可供使用者选择的菜单
代码实现:
def menu():
print('-----------------------学生管理系统-----------------------')
print('------------------------功能菜单--------------------------')
print('\t\t\t\t\t 1.录入学生信息')
print('\t\t\t\t\t 2.修改学生信息')
print('\t\t\t\t\t 3.删除学生信息')
print('\t\t\t\t\t 4.查看学生信息')
print('\t\t\t\t\t 5.排序学生信息')
print('\t\t\t\t\t 6.统计学生人数信息')
print('\t\t\t\t\t 0.退出学生系统')
print('---------------------------------------------------------')
插入数据模块
说明:插入数据即将数据按照一定的规则通过键盘输入到窗口,并最终保存到相应的文件或者数据库中(这里保存到文件中),为了知道是否插入成功,需要设置相应的提示信息
代码实现:
def insert():
student_list=[]
while True:
id=input('请输入学生id(如1001):')
if not id:
break
name=input('请输入学生姓名(如张三):')
if not name:
break
try:
java=int(input('请输入Java成绩:'))
python = int(input('请输入python成绩:'))
English = int(input('请输入English成绩:'))
except:
print('输入无效,请重新输入')
continue
#保存信息到学生字典中
student={'id':id, 'name': name, 'java': java, 'python': python, 'english':English}
#将信息添加到学生列表中
student_list.append(student)
answer=input('请问您还要继续添加吗:y/n')
if answer=='y':
continue
else:
break
#调用save()函数
save(student_list)
print('学生信息录入完毕!')
删除数据模块
说明:按照一定的规则删除满足该规则的数据,为了知道是否删除成功,添加一些相应的提示信息
代码实现:
def delete():
while True:
student_id=input('请输入您要删除的id:')
if student_id!='': #判断输入的id是否为空,也可表示为not id
if os.path.exists(filename): #判断这个id是否在filename中
with open(filename,'r', encoding='utf-8') as f:
student_info = f.readlines()
else:
student_info=[]
flag=False #标记是否删除 默认是没有删除的
if student_info:
with open(filename, 'w', encoding='utf-8') as file:
d={}
for item in student_info:
d=dict(eval(item)) #将字符串转换为字典
if d['id']!=student_id:
file.write(str(d)+'\n')
else:
flag=True
if flag: #flag=True
print(f'id为{student_id}的学生已被删除')
else:
print(f'没有找到id为{student_id}的学生信息')
else:
print('无学生信息!')
break
show()
answer=input('是否继续删除:y/n')
if answer=='y':
continue
else:
break
保存数据模块
说明:对插入的数据或者已经修改之后的数据进行保存(方式多种,如csv,mysql数据库等,我这里使用的是使用文件存储)
代码实现:
def save(lst):
try:
stu_txt=open(filename,'a',encoding='utf-8')
except:
stu_txt=open(filename,'w',encoding='utf-8')
for item in lst:
stu_txt.write(str(item)+'\n')
stu_txt.close()
修改数据模块
说明:首先按照一定的规则,找到符合该规则的数据,再对其进行修改,修改之后将数据进行保存处理,同样需要设置相应的提示信息,来表示修改是否成功
代码实现:
def modify():
show()
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_old = rfile.readlines()
else:
return
student_id = input("请输入你要修改的学生ID")
with open(filename,'w',encoding='utf-8') as wfile:
for item in student_old:
d= dict(eval(item))
if d['id']==student_id:
print("找到学生信息可以修改该学生的相关信息")
while True:
try:
d['name'] = input("请输入姓名:")
d['java'] = int(input("请输入java成绩:"))
d['python'] = int(input("请输入python成绩:"))
d['english'] = int(input("请输入English成绩:"))
except:
print("你输入的信息有误,请重新输入!!!")
else:
break
wfile.write(str(d)+'\n')
print("信息学修改完毕")
else:
wfile.write(str(d)+'\n')
answer = input("你是否还要继续修改其他学生的信息y/n\n")
if answer=='y' or answer=='Y':
modify()
查看数据模块
说明:对文件中的数据进行读取,并按照一定的规则输出展示,便于了解数据内容
代码实现:
def show_student(lst):
if len(lst)==0:
print("没有查到学生信息,无数据显示!!!")
return
else:
#定义输出的格式
format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
print(format_title.format('ID','姓名','英语成绩','java成绩','python成绩','总成绩'))
#定义内容展示格式
format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
for item in lst:
print(format_data.format(item.get('id'),
item.get('name'),
item.get('english'),
item.get('java'),
item.get('python'),
int(item.get('english'))+int(item.get('java'))+int(item.get('python'))))
def show():
student_lst = []
if os.path.exists(filename):
with open(filename,'r',encoding="utf-8") as rfile:
student_info = rfile.readlines()
for item in student_info:
student_lst.append(eval(item))
if student_lst:
show_student(student_lst)
else:
print("你读取的文件不存在,请检查。。。")
对数据进行排序(按照不同成绩升序或者降序)
说明:按照一定的规则(这里是按照三门课成绩或者总成绩)进行升序或者降序输出
代码实现:
def sort():
show()
studeng_data =[]
if os.path.exists(filename):
with open(filename,'r',encoding="utf-8")as rfile:
student = rfile.readlines()
for item in student:
studeng_data.append(eval(item))
else:
return
px_type = int(input('请选择排序方式(升序:0/降序:1)'))
if px_type==0:
asc_or_desc_bool = False
elif px_type==1:
asc_or_desc_bool = True
else:
print("你输入有误,请重新输入!!!")
sort()
mode = int(input("请选择排序方式(1.按英语成绩排序,2.按python成绩排序,3.按java成绩排序,0.按总成绩排序,)"))
if mode==1:
studeng_data.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool)
elif mode==2:
studeng_data.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool)
elif mode==3:
studeng_data.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_bool)
elif mode==0:
studeng_data.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool)
else:
print("你输入的数字有误请重新输入!!!")
sort()
show_student(studeng_data)
统计人数模块
说明:因为文件中的数据是按照一行为一个学生信息,所以按照行数来进行人数的统计,最终得到人数的多少
代码实现:
def total():
if os.path.exists(filename):
with open(filename,'r',encoding="utf-8") as rfile:
student_info = rfile.readlines()
if student_info:
print(f'一共有{len(student_info)}个学生')
else:
print("没有录入学生信息,请录入后再尝试!!!")
else:
print("暂时未保存学生的信息,请检查文件是否存在!!!")
将py文件转为exe可执行文件
所需要使用的库:
pyinstaller
目的
将一个py文件可以在多台计算机上执行,并且不需要其安装有python环境也能够成功执行。
具体流程
检查自己是否已经下载了pyinstaller库(首先以管理员的身份进入到windows的命令提示符窗口中,然后输入pip list)
如果有可以直接使用命令进行转换,如果没有先进行下载(首先以管理员的身份进入到windows的命令提示符窗口中,然后使用pip install pyinstaller进行下载),这里我已经安装过了。
安装完成之后,使用pyinstaller -F ‘py文件的路径位置‘,然后回车等待出现如下图所示,即表示将py文件打包成exe可执行文件。
查看该路径下是否有student_sys.exe文件
后期添加了数据之后会自动生成一个student.txt文件,用于存储数据的
项目成果展示
首先打开上一步的可执行文件,如下图所示:
插入学生信息
查看学生信息
对学生信息进行排序
升序排序(这里是按照python进行升序的,数据量较少不太明显)
降序排序(这里按照英语成绩降序)
修改学生信息
删除学生信息
统计学生人数
项目不足:
只是创建多个不同的功能函数,对其进行调用实现,
保存方式单一,不具备良好的可读性
操作窗口的单一,没有很好的可观性
不能实现通过网络,对数据进行操作
优化方向
可以添加相应的UI界面,将输入方式改为点击触发
修改保存方式,使用数据库进行保存,个人建议使用MYSQL数据库
可以将网络应用到该项目,使其能够通过网络实现数据操作