Estructura de datos y algoritmos

GENERADOR DE LABERINTOS

Pequeño programa que a través de 5 clases crea y resuelve laberintos.

 

Funciona de la siguiente manera, primeramente, se crea una clase, con geters y seters a la cual llame TuTipo, esta clase nos servirá para guardar un posicionamiento, que está en base a una retícula imaginaria, que nos servirá para crear los laberintos.

package TercerSemestre.EstructurasDinamicas.ExamenLaberinto;


/**
 *
 * 
 * @author (David Lázaro) 
 * @version (1.0 / 11/09/2017)
 */
public class TuTipo
{
    private int fila;
    private int columna;
    public TuTipo(int f, int c)
    {
        // initialise instance variables
        fila = f;
        columna = c;
    }
    public int getF(){
        return fila;
    }
    public int getC(){
        return columna;
    }
    public void setF(int f){
        fila=f;
    }
    public void setC(int c){
        columna=c;
    }
}

 

 

La Siguiente clase es Crealaberinto, que es la que contiene la lógica detrás de las paredes y caminos de el laberinto, y el algoritmo para generarlos de manera aleatoria.

package TercerSemestre.EstructurasDinamicas.ExamenLaberinto;

/**
 * 
 * 
 * @author (David Lázaro) 
 * @version (1.0 / 11/09/2017)
 */

import java.util.Scanner;
import java.util.Vector;

public class CreaLaberinto
{   static int [][] laberinto;
    public void main(int n)
    {   laberinto = new int [n][n];

        //vector que almacena las pociciones iniciales de los numero 3
        Vector <TuTipo> L3s = new Vector <TuTipo> ();
        int fpa=0;
        int cpa=0;
        TuTipo posActual = new TuTipo(fpa,cpa);

        //Ciclo para poner los 3 
        for(int i=1 ; i<laberinto.length ; i +=2){
            for(int j=1 ; j<laberinto[0].length ; j+=2){
                laberinto[i][j]=3;
                fpa=i;
                cpa=j;
                L3s.add(new TuTipo (fpa,cpa));
            }
        }

        int posInicioC = (int)(Math.random()*L3s.size());
        Vector <TuTipo> L2s = new Vector <TuTipo> ();
        Vector <TuTipo> L1s = new Vector <TuTipo> ();
        L2s.add(L3s.get(posInicioC));

        //CICLO PARA CHACAR LAS POCICIONES ALREDEDOR DE LOS 3
        while(L2s.size()!=0){
            int posInicioA = (int)(Math.random()*L2s.size());
            TuTipo seleccionado= L2s.remove(posInicioA);
            int file=seleccionado.getF();
            int column=seleccionado.getC();
            laberinto[file][column]=1;
            //CHECA LA POSICION ARRIBA
            if(file >= 3){
                if(laberinto[file-2][column]==3){
                    L2s.add(new TuTipo (file-2,column));
                    laberinto[file-2][column]=2;
                }else if(laberinto[file-2][column]==1){
                    L1s.add(new TuTipo (file-1,column));
                }
            }

            //CHECA LA POSICION A LA DERECHA
            if(column + 3 <= laberinto.length){
                if(laberinto[file][column+2]==3){
                    L2s.add(new TuTipo (file,column+2));
                    laberinto[file][column+2]=2;
                }else if(laberinto[file][column+2]==1){
                    L1s.add(new TuTipo (file,column+1));
                }
            }

            //CHECA LA POSICION ABAJO
            if(file+3 <= laberinto.length){
                if(laberinto[file+2][column]==3){
                    L2s.add(new TuTipo (file+2,column));
                    laberinto[file+2][column]=2;
                }else if(laberinto[file+2][column]==1){
                    L1s.add(new TuTipo (file+1,column));
                }
            }

            //CHECA LA POSICION A LA IZQUIERDA
            if(column >= 3){
                if(laberinto[file][column-2]==3){
                    L2s.add(new TuTipo (file,column-2));
                    laberinto[file][column-2]=2;
                }else if(laberinto[file][column-2]==1){
                    L1s.add(new TuTipo (file,column-1));
                }
            }

            //SELECCIONA UN PUENTE
            if(!L1s.isEmpty()){
                int posInicioB = (int)(Math.random()*L1s.size());
                TuTipo seleccionado1= L1s.remove(posInicioB);
                int file1=seleccionado1.getF();
                int column1=seleccionado1.getC();
                laberinto[file1][column1]=1;
                L1s.clear();
            } 
        }
        //entrada
        laberinto[1][0]=1;
        //Salida
        laberinto[n-2][n-1]=1;

        //Ciclo para imprimir la matriz
        /*for (int i = 0; i < laberinto.length ; i++) {
        for (int j = 0; j < laberinto[0].length; j++) {
        System.out.print(laberinto[i][j] + " ");
        }
        System.out.println();*/

    }
}

 

 

Las siguientes 2 clases son la clase Cola y Pila, ambas realizan una función similar, encuentran la solución del laberinto, sin embargo, la clase cola funciona con el concepto de Primero en entrar Primero en Salir y la clase pila funciona con el concepto contrario el Primero en Entrar Último en Salir. Pero para crear una diferencia más marcada y grafica entre ambas la clase pila, además de mostrar el camino correcto de color verde también muestra en los caminos donde busco la salida, pero que eran callejones sin salida en color rojo.

package TercerSemestre.EstructurasDinamicas.ExamenLaberinto;


/**
 * 
 * 
 * @author (David Lázaro) 
 * @version (1.0 / 11/09/2017)
 */

import java.util.Queue;
import java.util.LinkedList;
import java.util.Stack;

public class Cola
{
    static Stack <TuTipo> pila;
    public static void main()
    {
        Queue <TuTipo> cola = new LinkedList <TuTipo> ();
        int fpa=1;
        int cpa=0;
        TuTipo posActual = new TuTipo(fpa,cpa);
        TuTipo s = new TuTipo((Interface.n)-2,(Interface.n)-1);
        
        while(true){
            if( cpa+1<Interface.n && CreaLaberinto.laberinto[fpa][cpa+1]== 1){
                cola.offer(new TuTipo (fpa,cpa+1));
                CreaLaberinto.laberinto[fpa][cpa+1]=CreaLaberinto.laberinto[fpa][cpa]+1;
                if(fpa==s.getF()&& cpa+1==s.getC()){
                    cola.offer(new TuTipo(fpa,cpa));
                    break;
                }
            }
            if (fpa+1<Interface.n && CreaLaberinto.laberinto[fpa+1][cpa]== 1){
                cola.offer(new TuTipo (fpa+1,cpa));
                CreaLaberinto.laberinto[fpa+1][cpa]=CreaLaberinto.laberinto[fpa][cpa]+1;
                if(fpa+1==s.getF()&& cpa==s.getC()){
                    cola.offer(new TuTipo(fpa,cpa));
                    break;
                }
            }
            if(cpa-1>=0 && CreaLaberinto.laberinto[fpa][cpa-1]== 1){
                cola.offer(new TuTipo (fpa,cpa-1));
                CreaLaberinto.laberinto[fpa][cpa-1]=CreaLaberinto.laberinto[fpa][cpa]+1;
                if(fpa==s.getF()&& cpa-1==s.getC()){
                    cola.offer(new TuTipo(fpa,cpa));
                    break;
                }
            }
            if (fpa-1>=0 && CreaLaberinto.laberinto[fpa-1][cpa]== 1){
                cola.offer(new TuTipo (fpa-1,cpa));
                CreaLaberinto.laberinto[fpa-1][cpa]=CreaLaberinto.laberinto[fpa][cpa]+1;
                if(fpa-1==s.getF()&& cpa==s.getC()){
                    cola.offer(new TuTipo(fpa,cpa));
                    break;
                }
            }
            if(!cola.isEmpty()){
                posActual=(TuTipo)cola.poll();
                fpa=posActual.getF();
                cpa=posActual.getC();
            }
        }
        CreaLaberinto.laberinto[1][0]=1;

        pila = new Stack <TuTipo> ();
        fpa=s.getF();
        cpa=s.getC();
        int num = CreaLaberinto.laberinto[s.getF()][s.getC()];
        
        while(num !=2){
            if (cpa+1<CreaLaberinto.laberinto.length && CreaLaberinto.laberinto[fpa][cpa+1]==num-1){
                pila.push(new TuTipo (fpa,cpa+1));
                num=num-1;
            }else if (fpa+1<CreaLaberinto.laberinto.length && CreaLaberinto.laberinto[fpa+1][cpa]==num-1){
                pila.push(new TuTipo (fpa+1,cpa));
                num=num-1;
            }else if(cpa-1>=0 && CreaLaberinto.laberinto[fpa][cpa-1]==num-1){
                pila.push(new TuTipo (fpa,cpa-1));
                num=num-1;
            }else if(fpa-1>=0 && CreaLaberinto.laberinto[fpa-1][cpa]==num-1){
                pila.push(new TuTipo (fpa-1,cpa));
                num=num-1;
            }
            if(!pila.empty()){
                posActual=(TuTipo)pila.peek();
                fpa=posActual.getF();
                cpa=posActual.getC();
                }
            }

    }
}
package TercerSemestre.EstructurasDinamicas.ExamenLaberinto;


/**
 * .
 * 
 * @author (David Lázaro) 
 * @version (1.0 / 11/09/2017)
 */

import java.util.Stack;

public class Pila
{
    private CreaLaberinto llamar = new CreaLaberinto();
    public static void main(){
        Stack <TuTipo> pila = new Stack <TuTipo> ();
        int fpa=1;
        int cpa=0;
        TuTipo posActual = new TuTipo(fpa,cpa);
        TuTipo s = new TuTipo((Interface.n)-2,(Interface.n)-1);
        while(true){
            if( cpa+1<CreaLaberinto.laberinto.length && CreaLaberinto.laberinto[fpa][cpa+1]== 1){
                pila.push(new TuTipo (fpa,cpa));
                CreaLaberinto.laberinto[fpa][cpa]=2;
                cpa+=1;
            }else if (fpa+1<CreaLaberinto.laberinto.length && CreaLaberinto.laberinto[fpa+1][cpa]== 1){
                pila.push(new TuTipo (fpa,cpa));
                CreaLaberinto.laberinto[fpa][cpa]=2;
                fpa+=1;
            }else if(cpa-1>=0 && CreaLaberinto.laberinto[fpa][cpa-1]== 1){
                pila.push(new TuTipo (fpa,cpa));
                CreaLaberinto.laberinto[fpa][cpa]=2;
                cpa-=1;
            }else if (fpa-1>=0 && CreaLaberinto.laberinto[fpa-1][cpa]== 1){
                pila.push(new TuTipo (fpa,cpa));
                CreaLaberinto.laberinto[fpa][cpa]=2;
                fpa-=1;
            }else{
                if(!pila.empty()){
                    posActual=(TuTipo)pila.pop();
                }
                CreaLaberinto.laberinto[fpa][cpa]=3;
                fpa=posActual.getF();
                cpa=posActual.getC();
            }
            if(fpa==s.getF()&& cpa==s.getC()){
                CreaLaberinto.laberinto[fpa][cpa]=4;
                pila.push (new TuTipo(fpa,cpa));
                break;
            }
        }
    }
    
}

 

Hasta este momento, todo ha sido todo en trasfondo, la parte que el usuario no ve, pero en la clase, es la parte con la cual interactúa el usuario, esta contiene, el marco y los botones del programa al momento de ejecución.

package TercerSemestre.EstructurasDinamicas.ExamenLaberinto;

/**
 * 
 * 
 * @author (David Lázaro) 
 * @version (1.0 / 11/09/2017)
 */

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

public class Interface  extends JFrame
implements ActionListener{
    private JButton generar;
    private JButton pila;
    private JButton cola;
    private JPanel panel;
    private CreaLaberinto ejecutar = new CreaLaberinto();
    private Pila ejecutar1 = new Pila();
    private Cola ejecutar2 = new Cola();
    static int n;
    public static void main(String[] args){
        Interface frame = new Interface();
        frame.setSize(1080,720);
        frame.createGUI();
        frame.setVisible(true);
    }

    private void createGUI(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new FlowLayout());

        panel = new JPanel();
        panel.setPreferredSize(new Dimension (1000, 600));
        panel.setBackground(Color.white);
        window.add(panel);

        generar = new JButton("GENERAR");
        window.add(generar);
        generar.addActionListener(this);

        pila = new JButton("PILA");
        window.add(pila);
        pila.addActionListener(this);

        cola = new JButton("COLA");
        window.add(cola);
        cola.addActionListener(this);
    }

    public void actionPerformed(ActionEvent event){
        Graphics papel = panel .getGraphics();
        if (event.getSource()== generar){
            papel.setColor(Color.white);
            papel.fillRect(0, 0, 1000, 600);
            this.n= Integer.parseInt(JOptionPane.showInputDialog("Introduce un numero impar"));
            ejecutar.main(n);
            int x =1000/n;
            int y =600/n;
            for(int i=0 ; i<n ; i++){
                for(int j=0 ; j<n ; j++){
                    if(CreaLaberinto.laberinto[i][j]==0){
                        papel.setColor(Color.blue);
                        papel.fillRect(i*x, j*y, x, y);
                    }
                    if(CreaLaberinto.laberinto[i][j]==1){
                        papel.setColor(Color.white);
                        papel.fillRect(i*x, j*y, x, y);
                    }
                }
            }
            cola.setEnabled(true);
            pila.setEnabled(true);
        }

        if (event.getSource()== pila){
            ejecutar1.main();
            int x =1000/n;
            int y =600/n;
            for(int i=0 ; i<n ; i++){
                for(int j=0 ; j<n ; j++){
                    if(CreaLaberinto.laberinto[i][j]==2 |CreaLaberinto.laberinto[i][j]==4){
                        papel.setColor(Color.green);
                        papel.fillRect(i*x, j*y, x, y);
                    }
                    if(CreaLaberinto.laberinto[i][j]==3){
                        papel.setColor(Color.red);
                        papel.fillRect(i*x, j*y, x, y);
                    }
                }
            }
            pila.setEnabled(false);
            cola.setEnabled(false);
        }

        if (event.getSource()== cola){
            ejecutar2.main();
            int x =1000/n;
            int y =600/n;
            for (int z=0 ; z<Cola.pila.size() ; z++){
                TuTipo p = Cola.pila.get(z);
                int f = p.getF();
                int c = p.getC();
                papel.setColor(Color.green);
                papel.fillRect(f*x, c*y, x, y); 
            }
            cola.setEnabled(false);
            pila.setEnabled(false);
        }
    }
}

 

Buscaminas

Es un juego, elaborado bajo el concepto de arreglos bidimensionales (matrices), en el cual, un carácter se determina como mina, y hay caracteres que representan espacios sin minas, el algoritmo detrás de la parte gráfica, recibe una coordenada de la matriz y revisa esta tiene una mina, de no ser así, revisa a sus vecinos para ver si alguno es una mina, así sucesivamente con los vecinos, de los vecinos, hasta encontrar una mina y en los espacios de alrededor, da una pista de cuales casillas colindan con una o más minas, así el jugador puede tomar una decisión, de que casilla seleccionar como siguiente.

Codigo

package Matrices;


/** 
 * 
 *  
 * @author (David Lázaro) <br > 
 * @version (1.0 / 11/09/2017) */</br >

import java.lang.*;
import java.util.*;
import java.util.stream.*; 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.GridLayout;


public class BMinas extends JFrame
implements ActionListener{
    static JButton MBotones[][];
    private static int numero =Integer.parseInt(JOptionPane.showInputDialog("Ingresa un numero para la medida del Tablero"));
    private static int minas = Integer.parseInt(JOptionPane.showInputDialog("Cantidad de Minas"));
    int a, b;
    
    //matriz logica
    private static String [][] campo = new String [numero][numero];
    //matriz Priva linea de comandos
    private static String [][] bMinas = new String [numero][numero];
    //matriz grafica
    
    
    private GridLayout[][]tablero = new GridLayout[numero][numero];

    public static void main(String[] args){
        
        
        for (int nMinas=1; nMinas <= minas; nMinas ++){
        int fila;
        int col;
        do{
        fila = (int)(Math.random()*campo.length);
        col = (int)(Math.random()*campo[0].length);
       }while (campo[fila][col]=="*");
        campo[fila][col]= "*";
        
      }
      
      // campo.length chaca el alto del arreglo
        for (int f=0; f < campo.length; f++){
        for(int c=0; c < campo[0].length; c++){
            if (campo[f][c]!="*"){
                campo[f][c]= (String)(""+ cuentaVecinos(campo,f,c)) ;
                if(cuentaVecinos(campo,f,c) ==0){
                campo[f][c] = " ";
            }
          }
        }
      }
      //Impresion de el array logico oh imaginario
    
      for (int i = 0; i < numero; i++) {
            for (int j = 0; j < numero; j++) {
                System.out.print(campo[i][j] + " ");
            }
            System.out.println();
        }
     
        //Llenado de la Segunda Matriz    
        // campo.length chaca el alto del arreglo
        for (int fila=0; fila < bMinas.length; fila++){
        for(int col=0; col  < bMinas[0].length; col++){
                bMinas[fila][col] = (String)("T") ;
        }
        }
        //Impresion del array de Ts
        for (int i = 0; i < numero; i++) {
            for (int j = 0; j < numero; j++) {
                System.out.print(bMinas[i][j] + " ");
            }
            System.out.println();
        }
        
        
        
        
        BMinas frame = new BMinas();
        frame.setSize(1000,1000);
        frame.crearGUI();
        frame.setVisible(true);
        
        }

    
    private void crearGUI(){
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container window = getContentPane();
        window.setLayout(new GridLayout(numero, numero));
        
        MBotones = new JButton[campo.length][campo.length];
        
    
        for(int fila = 0; fila < campo.length; fila++){
            for(int col = 0; col  < campo.length; col++){
                MBotones[fila][col]= new JButton("");
                MBotones[fila][col].addActionListener(this);
                window.add(MBotones[fila][col]);
                
            }
        }
    
    }
    
    public static void gray(int a, int b){
        if (campo[a][b] == " "){
        MBotones[a][b].setBackground(Color.WHITE);
        
    }else {
    MBotones[a][b].setBackground(Color.YELLOW);}
}
   
    
     
    
    //Este metodo checa si la casilla tiene numero bomba o esta basia y destapa segun corresponda
    public static void destapaSerie(int numFila, int numCol){  
        if(numFila-1 >= 0 && numCol-1 >= 0 && bMinas[numFila-1][numCol-1]=="T" ){
          bMinas[numFila-1][numCol-1]= campo [numFila-1][numCol-1];
          MBotones[numFila-1][numCol-1].setText(bMinas[numFila-1][numCol-1]);
          gray(numFila-1,numCol-1);
          if(campo [numFila-1][numCol-1]==(" ")){
              destapaSerie(numFila-1,numCol-1);
            }
        }
        if(numFila-1 >= 0 && bMinas[numFila-1][numCol]=="T"){
            bMinas[numFila-1][numCol]= campo [numFila-1][numCol];
            MBotones[numFila-1][numCol].setText(bMinas[numFila-1][numCol]);
            gray(numFila-1,numCol);
            if(campo [numFila-1][numCol]==(" ")){
                destapaSerie(numFila-1,numCol);
            }
        }
        if(numFila-1 >= 0 && numCol+1 < bMinas.length && bMinas[numFila-1][numCol+1]=="T"){
            bMinas[numFila-1][numCol+1]= campo [numFila-1][numCol+1];
            MBotones[numFila-1][numCol+1].setText(bMinas[numFila-1][numCol+1]);
            gray(numFila-1,numCol+1);
            if(campo [numFila-1][numCol+1]==(" ")){
                destapaSerie(numFila-1,numCol+1);
            }
        }

        if(numFila >= 0 && numCol-1 >= 0 && bMinas[numFila][numCol-1]=="T"){
            bMinas[numFila][numCol-1]= campo [numFila][numCol-1];
            MBotones[numFila][numCol-1].setText(bMinas[numFila][numCol-1]);
            gray(numFila,numCol-1);
            if(campo [numFila][numCol-1]==(" ")){
                destapaSerie(numFila,numCol-1);
            }
        }
        if(numFila >= 0 && bMinas[numFila][numCol]=="T"){
            bMinas[numFila][numCol]= campo [numFila][numCol];
            MBotones[numFila][numCol].setText(bMinas[numFila][numCol]);
            gray(numFila,numCol);
            if(campo [numFila][numCol]==(" ")){
                destapaSerie(numFila,numCol);
            }
        }
        if(numFila >= 0 && numCol+1 < bMinas.length && bMinas[numFila][numCol+1]=="T"){
            bMinas[numFila][numCol+1]= campo [numFila][numCol+1];
            MBotones[numFila][numCol+1].setText(bMinas[numFila][numCol+1]);
            gray(numFila,numCol+1);
            if(campo [numFila][numCol+1]==(" ")){
                destapaSerie(numFila,numCol+1);
            }
        }

        if(numFila+1 < bMinas.length && numCol-1 >= 0 && bMinas[numFila+1][numCol-1]=="T"){
            bMinas[numFila+1][numCol-1]= campo [numFila+1][numCol-1];
            MBotones[numFila+1][numCol-1].setText(bMinas[numFila+1][numCol-1]);
            gray(numFila+1,numCol-1);
            if(campo [numFila+1][numCol-1]==(" ")){
                destapaSerie(numFila+1,numCol-1);
            }
        }
        if(numFila+1 < bMinas.length && bMinas[numFila+1][numCol]=="T"){
            bMinas[numFila+1][numCol]= campo [numFila+1][numCol];
            MBotones[numFila+1][numCol].setText(bMinas[numFila+1][numCol]);
            gray(numFila+1,numCol);
            if(campo [numFila+1][numCol]==(" ")){
                destapaSerie(numFila+1,numCol);
            }
        }
        if(numFila+1 < bMinas.length && numCol+1 < bMinas.length && bMinas[numFila+1][numCol+1]=="T"){
            bMinas[numFila+1][numCol+1]= campo [numFila+1][numCol+1];
            MBotones[numFila+1][numCol+1].setText(bMinas[numFila+1][numCol+1]);
            gray(numFila+1,numCol+1);
            if(campo [numFila+1][numCol+1]==(" ")){
                destapaSerie(numFila+1,numCol+1);
            }
        }
    }   

    
    //Este metodo pone los numeros alrededor de las bombas
    public static int cuentaVecinos(String[][]campo, int f, int c){
        int cont =0;
        int k = campo.length;
        int p = campo[0].length;
        if(f-1 >=0 && c-1 >=0 && campo[f-1][c-1]=="*"){
            cont++;
        }
        if(f-1>=0 &&  campo[f-1][c]=="*"){
            cont++;
        }
        if(f-1>=0 && c+1<k && campo[f-1][c+1]=="*"){
            cont++;
        }
        if(f >=0 && c-1 >=0 && campo[f][c-1]=="*"){
            cont++;
        }
        if(f>=0 && campo[f][c]=="*"){
            cont++;
        }
        if(f>=0  && c+1<k && campo[f][c+1]=="*"){
            cont++;
        }
        if(f+1 <p && c-1 >=0 && campo[f+1][c-1]=="*"){
            cont++;
        }
        if(f+1 <p && campo[f+1][c]=="*"){
            cont++;
        }
        if(f+1 < p  && c+1<k && campo[f+1][c+1]=="*"){
            cont++;
        }
        return cont;
    }
    
     public void actionPerformed(ActionEvent event){

         //event.getSource, busca un evento que ocurra, en este caso en el boton, y se pide que si se encuenta un evento, asigne el valor almacenado
         //en la variable pero con su valor de cadena de caracteres.
         if (event.getSource() instanceof JButton){
             for (int fila=0; fila < MBotones.length; fila++){
                 for(int col=0; col  < MBotones[0].length; col++){
                if (MBotones[fila][col] == event.getSource()){
                a = fila;
                b = col;

            }
          }
        }
         MBotones[a][b].setText(campo[a][b]);
         if((campo[a][b])== "*"){
             MBotones[a][b].setBackground(Color.RED);
             JOptionPane.showMessageDialog(null,"Ya Perdiste");
            }
            
         if((campo[a][b])!= "*"){
             MBotones[a][b].setBackground(Color.BLUE);
        
            }
            
         if((campo[a][b])== " "){
             destapaSerie(a,b);
            }
        
            
            
            
        //MBotones[a][b].setText(campo[a][b]);
        //MBotones[a][b].setEnabled(false);

      }
    }
}

Proyectos de SQL Server + Visual Studio

Inicio Sistema Colegio

 

Codigo de la clase que realiza la conección con la base de datos.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace SistemaMiColegio
{
    public class BDConexion
    {
        public static SqlConnection obtenerConexion()
        {
            //System.Data.SqlClient.SqlConnection strConn = new System.Data.SqlClient.SqlConnection(@"Data Source = DAVIDLM\MSSQLSERVER2; Initial Catalog=ventas; Integrated Security=true");
            //System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
            SqlConnection Conn = new SqlConnection(@"Data Source = DAVIDLM\MSSQLSERVER2 ; Initial Catalog = MiColegio; Integrated Security = SSPI");
           Conn.Open();
            return Conn;
        }
    }
}

 

Codigo de la pantalla del modulo de registro de estudiantes

// Autor: David Lázaro
//Version 1.0
//11/Sep/2017

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SistemaMiColegio
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public Alumno alumnoActual{get; set;}

        private void Guardar_Click(object sender, EventArgs e)
        {
            Alumno Alumno = new Alumno();
            Alumno.Nombre = textNombre.Text;
            Alumno.Apellidos = textApellidos.Text;
            Alumno.Direccion = textDireccion.Text;
            Alumno.Fecha_Nac = textFechaNac.Text;

            int resultado = alumnoABMC.agregarAlumno(Alumno);

            if (resultado > 0)
            {
                MessageBox.Show("El alumno se guardo exitosamente", "Datos Guardados", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("El alumno NO se guardo exitosamente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void Busqueda_Click(object sender, EventArgs e)
        {
            BuscarAlumno pBuscarAlumno = new BuscarAlumno();
            pBuscarAlumno.ShowDialog();

            if (pBuscarAlumno.alumnoSeleccionado != null)
            {
                alumnoActual = pBuscarAlumno.alumnoSeleccionado;
                textNombre.Text = pBuscarAlumno.alumnoSeleccionado.Nombre;
                textApellidos.Text = pBuscarAlumno.alumnoSeleccionado.Apellidos;
                textDireccion.Text = pBuscarAlumno.alumnoSeleccionado.Direccion;
                textFechaNac.Text = pBuscarAlumno.alumnoSeleccionado.Fecha_Nac;

                Guardar.Enabled = false;
                Modificar.Enabled = true;
            }
        }
    }
}

 

Codigo de la clase que agrega, busca y recupera la informacion de un alumno

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;

namespace SistemaMiColegio
{
    class alumnoABMC
    {
        public static int agregarAlumno(Alumno pAlumno)
        {
            int retorno;
            using (SqlConnection Conn = BDConexion.obtenerConexion())
            {
                SqlCommand cmd = new SqlCommand(string.Format("INSERT INTO Alumnos (Nombre, Apellidos, Direccion, Fecha_Nacimiento) VALUE('{0}','{1}','{2}','{3}')",
                    pAlumno.Nombre, pAlumno.Apellidos, pAlumno.Direccion, pAlumno.Fecha_Nac), Conn);
                retorno = cmd.ExecuteNonQuery();
                Conn.Close();
            }
            return retorno;
            //Fin del metodo agregarAlumno()
        }
        //-------------------------------------------------------------------------------------------------------------
        public static List<Alumno> buscarAlumnos(String pNombre, String pApellidos)
        {
            List<Alumno> Lista = new List<Alumno>();
            using (SqlConnection Conn = BDConexion.obtenerConexion())
            {

                SqlCommand cmd = new SqlCommand(string.Format("SELECT Matricula, Nombre, Apellidos, Direccion, Fecha_Nacimiento FROM Alumnos WHERE Nombre LIKE '%{0}%' OR Apellios LIKE '%{1}%'", pNombre, pApellidos, Conn));

                SqlDataReader leerTabla = cmd.ExecuteReader();

                while (leerTabla.Read())
                {
                    Alumno pAlumno = new Alumno();
                    pAlumno.Id = leerTabla.GetInt64(0);
                    pAlumno.Nombre = leerTabla.GetString(1);
                    pAlumno.Apellidos = leerTabla.GetString(2);
                    pAlumno.Direccion = leerTabla.GetString(3);
                    pAlumno.Fecha_Nac = Convert.ToString(leerTabla.GetDateTime(4));
                    Lista.Add(pAlumno);
                }
                Conn.Close();
                return Lista;
            }
        }

        //Fin del metodo buscarAlumno
        //-----------------------------------------------------------------------------------------------------------------
        public static Alumno obtenerAlumno(Int64 pId)
        {
            Alumno pAlumno = new Alumno();
            using (SqlConnection Conn = BDConexion.obtenerConexion())
            {
                SqlCommand cmd = new SqlCommand(string.Format("SELECT, Nombre, Apellidos, Direccion, Fecha_Nacimiento, FROM Alumnos WHERE Matricula = {0}", pId), Conn);
                SqlDataReader leerTabla = cmd.ExecuteReader();
                while (leerTabla.Read())
                {
                    pAlumno.Id = leerTabla.GetInt64(0);
                    pAlumno.Nombre = leerTabla.GetString(1);
                    pAlumno.Apellidos = leerTabla.GetString(2);
                    pAlumno.Direccion = leerTabla.GetString(3);
                    pAlumno.Fecha_Nac = Convert.ToString(leerTabla.GetDateTime(4));

                }
                Conn.Close();
                return pAlumno;
            }//Fin del metodo Obtener Alumno
        }
             //----------------------------------------------------------------------------------------------------------------
        public static int modificarAlumno(Alumno pAlumno)
        {
            int resultSet = 0;
            using (SqlConnection Conn = BDConexion.obtenerConexion())
            {
                SqlCommand cmd = new SqlCommand(string.Format("UPDATE Alumnos SET Nombre = '{0}', Apellidos = '{1}', Direccion = '{2}', Fecha_Nac = '{3}' WHERE Matricula {4}", pAlumno.Nombre, pAlumno.Apellidos, pAlumno.Direccion, pAlumno.Fecha_Nac, pAlumno.Id), Conn);
                resultSet = cmd.ExecuteNonQuery();
                Conn.Close();
            }
                return resultSet;
        }
    }
}


Forma para buscar Alumno

Codigo de la clase que sirve para buscar y accesar  los datos almacenados en la base de datos pertenecientes a un alumno especifico.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SistemaMiColegio
{
    public partial class BuscarAlumno : Form
    {
        public BuscarAlumno()
        {
            InitializeComponent();
        }
        public Alumno alumnoSeleccionado { set; get;}
        private void Buscar_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = alumnoABMC.buscarAlumnos(textNombre.Text, textApellidos.Text);
        }

        private void Aceptar_Click(object sender, EventArgs e)
        { 
            //Si el grid esta lleno y se selecciona una fila, al click en aceptar se pasan los valores del registro
            //a la pantalla principal
            if (dataGridView1.SelectedRows.Count == 1)
            {
                Int64 Id = Convert.ToInt64(dataGridView1.CurrentRow.Cells[0].Value);
                alumnoSeleccionado = alumnoABMC.obtenerAlumno(Id);
                this.Close();
            }
            else
            {
                MessageBox.Show("No se ha seleccionado el registro del alumno");
            }
        }
    }
}

 

Algunos comandos basicos de SQL Server

Codigo para Crear una base de datos y una tabla con sus columnas

USE master
GO
CREATE DATABASE [ventas]
ON PRIMARY
(
  NAME = 'ventas_Data',
  FILENAME = 'C:\bdVentas\Data\ventas_data.mdf',
  SIZE = 5120KB,
  MAXSIZE = 10240KB,
  FILEGROWTH = 10%
)

LOG ON
(
  NAME = 'ventas_Log',
  FILENAME = 'C:\bdVentas\Log\ventas_log.mdf',
  SIZE = 1024KB,
  MAXSIZE = 2048KB,
  FILEGROWTH = 10%
)
GO
USE ventas
GO
CREATE TABLE productos
(
  idProducto int NOT NULL,
  nombre nvarchar (80) NOT NULL,
  cantidad int NOT NULL,
  precio smallmoney NOT NULL,
  productImage image NULL,
  CONSTRAINT Pk_Products
  PRIMARY KEY CLUSTERED (idProducto)
) 
ON [PRIMARY]

Codigo para omitir un caracter de busqueda

--BUSCAR A LOS AUTORES CUYO NOMBRE NO TERMINE CON LA LETRA N
USE pubs --Nombre de la base de datos
GO
SELECT [au_fname] --Nombre de la columna
FROM[dbo].[authors] --Nombre de la tabla
WHERE [au_fname] NOT LIKE '%n' --Condicion de busqueda en culumna, que no sean n

Cross Join

--Cross Join despliega cada combinacion
--por cada fila que se encuentre en cada tabla
--Es un producto cartesiano. Una multiplicación total
--de los registros (filas) de la tabla de origen POR
--el total de los registros de la tabla de origen
--Si tabla origen 1=8 Rows (filas) y tablas de origen 2= 7 filas
--la tabla derivada sera de 56 = Rows

--Cuanto puede comprar cada cliente de acuerdo a las ventas?

USE joinDB
GO
SELECT c.idComprador, v.cantidad
FROM Compradores AS c, Ventas AS v
GO
SELECT * FROM Ventas