ПРОЕКТИРОВАНИЕ СТРУКТУРЫ И КОМПОНЕНТОВ ПРОГРАММНОГО ПРОДУКТА

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 39 39 страниц
  • 10 + 10 источников
  • Добавлена 30.08.2023
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
ВВЕДЕНИЕ 2
1 АНАЛИЗ ТЕХНИЧЕСКИХ ТРЕБОВАНИЙ 3
1.1 Анализ задания и выбор технологии, языка и среды разработки 3
1.2 Анализ технологий разработки портала для поиска работы 13
2 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ И КОМПОНЕНТОВ ПРОГРАММНОГО ПРОДУКТА………………………………………………………………………22
2.1 Проектирование алгоритма работы приложения 22
2.2 Разработка программной структуры приложения 23
2.3 Реализация приложения 26
3 ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ 29
ЗАКЛЮЧЕНИЕ 32
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 33
ПРИЛОЖЕНИЕ 34
Фрагмент для ознакомления

Он предоставляет пользователю графический интерфейс для удобной навигации по списку баз данных.Поддерживает широкий спектр баз данных и соединений.Он поставляется с различными темами, которые можно легко изменить.Представление данных в виде диаграмм отношений Entity.Поддерживает подсветку синтаксиса и автозаполнение для запросов SQL.Редактор SQL, который используется для создания, запуска и редактирования запросов SQL.Импорт, экспорт и резервное копирование данных.Поддерживает несколько языков программирования, таких как английский, немецкий, китайский и т. д.Контроль доступа/разрешения.Миграция различных данных и схем.Используем базу sqlite3. После создания базы данных создадим таблицы, представленные ниже на диаграмме таблиц (Рисунок 3).Рисунок 3 Диаграмма таблиц веб-портала поиска работыРассмотримназначениетаблиц:"auth_user" – хранит данные о пользователе, такие как логин, пароль, имя, почта и др.“candidates_profile” – данныеосоискателях, включая резюме, год получения образования, желаемая работа, данные о расположении соискателя и другие.“recruiters_job” – данныеовакансиях, такие как компания, расположение компании, описание, дата размещения, тип предлагаемой работы, требуемые знания и навыки.“account_emailaddress”и “account_emailconfirmation” – вспомогательныетаблицыдля хранения данных о почте и ее верификации.Ряд таблицначинающихся на “django_” – служебные таблицы, созданные при создании приложения на основе Djangoфреймворка.Ряд таблицначинающихся на “social_” –таблицы, созданные для хранения данных о социальных сетях, через которые пользователь может выполнить регистрацию.2.3Реализация приложенияРазработаем дизайн главной страницы сайта, включает такие элементы меню как Поиск Работы, Настройки профиля, Получить подходящие вакансии, Рекрутеры/работодатели(для получения списка работодателей). Разработанный дизайн представлен на рисунке 4.Рисунок 4 Главная страница сайтаВнизу страницы представлены данные о нашем портале, который было решено назвать «JobOffer».Рисунок 5 Главная страница сайтаПосле выбора поиска работы должно открываться следующее окно:Рисунок 6 Выдача списка имеющихся вакансийДля создания форм было решено использовать django-crispy-forms-приложение, позволяющее работать с формами Django, а также отображать их без написания лишнего кода и с минимальными установками, что очень упрощает работу. После того, как данное приложение было установлено, его необходимо подключить к форме и в установленные приложения.Хотя использование django-crispy-formsзначительно упростило написание форм и создание удобного пользовательского интерфейса, возникли трудности с локализацией на русский язык, что является направлением улучшения в следующих версиях приложения веб-портала для поиска работы.3ТЕСТИРОВАНИЕПРИЛОЖЕНИЯТестирование приложений – это проверка готового продукта на работоспособность. Данный этап разработки необходим для выявления багов, уязвимостей, проблем с дизайном и интерфейсом. Для проверки работоспособности выполним размещение вакансии:Рисунок 7 Добавление вакансииПосле заполнения всех полей, нажмем кнопку «Разместить вакансию»Рисунок 8 Завершение создания вакансииРисунок 9 Просмотр размещенных пользователем вакансий Выйдем из системы и выполним поиск вакансий по ключевому слову «SQL»:Рисунок 10 Окно поиска вакансииРезультат поиска приведен ниже на рисунке 11Рисунок 11 Результаты поиска вакансий по ключевому словуЗАКЛЮЧЕНИЕВ первой главе был произведён анализ задания, выполнен выбор технологии, языка и среды разработки. В результате для применения в данной работевыбираются следующее технологии и методы:Python,Djangoframework, среда программирования VSCode, база данных sqlite.Во второй главе были проанализированы требования к приложению и предложена структура, разработаны схемы и алгоритмы работы отдельных модулей. Также предложены решения по дизайну основной страницы приложения, а также отдельных функциональных блоков (регистрация, размещение вакансий, поиск работы и т.д).В третьей главе было выполнено тестирование приложения.По результатам тестирования приложение выполняет функции поставленные в задании на разработку. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВЛучано Рамальо Python. К вершинам мастерства. – М.: ДМК Пресс, 2016. – 768 с.Лутц, М. Программирование на Python. Т. 1 / М. Лутц. - М.: Символ, 2016. - 992 c.Доусон М. Программируем на Python Питер 2022. – 416с.Любанович Б. Простой Python. Современный стиль программирования Питер. 2022. - 592 с.How to Build Responsive Web Apps with Spring Boot and React: A Step-by-Step Guide.URL: https://reflectoring.io/build-responsive-web-apps-with-springboot-and-react-tutorial/Top 10 reasons to choose python web development for your next project. URL:https://www.zenesys.com/10-reasons-to-choose-python-web-development-for-your-next-projectBuildajobsearchportalwithdjango URL: https://towardsdatascience.com/build-a-job-search-portal-with-django-overview-part-1-bec74d3b6f4eDjango Project Structure and File Structure URL: https://techvidvan.com/tutorials/django-project-structure-layout/Create an Online Job Portal Project in Python Django URL: https://techvidvan.com/tutorials/online-job-portal-python-django/Installing django-crispy-forms 1.14.0 URL: https://django-crispy-forms.readthedocs.io/en/1.11.1/install.html#template-packsПРИЛОЖЕНИЕФайл views.pyfrom django.shortcuts import render, redirect, get_object_or_404from .models import Job, Applicants, Selectedfrom candidates.models import Profile, Skillfrom .forms import NewJobFormfrom django.contrib.auth.decorators import login_requiredfrom django.conf import settingsfrom django.http import HttpResponseRedirectfrom django.contrib.auth.models import Userfrom django.contrib import messagesfrom django.views.generic import UpdateViewfrom django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixinfrom django.core.paginator import Paginatordef rec_details(request): context = { 'rec_home_page': "active", 'rec_navbar': 1, } return render(request, 'recruiters/details.html', context)@login_requireddef add_job(request): user = request.user if request.method == "POST": form = NewJobForm(request.POST) if form.is_valid(): data = form.save(commit=False) data.recruiter = user data.save() return redirect('job-list') else: form = NewJobForm() context = { 'add_job_page': "active", 'form': form, 'rec_navbar': 1, } return render(request, 'recruiters/add_job.html', context)@login_requireddef edit_job(request, slug): user = request.user job = get_object_or_404(Job, slug=slug) if request.method == "POST": form = NewJobForm(request.POST, instance=job) if form.is_valid(): data = form.save(commit=False) data.save() return redirect('add-job-detail', slug) else: form = NewJobForm(instance=job) context = { 'form': form, 'rec_navbar': 1, 'job': job, } return render(request, 'recruiters/edit_job.html', context)@login_requireddef job_detail(request, slug): job = get_object_or_404(Job, slug=slug) context = { 'job': job, 'rec_navbar': 1, } return render(request, 'recruiters/job_detail.html', context)@login_requireddef all_jobs(request): jobs = Job.objects.filter(recruiter=request.user).order_by('-date_posted') paginator = Paginator(jobs, 20) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) context = { 'manage_jobs_page': "active", 'jobs': page_obj, 'rec_navbar': 1, } return render(request, 'recruiters/job_posts.html', context)@login_requireddef search_candidates(request): profile_list = Profile.objects.all() profiles = [] for profile in profile_list: if profile.resume and profile.user != request.user: profiles.append(profile) rec1 = request.GET.get('r') rec2 = request.GET.get('s') if rec1 == None: li1 = Profile.objects.all() else: li1 = Profile.objects.filter(location__icontains=rec1) if rec2 == None: li2 = Profile.objects.all() else: li2 = Profile.objects.filter(looking_for__icontains=rec2) final = [] profiles_final = [] for i in li1: if i in li2: final.append(i) for i in final: if i in profiles: profiles_final.append(i) paginator = Paginator(profiles_final, 20) page_number = request.GET.get('page') page_obj = paginator.get_page(page_number) context = { 'search_candidates_page': "active", 'rec_navbar': 1, 'profiles': page_obj, } return render(request, 'recruiters/candidate_search.html', context)@login_requireddef job_candidate_search(request, slug): job = get_object_or_404(Job, slug=slug) relevant_candidates = [] common = [] applicants = Profile.objects.filter(looking_for=job.job_type) job_skills = [] skills = str(job.skills_req).split(",") for skill in skills: job_skills.append(skill.strip().lower()) for applicant in applicants: user = applicant.user skill_list = list(Skill.objects.filter(user=user)) skills = [] for i in skill_list: skills.append(i.skill.lower()) common_skills = list(set(job_skills) & set(skills)) if (len(common_skills) != 0 and len(common_skills) >= len(job_skills)//2): relevant_candidates.append(applicant) common.append(len(common_skills)) objects = zip(relevant_candidates, common) objects = sorted(objects, key=lambda t: t[1], reverse=True) objects = objects[:100] context = { 'rec_navbar': 1, 'job': job, 'objects': objects, 'job_skills': len(job_skills), 'relevant': len(relevant_candidates), } return render(request, 'recruiters/job_candidate_search.html', context)@login_requireddef applicant_list(request, slug): job = get_object_or_404(Job, slug=slug) applicants = Applicants.objects.filter(job=job).order_by('date_posted') profiles = [] for applicant in applicants: profile = Profile.objects.filter(user=applicant.applicant).first() profiles.append(profile) context = { 'rec_navbar': 1, 'profiles': profiles, 'job': job, } return render(request, 'recruiters/applicant_list.html', context)@login_requireddef selected_list(request, slug): job = get_object_or_404(Job, slug=slug) selected = Selected.objects.filter(job=job).order_by('date_posted') profiles = [] for applicant in selected: profile = Profile.objects.filter(user=applicant.applicant).first() profiles.append(profile) context = { 'rec_navbar': 1, 'profiles': profiles, 'job': job, } return render(request, 'recruiters/selected_list.html', context)@login_requireddef select_applicant(request, can_id, job_id): job = get_object_or_404(Job, slug=job_id) profile = get_object_or_404(Profile, slug=can_id) user = profile.user selected, created = Selected.objects.get_or_create(job=job, applicant=user) applicant = Applicants.objects.filter(job=job, applicant=user).first() applicant.delete() return HttpResponseRedirect('/hiring/job/{}/applicants'.format(job.slug))@login_requireddef remove_applicant(request, can_id, job_id): job = get_object_or_404(Job, slug=job_id) profile = get_object_or_404(Profile, slug=can_id) user = profile.user applicant = Applicants.objects.filter(job=job, applicant=user).first() applicant.delete() return HttpResponseRedirect('/hiring/job/{}/applicants'.format(job.slug))Файл urls.pyfrom django.urls import path, includefrom . import viewsurlpatterns = [ path('', views.rec_details, name='detail-recruiters'), path('job/add', views.add_job, name='add-job'), path('job//edit/', views.edit_job, name='edit-job-post'), path('job/', views.job_detail, name='add-job-detail'), path('jobs/', views.all_jobs, name='job-list'), path('candidate/search/', views.search_candidates, name='search-candidates'), path('job//search/', views.job_candidate_search, name='job-candidate-search'), path('job//applicants', views.applicant_list, name='applicant-list'), path('job//selected', views.selected_list, name='selected-list'), path('job//select-applicant//', views.select_applicant, name='select-applicant'), path('job/>/remove-applicant//', views.remove_applicant, name='remove-applicant'),]

1. Лучано Рамальо Python. К вершинам мастерства. – М.: ДМК Пресс, 2016. – 768 с.
2. Лутц, М. Программирование на Python. Т. 1 / М. Лутц. - М.: Символ, 2016. - 992 c.
3. Доусон М. Программируем на Python Питер 2022. – 416 с.
4. Любанович Б. Простой Python. Современный стиль программирования Питер. 2022. - 592 с.
5. How to Build Responsive Web Apps with Spring Boot and React: A Step-by-Step Guide. URL: https://reflectoring.io/build-responsive-web-apps-with-springboot-and-react-tutorial/
6. Top 10 reasons to choose python web development for your next project. URL:https://www.zenesys.com/10-reasons-to-choose-python-web-development-for-your-next-project
7. Build a job search portal with django URL: https://towardsdatascience.com/build-a-job-search-portal-with-django-overview-part-1-bec74d3b6f4e
8. Django Project Structure and File Structure URL: https://techvidvan.com/tutorials/django-project-structure-layout/
9. Create an Online Job Portal Project in Python Django URL: https://techvidvan.com/tutorials/online-job-portal-python-django/
10. Installing django-crispy-forms 1.14.0 URL: https://django-crispy-forms.readthedocs.io/en/1.11.1/install.html#template-packs