【基础】练习册42-Python3_带数据库的学生管理系统

界面为:


代码如下:

# 学生信息管理系统:显示所有信息、追加信息、删除信息、查询

# 细节:清空控件内容

# 待增加功能:查询增加鼠标事件来进行修改

# Treeview

import tkinter as tk

import tkinter.messagebox

import string

import database

from tkinter import ttk

win = tk.Tk()

win.geometry('500x400+200+200')

win.title('学生管理系统')

#win.grid_rowconfigure(win.grid_size(), minsize=1)

# 界面标题

tk.Label(text='学生管理系统',

        font=('宋体', 16, 'bold'),

        fg='blue',

        justify=tk.CENTER,

        width=36).grid(row=1, column=1, columnspan=6, pady=10)

# 界面设置

label1 = tk.Label(text='学号:', justify=tk.RIGHT, width=4).grid(row=2,

                                                              column=1,

                                                              pady=5)

label2 = tk.Label(text='姓名:', justify=tk.RIGHT, width=4).grid(row=2, column=4)

label3 = tk.Label(text='电话:', justify=tk.RIGHT, width=4).grid(row=3,

                                                              column=1,

                                                              pady=5)

label4 = tk.Label(text='地址:', justify=tk.RIGHT, width=4).grid(row=3, column=4)

stu_id = tk.IntVar().set(None)

stu_na = tk.StringVar()

stu_ph = tk.IntVar().set(None)

stu_adr = tk.StringVar()

entryid = tk.Entry(win, textvariable=stu_id, width=18)

entryid.grid(row=2, column=2, columnspan=2, sticky='w')

entryna = tk.Entry(win, textvariable=stu_na, width=18)

entryna.grid(row=2, column=5, columnspan=2, sticky='w')

entryph = tk.Entry(win, textvariable=stu_ph, width=18)

entryph.grid(row=3, column=2, columnspan=2, sticky='w')

entryadr = tk.Entry(win, textvariable=stu_adr, width=18)

entryadr.grid(row=3, column=5, columnspan=2, sticky='w')

tree = ttk.Treeview(win, show='headings', columns=('学号', '姓名', '电话', '地址'))

# 定义列

tree.column('学号', width=100)

tree.column('姓名', width=100)

tree.column('电话', width=100)

tree.column('地址', width=100)

# 定义头

tree.heading('学号', text='学号')

tree.heading('姓名', text='姓名')

tree.heading('电话', text='电话')

tree.heading('地址', text='地址')

def func(event):

    pass

tree.bind("<Button-3>", func)  # <Button-3>鼠标右键

tree.grid(row=6, column=1, columnspan=6, pady=5, sticky='e')

def Judge(stuid):  # 判断stuid(str型)是否存在库中

    flag = 0  # 判断标志,1为stuid存在数据库中

    lst = database.showAllData()

    for i in range(len(lst)):

        for item in lst[i]:

            if int(stuid) == item:

                flag = 1

    return flag

def ClearEntry():  # 清空控件内容

    entryid.delete(0, 'end')

    entryna.delete(0, 'end')

    entryph.delete(0, 'end')

    entryadr.delete(0, 'end')

def ClearTree():  # 清空树控件

    x = tree.get_children()

    for item in x:  # 清空控件内容

        tree.delete(item)

def addInformation():

    res = [entryid.get(), entryna.get(), entryph.get(), entryadr.get()]

    if (not entryid.get()) or (not entryna.get()) or (not entryph.get()) or (

            not entryadr.get()):

        tk.messagebox.showerror(title='Attention', message='输入信息不完整')

    elif (len(entryid.get()) != 8) or not (entryid.get()).isdecimal():

        tk.messagebox.showerror(title='Attention', message='输入错误,学号为8位数字')

    elif len(entryph.get()) != 11 or not (entryph.get()).isdecimal():

        tk.messagebox.showerror(title='Attention', message='输入错误,电话为11位数字')

    else:

        flag = Judge(entryid.get())  # 判断id是否已存在

        if not flag:

            database.addRec(int(entryid.get()), entryna.get(),

                            int(entryph.get()), entryadr.get())

            tk.messagebox.showinfo(title='Attention', message='添加成功')

            tree.insert('', 'end', values=res)

            ClearEntry()  # 清空所有输入框

        else:

            tk.messagebox.showinfo(title='Attention', message='学号已存在')

def deleteInformation():  # 删除

    temp = entryid.get()

    if not temp:

        tk.messagebox.showinfo(title='Attention', message='学生学号为空')

    elif not temp.isdecimal() or (len(entryid.get()) != 8):

        tk.messagebox.showerror(title='Attention', message='输入错误,学号为8位数字')

    else:

        flag = Judge(temp)

        if flag:  # 存在

            database.deleteRec(temp)

            tk.messagebox.showinfo(title='Attention', message='删除成功')

            showData()  # 刷新显示数据

            Clear()  # 清空所有输入框

        else:

            tk.messagebox.showinfo(title='Attention', message='学号不存在')

def showInformation():  # 显示全部信息

    ClearTree()

    lst = database.showAllData()

    for item in lst:

        tree.insert('', 'end', values=item)

def searchInformation():

    temp = entryid.get()

    if not temp:

        tk.messagebox.showinfo(title='Attention', message='学生学号为空')

    elif not temp.isdecimal() or (len(entryid.get()) != 8):

        tk.messagebox.showerror(title='Attention', message='输入错误,学号为8位数字')

    else:

        flag = Judge(temp)

        ClearTree()

        if flag:  # 存在

            res = database.searchRec(temp)

            tree.insert('', 'end', values=res)

        else:

            tk.messagebox.showinfo(title='Attention', message='学号不存在')

bt1 = tk.Button(win, text='显示所有信息', width=10,

                command=showInformation).grid(row=4, column=2, pady=10)

bt2 = tk.Button(win, text='追加信息', width=10,

                command=addInformation).grid(row=4, column=3, pady=10)

bt3 = tk.Button(win, text='删除信息', width=10,

                command=deleteInformation).grid(row=4, column=4, pady=10)

bt4 = tk.Button(win, text='搜索信息', width=10,

                command=searchInformation).grid(row=4, column=5, pady=10)

win.mainloop()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容