一、需求
MIS---学生信息管理,包括添加、删除、修改、遍历、排序、统计和退出系统的功能,并且把信息储存在本地的磁盘中(这里我将信息保存在了一个名为Stuinformation.txt的文本文件中,数据较大时,可可储存在数据库中)。
二、代码编写
-
meau()函数,用于展示功能菜单
def meau(): print("\t\t\t1:添加用户 ") # 功能选择 print("\t\t\t2:删除用户 ") print("\t\t\t3:修改用户 ") print("\t\t\t4:遍历用户 ") print("\t\t\t5:排序用户 ") print("\t\t\t6:统计用户 ") print("\t\t\t0:退出系统 ") print('=====' * 8)
- find()函数,用于将输入的用户与本地保存的数据进行对比,判断是否存在
def find(sid): #用于查找用户 T = False with open('Stuinformation.txt','r+',encoding='utf-8')as lf: dic = {} # 定义空字典 if not lf.read(): #文件没有内容 T = True else: with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf:#打开文件 for list in lf: dic = dict(eval(list)) # 字符串转字典 if str(dic['学号']) == str(sid): #判断 T = True break else: T = False return T
- save()函数,用于新的列表存储在文件中
def save(lis): #用于储存用户信息 with open('Stuinformation.txt','w',encoding='utf-8')as f: for i in lis: f.write(str(i) + "\n") print("保存成功")
-
addstudent()函数,用于添加用户信息到文件中
def addstudent():#添加用户函数 lis = [] global flag #标志 flag = True dic1 = {} with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for line in lf: if len(line) == '':#判断文件是不是为空 break else: # with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: # for list in lf: dic1 = dict(eval(line))#将读出的数据转化为字典 lis.append(dic1) #添加到列表 while flag: try: #检测输入异常 sid = int(input("请输入学生的学号(0-100):")) # 此时需要判断 列表中是否为空 为空直接添加 age = int(input("请输入学生的年龄(0-100)")) except: print("输入的不是正整数,重新输入:") continue name = input("请输入学生的姓名:") sex = input("请输入学生的性别(男/女):") spe = input("请输入学生的专业:") lis.append({'学号': sid, '姓名': name, '性别': sex, '年龄': age, '专业': spe}) #添加信息 print() k = find(sid) if not k: res = input("是否继续添加用户(y/n)?") if res == 'y': flag = True else: flag = False break else: print("已存在该用户,添加失败!") print('=====' * 8) save(lis)
-
del()函数,用于删除用户信息
def dels():#删除用户信息 lis2= [] #用来存放用户信息 dic1 = {} #用来存放用户信息 num = input('请输入要删除的学号:') k = find(num)#调用find函数查看是否存在该用户 if k: with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for list in lf: dic1 = dict(eval(list)) if str(dic1['学号']) == str(num):#判断是否存在该用户 pass #存在不将信息添加到lis2列表中(在新的列表中不会出现该用户,达到删除的目的) else: lis2.append(dic1) #将新的字典保存到列表中 save(lis2) #储存信息 print("删除成功!") else: print("没有该用户,无法删除!")
-
revs()函数,用于修改用户信息
def revs(): num = input('请输入要修改的学号:') global fal fal = True dic1 = {} lis = [] with open('Stuinformation.txt','r',encoding='utf-8')as f: for list in f: dic1 = dict(eval(list)) if str(dic1['学号']) != str(num): lis.append(dic1) if find(num): while fal: try: sid = int(input("请输入新的学生学号(0-100):")) age = int(input("请输入新学生年龄(0-100)")) except: print("输入的不是正整数,重新输入:") continue name = input("请输入新的学生姓名:") sex = input("请输入新的学生性别(男/女):") spe = input("请输入新的学生专业:") dic1 ={'学号': sid, '姓名': name, '性别': sex, '年龄': age, '专业': spe} lis.append(dic1) break save(lis) print("修改成功!") else: print("没有该用户,无法修改!")
-
test()函数,用户遍历用户信息
def test():#遍历内容函数 with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: dic1 = {} for list in lf: dic1 = dict(eval(list)) print('学号:',dic1['学号'],' 姓名:',dic1['姓名'],' 性别:',dic1['性别'], ' 年龄:',dic1['年龄'],' 专业:', dic1['专业'])
-
sors()函数,用于排序用户信息(这里按找学号的大小排序)
def sors():#排序函数--使用列表中的sort函数 lis1 =[] dic1 ={} with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for list in lf: dic1 = dict(eval(list)) lis1.append(dic1) lis1.sort(key=lambda x:x['学号']) save(lis1)
-
cens()函数,用于统计用户个数
def cens():#统计用户个数--由于是按行保存 所以有多少行就有多少个用户 i = 0 with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for list in lf: i+=1 print("一共有%d个用户"%i)
-
mian()函数,功能判断
def main(): #功能选择 print('=====' * 8) # 上界面 while 1: meau() num1 = int(input("请输入功能对应的数字:")) if num1 == 1: addstudent() elif num1 == 2: dels() elif num1 == 3: revs() elif num1 == 4: test() elif num1 == 5: sors() elif num1 == 6: cens() else: break
完全代码
#-*- coding:utf-8 -*- ''' @Author: duanyh 20/20 @contact: @Time: 2021/11/3 14:57 @version: 1.0 ''' def meau(): print("\t\t\t1:添加用户 ") # 功能选择 print("\t\t\t2:删除用户 ") print("\t\t\t3:修改用户 ") print("\t\t\t4:遍历用户 ") print("\t\t\t5:排序用户 ") print("\t\t\t6:统计用户 ") print("\t\t\t0:退出系统 ") print('=====' * 8) def find(sid): #用于查找用户 T = False with open('Stuinformation.txt','r+',encoding='utf-8')as lf: dic = {} # 定义空字典 if not lf.read(): #文件没有内容 T = True else: with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf:#打开文件 for list in lf: dic = dict(eval(list)) # 字符串转字典 if str(dic['学号']) == str(sid): #判断 T = True break else: T = False return T def addstudent():#添加用户函数 lis = [] global flag #标志 flag = True dic1 = {} with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for line in lf: if len(line) == '':#判断文件是不是为空 break else: # with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: # for list in lf: dic1 = dict(eval(line))#将读出的数据转化为字典 lis.append(dic1) #添加到列表 while flag: try: #检测输入异常 sid = int(input("请输入学生的学号(0-100):")) # 此时需要判断 列表中是否为空 为空直接添加 age = int(input("请输入学生的年龄(0-100)")) except: print("输入的不是正整数,重新输入:") continue name = input("请输入学生的姓名:") sex = input("请输入学生的性别(男/女):") spe = input("请输入学生的专业:") lis.append({'学号': sid, '姓名': name, '性别': sex, '年龄': age, '专业': spe}) #添加信息 print() k = find(sid) if not k: res = input("是否继续添加用户(y/n)?") if res == 'y': flag = True else: flag = False break else: print("已存在该用户,添加失败!") print('=====' * 8) save(lis) def save(lis):#用于储存用户信息 with open('Stuinformation.txt','w',encoding='utf-8')as f: for i in lis: f.write(str(i) + "\n") print("保存成功") def dels():#删除用户信息 lis2= [] #用来存放用户信息 dic1 = {} #用来存放用户信息 num = input('请输入要删除的学号:') k = find(num)#调用find函数查看是否存在该用户 if k: with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for list in lf: dic1 = dict(eval(list)) if str(dic1['学号']) == str(num):#判断是否存在该用户 pass #存在不将信息添加到lis2列表中(在新的列表中不会出现该用户,达到删除的目的) else: lis2.append(dic1) #将新的字典保存到列表中 save(lis2) #储存信息 print("删除成功!") else: print("没有该用户,无法删除!") def revs(): num = input('请输入要修改的学号:') global fal fal = True dic1 = {} lis = [] with open('Stuinformation.txt','r',encoding='utf-8')as f: for list in f: dic1 = dict(eval(list)) if str(dic1['学号']) != str(num): lis.append(dic1) if find(num): while fal: try: sid = int(input("请输入新的学生学号(0-100):")) age = int(input("请输入新学生年龄(0-100)")) except: print("输入的不是正整数,重新输入:") continue name = input("请输入新的学生姓名:") sex = input("请输入新的学生性别(男/女):") spe = input("请输入新的学生专业:") dic1 ={'学号': sid, '姓名': name, '性别': sex, '年龄': age, '专业': spe} lis.append(dic1) break save(lis) print("修改成功!") else: print("没有该用户,无法修改!") def test():#遍历内容函数 with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: dic1 = {} for list in lf: dic1 = dict(eval(list)) print('学号:',dic1['学号'],' 姓名:',dic1['姓名'],' 性别:',dic1['性别'], ' 年龄:',dic1['年龄'],' 专业:', dic1['专业']) def sors():#排序函数--使用列表中的sort函数 lis1 =[] dic1 ={} with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for list in lf: dic1 = dict(eval(list)) lis1.append(dic1) lis1.sort(key=lambda x:x['学号']) save(lis1) def cens():#统计用户个数--由于是按行保存 所以有多少行就有多少个用户 i = 0 with open('Stuinformation.txt', 'r+', encoding='utf-8')as lf: for list in lf: i+=1 print("一共有%d个用户"%i) def main(): #功能选择 print('=====' * 8) # 上界面 while 1: meau() num1 = int(input("请输入功能对应的数字:")) if num1 == 1: addstudent() elif num1 == 2: dels() elif num1 == 3: revs() elif num1 == 4: test() elif num1 == 5: sors() elif num1 == 6: cens() else: break if __name__ == '__main__': main()