viernes, 14 de diciembre de 2012

Proyecto Final





Instituto Tecnológico de Tijuana



Programación Estructurada



Proyecto Final



Docente: Ángela Colunga Aldana



Alumno: Daniel Avendaño Reveles


Tijuana, Baja California a 14 de diciembre de 2012

Objetivo:

El objetivo principal del proyecto es tener un control de los alumnos que utilizan el centro de cómputo del instituto, las entradas y salidas de los alumnos en un día, al igual que un reporte del uso de las computadoras. Con el reporte obtenido se podrán analizar los diferentes problemas que se puedan presentar. Nuestro proyecto ayudara a mantener un control del uso de las computadoras del centro de cómputo con una base de datos, en la cual aparecen todos los alumnos inscritos en el instituto tecnológico de Tijuana.

Programación:

#include <conio.h>
#include <iostream.h>
#include <fstream.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

void lectura(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72]);
void guardar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72]);
void iniciar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72]);
void desplegar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72]);
void salir(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72]);
void asignar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72]);
void borrartodo(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void main()
{
int opcion, computadoras[72], hora1[72], hora2[72], minutos1[72], minutos2[72];
char sigue;
time_t rawtime;
struct tm * timeinfo;

iniciar(computadoras, hora1, hora2, minutos1, minutos2);
lectura(computadoras, hora1, hora2, minutos1, minutos2);

do
{
clrscr();
cout<<"\n"<<endl;
cout<<"                                Menu principal";
cout<<"\n"<<endl;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf (asctime (timeinfo) );
cout<<"********************************************************************************"<<endl;
cout<<"\n"<<endl;
cout<<"Seleccionar accion"<<endl;
cout<<"\n"<<endl;
cout<<"1)Entrada"<<endl;
cout<<"2)Salida"<<endl;
cout<<"3)Desplegar lista de computadoras"<<endl;
cout<<"4)Utileria de base de datos"<<endl;
cout<<"Opcion: ";
cin>>opcion;
clrscr( );
cout<<endl;

switch(opcion)
{
case 1:
cout<<"                                Entrada";
cout<<"\n"<<endl;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf (asctime (timeinfo) );
cout<<"********************************************************************************"<<endl;
cout<<"\n"<<endl;
asignar(computadoras, hora1, hora2, minutos1, minutos2);
break;

case 2:
cout<<"                                Salida";
cout<<"\n"<<endl;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf (asctime (timeinfo) );
cout<<"********************************************************************************"<<endl;
cout<<"\n"<<endl;
salir(computadoras, hora1, hora2, minutos1, minutos2);
break;

case 3:
cout<<"                         Desplegar lista de computadoras";
cout<<"\n"<<endl;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf (asctime (timeinfo) );
cout<<"********************************************************************************"<<endl;
cout<<"\n"<<endl;
desplegar(computadoras, hora1, hora2, minutos1, minutos2);
break;

case 4:
cout<<"                         Utileria de base de datos";
cout<<"\n"<<endl;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf (asctime (timeinfo) );
cout<<"********************************************************************************"<<endl;
cout<<"\n"<<endl;
borrartodo(computadoras, hora1, hora2, minutos1, minutos2);
break;
default:

cout<<"Error en opcion:";
}
cout<<"Volver a menu principal? s/n: ";
cin>>sigue;
}
while(sigue=='s'||sigue=='S');

cout<<endl;
getch();
}
// Funciones para la base de datos.

// Funcion para reemplazar, en una cadena de caracteres 'str', todos los caracteres 'o' por caracteres 'v'.

void reemplazarcaracteres(char *str, char o, char v)
{
char *p;
while (p = strchr(str, o))
{
*p = v;
}
}

// Funcion para agregar un nuevo usuario en la base de datos.

void registrarusuario()
{
char numero[16], nombre[128], carrera[128], semestre[16];
ofstream iusr;

iusr.open("C://Datos//Base de datos.txt", ifstream::app);

cin.ignore(9001, '\n');
cout<<"Numero: ";
cin.getline(numero, 16);
cout<<"Nombre:";
cin.getline(nombre, 128);
cout<<"Carrera: ";
cin.getline(carrera, 128);
cout<<"Semestre: ";
cin.getline(semestre, 16);

reemplazarcaracteres(carrera, ' ', '_');
reemplazarcaracteres(nombre, ' ', '_');
reemplazarcaracteres(semestre, ' ', '_');

iusr<<numero<<" "<<nombre<<" "<<carrera<<" "<<semestre<<endl;
}

// Funcion para verificar que el usuario este registrado en la base de datos y obtener sus datos.

bool buscarusuario(int numero, char nombre[128], char carrera[128], char semestre[16])
{
ifstream iusr;
int n;

iusr.open("C://Datos//Base de datos.txt");

while (iusr.good())
{
iusr >> n;
if (n == numero)
{
iusr >> nombre >> carrera >> semestre;
reemplazarcaracteres(nombre, '_', ' ');
reemplazarcaracteres(carrera, '_', ' ');
reemplazarcaracteres(semestre, '_', ' ');

return true;
}
iusr.ignore(9001, '\n');
}

return false;
}

// Funciones para el registro de entradas y salidas

// Funcion para leer los datos del archivo.
void lectura(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
ifstream entrada;
char fnombre[128];
time_t mt = time(0);
tm *lctm = localtime(&mt);

sprintf(fnombre, "C://Datos//%d-%d-%d.txt", lctm->tm_mday, lctm->tm_mon + 1, lctm->tm_year + 1900);
entrada.open(fnombre);
for(int i=0;i<72;i++)
{
entrada >> computadoras[i] >> hora1[i] >> minutos1[i] >> hora2[i] >> minutos2[i];
}
}      

// Funcion para guardar los datos en el archivo.

void guardar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
ofstream salida;
char fnombre[128];
time_t mt = time(0);
tm *lctm = localtime(&mt);

sprintf(fnombre, "C://Datos//%d-%d-%d.txt", lctm->tm_mday, lctm->tm_mon + 1, lctm->tm_year + 1900);
salida.open(fnombre);
for(int i=0;i<72;i++)
{
salida<<computadoras[i]<<" "<<hora1[i]<<" "<<minutos1[i]<<" "<<hora2[i]<<" "<<minutos2[i]<<endl;}
}

// Funcion para darle valor de 0 a todas las variables de los arreglos.

void iniciar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
for(int i=0;i<72;i++)
{
computadoras[i]=hora1[i]=hora2[i]=minutos1[i]=minutos2[i]=0;
}
}

// Funcion para desplegar cada computadora si esta ocupada o desocupada y la hora de entrada y salida.

void desplegar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
cout << "\t\t\tNumero de control\tEntrada\t\tsalida" << endl;
for(int i = 0; i < 72; i++)
{
cout<<"Computadora "<<(i+1)<<"\t\t"<<computadoras[i]<<(!computadoras[i] ? "\t\t\t" : "\t\t")<<hora1[i]<<":"<<minutos1[i]<<"\t\t"<<hora2[i]<<":"<<minutos2[i]<<endl;
}
}

// Funcion para borrar el registro.

void borrarregistro(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
iniciar(computadoras, hora1, hora2, minutos1, minutos2);
guardar(computadoras, hora1, hora2, minutos1, minutos2);
}

// Funcion para desocupar una computadora.

void salir(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
struct time t;
int num;

cout<<"Salida"<<endl;
cout<<"Numero de computadora: ";
cin>>num;

num--;

gettime(&t);
hora2[num]=t.ti_hour;
minutos2[num]=t.ti_min;
guardar(computadoras, hora1, hora2, minutos1, minutos2);
}

// Funcion para asignar una computadora al alumno, la asignacion va por orden segun las computadoras desocupadas.

void asignar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
char nombre[128], carrera[128], semestre[16], opc;
int i, numero, comp;
struct time t;

cout << "Numero de control: ";
cin >> numero;

if (buscarusuario(numero, nombre, carrera, semestre))
{
cout<<"Alumno: "<<nombre<<endl;
cout<<"Carrera: "<<carrera<<endl;
cout<<"Semestre: "<<semestre<<endl;
}
else
{
cout<<"No es alumno del plantel"<<endl;
cout<<"Se recomienda registrar"<<endl;
cout<<"Y pedir una identificacion"<<endl;
cout<<"Desea registrar nuevo usuario?"<<endl;
cout<<"s/n: ";
cin>> opc;
if(opc=='s'||opc=='S')
{
registrarusuario();
}
}

for(i = 0; i < 72; i++)
{
if (computadoras[i] == numero && !hora2[i] && !minutos2[i])
{
cout << "Este alumno ya tiene asignada una computadora" << endl;
return;
}
}

cout << "Seleccionar computadora (s/n): ";
cin >> opc;

if (opc == 's' || opc == 'S')
{
cout << "Computadoras disponibles" << endl;
for (i = 0; i < 72; i++)
{
if (!computadoras[i])
{
cout << "#" << (i+1) << endl;
}
}

cout << "Computadora deseada: ";
cin >> comp;
comp--;

if (!computadoras[comp] || (hora2[comp] && minutos2[comp]))
{
i=comp;
computadoras[i] = numero;
gettime(&t);
hora1[i] = t.ti_hour;
minutos1[i] = t.ti_min;
hora2[i] = minutos2[i] = 0;
guardar(computadoras, hora1, hora2, minutos1, minutos2);
return;
}
else
{
cout << "Esa computadora ya esta ocupada" << endl;
return;
}
}

for(i = 0; i < 72; i++)
{
if(!computadoras[i]||(hora2[i] && minutos2[i]))
{
computadoras[i]=numero;
gettime(&t);
hora1[i]=t.ti_hour;
minutos1[i]=t.ti_min;
hora2[i]=minutos2[i]=0;
guardar(computadoras, hora1, hora2, minutos1, minutos2);
break;
}
}
cout<<"Su computadora es: "<<endl;
cout<<"Computadora "<<(i+1)<<endl;
}

// Funcion para borrar usuarios de la base de datos.

void borrarusuarios()
{
ofstream iusr;
iusr.open("C://Datos//Base de datos.txt", ostream::trunc);
}

// Funcion para borrar base de datos.

void borrartodo(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
char opc;
int clave=12212012;
int pasword;

cout<<"Insertar clave de administrador: ";
cin>>pasword;
if(clave==pasword)
{
cout<<"Borrar base de datos(s/n): ";
cin>>opc;
}
else
{
cout<<"Clave incorrecta"<<endl;
}

Pseudocodigo:

inicio
void lectura(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void guardar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void iniciar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void desplegar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void salir(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void asignar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
void borrartodo(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
int opcion, computadoras[72], hora1[72], hora2[72], minutos1[72], minutos2[72]
sigue char
time_t rawtime
struct tm * timeinfo
iniciar(computadoras, hora1, hora2, minutos1, minutos2)
lectura(computadoras, hora1, hora2, minutos1, minutos2)
do
{
print  "                                Menu principal"
print   “  “
time ( &rawtime )
timeinfo = localtime ( &rawtime )
printf (asctime (timeinfo) )
print  "********************************************************************************"
print   “  “
print  "Seleccionar accion"
print   “  “
print  "1)Entrada"
print  "2)Salida"
print  "3)Desplegar lista de computadoras"
print  "4)Utileria de base de datos"
print  "Opcion: "
read  opcion
switch(opcion)
{
case 1:
print  "                                Entrada"
print   “  “
time ( &rawtime )
timeinfo = localtime ( &rawtime )
printf (asctime (timeinfo) )
print  "********************************************************************************"
print   “  “
asignar(computadoras, hora1, hora2, minutos1, minutos2)
break
case 2:
print  "                                Salida"
print   “  “
time ( &rawtime )
timeinfo = localtime ( &rawtime )
printf (asctime (timeinfo) )
print  "********************************************************************************"
print   “  “
salir(computadoras, hora1, hora2, minutos1, minutos2)
break
case 3:
print  "                         Desplegar lista de computadoras"
print   “  “
time ( &rawtime )
timeinfo = localtime ( &rawtime )
printf (asctime (timeinfo) )
print  "********************************************************************************"
print   “  “
desplegar(computadoras, hora1, hora2, minutos1, minutos2)
break
case 4:
print  "                         Utileria de base de datos"
print   “  “
time ( &rawtime )
timeinfo = localtime ( &rawtime )
printf (asctime (timeinfo) )
print  "********************************************************************************"
print   “  “
borrartodo(computadoras, hora1, hora2, minutos1, minutos2)
break
default:
print  "Error en opcion:"
}
print  "Volver a menu principal? s/n: "
read  sigue
}
while(sigue=='s'||sigue=='S')
}
void reemplazarcaracteres(char *str, char o, char v)
{
char *p
while (p = strchr(str, o))
{
*p = v
}
}
void registrarusuario()
{
numero[16], nombre[128], carrera[128], semestre[16] char
ofstream iusr
iusr.open("C://Datos//Base de datos.txt", ifstream::app)
cin.ignore(9001, '\n')
print  "Numero: "
cin.getline(numero, 16)
print  "Nombre:"
cin.getline(nombre, 128)
print  "Carrera: "
cin.getline(carrera, 128)
print “Semestre: "
cin.getline(semestre, 16)
reemplazarcaracteres(carrera, ' ', '_')
reemplazarcaracteres(nombre, ' ', '_')
reemplazarcaracteres(semestre, ' ', '_')
iusr , numero , " " , nombre , " " , carrera , " " , semestre
}
bool buscarusuario(int numero, char nombre[128], char carrera[128], char semestre[16])
{
ifstream iusr
n int
iusr.open("C://Datos//Base de datos.txt")
while (iusr.good())
{
iusr   ,   n
if (n == numero)
{
iusr   ,   nombre   ,   carrera   ,   semestre
reemplazarcaracteres(nombre, '_', ' ')
reemplazarcaracteres(carrera, '_', ' ')
reemplazarcaracteres(semestre, '_', ' ')
}
iusr.ignore(9001, '  ')
}
}
void lectura(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
ifstream entrada
fnombre[128] char
time_t mt = time(0)
tm *lctm = localtime(&mt)
sprintf(fnombre, "C://Datos//%d-%d-%d.txt", lctm->tm_mday, lctm->tm_mon + 1, lctm->tm_year + 1900)
entrada.open(fnombre)
for(int i=0 to 72 step i++)
{
entrada   ,   computadoras[i]   ,   hora1[i]   ,   minutos1[i]   ,   hora2[i]   ,   minutos2[i]
}
}      
void guardar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
ofstream salida
fnombre[128] char
time_t mt = time(0)
tm *lctm = localtime(&mt)
sprintf(fnombre, "C://Datos//%d-%d-%d.txt", lctm->tm_mday, lctm->tm_mon + 1, lctm->tm_year + 1900)
salida.open(fnombre)
for(int i=0 to 72 step i++)
{
salida , computadoras[i] , " " , hora1[i] , " " , minutos1[i] , " " , hora2[i] , " " , minutos2[i]}
}
void iniciar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
for(int i=0 to 72 step i++)
{
computadoras[i]=hora1[i]=hora2[i]=minutos1[i]=minutos2[i]=0
}
}
void desplegar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
print   "Numero de control                Entrada                 salida"
for(int i = 0 to 72 step i++)
{
print  "Computadora " , (i+1) , "  " , computadoras[i] , (!computadoras[i] ? "   " : "  ") , hora1[i] , ":" , minutos1[i] ,  "  " , hora2[i] , ":" , minutos2[i]
}
}
void borrarregistro(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
iniciar(computadoras, hora1, hora2, minutos1, minutos2)
guardar(computadoras, hora1, hora2, minutos1, minutos2)
}                                                                                                      
void salir(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
struct time t
num int
print  "Salida"
print  "Numero de computadora: "
read  num
num--
gettime(&t)
hora2[num]=t.ti_hour
minutos2[num]=t.ti_min
guardar(computadoras, hora1, hora2, minutos1, minutos2)
}
void asignar(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
nombre[128], carrera[128], semestre[16], opc char
i, numero, comp int
struct time t
print   "Numero de control: "
read  numero
if (buscarusuario(numero, nombre, carrera, semestre))
{
print  "Alumno: " , nombre
print  "Carrera: " , carrera
print  "Semestre: " , semestre
}
Else
{
print  "No es alumno del plantel"
print  "Se recomienda registrar"
print  "Y pedir una identificacion"
print  "Desea registrar nuevo usuario?"
print  "s/n: "
read   opc
if(opc=='s'||opc=='S')
{
registrarusuario()
}
}
for(i = 0 to 72 step i++)
{
if (computadoras[i] == numero && !hora2[i] && !minutos2[i])
{
print   "Este alumno ya tiene asignada una computadora"
}
}
print   "Seleccionar computadora (s/n): "
read  opc
if (opc == 's' || opc == 'S')
{
print   "Computadoras disponibles"
for (i = 0 to 72 step i++)
{
if (!computadoras[i])
{
print   " # "  ,  (i+1)
}
}
print   "Computadora deseada: "
read  comp
comp--
if (!computadoras[comp] || (hora2[comp] && minutos2[comp]))
{
i=comp
computadoras[i] = numero
gettime(&t)
hora1[i] = t.ti_hour
minutos1[i] = t.ti_min
hora2[i] = minutos2[i] = 0
guardar(computadoras, hora1, hora2, minutos1, minutos2)
}
else
{
print   "Esa computadora ya esta ocupada"
}
}
for(i = 0 to 72 step i++)
{
if(!computadoras[i]||(hora2[i] && minutos2[i]))
{
computadoras[i]=numero
gettime(&t)
hora1[i]=t.ti_hour
minutos1[i]=t.ti_min
hora2[i]=minutos2[i]=0
guardar(computadoras, hora1, hora2, minutos1, minutos2)
break
}
}
print  "Su computadora es: "
print  "Computadora " , (i+1)
}
void borrarusuarios()
{
ofstream iusr
iusr.open("C://Datos//Base de datos.txt", ostream::trunc)
}
void borrartodo(int computadoras[72], int hora1[72], int hora2[72], int minutos1[72], int minutos2[72])
{
opc char
clave=12212012 int
pasword int
print  "Insertar clave de administrador: "
read  pasword
if(clave==pasword)
{
print  "Borrar base de datos(s/n): "
read  opc
}
else
{
print  "Clave incorrecta"
}
Fin

Programa:















No hay comentarios:

Publicar un comentario