1.mysql数据库建表

在mysql数据库里面建立两个表,分别是用户表和论文表。建表的方式有很多,可以直接用sql语句进行建表,也可以在Navicat里面直接建,在Navicat里面可以清楚的看到我们建表的类型和表中的数据。

上图是用户表的数据类型

上图是论文表的数据类型

上图是论文表的样例

上图是用户表的样例

2.流程实现展示

本次系统的实现主要用到python的pymysql库来连接mysql数据库,用wxpython库来实现可视化界面,通过自己定义的db.py的类库来实现对数据库的增删改查等基本的功能。主体的程序主要用到类的继承来实现整个流程。

1.登录界面展示

2.管理员权限进入系统展示

3.普通用户进入系统展示

3.代码展示

db.py

#导入pymysql模块
import pymysql#创建数据库操作类
class Sql_operation(object):'''数据库操作'''#用构造函数实现数据库连接,并引入mydb参数,实现调用不同的数据库def __init__(self,mydb): #实例变量self.mydb = mydb#打开数据库连接self.db = pymysql.connect(host = "localhost",user = "root",password = "123698745",db = self.mydb,charset = "utf8")#创建游标对象self.cursor = self.db.cursor()#定义查看数据表信息函数,并引入table_field、table_name参数,实现查看不同数据表的建表语句def FindAll(self,table_name):#实例变量self.table_name = table_name#定义SQL语句sql = "select * from %s"%(self.table_name)try:#执行数据库操作self.cursor.execute(sql)#处理结果data = self.cursor.fetchall()return data           except Exception as err:print("SQL执行错误,原因:",err)#定义添加表数据函数def InsertUser(self,user_name,user_password):id = 2self.user_name = user_nameself.user_password = user_passwordsql = "insert into users(id,user_name,user_password)values('%s','%s','%s')"%(int(id),self.user_name,self.user_password)try:#执行数据库操作self.cursor.execute(sql)#事务提交self.db.commit()except Exception as err:#事务回滚self.db.rollback()print("SQL执行错误,原因:",err)def Insert(self,stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone,stu_id):#实例变量self.stu_name = stu_nameself.stu_gender = stu_genderself.stu_age = stu_ageself.stu_cid = stu_cidself.stu_classid = stu_classidself.stu_phone = stu_phoneself.stu_id = stu_id#定义SQL语句sql = "insert into Paper(Papername,author,date,keyword,abstract,journal,id) values('%s','%s','%s','%s','%s','%s','%d')"%(self.stu_name,self.stu_gender,self.stu_age,self.stu_cid,self.stu_classid,self.stu_phone,int(self.stu_id))try:#执行数据库操作self.cursor.execute(sql)#事务提交self.db.commit()except Exception as err:#事务回滚self.db.rollback()print("SQL执行错误,原因:",err)#定义删除表数据函数def Del(self,stu_id):#实例变量self.stu_id = stu_id#定义SQL语句sql = "delete from Paper where id=%d"%(self.stu_id)try:#执行数据库操作self.cursor.execute(sql)#事务提交self.db.commit()except Exception as err:#事务回滚self.db.rollback()print("SQL执行错误,原因:",err)#定义修改表数据函数def Update(self,id,amend_name,amend_value):self.id = idself.amend_name = amend_nameself.amend_value = amend_valuesql = "update Paper set %s=%s where id=%d"%(self.amend_name,self.amend_value,int(self.id)) try:#执行数据库操作self.cursor.execute(sql)#事务提交self.db.commit()except Exception as err:#事务回滚self.db.rollback()print("SQL执行错误,原因:",err)#用析构函数实现数据库关闭def __del__(self):#关闭数据库连接self.db.close()

main2.py

#导入wx模块
import wx
import wx.grid
from db import Sql_operation
import os
#import pymysqlclass UserLogin(wx.Frame):#初始化登录界面def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(UserLogin,self).__init__(*args, **kw)#设置窗口屏幕居中self.Center()#创建窗口self.pnl = wx.Panel(self)#调用登录界面函数self.LoginInterface()def LoginInterface(self):#创建垂直方向box布局管理器vbox = wx.BoxSizer(wx.VERTICAL)##################################################################################创建logo静态文本,设置字体属性logo = wx.StaticText(self.pnl,label="论文管理系统")font = logo.GetFont()font.PointSize += 30font = font.Bold()logo.SetFont(font)#添加logo静态文本到vbox布局管理器vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=180)##################################################################################创建静态框sb_username = wx.StaticBox(self.pnl,label="用户名")sb_password = wx.StaticBox(self.pnl,label="密  码")     #创建水平方向box布局管理器hsbox_username = wx.StaticBoxSizer(sb_username,wx.HORIZONTAL)hsbox_password = wx.StaticBoxSizer(sb_password,wx.HORIZONTAL)#创建用户名、密码输入框self.user_name = wx.TextCtrl(self.pnl,size=(210,25))self.user_password = wx.TextCtrl(self.pnl,size=(210,25))#添加用户名和密码输入框到hsbox布局管理器hsbox_username.Add(self.user_name,0,wx.EXPAND | wx.BOTTOM,5)hsbox_password.Add(self.user_password,0,wx.EXPAND | wx.BOTTOM,5)#将水平box添加到垂直boxvbox.Add(hsbox_username,proportion=0,flag=wx.CENTER)vbox.Add(hsbox_password,proportion=0,flag=wx.CENTER)##################################################################################创建水平方向box布局管理器hbox = wx.BoxSizer()#创建登录按钮、绑定事件处理login_button = wx.Button(self.pnl,label="登录",size=(80,25))regis_button = wx.Button(self.pnl,label="注册",size=(80,25))login_button.Bind(wx.EVT_BUTTON,self.LoginButton)regis_button.Bind(wx.EVT_BUTTON,self.RegisButton)#添加登录按钮到hbox布局管理器hbox.Add(login_button,0,flag=wx.EXPAND | wx.TOP,border=5)hbox.Add(regis_button,0,flag=wx.EXPAND | wx.TOP,border=5)#将水平box添加到垂直boxvbox.Add(hbox,proportion=0,flag=wx.CENTER)##################################################################################设置面板的布局管理器vbox      self.pnl.SetSizer(vbox)     def RegisButton(self,event):#连接student_db数据库op = Sql_operation("student_db")user_name = self.user_name.GetValue()user_password = self.user_password.GetValue()np = op.InsertUser(user_name,user_password)print("注册成功")def LoginButton(self,event):#连接student_db数据库op = Sql_operation("student_db")#获取users表中的用户名和密码信息,返回为二维元组np = op.FindAll("users")#匹配标记login_sign = 0#匹配用户名和密码for i in np: if (i[1] == self.user_name.GetValue()) and (i[2] == self.user_password.GetValue() and i[0] == 1):login_sign = 1breakelif (i[1] == self.user_name.GetValue()) and (i[2] == self.user_password.GetValue() and i[0] == 2):login_sign = 2breakif login_sign == 0:print("用户名或密码错误!")elif (login_sign) == 1:print("登录成功!")            operation = UserOperation(None,title="论文管理系统(管理员)",size=(1024,668))operation.Show()self.Close(True)elif (login_sign) == 2:os.system(r"python C:\Users\Administrator\Desktop\Holiday\Paper\main3.py")class UserOperation(wx.Frame):'''操作界面'''def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(UserOperation,self).__init__(*args, **kw)#设置窗口屏幕居中self.Center()#创建窗口self.pnl = wx.Panel(self)#调用操作界面函数self.OperationInterface()def OperationInterface(self):#创建垂直方向box布局管理器self.vbox = wx.BoxSizer(wx.VERTICAL)       ##################################################################################创建logo静态文本,设置字体属性logo = wx.StaticText(self.pnl,label="论文管理系统(管理员)")font = logo.GetFont()font.PointSize += 30font = font.Bold()logo.SetFont(font)#添加logo静态文本到vbox布局管理器self.vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=5)##################################################################################创建静态框sb_button = wx.StaticBox(self.pnl,label="选择操作")#创建垂直方向box布局管理器vsbox_button = wx.StaticBoxSizer(sb_button,wx.VERTICAL)#创建操作按钮、绑定事件处理check_button = wx.Button(self.pnl,id=10,label="查看论文信息",size=(150,50))add_button = wx.Button(self.pnl,id=11,label="添加论文信息",size=(150,50))delete_button = wx.Button(self.pnl,id=12,label="删除论文信息",size=(150,50))update_button = wx.Button(self.pnl,id=13,label="修改论文信息",size=(150,50))quit_button = wx.Button(self.pnl,id=14,label="退出系统",size=(150,50))self.Bind(wx.EVT_BUTTON,self.ClickButton,id=10,id2=14)#添加操作按钮到vsbox布局管理器vsbox_button.Add(check_button,0,wx.EXPAND | wx.BOTTOM,20)vsbox_button.Add(add_button,0,wx.EXPAND | wx.BOTTOM,20)vsbox_button.Add(delete_button,0,wx.EXPAND | wx.BOTTOM,20)vsbox_button.Add(update_button,0,wx.EXPAND | wx.BOTTOM,20)vsbox_button.Add(quit_button,0,wx.EXPAND | wx.BOTTOM,20)      #创建静态框sb_show_operation = wx.StaticBox(self.pnl,label="显示/操作窗口",size=(800,1000))#创建垂直方向box布局管理器self.vsbox_show_operation = wx.StaticBoxSizer(sb_show_operation,wx.VERTICAL)#创建水平方向box布局管理器hbox = wx.BoxSizer()hbox.Add(vsbox_button,0,wx.EXPAND | wx.BOTTOM,5)hbox.Add(self.vsbox_show_operation,0,wx.EXPAND | wx.BOTTOM,5)#将hbox添加到垂直box        self.vbox.Add(hbox,proportion=0,flag=wx.CENTER)       #################################################################################self.pnl.SetSizer(self.vbox)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="论文管理系统(管理员)",size=(1024,668))inquire_button.Show()self.Close(True)           elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="论文管理系统(管理员)",size=(1024,668))add_button.Show()self.Close(True)                        elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)    elif source_id == 13:print("修改操作!")del_button = UpdOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 14:self.Close(True)#继承UserOperation类,实现初始化操作界面
class InquireOp(UserOperation):
#class InquireOp(InquireOp):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(InquireOp,self).__init__(*args, **kw)#创建论文列表信息网格self.stu_grid = self.CreateGrid()self.stu_grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK,self.OnLabelleftClick)#添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(self.stu_grid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,30)      def ClickButton(self,event):source_id = event.GetId()if source_id == 10:pass                     elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="论文管理系统(管理员)",size=(1024,668))add_button.Show()self.Close(True)                        elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 13:print("修改操作!")del_button = UpdOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 14:self.Close(True)def CreateGrid(self):#连接student_db数据库op = Sql_operation("student_db")#获取Paper表中的论文信息,返回为二维元组np = op.FindAll("Paper")column_names = ("Papername","author","date","keyword","abstract","journal")stu_grid = wx.grid.Grid(self.pnl)stu_grid.CreateGrid(len(np),len(np[0])-1)for row in range(len(np)):stu_grid.SetRowLabelValue(row,str(np[row][0]))#确保网格序列号与数据库id保持一致for col in range(1,len(np[row])):stu_grid.SetColLabelValue(col-1,column_names[col-1])stu_grid.SetCellValue(row,col-1,str(np[row][col]))                stu_grid.AutoSize()return stu_griddef OnLabelleftClick(self,event):#连接student_db数据库op = Sql_operation("student_db")#获取users表中的用户名和密码信息,返回为二维元组np = op.FindAll("users")print("RowIdx: {0}".format(event.GetRow()))print("ColIdx: {0}".format(event.GetRow()))print(np[event.GetRow()])event.Skip()#继承UserOperation类,实现初始化操作界面
class AddOp(UserOperation):
#class AddOp(InquireOp):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(AddOp,self).__init__(*args, **kw)#创建添加论文息输入框、添加按钮self.id = wx.TextCtrl(self.pnl,size = (210,25))self.Papername = wx.TextCtrl(self.pnl,size = (210,25))self.author = wx.TextCtrl(self.pnl,size = (210,25))self.date = wx.TextCtrl(self.pnl,size = (210,25))self.keyword = wx.TextCtrl(self.pnl,size = (210,25))self.abstract = wx.TextCtrl(self.pnl,size = (210,25))self.journal = wx.TextCtrl(self.pnl,size = (210,25))self.add_affirm = wx.Button(self.pnl,label="添加",size=(80,25))#为添加按钮组件绑定事件处理self.add_affirm.Bind(wx.EVT_BUTTON,self.AddAffirm)##################################################################################创建静态框sb_id = wx.StaticBox(self.pnl,label="id")sb_name = wx.StaticBox(self.pnl,label="Papername")sb_gender = wx.StaticBox(self.pnl,label="author")sb_age = wx.StaticBox(self.pnl,label="date")sb_cid = wx.StaticBox(self.pnl,label="keyword")sb_classid = wx.StaticBox(self.pnl,label="abstract")sb_phone = wx.StaticBox(self.pnl,label="journal")     #创建水平方向box布局管理器hsbox_id = wx.StaticBoxSizer(sb_id,wx.HORIZONTAL)hsbox_name = wx.StaticBoxSizer(sb_name,wx.HORIZONTAL)hsbox_gender = wx.StaticBoxSizer(sb_gender,wx.HORIZONTAL)hsbox_age = wx.StaticBoxSizer(sb_age,wx.HORIZONTAL)hsbox_cid = wx.StaticBoxSizer(sb_cid,wx.HORIZONTAL)hsbox_classid = wx.StaticBoxSizer(sb_classid,wx.HORIZONTAL)hsbox_phone = wx.StaticBoxSizer(sb_phone,wx.HORIZONTAL)#添加到hsbox布局管理器hsbox_id.Add(self.id,0,wx.EXPAND | wx.BOTTOM,5)hsbox_name.Add(self.Papername,0,wx.EXPAND | wx.BOTTOM,5)hsbox_gender.Add(self.author,0,wx.EXPAND | wx.BOTTOM,5)hsbox_age.Add(self.date,0,wx.EXPAND | wx.BOTTOM,5)hsbox_cid.Add(self.keyword,0,wx.EXPAND | wx.BOTTOM,5)hsbox_classid.Add(self.abstract,0,wx.EXPAND | wx.BOTTOM,5)hsbox_phone.Add(self.journal,0,wx.EXPAND | wx.BOTTOM,5)##################################################################################添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(hsbox_id,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_name,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_gender,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_age,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_cid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_classid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_phone,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(self.add_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="论文管理系统(管理员)",size=(1024,668))inquire_button.Show()self.Close(True)          elif source_id == 11:pass                     elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 13:print("修改操作!")del_button = UpdOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 14:self.Close(True)def AddAffirm(self,event):#连接student_db数据库op = Sql_operation("student_db")#向Paper表添加论文信息Papername = self.Papername.GetValue()print(Papername)author = self.author.GetValue()print(author)date = self.date.GetValue()print(date)keyword = self.keyword.GetValue()print(keyword)abstract = self.abstract.GetValue()print(abstract)journal = self.journal.GetValue()print(journal)#np = op.Insert(Papername,author,date,keyword,abstract,journal)id = self.id.GetValue()print(id)np = op.Insert(Papername,author,date,keyword,abstract,journal,id)#继承InquireOp类,实现初始化操作界面
class DelOp(InquireOp):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(DelOp,self).__init__(*args, **kw)#创建删除学员信息输入框、删除按钮self.del_id = wx.TextCtrl(self.pnl,pos = (407,78),size = (210,25))self.del_affirm = wx.Button(self.pnl,label="删除",pos=(625,78),size=(80,25))#为删除按钮组件绑定事件处理self.del_affirm.Bind(wx.EVT_BUTTON,self.DelAffirm)##################################################################################创建静态框sb_del = wx.StaticBox(self.pnl,label="请输入需要删除的论文的ID")#创建水平方向box布局管理器hsbox_del = wx.StaticBoxSizer(sb_del,wx.HORIZONTAL)#添加到hsbox_name布局管理器hsbox_del.Add(self.del_id,0,wx.EXPAND | wx.BOTTOM,5)#添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(hsbox_del,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(self.del_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="论文管理系统",size=(1024,668))inquire_button.Show()self.Close(True)         elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="论文管理系统",size=(1024,668))add_button.Show()self.Close(True)                     elif source_id == 12:passelif source_id == 13:print("修改操作!")del_button = UpdOp(None,title="论文管理系统",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 14:self.Close(True)def DelAffirm(self,event):#连接student_db数据库op = Sql_operation("student_db")del_id = self.del_id.GetValue()print(del_id)np = op.Del(int(del_id))del_button = DelOp(None,title="论文管理系统",size=(1024,668))del_button.Show()self.Close(True)class UpdOp(InquireOp):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(UpdOp,self).__init__(*args, **kw)#创建添加论文息输入框、添加按钮self.id = wx.TextCtrl(self.pnl,size = (210,25))self.update_name = wx.TextCtrl(self.pnl,size = (210,25))self.update_acc = wx.TextCtrl(self.pnl,size = (210,25))self.add_affirm = wx.Button(self.pnl,label="确认更新",pos=(550,520),size=(80,25))#为添加按钮组件绑定事件处理self.add_affirm.Bind(wx.EVT_BUTTON,self.UpdateAffirm)##################################################################################创建静态框sb_id = wx.StaticBox(self.pnl,label="需要更新的论文id")sb_name = wx.StaticBox(self.pnl,label="需要更新的内容标题")sb_acc = wx.StaticBox(self.pnl,label="更新的内容")#创建水平方向box布局管理器hsbox_id = wx.StaticBoxSizer(sb_id,wx.HORIZONTAL)hsbox_name = wx.StaticBoxSizer(sb_name,wx.HORIZONTAL)hsbox_acc = wx.StaticBoxSizer(sb_acc,wx.HORIZONTAL)#添加到hsbox布局管理器hsbox_id.Add(self.id,0,wx.EXPAND | wx.BOTTOM,5)hsbox_name.Add(self.update_name,0,wx.EXPAND | wx.BOTTOM,5)hsbox_acc.Add(self.update_acc,0,wx.EXPAND | wx.BOTTOM,5)##################################################################################添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(hsbox_id,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_name,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_acc,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="论文管理系统(管理员)",size=(1024,668))inquire_button.Show()self.Close(True)            elif source_id == 11:pass                     elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(管理员)",size=(1024,668))del_button.Show()self.Close(True)elif source_id == 13:passelif source_id == 14:self.Close(True)def UpdateAffirm(self,event):#连接student_db数据库op = Sql_operation("student_db")update_name = self.update_name.GetValue()print(update_name)update_acc = self.update_acc.GetValue()print(update_acc)id = self.id.GetValue()print(id)np = op.Update(id,update_name,update_acc)if __name__ == '__main__':app = wx.App()login = UserLogin(None,title="论文管理系统(管理员)",size=(1024,668))login.Show()app.MainLoop()

main3.py

#导入mx模块
import wx
import wx.grid
from db import Sql_operationclass UserOperation(wx.Frame):'''操作界面'''def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(UserOperation,self).__init__(*args, **kw)#设置窗口屏幕居中self.Center()#创建窗口self.pnl = wx.Panel(self)#调用操作界面函数self.OperationInterface()def OperationInterface(self):#创建垂直方向box布局管理器self.vbox = wx.BoxSizer(wx.VERTICAL)        ##################################################################################创建logo静态文本,设置字体属性logo = wx.StaticText(self.pnl,label="论文管理系统(普通用户)")font = logo.GetFont()font.PointSize += 30font = font.Bold()logo.SetFont(font)#添加logo静态文本到vbox布局管理器self.vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=5)##################################################################################创建静态框sb_button = wx.StaticBox(self.pnl,label="选择操作")#创建垂直方向box布局管理器vsbox_button = wx.StaticBoxSizer(sb_button,wx.VERTICAL)#创建操作按钮、绑定事件处理check_button = wx.Button(self.pnl,id=10,label="查看论文信息",size=(150,50))add_button = wx.Button(self.pnl,id=11,label="添加论文信息",size=(150,50))#delete_button = wx.Button(self.pnl,id=12,label="删除论文信息",size=(150,50))quit_button = wx.Button(self.pnl,id=13,label="退出系统",size=(150,50))self.Bind(wx.EVT_BUTTON,self.ClickButton,id=10,id2=13)#添加操作按钮到vsbox布局管理器vsbox_button.Add(check_button,0,wx.EXPAND | wx.BOTTOM,40)vsbox_button.Add(add_button,0,wx.EXPAND | wx.BOTTOM,40)#vsbox_button.Add(delete_button,0,wx.EXPAND | wx.BOTTOM,40)vsbox_button.Add(quit_button,0,wx.EXPAND | wx.BOTTOM,200)        #创建静态框sb_show_operation = wx.StaticBox(self.pnl,label="显示/操作窗口",size=(800,800))#创建垂直方向box布局管理器self.vsbox_show_operation = wx.StaticBoxSizer(sb_show_operation,wx.VERTICAL)#创建水平方向box布局管理器hbox = wx.BoxSizer()hbox.Add(vsbox_button,0,wx.EXPAND | wx.BOTTOM,5)hbox.Add(self.vsbox_show_operation,0,wx.EXPAND | wx.BOTTOM,5)#将hbox添加到垂直box     self.vbox.Add(hbox,proportion=0,flag=wx.CENTER)       #################################################################################self.pnl.SetSizer(self.vbox)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="论文管理系统(普通用户)",size=(1024,668))inquire_button.Show()self.Close(True)          elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="论文管理系统(普通用户)",size=(1024,668))add_button.Show()self.Close(True)                       elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(普通用户)",size=(1024,668))del_button.Show()self.Close(True)           elif source_id == 13:self.Close(True)#继承UserOperation类,实现初始化操作界面
class InquireOp(UserOperation):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(InquireOp,self).__init__(*args, **kw)#创建论文列表信息网格self.stu_grid = self.CreateGrid()self.stu_grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK,self.OnLabelleftClick)#添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(self.stu_grid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,30)       def ClickButton(self,event):source_id = event.GetId()if source_id == 10:pass                     elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="论文管理系统(普通用户)",size=(1024,668))add_button.Show()self.Close(True)                       elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(普通用户)",size=(1024,668))del_button.Show()self.Close(True)           elif source_id == 13:self.Close(True)def CreateGrid(self):#连接student_db数据库op = Sql_operation("student_db")#获取Paper表中的论文信息,返回为二维元组np = op.FindAll("Paper")column_names = ("Papername","author","date","keyword","abstract","journal")stu_grid = wx.grid.Grid(self.pnl)stu_grid.CreateGrid(len(np),len(np[0])-1)for row in range(len(np)):stu_grid.SetRowLabelValue(row,str(np[row][0]))#确保网格序列号与数据库id保持一致for col in range(1,len(np[row])):stu_grid.SetColLabelValue(col-1,column_names[col-1])stu_grid.SetCellValue(row,col-1,str(np[row][col]))                stu_grid.AutoSize()return stu_griddef OnLabelleftClick(self,event):#连接student_db数据库op = Sql_operation("student_db")#获取users表中的用户名和密码信息,返回为二维元组np = op.FindAll("users")print("RowIdx: {0}".format(event.GetRow()))print("ColIdx: {0}".format(event.GetRow()))print(np[event.GetRow()])event.Skip()#继承UserOperation类,实现初始化操作界面
class AddOp(UserOperation):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(AddOp,self).__init__(*args, **kw)#创建添加论文息输入框、添加按钮self.id = wx.TextCtrl(self.pnl,size = (210,25))self.Papername = wx.TextCtrl(self.pnl,size = (210,25))self.author = wx.TextCtrl(self.pnl,size = (210,25))self.date = wx.TextCtrl(self.pnl,size = (210,25))self.keyword = wx.TextCtrl(self.pnl,size = (210,25))self.abstract = wx.TextCtrl(self.pnl,size = (210,25))self.journal = wx.TextCtrl(self.pnl,size = (210,25))self.add_affirm = wx.Button(self.pnl,label="添加",size=(80,25))#为添加按钮组件绑定事件处理self.add_affirm.Bind(wx.EVT_BUTTON,self.AddAffirm)##################################################################################创建静态框sb_id = wx.StaticBox(self.pnl,label="id")sb_name = wx.StaticBox(self.pnl,label="Papername")sb_gender = wx.StaticBox(self.pnl,label="author")sb_age = wx.StaticBox(self.pnl,label="date")sb_cid = wx.StaticBox(self.pnl,label="keyword")sb_classid = wx.StaticBox(self.pnl,label="abstract")sb_phone = wx.StaticBox(self.pnl,label="journal")      #创建水平方向box布局管理器hsbox_id = wx.StaticBoxSizer(sb_id,wx.HORIZONTAL)hsbox_name = wx.StaticBoxSizer(sb_name,wx.HORIZONTAL)hsbox_gender = wx.StaticBoxSizer(sb_gender,wx.HORIZONTAL)hsbox_age = wx.StaticBoxSizer(sb_age,wx.HORIZONTAL)hsbox_cid = wx.StaticBoxSizer(sb_cid,wx.HORIZONTAL)hsbox_classid = wx.StaticBoxSizer(sb_classid,wx.HORIZONTAL)hsbox_phone = wx.StaticBoxSizer(sb_phone,wx.HORIZONTAL)#添加到hsbox布局管理器hsbox_id.Add(self.id,0,wx.EXPAND | wx.BOTTOM,5)hsbox_name.Add(self.Papername,0,wx.EXPAND | wx.BOTTOM,5)hsbox_gender.Add(self.author,0,wx.EXPAND | wx.BOTTOM,5)hsbox_age.Add(self.date,0,wx.EXPAND | wx.BOTTOM,5)hsbox_cid.Add(self.keyword,0,wx.EXPAND | wx.BOTTOM,5)hsbox_classid.Add(self.abstract,0,wx.EXPAND | wx.BOTTOM,5)hsbox_phone.Add(self.journal,0,wx.EXPAND | wx.BOTTOM,5)##################################################################################添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(hsbox_id,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_name,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_gender,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_age,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_cid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_classid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_phone,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(self.add_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="论文管理系统(普通用户)",size=(1024,668))inquire_button.Show()self.Close(True)         elif source_id == 11:pass                     elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="论文管理系统(普通用户)",size=(1024,668))del_button.Show()self.Close(True)           elif source_id == 13:self.Close(True)def AddAffirm(self,event):#连接student_db数据库op = Sql_operation("student_db")#向Paper表添加论文信息Papername = self.Papername.GetValue()print(Papername)author = self.author.GetValue()print(author)date = self.date.GetValue()print(date)keyword = self.keyword.GetValue()print(keyword)abstract = self.abstract.GetValue()print(abstract)journal = self.journal.GetValue()print(journal)#np = op.Insert(Papername,author,date,keyword,abstract,journal)id = self.id.GetValue()print(id)np = op.Insert(Papername,author,date,keyword,abstract,journal,id)#继承InquireOp类,实现初始化操作界面
# class DelOp(InquireOp):# def __init__(self,*args,**kw):# # ensure the parent's __init__ is called# super(DelOp,self).__init__(*args, **kw)# #创建删除学员信息输入框、删除按钮# self.del_id = wx.TextCtrl(self.pnl,pos = (407,78),size = (210,25))# self.del_affirm = wx.Button(self.pnl,label="删除",pos=(625,78),size=(80,25))# #为删除按钮组件绑定事件处理# self.del_affirm.Bind(wx.EVT_BUTTON,self.DelAffirm)# ################################################################################## #创建静态框# sb_del = wx.StaticBox(self.pnl,label="请输入需要删除的论文的ID")# #创建水平方向box布局管理器# hsbox_del = wx.StaticBoxSizer(sb_del,wx.HORIZONTAL)# #添加到hsbox_name布局管理器# hsbox_del.Add(self.del_id,0,wx.EXPAND | wx.BOTTOM,5)# #添加到vsbox_show_operation布局管理器# self.vsbox_show_operation.Add(hsbox_del,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)# self.vsbox_show_operation.Add(self.del_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)# def ClickButton(self,event):# source_id = event.GetId()# if source_id == 10:# print("查询操作!")# inquire_button = InquireOp(None,title="论文管理系统",size=(1024,668))# inquire_button.Show()# self.Close(True)         # elif source_id == 11:# print("添加操作!")# add_button = AddOp(None,title="论文管理系统",size=(1024,668))# add_button.Show()# self.Close(True)                       # elif source_id == 12:# pass     # elif source_id == 13:# self.Close(True)# def DelAffirm(self,event):# #连接student_db数据库# op = Sql_operation("student_db")# del_id = self.del_id.GetValue()# print(del_id)# np = op.Del(int(del_id))# del_button = DelOp(None,title="论文管理系统",size=(1024,668))# del_button.Show()# self.Close(True)if __name__ == '__main__':app = wx.App()operation = UserOperation(None,title="论文管理系统(普通用户)",size=(1024,668))#login = UserLogin(None,title="论文管理系统",size=(1024,668))operation.Show()app.MainLoop()

4.总结

这个小系统其实还有不很多不完善的地方,可视化做的也不是很好,要是用H5来实现可视化的话会更好。有什么批评指正的地方也希望大家多多留言!

python+mysql实现个人论文管理系统相关推荐

  1. Python+mysql高校学生社团管理系统-计算机毕业设计源码00498

    高校学生社团管理系统 摘要 随着计算机科学技术的日渐成熟,人们已经深刻地认识到了计算机在各个领域中发挥的功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用.目前学校学生社团 ...

  2. 基于Python+Mysql数据库的图书管理系统课设

    开发环境说明: windows 11 专业版 python 3.7 (所用模块pymysql) PyCharm 专业版 MYSQL 8.0 需要源代码看作者主页联系方式,或看评论区加,或私信 程序问题 ...

  3. 期末课程设计——基于Python+MySQL数据库的学生管理系统(附源代码)

    一.        设计题目 二.        开发环境 三.        设计思想 四.        系统结构 五.        系统使用说明与数据测试: 1.     启动Mysql数据库 ...

  4. 基于Python+MySQL的员工档案管理系统

    目录 目 录 1 一.系统定义 1 1 二. 需求分析 1 (一) 系统综合需求 2 (二) 系统逻辑模型 2 三. 系统设计 4 (一)概念结构设计 5 四. 详细设计 10 (一) 开发平台及工具 ...

  5. hive导数据到mysql 自增主键出错_python+mysql做一个图书管理系统?

    开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括: 图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库 ...

  6. (附源码)python+mysql+基于python的学生成绩管理系统 毕业设计071143

    Django学生成绩管理 摘 要 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革.多样性.质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化.依照这一现实为基础,设计一个快捷而又 ...

  7. python+mysql+基于python的学生成绩管理系统 毕业设计-附源码071143

    Django学生成绩管理 摘   要 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革.多样性.质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化.依照这一现实为基础,设计一个快捷 ...

  8. 计算机毕业设计Python+djang公务员考试信息管理系统(源码+系统+mysql数据库+Lw文档)

    项目介绍 随着社会的发展,近些年来的毕业生大多数会选择考研,考公员和考试教师资格证以增加自己在未来社会中的竞争能力.为了让这些有志之士能够有一个更好的学习和交流平台,我们通过计Python+djang ...

  9. 基于Java的超市管理系统源码,数据库MySQL(附加论文13000字)

    目录 1.摘要 2.社会背景 3.系统可行性研究 4.系统的功能结构(图) 5.功能需求 6.开发环境介绍 7.系统数据流(图) 8.数据库(E-R模型) 9.功能展示 10.论文目录结构 11.源码 ...

  10. 基于Java毕业设计毕业生论文管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计毕业生论文管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计毕业生论文管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...

最新文章

  1. 浙江大学PAT考试1009~1012(1010上帝是冠军。。)
  2. CoreData 数据库表里面一些字段属性
  3. python输入y继续运行_python – 如何使Fabric在获取退出状态后继续运行下一个命令:1?...
  4. 计算机的分类及组合,第六章:组合数据类型
  5. 两物体的相对速度公式_最全物理公式合集,高考这一份就够了!
  6. 【codeforces 798B】Mike and strings
  7. jsp大作业_Servlet与JSP配合使用基本案例
  8. queue的常见用法
  9. 并发设计模式之Master-Worker模式
  10. Lintcode 51.上一个排列[Medium]
  11. 推荐 7 个优质技术号
  12. Spring Data JPA进阶(三):Specification查询
  13. 2020-05-13
  14. 外贸客户邮箱用什么?外贸哪个邮箱好?
  15. 推荐系统与精细化运营
  16. 渣土车识别YOLOv5
  17. PLX桥芯片信息总结
  18. [书籍翻译]12周撰写期刊文章 学术出版成功指南——第 6 周:加强结构
  19. 对DB,DBMS的理解
  20. Android app实现重启、关机功能

热门文章

  1. 利用canvas制作水印(兼容移动端哦)
  2. [转]使用ArcGIS实现WGS84经纬度坐标到北京54高斯投影坐标的转换
  3. java foxpro,在Visual FoxPro中更新顶部
  4. myeclipse如何导入项目
  5. R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、使用cox模型、并添加协变量、可视化无竞争情况下的生存资料多时间ROC曲线
  6. AutoCAD2015激活码和密钥
  7. win7开机后桌面黑屏,提示副本不是正版的解决办法
  8. 国家级非遗传承人高清旺《四大美人》皮影数字藏品惊艳亮相!
  9. 论文特色自我评价内容结构
  10. Mac OS X Safari 插件存放位置