Archivo

Archive for the ‘.NET’ Category

Crear DLL en C# .NET y llamarla desde JavaScript

Hoy estaba creando un Gadget para Windows 7 con HTML y Javascript, Lo malo es que el gadget tenía que procesar mucho, por lo que aveces se pegaba el navegador, asi que se me ocurrio crear un programa en C# para que el procesamiento lo hiciera .NET y Javascript solo fuera el puente entre la parte grafica (HTML) y el proceso (.NET)….Para eso investigue sobre  librerías en .NET y Interoperabilidad COM lo que me parecio bastante útil he interesante ya que puedo ocupar una librería casi desde cualquier otro lenguaje. En este ejemplo mostraré como usar una DLL escrita en C# desde JavaScript.

Parte 1 Libreria C#

Bueno lo primero es Ejecutar Visual Studio como Administrador

Una vez abierto Nos vamos a :
File / New / Proyecto

Ahora elegimos Class Library y le damos un nombre a nuestro Proyecto

Ya ahora en la misma Class1 que nos auto generó empezaremos a programar. Lo primero es crear una GUID ,una clave que nos identificará nuestra librería, para eso vamos a
Tools / Crear GUID

Seleccionamos la opcion 2 Define GUID y presionamos el boton Copy

Lo que esta en verde claro es nuestra GUID.

Para que Class1 pueda ser visible desde el exterior es necesario importar System.Runtime.InteropServices y hacer unas declaraciones en la clase

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace TestLib {
    [ComVisibleAttribute(true)]  //Deja la clase visible para COM
    [Guid("134FC6AB-E594-4e5b-84F2-5CC612FF69D3")] //GUID que generamos, Identificador de la Libreria
    [ProgId("TestLib.Class")] //Identificador para poder Acceder a esta clase desde el exterior
    public class Class1 {
        public string Hola() {
            return "Hola Mundo desde .NET";
        }
    }
}

Una vez listo el código debemos ir a las propiedades del proyecto

Una vez dentro de las propiedades nos dirigimos a Generar y chequeamos la opción  Registrar para interoperabilidad COM.

Esto permitirá que al generar nuestro proyecto, la librería quede en el registro de windows de la maquina donde se generó, para así poderla ocupar.

Por ultimo generamos nuestra Libreria

------ Operación Generar iniciada: proyecto: TestLib, configuración: Debug Any CPU ------
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\TestLib.dll /target:library Class1.cs Properties\AssemblyInfo.cs

Compile complete -- 0 errors, 0 warnings
TestLib -> C:\Users\Esteban\Documents\Visual Studio 2008\Projects\TestLib\TestLib\bin\Debug\TestLib.dll
========== Generar: 1 correctos o actualizados, 0 incorrectos, 0 omitidos ==========

Ahora vamos a la carpeta Bin/Debug de nuestro proyecto y debería encontrarse nuestra Librería

Parte 2 HTML + JavaScript

Con la DLL lista ahora solo queda programar la “interfaz gráfica”, en verdad solo mostraré el texto traído desde el método de la librería por una alerta xD

para ello es el siguiente código

<html>
	<head>
		<script type="text/javascript">
			/* Creando una instancia de ActiveXObject para poder acceder a nuestra libreria */
			var obj = new ActiveXObject("TestLib.Class"); /* ProgId de la Clase */
			alert(obj.Hola()); /* llamando al metodo Hola de la DLL */
		</script>
	</head>
	<body>
		<!-- Cuerpo -->
	</body>
</html>

El Anterior código lo guardaré, para testear, con extensión HTA


Y por ultimo Ejecutamos la aplication.hta y debería mostrarnos la alerta con el texto que retorna nuestra librería

Parte 3 Registro Manual para Interoperabilidad COM

Bueno mas de alguno debe preguntarse como es que se linquea la dll que generé (TestLib.dll) con ActiveXObject(“TestLib.Class”); porque no le paso la ruta de la libreria ni nada por el estilo. Bueno lo que hizo Visual Studio al generar el archivo TestLib.dll fue guardar en el registro de windows la ubicación de la DLL y lo asoció a TestLib.Class.
Entonces si ustedes Quieren Ocupar esta dll en sus maquinas no podrán porque en su registro no existe dicha asociación lanzandoles un error como éste:

Para que puedan testearla en sus pcs les dejo un archivo.reg que hice para registrar la DLL.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}]
@="TestLib.Class1"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
@="mscoree.dll"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"Assembly"="TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"Class"="TestLib.Class1"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"CodeBase"="file:///C:/JavaScript + Libreria C Sharp/TestLib.dll"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"RuntimeVersion"="v2.0.50727"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32]
"ThreadingModel"="Both"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"Assembly"="TestLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"Class"="TestLib.Class1"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"CodeBase"="file:///C:/JavaScript + Libreria C Sharp/TestLib.dll"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\InprocServer32\1.0.0.0]
"RuntimeVersion"="v2.0.50727"
[HKEY_CLASSES_ROOT\CLSID\{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}\ProgId]
@="TestLib.Class"
[HKEY_CLASSES_ROOT\TestLib.Class]
@="TestLib.Class1"
[HKEY_CLASSES_ROOT\TestLib.Class\CLSID]
@="{134FC6AB-E594-4e5b-84F2-5CC612FF69D3}"

Eso lo guardan como InteroperabilidadCOM.reg lo ejecutan y luego de ejecutarlo se supone que debería funcionales en sus maquinas la DLL, ya que fue registrada.

Ojo:

"CodeBase"="file:///C:/JavaScript + Libreria C Sharp/TestLib.dll"

Deben cambiar C:/JavaScript + Libreria C Sharp/TestLib.dll por la ruta donde ustedes tengan la DLL.

Con esto se puede ampliar mucho mas la capacidad de sus aplicaciones porque ahora no es solamente javascript sino que tiene por debajo el poder y fortaleza de .NET y su gran cantidad de clases y librerías ademas de su rápido procesamiento.

Código de Fuente:

http://estebanfuentealba.net/ejemplos/JavaScript + Libreria C Sharp.rar

Espero que les sirva esto, es solo una idea xD

Saludos!

Anuncios

Mail Bomber en C# Modo consola

septiembre 14, 2009 7 comentarios

Este es un mail bomber que hice cuando recien estaba aprendiendo a programar en c#

asi que es un caos de codigo… aqui le dejo la clase correo

y las cuentas mandaba a un amigo que se creo como 20 cuentas de gmail ajajjajajaj xD al final la bloquearon todas por abusar del servicio XDDD!! asi que tomen esto como ejemplo , por que asi tal como esta, no les funcionaran….


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Net;
namespace mailer
{
class ClsCorreo
{

public string EnviarCorreo(string para, string titulo, string contenido,string de,string nombre)
{

System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress(de, nombre, System.Text.Encoding.UTF8);
msg.S	ubject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("usuario", "pass");
client.Port = 25;
client.Host = "127.0.0.1";
client.EnableSsl = false;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string send(string para, string titulo, string contenido,string de,string namefalso)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress(de, namefalso, System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential();
client.Port = 25;
client.Host = "127.0.0.1";
client.EnableSsl = false;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo3(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 591", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailbomber591", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo2(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 59", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailbomber59", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo4(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 592", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailbomber592", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo5(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 3000", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailerbot3000", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo6(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 592", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailbomber593", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo7(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 592", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailbomber594", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
public string EnviarCorreo8(string para, string titulo, string contenido)
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(para);
msg.From = new System.Net.Mail.MailAddress("mail@forward.com", "MailerBot 592", System.Text.Encoding.UTF8);
msg.Subject = titulo;
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.Body = contenido;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;

System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();

client.Credentials = new System.Net.NetworkCredential("mailbomber595", "a123456789");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
try
{
client.Send(msg);
}
catch (Exception ex)
{
Console.WriteLine("Error " + ex);
}
return "";
}
}
}

Y la clase main (Repito , el codigo es una $%%#”#$)


using System;
using System.Collections.Generic;
using System.Text;

namespace mailer
{
class Program
{
static void Main(String[] args)
{
ClsCorreo mail = new ClsCorreo();
int i,opcion;

do
{
Console.WriteLine(" ********  Mail Bomber Anonymous By Pablo Videla ********");
Console.WriteLine("1.- Enviar correo con MailBomber2009");
Console.WriteLine("2.- Enviar correo con su mail personal");
Console.WriteLine("3.- Enviar correo con smpt localhost");
Console.WriteLine("4.- Enviar mail con mailbomber59");
Console.WriteLine("5.- Enviar mail con mailbomber 591");
Console.WriteLine("6.- Enviar mail con mailBomber 592");
Console.WriteLine("7.- Enviar mail con bomber 3000");
Console.WriteLine("8.- Enviar mail con bomber 593");
Console.WriteLine("9.- Enviar mail con bomber 594");
Console.WriteLine("10.- Enviar mail con bomber 595");
Console.WriteLine("11.- Salir");

opcion = int.Parse(Console.ReadLine());

switch (opcion)
{
case 1:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese nombre falso");
string nombre = Console.ReadLine();
Console.WriteLine("Ingrese mail falso");
string de = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo(m, asunto, mensaje,de,nombre);
Console.WriteLine("Vas en el mail ["+i+"]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;

case 2:
Console.WriteLine("Pronto...");
break;
case 3:
/* try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
Console.WriteLine("Mail falso");
string de = Console.ReadLine();
Console.WriteLine("Nombre falso");
string nombrefalso = Console.ReadLine();
for (i = 0; i < cantidad; i++)
{
mail.send(m, asunto, mensaje,de,nombrefalso);
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}*/
Console.WriteLine("Pronto.. en la nueva version");
break;
case 4:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo2(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;
case 5:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo3(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;
case 6:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo4(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;
case 7:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo5(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;
case 8:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo6(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;
case 9:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo7(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;
case 10:
try
{
Console.WriteLine("Ingrese mail de la victima");
string m = Console.ReadLine();
Console.WriteLine("Ingrese asunto");
string asunto = Console.ReadLine();
Console.WriteLine("Escriba el mensaje");
string mensaje = Console.ReadLine();
Console.WriteLine("Ingrese la cantidad");
int cantidad = int.Parse(Console.ReadLine());
for (i = 0; i < cantidad; i++)
{
mail.EnviarCorreo8(m, asunto, mensaje);
Console.WriteLine("Vas en el mail [" + i + "]");
}
Console.WriteLine("El Correo Ha sido enviado correctamente " + i + " veces");
}
catch (Exception errorrr)
{
Console.WriteLine("Error intente nuevamente " + errorrr);
}
break;

}

} while (opcion != 11);
}

}
}

Escrito Por: Pablo Videla

Categorías:.NET Etiquetas: , , , ,

Examen Transversal LENGUAJE DE PROGRAMACION II (MS NET)

Esto es lo que escribi del examen de ayer

Enunciado:

Examen Transversal

Se debe construir una aplicacion web que consta de 5 páginas utilizando el modelo de capas , la cual se
utilizará para el registro de órdenes de trabajo y su respectivo detalle, para una empresa que repara vehículos.

Descripcion de las páginas y su funcionalidad

Default.aspx
Permite la autenticación Basandose en los usuarios existentes en la tabla Usuarios y restringiendo el acceso a todas las
páginas mientras no se haya iniciado sesión o esta se haya cerrado, considere además un menú para la navegación.

Pagina1.aspx
Permite almacenar una orden en la tabla Orden.

Restricciones:

  • El valor de la mantención debe ser mayor a 0.
  • El kilometraje debe ser múltiplo de 5000.

Pagina2.aspx
permite agregar un nuevo servicio en la tabla Servicios.

Restricciones

  • Descripcion debe tener al menos 6 caracteres

Pagina3.aspx
Permite consultar las órdenes de servicio, utilizando un control GridView paginado y seleccionable. Al Seleccionar
una orden se muestran sus detalles asociados en un DetailsView.

Pagina4.aspx
Permite agregar o actualizar un nuevo usuario con la función “user” o “admin”, para ambos casos debe utilizar un servicio web como
capa intermedia, la cual se comunica con procedimientos almacenados. Recuerde que solo los administradores pueden agregar nuevos usuarios.

Script SQL Proporcionado:

Forma_A.sql

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Servicios]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Servicios](
	[cod_servicio] [nchar](10) NOT NULL,
	[Descripcion] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Servicios] PRIMARY KEY CLUSTERED
(
	[cod_servicio] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usuarios]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[usuarios](
	[rut] [char](10) NOT NULL,
	[password] [char](10) NOT NULL,
	[habilitado] [char](2) NOT NULL,
	[funcion] [char](10) NOT NULL,
 CONSTRAINT [PK_usuarios] PRIMARY KEY CLUSTERED
(
	[rut] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Orden]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Orden](
	[nroOrdenTrabajo] [nchar](10) NOT NULL,
	[Patente] [char](6) NOT NULL,
	[RutCliente] [char](10) NOT NULL,
	[valorMantencion] [int] NOT NULL,
	[kilometraje] [int] NOT NULL,
 CONSTRAINT [PK_Orden] PRIMARY KEY CLUSTERED
(
	[nroOrdenTrabajo] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DetalleOrden]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[DetalleOrden](
	[nroOrdenTrabajo] [nchar](10) NOT NULL,
	[cod_servicio] [nchar](10) NOT NULL
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_DetalleOrden_Orden]') AND parent_object_id = OBJECT_ID(N'[dbo].[DetalleOrden]'))
ALTER TABLE [dbo].[DetalleOrden]  WITH CHECK ADD  CONSTRAINT [FK_DetalleOrden_Orden] FOREIGN KEY([nroOrdenTrabajo])
REFERENCES [dbo].[Orden] ([nroOrdenTrabajo])
GO
ALTER TABLE [dbo].[DetalleOrden] CHECK CONSTRAINT [FK_DetalleOrden_Orden]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_DetalleOrden_Servicios]') AND parent_object_id = OBJECT_ID(N'[dbo].[DetalleOrden]'))
ALTER TABLE [dbo].[DetalleOrden]  WITH CHECK ADD  CONSTRAINT [FK_DetalleOrden_Servicios] FOREIGN KEY([cod_servicio])
REFERENCES [dbo].[Servicios] ([cod_servicio])
GO
ALTER TABLE [dbo].[DetalleOrden] CHECK CONSTRAINT [FK_DetalleOrden_Servicios]

Mi Solucion:
ETLDP3501-Fuentealba-Esteban.rar

Certamen I LENGUAJES DE PROGRAMACIÓN I MS.NET

Este Fue el Primer y unico certamen de .NET xD les dejo el Enunciado y el programa

Enunciado:

Se desea manejar una lista de alumnos, para cada alumno se debe manejar su nombre y su nota finales (en la escala de 1.0 a 7.0) en su “querida” asignatura de LDP2501. Se pide que usted construya una aplicación de CONSOLA en C# que permita cumplir con la siguiente funcionalidad:

  • Crear un archivo XML, llamado Curso.XML que contenga una carga inicial de datos a la lista. (10 PUNTOS)
  • Mostrar la lista de alumnos presentes en la lista. (10 PUNTOS)
  • Mostrar la nota de un alumno a partir del nombre. (15 PUNTOS)
  • Mostrar el promedio de notas de curso. (5 PUNTOS)
  • Mostrar la mediana de las notas de los alumnos del curso. (20 PUNTOS)
  • Mostrar una tabla de frecuencia de las notas que se han registrado en el curso. (20 PUNTOS)
  • Mostrar el nombre de los alumnos que han obtenido la mejor nota. (10 PUNTOS)
  • Mostrar el nombre de los alumnos que han obtenido la peor nota. (10 PUNTOS)

OBSERVACIONES
Suponga el siguiente conjunto de datos:
23 56 78 34 29 56 29 23 67
CÁLCULO DE LA MEDIANA
Para obtener la mediana se deben ordenar los valores de la lista y se tiene:
23 23 29 29 34 56 56 67 78
Ahora es posible calcular la mediana y se obtiene sacando el elemento de la posición central. En este caso es el 34. En el caso de que el número de observaciones sea par se debe seleccionar el elemento central y el siguiente y luego obtener el promedio entre los dos; el resultado de lo anterior corresponde a la mediana.

GENERACIÓN DE LA TABLA DE FRECUENCIA
Para el caso de la tabla de frecuencia se tiene:
DATO FRECUENCIA
23 2
29 2
34 1
56 2
67 1
78 1
Solucion:

Lo Primero es Crear el Curso.xml


  
    111-1
    Esteban Fuentealba
    7.0
  
  
    222-2
    Juan Perez
    2.0
  
  
    333-3
    Leonardo Farkas
    5.5
  
  
    444-4
    El Shipamogli
    4.4
  
  
    555-5
    Alejo
    7.0
  

Despues de eso creamos la Clase Alumno.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace CertamenIDotNet
{
/* La Clase Implementa IComparable */
class Alumno : IComparable
{
/* Atributos de Clase */
private String rut;
private String nombre;
private Double nota;
/* Constructor por defecto */
public Alumno() { }
/* Constructor que recibe todos los parametros */
public Alumno(String r, String n, Double no)
{
this.Rut = r;
this.Nombre = n;
this.Nota = no;
}
/* Metodo Para comparar un objeto de alumno con otro objeto de alumno y ordenar por nota */
public int CompareTo(object x)
{
Alumno o = ((Alumno)x);
if (this.Nota > o.Nota) return 1;
else if (this.Nota < o.Nota) return -1;
else return 0;
}
public Double Nota
{
get { return nota; }
set { nota = value; }
}

public String Nombre
{
get { return nombre; }
set { nombre = value; }
}
public String Rut
{
get { return rut; }
set { rut = value; }
}
}
}

Despues de eso Creamos Nuestro Program.cs que hará todo:

using System;
using System.Collections.Generic;
using System.Text;
/* Importo Collections para poder usar los arraylist */
using System.Collections;
/* Importo XML para usar la lectura de archivos xml */
using System.Xml;

/*
*
* Por Esteban Fuentealba
*
*/
namespace CertamenIDotNet
{
class Program
{
/* Atributos de Clase */
public static ArrayList listaAlumnos;
public static XmlDocument documento;

static void Main(string[] args)
{
/* Inicializo el arrayList que contenerá todos los alumnos*/
listaAlumnos = new ArrayList();
/* paso el xml “Curso.xml” a el arrayList */
XMLToArrayList();
/* este do while es para las opciones */
int opcion = 0;
do
{
Console.WriteLine(“1) Muestra Lista de Alumnos.”);
Console.WriteLine(“2) Muestra la nota a partir del Nombre.”);
Console.WriteLine(“3) Muestra el Promedio de notas del Curso.”);
Console.WriteLine(“4) Muestra la Mediana de notas del Curso.”);
Console.WriteLine(“5) Muestra una Tabla de Frecuencia de notas del Curso.”);
Console.WriteLine(“6) Muestra el nombre de los alumnos con mejor nota.”);
Console.WriteLine(“7) Muestra el nombre de los alumnos con peor nota.”);
Console.WriteLine(“8) Salir.”);
opcion = getNumero();
switch(opcion) {
case 1 :
mostrarLista();
break;
case 2 :
Console.WriteLine(“Ingresa el Nombre:”);
int i = 0;
foreach (Alumno a in buscarPorNombre(Console.ReadLine()))
{
if (i == 0) Console.WriteLine(“\r\nNombre\t\t\t\tRut\t\tNota”);
Console.WriteLine(a.Nombre.PadRight(30, ‘ ‘) + a.Rut.PadRight(20, ‘ ‘) + a.Nota.ToString().PadRight(20, ‘ ‘));
i++;
}
if (i == 0) Console.WriteLine(“No se encontro un alumno con ese Nombre”);
Console.WriteLine();
break;
case 3 :
Console.WriteLine(“Promedio del Curso: ” + obtenerPromedio());
break;
case 4:
Console.WriteLine(“Mediana del Curso: “+ obtenerMediana());
break;
case 5 :
frecuencia();
break;
case 6 :
mejorPeorNota(0);
break;
case 7 :
mejorPeorNota(1);
break;
}
} while (opcion != 8);
}
/*
*
* Metodo Para Pasar el xml al arrayList
*
*/
static void XMLToArrayList()
{
documento = new XmlDocument();
documento.Load(@”..\..\Curso.xml”);
foreach (XmlNode nod in documento)
{
foreach (XmlNode dato in nod)
{
String rut = dato.SelectSingleNode(“rut”).InnerText;
String nombre = dato.SelectSingleNode(“nombre”).InnerText;
Double nota = Double.Parse(dato.SelectSingleNode(“nota”).InnerText);
listaAlumnos.Add(new Alumno(rut, nombre, nota));
}
}
}
/*
*
* Muestro los datos del ArrayList
*
*/
static void mostrarLista()
{
Console.WriteLine(“\r\nNombre\t\t\t\tRut\t\tNota”);
foreach (Alumno alumno in listaAlumnos)
{
Console.WriteLine(alumno.Nombre.PadRight(30, ‘ ‘) + alumno.Rut.PadRight(20, ‘ ‘) + alumno.Nota.ToString().PadRight(20, ‘ ‘));
}
Console.WriteLine();
}
/*
*
* Metodo que busca en el ArrayList un nombre y devuelve un ArrayList con todos Los Resultados de Busqueda
*
*/
static ArrayList buscarPorNombre(String nombre)
{
ArrayList arr = new ArrayList();
foreach(Alumno a in listaAlumnos) {
if (a.Nombre.ToLower().Contains(nombre.ToLower()) || a.Nombre.ToLower() == nombre.ToLower())
arr.Add(a);
}
return arr;
}
/*
*
* Calcula el promedio del curso sumando las notas de todos los alumnos y dividiendolo por el total
*
*/

static Double obtenerPromedio()
{
Double promedio = 0.0;
foreach (Alumno a in listaAlumnos)
{
promedio += a.Nota;
}
return (promedio / listaAlumnos.Count);
}
/*
*
* Metodo Para Obtener la Mediana de las notas
*
*/

static Double obtenerMediana()
{
ArrayList listaOrdenada = listaAlumnos;
listaOrdenada.Sort();
if ((listaOrdenada.Count % 2) == 0)
{
return (((Alumno)listaOrdenada[listaOrdenada.Count / 2]).Nota + ((Alumno)listaOrdenada[(listaOrdenada.Count / 2) + 1]).Nota) / 2;
}
else
{
return ((Alumno)listaOrdenada[listaOrdenada.Count / 2]).Nota;
}
}
/*
*
* Obtiene la Frecuencia de notas
*
*/
static void frecuencia()
{
ArrayList listaFrecuencia = listaAlumnos;
listaFrecuencia.Sort();
Double saltarNota =0;
Console.WriteLine(“\tNota\tFrecuencia”);
foreach (Alumno alumno in listaFrecuencia)
{
int frecuencia = 0;
foreach (Alumno alumno2 in listaFrecuencia)
{
if (alumno.Nota == alumno2.Nota) frecuencia++;
}
if (alumno.Nota != saltarNota) Console.WriteLine(“\t”+alumno.Nota.ToString().PadRight(10, ‘ ‘) + frecuencia.ToString().PadRight(10, ‘ ‘));
saltarNota = alumno.Nota;
}
}
/*
*
* Imprime los alumnos con Mejor o Peor Nota, segun el parametro que se le pase
* Tipo 0 = MejorNota
* Tipo 1 = PeorNota
*
*/
static void mejorPeorNota(int tipo)
{
ArrayList listaNotas = listaAlumnos;
listaNotas.Sort();
if (tipo == 0)
{
listaNotas.Reverse();
Console.WriteLine(“\r\nAlumnos con Mejores Notas:”);
for (int i = 0; i < listaNotas.Count; i++)
{
if (((Alumno)listaNotas[0]).Nota == ((Alumno)listaNotas[i]).Nota) Console.WriteLine("Nombre: " + ((Alumno)listaNotas[i]).Nombre + " Nota: " + ((Alumno)listaNotas[i]).Nota);
}
}
else if (tipo == 1)
{
Console.WriteLine("\r\nAlumnos con Peores Notas:");
for (int i = 0; i < listaNotas.Count; i++)
{
if (((Alumno)listaNotas[0]).Nota == ((Alumno)listaNotas[i]).Nota) Console.WriteLine("Nombre: " + ((Alumno)listaNotas[i]).Nombre + " Nota: " + ((Alumno)listaNotas[i]).Nota);
}
}
Console.WriteLine();
}

static int getNumero()
{
String numeroInsertado;
numeroInsertado = Console.ReadLine();
while (!esNumero(numeroInsertado))
{
Console.WriteLine("ERROR: Ingresa un Numero.");
numeroInsertado = Console.ReadLine();
}
return int.Parse(numeroInsertado);
}
static bool esNumero(String val)
{
bool num = false;
try
{
int.Parse(val);
num = true;
}
catch (Exception e) { num = false; }
return num;
}
}
}

Y Listo =D

Espero que les Sirva, aqui dejo el src …. Esta en VisualStudio 2008
CertamenIDotNet-EstebanFuentealba.rar

Categorías:.NET Etiquetas: , , ,

Ejercicio .NET Preparando Examen

Con este ejercicio practiqué para el examen que tengo mañana de MS.NET , espero que me valla bien xD

para los que quieran ver el codigo lo dejo adjunto…

Enunciado:

ejercicio-net.pdf

Aqui dejo la Clase que hace todo xD

Clase Aplicacion.cs
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
namespace PreparandoCertamen
{
class Aplicacion
{
/*
*
* Atributos
*
*/

private DataSet1 data;
private XmlDocument documento;

/* Constructor por defecto */
public Aplicacion()
{
/* creo una instancia a mi DataSet */
data = new DataSet1();
XmlToDataSet();
int opcion=0;
/* While para hacer el menu con las Opciones */
do
{
Console.WriteLine(“Menu — Ingresa la Opcion”);
Console.WriteLine(“1) Lista de Alumnos Disponibles”);
Console.WriteLine(“2) Lista de Asignaturas Disponibles”);
Console.WriteLine(“3) Lista de Inscripciones Realizadas”);
Console.WriteLine(“4) Agregar Inscripcion”);
Console.WriteLine(“5) Informe de Asignatura por Alumno”);
Console.WriteLine(“6) Informe de Notas Alumno”);
Console.WriteLine(“7) Informe de Inscripciones”);
Console.WriteLine(“8) Salir”);
opcion = getNumero();
switch (opcion)
{
case 1 :
imprimeAlumnos();
break;
case 2 :
imprimeAsignaturas();
break;
case 3 :
imprimeInscripciones();
break;
case 4 :
addInscripcion();
break;
case 5 :
informeAsignatura();
break;
case 6 :
informeAlumno();
break;
case 7 :
informeAsinaturaInscrito();
break;
}

} while (opcion != 8);
}

public void imprimeAlumnos()
{
Console.WriteLine(“Listado de Alumnos: “);
foreach (DataRow fila in data.Alumno.Rows)
{
Console.WriteLine(” [Nombre: ” + fila[“nombre”].ToString() + “] [Rut: ” + fila[“rut”].ToString() + “]”);
}
}
public void imprimeAsignaturas()
{
Console.WriteLine(“Listado de Asignaturas: “);
foreach (DataRow fila in data.Asignatura.Rows)
{
Console.WriteLine(” [Nombre: ” + fila[“nombre”].ToString() + “] [Codigo: ” + fila[“codigo”].ToString() + “]”);
}
}
public void imprimeInscripciones()
{
Console.WriteLine(“Listado de Inscripciones: “);
foreach (DataRow fila in data.Inscripcion.Rows)
{
Console.WriteLine(” [Rut: ” + fila[“rut”].ToString() + “] [Codigo: ” + fila[“codigo”].ToString() + “] [Semestre: ” + fila[“semestre”].ToString() + “] [Año: ” + fila[“año”].ToString() + “] [Nota: ” + fila[“nota”].ToString() + “]”);
}
}
public void addInscripcion()
{
imprimeAlumnos();
Console.WriteLine(“\r\nIngresa el Rut del Alumno que Quieres Ingresar a la Inscripcion”);
String newInscripcionRut, newInscripcionCodigo;
int newInscripcionSemestre, newInscripcionAño;
Decimal newInscripcionNota;
newInscripcionRut = Console.ReadLine();
while(!contieneRut(newInscripcionRut))
{
Console.WriteLine(“ERROR: Ese rut es Invalido”);
Console.WriteLine(“Ingresa el Rut del Alumno que Quieres Ingresar a la Inscripcion”);
newInscripcionRut = Console.ReadLine();
}
imprimeAsignaturas();
Console.WriteLine(“\r\nIngresa el Codigo de la Asignatura que Quieres Ingresar a la Inscripcion”);
newInscripcionCodigo = Console.ReadLine();
while (!contieneCodigo(newInscripcionCodigo))
{
Console.WriteLine(“ERROR: Ese codigo es Invalido”);
Console.WriteLine(“Ingresa el Codigo de la Asignatura que Quieres Ingresar a la Inscripcion”);
newInscripcionCodigo = Console.ReadLine();
}
Console.WriteLine(“Ingresa el Semestre de la Inscripcion”);
newInscripcionSemestre = getNumero();
Console.WriteLine(“Ingresa el Año de la Inscripcion”);
newInscripcionAño = getNumero();
Console.WriteLine(“Ingresa la Nota del alumno para esta Inscripcion”);
newInscripcionNota = getDecimal();
if (agregaInscripcion(newInscripcionRut, newInscripcionCodigo, newInscripcionSemestre, newInscripcionAño, newInscripcionNota))
Console.WriteLine(“OK: Agregada Inscripcion.”);
else
Console.WriteLine(“ERROR: No se Pudo ingresar la Inscripcion.”);
}
public void informeAsignatura()
{
Console.WriteLine(“Ingresa el Nombre de un Alumno para ver su Informe”);
String nombre = Console.ReadLine();
int alumnosEncontrados = 0;
Console.WriteLine(“Nombre de Asignatura\t\tSemestre\t\tAño\t\tNota”);
foreach (DataRow fila in data.Alumno.Select(“nombre LIKE ‘%” + nombre + “%'”))
{
foreach (DataRow fila3 in data.Inscripcion.Rows)
{
if (fila3[“rut”].ToString() == fila[“rut”].ToString())
{
foreach (DataRow fila2 in data.Asignatura.Select(“codigo = ” + fila3[“codigo”].ToString()))
{
Console.WriteLine(fila2[“nombre”].ToString() + “\t\t\t\t” + fila3[“semestre”].ToString() + “\t\t\t” + fila3[“año”].ToString() + “\t\t” + fila3[“nota”].ToString());
}
}
}

alumnosEncontrados++;
}
if (alumnosEncontrados == 0) Console.WriteLine(“ERROR: No se Encontraron Alumnos con ese Nombre.”);
}
public void informeAlumno()
{
Console.WriteLine(“Ingresa el Nombre de un Alumno para ver su Informe”);
String nombre = Console.ReadLine();
foreach (DataRow fila in data.Alumno.Select(“nombre LIKE ‘%” + nombre + “%'”))
{
Hashtable DistinctAños = new Hashtable();
foreach (DataRow filados in data.Inscripcion.Select(“rut='” + fila[“rut”] + “‘”))
{
if (!DistinctAños.ContainsKey(filados[“año”])) DistinctAños.Add(filados[“año”], filados);
}
if (DistinctAños.Count > 0) Console.WriteLine(“Nombre Alumno\t\tSemestre\t\tAño\t\tPromedio”);
foreach (DictionaryEntry al in DistinctAños)
{
Double prom=0;
int i = 0;
foreach (DataRow fila3 in data.Inscripcion.Select(“rut='” + fila[“rut”] + “‘ AND año=” + al.Key+” AND semestre=1″))
{
prom = 0;
i = 0;
prom += Double.Parse(fila3[“nota”].ToString());
i++;
}
if (i > 0) Console.WriteLine(fila[“nombre”] + “\t\t1\t\t\t” + ((DataRow)al.Value)[“año”] + “\t\t” + (prom / i));

prom = 0;
i = 0;
foreach (DataRow fila3 in data.Inscripcion.Select(“rut='” + fila[“rut”] + “‘ AND año=” + al.Key + ” AND semestre=2″))
{
prom = 0;
i = 0;
prom += Double.Parse(fila3[“nota”].ToString());
i++;
}
if (i > 0) Console.WriteLine(fila[“nombre”] + “\t\t2\t\t\t” + ((DataRow)al.Value)[“año”] + “\t\t” + (prom / i));
}

}
}
public void informeAsinaturaInscrito()
{
Console.WriteLine(“Ingresa el Semestre De la inscripcion”);
int semestre = getNumero();
Console.WriteLine(“Ingresa el Año De la inscripcion”);
int año = getNumero();
DataRow[] inscritos = data.Inscripcion.Select(“semestre =” + semestre + ” AND año=” + año);
Console.WriteLine(“Nombre Asignatura\t\tSemestre\t\tAño\t\t#Inscritos”);
Hashtable codigos = new Hashtable();
foreach (DataRow fila in inscritos)
{
if (!codigos.ContainsKey(fila[“codigo”])) codigos.Add(fila[“codigo”], fila);
}
foreach (DictionaryEntry fff in codigos)
{
foreach (DataRow fila2 in data.Asignatura.Select(“codigo='” + ((DataRow)fff.Value)[“codigo”] + “‘”))
{
Console.WriteLine(fila2[“nombre”] + “\t\t” + ((DataRow)fff.Value)[“semestre”] + “\t\t\t” + ((DataRow)fff.Value)[“año”] + “\t\t” + data.Inscripcion.Select(“semestre =” + semestre + ” AND año=” + año + ” AND codigo=” + ((DataRow)fff.Value)[“codigo”]).Length);
}
}

}
public bool agregaInscripcion(String rut,String codigo,int semestre, int año,Decimal nota)
{
bool addComplete = false;
try
{
DataSet1.InscripcionRow nuevaInscripcion = data.Inscripcion.NewInscripcionRow();
nuevaInscripcion[“rut”] = rut;
nuevaInscripcion[“codigo”] = codigo;
nuevaInscripcion[“semestre”] = semestre;
nuevaInscripcion[“año”] = año;
nuevaInscripcion[“nota”] = nota;
data.Inscripcion.AddInscripcionRow(nuevaInscripcion);
addComplete = true;
}
catch (Exception e) { }
return addComplete;
}
public bool contieneRut(String val)
{
foreach(DataRow r in data.Alumno.Rows) { if (r[“rut”].ToString() == val) return true; }
return false;
}
public bool contieneCodigo(String val)
{
foreach (DataRow r in data.Asignatura.Rows) { if (r[“codigo”].ToString() == val) return true; }
return false;
}
/*
*
* Metodo Para Cargar Los Datos del XML al DataSet
*
*/
public void XmlToDataSet()
{
documento = new XmlDocument();
/* Cargo El Xml “Alumnos.xml” en el XmlDocument */
documento.Load(@”..\..\Alumnos.xml”);
/* Recorro el xml para sacar los datos que hay en el */
foreach (XmlNode nodo in documento.ChildNodes)
{
foreach(XmlNode nodo2 in nodo.ChildNodes)
{
/* Creo una nueva Fila en la Tabla Alumno del DataSet */
DataSet1.AlumnoRow row = data.Alumno.NewAlumnoRow();
/* En esa Fila Hay Dos Columnas, Rut y Nombre , Le Asigno el Valor del XML a esos campos */
row[“rut”] = nodo2.SelectSingleNode(“rut”).InnerText;
row[“nombre”] = nodo2.SelectSingleNode(“nombre”).InnerText;
/* Agrego la Fila a la Tabla Alumno */
data.Alumno.AddAlumnoRow(row);
}
}
documento = new XmlDocument();
/* Cargo El Xml “Asignaturas.xml” en el XmlDocument */
documento.Load(@”..\..\Asignaturas.xml”);
/* Recorro el xml para sacar los datos que hay en el */
foreach (XmlNode nodo in documento.ChildNodes)
{
foreach (XmlNode nodo2 in nodo.ChildNodes)
{
DataSet1.AsignaturaRow filaAsignatura = data.Asignatura.NewAsignaturaRow();
filaAsignatura[“codigo”] = nodo2.SelectSingleNode(“codigo”).InnerText;
filaAsignatura[“nombre”] = nodo2.SelectSingleNode(“nombre”).InnerText;
data.Asignatura.AddAsignaturaRow(filaAsignatura);
}
}
documento = new XmlDocument();
/* Cargo El Xml “Inscripcion.xml” en el XmlDocument */
documento.Load(@”..\..\Inscripcion.xml”);
/* Recorro el xml para sacar los datos que hay en el */
foreach (XmlNode nodo in documento.ChildNodes)
{
foreach (XmlNode nodo2 in nodo.ChildNodes)
{
DataSet1.InscripcionRow filaInscripcion = data.Inscripcion.NewInscripcionRow();
filaInscripcion[“rut”] = nodo2.SelectSingleNode(“rut”).InnerText;
filaInscripcion[“codigo”] = nodo2.SelectSingleNode(“codigo”).InnerText;
filaInscripcion[“semestre”] = nodo2.SelectSingleNode(“semestre”).InnerText;
filaInscripcion[“año”] = nodo2.SelectSingleNode(“año”).InnerText;
filaInscripcion[“nota”] = nodo2.SelectSingleNode(“nota”).InnerText;
data.Inscripcion.AddInscripcionRow(filaInscripcion);
}
}
}
public int getNumero()
{
String numeroInsertado;
numeroInsertado = Console.ReadLine();
while (!esNumero(numeroInsertado))
{
Console.WriteLine(“ERROR: Ingresa un Numero.”);
numeroInsertado = Console.ReadLine();
}
return int.Parse(numeroInsertado);
}
public Decimal getDecimal()
{
String numeroInsertado;
numeroInsertado = Console.ReadLine();
while (!esDecimal(numeroInsertado))
{
Console.WriteLine(“ERROR: Ingresa un Numero Decimal.”);
numeroInsertado = Console.ReadLine();
}
return Decimal.Parse(numeroInsertado);
}
public bool esNumero(String val)
{
bool num = false;
try {
int.Parse(val);
num = true;
}
catch (Exception e) { num = false; }
return num;
}
public bool esDecimal(String val)
{
bool num = false;
try
{
Decimal.Parse(val);
num = true;
}
catch (Exception e) { num = false; }
return num;
}
/* Property’s */
public DataSet1 Data
{
get { return data; }
set { data = value; }
}
}
}

Para Los que Quieren descargar el src lo dejo:

PreparandoExamen.rar

Saludos.

PD: Compilado en VisualStudio 2008 .NET Framework 3.5

Categorías:.NET Etiquetas: , , ,

Efecto Matrix en Consola C#

octubre 26, 2008 2 comentarios

jaja Encontre este código navegando por internet que imita el efecto de matrix solo escribiendo en consola, esta bueno, les dejo el codigo para que lo testeen

#define readkey

using System;

namespace m7tr1x
{
class Program
{
static void Main(string[] args)
{
Console.Title = “tH3 M7tr1x 3ff3 0)
System.Threading.Thread.Sleep(ms);
if (Console.KeyAvailable)
if (Console.ReadKey().Key == ConsoleKey.F5)
Initialize(out width, out height, out y, out l);
}
}

static bool thistime = false;

private static void MatrixStep(int width, int height, int[] y, int[] l)
{
int x;
thistime = !thistime;
for (x = 0; x <width; ++x)
{
if (x % 11 == 10)
{
if (!thistime)
continue;
Console.ForegroundColor = ConsoleColor.White;
}
else
{
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.SetCursorPosition(x, inBoxY(y[x] – 2 – (l[x] / 40 * 2), height));
Console.Write(R);
Console.ForegroundColor = ConsoleColor.Green;
}
Console.SetCursorPosition(x, y[x]);
Console.Write(R);
y[x] = inBoxY(y[x] + 1, height);
Console.SetCursorPosition(x, inBoxY(y[x] – l[x], height));
Console.Write(' ');
}
}

private static void Initialize(out int width, out int height, out int[] y, out int[] l)
{
int h1;
int h2 = (h1 = (height = Console.WindowHeight) / 2) / 2;
width = Console.WindowWidth – 1;
y = new int[width];
l = new int[width];
int x;
Console.Clear();
for (x = 0; x <width; ++x)
{
y[x] = r.Next(height);
l[x] = r.Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1));
}
}

static Random r = new Random();
static char R
{
get
{
int t = r.Next(10);
if (t <= 2)
return (char)('0' + r.Next(10));
else if (t <= 4)
return (char)('a' + r.Next(27));
else if (t <= 6)
return (char)('A' + r.Next(27));
else
return (char)(r.Next(32, 255));
}
}

public static int inBoxY(int n, int height)
{
n = n % height;
if (n <0)
return n + height;
else
return n;
}
}
}

Categorías:.NET Etiquetas: , , , ,

C# Spam Bot [ Tutorial Parte 02 ]

octubre 10, 2008 2 comentarios

Teniendo la Idea del post Anterior ahora vamos a crear nuestro Bot Spamer.

Lo haremos en una aplicacion de Consola, Lo Podemos hacer de varias formas, usando Sockets, WebClient, HttpWebRequest, etc. Para este Tutorial usaremos HttpWebRequest y HttpWebResponse que se encuentran en System.Net.

Aca el Codigo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*

Autor: Por Esteban Fuentealba
Url: http://estebanfuentealba.net/

*/


/*
Importamos NET para poder usar HttpWebRequest y HttpWebResponse
*/
using System.Net;
/*
tambien Importamos IO para poder leer de forma mas facil la respuesta del servidor
*/
using System.IO;

namespace EstebanFuentealbaSpamBot
{
    class Program
{
/*
Declaramos las Variables que Ocuparemos
HttpWebRequest se encargara de hacer la peticion al servidor
*/
static HttpWebRequest peticion;
/*
HttpWebResponse se encarga de devolvernos la respuesta del servidor
*/
static HttpWebResponse respuesta;
/*
Stream va a leer esa respuesta
*/
static Stream stream;
/*
Stream reader va a hacer mucho mas facil la lectura de Stream
*/
static StreamReader read;

static void Main(string[] args)
{
    IPHostEntry host;
            string localIP = "";
            host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    localIP += "[IP: "+ip.ToString()+"] ";
                }
            }
/*
cadena_post es la cadena de todos los valores  de los names del form, seran los datos       que Postearemos
*/
            String cadena_post = "comment_parent=0&comment_post_ID=97&author=Esteban Fuentealba&redirect_to=/2008/10/09/primera-aplicacion-grails/&email=contacto@estebanfuentealba.net&url=https://estebanfuentealba.wordpress.com/&comment=Bot Spammer By Esteban Fuentealba >:D " + DateTime.Now + " " + localIP + " &submit=Enviar comentario&genseq=" + DateTime.Now.Millisecond;
/*
creamos la peticion con el link del action
*/
peticion = (HttpWebRequest)HttpWebRequest.Create(new Uri("https://estebanfuentealba.wordpress.com/wp-comments-post.php"));
/*
le decimos al programa que el metodo de nuestra peticion va a ser un post
*/
peticion.Method = "POST";
/*
seteamos un useragent , es como un navegador, en este caso firefox 3.0 para pasar piola
*/
peticion.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3";
/*
le decimos al programa que nuestra peticion es de tipo form osea formulario
*/
peticion.ContentType = "application/x-www-form-urlencoded";
/*
Aqui vamos a calcular el total de caracteres que va a tener nuestro posteo
*/
byte[] ByteQuery = System.Text.Encoding.ASCII.GetBytes(cadena_post);
peticion.ContentLength = ByteQuery.Length;
Stream QueryStream = peticion.GetRequestStream();
QueryStream.Write(ByteQuery, 0, ByteQuery.Length);
QueryStream.Close();
/*
pedimos al servidor la respuesta a nuestro posteo de datos y se lo entregamos al atributo respuesta
*/
respuesta = (HttpWebResponse)peticion.GetResponse();
/*
Vamos a leer la respuesta con un stream
*/
stream = respuesta.GetResponseStream();
/*
para hacer mas facil la lectura le pasamos el stream al streamReader
*/
read = new StreamReader(stream);
/*
seteamos una variable String que tendrá toda la respuesta del servidor
*/
String respuesta_string="";
/*
hacemos un while hasta que obtengamos toda la informacion
*/
while (!read.EndOfStream)
{
/*
Leemos solo una linea de la respuesta y la guardamos en una variable string
*/
String lee =read.ReadLine();
/*
yo solo quiero tener la cabecera de la respuesta del servidor asi que vere cuando tenga una linea vacia y si es asi parare el programa y mostrare los datos de lo que tengo leido hasta el momento
*/
if (lee != "\r\n")
{
    Console.WriteLine(lee);
return;
}
respuesta_string += lee;
}
/*
pongo un readLine para que el programa no se cierre
*/
Console.ReadLine();
}
}
}

Este Programa solo Postea a una entrada que tiene la id 97 =P, es tarea de ustedes hacer que postee a todas las entradas del blog, pero les dare una ayuda:
solo tienen que
1º entrar al blog con HttpWebRequest
2º sacar las id de todos las entradas que estan en portada
3º postear cada uno de esas ids que estan en portada

Saludos, espero que les sirva

Categorías:.NET Etiquetas: , , , ,