一、前言

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. linux服务器已知目录下根据特定字符串查找文件

    很久不用的一个项目的测试环境迁移后,启动项目时,发现日志一直报错,在opt/下缺少一个jar包,思路是:查看配置文件,想找到具体是哪个配置文件写了需要用到这个jar包,然后修改到正确路径下重新启动尝试 ...

  2. 谈谈Selenium中的日志

    谈谈Selenium中的日志 来源于一位同学,"老师为啥firefox执行后会有日志文件,chrome没有呢?" 比对 你打开chrome浏览器 from selenium imp ...

  3. Mybatisplus----DML编程控制

    乐观锁 (1)业务并发现象带来的问题:秒杀 执行: 1.在类对象中添加version属性,在数据库表中添加version字段(默认值为1) package com.itheima.domain; im ...

  4. Salesforce CPQ之后续慢慢看系列

    salesforce核心两朵云,sales & service. 针对sales的quote / quote line item的报价功能,还是相对薄弱.针对sales,报价的准确性影响着成单 ...

  5. Neo4j常用操作——Cypher查询语言

    1. 删除数据库中以往的图,确保一个空白的环境进行操作: MATCH (n) DETACH DELETE n # 要想删除数据库的话直接删除文件即可 2. 创建一个人物节点: CREATE (n:Pe ...

  6. C#/VB.NET:如何将PDF转为PDF/A

    PDF/A是一种ISO标准的PDF文件格式版本,是为长期保存文件而设计的.它提供了一种工具,使电子文件在长时间之后依然以一种保留其外观的方式重现,而不管该文件是用什么工具和系统创建.储存或制作的.这种 ...

  7. [nefu]C++程序设计与分析实验 - 锐格

    [nefu]C++程序设计与分析实验 - 锐格 第二章 C++基础 5330 #include<iostream> #include<iomanip> using namesp ...

  8. [Linux]常用命令之【mount/umount】

    1 mount mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者. 在Linux和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分访问的. 要 ...

  9. [Maven]Maven聚合工程

    一直对此问题好奇,正好有这兴致和时间,有必要了解一下. 所谓聚合项目,实际上就是对项目分模块. 互联网项目一般来说按照业务分(订单模块.VIP模块.支付模块.CMS模块-): 传统的软件项目,大多采用 ...

  10. Java构建树结构的公共方法

    一.前提 pId需要传入用来确认第一级的父节点,而且pId可以为null. 树实体类必须实现:TreeNode接口 MyTreeVo必须有这三个属性:id.pId.children 可以根据不同需求, ...