Compare commits
7 Commits
474be8660a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3953b62484 | ||
|
|
5e04d938f0 | ||
|
|
38881b3f45 | ||
|
|
3e6c319c99 | ||
|
|
bc8ee29e3e | ||
|
|
d7224649fb | ||
|
|
ac026ae383 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/target/
|
||||||
56
README.md
Normal file
56
README.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# Gestor de Palavra-Passes
|
||||||
|
|
||||||
|
O Gestor de Palavra-Passes é uma aplicação desenvolvida em Java com o objetivo de guardar, listar, procurar e apagar contas de forma simples através da consola.
|
||||||
|
|
||||||
|
O projeto foi criado utilizando Apache NetBeans e Maven, permitindo uma estrutura organizada e fácil de executar em diferentes sistemas.
|
||||||
|
|
||||||
|
## Funcionalidades
|
||||||
|
|
||||||
|
* Criar contas
|
||||||
|
* Guardar aplicação/site, email/utilizador e palavra-passe
|
||||||
|
* Listar todas as contas guardadas
|
||||||
|
* Procurar contas rapidamente
|
||||||
|
* Apagar contas existentes
|
||||||
|
* Gerar palavras-passe aleatórias seguras
|
||||||
|
* Armazenamento local em ficheiro `.txt`
|
||||||
|
|
||||||
|
## Como Funciona
|
||||||
|
|
||||||
|
As contas são guardadas num ficheiro chamado `data.txt`.
|
||||||
|
|
||||||
|
Cada linha contém:
|
||||||
|
Aplicação/Site ; Nome/Email ; Palavra-Passe
|
||||||
|
|
||||||
|
Exemplo:
|
||||||
|
Netflix;[utilizador@email.com](mailto:utilizador@email.com);MinhaPassword123
|
||||||
|
|
||||||
|
O programa utiliza:
|
||||||
|
|
||||||
|
* `Scanner` para interação com o utilizador
|
||||||
|
* `BufferedWriter` para guardar dados
|
||||||
|
* `BufferedReader` para ler dados
|
||||||
|
* Estruturas de repetição e menus interativos
|
||||||
|
|
||||||
|
## Estrutura do Projeto
|
||||||
|
|
||||||
|
* `GestorPalavraPasses.java` → Classe principal
|
||||||
|
* `Menu` → Interface de menu da aplicação
|
||||||
|
* `Account` → Estrutura das contas
|
||||||
|
* `FileManager` → Gestão de ficheiros
|
||||||
|
* `PasswordGenerator` → Geração de passwords seguras
|
||||||
|
|
||||||
|
## Tecnologias Utilizadas
|
||||||
|
|
||||||
|
* Java
|
||||||
|
* Apache NetBeans
|
||||||
|
* Maven
|
||||||
|
|
||||||
|
## Objetivo
|
||||||
|
|
||||||
|
Este projeto foi desenvolvido com fins educativos para praticar:
|
||||||
|
|
||||||
|
* Programação orientada a objetos
|
||||||
|
* Manipulação de ficheiros
|
||||||
|
* Menus interativos
|
||||||
|
* Organização de projetos Java
|
||||||
|
* Gestão de dados locais
|
||||||
BIN
src/.DS_Store
vendored
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/main/.DS_Store
vendored
Normal file
BIN
src/main/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/main/java/.DS_Store
vendored
Normal file
BIN
src/main/java/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/main/java/com/.DS_Store
vendored
Normal file
BIN
src/main/java/com/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
src/main/java/com/mycompany/.DS_Store
vendored
Normal file
BIN
src/main/java/com/mycompany/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -30,26 +30,37 @@ public class GestorPalavraPasses {
|
|||||||
System.out.println("5 - Gerar password");
|
System.out.println("5 - Gerar password");
|
||||||
System.out.println("0 - Sair");
|
System.out.println("0 - Sair");
|
||||||
System.out.println("****************************");
|
System.out.println("****************************");
|
||||||
|
|
||||||
System.out.print("Opção: ");
|
System.out.print("Opção: ");
|
||||||
op = scanner.nextInt();
|
op = scanner.nextInt();
|
||||||
scanner.nextLine();
|
scanner.nextLine();
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case 1:
|
case 1:
|
||||||
System.out.println("Criar conta...");
|
System.out.print("Aplicação/Site: ");
|
||||||
|
String app = scanner.nextLine();
|
||||||
|
System.out.print("Nome/Email: ");
|
||||||
|
String user = scanner.nextLine();
|
||||||
|
System.out.print("Palavra-passe: ");
|
||||||
|
String pass = scanner.nextLine();
|
||||||
|
|
||||||
|
Account acc = new Account(app, user, pass);
|
||||||
|
FileManager.save(acc);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
System.out.println("Listar contas...");
|
FileManager.readAll();
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
System.out.println("Procurar conta...");
|
System.out.print("Pesquisar: ");
|
||||||
|
String termo = scanner.nextLine();
|
||||||
|
FileManager.search(termo);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
System.out.println("Apagar conta...");
|
System.out.print("Introduza o nome da app/site: ");
|
||||||
|
String apagar = scanner.nextLine();
|
||||||
|
FileManager.delete(apagar);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
System.out.println("Gerar password...");
|
System.out.println("Palavra-passe gerada: " + PasswordGenerator.generate());
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
System.out.println("A sair...");
|
System.out.println("A sair...");
|
||||||
@@ -65,14 +76,140 @@ public class GestorPalavraPasses {
|
|||||||
|
|
||||||
|
|
||||||
class Account {
|
class Account {
|
||||||
|
String app;
|
||||||
|
String username;
|
||||||
|
String password;
|
||||||
|
|
||||||
|
public Account(String app, String username, String password) {
|
||||||
|
this.app = app;
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FileManager {
|
class FileManager {
|
||||||
|
|
||||||
|
public static void readAll() {
|
||||||
|
try {
|
||||||
|
java.io.BufferedReader reader = new java.io.BufferedReader(
|
||||||
|
new java.io.FileReader("data.txt")
|
||||||
|
);
|
||||||
|
|
||||||
|
String line;
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
String[] parts = line.split(";");
|
||||||
|
System.out.println("\nAplicação/Site: " + parts[0] +
|
||||||
|
" | Nome/Email: " + parts[1] +
|
||||||
|
" | Palavra-Passe: " + parts[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Erro ao ler ficheiro.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void save(Account acc) {
|
||||||
|
try {
|
||||||
|
java.io.BufferedWriter writer = new java.io.BufferedWriter(
|
||||||
|
new java.io.FileWriter("data.txt", true)
|
||||||
|
);
|
||||||
|
|
||||||
|
writer.write(acc.app + ";" + acc.username + ";" + acc.password);
|
||||||
|
writer.newLine();
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
System.out.println("Conta guardada.");
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Erro ao guardar ficheiro.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void search(String termo) {
|
||||||
|
try {
|
||||||
|
java.io.BufferedReader reader = new java.io.BufferedReader(
|
||||||
|
new java.io.FileReader("data.txt")
|
||||||
|
);
|
||||||
|
|
||||||
|
String line;
|
||||||
|
boolean encontrado = false;
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (line.toLowerCase().contains(termo.toLowerCase())) {
|
||||||
|
String[] parts = line.split(";");
|
||||||
|
System.out.println("\nAplicação/Site: " + parts[0] +
|
||||||
|
" | Nome/Email: " + parts[1] +
|
||||||
|
" | Palavra-passe: " + parts[2]);
|
||||||
|
encontrado = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!encontrado) {
|
||||||
|
System.out.println("Nenhuma conta encontrada.");
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Erro ao procurar.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void delete(String termo) {
|
||||||
|
try {
|
||||||
|
java.io.File inputFile = new java.io.File("data.txt");
|
||||||
|
java.io.File tempFile = new java.io.File("temp.txt");
|
||||||
|
|
||||||
|
java.io.BufferedReader reader = new java.io.BufferedReader(
|
||||||
|
new java.io.FileReader(inputFile)
|
||||||
|
);
|
||||||
|
|
||||||
|
java.io.BufferedWriter writer = new java.io.BufferedWriter(
|
||||||
|
new java.io.FileWriter(tempFile)
|
||||||
|
);
|
||||||
|
|
||||||
|
String line;
|
||||||
|
boolean apagado = false;
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (line.toLowerCase().contains(termo.toLowerCase())) {
|
||||||
|
apagado = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
writer.write(line);
|
||||||
|
writer.newLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
inputFile.delete();
|
||||||
|
tempFile.renameTo(inputFile);
|
||||||
|
|
||||||
|
if (apagado) {
|
||||||
|
System.out.println("Conta(s) apagada(s).");
|
||||||
|
} else {
|
||||||
|
System.out.println("Nenhuma conta encontrada.");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Erro ao apagar.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
class PasswordGenerator {
|
class PasswordGenerator {
|
||||||
|
public static String generate() {
|
||||||
|
String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||||
|
StringBuilder pass = new StringBuilder();
|
||||||
|
java.util.Random rand = new java.util.Random();
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
pass.append(chars.charAt(rand.nextInt(chars.length())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return pass.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user