Cpp/JuegoSudoku_FernandoMéndez/ListaSudokus.cpp

128 lines
2.9 KiB
C++

//Sudoku - Fernando Méndez Torrubiano
#include "ListaSudokus.h"
using namespace std;
void iniciar(tListaSudokus& lista) {
lista.contador = 0;
for (int i = 0; i < MAX_SDK; i++){
iniciar(lista.registro[i], "", 0);
}
}
int numElems(const tListaSudokus& lista) {
int num = lista.contador;
return num;
}
bool cargar(tListaSudokus& lista) {
bool carga = false;
ifstream archivo;
tListaSudokus aux;
int cont = 0;
iniciar(lista);
archivo.open("registroSudokus.txt");
if (!archivo.is_open()) {
cout << "Error al leer los datos." << endl;
carga = false;
}
else {
while ((lista.contador < MAX_SDK) && (cargar(lista.registro[lista.contador], archivo))) {
cont = lista.contador;
while ((cont > 0) && (lista.registro[cont] < lista.registro[cont - 1])) { //(operator<(lista.registro[cont], lista.registro[cont - 1]))
aux.registro[cont] = lista.registro[cont];
lista.registro[cont] = lista.registro[cont - 1];
lista.registro[cont - 1] = aux.registro[cont];
cont--;
}
lista.contador++;
}
carga = true;
}
archivo.close();
return carga;
}
void mostrar(const tListaSudokus& lista) {
cout << endl << right << setw(22) << "FICHERO DE CARGA" << setw(10) << "NIVEL" << endl;
cout << setfill('-') << setw(45) << "\n" << setfill(char(0));
for (int i = 0; i < lista.contador; i++) {
cout << right << i + 1 << "." << setw(20) << lista.registro[i].nomTablero << setw(10) << lista.registro[i].puntos << endl;
}
cout << setfill('-') << setw(45) << "\n" << setfill(char(0));
}
////
bool guardar(const tListaSudokus& lista) {
ofstream archivo;
bool guardado = false;
int i = 0;
archivo.open("registroSudokus.txt");
if (!archivo.is_open()) {
cout << "Error al guardar." << endl;
}
else {
while ((i < lista.contador) && (!guardado)) {
if (guardar(lista.registro[i], archivo)) {
i++;
}
}
guardado = true;
}
return guardado;
}
bool buscar(const tListaSudokus& lista, string nombArch) {
bool encontrado = false;
int i = 0;
while ((!encontrado) && (i < lista.contador)) {
if (lista.registro[i].nomTablero != nombArch) {
i++;
}
else {
encontrado = true;
}
}
return encontrado;
}
bool insertar(tListaSudokus& lista, const tRegSudoku& sudoku) {
bool insertado = false;
tListaSudokus aux;
int cont = 0;
if (buscar(lista, sudoku.nomTablero)) {
cout << "El tablero ya existe." << endl;
}
else {
if (lista.contador < MAX_SDK) {
cont = lista.contador;
while ((cont > 0) && (operator<(sudoku, lista.registro[cont - 1]))) {
aux.registro[cont] = lista.registro[cont];
lista.registro[cont] = lista.registro[cont - 1];
lista.registro[cont - 1] = aux.registro[cont];
cont--;
}
iniciar(lista.registro[cont], sudoku.nomTablero, sudoku.puntos);
lista.contador++;
insertado = true;
}
else {
cout << "La lista está llena." << endl;
}
}
return insertado;
}