基于python制作简易版学生信息管理系统
作者:Falcont 发布时间:2022-04-15 18:39:45
标签:python,学生,信息管理系统
一、前言
本篇博客对于文件操作、字典、列表、匿名函数以及sort()等内置函数进行了系统的整理操作,以设计一个学生信息管理系统的形式展示,具体概念方法等会在代码后进行分析讲述,请读者仔细分析每一处解析,对于基础巩固将会有很大的帮助,其中还有每一块代码的设计思路图,逻辑分析会有一定的提升。
二、需求分析
本程序需要用到os模板首先导入,并命名要存储信息的文件
import os
File_Object_Name = 'Student_Inforation.txt'
三、主函数
def Main():
while True:
Menu()
_Select = int(input('Please select operation:'))
if _Select in [0, 1, 2, 3, 4, 5, 6, 7]:
if _Select == 0:
_Answer = input('Do you want to log out?(Y/N)')
if _Answer == 'Y' or _Answer == 'y':
print('Thank for you use!!!')
break
pass
else:
continue
pass
pass
elif _Select == 1:
Insert_Infor()
pass
elif _Select == 2:
Search_Infor()
pass
elif _Select == 3:
Delete_Infor()
pass
elif _Select == 4:
Change_Infor()
pass
elif _Select == 5:
Sort()
pass
elif _Select == 6:
Count_Total_Num()
pass
elif _Select == 7:
Show_Infor()
pass
pass
else:
print('Error Input!!!')
pass
四、功能菜单
def Menu():
print('=========Student Information Management System=========')
print('---------------------Function menu---------------------')
print(' 1、Input Student Information')
print(' 2、Search Student Information')
print(' 3、Delete Student Information')
print(' 4、Change Student Information')
print(' 5、Sort According to Score')
print(' 6、Count Total Student Number')
print(' 7、Show All Student Information')
print(' 0、Log Out')
print('-------------------------------------------------------')
pass
五、录入信息
def Insert_Infor():
Student_Infor_List = [] # 创建一个学生信息空列表,后面会用到
while True:
Stu_Id = input('Please input the id(such as 1001,1002):')
if not Stu_Id: # 空的字符串转为bool类型为False,非空为True,此处若是输入为空会直接跳出循环。(空列表、字典、元组等都满足)
break
pass
Stu_Name = input('Please input the name:')
if not Stu_Name:
break
pass
try:
English_Score = int(input('Please input the English score:'))
Python_Score = int(input('Please input the Python score:'))
Java_Score = int(input('Please input the Java score:'))
pass
except:
print('Error Input(not int),please input again')
continue
pass
# 将每个学生的信息放入一个字典当中
Student_Infor_Dict = {'Id': Stu_Id, 'Name': Stu_Name, 'English': English_Score, 'Python': Python_Score, 'Java': Java_Score}
# 将一个字典作为一个元素放入学生信息列表
Student_Infor_List.append(Student_Infor_Dict) # 使用 append() 方法来添加列表项
_Answer = input('Whether to input more?(Y/N)')
if _Answer == 'Y' or _Answer == 'y':
continue
pass
else:
break
pass
pass
# 将学生信息列表中的字典元素保存到文件之中,调用Keep_Infor()函数
Keep_Infor(Student_Infor_List)
print('Input Finished')
pass
六、保存信息
def Keep_Infor(List):
File_Object = open(File_Object_Name, mode='a', encoding='utf-8')
# 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
for item in List:
File_Object.write(str(item)+'\n')
pass
# 将传入的列表中的字典元素强制转换成字符串类型并拼接上换行符写入文件
File_Object.close()
七、查找信息
def Search_Infor():
Student_Query = [] # 空列表,之后用于存放查找到的学生信息
while True:
Student_Id = ''
Student_Name = ''
if os.path.exists(File_Object_Name):
# os.path模块主要用于文件的属性获取,os.path.exists()就是判断括号里的文件是否存在,括号内的可以是文件路径/名。
Search_Mode = int(input('search by id(1) or by name(2):'))
if Search_Mode == 1:
Student_Id = input('Please input id:')
pass
elif Search_Mode == 2:
Student_Name = input('Please input name:')
pass
else:
print('Error Input,try again!')
Search_Infor()
pass
with open(File_Object_Name, 'r', encoding='utf-8')as File_Object: # 只读模式打开文件并将类对象赋给File_Object
Student_List = File_Object.readlines() # readlines()按行读取,一次性读取所有内容,返回一个列表,每一行内容作为一个元素
for item in Student_List: # 遍历列表中元素
_Dict = eval(item)
# 由于是以字符串类型保存到文件中,此时item相当于'dict'形式,要将其用eval()函数转换为字典,即脱掉''。
if Student_Id: # 如果选的是按照姓名查找,则此空字符串已经不再为空,bool类型为True
if Student_Id == _Dict['Id']:
Student_Query.append(_Dict)
pass
pass
elif Student_Name:
if Student_Name == _Dict['Name']:
Student_Query.append(_Dict)
pass
pass
pass
if Student_Query == []: # 仍为空说明未找到。
print('no such student,try again')
Search_Infor() # 再次调用函数
pass
pass
pass
else:
print('Still no such file to keep student information!')
pass
print(Student_Query[0]) # 此时该列表中只有一个字典元素,直接打印输出
Student_Query.clear() # 调用内置函数清空列表,方便下次使用
_Answer = input('Whether to search others?(Y/N)')
if _Answer == 'Y' or _Answer == 'y':
continue
pass
else:
return
pass
pass
八、删除信息
def Delete_Infor():
while True:
Student_Id = input('Please input the student‘s id that you want to delete:')
if Student_Id:
if os.path.exists(File_Object_Name):
with open(File_Object_Name, 'r', encoding='utf-8')as File1:
Old_Student_Infor = File1.readlines() # 读取每行作为元素放入Old_Student_Infor列表
pass
pass
else:
Old_Student_Infor = []
pass
Flag = False # 是否删除成功的标志
if Old_Student_Infor:
with open(File_Object_Name, 'w', encoding='utf-8')as File2:
_Dict = {}
for item in Old_Student_Infor:
_Dict = eval(item) # 将删除信息之前的列表元素转化为字典形式赋给_Dict
if _Dict['Id'] != Student_Id:
File2.write(str(_Dict)+'\n')
# 如果与要删除的信息的Id不同,覆盖写入原文件
pass
else:
Flag = True # 如果相同的话,则不写入文件中,相当于删除成功
pass
pass
if Flag:
print('Student information of {} has been delete'.format(Student_Id))
pass
else:
print('Can not find student of id:{}'.format(Student_Id))
pass
pass
pass
else:
print('file have no student information')
break
pass
Show_Infor()
_Answer = input('Whether to delete more?(Y/N)')
pass
if _Answer == 'Y' or _Answer == 'y':
continue
pass
else:
break
pass
pass
pass
九、修改信息
def Change_Infor():
Show_Infor()
if os.path.exists(File_Object_Name):
with open(File_Object_Name, 'r', encoding='utf-8')as old_file:
Old_Student_Infor = old_file.readlines()
pass
pass
else:
return
Student_Id = input('Please input the id you wanna change:')
if Student_Id:
with open(File_Object_Name, 'w', encoding='utf-8')as new_file:
for item in Old_Student_Infor:
_dict = dict(eval(item))
if _dict['Id'] == Student_Id:
print('Find it,can change it!')
while True:
try:
_dict['Name'] = input('Please input new name:')
_dict['English'] = input('Please input new English score:')
_dict['Python'] = input('Please input new Python score:')
_dict['Java'] = input('Please input new Java score:')
pass
except:
print('Error Input!!!Try again')
pass
new_file.write(str(_dict)+'\n')
print('Successfully change!')
break
pass
pass
else:
print('Can‘t find it')
new_file.write(str(_dict)+'\n')
pass
pass
pass
pass
_Answer = input('Whether to change more?(Y/N)')
if _Answer == 'y' or _Answer == 'Y':
Change_Infor()
pass
else:
return
pass
十、显示信息
def Show_Infor():
Infor_List = []
if os.path.exists(File_Object_Name):
with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:
Stu_List = File_Object.readlines()
for item1 in Stu_List:
Infor_List.append(dict(eval(item1)))
pass
if Infor_List:
for item2 in Infor_List:
print(item2)
pass
pass
else:
print('no student')
pass
pass
pass
else:
print('no such file')
pass
pass
十一、按成绩排序
def Sort():
Show_Infor()
Infor_List = []
if os.path.exists(File_Object_Name):
with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:
Student_List = File_Object.readlines()
for item in Student_List:
_Dict = dict(eval(item))
Infor_List.append(_Dict)
pass
pass
pass
else:
print('no such file')
return
Sort_Mode = bool(input('Please input sort mode(0、ascending order|1、descending order)'))
if not Sort_Mode: # ascending order
reverse_mode = True
pass
else: # descending order
reverse_mode = False
pass
Specific_Sort_Mode = int(input('Sort by English(1),by Python(2),by Jave(3),by total(4):'))
if Specific_Sort_Mode == 1:
Infor_List.sort(key=lambda x: int(x['English']), reverse=reverse_mode)
pass
elif Specific_Sort_Mode == 2:
Infor_List.sort(key=lambda x: int(x['Python']), reverse=reverse_mode)
pass
elif Specific_Sort_Mode == 3:
Infor_List.sort(key=lambda x: int(x['Java']), reverse=reverse_mode)
pass
elif Specific_Sort_Mode == 4:
Infor_List.sort(key=lambda x: int(x['English']) + int(x['Python']) + int(x['Java']), reverse=reverse_mode)
pass
else:
print('Error Input,try again')
Sort()
pass
for item in Infor_List:
print(item)
pass
pass
sort()函数原型: list.sort(key=None, reverse=False)
key参数 :
key接受的是一个只有一个形参的函数,形式如下
def f(a):
return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
reverse参数 :
reverse接受的是一个bool类型的值 (Ture or False),表示是否颠倒排列顺序,一般默认的是False
十二、统计人数
def Count_Total_Num():
if os.path.exists(File_Object_Name):
with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:
Stu_List = File_Object.readlines()
_Count = len(Stu_List)
if _Count >= 2:
print('A total of {} students')
pass
elif _Count ==1:
print('A single student!')
pass
else:
print('no student!')
pass
pass
pass
else:
print('still no such file!')
pass
pass
十三、最后记得运行主函数
Main()
十四、将程序打包成可执行exe文件
1.cmd进入command界面
2.输入pip install PyInstaller
3.安装完成后仍在cmd界面输入pyinstaller -F py为扩展名的文件路径\文件名.py
4.操作后将会有一大串代码,倒数第二行会有最终文件的保存地址,打开之后将之前编译程序生成的txt文件移入该文件夹中即可操作
来源:https://blog.csdn.net/Falcont/article/details/115675696


猜你喜欢
- 制作NBA数据爬虫捋顺思路我们在这里选择的是百度体育带来的数据,我们在百度当中直接搜索NBA跳转到网页,我们可以看到,百度已经为我们提供了相
- 本文实例讲述了JS实现点击li标签弹出对应的索引功能。分享给大家供大家参考,具体如下:需求:点击li标签,弹出对应的索引先看效果:html结
- module Main whereimport Network.Socketimport Control.Concurrentmain ::
- 结论:copy复制会比等号复制慢。但是copy复制为值复制,改变原切片的值不会影响新切片。而等号复制为指针复制,改变原切片或新切片都会对另一
- python如何更新修改后的Python模块1.利用python的MySQLdb模块利用原生的sql语句进行更新的方法代码配置方法代码2.使
- 代码之余,将代码过程重要的一些代码段备份一下,如下的代码内容是关于Python从ftp服务器下载文件的的代码,希望能对小伙伴有用途。#cod
- xorm用于在golang中链接数据库,并完成增删改差操作,不管是orm还是raw方式都十分的新颖简单。sql语句postgresql pg
- 变量的存储在高级语言中,变量是对内存及其地址的抽象。对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,
- 随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NI
- 背景在写代码过程中,如果有频繁重复性的编码操作,或者可以Reuse的各类代码,可以通过Python写一个脚本,自动生成这类代码,就不用每次手
- 本文实例讲述了python实现根据月份和日期得到星座的方法。分享给大家供大家参考。具体实现方法如下:#计算星座def Zodiac(mont
- 这里使用TensorFlow实现一个简单的卷积神经网络,使用的是MNIST数据集。网络结构为:数据输入层–卷积层1–池化层1–卷积层2–池化
- 在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题。在今天的文章里,我想从性能角度进一步谈下书签查找,还
- 用法:mean(matrix,axis=0) 其中 matrix为一个矩阵,axis为参数以m * n矩阵举例:axis 不设置
- 先看看效果图:简单的分页js代码:1、效果描述: 不用分页即可显示的jQuery插件 jQuery分页插件——jQu
- 如题,先上效果图:主要分为两大步骤使用python语句,通过百度地图API,对已知的地名抓取经纬度使用百度地图API官网的html例程,修改
- 1、表示乘号2、表示倍数,例如:def T(msg,time=1): print((msg+' ')*time)
- 首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的。 注:本操作是在WIN命令提示符下,phpMyA
- http协议学习系列
- --取得所有数据库名 包括系统数据库 --SELECT name FROM master.dbo.sysdatabases --取得所有非系