import csv
from tkinter import messagebox
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QTreeWidgetItem,QTreeWidget,QApplication,QWidget,QPushButton,QFileDialog,QLineEdit
class Node:
def __init__(self,num,name,score_1,score_2,score_3):
self.num=num
self.name=name
self.score=[score_1,score_2,score_3]
if self.num is not None:
self.score.append(score_1+score_2+score_3)
self.next=None
class linklist:
def __init__(self):
self.head=Node(None,None,None,None,None)
def isempty(self):
if self.head.next==None:
return True
else:
return False
def insert(self,num,name,score_1,score_2,score_3):
new_node=Node(num,name,score_1,score_2,score_3)
if self.isempty():
self.head.next=new_node
else:
new_node.next=self.head.next
self.head.next=new_node
def sort_score(self,i):
i=i-2
p=self.head.next
while p:
q=p.next
while q:
if i>=0:
if q.score[i]>p.score[i]:
q.num,q.name,q.score,p.num,p.name,p.score=p.num,p.name,p.score,q.num,q.name,q.score
elif i==-1:
if q.name[0]<p.name[0]:
q.num,q.name,q.score,p.num,p.name,p.score=p.num,p.name,p.score,q.num,q.name,q.score
elif i==-2:
if q.num<p.num:
q.num,q.name,q.score,p.num,p.name,p.score=p.num,p.name,p.score,q.num,q.name,q.score
q=q.next
p=p.next
def read_csv(self,filename):
with open(filename,'r')as f:
t=csv.reader(f)
for i in t:
self.insert(int(i[0]),i[1],int(i[-4]),int(i[-3]),int(i[-2]))
def print_all(self):
p=self.head.next
while p:
print(p.num,p.name,p.score)
p=p.next
class mywindow(QWidget):
def __init__(self):
super().__init__()
loadUi('student.ui',self)
self.treeWidget.setHeaderLabels(['学号','姓名','语文成绩','数学成绩','英语成绩','总成绩'])
self.l=linklist()
def add_new(self):
name=self.lineEdit_2.text()
num=self.lineEdit_3.text()
chinese=self.lineEdit_4.text()
math=self.lineEdit_5.text()
english=self.lineEdit_6.text()
self.l.insert(int(num),name,int(chinese),int(math),int(english))
messagebox.showinfo('','添加成功')
def clear_all(self):
self.lineEdit_2.clear()
self.lineEdit_3.clear()
self.lineEdit_4.clear()
self.lineEdit_5.clear()
self.lineEdit_6.clear()
def duquwenjian(self):
path,a=QFileDialog.getOpenFileName(self,'读取文件','','(*.csv)')
self.lineEdit.setText(path)
def querenduqu(self):
filename=self.lineEdit.text()
if filename=='':
messagebox.showinfo('','请上传文件')
return
try:
self.l.read_csv(filename)
messagebox.showinfo('','读取成功')
except FileNotFoundError:
messagebox.showerror('','未找到文件')
def tuichu(self):
self.close()
messagebox.showinfo('','成功退出')
def querenpaixu(self):
if self.l.isempty():
messagebox.showerror('','没有数据请输入或读取文件')
return False
i=int(self.comboBox.currentIndex())
self.l.sort_score(i)
self.treeWidget.clear()
p=self.l.head.next
while p:
self.treeWidget.addTopLevelItem(addItem(str(p.num), p.name, str(p.score[0]), str(p.score[1]), str(p.score[2]), str(p.score[3])))
p=p.next
return True
def delete(self):
try:
p,q=self.l.head,self.l.head.next
while q:
if q.num==int(self.treeWidget.currentItem().text(0)):
p.next=q.next
del q
break
else:
p,q=p.next,q.next
if self.querenpaixu():
messagebox.showinfo('','删除成功')
except AttributeError:
messagebox.showerror('','请选择要删除的信息')
def addItem(student_id, name, chinese, math, english, total):
# 创建一个新的QTreeWidgetItem
item = QTreeWidgetItem()
item.setText(0, student_id) # 设置学号
item.setText(1, name) # 设置姓名
item.setText(2, chinese) # 设置语文成绩
item.setText(3, math) # 设置数学成绩
item.setText(4, english) # 设置英语成绩
item.setText(5, total) # 设置总成绩
return item
def main():
import sys
app=QApplication(sys.argv)
a=mywindow()
a.show()
app.exec_()
if __name__=="__main__":
main()
python链表实战制作学生管理系统(附带pyqt5的界面优化)
需积分: 0 177 浏览量
更新于2024-09-16
收藏 4KB ZIP 举报
在本文中,我们将探讨如何使用Python语言结合PyQt5图形用户界面(GUI)框架,实战开发一个学生管理系统。这一过程涵盖了数据结构中的链表技术应用,以及如何利用PyQt5对界面进行优化,最终制作出一个具有用户交互能力的学生信息管理平台。
我们需要了解Python语言中链表的数据结构。链表是由一系列节点组成的集合,每个节点包含数据部分和指向下一个节点的引用。链表的优势在于动态分配内存,且在插入和删除操作中不需要移动大量数据,因此效率较高。在制作学生管理系统时,链表可以用来存储学生数据,每个节点代表一个学生,其中包含学生的信息如姓名、年龄、学号等。通过链表的节点操作,我们可以轻松地添加、删除或更新学生信息。
接下来,我们利用PyQt5对学生管理系统进行界面优化。PyQt5是一个跨平台的应用程序框架,允许开发者使用Python语言来创建图形界面。PyQt5提供了丰富的控件集合,包括按钮、文本框、列表等,可以用来设计直观、友好的用户界面。在我们的学生管理系统中,PyQt5可以用来制作登录界面、学生信息展示界面、以及用于添加、修改、删除学生信息的表单界面等。
在这个项目中,我们主要使用了三个文件。首先是student.csv文件,它是一个CSV格式的文本文件,用于存储学生的数据。CSV文件由于其简单性,常被用于存储和交换数据,每行代表一个学生的信息,字段通常用逗号分隔。
然后是students.py文件,这个文件是整个项目的核心,包含了链表数据结构的实现以及学生管理系统的主要逻辑。在这里,开发者编写代码创建链表节点、实现链表操作函数,并通过PyQt5框架集成界面逻辑,使得用户可以通过图形界面与链表数据交互。
最后是student.ui文件,这是一个界面设计文件,通常由Qt Designer工具生成。在这个文件中,开发者可以可视化地设计软件界面,包括拖放控件、设置控件属性等。设计完成后,通过Qt的uic模块可以将.ui文件转换成Python代码,然后在students.py文件中进行进一步的逻辑处理。
在实现学生管理系统的过程中,我们需要考虑系统的几个主要功能模块,比如添加学生信息、删除学生信息、修改学生信息以及查询学生信息。每个功能模块都需要对应的界面元素和后端逻辑支撑。例如,在添加学生信息功能中,我们需要设计一个表单界面让用户输入学生姓名、年龄等信息,然后将这些信息通过链表操作添加到链表中。
为了保证系统的稳定性,我们还需要考虑数据的持久化问题。虽然链表适合进行动态数据操作,但存储于内存中的数据在程序关闭后会丢失。因此,我们需要将链表中的数据定期或在特定操作后导出到student.csv文件中,保证数据的持久性。
通过本项目的开发,我们不仅能够学习到Python语言的基础知识,还能深入了解PyQt5框架的使用方法,同时掌握链表数据结构的应用,这些技能的结合为我们开发更复杂的应用程序打下了坚实的基础。
本文介绍了一个使用Python和PyQt5开发的学生管理系统,通过这个项目,我们学习了链表的使用、PyQt5界面设计与编程,以及数据持久化的处理方法。这是一个综合性的实战案例,对提升编程能力和开发实际应用具有重要的参考价值。

#岩王爷
- 粉丝: 245
最新资源
- 基于简易内存数据库的水调预警系统的设计及实现的开题报告.docx
- 利用软件对量表.pptx
- 三章创建与使用数据库教程文件.ppt
- 电子商务安全性分析的开题报告.docx
- 电子商务部需招聘人员及详细要求.doc
- 提高网站质量是网络推广以及网络营销的基础.doc
- 大跨径拱桥病害数据库开发的开题报告.docx
- 大连理工大学2021年9月《单片机原理及应用》作业考核试题及答案参考13.docx
- 中国移动江苏公司通信设备代维管理办法集团客户综合代维分册(2009年版).pdf
- 大数据时代档案管理安全问题研究.docx
- 浅谈工业自动化仪器仪表数字化系统技术及其发展.docx
- excel小技巧.docx
- 软件工程c上机实验指导书修订(1).doc
- 《VB程序设计》实验单元一.doc
- 高校科研管理系统数据库设计与实现.docx
- C#时间操作类时间计算等.doc