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

Клиенты такси (Python, Django, Bootstrap, SQLite, html, css, js)

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

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

Задание

Ваша основная задача - разработать максимально удобное и понятное приложение для учета клиентов такси и их заказов. Помните, что вы разрабатываетек веб-приложение. Язык на котором должна выполнятся разработка - Python. Фреймворки - можете выбрать любой из двух, но в идеале - Django. Для продвинутых: если желаете улучшить свой результат и максимально прокачать навыки применяйте Django REST Framework  и React.js. 

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

  • Добавление клиентов и заказов - - добавление клиентов через админку, добавление заказов через админку и форму
  • Редактирование клиентов и заказов - редактирование клиентов через админку, редактирование заказов через админку и форму
  • Удаление клиентов и заказов
  • Поиск по клиенту
  • Печать отчетов по заказа

Фрагмент программного кода

from django.shortcuts import render, redirect, get_object_or_404
from .forms import *
from .models import *
from django.contrib.auth.views import LoginView
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from django.contrib.auth import logout
from django.urls import reverse_lazy
from django.views.generic.edit import FormView

import matplotlib

from matplotlib import dates as mdates
from collections import defaultdict

matplotlib.use('Agg')
import matplotlib.pyplot as plt
from io import BytesIO
import base64


# Create your views here.


class CustomLoginView(LoginView):
    template_name = 'login.html'
    fields = '__all__'
    redirect_authenticated_user = True

    def get_success_url(self):
        return reverse_lazy('index')


class RegisterPage(FormView):
    template_name = 'register.html'
    form_class = UserCreationForm
    redirect_authenticated_user = True
    success_url = reverse_lazy('index')

    def form_valid(self, form):
        user = form.save()
        if user is not None:
            login(self.request, user)
        return super(RegisterPage, self).form_valid(form)

    def get(self, *args, **kwargs):
        if self.request.user.is_authenticated:
            return redirect('index')
        return super(RegisterPage, self).get(*args, **kwargs)


def logout_view(request):
    logout(request)
    return redirect('index')


def index(request):
    context = {
        'title': 'Главная страница сайта'
    }
    return render(request, 'index.html', context)


def clients(request):
    clients = Client.objects.all()
    context = {
        'clients': clients,
    }
    return render(request, 'client_list.html', context)


def add_client(request):
    if request.method == 'POST':
        form = ClientForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('client_list')
    else:
        form = ClientForm()
    return render(request, 'add_client.html', {'form': form})


def plot_order_statistics(orders):
    fig, ax = plt.subplots()

    order_date = [order.order_date for order in orders]
    order_amounts = [order.order_amount for order in orders]

    # Группировка данных по дате, если это необходимо
    grouped_orders = defaultdict(float)

    for date, amount in zip(order_date, order_amounts):
        grouped_orders[date] += float(amount)

    # Разделение обратно на списки
    unique_dates = list(grouped_orders.keys())
    summed_amounts = list(grouped_orders.values())

    # Построение линейного графика
    ax.plot(unique_dates, summed_amounts, marker='o', color='skyblue', linestyle='-')

    plt.xlabel('Дата')
    plt.ylabel('Сумма заказа')
    plt.title('Статистика заказов')
    plt.xticks(rotation=45)

    graph_file = BytesIO()
    plt.savefig(graph_file, format='png')
    graph_file.seek(0)

    graph_base64 = base64.b64encode(graph_file.read()).decode()

    plt.close(fig)

    return graph_base64


def plot_order_statistics_2(orders):
    fig, ax = plt.subplots()

    order_date = [order.order_date for order in orders]
    order_amounts = [order.order_amount for order in orders]

    ax.bar(order_date, order_amounts, color='skyblue')
    plt.xlabel('Дата')
    plt.ylabel('Сумма заказа')
    plt.title('Статистика заказов')
    plt.xticks(rotation=45)

    graph_file = BytesIO()
    plt.savefig(graph_file, format='png')
    graph_file.seek(0)

    graph_base64_2 = base64.b64encode(graph_file.read()).decode()

    plt.close('all')

    return graph_base64_2


def orders(request):
    orders = Order.objects.all()
    graph_base64_2 = plot_order_statistics_2(orders)
    graph_base64 = plot_order_statistics(orders)
    context = {
        'orders': orders,
        'graph_base64': graph_base64,
        'graph_base64_2': graph_base64_2,
    }
    return render(request, 'order_list.html', context)


def add_order(request):
    if request.method == 'POST':
        form = OrderForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('order_list')
    else:
        form = OrderForm()
    return render(request, 'add_order.html', {'form': form})


def search_orders(request):
    client = request.GET.get('client')
    if client:
        orders = Order.objects.filter(client__name__icontains=client)
        header = f"Search results for '{client}'"
    else:
        orders = Order.objects.all()
        header = "All Orders"

    graph_base64_2 = plot_order_statistics_2(orders)
    graph_base64 = plot_order_statistics(orders)

    context = {
        'orders': orders,
        'header': header,
        'graph_base64': graph_base64,
        'graph_base64_2': graph_base64_2,
    }
    return render(request, 'order_list.html', context)


def print_orders(request):
    orders = Order.objects.all()
    return render(request, 'order_list.html', {'orders': orders})


def edit_order(request, pk):
    order = get_object_or_404(Order, pk=pk)

    if request.method == "POST":
        form = OrderForm(request.POST, instance=order)
        if form.is_valid():
            form.save()
            return redirect("order_list")

    else:
        form = OrderForm(instance=order)
        context = {
            'form': form,
            'header': 'Редактировать заказ',
        }

        return render(request, 'edit_order.html', context)


def delete_order(request, pk):
    orders = get_object_or_404(Order, pk=pk)
    orders.delete()
    return redirect("order_list")

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

Для эффективной работы с приложением вам потребуется: 

  •  редактор кода VS Code - скачать можно тут - https://code.visualstudio.com/download или PyCharm Community - https://www.jetbrains.com/ru-ru/pycharm/download/?section=windows
  • интерпретатор языка Python, скачать можно тут - https://www.python.org/downloads/  Рнкомендуемая версия - 3.12.3 
  • После установки всего выше описанного, настройте VS Code  для работы с Python установив необходимые расширения (см. инструкцию - https://youtu.be/j5e5gwZgMH8) .
  • Переходите в директорию с проектом - в терминале вводите cd TaxiApp и затем python manage.py runserver
  • Запускаете приложение и пользуетесь. Также вы можете самостоятельно выложить проект на Heroku. 

Купить 2000,00 
Сразу после оплаты Вы сможете скачать работу и мы вышлем дополнительно файл с работой на электронную почту. Исходник программ Вы сможете отредактировать, как Вам нужно.
Комментарии (0)

/ /

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

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

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

2000,00 

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

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

Клиенты такси.rar
36453381
Оцени работу

рейтинг

Клиенты такси (Python, Django, Bootstrap, SQLite, html, css, js)
Клиенты такси - это приложение реализованное с целью автоматизации и ускорения работы такси. Предприятие позволяет вести учет клиентов и их заказов. Приложение обладает базовым функционалом и удобным интерфейсом.
Категория: Образование
Стоимость: 2000,00