详解用python实现基本的学生管理系统(文件存储版)(python3)


Posted in Python onApril 25, 2019

这个是升级的版本,比较进阶一点的,相对与之前的文件管理系统,数据只是存储到了内存中,而不是存储到硬盘上,我们想让文件存储到硬盘上的话,一个是存储到文件里,一个是存储到数据库中,存储到数据库中的版本会后续发布,先来看一下文件存储版,是把学生信息存储到了txt文件中,我这里是默认存储到了students.txt文件中,想更改文件名字根据代码修改即可,代码中注释很详细,我也是python初学者,欢迎大家和我交流! 

"""
学生管理系统(文件存储版)
再原有功能的基础上添加了如下功能:
  1.保存学生数据,保存到与python文件同目录下 保存的时候设置编码UTF-8 防止乱码
  2.删除所有学生信息
  3.添加了函数recover_data运行程序先获取数据 文件不存在的话会自行创建并存储一个空列表
"""
import os
 
name_list = [] # 存储学生信息字典,学生信息用字典存,再用列表存储字典
 
 
# 菜单
def display_menu():
  print("-" * 30)
  print("  学生管理系统 v8.8 ")
  print("1.添加学生信息")
  print("2.删除学生信息")
  print("3.修改学生信息")
  print("4.查询单个学生信息")
  print("5.查询所有学生信息")
  print("6.保存学生信息")
  print("7.删除所有学生")
  print("0.退出系统")
  print("-" * 30)
 
 
# 选择序号的获得
def get_choice():
  selected_key = input("请输入选择的序号:")
  return selected_key
 
 
# 检查性别是否合法
def check_sex(new_sex):
  flag = True
  while flag:
    if new_sex == '男' or new_sex == '女':
      flag = False
    else:
      new_sex = input("输入性别有误,请重新输入(男/女):")
  return new_sex
 
 
# 检查电话号码是否合法
def check_phone(new_phone):
  flag = True
  while flag:
    if new_phone.isdigit():
      flag = False
    else:
      new_phone = input("您输入的电话号码有误,请重新输入:")
  return new_phone
 
 
# 检查学号是否重复或者有误
def check_id(new_id):
  flag = True
  while flag:
    # 先检查是不是纯数字再去考虑是否重复的事情,如果不是纯数字直接pass
    if new_id.isdigit():
      for i in range(len(name_list)):
        if name_list[i]['id'] == new_id:
          new_id = check_id(input("您输入的学号重复,请重新输入:"))
      flag = False
    else:
      new_id = input("您输入的学号有误,请重新输入:")
  return new_id
 
 
# 添加学生信息
def add_name():
  new_info = {}
  new_id = check_id(input("请输入学号:"))
  new_info['id'] = new_id
  new_name = input("请输入姓名:")
  new_info['name'] = new_name
  new_sex = check_sex(input("请输入性别(男/女):"))
  new_info['sex'] = new_sex
  new_phone = check_phone(input("请输入电话号码:"))
  new_info['phone'] = new_phone
  name_list.append(new_info)
  print("添加成功!")
 
 
# 查询所有学生信息
def find_all():
  print("=" * 30)
  for name in name_list:
    print(name['id'], name['name'], name['sex'], name['phone'])
  print("=" * 30)
 
 
# 删除学生信息
def del_name():
  del_id_is = input("请输入要删除的学生学号:")
  flag = False
  index = 0
  for i in range(len(name_list)):
    if name_list[i]['id'] == del_id_is:
      flag = True
      index = i
      break
  if flag:
    name_list.pop(index)
    print("删除成功!")
  else:
    print("学生未找到!请检查学号输入是否有误!")
 
 
# 删除所有学生
def del_all():
  global name_list
  flag = input("确定要删除吗?(Y删除/输入其他字符返回菜单):")
  if flag == 'Y' or flag == 'y':
    name_list = []
    print("删除成功!")
  else:
    return
 
 
# 名字修改细节函数
def choice_of_name(index):
  while True:
    choice = input("请输入要修改学生的(1.id 2.姓名 3.性别 4.电话号码,5.全部修改):")
    if choice == '5':
      new_id = input("请输入新的学号:")
      name_list[index]['id'] = new_id
      new_name = input("请输入新的姓名:")
      name_list[index]['name'] = new_name
      new_sex = check_sex(input("请输入性别(男/女):"))
      name_list[index]['sex'] = new_sex
      new_phone = check_phone(input("请输入电话号码:"))
      name_list[index]['phone'] = new_phone
      break
    elif choice == '1':
      new_id = input("请输入新的学号:")
      name_list[index]['id'] = new_id
      break
    elif choice == '2':
      new_name = input("请输入新的姓名:")
      name_list[index]['name'] = new_name
      break
    elif choice == '3':
      new_sex = check_sex(input("请输入性别(男/女):"))
      name_list[index]['sex'] = new_sex
      break
    elif choice == '4':
      new_phone = check_phone(input("请输入电话号码:"))
      name_list[index]['phone'] = new_phone
      break
    else:
      print("输入有误,请重新输入!")
 
 
# 修改学生信息
def re_name():
  id_is = input("请输入要修改的学生学号:")
  flag = False
  index = 0
  # 先找到要修改的学生的下标
  for i in range(len(name_list)):
    if name_list[i]['id'] == id_is:
      flag = True
      index = i
      break
  if flag:
    choice_of_name(index)
    print("修改成功!")
  else:
    print("修改失败,学生信息未找到!")
 
 
# 查询单个学生信息
def find_name():
  find_id_is = input("请输入要查询的学生学号:")
  flag = False
  index = 0
  for i in range(len(name_list)):
    if name_list[i]['id'] == find_id_is:
      flag = True
      index = i
      break
  if flag:
    print("学生查询到,学生信息为:")
    print(name_list[index]['id'], name_list[index]['name'], name_list[index]['sex'], name_list[index]['phone'])
  else:
    print("学生未找到!")
 
 
# 保存学生信息
def save_stu():
  students = str(name_list)
  with open("students.txt", "w", encoding="utf-8") as f:
    f.write(students)
  print("保存成功!文件位置在"+os.getcwd())
 
 
# 恢复数据
def recover_data():
  global name_list
  try:
    with open("students.txt", "r", encoding="utf-8") as f:
      content = f.read()
      if content != '':
        name_list = eval(content)
  except:
    f = open("students.txt", "w")
    f.write("[]")
 
 
def main():
  recover_data()
  exit_name = True
  while exit_name:
    display_menu()
    key = get_choice()
    if key == '1':
      add_name()
    elif key == '2':
      del_name()
    elif key == '3':
      re_name()
    elif key == '4':
      find_name()
    elif key == '5':
      find_all()
    elif key == '6':
      save_stu()
    elif key == '7':
      del_all()
    elif key == '0':
      exit_name = False
    else:
      print("请输入正确的数值!")
 
 
main()

以上所述是小编给大家介绍的python实现基本的学生管理系统详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python打开url并按指定块读取网页内容的方法
Apr 29 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python遍历numpy数组的实例
Apr 04 Python
Django 路由系统URLconf的使用
Oct 11 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Python截图并保存的具体实例
Jan 14 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 #Python
python3通过selenium爬虫获取到dj商品的实例代码
Apr 25 #Python
NumPy 数组使用大全
Apr 25 #Python
Python+OpenCV采集本地摄像头的视频
Apr 25 #Python
python利用selenium进行浏览器爬虫
Apr 25 #Python
python3人脸识别的两种方法
Apr 25 #Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 #Python
You might like
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
PHP制作用户注册系统
2015/10/23 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
PHP7 新增常量
2021/03/09 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
JSON+Jquery省市区三级联动
2016/01/13 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
jQuery实现复制到粘贴板功能
2017/02/11 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
python实现实时视频流播放代码实例
2020/01/11 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
亿企通软件测试面试题
2012/04/10 面试题
打造完美自荐信
2014/01/24 职场文书
党校学习自我鉴定
2014/02/24 职场文书
党风廉设责任书
2014/04/16 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书
出国留学英文自荐信
2015/03/25 职场文书