本文共 7897 字,大约阅读时间需要 26 分钟。
我大学时代学过2年的C++,所以编程上有点底子,所以近期自学Python,Python近几年来能够迅速崛起,与它的语法简单、代码格式简洁有密不可分的关系,如果你有其他语言的基础,学起python来会非常容易上手,就像你会骑自行车,给你辆电动车,你很快就能游刃有余。
这篇文章主要是写给初学者交流学习用的,在我编写这个系统过程中,各种功能的实现代码基本来自于csdn各位网友的文章里面,特别感谢的@小小の灰色脑细胞,一个热心快肠的在校小妹妹,她的《pyqt5+pymysql写的一个简易校医室管理系统》给了我很多启示和灵感,而且她还非常热情的给我无私分享了她的源代码,我觉得这才是软件人的格局和高度。
转入正题,写这个系统是因为我工作上需要一个存储数据的系统,具备添加、更改、查询、删除、导出等功能,而且还要与数据库相连接,于是我写这个系统的语言用的是python,为什么?因为它简单好用,系统界面用的是pyqt5,数据库用的是MySql。第一步:用QtDesigner搭建系统界面框架>
用过pyqt5的就知道用它写界面有多方便了,不用你自己去一个个实现按钮、对话框,不用你去计算这些组件的相对位置坐标,你直接用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、添加学生信息功能
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.更改学生信息功能
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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!