Python 语言基础 综合训练3_基于字典与文件存储的学生管理系统

本文档介绍了一个使用Python实现的学生管理系统,通过字典存储学生数据,列表缓存并提供增删改查功能。系统将数据保存到文本文件,并能从文件读取,确保数据维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务要求:

1.学生数据按照字典数据存储

2.学生数据缓存在列表中,实现增删改查操作

3.最终结果存储在文件中,并能从文件中读入数据到列表中,实现数据维护

第一步:设计⽂本⽂件读写的函数模块文件

file_tools.py

#coding=utf8
def readfile(mfn):
    '''
    以“只读”⽅式打开⽂件,读取文件所有行(直到结束符 EOF)
    :param mfn: 文件路经与文件名
    :return: 返回列表数据类型
    '''
    fp=open(mfn,'r',encoding ='utf-8')
    wls = fp.readlines()     #readlines把文本文件按行分割,并产生一个以每一行文本为一个元素的列表
    fp.close()
    return wls

def writefile(mfn,words):
    '''
    以“只写”⽅式打开⽂件,如有旧文件则替换
    :param mfn: 文件路经与文件名
    :param words: 字符串序列
    :return: 无返回值
    '''
    fp = open(mfn, 'w',encoding ='utf-8')
    fp.writelines(words)
    fp.close()

def appendfile(mfn,str):
    '''
    以“只写”⽅式打开⽂件,文件指针指向文件尾,便于添加操作
    :param mfn: 文件路经与文件名
    :param str: 字符串序列
    :return: 无返回值
    '''
    fp = open(mfn, 'a')
    fp.writelines(str)
    fp.close()

第二步:设计学生管理维护功能模块文件

stu_man.py

#coding=utf-8
def add_stu(student_list):
    print('*********添加学员**********')
    name = input('请输入学员姓名:')
    age = input('请输入学员的年龄:')
    sex = input('请输入学员性别(男/女):')
    phone = input('请输入手机号:')
    student = {'name':name,'age':age,'sex':sex,'phone':phone}
    student_list.append(student)

def query_stu(student_list,type):
    print('*************%s学员**************'%type)
    print('1.查询所有学员')
    print('2.输入学员姓名查询 ')
    num = int(input('选择操作:'))
    if num == 1:
        for x in range(0, len(student_list)):
            student = student_list[x]
            name = student['name']
            age = student['age']
            sex = student['sex']
            phone = student['phone']
            print('序号:%s 姓名:%s 年龄:%s 性别:%s 手机号:%s' % (x, name,age,sex,phone))
    else:
        name = input('请输入学员姓名:')
        while 1:
            rs = False
            for student in student_list:
                if student['name'] == name:
                    index = student_list.index(student,0,len(student_list))
                    print('序号:%s 姓名:%s 年龄:%s 性别:%s 手机号:%s' % (index,student_list[index]['name'],student_list[index][
                        'age'],student_list[index]['sex'],student_list[index]['phone']))
                    rs = True
            if rs == False:
                name = input('未找到学员,请重输:')
            else:
                break

def select_num(student_list,type):
    index = input('请选择要%s的学员序号:'%type)
    index = int(index)
    while index not in range(0, len(student_list)):
        index = int(input('选择的学员不存在,请重选:'))
    #返回选择的序号
    return index

def alter_stu(student_list):
    if len(student_list) == 0:
        print('没有学员信息,无法进行修改操作!')
        #强制结束函数的执行,return下面的代码都不会再执行
        return
    query_stu(student_list,'修改')
    index = int(select_num(student_list,'修改'))
    student = student_list[index]
    student['name'] = input('请输入修改后的姓名(%s):'%student['name'])
    student['age'] = input('请输入修改后的年龄(%s):'%student['age'])
    student['sex'] = input('请输入修改后的性别(%s):'%student['sex'])
    student['phone'] = input('请输入修改后的手机号(%s):'%student['phone'])
    print('修改学员成功')

def dele_stu(student_list ):
    print('1.通过序号删除学员')
    print('2.删除全部学员')
    print('3.根据学员姓名删除')
    num = input('请选择操作:')
    num = int(num)
    while num not in range(1, 4):
        num = int(input('所输选项不存在,请重输:'))
    if num == 1:
        query_stu(student_list,'删除')
        index = select_num(student_list,'删除')
        rs = input('是否真的删除(y/n):')
        if rs == 'y':
            student_list.pop(index)
            print('删除成功')
        else:
            print('删除数据操作已取消!')
    elif num == 2:
        rs = input('是否真的删除(y/n):')
        if rs == 'y':
            student_list.clear()
            print('删除成功')
        else:
            print('删除数据操作已取消!')
    else:
        name = input('请输入想要删除学员的姓名:')
        rs = input('是否真的删除(y/n):')
        if rs == 'y':
            while 1:
               # 创建一个空列表存放不符合情况的信息
               list = []
               for student in student_list:
                   # 判断姓名是否存在列表中
                   if student['name'] != name:
                       # 取出不符合情况的学员的索引
                       index = student_list.index(student)
                       # 将不符合情况的学员添加到list[]
                       list.append(student_list[index])

               # 将学员列表总长度与list的长度比较,
               if len(student_list) == len(list):
                   # 若相等,则没有符合的姓名
                   name = input('序号不存在,请重新输入:')
               else:
                   # 若不相等,说明有符合情况的,则清除大列表,
                   student_list.clear()
                   # 再把list中所有不符合的学员添加到大列表中
                   for dict in list:
                      student_list.append(dict)
                   break
            print('删除成功!')
        else:
            print('删除数据操作已取消!')

第三步:设计主调模块文件

stu_main.py

#coding=utf-8
from stu_man import *
from file_tools import *
student_list = []     #声明一个列表,存放学员字典
while 1:
    print('****************学员管理系统*****************')
    print('*****************1.添加学员*****************')
    print('*****************2.修改学员*****************')
    print('*****************3.查询学员*****************')
    print('*****************4.删除学员*****************')
    print('*****************5.写入文件*****************')
    print('*****************6.读出文件*****************')
    print('*****************0.退出程序*****************')
    num = input('请选择你的操作:')
    num = int(num)
    while num not in range(0,7):
        num =int(input('您选择的选项不存在,请重选:'))
    if num == 1:
        #添加学员
        add_stu(student_list)
    elif num == 2:
        #修改学员
        alter_stu(student_list)
    elif num == 3:
        #查询学员
        query_stu(student_list,'查询')
    elif num == 4:
        #删除学员
        dele_stu(student_list)
    elif num == 5:
        filename = "word.txt"
        i=0;
        for student in student_list:
            if i==0:
                writefile(filename, str(student))
                if len(student_list) > 1:
                    appendfile(filename, '*')
            else:
                appendfile(filename, str(student))
                if i != len(student_list) - 1:
                    appendfile(filename, '*')
            i=i+1
        print("保存成功")

    elif num == 6:
        filename = "word.txt"
        fl = [];
        fl = readfile(filename)
        student_temp = []
        student_temp = fl[0].split('*')
        student_list = []
        for student in student_temp:
            student = student.replace("'", '"')
            print(student)
            student_list.append(eval(student))

        print(student_list)
    else:
        print('退出程序')
        break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值