import pymysql
import wx
class MyFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'班级信息收集',size=(400,300))
#创建面板
panel = wx.Panel(self) #创建“保存”和“查询”按钮,并绑定事件
self.bt_storage = wx.Button(panel,label="保存")
self.bt_storage.Bind(wx.EVT_BUTTON,self.OnclickStorage)
self.bt_inquire = wx.Button(panel,label ='查询')
self.bt_inquire.Bind(wx.EVT_BUTTON,self.OnclickInquire)
#创建文本,左对齐
self.title =wx.StaticText(panel,label ="保存信息请输入用户的学号班级和姓名\n\t查询请输入姓名或学号")
self.label_class =wx.StaticText(panel,label ="班级:")
self.text_class =wx.TextCtrl(panel,style =wx.TE_LEFT)
self.label_user =wx.StaticText(panel,label ="姓名:")
self.text_user =wx.TextCtrl(panel,style =wx.TE_LEFT)
self.label_number = wx.StaticText(panel,label ="学号:")
self.text_number = wx.TextCtrl(panel,style =wx.TE_LEFT)
#添加容器,容器中控件横向排列
hsizer_class =wx.BoxSizer(wx.HORIZONTAL)
hsizer_class.Add(self.label_class,proportion=0,flag=wx.ALL,border=5)
hsizer_class.Add(self.text_class,proportion=1,flag=wx.ALL,border=5)
hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
hsizer_user.Add(self.label_user,proportion=0,flag=wx.ALL,border=5)
hsizer_user.Add(self.text_user,proportion=1,flag =wx.ALL,border=5)
hsizer_number =wx.BoxSizer(wx.HORIZONTAL)
hsizer_number.Add(self.label_number,proportion=0,flag=wx.ALL,border=5)
hsizer_number.Add(self.text_number,proportion=1,flag=wx.ALL,border=5)
hsizer_button =wx.BoxSizer(wx.HORIZONTAL)
hsizer_button.Add(self.bt_storage,proportion=0,flag=wx.ALIGN_CENTER,border=5)
hsizer_button.Add(self.bt_inquire,proportion=0,flag=wx.ALIGN_CENTER,border=5)
#添加容器,容器中的控件纵向排列
vsizer_all = wx.BoxSizer(wx.VERTICAL)
vsizer_all.Add(self.title,proportion=0,flag=wx.BOTTOM |wx.TOP |wx.ALIGN_CENTER,border=15)
vsizer_all.Add(hsizer_class,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45)
vsizer_all.Add(hsizer_user,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45)
vsizer_all.Add(hsizer_number,proportion=0,flag=wx.EXPAND |wx.LEFT |wx.RIGHT,border=45)
vsizer_all.Add(hsizer_button,proportion=0,flag=wx.ALIGN_CENTER |wx.TOP,border=15)
panel.SetSizer(vsizer_all) def OnclickStorage(self,event):
"单击保存按钮"
#连接数据库
db =pymysql.connect(host='localhost',user='root',password='L3918374',database="xinji_inf",charset='utf8')
message =""
classname =self.text_class.GetValue() #获取输入的班级
username =self.text_user.GetValue() #获取输入的用户名
number =self.text_number.GetValue() #获取输入的学号
#使用cursor()方法创建一个游标对象
cursor = db.cursor()
#判断是否为空
if classname =="" or username =="" or number =="":
message ='班级或名字或密码不能为空'
else: #数据列表
data = [(classname,username,number)]
try:
#执行sql语句,插入数据
sql="insert into accountpassword(class, name, number) values(%s,%s,%s)"
cursor.executemany(sql,data)
#提交数据
db.commit()
message ='保存成功' #保存成功
except:
#发生错误时回滚
db.rollback()
#关闭连接
db.close()
wx.MessageBox(message) #弹出提示框 def OnclickInquire(self,event):
"单击查询按钮"
username =self.text_user.GetValue() #获取输入的用户名
number =self.text_number.GetValue() #获取输入的学号
db =pymysql.connect(host='localhost',user='root',password='L3918374',database="xinji_inf",charset='utf8')
#使用cursor()方法创建一个游标对象
cursor = db.cursor()
sql =""
message =""
if username !="" and number !="": #输入学号和姓名判断是否匹配
sql ="SELECT * FROM ACCOUNTPASSWORD \
WHERE NUMBER = %s" #查找学号
try:
#执行sql语句
cursor.execute(sql,number)
#获取记录
results =cursor.fetchall()
if results:
for row in results:
classname = row[0]
username_sql =row[1]
number_sql =row[2]
if username_sql == username:
message ="班级:{}\n姓名:{}\n学号:{}\n".format(classname,username_sql,number_sql)
else:
message ="姓名与学号不匹配"
except:
message = "没有该学号" elif username !="" and number =="":
sql ="SELECT * FROM ACCOUNTPASSWORD \
WHERE NAME = %s" #找到该名字
try:
#执行sql语句
cursor.execute(sql,username)
#获取记录
results =cursor.fetchall()
#输出对应的信息
for row in results:
classname = row[0]
username =row[1]
number =row[2]
message ="班级:{}\n姓名:{}\n学号:{}\n".format(classname,username,number)
except:
message ="没有这个名字" #数据错误--
elif number !="" and username =="":
sql ="SELECT * FROM ACCOUNTPASSWORD \
WHERE NUMBER = %s" #查找学号,同上
try:
#执行sql语句
cursor.execute(sql,number)
#获取记录
results =cursor.fetchall()
for row in results:
classname = row[0]
username =row[1]
number =row[2]
message ="班级:{}\n姓名:{}\n学号:{}\n".format(classname,username,number)
except:
message ="没有这个学号"
else:
message ="班级或名字或密码不能为空"
#关闭数据库
db.close()
wx.MessageBox(message)
if __name__ =='__main__':
app = wx.App() #初始化应用
frame = MyFrame(parent=None, id=-1) #实例MyFrame类,并传递参数
frame.Show() #显示窗口
app.MainLoop() #调用主循环方法

GUI程序设计——班级信息收集系的更多相关文章

  1. 最简单的方法是使用标准的 Linux GUI 程序之一: i-nex 收集硬件信息,并且类似于 Windows 下流行的 CPU-Z 的显示。 HardInfo 显示硬件具体信息,甚至包括一组八个的流行的性能基准程序,你可以用它们评估你的系统性能。 KInfoCenter 和 Lshw 也能够显示硬件的详细信息,并且可以从许多软件仓库中获取。

    最简单的方法是使用标准的 Linux GUI 程序之一: i-nex 收集硬件信息,并且类似于 Windows 下流行的 CPU-Z 的显示. HardInfo 显示硬件具体信息,甚至包括一组八个的流 ...

  2. 信息收集->DNS分析->dnsdict6

    如何获取域名的IPV4/IPV6地址之dnsdict6的使用 dnsdict6是一个用于获取网站信息的工具.dnsdict6可以扫描网站并显示有多少域或者子域,也可以扫描ipv6/ipv4地址.dns ...

  3. Kali Linux信息收集工具

    http://www.freebuf.com/column/150118.html 可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得 ...

  4. Kali Linux信息收集工具全集

    001:0trace.tcptraceroute.traceroute 描述:进行路径枚举时,传统基于ICMP协议的探测工具经常会受到屏蔽,造成探测结果不够全面的问题.与此相对基于TCP协议的探测,则 ...

  5. Kali Linux信息收集工具全

    可能大部分渗透测试者都想成为网络空间的007,而我个人的目标却是成为Q先生! 看过007系列电影的朋友,应该都还记得那个戏份不多但一直都在的Q先生(由于年级太长目前已经退休).他为007发明了众多神奇 ...

  6. ATL的GUI程序设计(4)

    第四章 对话框和控件 对于Win32 GUI的程序设计来说,其实大部分的情况下我们都不需要自己进行窗口类的设计,而是可以使用Win32中与用户交互的标准方式--对话框(Dialog Box).我们可以 ...

  7. ATL的GUI程序设计(3)

    第三章 ATL的窗口类 CWindowImpl.CWindow.CWinTraits,ATL窗口类的奥秘尽在此三者之中.在本章里,李马将为你详细解说它们的使用方法.另外,本章的内容也可以算是本书的核心 ...

  8. ATL的GUI程序设计(2)

    from:http://blog.titilima.com/atlgui-2.html 第二章 一个最简单窗口程序的转型 我知道,可能会有很多朋友对上一章的"Hello, World!&qu ...

  9. ATL的GUI程序设计(1)

    from:http://blog.titilima.com/atlgui-1.html 第一章 不能免俗的"Hello, World!" 在这一章里,就像所有的入门级教程一样,我也 ...

  10. 渗透测试之信息收集(Web安全攻防渗透测试实战指南第1章)

    收集域名信息 获得对象域名之后,需要收集域名的注册信息,包括该域名的DNS服务器信息和注册人的联系方式等. whois查询 对于中小型站点而言,域名所有人往往就是管理员,因此得到注册人的姓名和邮箱信息 ...

随机推荐

  1. 从0开始学Java 第一期 开发前的准备

    Java 学习(一) - 开发前的准备 前言 由于一些项目上的需要,我得学习一下 Java 这门语言(主要是想写Android),本人并非0基础,至少在上个学期学习了一门必修的程序设计(C语言),所以 ...

  2. Flutter2.X学习之路--调试页面布局好用的办法

    Flutter里有个很好用的东西,可以方便我们来进行页面组件的布局调试,话不多说,上代码 1.找到main.dart引入rendering.dart import 'package:flutter/r ...

  3. Unity - 创建C#脚本默认编码格式为UTF8

    嗨咯大家好,哈哈哈哈哈哈哈哈哈哈,今儿小黑加班,目的只有一个,解决Unity创建的脚本通过VS打开后编码格式不正确,导致从Unity的Inspector面板与Mac上边的VS看到的中文为乱码,很气,找 ...

  4. STL序列式容器使用注意、概念总结

    引入 最近看了<STL源码剖析>的第 4 章和第 5 章,介绍了 C++ STL 中的序列式容器和关联式容器,本文将总结序列式容器的基础概念,不会详细它们的实现原理(想知道自个儿看书吧,我 ...

  5. 分布式事务 | 使用DTM 的Saga 模式

    DTM 简介 前面章节提及的MassTransit.dotnetcore/CAP都提供了分布式事务的处理能力,但也仅局限于Saga和本地消息表模式的实现.那有没有一个独立的分布式事务解决方案,涵盖多种 ...

  6. AI 制作 3D 素材|基于 AI 5 天创建一个农场游戏,第 3 天

    欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用 AI 工具在 5 天内创建一个功能完备的农场游戏.到本系列结束时,您将了解到如何将多种 AI 工具整合到游戏开发流程中.本文将向您展示如何将 A ...

  7. TamperMonkey油猴脚本获取

    TamperMonkey官网-脚本获取页面    https://www.tampermonkey.net/scripts.php?ext=dhdg 脚本站点1:Userscript.ZoneSear ...

  8. 12月19日内容总结——Q查询进阶、ORM查询优化、ORM事务、ORM常用字段类型和字段参数、Ajax介绍、数据编码格式、Ajax携带文件数据

    目录 一.Q查询进阶操作 二.ORM查询优化 三.ORM事务操作 四.ORM常用字段类型 五.ORM常用字段参数 六.Ajax AJAX简介 应用场景 AJAX的优点 语法实现 七.数据编码格式(Co ...

  9. rust 网上资料记录(自用)

    最近要学嵌入式的rust,记录一些资料的url,方便自己查阅 书籍 常用的: rust圣经(不是权威指南那本)https://course.rs/ 中文 rust 参考手册 https://rustw ...

  10. Vue25 mixin

    1 简介 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被"混合" ...