lunes, 2 de septiembre de 2013

Bases de Datos (MYSQL y PHP)

Bueno en esta ocasión, les pondre un programita que lo hice con ayuda del dreamwaver cs4.
Se trata de una base de datos hecho en mysql y PHP. espero que lo entiendan y si no, escribanme a mi correo, msantos01@hotmail.com o también pueden comentar.

Hay una página donde pueden descargar el appserver que tiene los programas mysql y php, para que tengan los dos programas al mismo tiempo y lo instalen a su computador. La dirección es: http://www.appservnetwork.com/


Bueno, aqui esta el código del programa, el mismo programa crea la base de datos y lo actualiza :).

insertar.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>insertar.html</title>
</head>
<body>
    <div align="center">
    <h1>Insertar un registro</h1>
    <br>
    <form method="post" action="insertar.php">
    Nombre<br>
    <input type="text" name="nombre"><br>
    Telefono<br>
    <input type="text" name="telefono"><br>
    <input type="submit" value="insertar">
    </form>
    </div>
</body>
</html>

insertar.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Insertar.php</title>
</head>
<body>
    <?php
      //Conexión con la base
aquí entre las comillas se ponen el host que puede ser localhost, el usuario y la contraseña puesto al instalar el mysql.
      $conexion = mysql_connect("host","usuario","contraseña");
      if(!$conexion) {
          die('No se pudo conectar a MySqL: '.mysql_error());
      }
      //Ejecución de la sentencia SQL
      mysql_db_query("ejemplo","INSERT INTO clientes (nombre,telefono) 
                                VALUES ('$_POST[nombre]','$_POST[telefono]')",$conexion);
    ?>
    
    <h1><div align="center">Registro Insertado</div></h1>
    <div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div> 
</body>
</html>

lectura.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>lectura.php</title>
</head>
<body>
    <h1><div align="center">Lectura de la tabla</div></h1>
    <br>
    <br>
    
    <?php
      $conexion = mysql_connect("host","usuario","contraseña");
      if(!$conexion) {
          die('No se pudo conectar a MySql: '.mysql_error());
      }
      $result=mysql_db_query("ejemplo","SELECT * FROM clientes",$conexion);
    ?> 
     
    <table align="center">
    <tr>
    <th>Nombre</th>
    <th>Telefono</th>
    </tr>
    
    <?php
      //Mostramos los registros
      while ($row=mysql_fetch_array($result)) {
          echo "<tr><td>".$row['nombre']."</td>";
          echo "<td>".$row['telefono']."</td></tr>";
      }
      mysql_free_result($result)
    ?>
    
   
</table>  
    
    <div align="center">
    <a href="insertar.html">Añadir un nuevo registro</a><br>
    <a href="actualizar1.php">Actualizar un registro existente</a><br>
    <a href="borrar1.php">Borrar un registro</a><br>
    </div>
      
</body>
</html> 

actualizar1.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>actualizar1.php</title>
</head>
<body>
    <div align="center">
    <h1>Actualizar un registro</h1>
    <br>
  
    <?php
      $conexion = mysql_connect("host","usuario","contraseña");
      if(!$conexion) {
          die('No se pudo conectar a MySql: '.mysql_error());
      }
    
      echo '<form method="post" action="actualizar2.php">Nombre<br>';
    
      //Creamos la sentencia SQL y la ejecutamos
      $sSQL="SELECT nombre FROM clientes ORDER BY nombre";
      $result=mysql_db_query("ejemplo",$sSQL,$conexion);
    
      echo '<select name="nombre">';
    
      //Generamos el menu desplegable
      while($row=mysql_fetch_array($result)) {
          echo "<option>".$row['nombre'];
      }
    ?>
  
    </select>
    <br>
    Telefono<br>
    <input type="text" name="telefono"><br>
    <input type="submit" value="Actualizar">
    </form>
    </div>
</body>
</html>

actualizar2.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>actualizar.php</title>
</head>
<body>
    <?php
      $conexion = mysql_connect("host","usuario","contraseña");
      if(!$conexion) {
          die('No se pudo conectar a MySql: '.mysql_error());
      }
      //Creamos la sentencia SQL y la ejecutamos
      $sSQL="UPDATE clientes SET telefono='$_POST[telefono]' WHERE nombre='$_POST[nombre]'";
      mysql_db_query("ejemplo",$sSQL,$conexion);
    ?>
  
    <h1><div align="center">Registro Actualizado</div></h1>
    <div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>
    
</body>
</html> 

borrar1.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>borrar1.php</title>
</head>
<body>
    <div align="center">
    <h1>Borrar un registro</h1>
    <br>
  
    <?php
      $conexion = mysql_connect("host","usuario","contraseña");
      if(!$conexion) {
          die('No se pudo conectar a MySql: '.mysql_error());
      }
    
      echo '<form method="post" action="borrar2.php">Nombre<br>';
    
      //Creamos la sentencia SQL y la ejecutamos
      $sSQL="SELECT nombre FROM clientes ORDER BY nombre";
      $result=mysql_db_query("ejemplo",$sSQL,$conexion);
    
      echo '<select name="nombre">';
    
      //Mostramos los registros en forma de menú desplegable
      while ($row=mysql_fetch_array($result)) {
          echo "<option>".$row['nombre'];
      }
      mysql_free_result($result)
    ?>
  
    </select>
    <br>
    <input type="submit" value="Borrar">
    </form>
    </div>
</body>
</html>

borrar2.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>borrar2.php</title>
</head>
<body>
    <?php
      $conexion = mysql_connect("host","usuario","contraseña");
      if(!$conexion) {
          die('No se pudo conectar a MySql: '.mysql_error());
      }
    
      //Creamos la sentencia SQL y la ejecutamos 
      $sSQL="DELETE FROM clientes WHERE nombre='$_POST[nombre]'";
      mysql_db_query("ejemplo",$sSQL,$conexion);
    ?>
  
    <h1><div align="center">Registro Borrado</div></h1>
    <div align="center"><a href="lectura.php">Visualizar el contendio de la base</a></div>
  
</body>
</html>
...al ejecutar el programa en el buscador firefox o google debe aparacer lo siguiente.


-----------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------

...y bueno, se puede añadir un nuevo registro, actualizar o borrar. 
cualquier consulta, escribanme al correo o comenten.
hasta la próxima.

Algo más, si quieres donar a mi blog, se le agradecería mucho, ya que me animaría a publicar más programas hecho por este servidor. Gracias.

jueves, 25 de abril de 2013

Archivos en C++

Esta vez les traigo un código en c++, donde se utiliza lo que es archivos (.dat).
Tomando como ejemplo, suponiendo, una cuenta en un banco cualquiera. Una simulación de lo que sería abrir una cuenta en un banco de la localidad.

Bueno, no quiero adentrarme a la teoría, mas bien, solo al código suponiendo que los conceptos que se utilizan en este código ya han sido "masticado y digeridos" o sea aprendidos.

En este caso se utiliza lo que son estructuras, una estructura llamada banco que contiene el nombre, un numero de cuenta que se incrementa automáticamente a medida que vayamos agregando un usuario y un saldo que nos servirá para hacer las transacciones cotidianas (depositar, retirar, consultar...).

A esta estructura le pondremos como seudónimo la variable bank, el cual le agregaremos o lo convertiremos en un vector de 50 clientes, se podría hacer dinámicamente, pero este sería otra clase :). Y bueno, tiene un menú el cualquier nos indicará que queremos hacer con nuestra cuenta ficticia.

Bueno cualquiera pregunta, escríbanme al correo msantos01@hotmail.com. Así sabré si por lo menos ven mis aportes, sino pues que sea de buen provecho para ustedes. 

Aquí esta el código

#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<conio.h>

struct banco {
  char nombre[20];
  int cuenta;
  float saldo;
};
typedef struct banco bank;

/***********************************************************************/

main()
{
  bank cliente[50];
  int cant_cliente=0, opc;

  int menu(void);
  int abrir(bank cliente[], int cant_cliente);
  void depositar(bank cliente[], int cant_cliente);
  void retirar(bank cliente[], int cant_cliente);
  void consultar(bank cliente[], int cant_cliente);
  int recuperar(bank cliente[], int cant_cliente);
  void guardar(bank cliente[], int cant_cliente);

  cant_cliente = recuperar(cliente, cant_cliente);

  do {
    opc=menu();
      switch(opc) {
case 1: cant_cliente=abrir(cliente,cant_cliente);
break;

case 2: depositar(cliente,cant_cliente);
break;

case 3: retirar(cliente,cant_cliente);
break;

case 4: consultar(cliente,cant_cliente);
break;

case 5: guardar(cliente,cant_cliente);
cout<<"\n SALIENDO......"<<endl;
getch();
break;

default: cout<<"NO ES OPCION......"<<endl;
getch();
break;
      }
  } while(opc!=5);
}

/***********************************************************************/

int menu(void)
{
  int opc;
    clrscr();  /* Limpia pantalla */
  cout<<"BANCO NACIONAL"<<endl;
  cout<<"\n1. Apertura de cuenta"<<endl;
  cout<<"2. Depositar en cuenta"<<endl;
  cout<<"3. Retirar de la cuenta"<<endl;
  cout<<"4. Consultar cuenta"<<endl;
  cout<<"5. Salir del menu"<<endl;
  cout<<"\n Escoja una opcion: ";
  cin>>opc;

  return(opc);
}

/***********************************************************************/

int recuperar(bank cliente[50], int cant_cliente)
{
  ifstream entrada;                                       
  entrada.open("C:\CUENTAS.dat");

  if(!entrada) {
    cout<<"Error en la apertura"<<endl;
    cout<<"Posiblemente el banco inicia operaciones"<<endl;
    getch();
  }
  else {
    while(!entrada.eof()) {
      entrada>>cliente[cant_cliente].nombre;
      entrada>>cliente[cant_cliente].cuenta;
      entrada>>cliente[cant_cliente].saldo;
      cant_cliente++;
    }
  cant_cliente-=1;
  }

  entrada.close();
  return(cant_cliente);
}

/***********************************************************************/

void guardar(bank cliente[50], int cant_cliente)
{
  int i;
  ofstream salida;
  salida.open("C:\CUENTAS.dat");

  if(!salida) {
    cout<<"ERROR"<<endl;
  }
  else {
    for(i=0; i<cant_cliente; i++) {
      salida<<cliente[i].nombre<<" ";
      salida<<cliente[i].cuenta<<" ";
      salida<<cliente[i].saldo<<" ";
      salida<<"\n";
    }
  }
  salida.close();
}

/***********************************************************************/

int abrir(bank cliente[50], int cant_cliente)
{
  int c=0;
  cout<<"\nIntroduzca el nombre: ";
  cin>>cliente[cant_cliente].nombre;
  cout<<"Introduzca el saldo de apertura: ";
  cin>>cliente[cant_cliente].saldo;
  c+=cant_cliente;
  c++;
  cliente[cant_cliente].cuenta=c;
  cout<<"\nSu numero de cuenta es: "<<cliente[cant_cliente].cuenta;
  getch();
  cant_cliente++;

  return(cant_cliente);
}

/***********************************************************************/

void consultar(bank cliente[50], int cant_cliente)
{
  int i, n_cuenta, pos=-1;

  cout<<"\nInserte el numero de su cuenta: ";
  cin>>n_cuenta;
    for(i=0; i<cant_cliente; i++) {
      if(n_cuenta==cliente[i].cuenta)
pos=i;
    }

    if(pos!=-1) {
      cout<<"\n Cliente: "<<cliente[pos].nombre<<endl;
      cout<<" Usted posee en su cuenta: B/"<<cliente[pos].saldo<<endl;
    }
    else {
      cout<<"\nLa cuenta no esta registrada"<<endl;
    }
    getch();

    return;
}

/***********************************************************************/

void depositar(bank cliente[50], int cant_cliente)
{
  int i, n_cuenta, pos=-1;
  float deposito;

  cout<<"\nInserte el numero de su cuenta: ";
  cin>>n_cuenta;
    for(i=0; i<cant_cliente; i++) {
      if(n_cuenta==cliente[i].cuenta)
pos=i;
    }

    if(pos!=-1) {
      cout<<"\n Cuanto es el deposito: ";
      cin>>deposito;
      cliente[pos].saldo+=deposito;
    }
    else {
      cout<<"\nLa cuenta no esta registrada"<<endl;
      getch();
    }

  return;
}

/***********************************************************************/

void retirar(bank cliente[50], int cant_cliente)
{
  int i, n_cuenta, pos=-1;
  float retiro;

  cout<<"\nInserte el numero de su cuenta: ";
  cin>>n_cuenta;
    for(i=0; i<cant_cliente; i++) {
      if(n_cuenta==cliente[i].cuenta)
pos=i;
    }

    if(pos!=-1) {
      cout<<"\n Cuanto es el retiro: ";
      cin>>retiro;
if(retiro > cliente[pos].saldo) {
 cout<<"\n No dispone de tal cantidad"<<endl;
 getch();
}
else {
 cliente[pos].saldo-=retiro;
}
    }
    else {
      cout<<"\nLa cuenta no esta registrada"<<endl;
      getch();
    }

  return;
}  

/********************************************************************************/

y como siempre, estas son las capturas del programa.


Este es el mensaje que nos aparece en la primera ejecución, ya que se crea el archivo CUENTAS.dat que en mi caso se encuentra en BORLANDC/BIN/. allí se guardarán los datos y saldos de nuestro banco ficticio.







Y bueno,.. eso es todo.

Algo más, si quieres donar a mi blog, se le agradecería mucho, ya que me animaría a publicar más programas hecho por este servidor. Gracias.

jueves, 4 de abril de 2013

Inversa de una Matriz

La inversa de una matriz por método de Gauss-Jordan.

Un pequeño programa hecho en C, que utiliza este método. Antes que veamos el código veamos un poco de teoría...

Dada una matriz A, ¿Podremos encontrar otra matriz B tal que A·B=B·A=I?

Esta matriz B existe aunque no siempre, de existir se le llama matriz inversa de A y se nota A-1. Para que exista la inversa de A, ésta tiene que ser cuadrada pues de lo contrario no se podría hacer el producto por la izquierda y por la derecha, luego cuando hablamos de matrices invertibles estamos hablando de matrices cuadradas.

Condición necesaria y suficiente para que una matriz sea invertible es que no sea singular, es decir, que su determinante sea no nulo |A| ≠ 0

Cálculo de la matriz inversa

Método de Gauss-Jordan

Este método consiste en colocar junto a la matriz de partida (A) la matriz identidad (I) y hacer operaciones por filas, afectando esas operaciones tanto a A como a I, con el objeto de transformar la matriz A en la matriz identidad, la matriz resultante de las operaciones sobre I es la inversa de A (A-1).

Las operaciones que podemos hacer sobre las filas son:

a) Sustituir una fila por ella multiplicada por una constante, por ejemplo, sustituimos la fila 2 por ella multiplicada por 3.

b) Permutar dos filas

c) Sustituir una fila por una combinación lineal de ella y otras.



Utilizando este ejemplo. mostraré el código y su posterior ejecución. :-)

#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<math.h>

/*********************************** imprime matriz **********************/

void desplegar(int n, double **A) {
  int i,j,f,c;
  for(i=1; i<=n; i++) {
    f=(i+1)+12;
    for(j=1; j<=(2*n); j++) {
      c=(j+1)*9;
      gotoxy(c,f);
      cprintf("  %.2f",A[i][j]);
    }
  }
}

/**************************************** captura valor ******************/

double LeeValor(void) {
  double valor;
  scanf("%lf",&valor);
  return valor;
}

/*********************************************************************/

void main() {
  int n,f,c,i,renglon;
  double **A,grande,temp,p,cero;

  clrscr();

  printf("\n Cuantas filas tiene el sistema?: ");
  scanf("%d",&n);

  printf("\n f=%d, c=%d.\n",n,(2*n));


  /******************************** Asigno memoria ***********************/

  A=(double **)calloc(n,sizeof(double *));
  for(i=0; i<n; i++) {
    A[i]=(double *)calloc((2*n),sizeof(double));
  }
  /********************************************************************/

  for(f=1; f<=n; f++) {

    printf("\n fila %d\n",f);
    for(c=1; c<=n; c++) {
      printf("columna %d= ",c);
      A[f][c]=LeeValor();
      A[f][n+c]=0;
    }
    A[f][n+f]=1;
  }
  /********************************************************************/

  for(f=1; f<=n; f++) {

    grande=fabs(A[f][f]);
    renglon=f;

    for(c=f+1; c<=n; c++) {

      if(grande < fabs(A[c][f])) {
grande=fabs(A[c][f]);
        renglon=c;
      }
    } //FIN DEL FOR

    if(grande==0) {

      printf("\n No tiene solucion");
    } //FIN DEL IF

    if(renglon!=f) {

      for(c=1; c<=(2*n); c++) {
temp=A[f][c];
A[f][c]=A[renglon][c];
        A[renglon][c]=temp;
      }
    } //FIN DEL IF

    p=A[f][f];

    for(c=1; c<=(2*n); c++) {
      A[f][c]/=p;
    } //FIN DEL FOR

    for(renglon=1; renglon<=n; renglon++) {

      if(renglon!=f) {
cero=A[renglon][f];
for(c=1; c<=(2*n); c++) {
          A[renglon][c]-=cero*A[f][c];
        }
      }
    } //FIN DEL FOR
  } //FIN DEL FOR
  desplegar(n,A);

  /**************************** Libero memoria *****************************/

  for(i=0; i<n; i++) {
    free(A[i]);
  }
  free(A);
  /*********************************************************************/

  getch();

}

/**********************************************************************/


Y bueno este es la ejecución.


Créditos:
Prof. Luis Real
http://www.ematematicas.net

Algo más, si quieres donar a mi blog, se le agradecería mucho, ya que me animaría a publicar más programas hecho por este servidor. Gracias.

jueves, 28 de marzo de 2013

Semáforo en Java

Este es un ejercicio del libro de "Introduction to Java programming" del autor Y. Daniel Liang.

15.3 Escribir un programa que simule un semáforo. El programa le permitirá al usuario seleccionar entre las tres luces: rojo, amarillo, o verde. Cuando un botón radio es presionado, la luz respectiva se encenderá, y solo una puede estar encendida, como se ve en la imagen. 



Cuando el programa inicie, las luces deben estar apagadas. Además se hizo un menú para que no solo funcione con radio botones.

Bueno aquí esta el código en Java.

/** Light.java */
package backup;

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;

public class Light extends JPanel {
private boolean red;
private boolean yellow;
private boolean green;

    public Light() {
    red=false;
    yellow=false;
    green=false;
    }
    
    //Enciende Luz Roja
    public void red() {
    red=true;
    yellow=false;
    green=false;
    repaint();
    }
    
    //Enciende Luz Amarilla
    public void yellow() {
    red=false;
    yellow=true;
    green=false;
    repaint();
    }
    
    //Enciende Luz verde
    public void green() {
    red=false;
    yellow=false;
    green=true;
    repaint();
    }
    
    //Muestra Luces
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    //Seleccionamos Rojo
    if(red) {
    g.setColor(Color.red);
    g.fillOval(10,10,20,20);
    g.setColor(Color.black);
    g.drawOval(10,35,20,20);
    g.drawOval(10,60,20,20);
    g.drawRect(5,5,30,80);
    }
    //Seleccionamos Amarillo
    else if(yellow) {
    g.setColor(Color.yellow);
    g.fillOval(10,35,20,20);
    g.setColor(Color.black);
    g.drawRect(5,5,30,80);
    g.drawOval(10,10,20,20);
    g.drawOval(10,60,20,20);
    }
    //Seleccionamos Verde
    else if(green) {
    g.setColor(Color.green);
    g.fillOval(10,60,20,20);
    g.setColor(Color.black);
    g.drawRect(5,5,30,80);
    g.drawOval(10,10,20,20);
    g.drawOval(10,35,20,20);
    }
    //El semaforo apagado
    else {
    g.setColor(Color.black);
    g.drawRect(5,5,30,80);
    g.drawOval(10,10,20,20);
    g.drawOval(10,35,20,20);
    g.drawOval(10,60,20,20);
    }
    }
    
    public Dimension getPreferredSize() {
    return new Dimension(40,90);
    }
}

---------------------------------------------------------------------------------------------------------------------------------------------


/** RadioButtonMenuDemo.java */

package backup;

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class RadioButtonMenuDemo extends JFrame implements ActionListener {
private JMenuItem jmiRed, jmiYellow, jmiGreen, jmiClose;
private JRadioButton jrbRed, jrbYellow, jrbGreen;
private ButtonGroup btg = new ButtonGroup();
private Light light;  //El objeto Light

    public RadioButtonMenuDemo() {
    setTitle("Exercise15_3");
   
    //Creando la barra de menu y agregandola al JFrame
    JMenuBar jmb = new JMenuBar();
    setJMenuBar(jmb);
   
    //Instanciando el objeto JMenu con argumento Semaforo
    JMenu semaforoMenu = new JMenu("Semaforo");
    semaforoMenu.setMnemonic('S');
    jmb.add(semaforoMenu);
   
    //Instanciando el objeto JMenu con argumento Exit
    JMenu exitMenu = new JMenu("Exit");
    exitMenu.setMnemonic('E');
    jmb.add(exitMenu);
   
    //Agregando los JMenuItem al JMenu semaforo
    jmiRed = new JMenuItem("Red");
    jmiRed.setMnemonic('R');
    semaforoMenu.add(jmiRed);
   
    jmiYellow = new JMenuItem("Yellow");
    jmiYellow.setMnemonic('Y');
    semaforoMenu.add(jmiYellow);
   
    jmiGreen = new JMenuItem("Green");
    jmiGreen.setMnemonic('G');
    semaforoMenu.add(jmiGreen);
   
    //Agregando al JMenuItem Close al JMenu Exit
    jmiClose = new JMenuItem("Close");
    jmiClose.setMnemonic('C');
    exitMenu.add(jmiClose);
   
    //set keyboard accelerators
    jmiRed.setAccelerator(
    KeyStroke.getKeyStroke(KeyEvent.VK_R, ActionEvent.CTRL_MASK));
    jmiYellow.setAccelerator(
    KeyStroke.getKeyStroke(KeyEvent.VK_Y, ActionEvent.CTRL_MASK));
    jmiGreen.setAccelerator(
    KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.CTRL_MASK));
   
    //Se agrega el semaforo contenido en un panel al panel p1
    JPanel p1 = new JPanel();
    p1.setSize(200, 200);
    p1.setLayout(new FlowLayout(FlowLayout.CENTER));
    light = new Light();
    light.setSize(40, 90);
    p1.add(light);
   
    //Se coloca los radios botones al panel p2
    JPanel p2 = new JPanel();
    p2.setLayout(new FlowLayout());
    p2.add(jrbRed = new JRadioButton("Red",false));
    p2.add(jrbYellow = new JRadioButton("Yellow",false));
    p2.add(jrbGreen = new JRadioButton("Green",false));
   
    //Establecer los Keyboard mnemonics
    jrbRed.setMnemonic('R');
    jrbYellow.setMnemonic('Y');
    jrbGreen.setMnemonic('G');
    
    //Se agrupa los radios botones
    btg.add(jrbRed);
    btg.add(jrbYellow);
    btg.add(jrbGreen);
   
    //Se agregan los paneles al JFrame
    getContentPane().setLayout(new BorderLayout());
    getContentPane().add(p1, BorderLayout.CENTER);
    getContentPane().add(p2, BorderLayout.SOUTH);
   
    //Se registran los escuchas
    jrbRed.addActionListener(this);
    jrbYellow.addActionListener(this);
    jrbGreen.addActionListener(this);
    jmiRed.addActionListener(this);
    jmiYellow.addActionListener(this);
    jmiGreen.addActionListener(this);
    jmiClose.addActionListener(this);
    }
    
    public void actionPerformed(ActionEvent e) {
    String actionCommand = e.getActionCommand();
   
    //Si la accion viene de un JRadioButton
    if(e.getSource() instanceof JRadioButton) {
    if("Red".equals(actionCommand))
    light.red();
    else if("Yellow".equals(actionCommand))
    light.yellow();
    else if("Green".equals(actionCommand))
    light.green();
    //Si la accion viene de un JMenuItem
    } else if(e.getSource() instanceof JMenuItem) {
    if("Red".equals(actionCommand)) {
    light.red();
    jrbRed.setSelected(true);
    } else if("Yellow".equals(actionCommand)) {
    light.yellow();
    jrbYellow.setSelected(true);
    } else if("Green".equals(actionCommand)) {
    light.green();
    jrbGreen.setSelected(true);
    } else if("Close".equals(actionCommand))
    System.exit(0);
    }
    }
    
    public static void main(String[] args) {
    RadioButtonMenuDemo frame = new RadioButtonMenuDemo();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 190);
    frame.setResizable(false);
    frame.setVisible(true);
    }
}


Algo más, si quieres donar a mi blog, se le agradecería mucho, ya que me animaría a publicar más programas hecho por este servidor. Gracias.