python学生信息管理系统(界面+数据库)

,今天跟大家分享一下一个python期末大作业的开发思路。大家可以参考思路自己修改完善。我们讲解的是学生信息管理系统。界面还是用tkinter做,数据库使用sqlite。

先看一下软件截图

数据库设计

编写过程

1.导库

from tkinter import *
from tkinter.messagebox import askokcancel, showinfoimport tkinter.ttk as ttk
from sqlite3 import *

2.初始化

root = Tk()systitle = '学生信息管理系统'  # 系统标题
dbfile = 'student.db'  # v2
cn = connect(dbfile)  # v2连接数据库,连接对象cn
operateFrame = Frame()  # 功能窗口
operateFrame.pack()

3.定义软件主界面函数

def main():    
	root.geometry('600x400')  # 设置窗口初始大小    
	root.title(systitle)  # 设置系统标题    # 创建系统菜单    
	menubar = Menu(root)  # 创建Menu对象menubar,将作为root窗口中的菜单    
	root.config(menu=menubar)  # 将menubar菜单作为root窗口的顶层菜单栏    
	# menuStudent将作为menubar菜单的子菜单    
	menuStudent = Menu(menubar, tearoff=0)    menuStudent.add_command(label='添加新学生', font=('宋体', 10),                            command=addStudent)    
	menuStudent.add_command(label='显示全部学生信息', font=('宋体', 10),                            command=showAllStudent)    
	menuStudent.add_command(label='查找/修改/删除学生信息', font=('宋体', 10),                            command=checkUpdateStudent)
    menuStudent.add_separator()    
    menuStudent.add_command(label='退出', font=('宋体', 10), command='')    # 菜单file添加为menubar的子菜单    
    menubar.add_cascade(label='学生管理', font=('宋体', 10), menu=menuStudent)
    menuHelp = Menu(menubar, tearoff=0)  # help将作为menubar菜单的子菜单    		 	
    menuHelp.add_command(label='查看日志', font=('宋体', 10), command='')    
    menuHelp.add_command(label='关于...', font=('宋体', 10), command='')    # 菜单help添加为menubar的子菜单    
    menubar.add_cascade(label='其他', font=('宋体', 10), menu=menuHelp)
    root.mainloop()

4.定义添加学生信息子界面函数

def addStudent():    
	for widget in operateFrame.winfo_children():  # 清空窗口中原有的所有内容        
	widget.destroy()    
	f1 = Frame(operateFrame)    
	f1.pack()    
	studentIdVar = StringVar()    
	studentNameVar = StringVar()    
	ageVar = StringVar()    
	telVar = StringVar()
    lStudentId = Label(f1, text='学号:')    
    lStudentName = Label(f1, text='姓名:')    
    lAge = Label(f1, text='年龄:')    
    lTel = Label(f1, text='电话:')    
    tStudentId = Entry(f1, textvariable=studentIdVar)    
    tStudentName = Entry(f1, textvariable=studentNameVar)    
    tAge = Entry(f1, textvariable=ageVar)    
    tTel = Entry(f1, textvariable=telVar)
    lStudentId.grid(row=1, column=1)    
    lStudentName.grid(row=2, column=1)    
    lAge.grid(row=3, column=1)    
    lTel.grid(row=4, column=1)    
    tStudentId.grid(row=1, column=2)    
    tStudentName.grid(row=2, column=2)    
    tAge.grid(row=3, column=2)    
    tTel.grid(row=4, column=2)
    f2 = Frame(operateFrame)    
    f2.pack(pady=20)
    bReset = Button(f2, text='重置')    
    bSave = Button(f2, text='保存')
    bReset.grid(row=1, column=1)    
    bSave.grid(row=1, column=2)
   
def reset():        
	studentIdVar.set('')        
	studentNameVar.set('')        
	ageVar.set('')        
	telVar.set('')
    bReset.config(command=reset)
    
def save():#event        
	try:            
		id = studentIdVar.get()            
		if not id.isdigit():                
			raise Exception('学号必须为数字!')            
		elif len(id) != 4:                
			raise Exception('学号必须是4位!')            
		name = studentNameVar.get()            
		age = ageVar.get()            
		if not age.isdigit():                
			raise Exception('年龄错误!')            
		else:                
			age = int(age)                
			if age < 15 or age > 50:                    
				raise Exception('年龄必须大于15小于50!')            
		tel = telVar.get()            
		if not tel.isdigit():                
			raise Exception('电话错误!')            
		elif len(tel) != 4:                
			raise Exception('电话必须4位!')            # 向数据库发送插入指令            			
		cn.execute('INSERT INTO student VALUES(?,?,?,?)', (id, name, age, tel))            	
		cn.commit()            
		showinfo(systitle, '成功添加新学生!')            
		reset()            
		tStudentId.focus()            # 测试:向数据库发一个查询指令        
		# 获得了一个列表,列表中每个单元是一个学生,每个学生是一个元组        
		# stulist = cn.execute('SELECT * FROM student').fetchall()        # print(stulist)        	
	except Exception as ex:            
			showinfo(systitle, ex)
  bSave.config(command=save)    
  tTel.bind('', save)

5.定义显示所有学生信息子界面函数

# 6 显示所有学生
def showAllStudent():                    #v3    
	for widget in operateFrame.winfo_children():  # 清空窗口中原有的所有内容        
		widget.destroy()    
	operateFrame.columnconfigure(1, minsize=50)    
	operateFrame.columnconfigure(2, minsize=100)    
	operateFrame.columnconfigure(3, minsize=50)    
	operateFrame.columnconfigure(4, minsize=100)    
	Label(operateFrame, text='学号',font=('宋体', 10, 'bold')).grid(row=0, column=1)   
	Label(operateFrame, text='姓名',font=('宋体', 10, 'bold')).grid(row=0, column=2)    
	Label(operateFrame, text='年龄',font=('宋体', 10, 'bold')).grid(row=0, column=3)    
	Label(operateFrame, text='电话',font=('宋体', 10, 'bold')).grid(row=0, column=4)    
	stulist = cn.execute('select * from student').fetchall()    
	rownum = 1    
	for stu in stulist:        
		colnum = 1        
		for info in stu:            
			Label(operateFrame, text=str(info),font=('宋体', 10)).grid(row=rownum, column=colnum)            
			colnum += 1        
		rownum += 1

6.定义查找/修改/删除学生信息子界面函数

# 7. 查找删除修改学生
def checkUpdateStudent():                          #v4    
	for widget in operateFrame.winfo_children():  # 清空窗口中原有的所有内容        
		widget.destroy()
    f1 = LabelFrame(operateFrame,text='查找学生:')    
    f1.pack()
    studentIdToSearchVar = StringVar()    
    Label(f1, text='请输入要查找的学生学号:').grid(row=1, column=1)    
    tStudentIdToSearch = Entry(f1,textvariable=studentIdToSearchVar)    
    tStudentIdToSearch.grid(row=1, column=2)    
    bSearch = Button(f1, text='查询')    
    bSearch.grid(row=1, column=3)
    f2 = LabelFrame(operateFrame,text='删除与修改学生:')    
    f2.pack(pady=30)
    fDelete = Frame(f2)    
    fDelete.pack()    
    bDelete = Button(fDelete,text='删除学生',state=DISABLED)    
    bDelete.pack()
    fUpdate = Frame(f2)    
    fUpdate.pack()    
    studentIdVar = StringVar()    
    studentNameVar = StringVar()    
    ageVar = StringVar()    
    telVar = StringVar()    
    Label(fUpdate,text='学号:').grid(row=1,column=1)    Label(fUpdate, text='姓名:').grid(row=2, column=1)    Label(fUpdate, text='年龄:').grid(row=3, column=1)    Label(fUpdate, text='电话:').grid(row=4, column=1)    
    Entry(fUpdate,textvariable=studentIdVar,state=DISABLED).grid(row=1,column=2)    
    Entry(fUpdate,textvariable=studentNameVar).grid(row=2, column=2)    
    Entry(fUpdate,textvariable=ageVar).grid(row=3, column=2)    
    Entry(fUpdate,textvariable=telVar).grid(row=4, column=2)    
    bSave = Button(fUpdate,text='保存修改',state=DISABLED)    
    bSave.grid(row=4,column=3)
    
def search(event=None):        
    studentIdVar.set('')        
    studentNameVar.set('')        
    ageVar.set('')        
    telVar.set('')        
    studentIdToSearch = studentIdToSearchVar.get()        
    print(type(studentIdToSearch ),studentIdToSearch )        
    stu = cn.execute('SELECT sid,sname,age,tel FROM student WHERE sid=?' ,(studentIdToSearch,)).fetchone()        
    print(stu)        
    if stu == None:            
    	showinfo(systitle,'该学生不存在')            
    	bSave.config(state=DISABLED)            
    	bDelete.config(state=DISABLED)        
    else:            
        studentIdVar.set(stu[0])            
        studentNameVar.set(stu[1])            
        ageVar.set(stu[2])            
        telVar.set(stu[3])            
        bDelete.config(state=NORMAL)            
        bSave.config(state=NORMAL)
        
bSearch.config(command=search)    
tStudentIdToSearch.bind("",search)
    
def delete():        
	cn.execute('DELETE FROM student WHERE sid=?',(studentIdVar.get(),))        cn.commit()        	
	showinfo(systitle,'成功删除!')        
	studentIdVar.set('')        
	studentNameVar.set('')        
	ageVar.set('')        
	telVar.set('')    
bDelete.config(command=delete)
    
def save():        
	cn.execute('UPDATE student SET sname=?,age=?,tel=? WHERE sid=?' ,(studentNameVar.get(),ageVar.get(),telVar.get(),studentIdVar.get()))        
	cn.commit()        
	showinfo(systitle,'成功修改!')
    bSave.config(command=save)

7.在程序主入口调用main()函数,启动软件主界面。

if __name__ == '__main__':    main()

.get(),studentIdVar.get()))

 cn.commit()        
  showinfo(systitle,'成功修改!')
  bSave.config(command=save)
7.在程序主入口调用main()函数,启动软件主界面。

if name == ‘main’: main()