Gestión de horas de trabajo

Iniciado por JuszR, 16 Noviembre 2010, 16:08 PM

0 Miembros y 1 Visitante están viendo este tema.

JuszR

Estoy intentando hacer un programa básico para el trabajo, de consola.
Básicamente es un programa que pida 2 entradas 1:
1) Cuántas horas se trabajó hoy (ya sea "10 horas", o "8.00 - 18.00" y calcular cuantas horas fueron), con fecha.
2) Cuánto se cobra la hora (esto solo una vez).

Pensé en hacerlo sencillo y meter todos los datos en un archivo (txt) y al final del mes (30) (o cada vez que se actualice el archivo) que me sume toda la primer columna y me de el total, algo así:

Cita de: Archivo de Texto10 horas (8.00 - 18.00) / [8.00 - 18.00] - 16, Nov
8 horas (8.00 - 16.00) - 17, Nov
8 horas (8.00 - 16.00) - 18, Nov
------------------------------------------------------------------
Total horas: 450 horas.
Hora ($): 30.
Total: $13500.


¿Alguna otra idea?

(Punteros todavía no estudié).
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

anonimo12121

Prueba hacerlo a tu manera , y haces las cuentas a mano si sale bien enorabuena.
si no pide ayuda .
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

JuszR

#2
Bueno, adjunto aquí los archivos para el que los quiera ver. Se aceptan críticas, solo tengan en cuenta que obviamente no está terminado, es mi primer programa "interesante" y que no voy a la uni todavía, aprendí todo por la pc.
Me gustaría más que nada que me dijeran qué se podría optimizar/mejorar en el código. ;-)

main.cpp
Código (cpp) [Seleccionar]
//
// Name: AdPa
// Version: 0.9
// Description: Prints out hours as many hours as you worked in a file and gives you the total amount
// that you will get.
// Author: (c) Leo Juszkiewicz <leo.jr90@yahoo.com>
// License: Freeware
//

#include "stdafx.h"
#include <iostream>
#include "Functions.h"
#include <fstream> // file i/o
#include <windows.h> // Sleep()
#include <string>
#include <cstdio> // remove()
#include <ctime>
#include <iomanip>
#include <vector>

using namespace std;

const double versionPrograma = 0.9;

int main()
{
const char nombArchivo[] = "horas.txt";
system("title AdPa ");
system("COLOR 1E");
do
{
system("cls");
/*char fecha[9];
_strdate_s(fecha);
cout << fecha << endl;*/
Raya();
cout << "\t\tBienvenido a AdPa " << versionPrograma << endl;
Raya();

cout << endl << "Selecciona una opcion: " << endl;
cout << endl << "\t 1. Agregar horas" << endl;
cout << endl << "\t 2. Ver archivo" << endl;
cout << endl << "\t 3. Eliminar archivo" << endl;
cout << endl << "\t 4. Hacer cuenta total" << endl;
cout << endl << "\t 5. Licencia" << endl;
cout << endl << "\t 6. SALIR" << endl << endl;
cin >> Opcion;



switch (Opcion)
{

case 1:
{

int nuevo = 0;
// Primero leemos para ver si existe o no
ifstream Archivo(nombArchivo);
if (Archivo)
{
cout << "\nArchivo existente... Abriendo para escritura" << endl << endl;
// No escribir "titulo"
nuevo = 1;
}
Archivo.close();

ofstream escrArchivo(nombArchivo, ios::app);

char tiempo[25];

cout << "\nCuantas horas trabajaste hoy? (ej. 8 7.00-15.00)" << endl;
cin.ignore();
cin.getline(tiempo, 25);

// Si no existe, escribir esto...
if(nuevo == 0)
{
escrArchivo << "Horas\t Horario" << endl;
escrArchivo << "-----------------------------------" << endl;
}

// Escribe las horas en el archivo
for(unsigned int i = 0; i < strlen(tiempo); i++)
{
if(tiempo[i] == ' ')
tiempo[i] = '\t';

escrArchivo << tiempo[i];
}

// Nueva linea para la proxima vez
escrArchivo << endl;

escrArchivo.close();
Final();
}
break;

case 2:
{
ifstream lee;
lee.open(nombArchivo);
if (!lee)
{
cout << "\nERROR. El archivo no existe (lo renombraste/eliminaste?)" << endl << endl;
Sleep(4000);
break;
}
cout << endl << "Quieres ver el archivo en la consola (1 - aqui) o en notepad (2)?" << endl;
int verArch = -1;
cin >> verArch;

// Notepad
if(verArch == 2)
{
system(nombArchivo);
}
else
{
while(lee)
{
std::string Archivo;
getline(lee, Archivo);
cout << Archivo << endl;
// Paramos el programa para que se pueda ver el archivo en consola
cin.get();
}
lee.close();
}

Final();
}
break;

case 3:
{
ifstream eliminaArch(nombArchivo);
if(eliminaArch.fail())
{
cerr << "El archivo no existe! (Que querias eliminar?)" << endl;
Sleep(5000);
}
else
{
cout << "Estas seguro/a que quieres eliminar el archivo? (S - Si | N - No)" << endl;
char elim = '0';
cin >> elim;

if(elim == 'S' || elim == 's')
{
eliminaArch.close();
cout << endl << "Eliminando... " << endl;
ProgressBar();
Sleep(1000);

if (remove(nombArchivo) != 0)
cout << endl << "Hubo un error tratando de eliminar el archivo" << endl;
else
cout << "ELIMINADO" << endl;
}
}

eliminaArch.close();

Final();
}
break;

case 4:
{
// Si no se puede abrir, ni siquiera escribas...
ifstream haceCuenta(nombArchivo);
if (!haceCuenta)
{
cerr << "ERROR. No se puede abrir el archivo o no existe" << endl;
Sleep(4000);
break;
}
cout << "Cuanto cobras por hora? (solo se guardara en el archivo, nadie se enterara ;) )" << endl;
float cobroHora;
cin >> cobroHora;
if(cobroHora <= 20.70)
cout << endl << "Bueno, como los ishiros. Hay que ponerse a estudiar!" << endl;
else if(cobroHora > 20.70 && cobroHora < 25.0)
cout << endl <<  "Sueldo razonable" << endl;
else if(cobroHora > 25.0)
cout << endl <<  "Ojala todos cobraran eso" << endl;


vector<int> vint;
int n;
string str;
while(!haceCuenta.eof() && !haceCuenta.fail())
{
if(!isdigit(haceCuenta.peek()))
{
getline(haceCuenta, str);
continue;
}
haceCuenta >> n;
vint.push_back(n);
getline(haceCuenta, str);
}
if(!haceCuenta.eof())
{
cout << "Error leyendo el archivo" << endl;
return -1;       
}
int totalHoras=0;
for(vector<int>::size_type x=0; x<vint.size(); ++x)
{
cout << setw(2) << vint[x] << endl;
totalHoras += vint[x];
}
cout << endl << "Haciendo cuenta... " << endl;
ProgressBar();
Sleep(1000);
ofstream escribe (nombArchivo, ios::app);
escribe << endl << "----------------------------" << endl;
escribe << "TOTAL HORAS: " << totalHoras << endl;
escribe << "HORA: " << cobroHora << " shekel" << endl;
escribe << "SUELDO TOTAL: " << static_cast<float>(totalHoras * cobroHora) << " shekel";

cout << "HORAS: " << totalHoras << endl;
cout << "SUELDO TOTAL: " << static_cast<float>(totalHoras * cobroHora) << endl;


Final();
}
break;

case 5:
system("cls");
system("COLOR A");
Raya();
cout << "\a\t\t\tLICENCIA" << endl;
Raya();
//setlocale(LC_ALL, "spanish");
cout << "AdPa " << versionPrograma <<
" es freeware, lo cual implica que es distribuido gratuitamente. " <<
"\nPuedes copiar, distribuir, modificar (si sabes, claro) total o parcialmente" <<
" este programa, siempre y cuando reserves derechos de autor.\n\n" <<
"\nDudas? Sugerencias? Escribeme... <leo.jr90@yahoo.com>\n\n" <<
"\t (c) Leonardo Juszkiewicz";
cin.ignore();
cin.get();
break;

default:
// Si presiona 6 (salir) no mostrar esto
cin.ignore();
if(Opcion != 6)
{
cerr << "Opcion no valida";
Sleep(4000);
}
break;

}

} while(Opcion != 6);

cout << endl << "Gracias por usar AdPa " << versionPrograma << endl;
Sleep(2500);

return 0;
}


Functions.h
Código (cpp) [Seleccionar]
// Funciones y declaraciones de ellas para main.cpp
#ifndef FUNC_H
#define FUNC_H


#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

int Opcion = 400;

// Imprime una raya para dividir (-)
void Raya()
{
for(int i = 0; i <= 60; i++)
{
cout << "-";

if (i == 60)
cout << endl;
}
}

// Progress bar
void ProgressBar()
{
char cargador[] = {'\\','|','/','-','|'};

for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 5; j++)
{
cout << cargador[j] << "\r";
Sleep(100);
}
}

}


// Mensaje al final de la operacion
void Final()
{
cout << endl << "\n[Presiona 6 para salir. Una tecla diferente para otra operacion]" << endl;
cin >> Opcion;
}

#endif
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]