用python整个简单的学生信息管理系统
发布日期:2021-06-29 17:34:37 浏览次数:2 分类:技术文章

本文共 7897 字,大约阅读时间需要 26 分钟。

我大学时代学过2年的C++,所以编程上有点底子,所以近期自学Python,Python近几年来能够迅速崛起,与它的语法简单、代码格式简洁有密不可分的关系,如果你有其他语言的基础,学起python来会非常容易上手,就像你会骑自行车,给你辆电动车,你很快就能游刃有余。

这篇文章主要是写给初学者交流学习用的,在我编写这个系统过程中,各种功能的实现代码基本来自于csdn各位网友的文章里面,特别感谢的@小小の灰色脑细胞,一个热心快肠的在校小妹妹,她的《pyqt5+pymysql写的一个简易校医室管理系统》给了我很多启示和灵感,而且她还非常热情的给我无私分享了她的源代码,我觉得这才是软件人的格局和高度。

转入正题,写这个系统是因为我工作上需要一个存储数据的系统,具备添加、更改、查询、删除、导出等功能,而且还要与数据库相连接,于是我写这个系统的语言用的是python,为什么?因为它简单好用,系统界面用的是pyqt5,数据库用的是MySql。

第一步:用QtDesigner搭建系统界面框架>

用过pyqt5的就知道用它写界面有多方便了,不用你自己去一个个实现按钮、对话框,不用你去计算这些组件的相对位置坐标,你直接用QtDesigner搭建好框架,一键生成框架代码就行了,真的非常好用。
QtDesigner搭建系统界面框架
 

第二步:新建学生信息数据库,并连接MySql数据库

学生信息数据库,包括学号、姓名、性别、年龄四组信息。关于建数据库CSDN很多文章都写的很清楚,我在这里不再赘述。

下面这段是连接数据库的代码:

try:    # 插入数据的方式,通过字符串传入值    sql = "insert into student values(%s,%s,%s,%s)"    cur.execute(sql, (textid, textname, textgender, textage))    conn.commit()  # 提交更新的数据到数据库    self.readdatabase()    self.lineEdit.setText("")    self.lineEdit_2.setText("")    # self.lineEdit_3.setText("")    self.lineEdit_4.setText("")

第三步:逐一实现数据添加、更改、查询、删除、导出等功能

1、添加学生信息功能

这是添加学生信息的界面
这个部分主要是要通过对话框将输入的信息储存到数据库中,并实时更新显示在tableWidget中。
将新增学生信息插入到数据库中核心代码如下:
textid = self.lineEdit_5.text()textname = self.lineEdit_6.text()textgender = self.lineEdit_7.text()textage = self.lineEdit_8.text()d_row = self.tableWidget_3.currentRow()  # 获取当前选中的行d_col = self.tableWidget_3.currentColumn()  # 获取当前选中的列id1 = self.tableWidget_3.item(d_row, 0).text()# name1 = self.tableWidget_3.item(d_row, 1).text()# gender1 = self.tableWidget_3.item(d_row, 2).text()# age1 = self.tableWidget_3.item(d_row, 3).text()if id1 == textid:    sql = 'UPDATE student SET name=%s WHERE id = %s;'    args1 = (textname, textid)    self.update(sql, args1)    sql = 'UPDATE student SET gender=%s WHERE id = %s;'    args2 = (textgender, textid)    self.update(sql, args2)    sql = 'UPDATE student SET age=%s WHERE id = %s;'    args3 = (textage, textid)    self.update(sql, args3)    self.readdatabase()    win32api.MessageBox(0, "更改成功!", "提醒", win32con.MB_ICONASTERISK)else:    win32api.MessageBox(0, "学号是唯一标识无法更改,只能删除新建!", "提醒", win32con.MB_ICONASTERISK)

2.更改学生信息功能

更改学生信息界面
这一部分是点击某一行学生的信息,能够实时显示在输入框内,再在输入框更改需要更改的信息,再点击更改就能在后台数据库进行更改数据,并能实时在tableWidget上显示。在这里声明一下,学生信息中的学号是唯一标识,不得更改,不然连学号都有一样的就乱套了,也不符合实际情况。
更改数据库中的数据的核心代码如下图所示:
def find_stu_id(self):    str_id = self.lineEdit_9.text()    try:        sql = 'SELECT * FROM student WHERE id = {}'.format(str_id)        self.table_display_id(sql)        # self.lineEdit_9.setText("")    except:        win32api.MessageBox(0, "查无此号,请重新输入!", "提醒", win32con.MB_ICONASTERISK)def find_stu_name(self):    str_name = str(self.lineEdit_10.text())    try:        sql = 'SELECT * FROM student WHERE name = "{}"'.format(str_name)        self.table_display_name(sql)        # self.lineEdit_10.setText("")    except:        win32api.MessageBox(0, "查无此人,请重新输入!", "提醒", win32con.MB_ICONASTERISK)def find_stu_gender(self):    str_gender = self.lineEdit_11.text()    try:        sql = 'SELECT * FROM student WHERE gender = "{}"'.format(str_gender)        self.table_display_gender(sql)        # self.lineEdit_11.setText("")    except:        win32api.MessageBox(0, "无此信息,请重新输入!", "提醒", win32con.MB_ICONASTERISK)def find_stu_age(self):    str_age = self.lineEdit_12.text()    try:        sql = 'SELECT * FROM student WHERE age = {}'.format(str_age)        self.table_display_age(sql)        # self.lineEdit_12.setText("")    except:        win32api.MessageBox(0, "无此信息,请重新输入!", "提醒", win32con.MB_ICONASTERISK)

3.查找学生信息功能

这部分就是分别通过学号、姓名、性别、年龄在数据库中查找符合相关条件的学生。

通过学号查询
通过姓名查询
通过性别查询
通过年龄查询

查询的核心代码如下:

    def delete(self,sql,args):        conn = self.get_conn()        cur = conn.cursor()        result = cur.execute(sql, args)        print(result)        conn.commit()        # self.readdatabase()        cur.close()        conn.close()    def del_stu(self):        d_row = self.tableWidget_4.currentRow()  # 获取当前选中的行        id1 = self.tableWidget_4.item(d_row, 0).text()        sql = 'DELETE FROM student WHERE id = %s;'        args = (id1,)  # 单个元素的tuple写法        self.delete(sql, args)        self.tableWidget_4.clear()  # 刷新数据表        self.display_4()        self.readdatabase()  # 重新读取数据库        self.lineEdit_13.setText("")        self.lineEdit_14.setText("")        self.lineEdit_15.setText("")        self.lineEdit_16.setText("")

4.删除学生信息功能

选取一行学生信息,点击删除按钮,即可从数据库中删除该信息。

删除学生信息功能
删除数据库中的某条信息核心代码如下:
    def delete(self,sql,args):        conn = self.get_conn()        cur = conn.cursor()        result = cur.execute(sql, args)        print(result)        conn.commit()        # self.readdatabase()        cur.close()        conn.close()    def del_stu(self):        d_row = self.tableWidget_4.currentRow()  # 获取当前选中的行        id1 = self.tableWidget_4.item(d_row, 0).text()        sql = 'DELETE FROM student WHERE id = %s;'        args = (id1,)  # 单个元素的tuple写法        self.delete(sql, args)        self.tableWidget_4.clear()  # 刷新数据表        self.display_4()        self.readdatabase()  # 重新读取数据库        self.lineEdit_13.setText("")        self.lineEdit_14.setText("")        self.lineEdit_15.setText("")        self.lineEdit_16.setText("")

5.导出学生信息功能

这里分为单条导出、多条导出和全部导出。

导出数据示意图
核心代码如下图:
#导出单条信息    def daochu_dant_stu(self):        d_row = self.tableWidget_5.currentRow()  # 获取当前选中的行        if d_row != -1 :            id1 = self.tableWidget_5.item(d_row, 0).text()            name1 = self.tableWidget_5.item(d_row, 1).text()            gender1 = self.tableWidget_5.item(d_row, 2).text()            age1 = self.tableWidget_5.item(d_row, 3).text()            root = tkinter.Tk()  # 创建一个Tkinter.Tk()实例            root.withdraw()  # 将Tkinter.Tk()实例隐藏            file_path = tkinter.filedialog.asksaveasfilename(title=u'保存文件', filetypes=[('Excel files', '.xls')])            file_path = file_path + ".xls"            if file_path != ".xls":                myexcel = xlwt.Workbook(encoding='utf-8')  # 创建myexcel对象                excelsheet = myexcel.add_sheet('sheet1')  # 创建工作表                excelsheet.write(0, 0, "学号")  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(0, 1, "姓名")  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(0, 2,"性别")  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(0, 3, "年龄")  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(1, 0, id1)  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(1, 1, name1)  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(1, 2, gender1)  # 写入数据helloworld,0和0 表示第一行和第一列                excelsheet.write(1, 3, age1)  # 写入数据helloworld,0和0 表示第一行和第一列                myexcel.save(file_path)  # 保存数据到我的excel.xls中                win32api.MessageBox(0, "导出成功!", "提醒", win32con.MB_ICONASTERISK)            else:                win32api.MessageBox(0, "请先选择保存路径!", "提醒", win32con.MB_ICONASTERISK)        else:            win32api.MessageBox(0, "请先选中一行!", "提醒", win32con.MB_ICONASTERISK)

写在最后,因为我也是初学者,有很多感触想分享给各位自学者:

1.千万不要有依赖思想,凡事要靠自己。很多初学者在网上加各种博主,目的是想只要有不懂的就问别人,但是你有没有想过,别人也有工作也要生活,别人凭啥耽误自己的时间平白无故的对你有求必应,天下没有免费的午餐。有些博主会告诉你,但是是收费的,现在知识付费时代嘛,正常,而有些初学者又觉得,我就问你几个问题,你还要收费,我不干。这就是个矛盾了,这个问题最好的解决方法就是靠自己。我的经验是,你遇到的问题在网上都能搜到答案,我的这个系统的完成就是这样通过自己一点点搜答案做出来的,现在网上很多大神无私的分享,所以想学东西又不想花钱,那就靠自己,多搜,多查,肯定能找到答案。
2.做人做事要有格局,要有高度。在我网上搜索资料期间,发现很多没有什么技术含量的代码的文章,都设置了收费啥的,而这些知识都是烂大街的,知识你我目前不会而已,同时能搜到很多公开免费的同意的内容,我想说的是,如果这个知识不是你自己花费很多财力物力精力原创出来的,就别动不动就付费共享,格局大点,无私分享,相互学习多好,有什么藏着掖着的呢?我就遇到两个截然不同的例子。

第一个,我看到写了一个简单的系统,里面有一些对数据库操作的常用代码,文章后面写着想要源码加企鹅,结果我加了后,她来个要想要代码,90红包,我无语。

第二个,名叫小小の灰色脑细胞的博主,写的《pyqt5+pymysql写的一个简易校医室管理系统》,我看了后跟我想做的很像,里面有很多代码都是我用的上的,我就在她文章下面留了个邮箱,希望看看源代码,结果当天就发给我了,然后我还加了她企鹅,原来是个在校小学妹,非常无私的说,有什么问题可以随时问她,大家一起交流学习,我非常感动,这就叫格局,然而我并没有一点看不懂就问她,前面说了人家是免费分享,没有义务总回答你,凡事多靠自己,不到万不得已不要打扰别人,最后我通过读她的代码和上网搜资料,完成了这个系统。但是在界面美化方面我还没去研究,后续再完善。另外系统的登录界面、管理员和普通用户界面都没做,因为那都很简单,只是个框架,后续都可以完善。

3.凡事先解决有没有的问题,再解决能不能更好的问题。我写的代码没有进行优化,就是简单粗暴的先解决能跑的问题,后续再解决怎么跑的更快的问题。不要想着一口吃个胖子,我要一开始就写出非常完善的系统,那是不可能的,你只有在这个逐步完善的过程中才会积累很多经验。

↓↓↓阅读原文获取更多

喜欢就奖励一个“????”和“在看”呗~

转载地址:https://cpython.blog.csdn.net/article/details/115805163 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:手把手教用python开发界面程序,对新手友好
下一篇:python实现简单猜单词游戏(50行代码)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月27日 01时24分56秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

东软载波携ES32+RT-Thread走进海尔集团 2019-04-29
今晚8点直播预告:RT-Thread Studio等相关主题答疑 2019-04-29
Linux内核在中国大发展的黄金十年-写于中国Linux存储、内存管理和文件系统峰会十周年之际... 2019-04-29
物联网 20 年简史大揭秘! 2019-04-29
开源项目|RT-Thread 软件包应用作品:水墨屏桌面台历 2019-04-29
珠联璧合!基于i.MX RT和RT-Thread的物联网云接入方案 2019-04-29
基于RTT-MicroPython制作自带BGM的新型肺炎晴雨表 2019-04-29
Arm宣布推出Cortex-M55核心和Ethos-U55 microNPU,瞄准低功耗Edge AI 2019-04-29
开源项目|RT-Thread 软件包应用作品:小闹钟 2019-04-29
在 RT-Thread Studio 上使用 RT-Thread Nano 2019-04-29
开源项目|软件包应用作品:通用物联网系统平台 2019-04-29
【经验分享】RT-Thread UART设备驱动框架初体验(中断方式接收带\r\n的数据) 2019-04-29
单片机里面的CPU使用率是什么鬼? 2019-04-29
推荐一个优质Linux技术公众号-作者都是一线Linux代码贡献者们哦 2019-04-29
RT-Thread 编程风格指南 2019-04-29
95后高校电子教师,软硬兼修有趣有料! 2019-04-29
使用 STM32 通用 Bootloader ,让 OTA 更加 Easy 2019-04-29
Cache 的基本概念与工作原理 2019-04-29
装机量超亿台 RISC-V +IoT OS!中科蓝讯与RT-Thread战略合作,共推自主物联网生态发展 2019-04-29
Android程序员必备!面试一路绿灯Offer拿到手软,Android面试题及解析 2019-04-29