系统介绍
内容分为登录部分和学生管理系统两个部分
- 登录部分包括管理员登录和普通用户登录,在第一次使用软件时,系统会判断是不是第一次使用,如果是第一次使用就要初始化,不是第一次使用就进行用户类型选择,选择管理员用户要进行登录,选择用户要判断是否进行注册,如果注册,则需要先注册再登录
- 创建系统标志文件flag.txt,初始化为0表示系统没有使用过,再首次启动后修改数据内容为1,管理员账户在程序中设计,为root-123456,普通用户保存到当前文件夹之下。
- 学生管理系统,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