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知识库 -> 2021-10-02 -> 正文阅读

[Python知识库]2021-10-02

学生信息记录管理系统



主模块python代码

#!/sur/bin/nve python
# coding: utf-8

#从自定义工具中加载时间显示和菜单列印函数
from stars_moon_tools import show_time, show_h, show_menu
#从本工程工具中加载自定义输入和菜单确认函数
from students_tools import in_s, is_menu

print('\n'*2)
#打印分割线
print('﹊'*21)
#调用函数列印当前时间
print(show_time('年月日时分秒').center(36))
print('﹊'*21)
#菜单循环
while True:
    print('\n'*2)
    s = '学生信息记录管理系统'
    show_h(s, '﹌', 34)
    #调用函数列印系统菜单
    show_menu(['添加', '查询', '删除', '修改', '字段', '口令', '文本', '备份', '说明', '作者'])
    print('﹊'*21+'\n')
    #调用函数输入菜单选项
    flag = in_s('菜单选择')
    #调用函数确认菜单选项
    is_menu(flag)

数据组织结构


??编写本系统是学习python之dict练习之作业。数据以字典作为处理容器,用pickle序列化到磁盘文件保存。我想达到每个学生信息都可以用学号或姓名直接用key查询。我想到的是每个学生用学号和姓名分别为key做两条的记录(两条记录的学号和姓名的后面是完全相同的——一个以字段为key的字典):
1,'学号: {‘姓名’: {‘性别’: ‘男’, ‘民族’: ‘汉’, …, ‘家长电话’: ‘153 2514’}}
2,'姓名: {‘学号’: {‘性别’: ‘男’, ‘民族’: ‘汉’, …, ‘家长电话’: '153
2514’}}

??就在我写这个文档的时候发现:修改一下,更易于代码操作,可能查找速度也会快些(将抽时间百万记录验证速度后,重新改版)。
1,'学号: {‘姓名’: ‘张三’,‘info’: {‘性别’: ‘男’, ‘民族’: ‘汉’, …, ‘家长电话’: ‘1532514’}}
2,'姓名: {‘学号’: ‘600001’, ‘info’: {‘性别’: ‘男’, ‘民族’: ‘汉’, …, ‘家长电话’: '153
2514’}}】

网友提点我的结构方法:
单条学生信息记录,(‘600001’,‘张三’): {‘性别’: ‘男’, ‘民族’: ‘汉’, …, ‘家长电话’: ‘153****2514’}(谢谢“广东·叹红尘”和“秋西”)

??通过百万条学生信息记录记录(实则是分别以是1万、100万和200万,进行比拼验证)的查找,比拼速度。在平均速度上(随机查找10条记录),两种数据组织结构,无太大差异,几乎持平。但就单条记录查找来看,(学号, 姓名)元组为key,需要遍历,有快有慢,快慢相较不止一倍。但分别以学号或者姓名为key的数据组织,则相对均衡,几近平均速度。由实验可见,数据量(1w、100w、200w)大小,影响都不是很大,特别是字典,2w和400w中查找,时间几乎相等,确实让人震惊!
??试验详情,见我前期CSDN博文——“速度比拼——字典VS列表”。基于此,我选择了查找速度平衡的学号或者姓名为key组织结构学生信息记录数据。(返回页首)


**口令校验**

口令校验python 代码

def passwords_proving():
    '''口令校验'''
    #口令校验,有设定系统密码,校验。否则忽略
    if glob.glob("passwords.dat")!=[]:
        #读取预设口令
        passwords_data = passwords_read("passwords.dat")
    if passwords_data==[]:
        return ''
    else:
        show_tip('请输入您的%s位密码。'%len(passwords_data))
    #口令输入
    passwords = passwords_in()
    #口令加密
    passwords_list = passwords_encrypt(passwords)
    #直接比对密文列表校验
    if passwords_list!=passwords_data:
        show_tip("口令校验失败!退出系统。")
        sys.exit()

if __name__=='__main__':
    s = '◇%2s. passwords_proving(): 口令校验。'%kk
    print(s)
    kk += 1

??一个系统,设置登录口令是必要的,于是做了个通过ord()、chr()简单加密解密的口令校验模块。口令字符以单个加密字符为元素的密文列表pickle序列化到文件磁盘保存。如无磁盘密文文件或口令设置为''(空),登录时不进入校验界面,口令不为'',提示输入口令字符数。 校验口令不解密,以同样的方式加密输入的口令,直接比对密文列表(我感觉这样子好像更安全)。

**“口令”模块**
在这里插入图片描述

??“口令”菜单下,可以对口令进行“修改”和“查看”操作。进入“口令”菜单与进入系统一样,要校验口令。([返回页首](#top))

系统菜单

系统菜单界面

??制作菜单界面,我对细节显示调节感觉有些繁琐,费时。因而将调整好的菜单做成了一个模板def show_menu(list),list为菜单列表(不含“退出”),模板会list.append()“退出”,依次双列显示菜单列表项,方便下次弄类似菜单。([返回页首](#top))

菜单显示python 代码

def show_menu(menu_list):
    """系统菜单显示"""
    
    print('\n')
    s = "0. "+menu_list[0]
    #左菜单位置变量
    lm = 18-len(s)
    #追加"退出"菜单到列表
    menu_list.append("退出")
    flag = 1
    for i in menu_list:

        k = menu_list.index(i)+1
        if k==len(menu_list): k = 0
        #菜单项格式字符串
        s = "%d. %s"%(k, i)
        #菜单序号偶数,不换行
        if flag==0:
            print(" "*4+s, "\n")
            flag = 1
        #菜单序号奇数数,换行
        elif flag==1:
            print(" "*lm+s, end="")
            flag = 0
    print("\n")             

if __name__=="__main__":
    s = '◇%2s. show_menu(menu_list):菜单显示'%kk
    print(s)
    kk += 1

“字段”模块

python 代码

def keys_edit():
    '''字段处理'''
    print('\n'*2)
    print('【字段编辑】'.center(36))
    print('\n')
    keys_info = st.get('字段')
    if keys_info is None:
        keys_info = []
    def show_keys(s):
        '''字段打印'''
        print('\n'+' '*8+'%s字段:\n'%s)
        #字段为空,返回。
        if keys_info is None:
            show_tip('字段为空。')
            return ''
        k = 1
        for i in keys_info:
            print(' '*12+'%2s. %s'%(k, i))
            k += 1
    
    #显示原有字段
    show_keys('当前')
    #打印分割线
    print('﹊'*21)
    while True:
        print('\n')
        print('1. 修改  2. 插入  3. 追加  4. 删除  0. 返回'.center(36))
        print('﹊'*21) 
        flag = in_s('选择字段编辑方式')
        if flag not in ('1', '2', '3', '4', '0'):
            show_tip('输入错误!')
            continue
        else:
            break
    if flag=='0':
        return ''
    while True:
        #追加字段,不用选择字段序号
        if flag=='3':
            #防止后续语句int(order)报错,给order赋任意数字字符
            order = '1'
            break
        order = input(' '*12+'选择字段序号:').strip()
        if order.isdigit()!=True or int(order) not in	range(1, len(keys_info)+1):
            show_tip('输入错误!')
            continue
        else:
            break
    order = int(order)
    if flag=='1':
        old_key = keys_info[order-1]
        keys_info[order-1] = in_s('输入修改字段')
        show_tip('字段“%s”已成功修改为“%s”!'%(old_key, keys_info[order-1]))
    elif flag=='2':
        keys_info.insert(order-1, in_s('输入插入字段'))
        show_tip('字段“%s”已成功插入!'%keys_info[order-1])
    elif flag=='3':
        keys_info.append(in_s('输入追加字段'))
        show_tip('字段“%s”已成功追加!'%keys_info[len(keys_info)-1])
    elif flag=='4':
        del_s = keys_info[order-1]
        keys_info.pop(order-1)
        show_tip('字段“%s”已成功删除!'%del_s)
    #显示当前字段
    show_keys('编辑后')
    show_tip('◇ 字段编辑完成 ◇')
    #编辑后的字段保存
    st['字段'] = keys_info
    #调用函数保存
    save_data() 

if __name__=='__main__':
    s = '◇%2s. keys_edit(): 字段编辑模块。'%kk
    print(s)
    kk += 1
字段编辑模块

??如果学生信息记录管理系统的操作者不能对学生信息记录字段进行编辑,那么这就是一个“铁核桃”。对于学生信息记录项的更改,还要用到代码层面,相当不便,这不是我想要的结果。基于这个想法就有了这个字段模块,可以对字段进行“修改”“插入”“追加”“删除”操作。最初,字段内容我是序列化到文件磁盘保存的,每次操作都得从文件读取。后来发现,把字段内容列表优化到了学生信息记录字典中('字段': ['性别', '民族', ..., '家长电话']),与字典一起在系统运行时即随字典读入内存,方便、安全。

“添加”模块

??学生信息记录的新增模块。输入学号时,对学号的格式进行检查(数字位数和范围),不合规范报错并中断添加操作返回主菜单。输入“姓名”可以是任意字符串,检索字典中是否已有该输入字符串为key的记录,有则重新输入,直到不重名(但不能为''(空),为''返回。)。([返回页首](#top))

“查询”模块

??“查询”模块,对输入学号或者姓名进行查找。找到列印,找不到打印错误提示后返回主菜单。([返回页首](#top))

“删除”模块

??“删除”模块,对输入的学号或者姓名进行查找,找到列印并让用户确认删除,不确认返回。找不到打印错误提示并返回。([返回页首](#top))

“修改”模块

?? “修改”模块,对查找到的记录按序列印,选择相应序号修改相应项。对学号的修改,一样要检查是否规范和重复,对姓名修改要检查重复。其他字段的修改相应简单,直接修改即可。不选择序号,返回主菜单。 ??修改的实现:找到记录,读取内容到变量,修改变量后,确认修改,删除原有的字典记录,修改后的记录存入字典,序列化到文件磁盘保存。([返回页首](#top))

“备份”模块

??用os.system()作为容器来执行Linux命令,备份数据文件和恢复。

“文本”模块

??“文本”模块,将学生信息记录以学号为序,逐条将记录以utf-8码格式写入students.txt,每条记录一行。([返回页首](#top))

“说明”模块

??“说明”模块,列印本文档内容。

“作者”模块

??“作者”模块,打印作者信息。请大家指正、探讨。
??如有必要,请联系我。(返回页首)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:02:17  更:2021-10-03 17:03:29 
 
开发: 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年11日历 -2024/11/15 17:41:44-

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