wxpython+MySQL实现学生信息管理系统

初学者,仅供学习交流

Python学习两周时间了,这是我目前编写的比较满意的一个程序,有以下几个方面的经验总结:

1.布局管理是可视化编程的基础思维,尽量避免定点式布局,不规则分布的各种控件可以局部先用wx.StaticBoxSizer(静态框)水平或垂直组合,再横向或纵向上与其他控件组合并,利用布局管理的内置参数设置,灵活控制想要的显示效果。需要说明的是,在wxpython里布局管理器不是容器,而是通过它对加入其中的控件进行自适应管理。
2.控件的动态管理问题。这里说的动态不是动画效果,而是不同操作对控件组Show(False)(不可见)和Show(True)(可见)的整体控制。例如学生信息管理系统里有4个按钮,分别控制:查询学生信息、添加学生信息、删除学生信息和退出系统的操作,虽然功能看上去很简单,但每个按钮所调用的控件数也不少,而且在面板布局上是有重叠的。刚开始我的思路是,在父面板上把所有需要的控件都做出来,初始化都设置成Show(False),当调用某个按钮操作时,再Show(True)对应的控件组,如此反复。这样的代码显得特别臃肿繁琐,而且Python程序是由上至下一条条指令运行的,控件显示和消失是有先后顺序的,屏幕分辨率高的话肉眼都能看到控件波浪式消失再现的效果,这个问题目前我查阅的资料里没有找到有效的解决办法。我最终的解决办法是:用类函数嵌套调用跳转同时关闭自己(self.Close()),实现所属控件组随父面板一并关闭,再整体开启新面板及其控件,有点像接龙。说得可能有点抽象,大家可以看下面的具体代码,这种方法也许我还是首创(幻想中…)。用这种方法居然还能自己调用自己再把自己关闭,实现自我刷新,在代码中定义删除学生信息类里有所体现。当时仅仅是按照设计思路抱着尝试一下的心态,居然可行,真是意外的收获。
3.类的继承是一个效率很高的方法,还是拿学生信息管理系统为例,系统操作界面上有多个控件是固定不变的,利用第二点经验里说的方法,免不了会重复构建一些常态控件。用类继承的方法可以大大的压缩代码量,提高开发效率。需要强调的是,做类的继承父类操作时,必须加上super(B,self).init(*args, **kw),确保B的父类被调用(工作原理:首先找到B的父类(比如是类A),然后把类B的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数),不然你会发现在想调用父类的对象和方法时,系统会报对象或方法未定义的错误。(*args, **kw)是python中的可变参数。(*args)表示任何多个无名参数,它是一个tuple;(**kw)表示关键字参数,它是一个dict。并且同时使用(*args)和(**kw)时,必须(*args)参数列要在(**kw)前。
第二、三条是学生信息管理系统开发的核心编程思维。

好了,以上是我的一些粗浅认识,感觉很多都是废话,但作为初学者来说,每一次实践的总结都是自我提升的过程。下面进入主题:

一、建数据库

过程就不说了,直接附上我导出的数据:

-- MySQL dump 10.16  Distrib 10.1.35-MariaDB, for Win32 (AMD64)
--
-- Host: localhost    Database: login_users
-- ------------------------------------------------------
-- Server version	10.1.35-MariaDB

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `login_users`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `login_users` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `login_users`;

--
-- Table structure for table `stu_info`
--

DROP TABLE IF EXISTS `stu_info`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stu_info` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '学生id',
  `stu_name` varchar(32) NOT NULL COMMENT '姓名',
  `stu_gender` enum('男','女') NOT NULL COMMENT '性别',
  `stu_age` tinyint(3) unsigned NOT NULL COMMENT '年龄',
  `stu_cid` varchar(32) NOT NULL COMMENT 'CSDN账号',
  `stu_classid` varchar(32) NOT NULL COMMENT '学习课程',
  `stu_phone` varchar(32) NOT NULL COMMENT '联系方式',
  PRIMARY KEY (`id`),
  UNIQUE KEY `stu_name` (`stu_name`),
  UNIQUE KEY `stu_cid` (`stu_cid`),
  UNIQUE KEY `stu_phone` (`stu_phone`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `stu_info`
--

LOCK TABLES `stu_info` WRITE;
/*!40000 ALTER TABLE `stu_info` DISABLE KEYS */;
INSERT INTO `stu_info` VALUES (1,'测试姓名1','男',20,'000001','Python01','测试联系方式1'),(2,'测试姓名2','男',23,'000002','Python02','测试联系方式2'),(3,'测试姓名3','女',21,'000003','Python03','测试联系方式3'),(4,'测试姓名4','男',28,'000004','php01','测试联系方式4'),(5,'测试姓名5','男',30,'000005','php02','测试联系方式5'),(6,'测试姓名6','女',25,'000006','php03','测试联系方式6'),(7,'测试姓名7','男',35,'000007','JavaScript01','测试联系方式7'),(8,'测试姓名8','男',31,'000008','JavaScript02','测试联系方式8'),(9,'测试姓名9','女',26,'000009','JavaScript03','测试联系方式9'),(10,'测试姓名10','男',24,'000010','SQL01','测试联系方式10');
/*!40000 ALTER TABLE `stu_info` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_name` varchar(32) NOT NULL COMMENT '用户名',
  `user_password` varchar(23) NOT NULL COMMENT '登录密码',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'admin','Python09'),(2,'momobaba','123456');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!400
  • 26
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
好的,下面我简要介绍一下如何使用wxPython和SQLite3来生成图书管理系统。 步骤1:安装wxPython和SQLite3 首先需要安装wxPython和SQLite3,可以通过以下命令来安装: ``` pip install wxPython pip install pysqlite3 ``` 步骤2:创建数据库 使用SQLite3创建一个数据库,用于存储图书信息。在命令行中输入以下命令来创建和连接数据库: ``` sqlite3 library.db ``` 此时会进入SQLite3的命令行模式,输入以下命令来创建一个名为books的表: ``` CREATE TABLE books ( id INTEGER PRIMARY KEY, title TEXT, author TEXT, year INTEGER, isbn INTEGER ); ``` 步骤3:创建界面 使用wxPython创建一个界面,用于显示和编辑图书信息。这个界面可以包含一个列表框,用于显示所有的图书信息,以及一些文本框和按钮,用于添加、编辑和删除图书信息。 步骤4:编写代码 在Python中,可以使用sqlite3模块来连接和操作SQLite3数据库。在这个图书管理系统中,需要编写一些函数来实现以下功能: - 显示所有的图书信息 - 添加新的图书信息 - 编辑已有的图书信息 - 删除图书信息 例如,以下代码实现了添加新的图书信息的功能: ``` import sqlite3 def add_book(title, author, year, isbn): conn = sqlite3.connect("library.db") cur = conn.cursor() cur.execute("INSERT INTO books VALUES (NULL,?,?,?,?)", (title, author, year, isbn)) conn.commit() conn.close() ``` 步骤5:运行程序 最后,运行程序并测试它是否可以正常工作。如果一切顺利,你就可以使用这个图书管理系统来添加、编辑和删除图书信息了。 以上就是使用wxPython和SQLite3创建图书管理系统的基本步骤,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值