【无标题】python--实验5

题目描述:利用sqlite3、tkinter、tkinter.messagebox库完成2项编程任务。

(1)使用SQLiteStudio.exe工具设计test.db数据库,创建图2-1所示学生数据表student(sid, sname, ssex, sage, sclass),输入如图2-2所示数据。

数据表结构

数据表内容

(2)设计如图3所示学生管理界面,实现学生“录入”、“删除”、“修改”、“查询”、“查看”和关闭6个子功能。(以下给出单个“查询”和所有“查看”功能图示)

 

import tkinter as tk
from tkinter import *
import tkinter.messagebox as messagebox
import sqlite3

t = tk.Tk()
t.geometry('800x400')
t.title('学生信息管理')

sid = tk.StringVar()
sid.set('')

sname = tk.StringVar()
sname.set('')

sage = tk.StringVar()
sage.set('')

ssex = tk.StringVar()
ssex.set('')

sclass = tk.StringVar()
sclass.set('')

def Insert():
    conn = sqlite3.connect(r"test.db")
    cmd = conn.cursor()
    sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % sid.get()
    cmd.execute(sql)
    ds = cmd.fetchall()
    if len(ds) == 1:
        messagebox.showerror("录入失败", "学生" + sid.get() + "存在,不允许重复录入...")
    else:
        sql = "insert into student values('%s','%s','%s','%d','%s')" % (
        sid.get(), sname.get(), ssex.get(), int(sage.get()), sclass.get())
        cmd.execute(sql)
        conn.commit()
        messagebox.showinfo("录入成功", "录入学生" + sid.get() + "成功...")
    cmd.close()
    conn.close()

def Delete():
    conn = sqlite3.connect(r"test.db")
    cmd = conn.cursor()
    sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % sid.get()
    cmd.execute(sql)
    ds = cmd.fetchall()
    if len(ds) == 0:
        messagebox.showerror("删除失败", "学生" + sid.get() + "不存在,删除失败...")
    else:
        sql = "delete from student where sid='%s'" % sid.get()
        cmd.execute(sql)
        conn.commit()
        messagebox.showinfo("删除成功", "录入学生" + sid.get() + "存在,成功...")
    cmd.close()
    conn.close()

def Updata():
    conn = sqlite3.connect("test.db")
    cmd = conn.cursor()
    sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % sid.get()
    cmd.execute(sql)
    ds = cmd.fetchall()
    if len(ds) == 0:
        messagebox.showerror("修改失败", "学生" + sid.get() + "不存在,修改失败...")
    else:
        sql = "update student set sname='%s', ssex='%s', sage='%s', sclass='%s' where sid='%s'" \
                % (sname.get(),ssex.get(), sage.get(),sclass.get(), sid.get())
        cmd.execute(sql)
        conn.commit()
        messagebox.showinfo("修改成功", "修改学生" + sid.get() + "成功...")
    cmd.close()
    conn.close()

def Select():
    conn = sqlite3.connect("test.db")
    cmd = conn.cursor()
    sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % sid.get()
    cmd.execute(sql)
    ds = cmd.fetchall()
    if len(ds) == 0:
        messagebox.showerror("查询失败", "查询学生" + sid.get() + "不存在...")
    else:
        xsid, xsname, xssex, xsage, xsclass = ds[0]
        sid.set(xsid)
        sname.set(xsname)
        ssex.set(xssex)
        sage.set(xsage)
        sclass.set(xsclass)
        strResult = xsid + ',' + xsname + ',' + xssex + ',' + xsage + ',' + xsclass
        vShow.set(strResult)
    cmd.close()
    conn.close()
def Look():
    conn=sqlite3.connect("test.db")
    cmd=conn.cursor()
    sql="select sid, sname, ssex, sage, sclass from student"
    cmd.execute(sql)
    ds=cmd.fetchall()
    if len(ds)==0:
        messagebox.showerror("查看失败","查询学生" + sid.get() + "不存在...")
    else:
        strResult=''
        for i in range(len(ds)):
            xsid, xsname, xssex, xsage, xsclass = ds[i]
            strResult+=xsid+','+xsname+','+xssex+','+xsage+','+xsclass+' '
        vShow.set(strResult)
    cmd.close()
    conn.close()

def Hide():
    t.destroy()
    t.withdraw()

tk.Label(t).grid(row=0)
a=tk.Label(t, text="学生管理平台", fg="blue", font=("黑体",20,"bold"))
a.grid(row=1, columnspan=4)

label1 = tk.Label(t,text='学 号',fg='red')
label1.grid(row=2,column=0,pady=5,sticky='e')
tk.Entry(t, textvariable=sid).grid(row=2, column=1, pady=5, sticky='w')

label1 = tk.Label(t,text='姓 名')
label1.grid(row=3,column=0,pady=5,sticky='e')
tk.Entry(t, textvariable=sname).grid(row=3, column=1, pady=5, sticky='w')

label3 = tk.Label(t,text='性 别')
label3.grid(row=3,column=2,pady=5,sticky='e')
tk.Entry(t, textvariable=ssex).grid(row=3, column=3, pady=5, sticky='w')

label4 = tk.Label(t,text='年 龄')
label4.grid(row=4,column=0,pady=5,sticky='e')
tk.Entry(t, textvariable=sage).grid(row=4, column=1, pady=5, sticky='w')

label6 = tk.Label(t,text='班级')
label6.grid(row=4,column=2,pady=5,sticky='e')
tk.Entry(t, textvariable=sclass).grid(row=4, column=3, pady=5, sticky='w')

Button(t,text="录入", width=10, command=Insert).place(x=0, y=165)
Button(t,text="删除", width=10, command=Delete).place(x=85, y=165)
Button(t,text="修改", width=10, command=Updata).place(x=170, y=165)
Button(t,text="查询", width=10, command=Select).place(x=255, y=165)
Button(t,text="查看", width=10, command=Look).place(x=340, y=165)
Button(t,text="关闭", width=10, command=Hide).place(x=425, y=165)

main=tk.Menu(t)
ins = tk.Menu(main)
ins.add_command(label='录入',command=Insert)
main.add_cascade(label='信息管理',menu=ins)
t['menu']=main

vShow=StringVar();
vShow.set('')
Listbox(t,listvariable=vShow,width=72, height=9).grid(row=10, columnspan=3,padx=50, pady=50, sticky='e')
t.mainloop()

实验5.1:简单GUI编程-学生成绩统计

题目描述:利用tkinter库完成2项GUI编程任务。

  1. 设计如图1所示GUI图形界面;

(2)计算学生四门课程的平均成绩。

import tkinter as tk
t = tk.Tk();
t.geometry('400x300')
t.title('示例')

def f():
    v1 = float(ent1.get())
    v2 = float(ent3.get())
    v3 = float(ent4.get())
    v4 = float(ent5.get())
    v = v1+v2+v3+v4
    result.set(v / 4)

result = tk.StringVar()

label1 = tk.Label(t,text='C/C++程序设计:')
label1.grid(row=0,column=0,padx=5,pady=5,sticky='e')
ent1 = tk.Entry(t,width=15)
ent1.grid(row=0,column=1,padx=5,pady=5,sticky='e')

button1 = tk.Button(t,text='计算平均成绩',command=f)
button1.grid(row=4,column=1,padx=5,pady=5,sticky='w')

label2 = tk.Label(t,text='结果')
label2.grid(row=5,column=0,padx=5,pady=5,sticky='e')
ent2 = tk.Entry(t,width=15,textvariable=result)
ent2.grid(row=5,column=1,padx=5,pady=5,sticky='e')


label3 = tk.Label(t,text='Python程序设计:')
label3.grid(row=1,column=0,padx=5,pady=5,sticky='e')
ent3 = tk.Entry(t,width=15)
ent3.grid(row=1,column=1,padx=5,pady=5,sticky='e')

label4 = tk.Label(t,text='Java程序设计:')
label4.grid(row=2,column=0,padx=5,pady=5,sticky='e')
ent4 = tk.Entry(t,width=15)
ent4.grid(row=2,column=1,padx=5,pady=5,sticky='e')

label5 = tk.Label(t,text='物联网工程:')
label5.grid(row=3,column=0,padx=5,pady=5,sticky='e')
ent5 = tk.Entry(t,width=15)
ent5.grid(row=3,column=1,padx=5,pady=5,sticky='e')

t.mainloop()

实验5.3:扩展实验1

题目描述:编写面向对象代码完成实验5.1。

import tkinter as tk
from tkinter import *
from tkinter import messagebox
class CalStdScore:
    def __init__(self):
        win=Tk()
        win.geometry('256x192')
        win.title('统计学生成绩')

        lblCpp=Label(win,text='C/C++程序设计')
        lblCpp.grid(row=0,column=0,padx=5,pady=5,sticky='e')
        self.vCppScore=IntVar()
        entCpp=Entry(win,width=15,textvariable=self.vCppScore)
        entCpp.grid(row=0,column=1,padx=5,pady=5,sticky='w')

        lblPython = Label(win, text='Python程序设计')
        lblPython.grid(row=1, column=0, padx=5, pady=5, sticky='e')
        self.vPythonScore = IntVar()
        entPython = Entry(win, width=15, textvariable=self.vPythonScore)
        entPython.grid(row=1, column=1, padx=5, pady=5, sticky='w')

        lblJava = Label(win, text='Java程序设计')
        lblJava.grid(row=2, column=0, padx=5, pady=5, sticky='e')
        self.vJavaScore = IntVar()
        entJava = Entry(win, width=15, textvariable=self.vJavaScore)
        entJava.grid(row=2, column=1, padx=5, pady=5, sticky='w')

        btnCalCulate=Button(win,text='统计学生成绩',command=self.Calculate,width=15,height=1)
        btnCalCulate.grid(row=3,column=0,columnspan=2,pady=5)
        win.mainloop()
    def Calculate(self):
        try:
            xCppScore=int(self.vCppScore.get())
            xPythonScore=int(self.vPythonScore.get())
            xJavaScore=int(self.vJavaScore.get())
            xAvgScore=(xCppScore+xPythonScore+xJavaScore)//3
            xMaxScore=max(xCppScore,xPythonScore,xJavaScore)
            xMinScore=min(xCppScore,xPythonScore,xJavaScore)
            str1='平均成绩:'+str(xAvgScore)+'\n'\
                 +'最大成绩'+str(xMaxScore)+'\n'\
                 +'最小成绩'+str(xMinScore)
            messagebox.showinfo(title='统计成绩',message=str1)
        except:
            messagebox.showinfo(title='提示',message='输入错误,重新输入')
CalStdScore()

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值