На нашем сайте Вы сможете найти готовые курсовые и дипломные работы по программированию
Сейчас работаем

Практика. Учёт успеваемости студентов (Python, Django, DRF, SQLite, React, Vite, html, css, js, bootstrap)

Скриншот архива с проектом

Структура проектов

Задание

Разработать веб-приложение на Django для ведения онлайн-журнала успеваемости учеников: веб-приложение должно предоставлять педагогам возможность добавления оценок, отметок о посещаемости и отслеживания успеваемости каждого ученика

Функционал программы

- форма авторизации;

- вывод всех данных, хранящихся на сервере;

- добавление новых данных о успеваемости и посещаемости;

- редактирование данных;

- удаление данных;

- поиск по фамилии студента;

- построение графиков – два общих графика успеваемости строятся по датам выставления и редактирования оценки соответственно и два графика для каждого студента в отдельности, которые строятся по тому же принципу, что и первые два.

Содержание отчета к программе

Фрагмент программного кода (код модели Statement)

from django.db import models


# Create your models here.


class Statement(models.Model):

    objects = models.Manager()

    student = models.CharField(max_length=100, help_text='Введите студента', verbose_name='Студент')
    subject = models.CharField(max_length=100, help_text='Введите предмет', verbose_name='Предмет')
    estimation = models.IntegerField(help_text='Введите оценку', verbose_name='Оценка')
    ATTENDANCE_CHOICES = [
        ('Высокая', 'Высокая'),
        ('Средняя', 'Средняя'),
        ('Низкая', 'Низкая'),
    ]
    attendance = models.CharField(max_length=50, choices=ATTENDANCE_CHOICES, verbose_name='Посещаемость')
    GRADE_CHOICES = [
        ('Высокая', 'Высокая'),
        ('Средняя', 'Средняя'),
        ('Низкая', 'Низкая'),
    ]
    grade = models.CharField(max_length=50, choices=GRADE_CHOICES, verbose_name='Успеваемость')
    date_of_rating = models.DateField(auto_now_add=True, verbose_name='Дата выставления оценки')
    date_of_change = models.DateField(null=True, blank=True, verbose_name='Дата изменения оценки')

    def __str__(self):
        return f'{self.student} - {self.subject}: {self.estimation}, Посещаемость: {self.attendance}'

    class Meta:
        verbose_name = 'Ведомость'
        verbose_name_plural = 'Ведомость'

Фрагмент программного кода (код компонента ShowStatement.jsx)

import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { Link } from 'react-router-dom';

function ShowStatement() {
  const [statements, setStatements] = useState([]);
  const [searchTerm, setSearchTerm] = useState(''); // 🔍 состояние для поиска

  useEffect(() => {
    const fetchStatements = async () => {
      try {
        const response = await axios.get('http://127.0.0.1:8000/api/students/');
        setStatements(response.data);
      } catch (error) {
        console.error('Ошибка при загрузке данных:', error);
      }
    };

    fetchStatements();
  }, []);

  // 🔍 Фильтрация по имени студента (без учета регистра)
  const filteredStatements = statements.filter((item) =>
    item.student.toLowerCase().includes(searchTerm.toLowerCase())
  );

  return (
    <div className="container">
      <h2>Ведомость студентов</h2>
 <div className="mb-3">
        <input
          type="text"
          className="form-control"
          placeholder="Поиск по имени студента..."
          value={searchTerm}
          onChange={(e) => setSearchTerm(e.target.value)}
        />
      </div>

      {/* 🔹 Оригинальные оценки */}
      <h4>📘 Оригинальные оценки</h4>
      <table className="statement-table table table-hover table-striped table-bordered text-start">
        <thead>
          <tr>
            <th className="text-center">Студент</th>
            <th className="text-center">Предмет</th>
            <th className="text-center">Оценка</th>
            <th className="text-center">Посещаемость</th>
            <th className="text-center">Успеваемость</th>
            <th className="text-center">Дата выставления</th>
            <th className="text-center">Детали</th>
          </tr>
        </thead>
        <tbody>
          {filteredStatements
            .filter(item => item.date_of_change === null)
            .map(item => (
              <tr key={`original-${item.id}`}>
                <td className="text-center">{item.student}</td>
                <td className="text-center">{item.subject}</td>
                <td className="text-center">{item.estimation}</td>
                <td className="text-center">{item.attendance}</td>
                <td className="text-center">{item.grade}</td>
                <td className="text-center">{item.date_of_rating}</td>
                <td>
                  <Link to={`/student/${item.id}`}>
                    <button className="btn btn-primary">Детали</button>
                  </Link>
                </td>
              </tr>
            ))}
        </tbody>
      </table>

      {/* 🔸 Отредактированные оценки */}
      <h4>✏️ Отредактированные оценки</h4>
      <table className="statement-table table table-hover table-striped table-bordered text-start">
        <thead>
          <tr>
            <th className="text-center">Студент</th>
            <th className="text-center">Предмет</th>
            <th className="text-center">Оценка</th>
            <th className="text-center">Посещаемость</th>
            <th className="text-center">Успеваемость</th>
            <th className="text-center">Дата изменения</th>
            <th className="text-center">Детали</th>
          </tr>
        </thead>
        <tbody>
          {filteredStatements
            .filter(item => item.date_of_change !== null)
            .map(item => (
              <tr key={`edited-${item.id}`}>
                <td className="text-center">{item.student}</td>
                <td className="text-center">{item.subject}</td>
                <td className="text-center">{item.estimation}</td>
                <td className="text-center">{item.attendance}</td>
                <td className="text-center">{item.grade}</td>
                <td className="text-center">{item.date_of_change}</td>
                <td>
                  <Link to={`/student/${item.id}`}>
                    <button className="btn btn-primary">Детали</button>
                  </Link>
                </td>
              </tr>
            ))}
        </tbody>
      </table>
    </div>
  );
}
export default ShowStatement;

Пояснения по запуску программы

Node.js - https://nodejs.org/en - скачиваем и устанавливаемPython - https://www.python.org/Visual Studio Code - https://code.visualstudio.com/ - скачиваем и устанавливаем. Настраиваем редактор для работы с React и Python Запускаем сервер, проверяем работу api. в случае необходимости устанавливаем все необходимые библиотеки. Запускаем клиента. Радуемся успеху и пользуемся приложением. Приятного вам пользования.

Купить 6500,00 
Сразу после оплаты Вы сможете скачать работу и мы вышлем дополнительно файл с работой на электронную почту. Исходник программ Вы сможете отредактировать, как Вам нужно.
Комментарии (0)
Практика. Учёт успеваемости студентов (Python, Django, DRF, SQLite, React, Vite, html, css, js, bootstrap)

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегистрированые пользователи имеют возможность комментировать работы
Купить

6500,00 

Покупается впервые!
Сразу после оплаты Вы сможете скачать работу и мы вышлем дополнительно файл с работой на электронную почту. Исходник программ Вы сможете отредактировать, как Вам нужно.

Заказать через

Practice Report 43.zip
92570471
Оцени работу

рейтинг

Практика. Учёт успеваемости студентов (Python, Django, DRF, SQLite, React, Vite, html, css, js, bootstrap)
Данное приложение - это решение кейс-задачи на практику Росдистант ТГУ. Приложение реализовано в виде full-stack проекта и обладает заявленными в задании возможностями.
Категория: Образование
Стоимость: 6500,00