Clase Nodo
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA ANALIZA UN ATRCHIVO DE TEXTO Y VERIFICA CUANTAS VECES SE REPITEN LAS PALABRAS ALMACENANDOLAS EN UNA LISTA SIMPLE, SE ALMACENA EL NUMERO DE VECES QUE SE REPITE LA PALABRA Y ENSEGUIDA LA PALABRA.
* Universidad del MAR, campus Puerto Esdondido
*Autor: Darwin Sosa Gómez.
* * */
public class Nodo {
Nodo siguiente;
int VecesRepetidas;
Object Datos;
String WORD;
Nodo (Object o,Nodo n,String pal,int i){
Datos =o;
siguiente = n;
WORD=pal;
VecesRepetidas= i;
}
Nodo (String pal,int i){
VecesRepetidas= i;
WORD =pal;
}
public int getCuantas() {return VecesRepetidas;}
public void setCuantas(int cuantas) {this.VecesRepetidas= cuantas;}
public void setDatos(Object datos) {Datos = datos;}
public void setPalabra(String palabra) {this.WORD = palabra;}
Object getDatos(){return Datos;}
public String getPalabra() {return WORD;}
Object getSiguiente(){return siguiente;}
}
Clase Lista
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA ANALIZA UN ATRCHIVO DE TEXTO Y VERIFICA CUANTAS VECES SE REPITEN LAS PALABRAS ALMACENANDOLAS EN UNA LISTA SIMPLE, SE ALMACENA EL NUMERO DE VECES QUE SE REPITE LA PALABRA Y ENSEGUIDA LA PALABRA.
* Universidad del MAR, campus Puerto Esdondido
*Autor: Darwin Sosa Gómez.
* * */
public class Lista {
Nodo Inicio;
Nodo Final;
Lista(){
Inicio = Final=null;
}
boolean Vacio(){
return (Inicio==null);
}
void InsertarPrincipal(Object o,String palabra,int i){
if(Vacio()){
Inicio = new Nodo(palabra,i);
Final = Inicio;
}
else
Inicio = new Nodo(o,Inicio,palabra,i);
}
void imprimir(){
if(!Vacio()){
Nodo ElementosDeLista = Inicio;
System.out.println("REPETICIONES "+"\t"+" PALABRAS");
while(ElementosDeLista!=null){
System.out.println(" "+ElementosDeLista.VecesRepetidas+"\t\t\t"+ElementosDeLista.WORD);
ElementosDeLista=ElementosDeLista.siguiente;
}
System.out.print("Fin de Diccionario");
}
}
Object NumeroDePalabrasRepetidas(String PalabrasRepetidas){
Object X = null;
boolean Encontrado = false;
Nodo Siguiente = Inicio;
if(!Vacio()){
while(Siguiente!=null&&(!Encontrado)){
if(Siguiente.WORD.compareTo(PalabrasRepetidas)==0){
Siguiente.VecesRepetidas++;
Encontrado=true;
}
else
if(!Encontrado)
Siguiente = Siguiente.siguiente;
}
}
return (X);
}
boolean EsPalabraRepetida(String PalabrasRepetidas){
Nodo Siguiente = Inicio;
boolean Encontrado = false;
if(!Vacio()){
while(Siguiente!=null&&(!Encontrado)){
if(Siguiente.WORD.compareTo(PalabrasRepetidas)==0)
Encontrado=true;
else
if(!Encontrado)
Siguiente = Siguiente.siguiente;
}
}
return Encontrado;
}
}
Clase DiccionarioDePalabras
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA ANALIZA UN ATRCHIVO DE TEXTO Y VERIFICA CUANTAS VECES SE REPITEN LAS PALABRAS ALMACENANDOLAS EN UNA LISTA SIMPLE, SE ALMACENA EL NUMERO DE VECES QUE SE REPITE LA PALABRA Y ENSEGUIDA LA PALABRA.
* Universidad del MAR, campus Puerto Esdondido
*Autor: Darwin Sosa Gómez.
* * */
import java.io.*;
public class DiccionarioDePalabras {
public static void main(String[] args) {
Lista Diccionario = new Lista();
String s1 = "", s, Auxiliar = "", palabras = "";
char Checar[] = { '.', ';', ',', ':', '(', ')', '[', ']', '{', '}',
'*', '"', '=', '!', '+', '-', '/', '\n', '\t', '\r', '\f', '¿',
'?', ' ' };
int contador = 0, i;
boolean bandera = true;
try {
BufferedReader entrada = new BufferedReader(new FileReader("cuenta.txt"));
while ((s = entrada.readLine()) != null) {
s = s + "\n";
while (s.charAt(contador) != '\n') {
bandera = false;
for (i = 0; i < Checar.length; i++) {
if (s.toString().charAt(contador) == Checar[i]) {
Auxiliar += " ";
bandera = true;
}
}
if (!bandera)
Auxiliar += s.toString().charAt(contador);
contador++;
}
if (s.charAt(contador) == '\n')
Auxiliar += ' ';
s1 += s;
contador = 0;
}/** CERRANDO WHILE*/
entrada.close();
contador = i = 0;
Auxiliar += "\n";
while (Auxiliar.charAt(i) != '\n') {
if (Auxiliar.toString().charAt(i) != ' ') {
palabras += Auxiliar.toString().charAt(i++);
}
else{
if (Auxiliar.toString().charAt(i) == ' ') {
while (Auxiliar.toString().charAt(i) == ' ')i++;
contador++;
if (!Diccionario.EsPalabraRepetida(palabras))
Diccionario.InsertarPrincipal(null, palabras, 1);
else
Diccionario.NumeroDePalabrasRepetidas(palabras);
palabras = "";
}
}/** CERRANDO ELSE*/
}/** CERRANDO WHILE*/
Diccionario.imprimir();/** Imprimiendo la Lista o el Diccionario de palabras encontradas*/
}
catch (IOException e) {System.out.print("Error al leer el archivo");}
}
}
Clase DiccionarioElementos
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA CUENTA EL NUMERO DE PALABRAS QUE TIENE UN ARCHIVO DE TEXTO
Universidad del MAR, Campus Puerto Escondido.
Autor: Darwin Sosa Gómez
*/
public class DiccionarioElementos {
String token="";
int id=0;
public DiccionarioElementos(String token,int id) {
super();
this.token=token;
this.id=id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
Clase Diccionario
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA CUENTA EL NUMERO DE PALABRAS QUE TIENE UN ARCHIVO DE TEXTO
Universidad del MAR, Campus Puerto Escondido.
Autor: Darwin Sosa Gómez
*/
import java.io.*;
import java.util.*;
public class Diccionario {
public static void main(String[] args) {
String s="",s1="";
char checar[]={'.','!',';',':','(',')','[',']','#','$','<','>','%','&','*','+','-','/','{','}','\n','=',',','\t','"'};
String checar2="";
int NUMERO_PALABRAS=0;
Vector diccionario=new Vector();
Vector diccionario1=new Vector();
try{
for(int x=0;x
BufferedReader entrada1=new BufferedReader(new FileReader("cuenta.txt"));
while((s=entrada1.readLine())!=null)
s1+=s;
entrada1.close();
System.out.println(s1);
StringTokenizer tokens=new StringTokenizer(s1);
//Separando por tokens
tokens=new StringTokenizer(s1);
while(tokens.hasMoreTokens()){
diccionario.addElement(tokens.nextToken(checar2));
NUMERO_PALABRAS++;
}
int repeticiones=1;
DiccionarioElementos d;
for(int i=0;i
if(diccionario.elementAt(i)==diccionario.elementAt(j)){
repeticiones++;
d =new DiccionarioElementos((String)(diccionario.elementAt(i)),repeticiones);
diccionario1.add(i,d);
}
else{
d =new DiccionarioElementos((String)(diccionario.elementAt(i)),repeticiones);
diccionario1.addElement(d);
}
}
}
System.out.println();
System.out.println("El archivo tiene: "+NUMERO_PALABRAS+" Palabras");
}
catch (IOException e)
{System.out.println("Fin del arreglo de Bytes");}
}
}
Clase ContarPalabras
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA CUENTA EL NUMERO DE PALABRAS QUE TIENE UN ARCHIVO DE TEXTO
Universidad del MAR, Campus Puerto Escondido.
Autor: Darwin Sosa Gómez
*/
import java.io.*;
import java.util.*;
public class ContarPalabras {
public static void main(String[] args) {
String s = "", s1 = "",checar2 = "";;
char checar[] = { '.', ';', ',', ':', '(', ')', '[', ']', '{', '}',
'*', '"', '=', '!', '+', '-', '/', '\n', '\t', '\r', '\f', '¿',
'?', ' ' };
int NUMERO_PALABRAS = 0;
try {
for (int x = 0; x < checar.length; x++)
checar2 += checar[x];
BufferedReader entrada1 = new BufferedReader(new FileReader(
"cuenta.txt"));//Nombre del archivo a analizar.
while ((s = entrada1.readLine()) != null)
s1 += s;
entrada1.close();
System.out.println(s1);
StringTokenizer tokens = new StringTokenizer(s1);
tokens = new StringTokenizer(s1);
while (tokens.hasMoreTokens()) {
tokens.nextToken(checar2);
NUMERO_PALABRAS++;
}
System.out.println("El archivo tiene: " + NUMERO_PALABRAS
+ " Palabras");
} catch (IOException e) {
System.out.println("Fin del arreglo de Bytes");
}
}
}
Compresor De Archivos
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
ESTE PROGRAMA COMPRIME SOLO LOS ARCHIVOS QUE SE ENCUENTRAN EN UN DIRECTORIO DADO
Universidad del MAR, campus Puerto Escondido
Autor: Darwin Sosa Gómez
*/
import java.io.*;
import java.util.zip.*;
import javax.swing.JOptionPane;
public class CompresorDeArchivos {
public static boolean ChecaArchivos(String Archivo)
{
if(!Archivo.matches("[a-z]([0-9][a-z]_.)*"))
return(false);
else
return(true);
}
public static void main(String[] args) {
//Ingresando la ruta del archivo
File ruta = new File ("E:\\POO\\POO II\\Proyectos\\TareaCompresor\\");
String lista[]=ruta.list();
try{
FileOutputStream f = new FileOutputStream ("Carpeta Comprimida.zip");
ZipOutputStream salida = new ZipOutputStream (new BufferedOutputStream(f));
int c;
for(int i=0;i
BufferedReader entrada = new BufferedReader( new FileReader(lista[i]));
salida.putNextEntry(new ZipEntry (lista[i]));
while ((c=entrada.read())!= -1) {
salida.write(c);
entrada.close();
}
}
salida.close();
JOptionPane.showMessageDialog(null, "Los Archivos han sido comprimidos satisfactoriamente", "Exito en Operacion",JOptionPane.INFORMATION_MESSAGE);
}
catch(IOException e)
{
JOptionPane.showMessageDialog(null, "Error al Comprimir los Archivos", "Error en la Compresion",JOptionPane.ERROR_MESSAGE);
}
}
}
Clase Ventana
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
import java.awt.*;
import javax.swing.*;
public class Ventana extends JPanel {
Cuadros tienda;
Ventana() {
setSize(Configuracion.COLUMNAS * Configuracion.ANCHO_BTN,
Configuracion.FILAS * (Configuracion.ALTO_BTN + 8));
setVisible(true);
//setLayout(null);
agregarBotones();
}
private void agregarBotones() {
int numCuadros = Configuracion.FILAS * Configuracion.COLUMNAS;
tienda = new Cuadros(numCuadros);
for (int i = 0; i < numCuadros; i++) {
add(tienda.obtenerBoton(i));
}
}
}
Clase SuperMarket
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
import javax.swing.*;
import javax.swing.JButton;
import java.awt.event.*;
import java.awt.*;
public class SuperMarket extends JFrame implements ActionListener {
private JButton formarClientes, nuevoCliente, liberarTienda, cliente1,
cliente2, cliente3, cliente4, cliente5, cliente6, cliente7,
cliente8, cliente9, cliente10;
private JLabel etiqueta, caja;
private JPanel panel1, panel2;
private JPanel panel3;
private JTextField txtClientesTotales;
private int cliente = 0, j = 0, k = 0, l = 0, contador = 0;
private int arregloClientes[] = new int[Configuracion.HORA_DE_SALIDA + 1];
boolean salir = false;
Cuadros tienda;
Cola temp = new Cola();
private void agregarBotones() {
tienda = new Cuadros(Configuracion.MAX_CLIENTES);
for (int i = 0; i < Configuracion.MAX_CLIENTES; i++) {
panel3.add(tienda.obtenerBoton(i));
}
tienda.ocultarTodos();
}
public SuperMarket() {
super("Darel SuperMercado");
arregloClientes[0] = 0;
setSize(710, 600);
setResizable(false);
setLocationRelativeTo(null);
Container contenedor = getContentPane();
contenedor.setLayout(null);
panel2 = new JPanel();
panel2.setBounds(5, 450, 750, 120);
panel2.setLayout(null);
contenedor.add(panel2);
panel3 = new JPanel();
panel3.setBounds(20, 200, Configuracion.COLUMNAS
* Configuracion.ANCHO_BTN, Configuracion.FILAS
* (Configuracion.ALTO_BTN + 8));
panel3.setLayout(null);
agregarBotones();
contenedor.add(panel3);
panel1 = new JPanel();
panel1.setBounds(5, 50, 750, 100);
panel1.setLayout(null);
contenedor.add(panel1);
caja = new JLabel("CAJA");
caja.setIcon(new ImageIcon("caja.png"));
caja.setBounds(10, 5, 190, 50);
panel1.add(caja);
cliente1 = new JButton();
cliente1.setBounds(10, 50, 50, Configuracion.ALTO_BTN);
cliente1.setEnabled(false);
cliente1.setVisible(false);
panel1.add(cliente1);
cliente2 = new JButton();
cliente2.setBounds(70, 50, 50, Configuracion.ALTO_BTN);
cliente2.setEnabled(false);
cliente2.setVisible(false);
panel1.add(cliente2);
cliente3 = new JButton();
cliente3.setBounds(130, 50, 50, Configuracion.ALTO_BTN);
cliente3.setEnabled(false);
cliente3.setVisible(false);
panel1.add(cliente3);
cliente4 = new JButton();
cliente4.setBounds(190, 50, 50, Configuracion.ALTO_BTN);
cliente4.setEnabled(false);
cliente4.setVisible(false);
panel1.add(cliente4);
cliente5 = new JButton();
cliente5.setBounds(250, 50, 50, Configuracion.ALTO_BTN);
cliente5.setEnabled(false);
cliente5.setVisible(false);
panel1.add(cliente5);
cliente6 = new JButton();
cliente6.setBounds(310, 50, 50, Configuracion.ALTO_BTN);
cliente6.setEnabled(false);
cliente6.setVisible(false);
panel1.add(cliente6);
cliente7 = new JButton();
cliente7.setBounds(370, 50, 50, Configuracion.ALTO_BTN);
cliente7.setEnabled(false);
cliente7.setVisible(false);
panel1.add(cliente7);
cliente8 = new JButton();
cliente8.setBounds(430, 50, 50, Configuracion.ALTO_BTN);
cliente8.setEnabled(false);
cliente8.setVisible(false);
panel1.add(cliente8);
cliente9 = new JButton();
cliente9.setBounds(490, 50, 50, Configuracion.ALTO_BTN);
cliente9.setEnabled(false);
cliente9.setVisible(false);
panel1.add(cliente9);
cliente10 = new JButton();
cliente10.setBounds(550, 50, 50, Configuracion.ALTO_BTN);
cliente10.setEnabled(false);
cliente10.setVisible(false);
panel1.add(cliente10);
etiqueta = new JLabel("Total de Clientes");
etiqueta.setBounds(50, 10, 150, 25);
panel2.add(etiqueta);
txtClientesTotales = new JTextField(10);
txtClientesTotales.setBounds(150, 10, 50, 25);
txtClientesTotales.setEnabled(false);
panel2.add(txtClientesTotales);
nuevoCliente = new JButton("Agregar Cliente",
new ImageIcon("nuevo.png"));
nuevoCliente.setToolTipText("Agrega un Nuevo Cliente al SuperMercado");
nuevoCliente.setBounds(10, 40, 190, 50);
nuevoCliente.addActionListener(this);
panel2.add(nuevoCliente);
formarClientes = new JButton("Formar Clientes", new ImageIcon(
"formar.png"));
formarClientes
.setToolTipText("Forma los Clientes que estan en el SuperMercado");
formarClientes.setBounds(255, 40, 190, 50);
formarClientes.setEnabled(false);
formarClientes.addActionListener(this);
panel2.add(formarClientes);
liberarTienda = new JButton("Liberar Clientes", new ImageIcon(
"liberar.png"));
liberarTienda.setToolTipText("Saca los clientes de la caja");
liberarTienda.setBounds(480, 40, 190, 50);
liberarTienda.setEnabled(false);
liberarTienda.addActionListener(this);
panel2.add(liberarTienda);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(nuevoCliente)) {
int num = 1;
if (temp.buscar(num)) {
num = temp.autogenerar();
}
temp.Insertar(new Integer(num), tienda.meterCliente(num));
cliente++;
txtClientesTotales.setText(String.valueOf(cliente));
arregloClientes[j++] = num;
formarClientes.setEnabled(true);
liberarTienda.setEnabled(false);
if (cliente == Configuracion.MAX_CLIENTES) {
JOptionPane.showMessageDialog(null,
"El SuperMercado ha llegado a su limite de Clientes",
"Super Mercado Lleno", JOptionPane.WARNING_MESSAGE);
nuevoCliente.setEnabled(false);
}
if (j > Configuracion.HORA_DE_SALIDA) {
JOptionPane
.showMessageDialog(
null,
"Es hora de Cerrar la Tienda, Libere todos los clientes",
"Fin de Operaciones", JOptionPane.ERROR_MESSAGE);
nuevoCliente.setEnabled(false);
salir = true;
}
}
if (e.getSource().equals(formarClientes)) {
for (int i = 0; i < Integer.parseInt(txtClientesTotales.getText()); i++) {
if (k == 0) {
cliente1.setVisible(true);
cliente1.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 1) {
cliente2.setVisible(true);
cliente2.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 2) {
cliente3.setVisible(true);
cliente3.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 3) {
cliente4.setVisible(true);
cliente4.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 4) {
cliente5.setVisible(true);
cliente5.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 5) {
cliente6.setVisible(true);
cliente6.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 6) {
cliente7.setVisible(true);
cliente7.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 7) {
cliente8.setVisible(true);
cliente8.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 8) {
cliente9.setVisible(true);
cliente9.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
if (k == 9) {
cliente10.setVisible(true);
cliente10.setText(String.valueOf(arregloClientes[l++]));
contador++;
}
formarClientes.setEnabled(false);
if (!salir)
nuevoCliente.setEnabled(false);
liberarTienda.setEnabled(true);
if (k == Configuracion.MAX_COLA) {
k = 0;
break;
} else
k++;
}
Nodo nodoTemp = temp.Inicio;
for (int i = 0; i < contador; i++) {
tienda.ocultar(nodoTemp.indice);
nodoTemp = nodoTemp.siguiente;
}
}
if (e.getSource().equals(liberarTienda)) {
cliente = Integer.parseInt(txtClientesTotales.getText()) - contador;
txtClientesTotales.setText(String.valueOf(Integer
.parseInt(txtClientesTotales.getText())
- contador));
k = 0;
if (!temp.Vacio()) {
for (int i = 0; i < contador; i++) {
temp.EliminarPrincipio();
}
cliente1.setVisible(false);
cliente2.setVisible(false);
cliente3.setVisible(false);
cliente4.setVisible(false);
cliente5.setVisible(false);
cliente6.setVisible(false);
cliente7.setVisible(false);
cliente8.setVisible(false);
cliente9.setVisible(false);
cliente10.setVisible(false);
}
liberarTienda.setEnabled(false);
if (!salir)
nuevoCliente.setEnabled(true);
if (Integer.parseInt(txtClientesTotales.getText()) == 0)
formarClientes.setEnabled(false);
else
formarClientes.setEnabled(true);
contador = 0;
}
}
}
Clase Nodo
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
public class Nodo {
Object Datos;
int indice;
Nodo siguiente;
Nodo(Object o, int index) {
Datos = o;
indice = index;
siguiente = null;
}
Object getDatos() {
return Datos;
}
Object getSiguiente() {
return siguiente;
}
}
Clase Lista
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
public class Lista {
Nodo Inicio;
Nodo Final;
Lista() {
Inicio = Final = null;
}
boolean Vacio() {
return (Inicio == null);
}
void InsertarFinal(Object o, int indice) {
if (Vacio()) {
Inicio = new Nodo(o, indice);
Final = Inicio;
} else {
Nodo T = Final;
Final = new Nodo(o, indice);
T.siguiente = Final;
}
}
void ImprimirPila() {
if (Vacio())
System.out.print("La Pila está vacia...");
else {
Nodo ElementoLista = Inicio;
while (ElementoLista != null) {
System.out.println(ElementoLista.Datos.toString());
ElementoLista = ElementoLista.siguiente;
}
}
}
Object EliminarPrincipio() {
Object T = null;
if (Vacio())
System.out.print("La Pila esta vacia, no se puede eliminar");
else {
T = Inicio.Datos;
if (Inicio == Final)
Inicio = Final = null;
else
Inicio = Inicio.siguiente;
}
return T;
}
public boolean busqueda(int numero) {
Nodo R = Inicio;
boolean bEncontrado = false;
if (R == null) {
return bEncontrado;
}
do {
if (Integer.parseInt(R.Datos.toString()) == numero)
bEncontrado = true;
else
R = R.siguiente;
} while (R != null && !bEncontrado);
return bEncontrado;
}
}
Clase Cuadros
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
import java.util.*;
import javax.swing.*;
public class Cuadros {
private Vector botones;
Cuadros(int num) {
botones = new Vector();
int contColumna, contFila;
contColumna = contFila = 0;
for (int i = 0; i < num; i++) {
botones.add(new JButton(String
.valueOf(Configuracion.MAX_CLIENTES + 1)));
obtenerBoton(i).setSize(Configuracion.ANCHO_BTN,
Configuracion.ALTO_BTN);
obtenerBoton(i).setLocation(Configuracion.ANCHO_BTN * contColumna,
Configuracion.ALTO_BTN * contFila);
obtenerBoton(i).setEnabled(false);
if (contColumna + 1 == Configuracion.COLUMNAS) {
contColumna = 0;
contFila++;
} else
contColumna++;
}
}
public void ocultar(int indice) {
obtenerBoton(indice).setVisible(false);
obtenerBoton(indice).setText(null);
}
private void mostrar(int indice, int numCliente) {
obtenerBoton(indice).setVisible(true);
obtenerBoton(indice).setText(String.valueOf(numCliente));
}
public void ocultarTodos() {
for (int i = 0; i < getSize(); i++) {
obtenerBoton(i).setVisible(false);
obtenerBoton(i).setText(null);
}
}
public boolean vacio(int indice) {
if (obtenerBoton(indice).isVisible())
return false;
else
return true;
}
public int getSize() {
return botones.size();
}
public JButton obtenerBoton(int indice) {
return (JButton) botones.elementAt(indice);
}
public int meterCliente(int numCliente) {
int n;
boolean salir = false;
do {
n = (int) (Math.random() * Configuracion.MAX_CLIENTES);
if (vacio(n))
salir = true;
} while (!salir);
mostrar(n, numCliente);
return n;
}
}
Claso Configuracion
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
public class Configuracion {
static final int ANCHO_BTN = 65;
static final int ALTO_BTN = 50;
static final int COLUMNAS = 10;
static final int FILAS = 4;
static final int MAX_CLIENTES = COLUMNAS * FILAS;
static final int MAX_COLA = MAX_CLIENTES;
static final int HORA_DE_SALIDA = 10000;
}
Clase Cola
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
public class Cola extends Lista {
Cola() {
super();
}
void Insertar(Object o, int indice) {
InsertarFinal(o, indice);
}
boolean buscar(int n) {
return busqueda(n);
}
public int autogenerar() {
int n = 2;
boolean salir = false;
do {
if (buscar(n)) {
n++;
if (n == Configuracion.MAX_CLIENTES + 1)
n = 1;
} else {
salir = true;
}
} while (!salir);
return n;
}
Object Eliminar(Object o) {
return EliminarPrincipio();
}
void imprimir() {
super.ImprimirPila();
}
boolean Vacio() {
return (super.Vacio());
}
}
Clase Aplicacion
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
Universidad del MAR, campus Puerto Escondido
Autores:
*Eli Rafael Galguera Bautista.
*Darwin Sosa Gómez.
Proyecto: Simulador de supermercado.
*/
import javax.swing.JFrame;
import javax.swing.*;
public class Aplicacion {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
SuperMarket superMercado = new SuperMarket();
superMercado.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Clase Ventana
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
UNIVERSIDAD DEL MAR
PROYECTO: CREAR UN SISTEMA QUE REPRODUZCA UNA MELODIA (USANDO LAS NOTAS BASICAS)
CREADA POR EL USUARIO.
AUTORES:
* Eli rafael Galguera Bautista
* Darwin Sosa Gómez
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
import javax.swing.event.*;
import javax.sound.midi.*;
import java.util.Vector;
import java.io.File;
import java.io.IOException;
public class VentanaSonido extends JFrame implements ActionListener{
final int PROGRAM = 192;
final int NOTEON = 144;
final int NOTEOFF = 128;
final int SUSTAIN = 64;
final int REVERB = 91;
final int numNotas = 7;
final int numPosiciones = 20;
final int ON = 0, OFF = 1;
final Color jfcBlue = new Color(204, 204, 255);
final Color pink = new Color(255, 175, 175);
Sequencer sequencer;
Sequence sequence;
Synthesizer synthesizer;
Instrument instruments[];
ChannelData channels[];
ChannelData channelData;
Vector keys = new Vector();
Vector whiteKeys = new Vector();
JTable table;
boolean record;
int xPos;
Track track;
long startTime;
RecordFrame recordFrame;
JButton btnDo, btnRe, btnMi, btnFa, btnSol, btnLa, btnSi, recordB ;
JButton btnAnt, btnSig,btnFin, btnInicio, btnBorrar, btnStop, btnPlay, btnRec;
JButton btnPointer;
JPanel panelNotas;
Cuadros cuadros;
Container contenedor;
public VentanaSonido() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
super.setTitle("Sistema de archivos Midi");
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int w = 530;
int h = 270;
setLocation(screenSize.width/2 - w/2, screenSize.height/2 - h/2);
setSize(w, h);
setResizable(false);
contenedor = getContentPane();
contenedor.setLayout(new BorderLayout());
xPos = 0;
recordB = createButton("Record...");
btnRec = createButton("Grabar");
btnDo = createButton("Do");
btnRe = createButton("Re");
btnMi = createButton("Mi");
btnFa = createButton("Fa");
btnSol = createButton("Sol");
btnLa = createButton("La");
btnSi = createButton("Si");
btnAnt=createButton("<<");
btnSig=createButton(">>");
btnFin=createButton(">|");
btnInicio=createButton("|<");
btnBorrar=createButton("X");
btnStop=createButton("O");
btnPlay=createButton(">");
btnPointer = new JButton();
btnPointer.setIcon(new ImageIcon("icono.png"));
btnPointer.setSize(20,20);
btnPointer.setLocation(0,145);
JPanel p1 = new JPanel(new GridLayout(2,8));
p1.add(btnInicio);
p1.add(btnAnt);
p1.add(btnStop);
p1.add(btnBorrar);
p1.add(btnPlay);
p1.add(btnSig);
p1.add(btnFin);
p1.add(recordB);
p1.add(btnSi);
p1.add(btnLa);
p1.add(btnSol);
p1.add(btnFa);
p1.add(btnMi);
p1.add(btnRe);
p1.add(btnDo);
cuadros = new Cuadros(182);
panelNotas=new JPanel(null);
for (int i=0; i<182; i++)
panelNotas.add(cuadros.obtenerBoton(i));
panelNotas.add(btnPointer);
contenedor.add(panelNotas,BorderLayout.CENTER);
contenedor.add(p1,BorderLayout.SOUTH);
setVisible(true);
btnSig.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
btnPointer.setLocation(xPos*20,145);
xPos++;
if(xPos==Configuracion.COLUMNAS){
btnSig.setEnabled(false);
habilitarNotas(false);
}
}
});
}
public void habilitarNotas(boolean habilitar){
btnDo.setEnabled(habilitar);
btnRe.setEnabled(habilitar);
btnMi.setEnabled(habilitar);
btnFa.setEnabled(habilitar);
btnSol.setEnabled(habilitar);
btnLa.setEnabled(habilitar);
btnSi.setEnabled(habilitar);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(btnDo)){
channelData.channel.noteOn(Notas.DO, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.DO);
}
cuadros.mostrar(xPos,Notas._do);
btnSig.doClick();
} else if (e.getSource().equals(btnRe)){
channelData.channel.noteOn(Notas.RE, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.RE);
}
cuadros.mostrar(xPos,Notas._re);
btnSig.doClick();
}else if (e.getSource().equals(btnMi)){
channelData.channel.noteOn(Notas.MI, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.MI);
}
cuadros.mostrar(xPos,Notas._mi);
btnSig.doClick();
}else if (e.getSource().equals(btnFa)){
channelData.channel.noteOn(Notas.FA, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.FA);
}
cuadros.mostrar(xPos,Notas._fa);
btnSig.doClick();
}else if (e.getSource().equals(btnSol)){
channelData.channel.noteOn(Notas.SOL, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.SOL);
}
cuadros.mostrar(xPos,Notas._sol);
btnSig.doClick();
}else if (e.getSource().equals(btnLa)){
channelData.channel.noteOn(Notas.LA, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.LA);
}
cuadros.mostrar(xPos,Notas._la);
btnSig.doClick();
}else if (e.getSource().equals(btnSi)){
channelData.channel.noteOn(Notas.SI, channelData.velocity);
if (record) {
creaEventoCorto(NOTEON, Notas.SI);
}
cuadros.mostrar(xPos,Notas._si);
btnSig.doClick();
}
JButton button = (JButton) e.getSource();
if (button.getText().startsWith("Record")) {
if (recordFrame != null) {
recordFrame.toFront();
} else {
recordFrame = new RecordFrame();
}
}
}
public JButton createButton(String name) {
JButton b = new JButton(name);
b.addActionListener(this);
contenedor.add(b);
return b;
}
public void open() {
try {
if (synthesizer == null) {
if ((synthesizer = MidiSystem.getSynthesizer()) == null) {
System.out.println("getSynthesizer() failed!");
return;
}
}
synthesizer.open();
sequencer = MidiSystem.getSequencer();
sequence = new Sequence(Sequence.PPQ, 10);
} catch (Exception ex) { ex.printStackTrace(); return; }
Soundbank sb = synthesizer.getDefaultSoundbank();
if (sb != null) {
instruments = synthesizer.getDefaultSoundbank().getInstruments();
synthesizer.loadInstrument(instruments[0]);
}
MidiChannel midiChannels[] = synthesizer.getChannels();
channels = new ChannelData[midiChannels.length];
for (int i = 0; i < channels.length; i++) {
channels[i] = new ChannelData(midiChannels[i], i);
}
channelData = channels[0];
}
public void close() {
if (synthesizer != null) {
synthesizer.close();
}
if (sequencer != null) {
sequencer.close();
}
sequencer = null;
synthesizer = null;
instruments = null;
channels = null;
if (recordFrame != null) {
recordFrame.dispose();
recordFrame = null;
}
}
public void creaEventoCorto(int type, int num) {
ShortMessage mensajeCorto = new ShortMessage();
try {
long millis = System.currentTimeMillis() - startTime;
long tick = millis * sequence.getResolution() / 500;
mensajeCorto.setMessage(type+channelData.num, num, channelData.velocity);
MidiEvent event = new MidiEvent(mensajeCorto, tick);
track.add(event);
} catch (Exception ex) { ex.printStackTrace(); }
}
/*************************************************************************************************/
class ChannelData {
MidiChannel channel;
boolean solo, mono, mute, sustain;
int velocity = 127;
int pressure = 127;
int bend = 16383;
int reverb = 127;
int row, col, num;
public ChannelData(MidiChannel channel, int num) {
this.channel = channel;
this.num = num;
}
public void setComponentStates() {
table.setRowSelectionInterval(row, row);
table.setColumnSelectionInterval(col, col);
}
}
class RecordFrame extends JFrame implements ActionListener, MetaEventListener {
public JButton recB, playB, saveB;
Vector tracks = new Vector();
DefaultListModel listModel = new DefaultListModel();
TableModel dataModel;
public RecordFrame() {
super("Grabando Archivo Midi");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {recordFrame = null;}
});
sequencer.addMetaEventListener(this);
try {
sequence = new Sequence(Sequence.PPQ, 10);
} catch (Exception ex) { ex.printStackTrace(); }
JPanel p1 = new JPanel(new BorderLayout());
JPanel p2 = new JPanel();
p2.setBorder(new EmptyBorder(5,5,5,5));
p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
recB = createButton("Record", p2, true);
playB = createButton("Play", p2, false);
saveB = createButton("Save...", p2, false);
getContentPane().add("North", p2);
pack();
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int w = 220;
int h = 80;
setLocation(d.width/2 - w/2, d.height/2 - h/2);
setSize(w, h);
setResizable(false);
setVisible(true);
}
public JButton createButton(String name, JPanel p, boolean state) {
JButton b = new JButton(name);
b.setFont(new Font("serif", Font.PLAIN, 10));
b.setEnabled(state);
b.addActionListener(this);
p.add(b);
return b;
}
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if (button.equals(recB)) {
record = recB.getText().startsWith("Record");
if (record) {
track = sequence.createTrack();
startTime = System.currentTimeMillis();
creaEventoCorto(PROGRAM,channelData.col*8+channelData.row);
recB.setText("Stop");
playB.setEnabled(false);
saveB.setEnabled(false);
} else {
String name = null;
if (instruments != null) {
name = instruments[channelData.col*8+channelData.row].getName();
} else {
name = Integer.toString(channelData.col*8+channelData.row);
}
tracks.add(new TrackData(channelData.num+1, name, track));
recB.setText("Record");
playB.setEnabled(true);
saveB.setEnabled(true);
}
} else if (button.equals(playB)) {
if (playB.getText().startsWith("Play")) {
try {
sequencer.open();
sequencer.setSequence(sequence);
} catch (Exception ex) { ex.printStackTrace(); }
sequencer.start();
playB.setText("Stop");
recB.setEnabled(false);
} else {
sequencer.stop();
playB.setText("Play");
recB.setEnabled(true);
}
} else if (button.equals(saveB)) {
try {
File file = new File(System.getProperty("user.dir"));
JFileChooser fc = new JFileChooser(file);
fc.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
return false;
}
public String getDescription() {
return "Guardar como archivo .mid";
}
});
if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
saveMidiFile(fc.getSelectedFile());
}
} catch (SecurityException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public void meta(MetaMessage message) {
if (message.getType() == 47) {
playB.setText("Play");
recB.setEnabled(true);
}
}
public void saveMidiFile(File file) {
try {
int[] fileTypes = MidiSystem.getMidiFileTypes(sequence);
if (fileTypes.length == 0) {
System.out.println("No se puede guardar la secuencia");
} else {
if (MidiSystem.write(sequence, fileTypes[0], file) == -1) {
throw new IOException("Error: No se puede guardar el archivo");
}
}
} catch (SecurityException ex) {
} catch (Exception ex) {
ex.printStackTrace();
}
}
class TrackData extends Object {
Integer chanNum; String name; Track track;
public TrackData(int chanNum, String name, Track track) {
this.chanNum = new Integer(chanNum);
this.name = name;
this.track = track;
}
}
}
/***********************************************************************************/
public static void main(String args[]) {
VentanaSonido ventana = new VentanaSonido();
ventana.open();
ventana.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);}
});
}
}
Clase Notas
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
UNIVERSIDAD DEL MAR
PROYECTO: CREAR UN SISTEMA QUE REPRODUZCA UNA MELODIA (USANDO LAS NOTAS BASICAS)
CREADA POR EL USUARIO.
AUTORES:
* Eli rafael Galguera Bautista
* Darwin Sosa Gómez
*/
import java.util.*;
import javax.swing.*;
public class Notas {
public static final int DO = 50;
public static final int RE = 60;
public static final int MI = 70;
public static final int FA = 80;
public static final int SOL =90;
public static final int LA =100;
public static final int SI =110;
public static final int _do = 6;
public static final int _re = 5;
public static final int _mi = 4;
public static final int _fa = 3;
public static final int _sol =2;
public static final int _la = 1;
public static final int _si = 0;
}
/*Vector vNotas;
Notas(int elements){
vNotas = new Vector();
for(int i=0;i
}
public void agregarNota(int pos, int nota){
getPunto(pos).setPosNota(nota);
getPunto(pos).boton.setVisible(true);
}
private Punto getPunto(int pos){
return (Punto)(vNotas.elementAt(pos));
}
public void limpiarNota(int pos){
getPunto(pos).boton.setVisible(false);
}
}
class Punto{
JButton boton;
int posicion;
int posX;
Punto(JButton btn, int pos){
boton = btn;
boton.setSize(10,10);
boton.setEnabled(false);
boton.setVisible(false);
posX = pos*10;
}
public void setPosNota(int nota){
posicion = nota;
switch(nota){
case Notas._do:
boton.setLocation(posX,Notas.DO);
break;
case Notas._re:
boton.setLocation(posX,Notas.RE);
break;
case Notas._mi:
boton.setLocation(posX,Notas.MI);
break;
case Notas._fa:
boton.setLocation(posX,Notas.FA);
break;
case Notas._sol:
boton.setLocation(posX,Notas.SOL);
break;
case Notas._la:
boton.setLocation(posX,Notas.LA);
break;
case Notas._si:
boton.setLocation(posX,Notas.SI);
break;
}
}*/
Clase Cuadros
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
UNIVERSIDAD DEL MAR
PROYECTO: CREAR UN SISTEMA QUE REPRODUZCA UNA MELODIA (USANDO LAS NOTAS BASICAS)
CREADA POR EL USUARIO.
AUTORES:
* Eli rafael Galguera Bautista
* Darwin Sosa Gómez
*/
import java.util.*;
import javax.swing.*;
public class Cuadros {
private Vector botones;
Cuadros(int num) {
botones = new Vector();
int contColumna, contFila;
contColumna = contFila = 0;
for (int i = 0; i < num; i++) {
botones.add(new JButton(/*String.valueOf(Configuracion.MAX_CLIENTES + 1)*/));
obtenerBoton(i).setSize(Configuracion.ANCHO_BTN,
Configuracion.ALTO_BTN);
obtenerBoton(i).setLocation(Configuracion.ANCHO_BTN * contColumna,
Configuracion.ALTO_BTN * contFila);
obtenerBoton(i).setEnabled(false);
if (contColumna + 1 == Configuracion.COLUMNAS) {
contColumna = 0;
contFila++;
} else
contColumna++;
}
}
public void ocultar(int indice) {
obtenerBoton(indice).setVisible(false);
obtenerBoton(indice).setText(null);
}
public void mostrar (int x, int y){
int indice = y*Configuracion.COLUMNAS+x;
obtenerBoton(indice).setEnabled(true);
}
public void ocultarTodos() {
for (int i = 0; i < getSize(); i++) {
obtenerBoton(i).setVisible(false);
obtenerBoton(i).setText(null);
}
}
public boolean vacio(int indice) {
if (obtenerBoton(indice).isVisible())
return false;
else
return true;
}
public int getSize() {
return botones.size();
}
public JButton obtenerBoton(int indice) {
return (JButton) botones.elementAt(indice);
}
public int meterCliente(int numCliente) {
int n;
boolean salir = false;
do {
n = (int) (Math.random() * Configuracion.MAX_CLIENTES);
if (vacio(n))
salir = true;
} while (!salir);
mostrar(n, numCliente);
return n;
}
public int getNota(int x){
int y;
for(y=0;y
if(obtenerBoton(indice).isEnabled())
break;
}
return getFrecuencia(y);
}
private int getFrecuencia(int posNota){
switch(posNota){
case Notas._do:
return Notas.DO;
case Notas._re:
return Notas.RE;
case Notas._mi:
return Notas.MI;
case Notas._fa:
return Notas.FA;
case Notas._sol:
return Notas.SOL;
case Notas._la:
return Notas.LA;
case Notas._si:
return Notas.SI;
}
return 0;
}
}
Clase de configuracion
Publicado por Darwin Sosa Gómez el miércoles, septiembre 12, 2007
UNIVERSIDAD DEL MAR
PROYECTO: CREAR UN SISTEMA QUE REPRODUZCA UNA MELODIA (USANDO LAS NOTAS BASICAS)
CREADA POR EL USUARIO.
AUTORES:
* Eli rafael Galguera Bautista
* Darwin Sosa Gómez
*/
public class Configuracion {
static final int ANCHO_BTN = 20;
static final int ALTO_BTN = 20;
static final int COLUMNAS = 26;
static final int FILAS = 7;
static final int MAX_CLIENTES = COLUMNAS * FILAS;
static final int MAX_COLA = MAX_CLIENTES;
static final int HORA_DE_SALIDA = 10000;
}
Editor de Texto
Publicado por Darwin Sosa Gómez el lunes, septiembre 10, 2007
-----------------------------------------------------------------------------
-------------------- --------------------
-------------------- E D I T O R D E T E X T O --------------------
-------------------- --------------------
-----------------------------------------------------------------------------
UNIVERSIDAD DEL MAR. CAMPUS PUERTO ESCONDIDO..
MATERIA : Estructura de Datos.
CARRERA : Lic. Inform tica.
PROFESOR : Freddy Juarez P‚rez.
EQUIPO: # 2
Alma Alheli Pedro P‚rez.
Zulima Silva Santos.
Jasiel Hassan Toscano Mart¡nez.
Emilio Nicolas Lavariega.
Darwin Sosa G¢mez.
*/
#include
#include
#include
#include
#define constcodeAscii 1
#define constcodeExtended 0
/* DECLARANDO LA LISTA */
typedef struct Lista{
char *linea;
struct Lista *Siguiente;
struct Lista *Anterior;
}LISTA;
LISTA *BUSCAR;
LISTA *ROOT=NULL;
/* Funciones Usadas */
int editar(LISTA *R,int ncol, int nlin);
void Cre_archivo_NVO();
void Abre_archivo_NVO();
void fondo();
void crea_recuadr_();
void nombres();
void error();
void encabezado();
void analizar();
void limpiar(char);
void meterlista(char);
void imprimelista(void);
void fondo_blanco();
void fondo_Nombres();
void main1();
/* Vectores auxiliares */
char todo_el_archivo[3000];
char auxiliar[80];
char Archivo_name[10];
char unidad[1];
char nombre1[10];
char opcion;
/* Banderas auxiliar en los textos de las pantallas */
int c=0,m=0,a=0,An=0,contador=0;
int bandera=0;
void fondo_blanco(int color)
{
textmode(C4350);
window(1,1,80,50);
textbackground(color);
clrscr();
textcolor(BLACK);
}
/*--------------------------------------------------------------------------------
------------ ---------------------------------
------------ LLENANDO LA LISTA CON EL ARCHIVO ---------------------------------
------------ --------------------------------
--------------------------------------------------------------------------------*/
void meterlista()
{
int len=80;
LISTA *NUEVO=new(LISTA);
if(ROOT==NULL)
{
ROOT=NUEVO;
NUEVO->Siguiente=NULL;
NUEVO->Anterior=NULL;
NUEVO->linea=(char*)malloc(sizeof(char)*len);
strcpy(NUEVO->linea,auxiliar);
}
else
{
LISTA *R=ROOT;
while(R->Siguiente!=NULL)R=R->Siguiente;
R->Siguiente=NUEVO;
NUEVO->Siguiente=NULL;
NUEVO->Anterior=R;
NUEVO->linea=(char*)malloc(sizeof(char)*len);
strcpy(NUEVO->linea,auxiliar);
}
}
/*----------------------------------------------------------------------------------
------------ ---------------
------------ LIMPIANDO EL VECTOR AUXILIAR QUE GUARDA EN LA LISTA ---------------
------------ ---------------
----------------------------------------------------------------------------------*/
void limpiar()
{
for(int g=0;g<=79;g++)
{
auxiliar[g]=NULL;
}
}
/*----------------------------------------------------------------------------------
------------ ------------------------------
------------ IMPRIMIENDO LA LISTA Y GUARDANDO ------------------------------
------------ ------------------------------
----------------------------------------------------------------------------------*/
void imprimelista(void)
{
fondo_blanco(1);
_setcursortype(_NORMALCURSOR);
int ncontrol=80;
int naccion=0;
int x=3,y=6;
LISTA *R=ROOT;
clrscr();
fondo();
/* ENCABEZADO Y PIE DE LA PANTALLA ACTUAL */
textcolor(10);gotoxy(5,1);cprintf(" EDITANDO ARCHIVO ");textcolor(15);
for(int i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
textcolor(12);gotoxy(50,3);cprintf("%s",unidad);textcolor(15);
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Guardar y Volver Presione 'ESC'");textcolor(15);
/* Imprimiendo en pantalla la lista (esta contiene el archivo) */
do{
if(bandera==1)
return;//main1();
else
{
textcolor(YELLOW);
gotoxy(3,y++);
cprintf("%s", R->linea);
}
R=R->Siguiente;
}while(R!=NULL);
R=ROOT;
x=3;y=6;
/* Segun la tecla presionada, se llama a la funcion que edita archivo */
while(naccion!=27)
{
switch(ncontrol)
{
case 80:
R=R->Siguiente;
if(y<=43)y++;
naccion=editar(R,x,y);
break;
case 72:
R=R->Anterior;
if(y>=8)y--;
naccion=editar(R,x,y);
break;
}
switch(naccion)
{
case 80:ncontrol=80;break;
case 72:ncontrol=72;break;
}
}
}
/*----------------------------------------------------------------------------------
------------ ------------------------------
------------ EDITANDO LA LISTA CON EL ARCHIVO ------------------------------
------------ ------------------------------
----------------------------------------------------------------------------------*/
int editar( LISTA *R,int ncol, int nlin)
{
int ntypecode=0;
int x=ncol;
int y=nlin;
FILE *fp;
char *lineas;
lineas=R->linea;/* Guardando toda la linea en un vector */
int nmaxcol=79;/* Ancho de la pantalla */
int w=strlen(lineas)+1;/* Calculando el tama¤o de la linea */
/* Limpiando los espacion no usados del vector linea (Evita imprimir basura)*/
for(int w1=w+1;w1<=nmaxcol;w1++)
lineas[w1]='\x0';
int acharacter=0;
int bexit=0;
gotoxy(ncol,nlin);
while(acharacter!=27 && !bexit)
{
acharacter=getch();
ntypecode=constcodeAscii;
if(acharacter==0)
{
acharacter=getch();
ntypecode=constcodeExtended;
}
if(ntypecode==constcodeAscii && acharacter!=27)
{
cprintf("%c",acharacter);
*(lineas+(x-ncol))=acharacter;
acharacter=77;
}
switch(acharacter)
{
case 80:bexit=1;break;
case 72:bexit=1;break;
case 75:if(x>ncol)x--;break;
case 77:if(x
gotoxy(x,y);
}/* Cerrando While */
if (acharacter==27)
{
R=ROOT;
fp=fopen(unidad,"w");
if(fp==NULL)/*En caso que no se pueda crear el archivo*/
{
error();
getch();
}
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/
while(R!=NULL)/*Insertando Datos en el archivo*/
{
for(int b=0;b<=strlen(R->linea);b++)
{
fputc(R->linea[b],fp);
}
R=R->Siguiente;
}
fclose(fp);
} /* Cerrando IF */
return(acharacter);/*Rotornando el Caracter que se oprimi¢*/
}
/*------------------------------------------------------------------------------------
------------- --------------
------------- IMPRIMIENDO ENCABEZADO DE PORTADA (pantalla inicial) --------------
------------- --------------
-------------------------------------------------------------------------------------*/
void encabezado()
{
textcolor(10);
gotoxy(28,9);cprintf(" EDITOR DE TEXTO ");
gotoxy(22,11);cprintf(" SISTEMA MANEJADOR DE ARCHIVOS ");
for(int i=18;i<59;i++){textcolor(14);gotoxy(i,13);cprintf("Ü");}
textcolor(15);
}
/*------------------------------------------------------------------------------------
------------- --------------
------------- CAPTURANDO NOMBRE DEL ARCHIVO, crear, apertura o analisis --------------
------------- --------------
-------------------------------------------------------------------------------------*/
void nombres()
{
int i;
textcolor(14);
_setcursortype(_NOCURSOR);/*Imprimir sin ver el Cursor*/
for(i=21;i<35;i++)
{
gotoxy(15,i);cprintf("º");
gotoxy(55,i);cprintf("º");
}
for(i=16;i<55;i++)
{
gotoxy(i,20);cprintf("Í");
gotoxy(i,35);cprintf("Í");
}
gotoxy(15,20);cprintf("É");gotoxy(55,20);cprintf("»");
gotoxy(15,35);cprintf("È");gotoxy(55,35);cprintf("¼");
/* ENCABEZADO DE LAS VENTANAS QUE CAPTURAN NOMBRE Y UNIDAD DEL ARCHIVO */
do
{
textcolor(10);
if(c==1&&m==0&&a==0&&An==0){gotoxy(18,20);cprintf(" NOMBRAR ARCHIVO ");}
if(c==0&&m==0&&a==1&&An==0){gotoxy(18,20);cprintf(" EDITAR ARCHIVO ");}
if(c==0&&m==0&&a==0&&An==1){gotoxy(18,20);cprintf(" EDITAR ARCHIVO ");}
textcolor(15);
textcolor(12);gotoxy(17,24);cprintf("Maximo 10 caracteres");textcolor(15);
gotoxy(17,29);cprintf("Nombre del Archivo: ");gets(Archivo_name);
gotoxy(17,33);cprintf("Unidad De DISCO: ");gets(unidad);
clrscr();fondo();
if(strlen(Archivo_name)>10){clrscr();fondo();nombres();}
}while(strlen(Archivo_name)>10);
}
/*------------------------------------------------------------------------------------
------------------- ---------------------------------------
------------------- ENVIANDO MENSAJES DE ERROR ---------------------------------------
------------------- ---------------------------------------
------------------------------------------------------------------------------------*/
void error()
{
int i;
textcolor(14);
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/
for(i=19;i<24;i++)
{
gotoxy(23,i);cprintf("º");
gotoxy(70,i);cprintf("º");
}
for(i=24;i<70;i++)
{
gotoxy(i,18);cprintf("Í");
gotoxy(i,24);cprintf("Í");
}
gotoxy(23,18);cprintf("É");gotoxy(70,18);cprintf("»");
gotoxy(23,24);cprintf("È");gotoxy(70,24);cprintf("¼");
/* MENSAJE DE ERROR, POR SI NO SE CREA O CARGA BIEN EL ARCHIVO */
textcolor(10);gotoxy(26,18);cprintf(" UPPSS..ERROR... ");textcolor(15);
textcolor(12);
if(c==1&&m==0&&a==0&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE CREO EL ARCHIVO");}
if(c==0&&m==1&&a==0&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE CARGAR EL ARCHIVO");}
if(c==0&&m==0&&a==1&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE CARGAR EL ARCHIVO");}
if(c==0&&m==0&&a==0&&An==1){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE EDITAR EL ARCHIVO ");}
textcolor(15);
}
/* CREANDO MARGEN DE CAPTURA DE OPCION EN PANTALLA INICIAL */
void crea_recuadro_()
{
textcolor(12);
gotoxy(37,35);cprintf("É");gotoxy(59,35);cprintf("»");
gotoxy(37,41);cprintf("È");gotoxy(59,41);cprintf("¼");
for(int i=38;i<59;i++)
{
gotoxy(i,35);cprintf("Í");
gotoxy(i,41);cprintf("Í");
}
textcolor(15);
}
/*----------------------------------------------------------------------------------
------------------- --------------------------------
------------------- FUNCION MAIN, menu de opciones --------------------------------
------------------- --------------------------------
----------------------------------------------------------------------------------*/
void main()
{
textmode(C4350);/* Definiendo tama¤o de ventana */
main1();
getch();
}
void main1()
{
do{
_setcursortype(_NORMALCURSOR);/*Cursor normal*/
clrscr();
fondo_blanco(0);
fondo();
encabezado();
/* MENU DE ACCIONES */
textcolor(11);
gotoxy(24,20);cprintf(" F9 ÍÍ%c Nombrar Archivo.",16);
gotoxy(24,24);cprintf(" F3 ÍÍ%c Editar Archivo.",16);
gotoxy(24,28);cprintf("Esc ÍÍ%c SALIR\n",16);
crea_recuadro_();
textcolor(10);
gotoxy(40,38);cprintf("ELIJA OPCION : ");opcion=getche();
textcolor(15);
switch(opcion)
{
case 67:Cre_archivo_NVO();break; /* F9 */
case 61:analizar();break; /* F3 */
case 27:exit(1);break; /* ESC */
}
}while(opcion!=27);
}
/*---------------------------------------------------------------------------------
------------- ----------------------------------
------------- CREANDO UN ARCHIVO NUEVO ----------------------------------
------------- ----------------------------------
---------------------------------------------------------------------------------*/
void Cre_archivo_NVO()
{
c=1;m=a=An=0;
int ren=5,col=5;
FILE *fp;/* Puntero para maniobrar Archivos */
char caracter;
char Extension_de_archivo[]=".txt";
char diagonal[]=":\\";
int columna;
int renglon;
clrscr();
fondo();
nombres();
clrscr();
fondo();
fflush(stdin);
/* CONCATENANDO RUTA PARA GUARDAR EL ARCHIVO */
strncat(unidad,diagonal,3);
strncat(unidad,Archivo_name,strlen(Archivo_name));
strncat(unidad,Extension_de_archivo,4);/*Concatenando Extension*/
/* Se esta creando el archivo */
fp=fopen(unidad,"w+t");
/*En caso que no se pueda crear el archivo*/
if(fp==NULL)
{
error();
getch();
return;
}
gotoxy(col,ren);
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/
columna=3;
renglon=9;
while(columna<79&&renglon<44)
{
caracter=32;
if(columna==78)
{
caracter='\x0';
columna=3;renglon++;
}
fputc(caracter,fp);
columna++;
}
fclose(fp);/*Cerrando Puntero del archivo*/
return;
}
/*------------------------------------------------------------------------------------------
-------------- -----------------------------------------------
-------------- ABRIENDO EL ARCHIVO YA CREADO -----------------------------------------------
-------------- -----------------------------------------------
------------------------------------------------------------------------------------------*/
void Abre_archivo_NVO()
{
ROOT=NULL;
a=1;c=m=An=0;
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/
limpiar();
int ren=5,col=5,i;
FILE *fp;/* Puntero para maniobrar Archivos */
char caracter;
char diagonal[]=":\\";
char *Extension_de_archivo=".txt";
clrscr();
fondo();
nombres();
clrscr();
fondo();
fflush(stdin);
/* CONCATENANDO RUTA PARA GUARDAR EL ARCHIVO */
strncat(unidad,diagonal,3);
strncat(unidad,Archivo_name,strlen(Archivo_name));
strncat(unidad,Extension_de_archivo,4);/*Concatenando Extension*/
/*Se esta abriendo el Archivo para editarlo */
fp=fopen(unidad,"r+t");
textcolor(11);gotoxy(5,1);cprintf(" EDITANDO ARCHIVO ");textcolor(15);
textcolor(12);gotoxy(50,3);cprintf("%s",unidad);textcolor(15);
for(i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Salir del Editor Presione 'ESC'");textcolor(15);
/*En caso que no se pueda cargar el archivo*/
if(fp==NULL)
{
error();
getch();
bandera=1;
return;
}
gotoxy(col,ren);
contador=0;
bandera=0;
/* Leyendo Archivo caracter a caracter y mandando datos a la lista */
while((caracter=fgetc(fp))!=EOF)
{
auxiliar[contador++]=caracter;
if(caracter==NULL||caracter=='\x0'||caracter=='\n')
{
contador=0;meterlista();limpiar();
}
}
fclose(fp);/*Cerrando el puntero del archivo*/
meterlista();
clrscr();
}
/*-------------------------------------------------------------------------------------------
---------------- --------------------------------
---------------- ENLAZANDO PARA ABRIR Y EDITAR ARCHIVO --------------------------------
---------------- --------------------------------
-------------------------------------------------------------------------------------------*/
void analizar()
{
c=m=a=0; An=1;
clrscr();
fondo();
Abre_archivo_NVO();
_setcursortype(_NORMALCURSOR);
imprimelista();
}
/*------------------------------------------------------------------------------
-------------- --------------------------------
-------------- IMPRIMIENDO FONDO DE PANTALLA --------------------------------
-------------- --------------------------------
------------------------------------------------------------------------------*/
void fondo(void)
{
int l;
textcolor(15);
cprintf("É");
for(l=0;l<78;l++)cprintf("Í");gotoxy(78,0);cprintf("»");
for(l=2;l<49;l++){gotoxy(80,l);cprintf("º\n");}
for(l=2;l<49;l++){gotoxy(1,l);cprintf("º\n");}gotoxy(1,49);cprintf("È");
for(l=1;l<79;l++)cprintf("Í");gotoxy(80,49);cprintf("¼");
textcolor(15);
}
Tags: Lenguaje C
Manejo de Archivos
Publicado por Darwin Sosa Gómez el lunes, septiembre 10, 2007
ESTE PROGRAMA CREA UN ARCHIVO, LO ABRE Y AGREGA INFOMACION AL FINAL DEL MISMO
MATERIA : PROGRAMACION DE SISTEMAS;
ALUMNO : DARWIN SOSA GOMEZ 312 A
PROFESOR : JORGE OCHOA SOMUANO
*/
#include
#include
#include
#include
void Cre_archivo_NVO();
void Abre_archivo_NVO();
void Agrega_informacion();
void fondo();
void crea_recuadr_();
void nombres();
void error();
void encabezado();
void analizar();
void tablas();
int c=0,m=0,a=0,An=0;
char Archivo_name[10];
char opcion;
void encabezado()/*Encabezado En Portada*/
{
int i;
gotoxy(22,9);cprintf(" ANALIZADOR LEXICO GRAFICO Y ");
gotoxy(22,11);cprintf(" SISTEMA MANEJADOR DE ARCHIVOS ");
for(i=18;i<59;i++){textcolor(11);gotoxy(i,12);cprintf("Ü");}
textcolor(15);
}
void nombres()/*Tecleando Nombre de Archivo*/
{
int i;
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/
for(i=21;i<35;i++)
{
gotoxy(15,i);cprintf("º");
gotoxy(55,i);cprintf("º");
}
for(i=16;i<55;i++)
{
gotoxy(i,20);cprintf("Í");
gotoxy(i,35);cprintf("Í");
}
gotoxy(15,20);cprintf("É");gotoxy(55,20);cprintf("»");
gotoxy(15,35);cprintf("È");gotoxy(55,35);cprintf("¼");
do
{
textcolor(10);
if(c==1&&m==0&&a==0&&An==0){gotoxy(18,20);cprintf(" CREAR ARCHIVO NUEVO ");}
if(c==0&&m==1&&a==0&&An==0){gotoxy(18,20);cprintf(" MODIFICAR ARCHIVO ");}
if(c==0&&m==0&&a==1&&An==0){gotoxy(18,20);cprintf(" ABRIR ARCHIVO ");}
if(c==0&&m==0&&a==0&&An==1){gotoxy(18,20);cprintf(" ANALIZAR ARCHIVO ");}
textcolor(15);
textcolor(12);gotoxy(17,26);cprintf("Maximo 10 caracteres");textcolor(15);
gotoxy(17,30);cprintf("Nombre del Archivo: ");gets(Archivo_name);
clrscr();fondo();
if(strlen(Archivo_name)>10){clrscr();fondo();nombres();}
}while(strlen(Archivo_name)>10);
}
void error()
{
int i;
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/
for(i=19;i<24;i++)
{
gotoxy(23,i);cprintf("º");
gotoxy(70,i);cprintf("º");
}
for(i=24;i<70;i++)
{
gotoxy(i,18);cprintf("Í");
gotoxy(i,24);cprintf("Í");
}
gotoxy(23,18);cprintf("É");gotoxy(70,18);cprintf("»");
gotoxy(23,24);cprintf("È");gotoxy(70,24);cprintf("¼");
textcolor(10);gotoxy(26,18);cprintf(" UPPSS..ERROR... ");textcolor(15);
textcolor(12);
if(c==1&&m==0&&a==0&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE CREO EL ARCHIVO");}
if(c==0&&m==1&&a==0&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE CARGAR EL ARCHIVO");}
if(c==0&&m==0&&a==1&&An==0){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE CARGAR EL ARCHIVO");}
if(c==0&&m==0&&a==0&&An==1){gotoxy(27,22);cprintf(" ERROR, NO SE PUEDE ANALIZAR EL ARCHIVO ");}
textcolor(15);
}
void crea_recuadro_()
{
textcolor(12);
gotoxy(37,31);cprintf("É");gotoxy(59,31);cprintf("»");
gotoxy(37,35);cprintf("È");gotoxy(59,35);cprintf("¼");
for(int i=38;i<59;i++)
{
gotoxy(i,31);cprintf("Í");
gotoxy(i,35);cprintf("Í");
}
textcolor(15);
}
void main()
{
do{
_setcursortype(_NORMALCURSOR);/*Cursor normal*/
clrscr();
fondo();
encabezado();
gotoxy(24,18);cprintf("1. CREAR ARCHIVO NUEVO");
gotoxy(24,20);cprintf("2. VER ARCHIVO");
gotoxy(24,22);cprintf("3. AGREGAR DATOS AL ARCHIVO");
gotoxy(24,24);cprintf("4. ANALIZAR ARCHIVO");
gotoxy(24,26);cprintf("5. SALIR\n");
crea_recuadro_();
textcolor(10);
gotoxy(40,33);cprintf("ELIJA OPCION : ");opcion=getche();
textcolor(15);
switch(opcion)
{
case '1':Cre_archivo_NVO();break;
case '2':Abre_archivo_NVO();break;
case '3':Agrega_informacion();break;
case '4':analizar();break;
case '5':exit(1);break;
}
}while(opcion!='5');
getch();
}
void Agrega_informacion()
{
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/
int col=5;int ren=5;int i;
FILE *fp;
char caracter;
char *Extension_de_archivo=".txt";
m=1;a=An=c=0;
clrscr();fondo();
nombres();
clrscr();fondo();
fflush(stdin);
strncat(Archivo_name,Extension_de_archivo,4);
fp=fopen(Archivo_name,"a+t");
if(fp==NULL)
{
error();
getch();
return;
}
textcolor(11);gotoxy(5,1);cprintf(" AGREGANDO INFORMACION AL ARCHIVO ");textcolor(15);
for(i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
textcolor(12);gotoxy(50,3);cprintf("C:\\BC\\BIN\\%s",Archivo_name);textcolor(15);
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Guardar y Salir Presione 'ESC'");textcolor(15);
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/
gotoxy(col,ren);
while((caracter=fgetc(fp))!=EOF)
{
if(caracter=='\n'){ren++;col=5;}
gotoxy(col++,ren);cprintf("%c",caracter);
}
gotoxy(col++,ren);
while((caracter=getche())!=27)
{
if(caracter==13)
{
caracter='\n';
ren++;col=5;
}
gotoxy(col++,ren);fputc(caracter,fp);
}
fclose(fp);
}
void Cre_archivo_NVO()
{
int ren=5; int col=5;int i;
FILE *fp;
char caracter;
char Extension_de_archivo[]=".txt";
c=1;m=a=An=0;
clrscr();fondo();
nombres();
clrscr();fondo();
fflush(stdin);
strncat(Archivo_name,Extension_de_archivo,4);
fp=fopen(Archivo_name,"w+t");
textcolor(11);gotoxy(5,1);cprintf(" CREANDO ARCHIVO NUEVO ");textcolor(15);
textcolor(12);gotoxy(50,3);cprintf("C:\\BC\\BIN\\%s",Archivo_name);textcolor(15);
for(i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Guardar y Salir Presione 'ESC'");textcolor(15);
if(fp==NULL)
{
error();
getch();
return;
}
gotoxy(col,ren);
_setcursortype(_NORMALCURSOR);/*Cursor Nomral*/
while((caracter=getche())!=27)
{
if(caracter==13)
{
caracter='\n';
ren++;col=5;
}
gotoxy(++col,ren);fputc(caracter,fp);
}
fclose(fp);
}
void Abre_archivo_NVO()
{
_setcursortype(_NOCURSOR);/*Desaparece Cursor*/
int ren=5; int col=5;int i;
FILE *fp;
char caracter;
char *Extension_de_archivo=".txt";
a=1;c=m=An=0;
clrscr();fondo();
nombres();
clrscr();fondo();
fflush(stdin);
strncat(Archivo_name,Extension_de_archivo,4);
fp=fopen(Archivo_name,"r+t");
textcolor(11);gotoxy(5,1);cprintf(" VISUALIZANDO ARCHIVO ");textcolor(15);
textcolor(12);gotoxy(50,3);cprintf("C:\\BC\\BIN\\%s",Archivo_name);textcolor(15);
for(i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Salir Presione 'ESC'");textcolor(15);
if(fp==NULL)
{
error();
getch();
return;
}
gotoxy(col,ren);
while((caracter=fgetc(fp))!=EOF)
{
if(caracter=='\n'){ren++;col=5;}
gotoxy(col++,ren);cprintf("%c",caracter);
}
fclose(fp);
getch();
}
void analizar()/*Analizando Archivo.*/
{
int ren=5; int col=5;int i,j,k,l,m,n,o,cI,cO,cL,cP,cNP,cCLV,b1,b2,b3;
FILE *fp;
char caracter;
char *Extension_de_archivo=".txt";
An=1;a=c=m=0;
char todo_el_archivo[3000];
char identificadores[300];
char operadores[300];
char literales[300];
char puntuacion[300];
char no_permitidos[300];
char claves[300];
clrscr();fondo();
nombres();
clrscr();fondo();
fflush(stdin);
strncat(Archivo_name,Extension_de_archivo,4);
fp=fopen(Archivo_name,"r+t");
textcolor(11);gotoxy(5,1);cprintf(" ANALIZANDO ARCHIVO ");textcolor(15);
textcolor(12);gotoxy(50,3);cprintf("C:\\BC\\BIN\\%s",Archivo_name);textcolor(15);
for(i=46;i<79;i++){gotoxy(i,4);cprintf("-");}
for(i=2;i<80;i++){gotoxy(i,46);cprintf("_");}
textcolor(12);gotoxy(20,48);cprintf(" Para Salir Presione 'ESC'");textcolor(15);
if(fp==NULL)
{
error();
getch();
return;
}
for(i=0;i<300;i++)
{
identificadores[i]=NULL;
literales[i]=NULL;
operadores[i]=NULL;
puntuacion[i]=NULL;
no_permitidos[i]=NULL;
claves[i]=NULL;
}
for(i=0;i<3000;i++)todo_el_archivo[i]=NULL;
gotoxy(col,ren);
i=0;
while((caracter=fgetc(fp))!=EOF){todo_el_archivo[i++]=caracter;}
i=j=k=l=m=n=o=0;
/******************************************************************************
******************** **********************************
******************** CLASIFICANDO LOS TOKENS ***********************************
******************** **********************************
*******************************************************************************
*/
while(todo_el_archivo[i]!='\0')
{ b1=b2=b3=0;
/* CLASIFICANDO IDENTIFICADORES */
if((todo_el_archivo[i]>='A'&&todo_el_archivo[i]<='Z')||(todo_el_archivo[i]>='a'&&todo_el_archivo[i]<='z'))
{
/* CLASIFICANDO LA PALABRA RESERVADA 'Comienza' */
if((todo_el_archivo[i]=='C'||todo_el_archivo[i]=='c')&&(todo_el_archivo[i+1]=='O'||todo_el_archivo[i+1]=='o')&&(todo_el_archivo[i+2]=='M'||todo_el_archivo[i+2]=='m')&&(todo_el_archivo[i+3]=='I'||todo_el_archivo[i+3]=='i')&&(todo_el_archivo[i+4]=='E'||todo_el_archivo[i+4]=='e')&&(todo_el_archivo[i+5]=='N'||todo_el_archivo[i+5]=='n')&&(todo_el_archivo[i+6]=='Z'||todo_el_archivo[i+6]=='z')&&(todo_el_archivo[i+7]=='A'||todo_el_archivo[i+7]=='a'))
{
claves[o++]=todo_el_archivo[i]; /* C */
claves[o++]=todo_el_archivo[i+1];/* O */
claves[o++]=todo_el_archivo[i+2];/* M */
claves[o++]=todo_el_archivo[i+3];/* I */
claves[o++]=todo_el_archivo[i+4];/* E */
claves[o++]=todo_el_archivo[i+5];/* N */
claves[o++]=todo_el_archivo[i+6];/* Z */
claves[o++]=todo_el_archivo[i+7];/* A */
claves[o++]=32;
i+=8;
}
/* CLASIFICANDO LA PALABRA RESERVADA 'Termina' */
if((todo_el_archivo[i]=='T'||todo_el_archivo[i]=='t')&&(todo_el_archivo[i+1]=='E'||todo_el_archivo[i+1]=='e')&&(todo_el_archivo[i+2]=='R'||todo_el_archivo[i+2]=='r')&&(todo_el_archivo[i+3]=='M'||todo_el_archivo[i+3]=='m')&&(todo_el_archivo[i+4]=='I'||todo_el_archivo[i+4]=='i')&&(todo_el_archivo[i+5]=='N'||todo_el_archivo[i+5]=='n')&&(todo_el_archivo[i+6]=='A'||todo_el_archivo[i+6]=='a'))
{
claves[o++]=todo_el_archivo[i]; /* T */
claves[o++]=todo_el_archivo[i+1];/* E */
claves[o++]=todo_el_archivo[i+2];/* R */
claves[o++]=todo_el_archivo[i+3];/* M */
claves[o++]=todo_el_archivo[i+4];/* I */
claves[o++]=todo_el_archivo[i+5];/* N */
claves[o++]=todo_el_archivo[i+6];/* A */
claves[o++]=32;
i+=7;
}
/* CLASIFICANDO LA PALABRA RESERVADA 'SI' */
if((todo_el_archivo[i]=='S'||todo_el_archivo[i]=='s')&&(todo_el_archivo[i+1]=='I'||todo_el_archivo[i+1]=='i'))
{
claves[o++]=todo_el_archivo[i]; /* S */
claves[o++]=todo_el_archivo[i+1];/* I */
claves[o++]=32;
i+=2;
}
/* CLASIFICANDO LA PALABRA RESERVADA 'OTRO' */
if((todo_el_archivo[i]=='O'||todo_el_archivo[i]=='o')&&(todo_el_archivo[i+1]=='T'||todo_el_archivo[i+1]=='t')&&(todo_el_archivo[i+2]=='R'||todo_el_archivo[i+2]=='r')&&(todo_el_archivo[i+3]=='O'||todo_el_archivo[i+3]=='o'))
{
claves[o++]=todo_el_archivo[i]; /* O */
claves[o++]=todo_el_archivo[i+1];/* T */
claves[o++]=todo_el_archivo[i+2];/* R */
claves[o++]=todo_el_archivo[i+3];/* O */
claves[o++]=32;
i+=4;
}
identificadores[j++]=todo_el_archivo[i];
if(todo_el_archivo[i+1]>='0'&&todo_el_archivo[i+1]<='9')
{
identificadores[j++]=todo_el_archivo[i+1];
i+=2;
}
}
else
{
if((todo_el_archivo[i]=='+')||(todo_el_archivo[i]=='-')||(todo_el_archivo[i]=='*')||(todo_el_archivo[i]=='/')||(todo_el_archivo[i]=='!'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]==':'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='<'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='>'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='\n')||(todo_el_archivo[i]=='=')||(todo_el_archivo[i]=='>')||(todo_el_archivo[i]=='<'))b1=0;
else b1=1;
}
/* CLASIFICANDO LITERALES */
if(todo_el_archivo[i]>='0'&&todo_el_archivo[i]<='9')
{
if(todo_el_archivo[i+1]>='0'&&todo_el_archivo[i+1]<='9')
{literales[l++]=todo_el_archivo[i];}
else
{
literales[l++]=todo_el_archivo[i];
literales[l++]=32;
}
}
else
{
if((todo_el_archivo[i]=='+')||(todo_el_archivo[i]=='-')||(todo_el_archivo[i]=='*')||(todo_el_archivo[i]=='/')||(todo_el_archivo[i]=='!'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]==':'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='<'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='>'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='\n')||(todo_el_archivo[i]=='=')||(todo_el_archivo[i]=='>')||(todo_el_archivo[i]=='<'))b2=0;
else b2=1;
}
/* CLASIFICANDO SIGNOS DE PUNTUACION */
if((todo_el_archivo[i]=='{')||(todo_el_archivo[i]=='}')||(todo_el_archivo[i]=='[')||(todo_el_archivo[i]==']')||(todo_el_archivo[i]=='(')||(todo_el_archivo[i]==')')||(todo_el_archivo[i]==';'))
{
puntuacion[m++]=todo_el_archivo[i];
}
else
{
if((todo_el_archivo[i]=='+')||(todo_el_archivo[i]=='-')||(todo_el_archivo[i]=='*')||(todo_el_archivo[i]=='/')||(todo_el_archivo[i]=='!'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]==':'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='<'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='>'&&todo_el_archivo[i+1]=='=')||(todo_el_archivo[i]=='\n')||(todo_el_archivo[i]=='=')||(todo_el_archivo[i]=='>')||(todo_el_archivo[i]=='<'))b3=0;
else b3=1;
}
/* CLASIFICANDO CARACTERES NO PERMITIDOS */
if(b1==1&&b2==1&&b3==1){no_permitidos[n++]=todo_el_archivo[i];}
i++;
}
/* CLASIFICANDO OPERADORES */
i=0;
while(todo_el_archivo[i]!='\0')
{
if((todo_el_archivo[i]=='+')||(todo_el_archivo[i]=='-')||(todo_el_archivo[i]=='*')||(todo_el_archivo[i]=='/')||(todo_el_archivo[i]=='!')||(todo_el_archivo[i]==':')||(todo_el_archivo[i]=='<')||(todo_el_archivo[i]=='>')||(todo_el_archivo[i]=='='))
{
if((todo_el_archivo[i]=='!'&&todo_el_archivo[i+1]!='=')||(todo_el_archivo[i]=='=' && todo_el_archivo[i+1]!='='))
{
no_permitidos[n++]=todo_el_archivo[i];
}
else
{
operadores[k++]=todo_el_archivo[i];
if(todo_el_archivo[i+1]=='=')
{
operadores[k++]=todo_el_archivo[i+1];
i+=2;
}
else i++;
}
}
if(todo_el_archivo[i]=='='&& todo_el_archivo[i+1]=='=')
{
operadores[k++]=todo_el_archivo[i];
if(todo_el_archivo[i+1]=='=')
{
operadores[k++]=todo_el_archivo[i+1];
i+=2;
}
else i++;
}
i++;
}
j=k=l=m=13;cI=5;cL=34;cP=45;cO=22,cNP=57;n=15;cCLV=68;
i=0;
while(identificadores[i]!='\x0')
{
textcolor(11);
if(j<=42){gotoxy(cI,j++);cprintf("%c",identificadores[i]);}
else{cI+=2;j=13;}
i++;
}
i=0;
while(literales[i]!='\x0')
{
if(literales[i]==32){k++;cL=34;}
else{gotoxy(cL++,k);cprintf("%c",literales[i]);}
i++;
}
i=0;
while(puntuacion[i]!='\x0')
{
if(m==43){cP+=2;m=13;}
else{gotoxy(cP,m++);cprintf("%c",puntuacion[i]);}
i++;
}
i=0;
while(no_permitidos[i]!='\x0')
{
if(n==43){cNP+=2;n=15;}
else{gotoxy(cNP,n++);cprintf("%c",no_permitidos[i]);}
i++;
}
i=0;n=14;
while(claves[i]!='\x0')
{
if(claves[i]==32)
{
n++;
cCLV=68;
}
else
{
gotoxy(cCLV++,n);cprintf("%c",claves[i]);
}
i++;
}
i=0;
while(operadores[i]!='\x0')
{
if(l==43){cO+=3;l=13;}
if((operadores[i]==':'&&operadores[i+1]=='=')||(operadores[i]=='!'&&operadores[i+1]=='=')||(operadores[i]=='<'&&operadores[i+1]=='=')||(operadores[i]=='>'&&operadores[i+1]=='=')||(operadores[i]=='='&&operadores[i+1]=='='))
{
gotoxy(cO,l);cprintf("%c",operadores[i]);
gotoxy(cO+1,l++);cprintf("%c",operadores[++i]);
}
else{gotoxy(cO,l++);cprintf("%c",operadores[i]);}
i++;
}
textcolor(15);
fclose(fp);
tablas();
getch();
}
void tablas()
{
int i;
for(i=11;i<43;i++)
{
gotoxy(3,i);printf("³");/*Tabla de Identificadores*/
gotoxy(19,i);printf("³");
gotoxy(20,i);printf("³");/*Tabla de Operadores*/
gotoxy(31,i);printf("³");
gotoxy(32,i);printf("³");/*Tabla de Literales*/
gotoxy(42,i);printf("³");
gotoxy(43,i);printf("³");/*Tabla de Puntuacion*/
gotoxy(54,i);printf("³");
gotoxy(55,i);printf("³");/*Tabla de Caracteres no permitidos*/
gotoxy(66,i);printf("³");
gotoxy(67,i);printf("³");/*Tabla de Palabras Clave*/
gotoxy(78,i);printf("³");
}
/*Tabla de Identificadores*/
gotoxy(3,10);printf("Ú");gotoxy(19,10);printf("¿");
gotoxy(3,43);printf("À");gotoxy(19,43);printf("Ù");
textcolor(10);gotoxy(4,11);cprintf("Identificadores");textcolor(15);
for(i=4;i<19;i++)
{
gotoxy(i,12);printf("Ä");
gotoxy(i,43);printf("Ä");
}
/*Tabla de Operadores*/
gotoxy(20,10);printf("Ú");gotoxy(31,10);printf("¿");
gotoxy(20,43);printf("À");gotoxy(31,43);printf("Ù");
textcolor(10);gotoxy(21,11);cprintf("Operadores");textcolor(15);
for(i=21;i<31;i++)
{
gotoxy(i,12);printf("Ä");
gotoxy(i,43);printf("Ä");
}
/*Tabla de Literales*/
gotoxy(32,10);printf("Ú");gotoxy(42,10);printf("¿");
gotoxy(32,43);printf("À");gotoxy(42,43);printf("Ù");
textcolor(10);gotoxy(33,11);cprintf("Literales");textcolor(15);
for(i=33;i<42;i++)
{
gotoxy(i,12);printf("Ä");
gotoxy(i,43);printf("Ä");
}
/*Tabla de Puntuacion*/
gotoxy(43,10);printf("Ú");gotoxy(54,10);printf("¿");
gotoxy(43,43);printf("À");gotoxy(54,43);printf("Ù");
textcolor(10);gotoxy(44,11);cprintf("Puntuacion");textcolor(15);
for(i=44;i<54;i++)
{
gotoxy(i,12);printf("Ä");
gotoxy(i,43);printf("Ä");
}
/*Tabla de Caracteres no permitidos*/
gotoxy(55,10);printf("Ú");gotoxy(66,10);printf("¿");
gotoxy(55,43);printf("À");gotoxy(66,43);printf("Ù");
textcolor(10);gotoxy(56,11);cprintf("Caracteres");textcolor(15);
textcolor(10);gotoxy(58,12);cprintf(" NO");textcolor(15);
textcolor(10);gotoxy(56,13);cprintf("PERMITIDOS");textcolor(15);
for(i=56;i<66;i++)
{
gotoxy(i,14);printf("Ä");
gotoxy(i,43);printf("Ä");
}
/*Tabla de Palabras Clave*/
gotoxy(67,10);printf("Ú");gotoxy(78,10);printf("¿");
gotoxy(67,43);printf("À");gotoxy(78,43);printf("Ù");
textcolor(10);gotoxy(68,11);cprintf(" Palabras");textcolor(15);
textcolor(10);gotoxy(68,12);cprintf(" CLAVE");textcolor(15);
for(i=68;i<78;i++)
{
gotoxy(i,13);printf("Ä");
gotoxy(i,43);printf("Ä");
}
}
void fondo(void)
{ int l;
textcolor(14);
cprintf("É");
for(l=0;l<78;l++)cprintf("Í");gotoxy(78,0);cprintf("»");
for(l=2;l<49;l++){gotoxy(80,l);cprintf("º\n");}
for(l=2;l<49;l++){gotoxy(1,l);cprintf("º\n");}gotoxy(1,49);cprintf("È");
for(l=1;l<79;l++)cprintf("Í");gotoxy(80,49);cprintf("¼");
textcolor(15);
}
Tags: Lenguaje C
Analizador y evaluador de expresiones aritmeticas
Publicado por Darwin Sosa Gómez el lunes, septiembre 10, 2007
#include
#include
#include
#include
#include
#define DELIMITADOR 1
#define VARIABLE 2
#define NUMERO 3
char *prog;
char token[80];
char tipo_token;
void eval_expr( double *res );
void suma_resta( double *res );
void mult_div( double *res );
void exp( double *res );
void monario( double *res );
void parentesis( double *res );
void atomo( double *res );
void devuelve();
void serror( int error );
void obt_token( void );
int esdelim( char c );
main()
{
clrscr();
double res;
char *p;
/*clrscr();*/
p = ( char* ) malloc (100);
if(!p){
printf("\nFallo de asignacion de memoria\n");
exit(0);
}
do{
/*clrscr();*/
prog = p;
printf("\n\nIntroduzca EXPRESION");
printf("\n\n ==> ");
gets(prog);
if(!*prog) break;
eval_expr(&res);
printf("\nEl resultado es : \n\n %1.2f\n", res);
if(!getch()) getch();
} while(*p);
return 0;
}
void eval_expr( double *res )
{
obt_token();
if(!*token){
serror(2);
return;
}
suma_resta(res);
}
void suma_resta( double *res )
{
register char op;
double temp;
mult_div(res);
while((op = *token) == '+' || op == '-')
{
obt_token();
mult_div(&temp);
switch( op ){
case '-' : *res = *res - temp;
break;
case '+' : *res = *res + temp;
break;
}
}
}
void mult_div( double *res )
{
register char op;
double temp;
exp(res);
while((op = *token) == '*' || op == '/' || op == '%')
{
obt_token();
exp(&temp);
switch( op ){
case '*' : *res = *res * temp;
break;
case '/' : *res = *res / temp;
break;
case '%' : *res = (int) *res % (int) temp;
break;
}
}
}
void exp( double *res )
{
double temp, ex;
register int t;
monario(res);
if(*token == '^'){
obt_token();
exp(&temp);
ex = *res;
if(temp == 0.0){
*res = 1.0;
return;
}
for(t = temp-1; t > 0; --t)
*res = (*res) * (double) ex;
}
}
void monario( double *res )
{
register char op;
op = 0;
if((tipo_token == DELIMITADOR) && *token == '+' ||
*token == '-'){
op = *token;
obt_token();
}
parentesis(res);
if(op == '-') *res = -(*res);
}
void parentesis( double *res )
{
if((*token) == '('){
obt_token();
suma_resta(res);
if((*token) != ')')
serror(1);
obt_token();
}
else
atomo(res);
}
void atomo( double *res )
{
if(tipo_token == NUMERO){
*res = atof(token);
obt_token();
return;
}
serror(0);
}
void devuelve()
{
char *t;
t = token;
for(; *t; t++) prog--;
}
void serror( int error )
{
static char *e[] = {
"Error de sintaxis",
"Parentesis no emparejados",
"No hay expresion"
};
printf("\n%s\n", e[error]);
}
void obt_token( void )
{
register char *temp;
tipo_token = 0;
temp = token;
*temp = '\0';
if(!*prog) return;
while(isspace(*prog)) ++prog;
if(strchr("+-*/^%=()", *prog)){
tipo_token = DELIMITADOR;
*temp++ = *prog++;
}
else if(isalpha(*prog)){
while(!esdelim(*prog)) *temp++ = *prog++;
tipo_token = VARIABLE;
}
else if(isdigit(*prog)){
while(!esdelim(*prog)) *temp++ = *prog++;
tipo_token = NUMERO;
}
*temp = '\0';
}
int esdelim( char c )
{
if(strchr(" +-/*%^=()", c) || c==9 || c=='\r' || c==0)
return 1;
return 0;
}
Tags: Lenguaje C