IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 用python写学生信息管理系统v1.2(持续更新中) -> 正文阅读

[Python知识库]用python写学生信息管理系统v1.2(持续更新中)

学生信息管理系统v1.2 - - python

- 内容

  • 对上一章的学生信息管理系统进行重构,要求把账户信息和学生信息写入一个文件,实现加密存储。

  • 使用系统自带库shelve,不引入第三方库。

  • 添加功能 - - 管理员信息修改

  • 学生信息管理系统v1.0

  • 学生信息管理系统v1.1

本次升级所用到的python知识

- open( )函数

open( ) 将会返回一个 file 对象
格式如下:

open(filename,mode)

filename: filename 变量是一个包含了你要访问的文件名称的字符串值。
mode: mode 决定了打开文件的模式。(只读、写入、追加等)默认文件访问模式为只读(r)。

- close方法

  • f.close( )
    在文本文件中(那些打开文件的模式下没有b的),只会相对于文件起始位置进行定位。
    当你处理完一个文件后,调用 f.close( ) 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。

- shelve模块(加密)

  • shelve 是 python 的自带 model,可以直接通过 import shelve 来引用。
  • shelve类似于一个存储持久化对象的持久化字典,即字典文件。

格式如下:

import shelve # 导入模块

studic = {
 'x': {'name': 'pinkward', 'height(cm)': '180', 'weight(kg)': '65', 'class': 'x1', 'tel': '11111111111'}
}  # 初始存储数据 子字典形式储存
f = shelve.open('stu')  # stu文件
f['studic'] = studic  # 存入studic字典
f['gly'] = {'admin': '123456'}  # 存入gly字典
f.close() 

随后会生成以下文件:
在这里插入图片描述
使用记事本打开stu.dat会是如下图一样的乱码:
在这里插入图片描述因此shelve模块也包含了加密技术

- 学生信息管理系统v1.2

代码如下:

  • shelve库
# coding: utf-8
# Time: 2021/9/17 17:16
# Author: pinkward
# Software: PyCharm

# 此代码仅在系统第一次运行前执行,做数据文件的初始化
import shelve # 导入模块

studic = {
'x':{'name':'pinkward','height(cm)':'180','weight(kg)':'65','class':'x1','tel':'11111111111'}
} # 初始存储数据 子字典形式储存
f = shelve.open('stu') # stu文件
f['studic'] = studic # 存入studic字典
f['gly'] = {'admin':'123456'} # 存入gly字典
f.close()
# coding: utf-8
# Time: 2021/9/17 17:16
# Author: pinkward
# Software: PyCharm

# 学生信息管理系统v1.2
import shelve # 导入模块

f = shelve.open('stu') # 从文件中读入数据
studic = f['studic']
gly = f['gly'] # 读入数据
f.close()

def query(): # 查询函数
    if len(studic):
        for x in studic: # 用for循环访问studic字典
            stu = studic[x] # 依据学号 将子字典赋给stu
            print('--学号:', x) # 输出键
            print('\t姓名:    ', stu['name'])
            print('\t身高(cm):', stu['height(cm)'])
            print('\t体重(kg):', stu['weight(kg)'])
            print('\t班级:    ', stu['class'])
            print('\t电话:    ', stu['tel']) # 拿出子字典中的值
    else:
        print('---当前无学生信息!---')

def insert(): # 添加函数
    xh = input('请输入学生学号: ')
    if xh in studic: # 判断系统内是否有该学号
        print('---此学号已存在!请重新输入:---')
    else:
        name = input('请输入姓名: ')
        height = input('请输入身高(cm): ')
        weight = input('请输入体重(kg): ')
        bj = input('请输入班级: ') # 注意班级不能用class
        tel = input('请输入电话: ')
        studic[xh] = {'name': name, 'height(cm)': height, 'weight(kg)': weight, 'class': bj, 'tel': tel} # 存入字典
        print('---已成功录入学生信息!---')

def update(): # 修改函数
    xh = input('请输入学生学号: ')
    if xh not in studic: # 判断系统内是否有该学号
        print('---此学号不存在!请重新输入:---')
    else:
        name = input('请输入姓名: ')
        height = input('请输入身高(cm): ')
        weight = input('请输入体重(kg): ')
        bj = input('请输入班级: ')
        tel = input('请输入电话: ') # 重新输入即完成信息修改
        studic[xh] = {'name': name, 'height(cm)': height, 'weight(kg)': weight, 'class': bj, 'tel': tel} # 存入字典
        print('---已成功修改学生信息!---')

def delete(): # 删除函数
    xh = input('请输入学生学号: ')
    if xh not in studic: # 判断系统是否有该学号
        print('---此学号不存在!请重新输入:---')
    else:
        del studic[xh] # 删除键即删除值 实现删除信息功能
        print('---成功删除该学号学生信息!---')

def editmanager(): # 维护函数
    mname = input('请输入管理员用户名:')
    mpwd1 = input('请输入管理员密码: ')
    mpwd2 = input('请再次输入管理员密码: ')
    if mname and mpwd2 == mpwd1:
        gly.clear()
        gly[mname] = mpwd2
        print('---维护管理员信息成功!---')
    else:
        print('---用户名或密码错误!---')

def main(): # main函数
        print()
        print('欢迎使用学生信息管理系统v1.2!'.center(50))
        username = input('请输入用户名: ')
        password = input('请输入密码: ')
        if username in gly and password == gly[username]:
            while 1:
                while 1:
                    print()
                    print('学生信息管理系统v1.2'.center(50))
                    print('系统菜单'.center(52))
                    print('1.添加学生信息'.center(50))
                    print('2.删除学生信息'.center(50))
                    print('3.修改学生信息'.center(50))
                    print('4.查看学生信息'.center(50))
                    print('5.维护管理员信息'.center(52))
                    print('6.退出管理系统'.center(50))
                    opt = input('请选择功能: ')
                    if not opt or opt not in '123456' or len(opt) > 1:
                        print('---无效选项!请重新选择:---')
                        continue
                    else:
                        break # 确保正确输入进入功能选项
                if opt in '1':
                    insert() # 调用添加函数
                elif opt in '2':
                    delete() # 调用删除函数
                elif opt in '3':
                    update() # 调用修改函数
                elif opt in '4':
                    query() # 调用查询函数
                elif opt in '5':
                    editmanager() # 调用维护函数
                else:
                    f = shelve.open('stu') # 将现有信息写入文件
                    f['studic'] = studic
                    f['gly'] = gly  # 存入当前信息
                    f.close()
                    break # 退出管理系统
            print('---已成功退出!---')
            print('感谢使用学生信息管理系统v1.2!'.center(50))
        else:
            print('---普通用户登录成功!---') # 普通用户页面
            while 1:
                while 1:
                    print()
                    print('欢迎使用学生信息管理系统v1.2!'.center(50))
                    print('系统菜单'.center(52))
                    print('4.查看学生信息'.center(50))
                    print('5.退出管理系统'.center(50))
                    opt = input('请选择功能: ')
                    if not opt or opt not in '45' or len(opt) > 1:
                        print('---无效选项!请重新选择:---')
                        continue
                    else:
                        break # 确保正确输入进入功能选项
                if opt in '4':
                    query() # 调用查询函数
                else:
                    break # 退出管理系统
            print('---已成功退出!---')
            print('感谢使用学生信息管理系统v1.2!'.center(50))

if __name__ == '__main__': # 判断是否为自主运行
    main() # 调用main函数
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:45:02  更:2021-09-20 15:46:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:15:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计