一、前言

coding的一路上,遇到过许多问题,也写过一些代码去解决,回头看看还是有点意思的,于是乎,右手大拇指和中指交错而过,打了个“响指”,不如开篇专栏记录下~

我是熊子q,不如就叫 熊子q的代码乐园

最近寒假来啦,但是因为疫情的影响,还是要坚持每天健康报备,但是捏,身为班长,总是有几个调皮的小可爱忘记报备,然后我就要去叫小可爱,于是乎,为了记录这些小可爱,写了一个健康报备记录小系统~

喏,大概就长这样:

二、技术实现

1.概述

这里是一个小系统,因此呢我选择了最简单的界面,那就是控制台界面!虽然黑呼呼的吧,但是不挡它的强大功能!实现的功能主要是

1、添加今日未报备人员信息

2、查看未报备人员前10信息

3、查看所有未报备人员信息

2. 环境

python3、mysql、win10

3. 技术核心

这个小系统呢,主要用了两个第三方库,一是 pymysql ,python连接mysql的第三方库,很好用哦~ 二是 matplotlib ,python绘制数学图形的强大的第三方库,也是很好用!

想要运行我的代码,你可必须要有这两个库哦

4. 数据库

数据表的设计是这样滴:

样例数据:

其中info字段为日期的拼接字符串,多次的日期中间用英文逗号隔开

对啦,假如你要运行我的代码,关于数据库要做以下操作嗷:

1.创建相关数据库以及表

在你的数据库中创建一个名字为healthy的数据库,名字为stu的数据表,按设计图创建

2.修改代码中数据库的连接账号密码

这个捏,是在源代码中第一个函数getConnection()中的第一行哟,相信聪明的你一定一眼能看出来!

千呼万唤始出来,下面就是源代码了!(当 当当当 当当当当...Music~)

5. 源代码

# -*- coding: utf-8 -*-···
'''
健康报备统计
By 熊子q
'''
import os
import time
import pymysql
import matplotlib.pyplot as plt def getConnection():
'''获取mysql连接对象'''
connection = pymysql.connect(host='localhost',user='root',password='12369',database='healthy')
return connection def closeConnection(connection):
'''关闭mysql连接对象'''
connection.close() def exist(name):
'''
判断该学生是否在数据库中
'''
connection = getConnection()
cursor = connection.cursor()
sql1 = "select count(*) from stu where name=%s"
cursor.execute(sql1, (name,))
res = cursor.fetchone()
closeConnection(connection)
if res[0] == 0:
return False
else:
return True def add(name):
'''
添加一名未报备的同学到数据库
'''
connection = getConnection()
cursor = connection.cursor()
# 获取今天日期
t = time.localtime(time.time())
tday = str(t.tm_mon)+'.'+str(t.tm_mday) if exist(name):
# 已经在数据库中,则次数加一,信息加一
# 查询已有数据
cursor.execute("select cnt,info from stu where name=%s",(name,))
res = cursor.fetchone()
cnt = str(int(res[0])+1)
info = res[1]+','+tday
print(cnt,info)
# 更新数据
try:
cursor.execute("update stu set cnt=%s , info=%s where name=%s", (cnt, info, name,))
connection.commit()
print("添加成功!")
except:
connection.rollback()
else:
# 未在数据库中,添加记录
try:
cursor.execute("insert into stu (name, cnt, info) values(%s, %s, %s)",(name, '1', tday,))
connection.commit()
print("添加成功!")
except:
connection.rollback()
closeConnection(connection) def show():
'''
输出数据库中按次数降序排列的前十名同学信息
'''
connection = getConnection()
cursor = connection.cursor()
cursor.execute("select * from stu order by cnt desc limit 10")
res = cursor.fetchall()
tplt = "{0:{3}^6}\t{1:{3}^6}\t{2:^6}"
print(tplt.format("姓名", "未报备次数", "详细日期", chr(12288)))
for lst in res:
# print(f'{lst[1]:>6}{lst[2]:>10}{lst[3]:>10}')
print(tplt.format(lst[1], lst[2], lst[3], chr(12288)))
closeConnection(connection) def getAll():
'''
获取所有学生信息
'''
connection = getConnection()
cursor = connection.cursor()
cursor.execute("select * from stu")
res = cursor.fetchall()
ret = [[], []]
for t in res:
ret[0].append(t[1])
ret[1].append(t[2])
closeConnection(connection)
return ret def showPic():
'''将数据以折线图的形式展示'''
ret = getAll()
x = ret[0]
y = ret[1]
plt.xticks(rotation=50)
plt.rcParams['font.sans-serif'] = ['Simhei']
plt.plot(x, y, 'rp-', marker='o', markersize=5)
plt.title('未报备人员统计图')
plt.xlabel('姓名')
plt.ylabel('未报备次数')
plt.show() def menu():
'''
主菜单函数
'''
print('''
__ __ ____ __
/ / / /__ ____ _/ / /_/ /_ __ __
/ /_/ / _ \/ __ `/ / __/ __ \/ / / /
/ __ / __/ /_/ / / /_/ / / / /_/ /
/_/ /_/\___/\__,_/_/\__/_/ /_/\__, /
/____/
''',end='')
print("欢迎使用报备记录系统")
print("1.添加今日未报备人员")
print("2.查看未报备人员前10信息")
print("3.查看所有未报备人员信息(折线图)")
print("4.退出这个小系统")
choice = input()
if choice == "1":
print("请输入姓名(回车换行,Over结束):")
while(1):
name = input()
if(name=="Over"):
break
else:
add(name)
os.system("cls")
menu()
elif choice=="2":
print("信息表格(输入任意值返回主菜单):")
show()
c = input()
if c:
os.system("cls")
menu()
elif choice == "3":
showPic()
elif choice=="4":
os.system("exit()") if __name__ == "__main__":
menu()

三、最后

感谢各位大大的耐心阅读~

创作不易,少侠请留步哇!人说,萍水相逢,你我遇见皆是缘分,不如点个赞再走呗。◕ᴗ◕。

【熊子q的代码乐园】用python写个健康报备记录小系统的更多相关文章

  1. 用 Python 写个消消乐小游戏

    提到开心消消乐这款小游戏,相信大家都不陌生,其曾在 2015 年获得过玩家最喜爱的移动单机游戏奖,受欢迎程度可见一斑,本文我们使用 Python 来做个简单的消消乐小游戏. 很多人学习python,不 ...

  2. python写的第一个简单小游戏-猜数字

    #Filename:game1.py guess=10 running=True while running: try: answer=int(raw_input('Guess what i thin ...

  3. 第一次用python 写的简单爬虫 记录在自己的博客

    #python.py from bs4 import BeautifulSoup import urllib.request from MySqlite import MySqlite global ...

  4. 用python写了一个猜年龄小游戏

    写一个猜年龄游戏: 需要实现用户登录的功能 初始用户登录信息为 {'hades': '13579','nick': '123','ruixing': 'a1','fanping': 'b2'} 登录时 ...

  5. 初学python写个自娱自乐的小游戏

    一.摘要 当编写完后的代码执行第一次后达到了目标的预期效果,内心有些许满足,但是当突发情况产生后,程序便不能正常运行,于是准备从简单的版本开始出发,综合考虑使用者的需求,和使用过程中会遇到的问题,一步 ...

  6. 《编写高质量代码:改善Python程序的91个建议》读后感

    编写高质量代码:改善Python程序的91个建议  http://book.douban.com/subject/25910544/ 1.(建议16)is 用于判断两个对象的id是否相等,==才是判断 ...

  7. 使用2to3将代码移植到Python 3-转

    http://m.blog.csdn.net/blog/merryken/9104199# ❝ Life is pleasant. Death is peaceful. It’s the transi ...

  8. dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码

    dedecms列表页调用子栏目列表,织梦首页调用栏目的子栏目标签代码. dedecms列表页调用子栏目列表标签: {dede:channelartlist type='sun' }<a href ...

  9. 在 C 代码中嵌入 Python 语句或使用 Python 模块 (Visual Studio 2013 环境设置)

    1) 新建一个 内嵌 Python 语句的 C 代码, // This is a test for check insert the Python statements or module in C. ...

  10. 【转】利用Boost.Python将C++代码封装为Python模块

    用Boost.Python将C++代码封装为Python模块 一.     基础篇 借助Boost.Python库可以将C/C++代码方便.快捷地移植到python模块当中,实现对python模块的扩 ...

随机推荐

  1. Scanner进阶使用

    Scanner 进阶使用 package com.andy.base.scanner; import java.util.Scanner; public class Demo04 { public s ...

  2. 如何通过C++ 将数据写入 Excel 工作表

    直观的界面.出色的计算功能和图表工具,使Excel成为最流行的个人计算机数据处理软件.在独立的数据包含的信息量太少,而过多的数据又难以理清头绪时,制作成表格是数据管理的最有效手段之一.这样不仅可以方便 ...

  3. msfconsole的使用

    msfconsole是metasploit中的一个工具: msfconsole集成了很多漏洞的利用的脚本,并且使用起来很简单的网络安全工具 在终端输入msfconsole命令即可进入msf的控制台,m ...

  4. Python学习笔记--布尔类型和比较运算符、if判断语句以及相关案例的实现

    布尔类型和比较运算符 代码: 结果: 主要有以下几类: 注意:bool类型的真假表示开头必须大写,例如:True和False 而要是想要得到布尔类型,除了直接定义,还可以通过比较运算得到布尔类型: i ...

  5. jsp页面中的正则表达式--主要用于js判断文本格式

    一.方括号[] 举例: 二.^ 三.元字符 举例的话,就可以这么说,要实现要表示整数的话: []就表示输入的文本框里面的数字的第一位,可以这么写--->[1-9] 然后已知\d表示的与[0-9] ...

  6. 在不使用SQL过程化编程的情况下,实现一个条件结构【SQL149 根据指定记录是否存在输出不同情况】

    题目地址 https://www.nowcoder.com/practice/f72d3fc27dc14f3aae76ee9823ccca6b 思路 加了3列标记位,来达成目的.不直观而且占用内存,但 ...

  7. C++ (伪)随机数生成

    #include <iostream> #include <random> namespace random { // 从系统获取随机数作为种子 std::random_dev ...

  8. c++与linux详细计划,精确到每一天(仅80天)

    好的,以下是三个月中每一天的学习计划: 第一个月: 第1天:阅读C++教程,熟悉环境,了解基本语法和数据类型 第2天:编写Hello World程序,加深对C++环境的了解 第3天:学习函数的定义和调 ...

  9. JS - new Function

    Function 在JavaScript当中,除了可以使用function或箭头函数定义方法外,还可以使用new Function的形式动态创建函数,此时与eval()方法类似 创建一个不接收参数的方 ...

  10. LabVIEW Actor Framwork (2)________ 边学边做server&client

    回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...