Untitled

 avatar
unknown
plain_text
2 years ago
3.9 kB
6
Indexable
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QTableWidget, \
    QTableWidgetItem, QComboBox, QFormLayout, QInputDialog, QMessageBox
from sqlalchemy import create_engine, Column, Integer, String, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class PaymentStatus(Enum):
    PAID = 'Paid'
    PAY_DOWN_PAYMENT = 'Pay Down Payment'
    UNPAID = 'Unpaid'

class SpecificClass(Enum):
    A1 = 'A1'
    A2 = 'A2'
    B1 = 'B1'
    B2 = 'B2'

class StudentStatus(Enum):
    JOINED_GROUP = 'Joined Group'
    NOT_JOINED_YET = "Haven't Joined Yet"

class Student(Base):
    __tablename__ = 'students'
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    class_type = Column(String, nullable=True)
    payment_status = Column(Enum(PaymentStatus), nullable=True)
    specific_class = Column(Enum(SpecificClass), nullable=True)
    phone_number = Column(String, nullable=True)
    student_status = Column(Enum(StudentStatus), nullable=True)

class StudentManager(QWidget):
    def __init__(self):
        super().__init__()

        self.init_db()
        self.init_ui()

    def init_db(self):
        engine = create_engine('sqlite:///students.db', echo=False)
        Base.metadata.create_all(engine)  # Create tables
        Session = sessionmaker(bind=engine, autoflush=False)
        self.session = Session()

    def init_ui(self):
        # ... (Your existing UI code)

    def load_students(self):
        students = self.session.query(Student).all()

        self.student_table.setRowCount(len(students))
        for row, student in enumerate(students):
            self.student_table.setItem(row, 0, QTableWidgetItem(str(student.id)))
            self.student_table.setItem(row, 1, QTableWidgetItem(student.name))
            self.student_table.setItem(row, 2, QTableWidgetItem(student.class_type))
            self.student_table.setItem(row, 3, QTableWidgetItem(str(student.payment_status)))
            self.student_table.setItem(row, 4, QTableWidgetItem(str(student.specific_class)))
            self.student_table.setItem(row, 5, QTableWidgetItem(student.phone_number))
            self.student_table.setItem(row, 6, QTableWidgetItem(str(student.student_status)))
            edit_button = QPushButton('Edit')
            edit_button.clicked.connect(lambda _, student=student: self.edit_student(student))
            self.student_table.setCellWidget(row, 7, edit_button)

    def add_student(self):
        student_name = self.name_entry.text()
        class_type = self.class_combobox.currentText()
        payment_status = self.payment_status_combobox.currentText()
        specific_class = self.specific_class_combobox.currentText()
        phone_number = self.phone_number_entry.text()
        student_status = self.student_status_combobox.currentText()

        if student_name:
            new_student = Student(
                name=student_name,
                class_type=class_type,
                payment_status=payment_status,
                specific_class=specific_class,
                phone_number=phone_number,
                student_status=student_status
            )
            self.session.add(new_student)
            self.session.commit()

            self.name_entry.clear()
            self.phone_number_entry.clear()
            self.load_students()
            QMessageBox.information(self, 'Success', f'Student {student_name} added!')
        else:
            QMessageBox.critical(self, 'Error', 'Please enter a student name.')

    def edit_student(self, student):
        # ... (Your existing edit_student method)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = StudentManager()
    window.show()
    sys.exit(app.exec_())
Editor is loading...
Leave a Comment