Sunteți pe pagina 1din 11

Universidad Autnoma Metropolitana

Unidad Azcapotzalco
Almacenamiento y Estructuras de Archivos
Irma Fernanda Ardn Pulido

Trabajo Final de RRN

Integrantes del equipo:


Emmanuel Beltran Fuentes
Nestor Orlando Rivero Romero
Trimestre 15-I

Introduccin
Para proyecto final se escogi el Programa de RRN ya que nos pareci un tcnica
interesante para la gestin de informacin en al medio secundario, este programa se
hizo sobre el lenguaje de programacin C++. El propsito del programa es, dado un
archivo con ciertos datos ya almacenados en memoria secundara usamos la memoria
principal para al momento de solicitar un registro en memoria principal solo hacemos
uso de sus cdigos para ubicarla en medio secundario, de esta manera la carga en
ambas memoria es poca en comparacin con tener que tratar todos los datos ya sea en
memoria principal o secundara, en este trabajo se hacen operaciones de altas, bajas y
consultas.

Cdigo
#include
#include
#include
#include
#include

<iostream>
<stdio.h>
<stdlib.h>
<fstream>
<string>

/* printf, fgets */

using namespace std;


bool cValue(int c){
if(c >= 48 && c <= 57){
return true;
}
return false;
}
void merge(int a[][2], int low, int mid, int high){
int b[10000][2];
int p;
int i = low, j = mid + 1, k = 0;
while (i <= mid && j <= high) {
if (a[i][0] <= a[j][0]){
b[k][0] = a[i][0];
b[k][1] = a[i][1];
k++;
i++;
}
else{
b[k][0] = a[j][0];
b[k][1] = a[j][1];
k++;
j++;

}
}
while (i <= mid){

b[k][0] = a[i][0];
b[k][1] = a[i][1];
k++;
i++;

while (j <= high){


b[k][0] = a[j][0];
b[k][1] = a[j][1];
k++;
j++;
}

k--;
while (k >= 0) {
a[low + k][0] = b[k][0];
a[low + k][1] = b[k][1];
k--;
}
void mergesort(int a[][2], int low, int high){
if (low < high) {
int m = (high + low)/2;
mergesort(a, low, m);
mergesort(a, m + 1, high);
merge(a, low, m, high);
}
}
int conversion(string cadena){
int flag = 0;
char c;
int i = 0;
string codigo = "";
while(flag != 1){
c = cadena[i];
if(cValue(c)){
while(flag != 1){
if(cadena[i] == 32){
flag = 1;
}else{

}
i++;

}
i++;

codigo = codigo + cadena[i];

}
return atoi(codigo.c_str());
}
int busqueda(int v[][2], int principio, int fin, int x){
int res;
if(principio <= fin ){
int m = (principio + fin)/2;
if(x < v[m][0]) {
res = busqueda(v, principio, m-1, x);
}
else if(x > v[m][0]){
res = busqueda(v, m+1, fin, x);
}
else{
res = v[m][1];

}
}else {
res = -1;
}
return res;

void indiceWrite(int a[][2], int cnt){


int i = 0;
ofstream ArchivoW3("indice.dat", ios::trunc);
if(ArchivoW3.fail()){
cout << "Error al escribir el indce";

}else{
while(i < cnt){
ArchivoW3 << a[i][0] <<" "<<a[i][1]<<"\n";
i++;
}
ArchivoW3.close();
}
int main(){
string cadena;
int code[9][2];
int ubicacion;
int findCode;
int cnt = 0;
int i = 0;
int option;

//Creamos el archivo datos.dat y abrimos registros.txt


ofstream ArchivoW ("datos.dat", ios::trunc);
ifstream ArchivoR ("registros.txt", ios::in);
ArchivoW.close();
ArchivoR.close();
//copiamos la informacion de registros.txt en datos.dat
ArchivoR.open("registros.txt", ios::in);
ArchivoW.open("datos.dat", ios::trunc);
if(ArchivoR.fail() || ArchivoW.fail()){
cout << "Error al abrir registros.txt";
return 0;
}
else {
while(!ArchivoR.eof()){
//Mientras leemos registros.txt copiamos la inf
//a datos,dat
getline(ArchivoR, cadena);
ArchivoW << cadena<<"\n";
//Obtenemos el codigo y su posicion
code[cnt][0] = conversion(cadena);
code[cnt][1] = cnt;
cnt++;
}
}
ArchivoW.close();
ArchivoR.close();
//Ordenamos el indice
mergesort(code, 0, cnt);
//////////////Leemos nuesta opcion
cout << "Que deseas hacer?\n1. Hacer consultas\n2. Dar de
alta\n3. Dar bajas\n";
cin >> option;
//////////////
if(option == 1){
while(true){
//abrimos datos.dat en el cual leeremos el codigo
solicitado
ArchivoR.open("datos.dat", ios::in);
if(ArchivoR.fail()){
cout<<"Error al abrir tu archivo";
return 0;
}else{
//introducimos el codigo a buscar
cout<<"Escribe el codigo a buscar\n";
cout<<"Escribe 0 para salir\n";
cin >> findCode;
//con 0 termina el programa y escribe el indice

en indice.dat

elemento no existe

de la inf

if(findCode == 0){
ArchivoR.close();
indiceWrite(code,cnt);
return 0;
}
//hacemos una consulta del codigo
ubicacion = busqueda(code, 0, cnt, findCode);
//si develve un -1 la consulta, indica que el
if(ubicacion == -1){
cout << "Tu elemento no existe\n";
}else{
i=0;
while(i <= ubicacion){
//en caso exitoso obtenemos la cadena
//del codigo solocitado
getline(ArchivoR, cadena);
i++;
}
cout<<cadena<<"\n\n";
}
}
ArchivoR.close();
}
}else if(option == 2){
//Aqui podremos actualizar nuestros registros
string producto;
int codigo, costo, existenciaMin, existenciaActual;
int numReg;
cout << "Cuantos registros desea ingresar?\n";
cin >> numReg;
int w = 0;
ArchivoW.open("registros.txt", ios::app);
for(w = 0; w < numReg; w++){
cout << "\nNombre del producto: ";
getline(cin,producto);
getline(cin,producto);
cout << "\nCodigo: ";
cin >> codigo;
cout << "\nCosto: ";
cin >> costo;
cout << "\nExistencia Minima: ";
cin >> existenciaMin;
cout << "\nExistencia Actual: ";
cin >> existenciaActual;
ArchivoW <<"\n";

//Escribimos los datos en el Archivo


ArchivoW << producto<< " " << codigo << " "
<<costo<< " "<<existenciaMin << " "<<existenciaActual;
}
ArchivoW.close();
}else if(option == 3){
//Aqu borraremos los registros
int codigo;
string comparador;
string temp;
int pos;
int i = 1, j = 1, k =1;
cout<<"\nIndique el codigo a borrar ";
cin >> codigo;

eliminado

ifstream ArchivoRR ("registros.txt", ios::in);


//obtenemos la ubicacion del archivo a borrar
while(!ArchivoRR.eof()){
getline(ArchivoRR, comparador);
if(conversion(comparador) == codigo){
pos = i;
}
i++;
}
ArchivoRR.close();
ifstream ArchivoR2 ("datos.dat", ios::in);
ofstream ArchivoWW("registros.txt", ios::trunc);
while(k < i){
//Escribimos de nuevo los registros ya con el registro
getline(ArchivoR2, temp);
if(k == 1 && conversion(temp) != codigo){
ArchivoWW << temp;
}else if(conversion(temp) != codigo){
ArchivoWW << "\n";
ArchivoWW << temp;
}
k++;
}
ArchivoR2.close();
ArchivoWW.close();
}else if(option ==0){
//opcion para salir
return 0;
}
//Mientras el usuario lo desee hacemos consultas

return 0;

Imgenes de Ejecucin
Inicialmente tenemos un archivo llamado registros.txx con la sig informacin
Filtro de agua 3290 1000 5000 13568
Vlvula de admisin 2150 1215 100 356
Vlvula de descarga 3560 1990 20 586
Taladro 1890 1815 300 2569
Mezcladora tipo arandela 1202 995 75 7895
Mezcladora con vlvula 125 1500 200 3665
Voltmetro 3508 1280 300 2598
Mezcladora de cartucho 4596 1760 5 236
Dar de alta 3 registros:
Queso Maria
Cable de Red
Reglas T

Archivo registros.txt actualizado

Consulta de
registros
Con los registros
dados de alta, los
que ya estaban y
uno que no existe.

Dar de baja

Archivo registros.txt actualizado

Consulta de datos borrados

Vista de los indices

Conclusiones
Durante el de desarrollo de este trabajo logramos aumentar nuestros conocimientos
sobre manejo de archivos, como almacenar la informacin en medio secundario y
primario, ademas de tcnicas para disminuir en trabajo de lectura en memoria
dinmica y esttica, con esto ahora comprendemos de mejor manera como hacer un
uso adecuado de la informacin para lograr operaciones que no requieran un uso
excesivo de operaciones, el problema que se nos presento durante el desarrollo de este
proyecto ha sido realizar distintas operaciones sin salir de la ejecucin del programa,
ya que cada operacin requiere volver a realizar una ejecucin del mismo, sin
embargo esto no afecto la forma en que actualizamos, damos de baja registros y
hacemos consultas.

S-ar putea să vă placă și