实训日志02

2 篇文章 0 订阅
2 篇文章 0 订阅

一、程序功能(Function)

1.功能概述

利用Python完成一个学生信息的增删改查程序,主要涉及知识点:程序控制结构(做多级菜单)、文件读写操作(学生信息要保存到磁盘上的文件里)。

2.思维导图

在这里插入图片描述

二、学生实体(Entity)

1.思维导图

在这里插入图片描述

2.关系模式

学生(学号,姓名,班级,性别,专业系部,电话)

3.学生表记录

(行——记录——元组,列——字段——属性)

学号姓名班级性别年龄专业系部电话
10107530柒木楠学术一班19学术南哈蒙理工学院学院11111111
10107531不言学术一班18学术南哈蒙理工学院学院22222222
10107532妄言学术一班18学术南哈蒙理工学院学院33333333
10107533柒夏学术一班20学术南哈蒙理工学院学院44444444
10107534顾伟亦学术一班17学术南哈蒙理工学院学院55555555
10107535杨洋学术一班18学术南哈蒙理工学院学院66666666
10107536司徒沫学术一班18学术南哈蒙理工学院学院77777777
  • 这学期,我们还没学过MySQL,所以我们将学生信息保存到文本文档里,用空格来隔开每个字段。
    在这里插入图片描述

三、读取学生文件

  • 文件结构是由若干行若干列构成,一行一行地读取,每一行读取出来的字符串,通过空格拆分成一个列表,所有行读取出来之后就自然构成列表的列表,即二维列表。

1、演示用二维列表保存多个学生信息

  • 创建六个列表:student1、student2、student3、student4、student5、student6和student7,然后添加到student是列表里
    在这里插入图片描述
  • 直接输出student列表在这里插入图片描述
  • 格式输出students
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.读取学生文件数据,保存到二维列表里

  • 查看学生文件位置
    在这里插入图片描述

  • 切换工作目录
    在这里插入图片描述

  • 读取学生文档,保存到二位列表并输出
    在这里插入图片描述

  • 大家可以发现一个问题,每一行尾巴有个“\n”,需要去除掉才好。
    在这里插入图片描述

  • 格式化输出students列表
    在这里插入图片描述
    在这里插入图片描述

  • len(students) - 得到二维列表的行数

  • len(students[i]) - 得到二维列表第(i + 1)行的元素个数,即列数

3,我们操作可能会遇到的问题

  • 学生.txt采用UTF-8编码方式保存
    在这里插入图片描述
  • 读取时会报错
    在这里插入图片描述
  • 我们需要怎么解决呢?这里我们只需要将学生.txt文件改成ANSI编码方式保存就可以了。
    在这里插入图片描述
  • 现在读取文档不会报错咯
    在这里插入图片描述

四、对学生二维列表进行增删改查操作

1.增加学生记录

  • 目前students里有七个元素(学生)
    在这里插入图片描述
  • 添加一个新元素(学生)
    在这里插入图片描述
  • 输出更新之后的students二维列表
    在这里插入图片描述

2.查询学生记录

(1)按照学号来查学生记录

在这里插入图片描述

  • 这个程序有个缺陷,如果没有查到,就吗,没有任何输出信息,按理应该给用户一个提示:“查无此人!”或“无法查询!”
    在这里插入图片描述

(2)按照姓名查询学生记录

在这里插入图片描述

3.修改学生记录

  • 修改学号为"10107530"的学生记录,将年龄改为“16”,电话改为“15152525”

在这里插入图片描述

  • 修改学号为“10107531”的学生记录,将年龄改为“20”,电话改为“13133535”

在这里插入图片描述

4.删除学生记录

  • 删除学号为“10107530”的学生记录

在这里插入图片描述
在这里插入图片描述

  • 删除学号为“10107531”的学生记录
    在这里插入图片描述

五、将学生二维写入学生文件

1.将students写入学生.txt

在这里插入图片描述

2.查看更新过后的学生.txt

在这里插入图片描述

六、构建学生信息管理多级菜单系统

(一)构建多级菜单系统

  • 编写程序 - 学生信息管理.py
    在这里插入图片描述
    在这里插入图片描述
# -*- coding: utf-8 -*-
"""
功能:学生信息管理
作者:柒木楠
日期:2021.1.8
"""

def add_student():
    print('\n添加学生记录功能尚未开发\n')

def query_student():
    while True:
        print('查询学生记录')
        print('====================')
        print('1.按照学号查询学生记录')
        print('2.按照姓名查询学生记录')
        print('3.查询全部学生记录')
        print('4.返回上级菜单')
        print('====================')
        mc3 = int(input('输入菜单号:'))
        if mc3 == 1:
            print('\n按学号查询学生记录功能尚未开发\n')
        elif mc3 == 2:
            print('\n按姓名查询学生记录功能尚未开发\n')
        elif mc3 == 3:
            print('\n查询全部学生记录功能尚未开发\n')
        else:
            break

def modify_student():
    print('\n修改学生记录功能尚未开发\n')

def delete_student():
    print('\n删除学生记录功能尚未开发\n')

def login():
    username = input('输入用户名:')
    password = input('输入密码:')
    if username == '柒木楠' and password == '9527':
        while True:
             print('学生信息管理')
             print('=============')
             print('1.添加学生记录')
             print('2.查询学生记录')
             print('3.修改学生记录')
             print('4.删除学生记录')
             print('5.返回上级菜单')
             print('=============')
             mc2 = int(input('输入菜单号:'))
             if mc2 == 1:
                 add_student()
             elif mc2 == 2:
                 query_student()
             elif mc2 == 3:
                 modify_student()
             elif mc2 == 4:
                 delete_student()
             else:
                 break
    else:
        print('\n用户名或密码错误,请重新登录!\n')

# 主程序
while True:
    print('用户登录')
    print('=========')
    print('1.登录')
    print('2.退出')
    print('=========')
    mc1 = int(input('输入菜单号:'))
    if mc1 == 1:
        login()
    elif mc1 == 2:
        print('\n谢谢使用本程序!')
        break
  • 运行 程序,并进行测试
    在这里插入图片描述

(二)实现学生信息管理功能模块

1.编写增加学生记录功能

在这里插入图片描述

# -*- coding: utf-8 -*-
"""
功能:学生信息管理
作者:柒木楠
日期:2021.1.8
"""

def get_all_students():
    students = []
    f = open('学生.txt')
    for line in f:
        line = line.replace('\n', '')
        student = line.split(' ')
        students.append(student)
    f.close()
    return students

def add_student():
    students = get_all_students()
    
    id = input('学号:')
    name = input('姓名:')
    gender = input('性别:')
    age = input('年龄:')
    clazz = input('班级:')
    major = input('专业:')
    department = input('系部:')
    telephone = input('电话:')
    
    students.append([id,name,gender,age,clazz,major,department,telephone])
    f = open('学生.txt','w')
    for i in range(len(students)):
        student = ' '.join(students[i]) + '\n'
        f.write(student)
    f.close()
    print('\n恭喜,学生记录添加成功!\n')

def display_all_students():
    students = get_all_students()
    for i in range(len(students)):
        for j in range(len(students[i])):
            print(students[i][j], end=' ')
        print()
        
def query_student():
    while True:
        print('查询学生记录')
        print('====================')
        print('1.按照学号查询学生记录')
        print('2.按照姓名查询学生记录')
        print('3.查询全部学生记录')
        print('4.返回上级菜单')
        print('====================')
        mc3 = int(input('输入菜单号:'))
        if mc3 == 1:
            print('\n按学号查询学生记录功能尚未开发\n')
        elif mc3 == 2:
            print('\n按姓名查询学生记录功能尚未开发\n')
        elif mc3 == 3:
           display_all_students()
        else:
            break

def modify_student():
    print('\n修改学生记录功能尚未开发\n')

def delete_student():
    print('\n删除学生记录功能尚未开发\n')

def login():
    username = input('输入用户名:')
    password = input('输入密码:')
    if username == '柒木楠' and password == '9527':
        while True:
             print('学生信息管理')
             print('=============')
             print('1.添加学生记录')
             print('2.查询学生记录')
             print('3.修改学生记录')
             print('4.删除学生记录')
             print('5.返回上级菜单')
             print('=============')
             mc2 = int(input('输入菜单号:'))
             if mc2 == 1:
                 add_student()
             elif mc2 == 2:
                 query_student()
             elif mc2 == 3:
                 modify_student()
             elif mc2 == 4:
                 delete_student()
             else:
                 break
    else:
        print('\n用户名或密码错误,请重新登录!\n')

# 主程序
while True:
    print('用户登录')
    print('=========')
    print('1.登录')
    print('2.退出')
    print('=========')
    mc1 = int(input('输入菜单号:'))
    if mc1 == 1:
        login()
    elif mc1 == 2:
        print('\n谢谢使用本程序!')
        break
  • 启动程序,查看效果
    在这里插入图片描述

  • 查看添加了新记录的学生.txt文件
    在这里插入图片描述

2.编写查询学生记录功能

在这里插入图片描述

  • 代码如下
        ####定义查询全部学生记录函数####
def display_all_students():
    students = get_all_students()
    for i in range(len(students)):
        for j in range(len(students[i])):
            print(students[i][j], end=' ')
        print()
        ####定义按照学号查询学生记录函数####
def display_id_student():
    students = get_all_students()
    id = input('学号:')
    
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    f.close()
        ####定义按照姓名查询学生记录函数####
def display_name_student():
    students = get_all_students()
    name = input('姓名:')
    
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][1] == name):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    f.close()
        ####定义查询函数####
def query_student():
    while True:
        print('查询学生记录')
        print('====================')
        print('1.按照学号查询学生记录')
        print('2.按照姓名查询学生记录')
        print('3.查询全部学生记录')
        print('4.返回上级菜单')
        print('====================')
        mc3 = int(input('输入菜单号:'))
        if mc3 == 1:
            display_id_student()
        elif mc3 == 2:
            display_name_student()
        elif mc3 == 3:
            display_all_students()
        else:
            break
  • 运行程序,如下图
    在这里插入图片描述

3.编写修改学生记录功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 代码如下
        ####定义修改学生姓名函数####
def display_newname_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newname=input('newname =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][1] = newname
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改学生性别函数####
def display_newgender_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newgender=input('newgender =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][2] = newgender
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改学生年龄函数####
def display_newage_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newage=input('newage =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][3] = newage
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改学生班级函数####
def display_newclazz_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newclazz=input('newclazz =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][4] = newclazz
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改学生专业函数####
def display_newmajor_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newmajor=input('newmajor =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][5] = newmajor
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改学生系部函数####
def display_newdepartment_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newdepartment=input('newdepartment =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][6] = newdepartment
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改学生电话函数####
def display_newtelephone_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    newtelephone=input('newtelephone =')
    found=False
    for i in range(len(students)):
        if (students[i][0] == id):
            found = True
            students[i][7] = newtelephone
            print('恭喜:学生信息修改成功!')
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    f.close()
    print()
        ####定义修改函数####
def modify_student():
    while True:
        print('修改学生信息')
        print('==================')
        print('1.修改姓名信息')
        print('2.修改性别信息')
        print('3.修改年龄信息')
        print('4.修改班级信息')
        print('5.修改专业信息')
        print('6.修改系部信息')
        print('7.修改电话号码')
        print('8.返回上级菜单')
        print('==================')
        mc4 = int(input('输入菜单号:'))
        if mc4 == 1:
            display_newname_student()
        elif mc4 == 2:
            display_newgender_student()
        elif mc4 == 3:
            display_newage_student()
        elif mc4 == 4:
            display_newclazz_student()
        elif mc4 == 5:
            display_newmajor_student()
        elif mc4 == 6:
            display_newdepartment_student()
        elif mc4 == 7:
            display_newtelephone_student()
        else:
            break
  • 运行程序如下
    在这里插入图片描述

4.编写删除学生记录功能

在这里插入图片描述

  • 代码如下
         ####定义删除学生记录函数####
def display_delete_student():
    students = get_all_students()
    id=input('学号:')
    f = open('学生.txt','r')
    for i in range(len(students)):
        if (students[i][0] == id):
            for j in range(len(students[i])):
                print(students[i][j],end=' ')
    print()
    found=False
    for i in range(len(students)):
        if(students[i][0]==id):
            found = True
            break
    if not found:
        print('学号为{}的学生没找到!'.format(id))
    else:
        del students[i]
    print(students)
    f.close()
    print('\n删除信息成功!')
        ####定义删除函数####
def delete_student():
      while True:
        print('删除学生记录')
        print('==================')
        print('1.删除学生信息')
        print('2.返回上级菜单')
        print('==================')
        mc5 = int(input('输入菜单号:'))
        if mc5 == 1:
            display_delete_student()
        else:
            break
  • 运行程序,结果如下
    在这里插入图片描述
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值