python+mysql实现个人论文管理系统


Posted in Python onOctober 25, 2019

本文实例为大家分享了python mysql个人论文管理系统的具体代码,供大家参考,具体内容如下

1.mysql数据库建表

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

python+mysql实现个人论文管理系统

上图是用户表的数据类型

python+mysql实现个人论文管理系统

上图是论文表的数据类型

python+mysql实现个人论文管理系统

上图是论文表的样例

python+mysql实现个人论文管理系统

上图是用户表的样例

2.流程实现展示

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

1.登录界面展示

python+mysql实现个人论文管理系统

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

python+mysql实现个人论文管理系统

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

python+mysql实现个人论文管理系统

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 = 2
 self.user_name = user_name
 self.user_password = user_password
 
 sql = "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_name
 self.stu_gender = stu_gender
 self.stu_age = stu_age
 self.stu_cid = stu_cid
 self.stu_classid = stu_classid
 self.stu_phone = stu_phone
 self.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 = id
 self.amend_name = amend_name
 self.amend_value = amend_value
 
 sql = "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 pymysql


class UserLogin(wx.Frame):
 
 #初始化登录界面
 def __init__(self,*args,**kw):
 # ensure the parent's __init__ is called
 super(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 += 30
 font = 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添加到垂直box
 vbox.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添加到垂直box
 vbox.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 = 1
 break
 elif (i[1] == self.user_name.GetValue()) and (i[2] == self.user_password.GetValue() and i[0] == 2):
 login_sign = 2
 break
 if 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 called
 super(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 += 30
 font = 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 called
 super(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_grid

 def 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 called
 super(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 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:
 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 called
 super(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:
 pass
 elif 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_operation



class UserOperation(wx.Frame):
 '''
 操作界面
 '''
 def __init__(self,*args,**kw):
 # ensure the parent's __init__ is called
 super(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 += 30
 font = 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 called
 super(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_grid

 def 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 called
 super(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 相关文章推荐
python字符串连接方式汇总
Aug 21 Python
利用Psyco提升Python运行速度
Dec 24 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Python如何获取Win7,Win10系统缩放大小
Jan 10 Python
TensorFlow实现保存训练模型为pd文件并恢复
Feb 06 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 #Python
Python二元赋值实用技巧解析
Oct 25 #Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 #Python
基于Python实现签到脚本过程解析
Oct 25 #Python
python实现大学人员管理系统
Oct 25 #Python
Python队列、进程间通信、线程案例
Oct 25 #Python
python银行系统实现源码
Oct 25 #Python
You might like
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
非常实用的php验证码类
2016/05/15 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
Jquery中dialog属性小记
2010/09/03 Javascript
基于jQuery的合并表格中相同文本的相邻单元格的代码
2011/04/06 Javascript
jQuery对val和atrr("value")赋值的区别介绍
2014/09/26 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
js实现上传图片预览的方法
2015/02/09 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
极简主义法编写JavaScript类
2017/11/02 Javascript
详解JavaScript的变量
2019/04/04 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
python求列表交集的方法汇总
2014/11/10 Python
Python开发的HTTP库requests详解
2017/08/29 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Python实现图片识别加翻译功能
2019/12/26 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
基于python3生成标签云代码解析
2020/02/18 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
单位门卫岗位职责
2013/12/20 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
社区志愿者活动总结
2014/06/26 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
python迷宫问题深度优先遍历实例
2021/06/20 Python