详解用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算法之栈(stack)的实现
Aug 18 Python
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
python 正确保留多位小数的实例
Jul 16 Python
python实现点对点聊天程序
Jul 28 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
使用Puppeteer爬取微信文章的实现
Feb 11 Python
python模拟点击网页按钮实现方法
Feb 25 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
基于Python和C++实现删除链表的节点
Jul 06 Python
python else语句在循环中的运用详解
Jul 06 Python
Python中三种花式打印的示例详解
Mar 19 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
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
js loading加载效果实现代码
2009/11/24 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JS控制层作圆周运动的方法
2016/06/20 Javascript
微信小程序 实例应用(记账)详解
2016/09/28 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
网上开店必备创业计划书
2014/01/26 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
《荷花》教学反思
2014/04/16 职场文书
推荐信怎么写
2014/05/09 职场文书
环境卫生倡议书
2014/08/29 职场文书
会计工作能力自我评价
2015/03/05 职场文书
我的1919观后感
2015/06/03 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
把77A收信机改造成收音机
2022/04/05 无线电