{"id":24037389,"url":"https://github.com/abeatrizsc/parking-management-system-java","last_synced_at":"2026-05-12T13:39:24.957Z","repository":{"id":270634293,"uuid":"846778853","full_name":"ABeatrizSC/parking-management-system-java","owner":"ABeatrizSC","description":"Sistema de Gestão de vagas de estacionamentos | Java, JDBC e MySQL","archived":false,"fork":false,"pushed_at":"2025-01-02T01:24:28.000Z","size":102,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-02T02:40:13.789Z","etag":null,"topics":["backend","crud","java","jdbc","mysql","mysql-database"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ABeatrizSC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-24T00:07:50.000Z","updated_at":"2025-01-02T01:24:32.000Z","dependencies_parsed_at":"2025-01-02T02:40:15.937Z","dependency_job_id":"7d0e606e-2bd2-4564-850f-274bb9c371a4","html_url":"https://github.com/ABeatrizSC/parking-management-system-java","commit_stats":null,"previous_names":["abeatrizsc/parking-management-system-java"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fparking-management-system-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fparking-management-system-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fparking-management-system-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ABeatrizSC%2Fparking-management-system-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ABeatrizSC","download_url":"https://codeload.github.com/ABeatrizSC/parking-management-system-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240806221,"owners_count":19860742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","crud","java","jdbc","mysql","mysql-database"],"created_at":"2025-01-08T19:58:54.203Z","updated_at":"2026-05-12T13:39:19.921Z","avatar_url":"https://github.com/ABeatrizSC.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sistema de Gestão de Estacionamento\nProjeto dedicado ao desenvolvimento de um sistema de gestão de estacionamento em função do desafio 1 do programa de bolsas da Compass Uol AWS_SPRINGBOOT_AGO/24.\n\n## Desafio proposto\n\n### Descrição\nDesenvolva um sistema de gestão de estacionamento para um shopping, utilizando apenas Java e MySQL. O sistema deve gerenciar o número de vagas disponíveis, registrar a entrada e saída de veículos por diferentes cancelas,\ncalcular o valor a ser pago pelo tempo de permanência e garantir que as regras específicas de entrada e saída sejam respeitadas. \nO sistema também deve permitir o cadastro de veículos mensalistas e caminhões de entrega, enquanto veículos avulsos e de serviço público não precisam ser previamente\ncadastrados.\n\n### Requisitos do desafio\n\n1. **Cadastro de Veículos e Categorias:**\n\n   O sistema deve suportar o cadastro de veículos nas seguintes categorias:\n   \n   - **Mensalista:** Veículo com um plano de estacionamento recorrente. As placas dos veículos mensalistas devem ser registradas previamente para abrir automaticamente as cancelas.\n   \n   - **Caminhões de Entrega:** Veículos de carga, como caminhões de entrega e vans. As placas desses veículos devem ser registradas previamente para abrir automaticamente as cancelas.\n   \n   - **Serviço Público:** Veículos de serviço público, como ambulâncias e viaturas, que têm acesso livre, não ocupam vagas e são isentos de cobrança. Esses veículos não precisam ser cadastrados.\n   \n   - **Avulso:** Veículos que não precisam de cadastro prévio. Recebem um ticket na entrada, que será utilizado para registrar a saída e calcular o valor a ser pago.\n\n2. **Tipos de Veículos:**\n\n   - Carros de Passeio\n   - Motos\n   - Caminhões de Entrega\n   - Veículos de Serviço Público\n\n3. **Gestão das Cancelas:**\n\n   - Cancelas de entrada são numeradas de 1 a 5.\n   - Cancelas de saída são numeradas de 6 a 10.\n   - Mensalistas e Avulsos podem entrar por qualquer cancela de entrada (1 a 5) e sair por qualquer cancela de saída (6 a 10).\n   - Caminhões de Entrega só podem entrar pela cancela 1 e sair por qualquer cancela de saída (6 a 10).\n   - Motos só podem entrar pela cancela 5 e sair pela cancela 10.\n   - Veículos de Serviço Público têm acesso livre em todas as cancelas sem cobrança.\n\n4. **Gestão de Vagas:**\n\n   - O sistema deve controlar o número total de vagas disponíveis, numerando-as para facilitar o gerenciamento.\n   - O limite máximo de vagas disponíveis no estacionamento é 500 vagas.\n   - Reserve 200 vagas para os mensalistas.\n   - Moto ocupa 1 vaga, Carro de Passeio 2 vagas, Caminhão de Entrega 4 vagas.\n\n5. **Registro de Entrada e Saída através de Tickets:**\n\n   - **Mensalistas e Caminhões de Entrega:** A entrada e saída são registradas automaticamente com base na placa do veículo. Não é necessário ticket.\n   \n   - **Avulsos:** Recebem um ticket ao entrar no estacionamento, que registra:\n     - A hora de entrada.\n     - A hora de saída (registrada no momento da saída).\n     - A cancela de entrada e saída.\n     - A vaga ocupada (número da vaga).\n     - O valor a ser pago (calculado no momento da saída).\n   \n   - Veículos de Serviço Público não recebem ticket.\n\n6. **Cobrança:**\n\n   - Implementar um sistema de cálculo de valor baseado no tempo que o veículo permaneceu no estacionamento, por vaga ocupada.\n   - Valor por minuto estacionado: R$ 0,10.\n   - Cobrança mínima de R$ 5,00 para veículos avulsos.\n   - Mensalistas pagam uma taxa fixa mensal de R$ 250,00.\n   - Veículos de Serviço Público são isentos de cobrança.\n\n\n## Requisitos\nCertifique-se de ter as seguintes ferramentas instaladas e configuradas:\n- Java Development Kit (JDK) 11 ou superior\n- Apache Maven\n- MySQL 8.0.34 (LTS)\n- MySQL Workbench 8.0\n\n**IDE utilizada no desenvolvimento: IntelliJ IDEA Community Edition 2024.2**\n\n## Criação do banco de dados\nExecute o script do banco de dado em seu MySQL Workbench para criar o banco de dados e tabelas.\n\nO banco está configurado para atender a porta padrão 3306, usuário 'root' e senha vazia. Mude se necessário.\n\n```sql\nCREATE DATABASE `parking-management-system-java-db`;\nUSE `parking-management-system-java-db`;\n\nCREATE TABLE IF NOT EXISTS `vehicle` (   \n    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,   \n    `category` VARCHAR(100) NULL,   \n    `slotSize` INT NULL,   \n    `accessType` VARCHAR(50) NULL,   \n    `entranceGate` INT NULL,   \n    `entranceGatesAvailable` VARCHAR(100) NULL,   \n    `exitGate` INT NULL,   \n    `exitGatesAvailable` VARCHAR(100) NULL \n);\n\nCREATE TABLE IF NOT EXISTS `monthlyPayer` (   \n    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,   \n    `licensePlate` VARCHAR(100) NULL,   \n    `valuePerMonth` DOUBLE NULL,   \n    `vehicle_id` INT NOT NULL\n);\n\nALTER TABLE `monthlyPayer` \nADD FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle`(`id`);\n\nCREATE TABLE IF NOT EXISTS `deliveryTruck` (   \n    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,   \n    `licensePlate` VARCHAR(100) NULL,   \n    `vehicle_id` INT NOT NULL\n);\n\nALTER TABLE `deliveryTruck` \nADD FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle`(`id`);\n\nCREATE TABLE IF NOT EXISTS `parkingSpace` (\n    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n    `isOccupied` BIT(2) NULL,\n    `slotType` VARCHAR(100) NULL,\n    `vehicle_id` INT \n);\n\nALTER TABLE `parkingSpace` \nADD FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle`(`id`);\n\nCREATE TABLE IF NOT EXISTS `ticket` (\n    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,\n    `startHour` TIME NULL,\n    `finishHour` TIME NULL,\n    `totalValue` DOUBLE NULL,\n    `parkingSpaces` VARCHAR(100) NULL,\n    `vehicle_id` INT NOT NULL\n);\n\nALTER TABLE `ticket` \nADD FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle`(`id`);\n```\n\n## Execução do Projeto\n### Clonagem e execução\nSiga os passos abaixo para configurar o projeto no seu ambiente\n1. **Clone o repositório**\n```bash\n git clone https://github.com/ABeatrizSC/parking-management-system-java.git \n ```\n```bash\n  cd parking-management-system-java\n ```\n\n2. **Instale as dependências**\n\n ```bash\n mvn clean install\n ```\n\n 3. **Execute o projeto**\n\n### Criação das 500 vagas\nComo o desafio propôs o gerenciamento de 500 vagas, para criá-las basta copiar código abaixo e executá-lo somente uma vez na classe Main:\n\n ```java\nParkingSpace monthlyParkingSpace = new ParkingSpace(null, SlotType.MONTHLY, false, null);\nParkingSpace casualParkingSpace = new ParkingSpace(null, SlotType.CASUAL, false, null);\nParkingSpaceDao parkingSpaceDao = createParkingSpaceDao();\nfor (int i = 1; i \u003c= 200; i++) {\n    parkingSpaceDao.insert(monthlyParkingSpace);\n}\nfor (int i = 1; i \u003c= 300; i++) {\n    parkingSpaceDao.insert(casualParkingSpace);\n}\n ```\n\n## Como navegar/Utilizar o sistema\nO menu é composto por opções que poderão ser selecionadas a partir de um número referenciado antes da opção ou então por um campo personalizado de acordo com a opção desejada pelo usuário.\n\n### Validações de entrada\n1. **Veículos**\n  - Só serão aceitas categorias de veículos existentes no sistema (CAR, MOTOCYCLE, DELIVERY_TRUCKS e PUBLIC_SERVICE);\n  - Se a categoria escolhida for CAR e MOTOCYCLE, o usuário é encaminhado para escolher os tipos de acessos disponíveis a estes (MONTHLY PAYER ou TICKET (CASUAL/avulso));\n  - Se não, os marcados como PUBLIC SERVICE serão encaminhados diretamente à escolha das vagas e os de categoria DELIVERY TRUCKS para se registrar ou fazer \"login\".\n\n2. **Placas**\n    - Apenas as categorias de acesso MONTHLY PAYER e DELIVERY TRUCK farão o registro de placas;\n    -  Não é possível criar veículos com a mesma placa;\n    -  As placas deverão ter de 7 à 8 caracteres.\n\n3. **Cancelas**\n    - As cancelas possuem validação para permitirem a entrada somente de veículos autorizados a passarem por elas (detalhes na descrição do desafio);\n    - Se a primeira opção marcada for 'Entering', na hora de escolher as cancelas só aparecerão as responsáveis pelas entradas de veículos. O mesmo acontece quando selecionado a opção \"Exiting\".\n    - \n4. **Vagas**\n    - Cada categoria de veículo ocupa um determinado numero de vagas (descrito no desafio), ou seja, deverá informar o número necessário de vagas na hora de escolhê-las;\n    - As vagas escolhidas deverão ser números **sequenciais**;\n    - Sendo assim, não é possível adentrar com o veículo se não houver vagas da quantidade necessária OU se não forem sequenciais;\n    - Não é possível veículos que são MONTHLY PAYERS estacionarem nas vagas de veículos CASUAL e vice-versa.\n\n## Contato\n* GitHub: [ABeatrizSC](https://github.com/ABeatrizSC)\n* Linkedin: [Ana Beatriz Santucci Carmoni](www.linkedin.com/in/ana-carmoni)\n* Email: [anabeatrizscarmoni@gmail.com](mailto:anabeatrizscarmoni@gmail.com)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabeatrizsc%2Fparking-management-system-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabeatrizsc%2Fparking-management-system-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabeatrizsc%2Fparking-management-system-java/lists"}