学生管理系统(Python实现+包括管理员和用户注册)

发布于:2024-06-24 ⋅ 阅读:(18) ⋅ 点赞:(0)

系统介绍

内容分为登录部分和学生管理系统两个部分

  1. 登录部分包括管理员登录和普通用户登录,在第一次使用软件时,系统会判断是不是第一次使用,如果是第一次使用就要初始化,不是第一次使用就进行用户类型选择,选择管理员用户要进行登录,选择用户要判断是否进行注册,如果注册,则需要先注册再登录
  2. 创建系统标志文件flag.txt,初始化为0表示系统没有使用过,再首次启动后修改数据内容为1,管理员账户在程序中设计,为root-123456,普通用户保存到当前文件夹之下。
  3. 学生管理系统,1-增加学生信息,2-显示学生信息,3-查照学生信息,4-删除学生信息,5-学生信息存档,6-退出学生信息

特别注意,运行本程序前,需要在同级目录下建立record.txt文件,建立flag.txt文件并输入0,管理员信息root-123456

代码

'''
运行本程序前,需要在同级目录下建立record.txt文件,建立flag.txt文件并输入0
'''

# 文件存储管理信息
import os

# 判断是否首次使用系统
def main():
 flag = open("flag.txt")
 word = flag.read() #word为0表示首次启动,为1表示启动过了
 if word == "0":
     print('首次启动')
     flag = open('flag.txt', 'w+')
     flag.write('1')
     flag.close()  # 关闭文件
     init()  # 初始化资源
     print_login_menu()  # 打印登录菜单
     user_select()  # 选择用户
 elif word == "1":
     print('欢迎回来')
     print_login_menu()  # 打印登录菜单
     user_select()  # 选择用户


# 初始化管理员
def init():
 file = open('u_root.txt', 'w')  # 创建并打开管理员账户文件
 root = {'rnum': 'root', 'rpwd': "123456"}
 file.write(str(root))  # 写入管理员信息
 file.close()  # 关闭管理员账户文件



# 打印登录菜单
def print_login_menu():
 print('----用户登录----')
 print('1-管理员登陆')
 print('2-普通用户登陆')
 print('--------------')
 print('请选择您的登陆身份')

# 打印菜单
def menu():
 print('         >>欢迎来到学生管理系统<<         ')
 print('         |   1.新增学生信息   |         ')
 print('         |   2.显示学生信息   |         ')
 print('         |   3.查找学生信息   |         ')
 print('         |   4.删除学生信息   |         ')
 print('         |   5.学生信息存档   |         ')
 print('         |   0.退出管理系统   |         ')
 choice = input('请输入你的选择: ')
 return choice

# 新增
def insert():
 print('[新增学生] 开始!')
 studentId = input('请输入学生的学号: ')
 name = input('请输入学生的姓名: ')
 gender = input('请输入学生的性别(男、女): ')
 if gender not in ('男', '女'):
     print('性别输入有误,新增失败!')
     return
 className = input('请输入学生的班级: ')
 # 使用字典将上述信息聚合起来
 studentInfo = {
     'name': name,
     'gender': gender,
     'className': className
 }
 if studentId in students:
     choice = input('已存在该学号的同学,是否对其信息进行覆盖(是/否): ')
     if choice == '否':
         return
 # 将该学生信息插入到students中
 students[studentId] = studentInfo
 print('[新增学生] 完毕!')

# 显示
def show():
 print('[显示学生] 开始!')
 # 遍历全局字典students,把所有学生的信息打印出来
 for sId in students:
     sInfo = students[sId]  # 学号为sId的同学的信息
     print(f"{sId}\t{sInfo['name']}\t{sInfo['gender']}\t{sInfo['className']}")
 print(f'[显示学生] 完毕! 共显示了 {len(students)} 条数据!')

# 查找
def find():
 print('[查找学生] 开始!')
 studentId = input('请输入要查找的同学学号: ')
 flag = False  # 记录是否找到该学号的同学
 for sId in students:
     if sId == studentId:
         sInfo = students[sId]  # 学号为sId的同学的信息
         print(f"[{sId}\t{sInfo['name']}\t{sInfo['gender']}\t{sInfo['className']}]")
         flag = True  # 找到了
         break
 if not flag:
     print('没有找到该学号的同学!')
 print(f'[查找学生] 完毕!')


# 删除
def delete():
 print('[删除学生] 开始!')
 studentId = input('请输入要删除的学生学号: ')
 for sId in list(students.keys()):
     if sId == studentId:
         sInfo = students[sId]  # 学号为sId的同学的信息
         print(f"删除 {sInfo['name']} 同学的信息!")
         students.pop(sId)  # 将该学生信息从students中删除
 print('[删除学生] 完毕!')


# 入口函数
def entrance():
 load()  # 先进行读档
 while True:
     # 打印菜单
     choice = menu()
     if choice == '1':
         # 新增学生信息
         print("insert\n")
         insert()
     elif choice == '2':
         # 显示学生信息
         print("show\n")
         show()
     elif choice == '3':
         # 查找学生信息
         print("find\n")
         find()
     elif choice == '4':
         # 删除学生信息
         print("delete\n")
         #elete()
     elif choice == '5':
         # 学生信息存档
         save()
     elif choice == '0':
         # 退出程序
         print('goodbye!')
         exit(0)
     else:
         print('您的输入有误!')

     x = input('按下任意按键继续操作...')

# 存档
def save():
 with open('record.txt', 'w', encoding='utf8') as f:
     for sId in students:
         sInfo = students[sId]  # 学号为sId的同学的信息
         f.write(f"{sId}\t{sInfo['name']}\t{sInfo['gender']}\t{sInfo['className']}\n") #学生信息用\t分开,一行保存一个学生信息
     print(f'[存档完毕] 共存储了 {len(students)} 条记录!')


# 读档
def load():
 # 读档之前把旧的数据清理干净
 global students
 students = {}
 with open('record.txt', 'r', encoding='utf8') as f:
     for line in f:
         line = line.strip()  # 去掉字符串首位的空白符(\n,\r,\t)
         tokens = line.split('\t')  # 对每一行数据进行切分,以\t作为分隔符
         if len(tokens) != 4:
             print(f'当前行格式存在问题! line = {line}')
             continue
         studentId = tokens[0]
         studentInfo = {
             'name': tokens[1],
             'gender': tokens[2],
             'className': tokens[3]
         }
         # 将该行学生信息插入到students中
         students[studentId] = studentInfo
     print(f'[读档完毕] 共读取了 {len(students)} 条记录!')


# 用户选择
def user_select():
 while True:
     user_type_select = input('请选择用户类型')
     if user_type_select == '1':  # 管理员登陆验证
         root_login()
         break
     elif user_type_select == '2':  # 普通用户
         while True:
             select = input('是否需要注册?(Y/N):')
             if select == 'y' or select == 'Y':
                 print('----用户注册----')
                 user_register()  # 用户注册
                 break
             elif select == 'n' or select == 'N':
                 print('----用户登录----')
                 break
             else:
                 print('输入有误,请重新选择')
         user_login()  # 用户登录
         break
     else:
         print('输入有误,请重新选择')
 entrance()

# 管理员登陆
def root_login():
 while True:
     print('****管理员登陆****')
     root_number = input('请输入管理员账户名:')
     root_password = input('请输入管理员密码:')
     file_root = open('u_root.txt', 'r')  # 只读打开文件
     root = eval(file_root.read())  # 读取账户信息
     # 信息匹配
     if root_number == root['rnum'] and root_password == root['rpwd']:
         print('管理员登陆成功!')
         break
     else:
         print('很遗憾!验证失败')


# 用户注册 用户信息单独文件保存
def user_register():
 user_id = input('输入账户id:')
 user_pwd = input('输入用户密码:')
 user_name = input('输入用户昵称:')
 user = {'u_id': user_id, 'u_pwd': user_pwd, 'u_name': user_name}
 user_path = "./" + user_id # 新建文件夹保存信息
 file_user = open(user_path, 'w')
 file_user.write(str(user))
 file_user.close()


# 普通用户登录
def user_login():
 while True:
     print('****普通用户登录****')
     user_id = input('请输入账户名')
     user_pwd = input('请输入密码:')

     user_list = os.listdir('./')  # 遍历元组,判断user_id是否在元组中
     flag = 0
     for user in user_list:
         if user == user_id:
             flag = 1
             print('登录中····')
             # 打开文件
             file_name = './' + user_id
             file_user = open(file_name)
             # 获取文件内容
             user_info = eval(file_user.read())
             if user_pwd == user_info['u_pwd']:
                 print('登录成功!')
                 # 此处根据需求,可以跳转到登陆成功之后的操作
                 break

     if flag == 1:
         break
     elif flag == 0:
         print('您并没有注册!请您先注册用户')
         break


if __name__ == '__main__':
 main()

生成exe文件

在控制台输入下面命令生成exe文件,注意文件名是多少,生成后要在exe文件夹下包含record.txt文件,建立flag.txt文件并输入0

pyinstaller -F main.py