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