详解用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绘制人人网好友关系图示例
Apr 01 Python
python黑魔法之参数传递
Feb 12 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
Python中enumerate函数代码解析
Oct 31 Python
详解python单元测试框架unittest
Jul 02 Python
python中的常量和变量代码详解
Jul 25 Python
Django+Xadmin构建项目的方法步骤
Mar 06 Python
Python数据类型之Tuple元组实例详解
May 08 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
python适合做数据挖掘吗
Jun 16 Python
python help函数实例用法
Dec 06 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
php获取汉字首字母的函数
2013/11/07 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
php多进程应用场景实例详解
2019/07/22 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
javascript 写类方式之八
2009/07/05 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
面向初学者的Python编辑器Mu
2018/10/08 Python
python 字典操作提取key,value的方法
2019/06/26 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
教育技术职业规划范文
2014/03/04 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
运动员代表致辞
2015/07/29 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书