一、前言

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. Nginx http 文件服务器 中文名称文件乱码以及不能访问下载问题 (解决全过程)

    书接上文: 在Windows 环境下使用 Nginx 搭建 HTTP文件服务器 实现文件下载 全步骤(详细) _ 发现的中文乱码问题,终于自己解决了! ^_^ Nginx http 文件服务器 中文名 ...

  2. burpsuite 设置文字大小、抓取https数据头

    设置文字大小 burpsuite安装好后,有些时候文字非常的小,看的眼睛直接痛死. 找到 User options -> Display 其中 User Interface -> Font ...

  3. redo log的用处

    redo log用途 1. 用途 保证数据的更新操作不丢失,同时保证了性能 2. 如何没有redo log,如何保证数据库的更新操作不会由于数据库的宕机而丢失? 对数据库进行修改,应该是先从磁盘读取数 ...

  4. 使用Mathematica做序列的DTFT的几个例子

    ListFourierSequenceTransform[{-2, -1, 1, 3, 3, 1, -1, -2}, \[Omega]] ParametricPlot[{Re[%], Im[%]}, ...

  5. Django笔记四之字段属性

    这篇笔记介绍的 field options,也就是 字段的选项属性. 首先,关于 model,是数据库与 python 代码里的一个映射关系,每一个 model 是django.db.models.M ...

  6. 通知短信 API 接入全流程(超详细整理)

    随着移动互联网和智能手机的普及,短信成为了一种便捷.快速且有效的通信方式,尤其在向用户发送重要信息或提醒方面具有很大的优势. 本文将会深入探讨如何在程序中接入通知短信 API 实现短信通知功能,此外, ...

  7. SpringBoot集成海康网络设备SDK

    目录 SDK介绍 概述 功能 下载 对接指南 集成 初始化项目 初始化SDK 初始化SDK概述 新建AppRunner 新建SdkInitService 新建InitSdkTask 新建 HCNetS ...

  8. Redis分布式Session和普通的cookie session有什么区别?

    Redis 是一种高性能的缓存和 key-value 存储系统,常被用来实现分布式 Session 的方案.在这种方案中,用户的登录信息存储在 Redis 中,而不是存储在本地的 cookie 或 s ...

  9. 数据文件的读写—R实现

    数据文件的读写 在R语言中可以读写的最基本的数据格式就是text,以及csv文件.用read.table()或者read.csv函数就可以,相应的写入函数是write.table(),write.cs ...

  10. Quartz 简单使用

    Scheduler 每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题(jobDetail的实例也是新的) Quzrtz 定时任务默认都是并发执行,不会等待上一次 ...