已知某校在2019年约有四千名新生,为了便于管理新生信息,今天我们就来对这四千多条数据进行处理,实现类似excel表的筛选功能.

我们先来看一看界面:

建立学校新生数据管理系统_数据查询


我们可以根据用户需求创建功能:

  1. 查询所有学生信息
  2. 查询某学院所有学生信息
  3. 根据出生日期区间查找学生
  4. 退出程序
  5. ……

以上功能可以随时添加或修改.有了需求便可以开始对数据进行操作了,先给大家看一下我的数据表结构:

建立学校新生数据管理系统_数据查询_02

  • id double 主键
  • num varchar(255) 学号
  • name varchar(255) 姓名
  • sex varchar(255) 性别
  • idnum varchar(255) 身份证号
  • bir int(255) 出生日期
  • home varchar(255) 籍贯
  • clas varchar(255) 班级
  • aca varchar(255) 学院

关于建表的操作,大家可以查看我的博客:​​抓取中国天气网当前时段所有城市的天气数据(python+xpath)​​ 
里面有提到如何创建数据表.

创建好数据库以后,导入即可,由于数据含有学生隐私信息,我这里不会公开,我只讲操作数据的具体方法,但是为了给大家展示一下我的数据表里,确实是有数据的,我在这里只展示未编码的部分数据:

建立学校新生数据管理系统_python_03


好了,我们开始吧:

导入相关资源库:

from pymysql import *

我定义一个类来完成今天的项目:

class Inquire(object):
pass

def main():
inquire = Inquire()
inquire.run()

if __name__ == '__main__':
main()

pass代表我下面要讲的内容
我们先来写文章最开始时见到的4个功能:

def run(self):
while True:
num = self.print_num()
if num == "1":
self.get_all_infors()
elif num == "2":
self.get_robot_infors()
elif num == "3":
self.find_area()
elif num == "4":
print("欢迎您下次继续使用!")
break
else:
print("error!请重新输入!")

为了让用户知道每个数字代表什么内容,我们在前面最好加上解释说明:

@staticmethod
def print_num():
while True :
print("-"*50)
print("1:查询所有学生信息")
print("2:查询某学院所有学生信息")
print("3:根据出生日期区间查找学生")
print("4:退出程序")
num = input("请输入数字:")
print("-"*50)
return num

解释一下:
@staticmethod是静态方法,类或实例均可调用,是类的工具包,放在函数前,该函数不传入self或者cls,所以不能访问类属性和实例属性

好了,接下来我们只需要完善功能就可以了:

连接数据库:

ef __init__(self):
try:
self.conn = connect(host = '127.0.0.1',
port = 3306,
user = 'root',
password = 'root',
charset = 'utf8',
db = 'test')
self.cursor = self.conn.cursor()
except Exception as e:
print(e)

查询所有学生信息

def get_all_infors(self):
sql = 'SELECT * FROM buudata2019'
try:
self.cursor.execute(sql)
for item in self.cursor.fetchall():
print(item)
except Exception as e:
print(e)

查询某学院所有学生信息

def get_robot_infors(self):
print("-"*50)
print("城市轨道交通与物流学院")
print("管理学院")
print("机器人学院")
print("旅游学院")
print("师范学院")
print("特殊教育学院")
print("艺术学院")
print("应用科技学院")
print("智慧城市学院")
print("-"*50)
aca_name = input("请输入要查询的学院:")
sql = 'select * FROM buudata2019 WHERE aca = "%s" '%aca_name
try:
self.cursor.execute(sql)
for item in self.cursor.fetchall():
print(item)
except Exception as e:
print(e)

根据出生日期区间查找学生

def find_area(self):
print("请输入正确的生日区间(如:20191002)")
min = int(input("请输入最小值:"))
max = int(input("请输入最大值:"))
sql = 'select * FROM buudata2019 WHERE bir >= %s AND bir <= %s'%(min,max)
try:
self.cursor.execute(sql)
for item in self.cursor.fetchall():
print(item)
except Exception as e:
print(e)

为了以防用户输入错误的信息,导致程序报错,我在这里添加了几个条件,若用户输入错误,则重新输入:

min = 00000000
while min == 00000000:
try:
min = int(input("请输入最小值:"))
while( min == 00000000 ):
min = int(input("请输入最小值:"))
except Exception as e:
print(e)

好了让我们看一看最终效果!

1:查询所有学生信息:

建立学校新生数据管理系统_数据查询_04


建立学校新生数据管理系统_数据查询_05


可以看到,一共有4014条学生信息,运行结束后不会退出程序,而是继续弹出提示框:

2:查询某学院所有学生信息

建立学校新生数据管理系统_python_06


我选择查询 机器人学院


建立学校新生数据管理系统_python_07

3:根据出生日期区间查找学生

建立学校新生数据管理系统_数据查询_08

4:退出程序

建立学校新生数据管理系统_python_09

好了,以上就是全部内容,希望能对大家在写代码时有一定的帮助.