Проектирование информационной системы стоматологии

Разработка схем бизнес-процессов, алгоритмов и кода, экранных форм. Логическая и физическая модели программного обеспечения. Создание базы данных в среде SQLite. Проектирование пользовательского интерфейса. Формирование диаграмм активностей и Use Case.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.02.2023
Размер файла 2,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Вятский государственный университет»

Колледж ВятГУ

КУРСОВОЙ ПРОЕКТ

По междисциплинарному курсу МДК 05.01 Проектирование и дизайн информационных систем

Тема: Проектирование информационной системы стоматологии

Студентки Маныловой Полины Максимовны

Основная профессиональная образовательная программа по специальности 09.02.07 Информационные системы и программирование

Киров, 2022

Реферат

Объектом и предметом исследования является программа с внедрением баз данных.

Цель работы - проектирование информационной системы.

Поставлена задача разработать информационную систему, техническое задание, программу методики для информационной системы выбранного объекта исследования.

В процессе работы были проведены следующие исследования: 1) обзор предметной области и сравнительный анализ; 2) написание технического задания, состоящего из: назначения разработки, функциональных характеристик, требований к составу и параметрам технических средств; 3) разработка схем бизнес-процессов с их описанием; 4) разработка схем алгоритмов и кода на естественном языке; 5) проектирование прототипа пользовательского интерфейса с описанием.

Областью возможного практического применения являются: все сферы услуг, где требуется осуществлять запись людей на какое-то время для того, чтобы не тратить много времени на очередь. Это может применяться в таких сферах как: парикмахерская, тренажерный зал, общественный бассейн и т.д.

Содержание

Введение

1. Организационная структура стоматологической клиники

1.1 Среда разработки Python

1.2 Описание предметной области

1.3 Назначение и связи подразделений

1.4 Анализ подразделений

2. Техническое задание

2.1 Наименование программы

2.2 Краткая характеристика области применения программы

2.3 Эксплуатационное назначение программы

2.4 Требования к программе

2.5 Требования к функциональным характеристикам

2.6 Требования к пользователю

2.7 Основания для разработки

2.8 Стадии и этапы разработки

3. Схемы бизнес-процессов и их описание

3.1 Функциональный анализ ПО

3.2 Логическая модель ПО

3.3 Физическая модель ПО

3.4 Формирование диаграммы Use Case

3.5 Формирование схемы алгоритма функционирования АРМ ИС

3.6 Формирование диаграммы активностей

4. Создание приложения

4.1 Постановка задачи

4.2 Разработка и описание алгоритма решения

4.3 Разработка экранных форм

Заключение

Список использованных источников

Введение

В процессе предпроектного обследования стоматологической клиники изучаются основные направления деятельности, оказываемые услуги и организационная структура стоматологической клиники. Определяются функции подразделений, существующие информационные взаимосвязи между подразделениями, внутренний и внешний документооборот.

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

В данной работе рассматривали систему, основанную для работы с проектом, связанной с медициной - стоматология.

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

Данная система должна будет включать две роли: администратора и пользователя. Администратор имеет право просматривать список пациентов, которые имеют запись в стоматологию, также он может заносить информацию о новых стоматологах и услугах добавленные в этой стоматологии. Пользователю предоставляются вся информация о стоматологии: список врачей, список услуг и их примерных цен, также есть возможность записи на прием. Основной функцией данного приложения будет являться возможность пользователя записаться на прием к стоматологу.

Целью выполнения данной курсовой работы является разработка системы «Стоматология» и соответствующих ей базы данных.

Для достижения поставленной цели в курсовой работе предусмотрено решение следующих задач:

- Изучение теоретических аспектов работы стоматологии;

- Разработка блок-схемы программы;

- Разработка программы в среде PyCharm на языке программирования Python.

1. Организационная структура стоматологической клиники

1.1 Среда разработки Python

Python - это язык программирования общего назначения, который широко применяется в различных областях: от создания банальных веб-страниц до систем управления роверами на других планетах.

PyCharm - комплексная среда разработки на Python, включающая в себя полный набор инструментов для работы с языком. PyCharm предлагает разработчику почти все, что требуется от эффективной Python IDE, включая функцию модульного тестирования, выделения и автоматического завершения.

Достоинствами данного языка программирования являются:

- Легкий синтаксис языка;

- Простая организация проектов;

- Достаточно понятный интерфейс;

- Очень быстрый;

- Включает в себя множество библиотек, которые могут упростить и ускорить работу.

1.2 Описание предметной области

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

Данная курсовая работа представляет собой проект, основанный на создании IT-системы для стоматологии.

Данная система имеет базу данных о пациентах, услугах, предоставляемых этой стоматологией и списком врачей, которые эти услуги осуществляют. Для организации базы данных стоматологии выбран способ хранения данных в виде таблиц в СУБД SQLite.

Пациент, попадая в данное приложение может просмотреть список врачей и услуги, которая предлагает данная стоматология, а затем записаться на прием по номеру СНИЛСа, выбрав врача и подходящее ему время. Если же пациент уже был в этой стоматологии и знает, что ему конкретно нужно, то он сразу может осуществить запись к своему врача введя свой номер СНИЛСа, выбрав свободное и удобное для себя время. У приложения есть отдельные страницы, просматривать которые имеет право только администратор, с помощью запуска отдельного приложения. Данные страницы позволяют просматривать всю информацию о занесенных в базу пациентах, также администратор имеет право вносить данные о новых врачах и услугах стоматологии.

После записи пациент может пройти лечение в стоматологии, оплата происходит непосредственно при заключении договора - очно.

1.3 Назначение и связи подразделений

ѕ Главный врач руководит управлением стоматологией и персоналом, и деятельностью стоматологической клиники, неся всю полноту ответственности за последствия принимаемых решений и результаты деятельности. Организует работу и взаимодействие всех структурных подразделений, направляет их деятельность на развитие и совершенствование работы клиники, повышение эффективности работы, качества и конкурентоспособности клиники.

ѕ Медицинский регистратор осуществляет прием пациентов в регистратуре и затем отправляет пациента к соответствующему специалисту, выяснив его проблему.

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

ѕ Ассистент стоматолога подготавливает стоматологическое оборудование к работе. И также ассистент стоматолога помогает стоматологу осуществлять лечение пациентов.

ѕ Бухгалтер занимается ведением первичного бухгалтерского учета, начислением заработной платы, ведением налогового и управленческого учета. Считает цены за прем пациентов и создает квитанции для их оплаты. Составляет и сдаёт налоговую отчетность в фонды РФ и налоговую инспекцию.

ѕ Инженер по медицинской технике осуществляет контроль исправности медицинской техники и инструментов, правильности эксплуатации, техники безопасности. Также, при поломке заказывает новое оборудование для стоматологической клиники.

ѕ Фармацевтический специалист осуществляет контроль наличия и годных к использованию лечащих препаратов и правильности их эксплуатации. Также, при отсутствии их на складе, заказывает лекарственные препараты для стоматологической клиники.

ѕ Охранник занимается охраной стоматологической клиники и следит в ней за соблюдением порядка.

ѕ Менеджер по уборке следит за чистотой в стоматологической клинике, обрабатывает и дезинфицирует кабинеты, где ведется лечение пациентов.

ѕ Гардеробщица принимает от посетителей верхней одежды и личных вещей и выдача им жетонов. Также гардеробщица должна поддерживать чистоту и порядок в гардеробе.

Программное обеспечение каждого рабочего места представляет собой программный комплекс, разработанный независимо от других и работающий автономно. Программы написаны на языке Python в среде разработки PyCharm, базы данных написаны в SQLite. Сопровождением программного обеспечения занимается IT-отдел.

Рисунок 1 - Структурная схема стоматологической клиники

1.4 Анализ подразделений

Лечебное отделение осуществляет диагностику, оказывает лечебную и неотложную помощь при заболеваниях зубов, установке зубных имплантов и протезов челюсти.

Отдел снабжения. Осуществляет контроль наличия и годных к использованию оборудования, инструментов и лечащих препаратов, и правильности их эксплуатации.

Инженерный отдел обеспечивает осуществляет контроль исправности медицинской техники и инструментов, правильности эксплуатации, техники безопасности.

Отдел финансов собирает всю документарную первичную информацию и на основании её ведет бухгалтерский учет хозяйственно-финансовой деятельности на предприятии.

Служба управления. Следит за порядком и процессом управления приема пациентов и нахождения их в стоматологической клинике.

2. Техническое задание

2.1 Наименование программы

Наименование разрабатываемой программы: Стоматология

2.2 Краткая характеристика области применения программы

Программа предназначена для обеспечения работы стоматологии. Программа позволяет хранить информацию о пациентах и врачах, также услугах, которые предоставляет стоматология в базе данных, обеспечивает возможность добавления новых пациентов по индивидуальному номера СНИЛСа и записи пациентов на приём.

2.3 Эксплуатационное назначение программы

Программа должна эксплуатироваться как десктопное приложение и предназначена для работы стоматологии и пользования ею пациентов и сотрудников.

2.4 Требования к программе

Описание программы: приложение открывается с помощью среды разработки PyCharm, запуская соответствующий код. Программа содержит несколько оконных форм. На первой форме находится главное меню, где пользователь может увидеть название стоматологии и перейти в нужный ему раздел, нажав соответствующую кнопку. В меню можно перейти к разделам «Услуги», «Врачи» или «Запись на приём». Возможен просмотр услуг, предоставляемые данной стоматологией, также можно посмотреть списки врачей, которые работают в стоматологии и специалистами какой отрасли они являются.

2.5 Требования к функциональным характеристикам

Программа должна обеспечивать выполнение следующий функций:

- просмотр информации о врачах стоматологии;

- просмотр информации о услугах предоставленных стоматологией и их цену;

- возможность осуществлять запись на прием;

- возможность добавлять нового пациента по его индивидуальному номеру СНИЛСа;

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

2.6 Требования к пользователю

Пользователь должен иметь следующие навыки:

Навыки использования персонального компьютера;

Навыки управления «мышью» и клавиатурой.

2.7 Основания для разработки

Основанием для разработки является задание, полученное в рамках дисциплины «Проектирование и дизайн ИС», выданное преподавателем Мамаевой Екатериной Александровной.

2.8 Стадии и этапы разработки

Разработка проводилась в три стадии:

- составление технического задания;

- создание технического проекта;

- написание программы.

На стадии «Составление техническое задание» происходит этап разработки, согласования и утверждения настоящего технического задания.

На стадии «Создание технического проекта» происходит разработка программы, разработка программной документации и испытания программы.

На стадии «Создание программы» происходит подготовка и передача программы на проверку.

3. Схемы бизнес-процессов и их описание

3.1 Функциональный анализ ПО

На рисунке 2 изображена функциональная модель программного обеспечения для деятельности стоматологической клиники.

Диаграмма, изображенная на рисунке 2, отражает связь процессов в системе. На схеме отражены входные данные и полученные результаты.

Входными данными являются звонки пациентов. Для работы с приложением необходимы данные о клиентах.

Результатом данного проекта является регистрация вылеченного клиента в информационной системе.

Рисунок 2 - Контекстная диаграмма стоматологической клиники

Внешней входящей информацией являются:

- Запись пациентов. Запись пациентов осуществляется в приложении. Для этого нужно запустить приложение и в главном меню перейти по кнопке «Запись». Если требуется ознакомится с услугами стоматологии, то пользователю нужно перейти на главном экране по кнопке «Услуги». Также пользователь может ознакомиться с врачами, которые ведут прием в стоматологии. Также помимо информации о врачах, пользователь сможет там увидеть по какой специализации он работает. Далее, когда пользователь перешел по кнопке «Запись», то он попадет на страничку, где ему потребуется ввести свой номер СНИЛСа, так как номер СНИЛСа -- это ключевое поле в базе данных «Пациенты», то он является у всех индивидуальным и никаких повторений, и проблем по записи не возникнет. Затем, когда пользователь ввел номер СНИЛСа, он попадет на страницу, где будут предложены свободные варианты записи к врачам, он должен будет выбрать окошко, которое находится в пересечении врача, к которому он хочет пойти и времени, которое он выберет.

Управляющим воздействием будут являться:

- Правила и процедуры. Правилами для записи на прием будет являться только то, что один пациент может быть записан только на одно время и только к одному врачу, если пациенту нужно будет перейти к другому специалисту в этой стоматологии, то он может это сделать только по направлению врача, который его лечил. Также если пациенту потребуется специалист, которого нет в этой стоматологии, то его врач направит в другую стоматологию, где нужный специалист имеется.

Механизмом управления будут являться:

- Бухгалтерская система.

Внешней исходящей информацией будет являться:

- Вылеченный пациент.

Для разбиения сложного процесса на составляющие подфункции применяется декомпозиция.

Диаграмма декомпозиции, предназначенная для детализации функций и описывания каждой подсистемы, представлена на рисунке.

Диаграмма декомпозиции, представляет контекстную функцию, разложенную на 3 составляющих более простых функций.

1. Проверка пациента в базе.

2. Добавление записи о приёме пациента.

3. Оказание услуги.

На рисунке 3 показан результат декомпозиции процесса оказания услуги.

Рисунок 3 - Результат процесса декомпозиции процесса оказания услуги

Для наглядного отображения течения информации в пределах процесса была создана DFD диаграмма, она изображена на рисунке 4.

Данная диаграмма отображает занесение необходимой информации из приложения в базу данных.

Занесение информации в базу данных происходит после введения индивидуального номера СНИЛСа пациента и записи его на прием, затем проверяется свободно ли выбранное время у выбранного пациентом врача. Проверка делается для того, чтобы не случилось так, что несколько пациентов попали в одно и то же время к одному и тому же врачу. После этого информация о приеме сохраняется в базе данных с учетом номера и ФИО врача, его специализации и номером СНИЛСа пациента.

Рисунок 4 - Диаграмма DFD

3.2 Логическая модель ПО

Логическая модель данных является визуальным графическим представлением структур данных, их атрибутов и связей. Логическая модель представляет данные таким образом, чтобы они легко воспринимались.

Основными компонентами логической модели являются:

- сущности;

- атрибуты сущности;

- связи между сущностями.

Для описания мы используем нотацию IDEF1X, которая представляет структуру данных, описывающего предприятия. Методология IDEF1X - один из подходов к моделированию данных, основанный на концепции "сущность - связь".

Сущность в методологии IDEF1X является не зависимой, если каждый экземпляр сущности может быть однозначно идентифицирован без определения его отношений с другими сущностями, а если однозначная идентификация экземпляра сущности зависит от его отношения к другой сущности, то сущность такая называется зависимой.

Логическая модель по нотации IDEF1X представлена на рисунке 5.

Рисунок 5 - Логическая модель программного обеспечения

Описание сущности «Пациенты». В этой сущности находится информация о пациентах, которые запишутся на прием. В данной сущности ключевым полем будет являться номер СНИЛСа пациента, также здесь содержится некоторая информация о пациенте.

В следующей сущности «Стоматологи» содержится информация о стоматологах, здесь ключевым полем является код стоматолога, если говорить проще, то номер стоматолога, который ему присвоен в таблице БД.

В сущности «Специализация» содержится информация о специализациях, которые есть у докторов этой стоматологии. У каждой специализации есть свой номер и наименование, которое к нему принадлежит.

В следующей сущности «Услуги» содержится информация о услугах, которая предлагает стоматология. У них указано название услуги и примерная стоимость для того, чтобы пациент, зайдя в приложение мог примерно понимать в какую цену ему обойдется та или иная услуга.

Сущность «Прием» служит для того, чтобы в одном месте содержалась информация о приеме, на который записался пациент. Здесь будут включены номер СНИЛСа пациента, который является первичным ключом для его безошибочного определения в базе, номер и ФИО стоматолога, наименование услуги, которую он посетит и в какое время.

3.3 Физическая модель ПО

Физическая модель базы данных содержит все детали, необходимые конкретной СУБД для создания базы: наименования таблиц и столбцов, типы данных, определения первичных и внешних ключей.

Физическая модель строится на основе логической с учетом ограничений, накладываемых возможностями выбранной СУБД.

На рисунках ниже представлены физические модели программ, которые описывают таблицы, которые между собой имеют связи.

Рисунок 6 - «Стоматологи» структура таблицы

Рисунок 7 - Структура базы данных «Услуги»

Рисунок 8 - Структура базы данных «Приём»

Рисунок 9 - Структура базы данных «Пациент»

Рисунок 10 - Структура базы данных «Специализация»

3.4 Формирование диаграммы Use Case

Диаграмма «Use Case» - диаграмма вариантов использования, которая отражает отношения между актерами и прецедентами и являющаяся составной частью модели прецедентов, позволяющей описать программу на концептуальном уровне.

Она состоит из графической диаграммы, описывающей действующие лица, прецеденты, спецификации. Диаграмма вариантов использования по программному обеспечению представлена на рисунке 11.

В этой диаграмме показана связь между работниками стоматологиями и их действиями между собой. На диаграмме можно увидеть, что пациент записывается на прием и он может это сделать в приложении или же придя в стоматологию в регистратуре, если это человек, у которого нет навыков работы с ПК чтобы использовать приложение. Пациент записывается к нужному врачу и к определенному времени.

Рисунок 11 - Диаграмма Use Case для оказания услуги

Затем, после записи пациент подходит на приём и проходит лечение, которое осуществляет стоматолог.

Потом после прохождения лечения стоматолог передает информацию о проделанных услугах и расходных материалов бухгалтеру для расчета стоимости посещения стоматологии. Далее, бухгалтер передает информацию медицинскому регистратору, который выписывает квитанцию для оплаты и сообщает о ней пациенту. И затем задача пациента оплатить приём, оплата может произвестись только в самой стоматологии наличным или безналичным расчетом.

Также помимо всех вышеперечисленных действий есть функции, которые выполняют сотрудники стоматологии второго плана, они тоже обозначены на диаграмме. Такие как: ассистент стоматолога и фармацевт.

Ассистент стоматолога осуществляет роль помощника стоматолога, который подает инструменты для стоматолога в случае необходимости. Ассистент нужен для того, чтобы стоматолог при поиске нужного инструмента и попытке его взять не марал руки и случайно не занес инфекцию пациенту, так как в любом медицинском учреждении при любой процедуре должна сохраняться стерильность. Также ассистент сообщает фармацевту о заканчивающихся инструментах и лекарственных препаратах у стоматолога. И задача фармацевта заключается в том, чтобы заказывать и выкупать все необходимое для лечения.

3.5 Формирование схемы алгоритма функционирования АРМ ИС

Линейность алгоритма заключается в том, что все действия в основном модуле программы происходят последовательно. Ветвящийся алгоритм необходим для того, чтобы выбирать необходимые данные из файлов. Это значит, что при нажатии определённой кнопки следует процесс, который был описан в событии по нажатию каждой кнопки.

Схема алгоритма функционирования АРМ ИС бизнес-процесса представлена на рисунке 12.

В этой схеме показано функционирование бизнес-процесса, который осуществляется в приложении поэтапно и друг за другом.

3.6 Формирование диаграммы активностей

Диаграмма активностей приложения отображает функции ее участников, то есть самих Клиентов и Сотрудников, а также их взаимосвязь с базой данных. Диаграмма активностей представлена на рисунке 13.

Рисунок 12 - Схема алгоритма функционирования АРМ ИС

Рисунок 13 - Диаграмма активностей

4. Создание приложения

4.1 Постановка задачи

В рамках курсовой работы необходимо разработать базу данных стоматологии. В базу данных должна входить информация о пациентах: номер СНИЛСа пациента. Также в базе данных содержится информация о врачах: Фамилия, Имя, Отчество врача, его специализация и номер кабинета, в котором он работает. Также еще содержится информация о услугах: Наименование услуги и его цена. При работе с системой пользователь должен иметь возможность решать следующие задачи:

- Формирование данных о пациентах;

- Добавление данных о пациентах и добавление информации о новых врачах и услугах, если они появляются со временем в стоматологии;

- Также форматирование информации о врачах: добавлении новой специализации у врача или редактирование в случае смены фамилии.

- Удаление какой-либо услуги или какого-либо врача в случае увольнения или выхода на пенсию.

Пользователями системы является администратор организации «Стоматология» и клиенты данного приложения. В возможности администратора организации входит:

- Просмотр информации о записанных клиентах приложения;

- Просмотр данных о услугах стоматологии;

- Просмотр данных о врачах стоматологии;

- Добавление и удаление записей о услугах и врачах в базе данных.

Возможности посетителей сайта заключаются в:

- Просмотр списка врачей стоматологии;

- Просмотр услуг предлагаемые стоматологией и их цену;

- Запись на соответствующее время к желаемому врачу по номеру собственного СНИЛСа.

4.2 Разработка и описание алгоритма решения

Для хранения данных о врачах и услуг создана база данных в среде SQLite. База данных хранится в одном каталоге с исполняемым файлом программы в виде файла формата .db.

Рисунок 14 - База данных врачей

Рисунок 15 - База данных услуг

Рисунок 16 - База данных записанных пациентов

Процесс работы приложения указан в блок-схеме на рисунке 17.

Рисунок 17 - Блок-схема процесса работы приложения

4.3 Разработка экранных форм

Первая страница приложения - это главное меню (см. рис. 18).

Рисунок 18 - Экранная форма «Главное меню»

Пользователь, являющийся пациентом, должен перед посещением стоматологии изучить услуги и врачей для того, чтобы при записи точно понимать к кому он записывается и не ошибиться, также для того, чтобы было в бедующем было проще сориентировать по цене. Перейдя для этого по кнопке «Услуги» на главном экране он попадет в список услуг (см. рис. 19) или если нажнем на кнопку «Врачи» перейдет к списку врачей и сможет изучить их ФИО и специализацию стоматологов и в какой кабинете они работают (см. рис. 20).

После просмотра всех видов услуг, перейдя по кнопке «Запись», которая расположена в главном меню, пользователь перейдет в окошко, где он сможет ввести номер СНИЛСа для записи на приём. (см. рис. 21).

Рисунок 19 - Экранная форма «Услуги»

Рисунок 20 - Экранная форма «Врачи»

Рисунок 21 - Экранная форма «Введения СНИЛСа пациента»

После того, как пациент ввел номер СНИЛСа он попадет в окошко, где сможет записаться на прием, выбрав ячейку с советующим временем в столбике и с соответствующим доктором в строке (см. рис. 22). После того, как было выбрано время, нужно нажать на кнопку справа «Записаться».

Рисунок 22 - Экранная форма «Записи пациента»

И после того, как запись пройдет, выведется на это же экране сообщение с текстом «Запись прошла успешно» (см. рис. 23).

Рисунок 23 - Сообщение на экране о успешной записи

После записи пациент может выходить из приложения и подходить в стоматологию к советующему записи времени.

Также в приложении существует программа для администратора, где он сможет просмотреть какой пациент записан какому-то врачу и в какое время. Для более удобного поиска пациентов в приложении для администратора существует два запроса, которые помогают отсортировать пациентов. Первый запрос помогает выбрать пациентов, которые записаны с какого-то определенного времени по какое-то время, нажав на кнопку «По времени». Второй запрос помогает найти пациентов, которые записаны к определенному врачу с помощью кнопки «По врачу» (см. рис. 24).

Рисунок 24 - Сортировка в приложении администратора

Нажав, на кнопку «По времени» выйдет окошко, где нужно будет ввести время с какого по какое нужно будет найти пациента (см. рис. 25).

Рисунок 25 - Ввод времени для сортировки

А после нажатия на кнопку «ОК», выйдет список номера СНИЛСа пациентов, которые записаны на это время и какому врачу (см. рис 26).

Рисунок 26 - Вывод списка пациентов после сортировки

А если нажать на кнопку «По врачу», то нужно ввести ФИО стоматолога, для которого требуется посмотреть записи пациентов (см. рис. 27).

Рисунок 27 - Ввод ФИО стоматолога

После того, как ввели ФИО стоматолога, на экран выйдет список, где отображается номер СНИЛСа записанного пациента, ФИО стоматолога и время, на которое записался пациент (см. рис. 28).

Рисунок 28 - Вывод списка найденных пациентов, которые записаны к определенному стоматологу

программный интерфейс алгоритм диаграмма

Заключение

Результатом выполнения данной курсовой работы стала информационная система «Стоматология». Она написана на многофункциональном языке программирования - Python, в среда разработки программного обеспечения PyCharm. База данных для приложения была создана в реляционной системе управления SQLite.

В ходе выполнения курсовой работы была освоена информация по созданию и проектированию баз данных. Также были повышены навыки в создании программных приложений на языке программирования Python.

В ходе разработки программы были освоены новые функции языка программирования, такие как, подключение данных из баз данных к приложению, также была освоена работа с новыми компонентами и библиотеками.

Преимуществами языка являются:

- удобный и понятный интерфейс,

- библиотеки, включающие стандартные модули, которые осуществляют работу с файловой системой, строками, датами, функциями и так далее.

Разработанное приложение на данный момент имеет такие функции, как запись на прием пациентов по номеру СНИЛСа, просмотр имеющейся информации администратором, редактирование информации об услугах и докторах, работающих в стоматологии.

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

Список использованных источников

1. ГОСТ 34.602-89 Техническое задание на создание автоматизированной системы (пример) - Текст электронный // Корпоративные хранилища данных. Интеграция систем. Проектная документация: [сайт] - 2010.

2. Логическая модель ИС - Текст электронный // Студвуд: [сайт] - 2020. -

3. DFD - диаграммы потоков данных - Текст электронный // Инфопедия: [сайт] - 2016.

4. Проектирование USE CASE диаграммы - Текст электронный // Программные решения для бизнеса: [сайт]. - 2020.

5. Проектирование физической ER-диаграммы - Текст электронный // Lucidchart: [сайт] - 2022.

6. Руководство по SQLite - Текст электронный // Proglib: [сайт] - 2022.

7. Руководство по связыванию SQLite и Python - Текст электронный // Proglib: [сайт] - 2022.

8. Учебник по SQLite в Python - Текст электронный // digitology: [сайт] - 2022.

9. Python: работа с базой данных - Текст электронный // Хабр: [сайт] - 2022.

10. Руководско по pyqt5 - Текст электронный // pythonist: [сайт] - 2022

Приложение 1

Листинг программы

Code2.py:

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtWidgets import *

from PyQt5.QtGui import *

from PyQt5.QtCore import *

import sys

import sqlite3

import Config

import admin

def cr_tab(w):

w.tableWidget.setColumnCount(len(DB()[0]))

w.tableWidget.setRowCount(len(DB())+1)

i=0

for n in DB():

w.tableWidget.setItem(i+1, 0, QTableWidgetItem(str(DB()[i][0])))

w.tableWidget.setItem(i + 1, 1, QTableWidgetItem(DB()[i][1]))

w.tableWidget.setItem(i + 1, 2, QTableWidgetItem(DB()[i][2]))

i+=1

w.tableWidget.setItem(0, 0, QTableWidgetItem("Снилс"))

w.tableWidget.setItem(0, 1, QTableWidgetItem("Врач"))

w.tableWidget.setItem(0, 2, QTableWidgetItem("Время"))

w.tableWidget.horizontalHeader().setVisible(False)

w.tableWidget.verticalHeader().setVisible(False)

w.tableWidget.resizeColumnsToContents()

w.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

def DB():

conn = sqlite3.connect(Config.path3)

cur=conn.cursor()

cur.execute("SELECT * FROM rec;")

all_results = cur.fetchall()

return all_results

class admin (QtWidgets.QMainWindow,admin.Ui_MainWindow):

def __init__(self):

super().__init__()

self.setupUi(self)

def main():

app = QtWidgets.QApplication(sys.argv)

window = admin()

cr_tab(window)

window.show() # оказать окно

app.exec_() # и запускаем приложение

if __name__ == '__main__':

main()

CodeQT.py:

import sys # sys нужен для передачи argv в QApplication

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout,QHeaderView

import sqlite3

import Servies

import Doc

import Home

import Record as Rec

import Enter

import Config

import os

import numpy

def DB(): #считать БД услуг

conn = sqlite3.connect(Config.path1)

cur = conn.cursor()

cur.execute("SELECT * FROM servies;")

all_results = cur.fetchall()

return all_results

def DB_0(): #считать БД врачей

conn = sqlite3.connect(Config.path2)

cur = conn.cursor()

cur.execute("SELECT * FROM doctor;")

all_results = cur.fetchall()

return all_results

class Servies(QtWidgets.QMainWindow,Servies.Ui_MainWindow): #Получение UI интерфейса

def __init__(self):

super().__init__()

self.setupUi(self)

class Home(QtWidgets.QMainWindow,Home.Ui_MainWindow): #Получение UI интерфейса

def __init__(self):

super().__init__()

self.setupUi(self)

class Doc(QtWidgets.QMainWindow,Doc.Ui_MainWindow): #Получение UI интерфейса

def __init__(self):

super().__init__()

self.setupUi(self)

class Rec(QtWidgets.QMainWindow,Rec.Ui_MainWindow): #Получение UI интерфейса

def __init__(self):

super().__init__()

self.setupUi(self)

class Enter(QtWidgets.QMainWindow,Enter.Ui_MainWindow): #Получение UI интерфейса

def __init__(self):

super().__init__()

self.setupUi(self)

def Close(W1,W2): # Переключение окон программы

W1.close() #закрыть окно №1

W2.show() # показать окно №2

def Check(win,win2,snils): # Переключение окон но с проверкой на снилс

if len(win.plainTextEdit.text()) == 11:

snils.append(win.plainTextEdit.text())

Close_P(win,win2)

else:

win.label_2.setText("Неверно введёный снилс")

def Close_P(W1,W2): #Стирание введёных полей

W1.plainTextEdit.setText("")

W1.label_2.setText("")

W1.close()

W2.show()

def cr_tab(w): #Создание таблицы времени приёма

w.tableWidget.setColumnCount(14)

w.tableWidget.setRowCount(len(DB_0()) + 1)

w.tableWidget.setItem(0,0,QTableWidgetItem("Врач\Время"))

w.tableWidget.setItem(0,1,QTableWidgetItem("8.00-8.30"))

w.tableWidget.setItem(0, 2, QTableWidgetItem("8.30-9.00"))

w.tableWidget.setItem(0, 3, QTableWidgetItem("9.00-9.30"))

w.tableWidget.setItem(0, 4, QTableWidgetItem("9.30-10.00"))

w.tableWidget.setItem(0, 5, QTableWidgetItem("10.00-10.30"))

w.tableWidget.setItem(0, 6, QTableWidgetItem("10.30-11.00"))

w.tableWidget.setItem(0, 7, QTableWidgetItem("11.00-11.30"))

w.tableWidget.setItem(0, 8, QTableWidgetItem("11.30-12.00"))

w.tableWidget.setItem(0, 9, QTableWidgetItem("14.00-14.30"))

w.tableWidget.setItem(0, 10, QTableWidgetItem("14.30-15.00"))

w.tableWidget.setItem(0, 11, QTableWidgetItem("15.30-16.00"))

w.tableWidget.setItem(0, 12, QTableWidgetItem("16.00-16.30"))

w.tableWidget.setItem(0, 13, QTableWidgetItem("16.30-17.00"))

w.tableWidget.move(0, 0)

w.tableWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)

n=0

for i in DB_0(): #Заполнение врачей

w.tableWidget.setItem(n + 1, 0, QTableWidgetItem(DB_0()[n][1]))

n += 1

n=1

while n != 14: #Заполнение пустых клеток пустым символом что бы с ними можно было работать в дальнейшем

w.tableWidget.setItem(1,n, QTableWidgetItem(""))

w.tableWidget.setItem(2, n, QTableWidgetItem(""))

w.tableWidget.setItem(3, n, QTableWidgetItem(""))

w.tableWidget.setItem(4, n, QTableWidgetItem(""))

w.tableWidget.setItem(5, n, QTableWidgetItem(""))

w.tableWidget.setItem(6, n, QTableWidgetItem(""))

w.tableWidget.setItem(7, n, QTableWidgetItem(""))

w.tableWidget.setItem(8, n, QTableWidgetItem(""))

w.tableWidget.setItem(9, n, QTableWidgetItem(""))

n+=1

for i in Config.records: # Чтение данных прошлых сеансов программы и заполнение таблицы записи в соответствии с ними

w.tableWidget.setItem(int(i[0]), int(i[1]),QTableWidgetItem("занято"))

w.tableWidget.item(int(i[0]), int(i[1])).setBackground(

QtGui.QColor(141, 0, 0))

w.tableWidget.resizeColumnsToContents()

w.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

w.tableWidget.horizontalHeader().setVisible(False)

w.tableWidget.verticalHeader().setVisible(False)

def tabl(w,snils): #Проверка записи и изменение цвета ячеек

if len(Config.records)!=0:

for i in Config.records:

if w.tableWidget.currentRow() != 0 and w.tableWidget.currentColumn() !=0 and w.tableWidget.item(w.tableWidget.currentRow(),w.tableWidget.currentColumn()).text() != 'занято':

w.tableWidget.setItem(w.tableWidget.currentRow(), w.tableWidget.currentColumn(), QTableWidgetItem("занято"))

w.tableWidget.item(w.tableWidget.currentRow(), w.tableWidget.currentColumn()).setBackground(QtGui.QColor(141, 0, 0))

Config.records.append((w.tableWidget.currentRow(),w.tableWidget.currentColumn(),snils[-1]))

numpy.save("array.npy", Config.records)

w.label.setText("Запись прошла\nуспешно")

print(w.tableWidget.item(0,w.tableWidget.currentColumn()).text() )

print(w.tableWidget.item(w.tableWidget.currentRow(), 0).text() )

print(snils[-1])

conn = sqlite3.connect(Config.path3)

cur = conn.cursor()

n=[snils[-1],w.tableWidget.item(w.tableWidget.currentRow(), 0).text(),w.tableWidget.item(0,w.tableWidget.currentColumn()).text()]

cur.execute("INSERT INTO rec VALUES(?, ?, ?);", n )

conn.commit()

break

else:

w.label.setText("Это время уже\nзанято")

else:

if w.tableWidget.currentRow() != 0 and w.tableWidget.currentColumn() != 0:

w.tableWidget.setItem(w.tableWidget.currentRow(), w.tableWidget.currentColumn(), QTableWidgetItem("занято"))

w.tableWidget.item(w.tableWidget.currentRow(), w.tableWidget.currentColumn()).setBackground(QtGui.QColor(141, 0, 0))

Config.records.append((w.tableWidget.currentRow(), w.tableWidget.currentColumn(), snils[-1]))

print(w.tableWidget.item(0, w.tableWidget.currentColumn()).text())

print(w.tableWidget.item(w.tableWidget.currentRow(), 0).text())

print(snils[-1])

numpy.save("array.npy", Config.records)

conn = sqlite3.connect(Config.path3)

cur = conn.cursor()

n = [ snils[-1], w.tableWidget.item(w.tableWidget.currentRow(), 0).text(),

w.tableWidget.item(0, w.tableWidget.currentColumn()).text()]

cur.execute("INSERT INTO rec VALUES(?, ?, ?);", n)

conn.commit()

w.label.setText("Запись прошла\nуспешно")

else:

w.label.setText("Это время уже\nзанято")

def Check_2(w1,w2): # Очистка от надписи у таблицы записи при выходе назад

w1.label.setText("")

Close(w1,w2)

def main():

if os.path.exists("array.npy") == True:

Config.records = list(numpy.load("array.npy"))

app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication

window = Home() # Создаём объект класса ExampleApp

window2 = Servies()

window3 = Doc()

window4 = Rec()

window5 = Enter()

cr_tab(window4)

window2.tableWidget.setColumnCount(2)

window2.tableWidget.setRowCount(len(DB())+1)

n=0

window2.tableWidget.setItem(0,0, QTableWidgetItem("Название услуги"))

window2.tableWidget.setItem(0,1, QTableWidgetItem("Цена"))

for i in DB():

window2.tableWidget.setItem(n+1, 0, QTableWidgetItem(DB()[n][1]))

window2.tableWidget.setItem(n+1, 1, QTableWidgetItem(DB()[n][2]))

n+=1

window2.tableWidget.move(0,0)

window2.tableWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)

window2.tableWidget.resizeColumnsToContents()

window2.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

window2.tableWidget.horizontalHeader().setVisible(False)

window2.tableWidget.verticalHeader().setVisible(False)

window3.tableWidget.setColumnCount(3)

window3.tableWidget.setRowCount(len(DB_0()) + 1)

n = 0

window3.tableWidget.setItem(0, 0, QTableWidgetItem("ФИО врача"))

window3.tableWidget.setItem(0, 1, QTableWidgetItem("Специальность"))

window3.tableWidget.setItem(0, 2, QTableWidgetItem("Кабинет"))

for i in DB_0():

window3.tableWidget.setItem(n + 1, 0, QTableWidgetItem(DB_0()[n][1]))

window3.tableWidget.setItem(n + 1, 1, QTableWidgetItem(DB_0()[n][2]))

window3.tableWidget.setItem(n + 1, 2, QTableWidgetItem(DB_0()[n][3]))

n += 1

window3.tableWidget.move(0, 0)

window3.tableWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)

window3.tableWidget.resizeColumnsToContents()

window3.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

window3.tableWidget.horizontalHeader().setVisible(False)

window3.tableWidget.verticalHeader().setVisible(False)

window.pushButton.clicked.connect(lambda: Close(window, window2))

window.pushButton_2.clicked.connect(lambda: Close(window,window3))

window.pushButton_3.clicked.connect(lambda: Close(window, window5))

window2.BackBut.clicked.connect(lambda: Close(window2, window))

window3.BackBut.clicked.connect(lambda: Close(window3, window))

snils=[0]

window5.pushButton.clicked.connect(lambda: Check(window5,window4,snils))

window5.plainTextEdit.setMaxLength(11)

window4.BackBut.clicked.connect(lambda: Check_2(window4, window))

window4.BackBut_2.clicked.connect(lambda: tabl(window4,snils))

window.show() # оказать окно

app.exec_() # и запускаем приложение

if __name__ == '__main__':

main()

Config.py

records= []

path1 = r'servies.db' #путь к бд servies

path2 = r'doctor.db' #путь к бд doctor

path3 = r'rec.db' #путь к бд doctor

DB.py

import sqlite3

conn = sqlite3.connect('servies.db')

cur = conn.cursor()

cur.execute("""CREATE TABLE IF NOT EXISTS servies(

SerID INT PRIMARY KEY,

name TEXT,

price TEXT);

""")

conn.commit()

conn = sqlite3.connect('doctor.db')

cur = conn.cursor()

cur.execute("""CREATE TABLE IF NOT EXISTS doctor(

DocID INT PRIMARY KEY,

name TEXT,

proff TEXT,

office TEXT);

""")

conn.commit()

conn = sqlite3.connect('rec.db')

cur = conn.cursor()

cur.execute("""CREATE TABLE IF NOT EXISTS rec(

snils TEXT,

Doc TEXT,

Time TEXT);

""")

conn.commit()

Doc.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800, 600)

MainWindow.setStyleSheet("background-color: rgb(195, 195, 195);")

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)

self.tableWidget.setGeometry(QtCore.QRect(0, 0, 591, 551))

self.tableWidget.setStyleSheet("background-color: rgb(255, 255, 255);")

self.tableWidget.setObjectName("tableWidget")

self.tableWidget.setColumnCount(0)

self.tableWidget.setRowCount(0)

self.BackBut = QtWidgets.QPushButton(self.centralwidget)

self.BackBut.setGeometry(QtCore.QRect(590, 0, 201, 51))

font = QtGui.QFont()

font.setPointSize(12)

self.BackBut.setFont(font)

self.BackBut.setStyleSheet("background-color: rgb(141, 0, 0);")

self.BackBut.setObjectName("BackBut")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.BackBut.setText(_translate("MainWindow", "Назад"))from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800, 600)

MainWindow.setStyleSheet("background-color: rgb(195, 195, 195);")

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)

self.tableWidget.setGeometry(QtCore.QRect(0, 0, 591, 551))

self.tableWidget.setStyleSheet("background-color: rgb(255, 255, 255);")

self.tableWidget.setObjectName("tableWidget")

self.tableWidget.setColumnCount(0)

self.tableWidget.setRowCount(0)

self.BackBut = QtWidgets.QPushButton(self.centralwidget)

self.BackBut.setGeometry(QtCore.QRect(590, 0, 201, 51))

font = QtGui.QFont()

font.setPointSize(12)

self.BackBut.setFont(font)

self.BackBut.setStyleSheet("background-color: rgb(141, 0, 0);")

self.BackBut.setObjectName("BackBut")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.BackBut.setText(_translate("MainWindow", "Назад"))

Enter.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800, 604)

MainWindow.setStyleSheet("background-color: rgb(195, 195, 195);")

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.pushButton = QtWidgets.QPushButton(self.centralwidget)

self.pushButton.setGeometry(QtCore.QRect(200, 320, 420, 51))

font = QtGui.QFont()

font.setPointSize(16)

self.pushButton.setFont(font)

self.pushButton.setStyleSheet("background-color: rgb(0, 126, 0);")

self.pushButton.setCheckable(False)

self.pushButton.setAutoRepeat(False)

self.pushButton.setObjectName("pushButton")

self.label = QtWidgets.QLabel(self.centralwidget)

self.label.setGeometry(QtCore.QRect(200, 170, 421, 81))

font = QtGui.QFont()

font.setPointSize(19)

self.label.setFont(font)

self.label.setAlignment(QtCore.Qt.AlignCenter)

self.label.setObjectName("label")

self.label_2 = QtWidgets.QLabel(self.centralwidget)

self.label_2.setGeometry(QtCore.QRect(200, 380, 411, 100))

font = QtGui.QFont()

font.setPointSize(17)

self.label_2.setFont(font)

self.label_2.setStyleSheet("color: rgb(255, 0, 0);")

self.label_2.setText("")

self.label_2.setAlignment(QtCore.Qt.AlignCenter)

self.label_2.setObjectName("label_2")

self.plainTextEdit = QtWidgets.QLineEdit(self.centralwidget)

self.plainTextEdit.setGeometry(QtCore.QRect(200, 249, 420, 71))

font = QtGui.QFont()

font.setPointSize(18)

self.plainTextEdit.setFont(font)

self.plainTextEdit.setStyleSheet("background-color: rgb(255, 255, 255);")

self.plainTextEdit.setText("")

self.plainTextEdit.setObjectName("plainTextEdit")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.pushButton.setText(_translate("MainWindow", "Готово"))

self.label.setText(_translate("MainWindow", "Введите номер снилса"))

Home.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800, 600)

MainWindow.setStyleSheet("background-color: rgb(195, 195, 195);")

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.pushButton = QtWidgets.QPushButton(self.centralwidget)

self.pushButton.setGeometry(QtCore.QRect(280, 200, 311, 61))

font = QtGui.QFont()

font.setPointSize(15)

self.pushButton.setFont(font)

self.pushButton.setStyleSheet("background-color: rgb(210, 210, 210);")

self.pushButton.setIconSize(QtCore.QSize(50, 50))

self.pushButton.setObjectName("pushButton")

self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)

self.pushButton_2.setGeometry(QtCore.QRect(280, 280, 311, 61))

font = QtGui.QFont()

font.setPointSize(15)

self.pushButton_2.setFont(font)

self.pushButton_2.setStyleSheet("background-color: rgb(210, 210, 210);")

self.pushButton_2.setIconSize(QtCore.QSize(50, 50))

self.pushButton_2.setObjectName("pushButton_2")

self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)

self.pushButton_3.setGeometry(QtCore.QRect(280, 360, 311, 61))

font = QtGui.QFont()

font.setPointSize(15)

self.pushButton_3.setFont(font)

self.pushButton_3.setStyleSheet("background-color: rgb(210, 210, 210);")

self.pushButton_3.setIconSize(QtCore.QSize(50, 50))

self.pushButton_3.setObjectName("pushButton_3")

self.label = QtWidgets.QLabel(self.centralwidget)

self.label.setGeometry(QtCore.QRect(350, 40, 241, 131))

font = QtGui.QFont()

font.setFamily("MV Boli")

font.setPointSize(39)

self.label.setFont(font)

self.label.setTextFormat(QtCore.Qt.RichText)

self.label.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)

self.label.setObjectName("label")

self.label_2 = QtWidgets.QLabel(self.centralwidget)

self.label_2.setGeometry(QtCore.QRect(260, 70, 91, 81))

self.label_2.setStyleSheet("background-image: url(:/teeth/png-clipart-white-tooth-toothbrush-dentistry-tooth-love-text.png);")

self.label_2.setText("")

self.label_2.setPixmap(QtGui.QPixmap(":/teeth/png-clipart-white-tooth-toothbrush-dentistry-tooth-love-text.png"))

self.label_2.setScaledContents(True)

self.label_2.setObjectName("label_2")

self.label_2.raise_()

self.pushButton.raise_()

self.pushButton_2.raise_()

self.pushButton_3.raise_()

self.label.raise_()

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.pushButton.setText(_translate("MainWindow", "Услуги"))

self.pushButton_2.setText(_translate("MainWindow", "Врачи"))

self.pushButton_3.setText(_translate("MainWindow", "Запись"))

self.label.setText(_translate("MainWindow", "Dentistry"))

Record.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800, 600)

MainWindow.setStyleSheet("background-color: rgb(195, 195, 195);")

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)

self.tableWidget.setGeometry(QtCore.QRect(0, 0, 591, 551))

self.tableWidget.setStyleSheet("background-color: rgb(255, 255, 255);")

self.tableWidget.setObjectName("tableWidget")

self.tableWidget.setColumnCount(0)

self.tableWidget.setRowCount(0)

self.BackBut = QtWidgets.QPushButton(self.centralwidget)

self.BackBut.setGeometry(QtCore.QRect(590, 0, 201, 51))

font = QtGui.QFont()

font.setPointSize(12)

self.BackBut.setFont(font)

self.BackBut.setStyleSheet("background-color: rgb(141, 0, 0);")

self.BackBut.setObjectName("BackBut")

self.BackBut_2 = QtWidgets.QPushButton(self.centralwidget)

self.BackBut_2.setGeometry(QtCore.QRect(590, 50, 201, 51))

font = QtGui.QFont()

font.setPointSize(12)

self.BackBut_2.setFont(font)

self.BackBut_2.setStyleSheet("background-color: rgb(0, 126, 0);")

self.BackBut_2.setObjectName("BackBut_2")

self.label = QtWidgets.QLabel(self.centralwidget)

self.label.setGeometry(QtCore.QRect(590, 450, 211, 101))

font = QtGui.QFont()

font.setPointSize(15)

self.label.setFont(font)

self.label.setText("")

self.label.setObjectName("label")

self.BackBut.raise_()

self.tableWidget.raise_()

self.BackBut_2.raise_()

self.label.raise_()

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.