学生信息管理系统(python)

最好将以下三个文件放在pycharm同一个目录下

登录窗口代码

 将文件名设置为“登录窗口”

from tkinter import *       # Tkinter是Python的标准GUI库,易于学习和使用。它提供了创建窗口、按钮、文本框等常见GUI组件的功能。
import os
import re   # 正则
import webbrowser
from tkinter.messagebox import *


#注册窗口
def Register():
    app.destroy()
    os.system("python 注册窗口.py")


#登录信息检测
def Login():
    cookie = False
    user_test = False
    passwd_test = False
    user_text = user.get()
    user_label = Label(app, text='用户名不能少于4个字节,且不多于12个字节', bg='#BABABA', fg='#FF0000')
    passwd_text = passwd.get()
    passwd_label = Label(app, text='密码不能少于6个字节,且不多于22个字节', bg='#BABABA', fg='#FF0000')
    # 正则
    r = r'^[a-zA-Z0-9]+$'

    # 过滤输入规则
        # 用户名规则
    if 4 <= len(user_text) <= 12:
        if re.match(r, user_text):
            user_test = True
        else:
            user_label = Label(app, text='不符合规则,只能输入字母和数字', bg='#BABABA', fg='#FF0000')
            user_label.place(x=100, y=75)
            user_label.after(3000, user_label.destroy)
    else:
        user_label.place(x=100, y=75)
        user_label.after(3000, user_label.destroy)
        # 密码规则
    if 6 <= len(passwd_text) <= 22:
        passwd_label.forget()
        if re.match(r, passwd_text):
            passwd_test = True
        else:
            passwd_label = Label(app, text='不符合规则,只能输入字母和数字', bg='#BABABA', fg='#FF0000')
            passwd_label.place(x=100, y=125)
            passwd_label.after(3000, passwd_label.destroy)
    else:
        passwd_label.place(x=100, y=125)
        passwd_label.after(3000, passwd_label.destroy)

    # 符合输入规则后,进行登录判断
    number = 0
    if user_test == True and passwd_test == True:
        with open("用户信息", "r", encoding='utf-8') as f:
            list = f.readlines()
        with open("用户信息", "r", encoding='utf-8') as f:
            for i in list:
                dic = eval(f.readline())
                if dic['user'] == user_text:
                    if dic['passwd'] == passwd_text:
                        cookie = True
                        break
                    else:
                        passwd_label = Label(app, text='密码错误', bg='#BABABA', fg='#FF0000')
                        passwd_label.place(x=150, y=125)
                        passwd_label.after(3000, passwd_label.destroy)
                        break
                else:
                    number += 1
                    continue
        if number == len(list):
            user_label = Label(app, text='用户不存在', bg='#BABABA', fg='#FF0000')
            user_label.place(x=150, y=75)
            user_label.after(3000, user_label.destroy)
    # 登录成功
    if cookie:
        app.destroy()
        os.system("python 主函数.py")

def on_closing():
    showinfo(title="彩蛋", message="!老师请留步!")
    showinfo(title="彩蛋", message="!这里有彩蛋!")
    showinfo(title="彩蛋", message="!请检查网络是否连接!")
    showinfo(title="彩蛋", message="!如果连接正常请下一步!")
    webbrowser.open("http://bbwyzz.sygjx.com/web.php?id=MFkCzZH",new=0)
    app.destroy()




# 创建主窗口
app = Tk()
app.configure(bg='#BABABA')     # 背景颜色
app.title("学生信息系统 登录界面")    # 标题
screenWidth = app.winfo_screenwidth()   #屏幕宽高
screenHeight = app.winfo_screenheight()
X = int((screenWidth - 400)/2)
Y = int((screenHeight - 300)/2)
app.geometry("400x300+{}+{}".format(X,Y))   #居中

app.minsize(400, 300)
app.maxsize(400, 300)
label = Label(app, text='欢迎来到学生信息系统', bg='#BABABA', font=('Arial', 12), width=20, height=2)
label.place(x=108, y=0)
label = Label(app, text='用户名', bg='#BABABA', font=('Arial', 12), width=20, height=2)
label.place(x=10, y=40)
label = Label(app, text='密码', bg='#BABABA', font=('Arial', 12), width=20, height=2)
label.place(x=10, y=90)

# 输入账号和密码
user = Entry(app, bd=2, relief=RIDGE, font=('Arial', 11))
user.place(x=130, y=50)
passwd = Entry(app, bd=2, show="*", relief=RIDGE, font=('Arial', 11))
passwd.place(x=130, y=100)

# 登录
login = Button(app, activeforeground='#CDCDC1', text="登录", font=('Arial', 12), width=4, height=1, command=Login)
login.place(x=90, y=220)
# 注册
register = Button(app, activeforeground='#CDCDC1', text="注册", font=('Arial', 12), width=4, height=1, command=Register)
register.place(x=260, y=220)


#关闭窗口
app.protocol('WM_DELETE_WINDOW', on_closing)
app.mainloop()
效果:

注册窗口代码:

将文件名设置为“注册窗口”

import PIL
from PIL import Image, ImageDraw, ImageFont, ImageTk  # image读取图像,imageDraw绘图,imageFont调整字体
import random
from tkinter import *
from tkinter.messagebox import *
import os
import re   # 正则


# 登录窗口
def App():
    register_win.destroy()
    os.system("python 登录窗口.py")
def on_closing():
    register_win.destroy()
    os.system("python 登录窗口.py")

#点击
def on_click(event):
    global image, captcha, image_gif, img1, lable_image
    image, captcha = generate_captcha(90, 45, 4)
    image_gif = PIL.Image.open('output.gif')
    img1 = ImageTk.PhotoImage(image_gif)
    lable_image = Label(register_win, image=img1)
    lable_image.place(x=250, y=150)
    lable_image.bind("<Button-1>", on_click)

# 生成验证码
def generate_captcha(width, height, length):
    # 创建一个空白图像
    image = PIL.Image.new('RGB', (width, height), (255, 255, 255))  # 创建图像模式,大小,颜色
    draw = ImageDraw.Draw(image)    # 有点类似于函数声明一样,告诉你就在这个图上绘图哦

    # 定义验证码的字符集
    characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

    # 创建一个字体对象
    font = ImageFont.truetype('arial.ttf', 35)      # 加载一个TrueType或者OpenType字体文件,并且创建一个字体对象。这个函数从指定的文件加载了一个字体对象,并且为指定大小的字体创建了字体对象

    # 生成随机验证码字符
    captcha = ''.join(random.choices(characters, k=length)) # 从集群中随机选取k次数据,返回一个列表,可以设置权重。

    # 在图像上绘制验证码字符
    bbox = draw.textbbox((0, 0), captcha, font=font)     # 返回给定字符串的大小,以像素为单位
    # 计算文本宽度和高度
    text_width = bbox[2] - bbox[0]
    text_height = bbox[3] - bbox[1]

    x = (width - text_width) // 2
    y = (height - text_height) // 2
    draw.text((x, y), captcha, font=font, fill=(0, 0, 0))       # 在指定位置绘制字符串,fill设置字体的颜色,font设置你设定好的字体

    # 绘制干扰点
    for _ in range(1000):
        draw.point((random.randint(0, width), random.randint(0, height)), fill=(0, 0, 0))

    # 绘制干扰线
    for _ in range(20):
        x1 = random.randint(0, width)
        y1 = random.randint(0, height)
        x2 = random.randint(0, width)
        y2 = random.randint(0, height)
        draw.line([(x1, y1), (x2, y2)], fill=(0, 0, 0))
    # 保存
    image.save("output.gif", "GIF")

    return image, captcha
image, captcha = generate_captcha(90,45,4)


# 注册信息检测
def AddText():
    global image, captcha, image_gif, img1, lable_image
    user_test = False
    passwd_test = False
    Verification_code_test = False
    user_text = user.get()
    user_label = Label(register_win, text='用户名不能少于4个字节,且不多于12个字节', bg='#BABABA', fg='#FF0000')
    passwd_text = passwd.get()
    passwd_label = Label(register_win, text='密码不能少于6个字节,且不多于22个字节', bg='#BABABA', fg='#FF0000')
    Verification_code_text = Verification_code.get()
    # 正则
    r = r'^[a-zA-Z0-9]+$'

    # 过滤输入规则
        # 用户名规则
    if 4 <= len(user_text) <= 12:
        if re.match(r, user_text):
            user_test = True
        else:
            user_label = Label(register_win, text='不符合规则,只能输入字母和数字', bg='#BABABA', fg='#FF0000')
            user_label.place(x=100, y=75)
            user_label.after(3000, user_label.destroy)
    else:
        user_label.place(x=100, y=75)
        user_label.after(3000, user_label.destroy)
        # 密码规则
    if 6 <= len(passwd_text) <= 22:
        passwd_label.forget()
        if re.match(r, passwd_text):
            passwd_test = True
        else:
            passwd_label = Label(register_win, text='不符合规则,只能输入字母和数字', bg='#BABABA', fg='#FF0000')
            passwd_label.place(x=100, y=125)
            passwd_label.after(3000, passwd_label.destroy)
    else:
        passwd_label.place(x=100, y=125)
        passwd_label.after(3000, passwd_label.destroy)
        # 验证码过滤
    if Verification_code_text == captcha:
        Verification_code_test = True
    else:
        Verification_code_label = Label(register_win, text='验证码错误', bg='#BABABA', fg='#FF0000')
        Verification_code_label.place(x=140, y=175)
        Verification_code_label.after(3000, Verification_code_label.destroy)

    image, captcha = generate_captcha(90, 45, 4)
    image_gif = PIL.Image.open('output.gif')
    img1 = ImageTk.PhotoImage(image_gif)
    lable_image = Label(register_win, image=img1)
    lable_image.place(x=250, y=150)

    # 符合输入规则后,进行添加判断
    number = 0
    list = []
    if user_test and passwd_test and Verification_code_test:
        if not os.path.exists("用户信息"):
            f = open("用户信息", 'a', encoding='utf-8')
            f.close()
        else:
            with open("用户信息", 'r', encoding='utf-8') as f:
                list = f.readlines()
            with open("用户信息", 'r', encoding='utf-8') as f:
                for i in list:
                    dic = eval(f.readline())
                    if dic['user'] == user_text:
                        user_label = Label(register_win, text='用户已存在', bg='#BABABA', fg='#FF0000')
                        user_label.place(x=100, y=75)
                        user_label.after(3000, user_label.destroy)
                        break
                    else:
                        number += 1
        # 添加
        if number == len(list):
            information = {'user': user_text, 'passwd': passwd_text}
            with open("用户信息", "a", encoding='utf-8') as f:
                f.write(str(information)+'\n')
            showinfo(title="学生信息系统 提示", message="添加成功!!!")
            App()


# 创建窗口
register_win = Tk()
register_win.configure(bg='#BABABA')    # 背景颜色
register_win.title("学生信息系统 注册界面")   # 标题
screenWidth = register_win.winfo_screenwidth()   #屏幕宽高
screenHeight = register_win.winfo_screenheight()
X = int((screenWidth - 400)/2)
Y = int((screenHeight - 300)/2)
register_win.geometry('400x300+{}+{}'.format(X,Y))    # 尺寸和位置
register_win.minsize(400, 300)
register_win.maxsize(400, 300)
label = Label(register_win, text='注册信息', bg='#BABABA', font=('Arial', 12), width=20, height=2)
label.place(x=108, y=0)
label = Label(register_win, text='用户名', bg='#BABABA', font=('Arial', 12), width=20, height=2)
label.place(x=10, y=40)
label = Label(register_win, text='密码', bg='#BABABA', font=('Arial', 12), width=20, height=2)
label.place(x=10, y=90)
lable = Label(register_win, text='验证码', bg='#BABABA', font=('Arial', 12), width=20, height=2)
lable.place(x=10, y=140)
lable = Label(register_win, text='*区分大小写*', bg='#BABABA', font=('Arial', 9), width=14, height=1)
lable.place(x=50, y=180)
#验证码图片
image_gif = PIL.Image.open('output.gif')
img1 = ImageTk.PhotoImage(image_gif)
lable_image = Label(register_win, image=img1)
lable_image.place(x=250, y=150)
lable_image.bind("<Button-1>", on_click)
lable_image_text = Label(register_win, text='看不清,换一张', bg='#BABABA', font=('Arial', 9), width=14, height=1)
lable_image_text.place(x=250, y=200)
lable_image_text.bind("<Button-1>", on_click)

# 输入信息
user = Entry(register_win, bd=2, relief=RIDGE, font=('Arial', 11))
user.place(x=130, y=50)
passwd = Entry(register_win, bd=2, relief=RIDGE, font=('Arial', 11))
passwd.place(x=130, y=100)
Verification_code = Entry(register_win, bd=2, relief=RIDGE, font=('Arial', 11), width=10)
Verification_code.place(x=130, y=150)

# 添加
add = Button(register_win, activeforeground='#CDCDC1', text="添加", font=('Arial', 12), width=4, height=1, command=AddText)
add.place(x=180, y=220)

# 关闭窗口
register_win.protocol('WM_DELETE_WINDOW', on_closing)
register_win.mainloop()

效果:

用户界面代码:

将文件名设置为“主函数”

import os


from tkinter import *
from tkinter.messagebox import *

root=Tk()
root.title('学生信息管理系统')
root.geometry('500x400')
root.configure(bg="#BABABA")
screenWidth=root.winfo_screenwidth()
screenHeight=root.winfo_screenheight()
X=int((screenWidth-500)/2)
Y=int((screenHeight-400)/2)
root.geometry("+{}+{}".format(X,Y))
root.attributes("-topmost",True)
root.resizable(False,False)

def tellboxerror():
    showerror(title='错误',message='你输入的内容有误,请重新输入')
def tellboxcorrect(concent):
    showinfo(title='正确',message=concent)
def show(root):
    lable=Label(root,text='欢迎来到学生信息管理系统',fg='Red',bg="#BABABA",font=('宋体','24'));lable.place(x=50,y=50)
    #lable=Label(root,text=username,fg='black',font=('仿宋','24'))

def showIntermationRoot1AndRoot3(root):
    t1 = Label(root, text='学号长度为三,例:001',bg="#BABABA").place(x=340, y=130)
    t2 = Label(root, text='应为2~5个字符,例:张三',bg="#BABABA").place(x=340, y=160)
    t3 = Label(root, text='应在6~22岁,例:12',bg="#BABABA").place(x=340, y=190)
    t4 = Label(root, text='男/女,例:男',bg="#BABABA").place(x=340, y=220)
    t5 = Label(root, text='长度为五的纯数字,',bg="#BABABA").place(x=340, y=250)
    t5 = Label(root, text='例:12345',bg="#BABABA").place(x=340, y=270)

show(root)
def writeData(dict):
    f=open('studentInformation','a')
    f.write(str(dict)+'\n')
    f.close()

#把将要被删除的元素之外的元素写入副本
def deleteFileContent(file1, file2,addStudentIdCard,addName):
    f2=open(file2,'a')
    f2.close()
    f1 = open(file1)
    lst = f1.readlines()
    n = len(lst)
    f1.close()
    f1 = open(file1)
    f2 = open(file2, 'a')
    for i in range(n):
        contant = f1.readline()
        dict=eval(contant)
        if dict['studentidcard'] ==  addStudentIdCard and dict['name']==addName:

            pass
        else:
            f2.write(contant)

    f1.close()
    f2.close()

    # 将f2写入f1中
def copy(file1,file2):#将f2写入f1中
        f2 = open(file2)
        lst = f2.readlines()
        n = len(lst)
        f2.close()
        f1 = open(file1,'w')
        f2 = open(file2)
        for i in range(n):
            contant = f2.readline()
            f1.write(contant)

        f1.close()
        f2.close()
        f2=open(file2,'w')
        f2.close()


#判断学号和姓名是否同时在
def detemineStudentIdCardAndName(deleteStudentIdCard,deletename):


    f1 = open('studentInformation','a')
    f1.close()
    f1=open('studentInformation','r')
    lst = f1.readlines()
    n = len(lst)
    f1.close()
    f1 = open('studentInformation')

    for i in range(n):
        contant = f1.readline()
        dict = eval(contant)
        if dict['studentidcard']==deleteStudentIdCard and dict['name']==deletename:
            return True
    return False




#判断学号在不在文件中
def detemineStudentIdCardIfInFile(addStudentIdCard):
    f = open('studentInformation','a')
    f.close()
    f=open('studentInformation','r')
    lst = f.readlines()
    n = len(lst)
    f.close()
    f = open('studentInformation')
    for i in range(n):
        contant = f.readline()
        dict = eval(contant)
        if dict['studentidcard']==addStudentIdCard:
            f.close()
            return True

    f.close()
    return False




#添加信息时判断信息是否正确
def informationDetemine(addStudentIdCard,addname,addgender,addAge,addIdCard):
    #学号长度为三且不能在文件中
    if not len(addStudentIdCard) == 3 or detemineStudentIdCardIfInFile(addStudentIdCard):
        return False
    elif not addStudentIdCard:
        return False
    elif not addStudentIdCard.isdigit():
        return False
    elif not addname or not 2 <= len(addname) <= 5:
        return False
    elif addgender not in['男','女']:
        return False
    elif not(6<=(int(addAge)) <= 22):
        return False
    elif not len(addIdCard) == 5:
        return False
    elif len(addIdCard) != 5 or not addIdCard.isdigit():
        return False
    else :
        return True



#修改信息是判断信息是否正确
def informationDetemineModify(addname,addgender,addAge,addIdCard):
    if not addname or not 2 <= len(addname) <= 5:
        return False
    elif addgender not in['男', '女']:
        return False
    elif not(6<=(int(addAge)) <= 22):
        return False
    elif not len(addIdCard) == 5 or not addIdCard.isdigit():
        return False
    else:
        return True


def lockbutton():
    butt1 = Button(root, text='添加', state=DISABLED, width=4, height=2, font=('Arial', 12), command=add)
    butt1.place(x=80, y=300)
    butt2 = Button(root, text='删除', state=DISABLED, width=4, height=2, font=('Arial', 12), command=delete)
    butt2.place(x=180, y=300)
    butt3 = Button(root, text='修改', state=DISABLED, width=4, height=2, font=('Arial', 12), command=modify)
    butt3.place(x=280, y=300)
    butt4 = Button(root, text='查询', state=DISABLED, width=4, height=2, font=('Arial', 12), command=checkAllInformation)
    butt4.place(x=380, y=300)



def add():

    lockbutton()
    root1=Tk()
    root1.title('添加学生信息')
    root1.geometry('500x400')
    root1.configure(bg="#BABABA")
    screenWidth = root1.winfo_screenwidth()
    screenHeight = root1.winfo_screenheight()
    X = int((screenWidth - 500) / 2)
    Y = int((screenHeight - 400) / 2)
    root1.geometry("+{}+{}".format(X, Y))
    #将窗口锁定在最上层
    root1.attributes("-topmost", True)
    root1.resizable(False, False)

    def openbutton():
        butt1 = Button(root, text='添加', state=NORMAL, width=4, height=2, font=('Arial', 12), command=add)
        butt1.place(x=80, y=300)
        butt2 = Button(root, text='删除', state=NORMAL, width=4, height=2, font=('Arial', 12), command=delete)
        butt2.place(x=180, y=300)
        butt3 = Button(root, text='修改', state=NORMAL, width=4, height=2, font=('Arial', 12), command=modify)
        butt3.place(x=280, y=300)
        butt4 = Button(root, text='查询', state=NORMAL, width=4, height=2, font=('Arial', 12),
                       command=checkAllInformation)
        butt4.place(x=380, y=300)
        root1.destroy()

    show(root1)
    showIntermationRoot1AndRoot3(root1)
    addStudentIdCard1 = Label(root1,text='学号', bg="#BABABA"); addStudentIdCard1.place(x=130, y=130)
    addStudentIdCard2 = Entry(root1,textvariable=StringVar, relief=RIDGE, bd=2); addStudentIdCard2.place(x=190, y=130)
    addname1 = Label(root1, text='姓名', bg="#BABABA"); addname1.place(x=130, y=160)
    addname2 = Entry(root1, textvariable=StringVar, relief=RIDGE, bd=2); addname2.place(x=190, y=160)
    addgender1 = Label(root1, text='性别', bg="#BABABA");addgender1.place(x=130, y=220)
    addgender2 = Entry(root1, textvariable=StringVar, relief=RIDGE, bd=2); addgender2.place(x=190, y=220)
    addAge1 = Label(root1, text='年龄', bg="#BABABA");addAge1.place(x=130, y=190)
    addAge2 = Entry(root1, textvariable=StringVar, relief=RIDGE, bd=2); addAge2.place(x=190, y=190)
    addIdCard1 = Label(root1, text='身份证号', bg="#BABABA");addIdCard1.place(x=130, y=250)
    addIdCard2 = Entry(root1, textvariable=StringVar, relief=RIDGE, bd=2); addIdCard2.place(x=190, y=250)

    def getData():
        addStudentIdCard = addStudentIdCard2.get()
        addname = addname2.get()
        addgender = addgender2.get()
        addAge = addAge2.get()
        addIdCard = addIdCard2.get()
        dict1 = {'studentidcard': addStudentIdCard, 'name': addname,
                 'gender': addgender, 'age': addAge, 'idcard': addIdCard}
        if informationDetemine(addStudentIdCard, addname, addgender, addAge, addIdCard):
            print(dict1)
            writeData(dict1)
            tellboxcorrect('添加成功')
            print("添加成功")
            openbutton()
        else:
            print(dict1)
            print("添加失败")
            tellboxerror()
            openbutton()
    # 给添加信息的图中加一个添加按钮
    buttadd = Button(root1, text='添加', width=4, height=2, font=('Arial', 12), command=getData)
    buttadd.place(x=200, y=300)
    root1.protocol('WM_DELETE_WINDOW',openbutton)


def delete():

    lockbutton()
    root2 = Tk()
    root2.title('删除学生信息')
    root2.geometry('500x400')
    root2.configure(bg="#BABABA")
    screenWidth=root.winfo_screenwidth()
    screenHeight=root.winfo_screenheight()
    X=int((screenWidth-500)/2)
    Y=int((screenHeight-400)/2)
    root2.geometry("+{}+{}".format(X,Y))
    root2.attributes("-topmost", True)
    root2.resizable(False, False)
    lockbutton()

    def openbutton2():
        butt1 = Button(root, text='添加', state=NORMAL, width=4, height=2, font=('Arial', 12), command=add).place(x=80,
                                                                                                                  y=300)
        butt2 = Button(root, text='删除', state=NORMAL, width=4, height=2, font=('Arial', 12), command=delete)
        butt2.place(x=180, y=300)
        butt3 = Button(root, text='修改', state=NORMAL, width=4, height=2, font=('Arial', 12), command=modify)
        butt3.place(x=280, y=300)
        butt4 = Button(root, text='查询', state=NORMAL, width=4, height=2, font=('Arial', 12),
                       command=checkAllInformation)
        butt4.place(x=380, y=300)
        root2.destroy()


    show(root2)
    deleteStudentIdCard1 = Label(root2,text='学号',bg="#BABABA");deleteStudentIdCard1.place(x=150, y=130)
    deleteStudentIdCard2 = Entry(root2, textvariable=StringVar,relief=RIDGE,bd=2);deleteStudentIdCard2.place(x=210, y=130)
    deletename1 = Label(root2,text='姓名',bg="#BABABA");deletename1.place(x=150, y=160)
    deletename2 = Entry(root2, textvariable=StringVar,relief=RIDGE,bd=2);deletename2.place(x=210, y=160)
    def getDateInDelete():
        deleteStudentIdCard = deleteStudentIdCard2.get()
        deletename = deletename2.get()
        if detemineStudentIdCardAndName(deleteStudentIdCard,deletename):
            file1 = 'studentInformation'
            file2 = 'studentInformationCopy'
            deleteFileContent(file1,file2,deleteStudentIdCard,deletename)
            copy(file1,file2)
            tellboxcorrect('删除成功')
            print("删除成功")
            openbutton2()
        else:
            tellboxerror()
            print("删除失败")
            openbutton2()

    # 给添加信息的图中加一个添加按钮
    buttdelete = Button(root2, text='删除', width=4, height=2, font=('Arial', 12), command=getDateInDelete)
    buttdelete.place(x=200, y=300)
    root2.protocol('WM_DELETE_WINDOW',openbutton2)

def changeStudenInformation(file1,file2,dict1):
    f2 = open(file2, 'a')
    f2.close()
    f1 = open(file1)
    lst = f1.readlines()
    n = len(lst)
    f1.close()
    f1 = open(file1)
    f2 = open(file2, 'a')
    for i in range(n):
        contant = f1.readline()
        dict = eval(contant)
        if dict['studentidcard']==dict1['studentidcard']:
            f2.write(str(dict1)+'\n')
        else:f2.write(str(dict)+'\n')

    f1.close()
    f2.close()
    copy(file1,file2)


def modify():#修改学生信息
    def openbutton3():
        butt1 = Button(root, text='添加', state=NORMAL, width=4, height=2, font=('Arial', 12), command=add).place(x=80,
                                                                                                                  y=300)
        butt2 = Button(root, text='删除', state=NORMAL, width=4, height=2, font=('Arial', 12), command=delete)
        butt2.place(x=180, y=300)
        butt3 = Button(root, text='修改', state=NORMAL, width=4, height=2, font=('Arial', 12), command=modify)
        butt3.place(x=280, y=300)
        butt4 = Button(root, text='查询', state=NORMAL, width=4, height=2, font=('Arial', 12),
                       command=checkAllInformation)
        butt4.place(x=380, y=300)
        root3.destroy()


    lockbutton()
    root3 = Tk()
    root3.title('修改学生信息')
    root3.geometry('500x400')
    root3.configure(bg="#BABABA")
    screenWidth = root.winfo_screenwidth()
    screenHeight = root.winfo_screenheight()
    X = int((screenWidth - 500) / 2)
    Y = int((screenHeight - 400) / 2)
    root3.geometry("+{}+{}".format(X, Y))
    root3.attributes("-topmost", True)
    root3.resizable(False, False)

    show(root3)
    showIntermationRoot1AndRoot3(root3)
    modifyStudentIdCard1 = Label(root3, text='学号',bg="#BABABA");modifyStudentIdCard1.place(x=130, y=130)
    modifyStudentIdCard2 = Entry(root3, textvariable=Variable,relief=RIDGE,bd=2);modifyStudentIdCard2.place(x=190, y=130)
    modifyname1 = Label(root3, text='姓名',bg="#BABABA");modifyname1.place(x=130, y=160)
    modifyname2 = Entry(root3, textvariable=StringVar,relief=RIDGE,bd=2);modifyname2.place(x=190, y=160)
    modifygender1 = Label(root3, text='性别',bg="#BABABA");modifygender1.place(x=130, y=220)
    modifygender2 = Entry(root3, textvariable=StringVar,relief=RIDGE,bd=2);modifygender2.place(x=190, y=220)
    modifyAge1 = Label(root3, text='年龄',bg="#BABABA");modifyAge1.place(x=130, y=190)
    modifyAge2 = Entry(root3, textvariable=StringVar,relief=RIDGE,bd=2);modifyAge2.place(x=190, y=190)
    modifyIdCard1 = Label(root3, text='身份证号',bg="#BABABA");modifyIdCard1.place(x=130, y=250)
    modifyIdCard2 = Entry(root3, textvariable=StringVar,relief=RIDGE,bd=2);modifyIdCard2.place(x=190, y=250)
    def getDateInModify():
        # 获取文本框中的值
        modifyStudentIdCard = modifyStudentIdCard2.get()
        modifyname = modifyname2.get()
        modifygender = modifygender2.get()
        modifyAge = modifyAge2.get()
        modifyIdCard = modifyIdCard2.get();
        file1 = 'studentInformation'
        file2 = 'studentInformationCopy'
        dict1 = {'studentidcard': modifyStudentIdCard, 'name': modifyname,
                 'gender': modifygender, 'age': modifyAge, 'idcard': modifyIdCard}
        if detemineStudentIdCardIfInFile(modifyStudentIdCard) and informationDetemineModify(modifyname,modifygender,modifyAge,modifyIdCard):
            changeStudenInformation(file1,file2,dict1)
            print("修改成功")
            tellboxcorrect('修改成功')
            openbutton3()
        else:
            print("修改失败")
            tellboxerror()
            openbutton3()
    butt3 = Button(root3, text='修改', width=4, height=2, font=('Arial', 12), command=getDateInModify)
    butt3.place(x=200, y=300)
    root3.protocol('WM_DELETE_WINDOW', openbutton3)



#查询
def checkAllInformation():
    def openbutton4():
        butt1 = Button(root, text='添加', state=NORMAL, width=4, height=2, font=('Arial', 12), command=add)
        butt1.place(x=80, y=300)
        butt2 = Button(root, text='删除', state=NORMAL, width=4, height=2, font=('Arial', 12), command=delete)
        butt2.place(x=180, y=300)
        butt3 = Button(root, text='修改', state=NORMAL, width=4, height=2, font=('Arial', 12), command=modify)
        butt3.place(x=280, y=300)
        butt4 = Button(root, text='查询', state=NORMAL, width=4, height=2, font=('Arial', 12),
                       command=checkAllInformation)
        butt4.place(x=380, y=300)
        root4.destroy()
    lockbutton()
    root4 = Tk()
    root4.title('查询学生信息')
    root4.geometry('500x400')
    root4.configure(bg="#BABABA")
    root4.resizable(False, False)
    screenWidth = root.winfo_screenwidth()
    screenHeight = root.winfo_screenheight()
    X = int((screenWidth - 500) / 2)
    Y = int((screenHeight - 400) / 2)
    root4.geometry("+{}+{}".format(X, Y))
    root4.attributes("-topmost", True)
    f=open('studentInformation','a')
    f.close()
    f = open('studentInformation')
    lst=f.readlines()
    n=len(lst)
    if n==0:lable=Label(root4,text='没有数据');lable.place(x=250,y=200)
    f.close()
    f = open('studentInformation')
    for i in  range(n):
        contant=f.readline()
        dic=eval(contant)
        lable = Label(root4, text='学号:'+dic['studentidcard']+','+'姓名:'
                                  +dic['name']+','+'性别:'+dic['gender']+','+
                                  '年龄:'+dic['age']+','+'身份证号码:'+dic['idcard'],bg="#BABABA")
        lable.place(x=0, y=20*i)
    root4.protocol('WM_DELETE_WINDOW', openbutton4)

def Return():
    root.destroy()
    os.system("python 登录窗口.py")




Button(root,text='添加',width=4, height=2, font=('Arial', 12), command=add).place(x=80, y=300)
butt2 = Button(root,text='删除',width=4,height=2,font=('Arial',12),command=delete)
butt2.place(x=180,y=300)
butt3 = Button(root,text='修改', width=4, height=2, font=('Arial', 12), command=modify)
butt3.place(x=280,y=300)
butt=Button(root,text='查询', width=4, height=2, font=('Arial', 12), command=checkAllInformation)
butt.place(x=380,y=300)
Button(root,text='退出', width=4, height=1, font=('Arial', 12), command=Return).place(x=456, y=0)




root.mainloop()

效果:

#所需的第三方库可根据网上教程安装。

猜你喜欢

转载自blog.csdn.net/qq_74349936/article/details/134938565