<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NeoEGM.com &#187; Console</title>
	<atom:link href="http://www.neoegm.com/tag/console/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neoegm.com</link>
	<description>Knowledge is inside</description>
	<lastBuildDate>Mon, 08 Jul 2024 05:38:01 +0000</lastBuildDate>
	<language>es-ES</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Clase Lista simple para C++</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:55:36 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=976</guid>
		<description><![CDATA[Tal como publiqué hace algunos días la Clase String Simple para C++ como un ejercicio de aprendizaje de C++, ahora estoy liberando una Clase Lista simple para C++. La librería standard tiene una clase list. Pero, mientras se está aprendiendo, es una buena idea saber cómo poder desarrollar tu propia clase list. Esa es la [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Tal como publiqué hace algunos días la <a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/">Clase String Simple para C++</a> como un ejercicio de aprendizaje de C++, ahora estoy liberando una <strong>Clase Lista simple para C++</strong>.</p>
<p>La librería standard tiene una clase <em>list</em>. Pero, mientras se está aprendiendo, es una buena idea saber cómo poder desarrollar tu propia clase <em>list</em>.</p>
<p>Esa es la razón por la que hice la clase <em>List</em>. No está pensada para proyectos profesionales (para ellos, deberías utilizar la <em>list</em> de la librería standard), sino como una ayuda para aprender C++.</p>
<pre class="brush: cpp; title: ; notranslate">
template &lt;class TYPE&gt;
class List
{
	/* ... */

public:
	//Construction and destruction
	List() { /* ... */ }
	~List() { /* ... */ }
	
	List(const List&amp; rlList) { /* ... */ }
	
	//Assignment operator
	List&amp; operator=(const List&amp; rlList);

	//Information
	int Length() { /* ... */ }
	bool Empty() { /* ... */ }

	//Element managing
	int Add(TYPE&amp; rtData);
	TYPE* Elem(int nPos);
	bool Delete(int nPos);
	void DeleteAll();
	
	//Search
	int Find(TYPE&amp; rItem, int nStartAt = 0);

	//Operadores
	TYPE&amp; operator[](int nPos) { /* ... */ }	//Elem
	int operator&lt;&lt;(TYPE&amp; rdData) { /* ... */ }	//Add

protected:
	void FreeList();
	void Init() { /* ... */ }
};

//Output
template &lt;class TYPE&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, List&lt;TYPE&gt;&amp; rlList);
</pre>
<p><span id="more-976"></span></p>
<p>Este es un proyecto de ejemplo hecho para explicar la utilización de la clase <em>List</em>.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;

#include &quot;List.h&quot;
#include &quot;String.h&quot;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;List sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;-------------------&quot; &lt;&lt; endl &lt;&lt; endl;


	//-----------------------------
	cout &lt;&lt; &quot;&gt; Creating a list of strings... An empty string finishes the list...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt;String&gt; lStrings;
	String sTmp;
	
	do
	{
		cout &lt;&lt; &quot;&gt; String &quot; &lt;&lt; lStrings.Length()+1 &lt;&lt; &quot;: &quot;;
		cin &gt;&gt; sTmp;
		
		if (sTmp.Length())
			lStrings.Add(sTmp);
	} while (sTmp.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lStrings.Length() &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; lStrings;

	cout &lt;&lt; endl;
	//-----------------------------
	
	
	//-----------------------------
	do
	{
		cout &lt;&lt; &quot;&gt; Type a string to find in the list (exact match) [empty = end]: &quot;;
		cin &gt;&gt; sTmp;

		if (sTmp.Length())
		{
			int nFound = lStrings.Find(sTmp);
			
			if (nFound != -1)
			{
				lStrings.Delete(nFound);

				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; found at position &quot; &lt;&lt; nFound+1 &lt;&lt; &quot; and removed.&quot; &lt;&lt; endl &lt;&lt; endl;
				
				cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;

				if (!lStrings.Empty())
					cout &lt;&lt; lStrings;
				else
				{
					cout &lt;&lt; &quot;[Empty list]&quot; &lt;&lt; endl &lt;&lt; endl;
					break;
				}
			}
			else
				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; not found.&quot; &lt;&lt; endl;
		}
		
		cout &lt;&lt; endl;
	} while (sTmp.Length());
	
	cout &lt;&lt; endl;
	//-----------------------------

	//-----------------------------
	cout &lt;&lt; &quot;&gt; Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt; List&lt;String&gt; &gt; lLists;
	List&lt;String&gt; lTmpList;
	int nStrings = 0;

	do
	{
		lTmpList.DeleteAll();
		
		cout &lt;&lt; &quot;&gt; Loading list &quot; &lt;&lt; lLists.Length()+1 &lt;&lt; &quot;...&quot; &lt;&lt; endl;
		
		do
		{
			cout &lt;&lt; &quot;\t&gt; String &quot; &lt;&lt; lTmpList.Length()+1 &lt;&lt; &quot;: &quot;;
			cin &gt;&gt; sTmp;
			
			if (sTmp.Length())
			{
				lTmpList.Add(sTmp);
				nStrings++;
			}
		} while (sTmp.Length());
		
		if (lTmpList.Length())
			lLists.Add(lTmpList);
	} while (lTmpList.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lLists.Length() &lt;&lt; &quot; list(s) loaded, &quot; &lt;&lt; nStrings &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;&gt; Printing lists (standard method)...&quot; &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; lLists;

	cout &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing lists (custom method)...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	for (int i = 0; i &lt; lLists.Length(); i++)
	{
		List&lt;String&gt; *plList = lLists.Elem(i);

		if (plList)
		{
			cout &lt;&lt; &quot;- List &quot; &lt;&lt; i &lt;&lt; endl &lt;&lt; endl;
			cout &lt;&lt; *plList;
			cout &lt;&lt; endl;
		}
	}
	//-----------------------------

    return 0;
}
</pre>
<p>Y esta su salida:</p>

<pre class="console">
List sample project
-------------------

> Creating a list of strings... An empty string finishes the list...

> String 1: Test 1
> String 2: Test 2
> String 3: Test 3, a little bit longer
> String 4:

> Entry finished. 3 string(s) loaded.

> Printing list...

Test 1
Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Hello
> String "Hello" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" found at position 1 and removed.

> Printing list...

Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" not found.

> Type a string to find in the list (exact match) [empty = end]: test 2
> String "test 2" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 2
> String "Test 2" found at position 1 and removed.

> Printing list...

Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 3, a little bit longer
> String "Test 3, a little bit longer" found at position 1 and removed.

> Printing list...

[Empty list]


> Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...

> Loading list 1...
        > String 1: Test 1a
        > String 2: Test 1b
        > String 3: Test 1c
        > String 4:
> Loading list 2...
        > String 1: Test 2a
        > String 2: Test 2b
        > String 3: Test 2c
        > String 4: Test 2d
        > String 5:
> Loading list 3...
        > String 1: Test 3a
        > String 2: Test 3b
        > String 3: This is a looooooooooooooooooooooong string
        > String 4:
> Loading list 4...
        > String 1:

> Entry finished. 3 list(s) loaded, 10 string(s) loaded.


> Printing lists (standard method)...

Test 1a
Test 1b
Test 1c

Test 2a
Test 2b
Test 2c
Test 2d

Test 3a
Test 3b
This is a looooooooooooooooooooooong string


> Printing lists (custom method)...

- List 0

Test 1a
Test 1b
Test 1c

- List 1

Test 2a
Test 2b
Test 2c
Test 2d

- List 2

Test 3a
Test 3b
This is a looooooooooooooooooooooong string

</pre>
<p>Este proyecto también utiliza la <a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/">Clase String simple para C++</a> para mostrar a la clase List trabajando con clases personales. El mismo código podría utilizarse perfectamente reemplazando &#8220;String&#8221; por &#8220;string&#8221; e incluyendo los headers de la versión standard de <em>string</em>.</p>
<p>El código es completamente portable.</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete). En Linux, fue compilado utilizando el compilador GNU GCC.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">String está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p><br/><br />
También probé el proyecto para verificar la ausencia de fugas de memoria utilizando el <a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/">cppMemDbg – Librería fácil de usar de detección de fugas de memoria para C++</a> y no encontró ningún tipo de problema&#8230;</p>
<p>Podés descargar la salida de la librería y el proyecto adaptado para cppMemDbg aquí:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_cppMemDbg_Output.txt">Descargar salida de cppMemDbg</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0_cppMemDbg.zip">Descargar Proyecto Adaptado 1.0</a></p>
</div>
<p><br/><br />
Ahora, finalmente, los links de descarga:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_1.0.zip">Descargar Clase List 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0.zip">Descargar Proyecto de Ejemplo 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="c list class">c list class</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="list class c">list class c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="class list c">class list c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="lista simple c">lista simple c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="clase lista c">clase lista c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="LISTA SIMPLE EN C">LISTA SIMPLE EN C</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="listas simples en c">listas simples en c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="clase lista en c">clase lista en c</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="c class list">c class list</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" title="list class in c">list class in c</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++">cppMemDbg &#8211; Librería fácil de usar de detección de fugas de memoria para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Control de Asistencia</title>
		<link>http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/</link>
		<comments>http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:00:42 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Attendance]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=476</guid>
		<description><![CDATA[&#8220;Control de Asistencia&#8221; es una aplicación de consola hecha como un ejercicio para integrar los diferentes conceptos de C++ enseñados en clase hasta la mitad del año. El objetivo principal es ser capaz de desarrollar un control de asistencia de personal que registre los horarios (y justificaciones, si corresponde) de cada vez que los empleados [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Control de Asistencia (Versión wxWidgets)">Control de Asistencia (Versión wxWidgets) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>&#8220;Control de Asistencia&#8221; es una aplicación de consola hecha como un <strong>ejercicio</strong> para integrar los diferentes conceptos de C++ enseñados en clase hasta la mitad del año.</p>
<p>El objetivo principal es ser capaz de desarrollar un control de asistencia de personal que registre los horarios (y justificaciones, si corresponde) de cada vez que los empleados lleguen, vayan a almorzar, vuelvan del almuerzo o retornen a sus casas.</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI:

</pre>
<p><span id="more-476"></span></p>
<p>El enunciado completo dice:</p>
<blockquote><p>
Hacer un sistema de control de asistencia de personal (para posterior verificación de ausencias y llegadas tarde con sus correspondientes justificaciones) y su parte de gestión privada (alta de usuarios y visualización de datos obtenidos a partir de la carga).</p>
<p>La pantalla principal debe quedar a la espera de DNI y contraseña.</p>
<p>Debe haber un usuario prefijado como administrador con DNI = -1234 y Contraseña = prueba.</p>
<p>En el caso de ser un usuario administrador, se podrá acceder a la parte de gestión, con las siguientes opciones:</p>
<p>	1- Alta de usuario<br />
	2- Lista de usuarios (datos adquiridos)<br />
	3- Salida a archivo<br />
	4- Cerrar la aplicación<br />
	0- Volver a la pantalla principal</p>
<p>De lo contrario, se solicitará qué tipo de acción se está realizando (Ingreso, salida, salida a almuerzo o retorno de almuerzo) y su justificación en el caso de que corresponda, y se procederá a guardar dichos datos junto a la hora actual en un registro de &#8220;Eventos&#8221; del usuario que corresponda.</p>
<p>Los datos necesarios de cada usuario son:<br />
	DNI<br />
	Nombre completo<br />
	Contraseña<br />
	Si es administrador<br />
	Eventos relacionados</p>
<p>Se desea utilizar como base una clase &#8220;PersonaBasica&#8221; que ya fue desarrollada por el departamento de sistemas, cuyo encabezado &#8220;PersonaBasica.h&#8221; se adjunta a<br />
continuación:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &quot;String.h&quot;
#include &lt;iostream&gt;

class PersonaBasica
{
	String m_sNombreCompleto;
	long m_nDNI;

public:
	//Construcción
	PersonaBasica() { m_nDNI = 0; }

	//Encapsulaciones
	long DNI() const { return m_nDNI; }
	void DNI(long val) { m_nDNI = val; }

	String NombreCompleto() const { return m_sNombreCompleto; }
	void NombreCompleto(String val) { m_sNombreCompleto = val; }
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, PersonaBasica&amp; rpPersonaBasica);
</pre>
<p>Nota: no se conocen en absoluto los tamaños de los datos a ingresar y se comenta que los usuarios suelen escribir justificaciones bastante elaboradas.
</p></blockquote>
<p>Cuando se inicia el programa, sólo se puede ingresar como administrador (-1234:prueba)&#8230;</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI: -1234
Contraseña: prueba
Usuario "Administrador" reconocido.

Presione una tecla para continuar...

</pre>
<p>Luego, se llega al menú de administración:</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada:

</pre>
<p>El siguiente paso debería ser dar de alta a los diferentes usuarios utilizando la primera opción:</p>

<pre class="console">Sistema de control de asistencia de personal (Alta de usuario)
--------------------------------------------------------------

DNI: 12345678
Nombre completo: Pedro Gutierrez
Password: 123bbb
Administrador [1 = Sí/0 = No]: 0

Persona agregada satisfatoriamente.

Presione una tecla para continuar...

</pre>
<p>Luego de esto, ellos podrán ingresar por sí mismos:</p>

<pre class="console">Sistema de control de asistencia de personal
--------------------------------------------

DNI: 12345678
Contraseña: 123bbb
Usuario "Pedro Gutierrez" reconocido.

Presione una tecla para continuar...

</pre>
<p>Para llegar a la pantalla de asistencia y así poder registrar sus acciones:</p>

<pre class="console">Asistencia de "Pedro Gutierrez"
-------------------------------

Tipo de asistencia:
        1- Ingreso
        2- Salida
        3- Salida a almorzar
        4- Vuelta de almorzar
Selección: 1

Justificación (si corresponde): Llegué tarde porque había
corte de calles.

Evento agregado satisfactoriamente.

Presione una tecla para continuar...

</pre>
<p>Cada una de ellas hasta que vuelvan a sus casas&#8230;</p>

<pre class="console">Asistencia de "Pedro Gutierrez"
-------------------------------

Tipo de asistencia:
        1- Ingreso
        2- Salida
        3- Salida a almorzar
        4- Vuelta de almorzar
Selección: 2

Justificación (si corresponde): Me voy más temprano porque
tengo que llevar a mi hijo al médico.

Evento agregado satisfactoriamente.

Presione una tecla para continuar...

</pre>
<p>Cuando cualquier administrador desee observar el listado completo de usuarios y acciones, simplemente tiene que ingresar e ir a la segunda opción del menú de administración.</p>

<pre class="console">Sistema de control de asistencia de personal (Lista de
usuarios)
------------------------------------------------------

DNI: -1234
Nombre completo: Administrador
Password: ********
Administrador: 1
Cantidad de eventos: 0
Eventos:

[Esta persona no posee eventos]


DNI: 12345678
Nombre completo: Pedro Gutierrez
Password: ********
Administrador: 0
Cantidad de eventos: 4
Eventos:

Hora: 28/07/2009 14:13:27
Tipo: Ingreso
Justificación: Llegué tarde porque había corte de calles.

Hora: 28/07/2009 14:14:23
Tipo: Salida a almorzar
Justificación:

Hora: 28/07/2009 14:14:44
Tipo: Vuelta de almorzar
Justificación:

Hora: 28/07/2009 14:14:52
Tipo: Salida
Justificación: Me voy más temprano porque tengo que llevar a
mi hijo al médico.

Presione una tecla para continuar...

</pre>
<p>Si lo desea, puede guardar esa información a un archivo utilizando, en cambio, la tercera opción:</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada: 3

Ingrese la ruta del archivo a guardar: c:asistencia.txt
Archivo guardado satisfactoriamente

Presione una tecla para continuar...

</pre>
<p>Finalmente, puede cerrar el programa yendo a la cuarta opción (perdiendo todos los datos)&#8230;</p>

<pre class="console">Sistema de control de asistencia de personal (ADMNISTRACION)
------------------------------------------------------------

1- Alta de usuario
2- Lista de usuarios (datos adquiridos)
3- Salida a archivo
4- Cerrar la aplicación
0- Volver a la pantalla principal

Ingrese la opción deseada: 4
Saliendo de la aplicación...

Presione una tecla para continuar...

</pre>
<p>Esa es la idea de la aplicación&#8230;</p>
<p>Ahora voy a dejar los links para aquellos que no quieran resolverlo por sí mismos (o los que quieran ejecutarlo y verlo funcionando).</p>
<p>El código es portable entre Linux y Windows (lo testeé personalmente en ambas plataformas y funcionó idénticamente).</p>
<p>Ha sido desarrollado, compilado y testeado utilizando <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> para Windows con el <a href="http://www.mingw.org/">compilador MinGW</a> (incluído en el paquete). En Linux, fue compilado utilizando el compilador GNU GCC.</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">ControlAsistencia está liberado bajo la licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/control-asistencia/ControlAsistencia_1.01.zip">Descargar ControlAsistencia v1.01</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/control-asistencia/ControlAsistencia_1.01_Source.zip">Descargar v1.01 Source Code</a></p>
</div>
<p><strong>Actualización:</strong> bug menor solucionado en String.cpp => version 1.01<br />
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia de personal en excel">control de asistencia de personal en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia en excel">control de asistencia en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="asistencia de personal en excel">asistencia de personal en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="como hacer un control de asistencia en excel">como hacer un control de asistencia en excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia">control de asistencia</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="Control de Asistencia GNU">Control de Asistencia GNU</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia gpl">control de asistencia gpl</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia de personal">control de asistencia de personal</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control asistencia excel">control asistencia excel</a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" title="control de asistencia linux">control de asistencia linux</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/wxwidgets/wx-control-de-asistencia/" rel="bookmark" title="Control de Asistencia (Versión wxWidgets)">Control de Asistencia (Versión wxWidgets) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Clase Lista simple para C++">Clase Lista simple para C++ </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Clase String simple para C++">Clase String simple para C++ </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wake On LAN (Prender remotamente una computadora)</title>
		<link>http://www.neoegm.com/es/tech/software/tools/wake-on-lan/</link>
		<comments>http://www.neoegm.com/es/tech/software/tools/wake-on-lan/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 22:00:36 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[LAN]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Power]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Tool]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=414</guid>
		<description><![CDATA[¿Alguna vez te preguntaste cómo podrías prender una computadora remotamente? Bueno, con este programa podés hacerlo! Tenés que configurar la computadora remote (la que va a ser prendida) para que soporte la funcionalidad Wake-On-LAN. Esto se realiza desde la configuración de la CMOS buscando la sección de &#8220;Power/ACPI&#8221; o algo por el estilo. Luego, tenés [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/software/tools/uptime/" rel="bookmark" title="UpTime (Cuánto tiempo estuvo prendida la computadora)">UpTime (Cuánto tiempo estuvo prendida la computadora) </a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/guitar-trainer/" rel="bookmark" title="Guitar Trainer (Entrenador de Guitarra)">Guitar Trainer (Entrenador de Guitarra) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>¿Alguna vez te preguntaste cómo podrías prender una computadora remotamente?</p>
<p>Bueno, con este programa podés hacerlo!</p>

<pre class="console">C:\>wol

Wake-On-Lan (WOL) Tool v1.0 by NeoEGM
http://www.neoegm.com/software/wake-on-lan/
-------------------------------------------

Usage: wol <mac address>

Wakes the computer with the specified MAC address.

Accepted MAC address formats: 01-4B-8E-00-52-A1
                              01-4b-8e-00-52-a1
                              01:4B:8E:00:52:A1
                              01:4b:8e:00:52:a1
                              014B.8E00.52A1
                              014b.8e00.52a1
                              014b8e0052a1
                              014B8E0052A1

</pre>
<p><span id="more-414"></span></p>
<p>Tenés que configurar la computadora remote (la que va a ser prendida) para que soporte la funcionalidad Wake-On-LAN. Esto se realiza desde la configuración de la CMOS buscando la sección de &#8220;Power/ACPI&#8221; o algo por el estilo.</p>
<p>Luego, tenés que averiguar la dirección MAC (a veces llamada &#8220;Dirección Física&#8221;) de la placa de red conectada a la red. En Windows esto es realizado haciendo esto en la consola:</p>

<pre class="console">C:\>ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : mypc1
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Unknown
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Local Area Connection:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Marvell Yukon 88E8056
PCI-E Gigabit Ethernet Controller
   Physical Address. . . . . . . . . : 00-1F-C2-14-B3-F4
   DHCP Enabled. . . . . . . . . . . : No
   IP Address. . . . . . . . . . . . : 192.168.0.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.0.254
   DNS Servers . . . . . . . . . . . : 192.168.0.254

</pre>
<p>En este caso, es &#8220;00-1F-C2-14-B3-F4&#8243;, así que el programa puede ser utilizado así:</p>

<pre class="console">C:\>wol 00-1F-C2-14-B3-F4

Wake-On-Lan (WOL) Tool v1.0 by NeoEGM
http://www.neoegm.com/software/wake-on-lan/
-------------------------------------------

Wake-up packet sent to MAC address 00-1F-C2-14-B3-F4.

</pre>
<p>Hay algunas restricciones que aplican al hardware, pero un resumen podría ser: la mother debe soportar la funcionalidad &#8220;Wake-On-Lan (WOL)&#8221; y la placa de red debe tener un cable llamado de ese modo conectado a la mother. <strong>Si la mother de la computadora que querés prender no es demasiado vieja y tiene una placa de red integrada (on-board), entonces probablemente funcione.</strong></p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">WakeOnLan está liberado bajo una licencia <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p>Ahora, los links&#8230;</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/wake-on-lan/WakeOnLan_1.0.zip">Descargar WakeOnLan v1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/wake-on-lan/WakeOnLan_1.0_Source.zip">Descargar v1.0 Source Code</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="marvell yukon 88E8056 wake on lan">marvell yukon 88E8056 wake on lan</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="marvell yukon 88e8056 wol">marvell yukon 88e8056 wol</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="wake on lan GPL">wake on lan GPL</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="wake on lan C">wake on lan C</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="Marvell Yukon 88E8056 PCI-E Gigabit Ethernet Controller WAKE ON LAN">Marvell Yukon 88E8056 PCI-E Gigabit Ethernet Controller WAKE ON LAN</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="Marvell Yukon 88E8056 PCI-E Gigabit Ethernet Controller WOL">Marvell Yukon 88E8056 PCI-E Gigabit Ethernet Controller WOL</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="88e8056 wol">88e8056 wol</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="Marvell 88E8056 Wol">Marvell 88E8056 Wol</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="Marvell 88E8056 wake on lan">Marvell 88E8056 wake on lan</a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/wake-on-lan/" title="marvell yukon wake on lan">marvell yukon wake on lan</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="http://www.neoegm.com/es/tech/software/tools/uptime/" rel="bookmark" title="UpTime (Cuánto tiempo estuvo prendida la computadora)">UpTime (Cuánto tiempo estuvo prendida la computadora) </a></li>
<li><a href="http://www.neoegm.com/es/tech/software/tools/guitar-trainer/" rel="bookmark" title="Guitar Trainer (Entrenador de Guitarra)">Guitar Trainer (Entrenador de Guitarra) </a></li>
<li><a href="http://www.neoegm.com/es/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Control de Asistencia">Control de Asistencia </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.neoegm.com/es/tech/software/tools/wake-on-lan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
