[ Foro de C# ]

colas con prioridad

10-Feb-2014 20:13
Invitado (cristian gonzalez)
3 Respuestas

hola estoy haciendi un programita que me genera tickets y atienda tickets, es como la espera a ventanilla en un banco, lo stoy haciendo con colas, pero lo q pasa eske no se como poner la proporcion de 3 a 1, osea que por 3 clientesContarjeta se atiena a 1 clienteSintarjeta, osea danto prioridad a los clientes con tarjeta, porfavor ayudenme. muchas gracias. yo avance algo pero cuando ejecuto y luego a atender al primer clienteSintarjeta, me atiende al clienteContarjeta 5, osea se come el cliente con tarjeta 4 :s


public partial class Form1 : Form
    {
        int contaContarj, contaSintarj;

        ColaSinTarjeta colaSin;
        ColaTarjeta colaCon;
        Random r;


        public Form1()
        {
            InitializeComponent();

            contaContarj = 0;
            contaSintarj = 0;

            r = new Random();
            colaSin = new ColaSinTarjeta(30);
            colaCon = new ColaTarjeta(30);


        }
        public string FormarNro(int conta)
        {
            string aux;

            if (conta < 10)
                aux = "00" + conta;
            else
                if (conta < 100)
                    aux = "0" + conta;
                else
                    aux = "" + conta;

            return aux;
        }

        private void btnGenerar(object sender, EventArgs e)
        {
            string ticket;
            if (radioButton1.Checked)
            {
                contaContarj = contaContarj + 1;
                ticket = "CT" + FormarNro(contaContarj);
                colaCon.adicionar(ticket);


            }
            else
                if (radioButton2.Checked)
                {
                    contaSintarj = contaSintarj + 1;
                    ticket = "ST" + FormarNro(contaSintarj);
                    colaSin.adicionar(ticket);
                }
                else
                {
                    MessageBox.Show("Seleccionar Cliente", "Mensaje");
                    return;
                }
            label1.Text = "Nro: " + ticket;
        }

        private void btnAtender_Click(object sender, EventArgs e)
        {
            if ((colaCon.getPrimero() == -1))
            { MessageBox.Show("No hay clientes", "Mensaje"); }
            else
            {
                txtTicket.Text = colaCon.getElemento(colaCon.getPrimero());
                txtVentana.Text = r.Next(1, 10).ToString();
                colaCon.eliminar();

                if ((colaSin.getPrimero() == -1))
                {
                    { MessageBox.Show("No hay clientes", "Mensaje"); }
                }
                else
                {
                    if (colaCon.getPrimero() % 4 == 0)
                    {
                        txtTicket.Text = colaSin.getElemento(colaSin.getPrimero());
                        txtVentana.Text = r.Next(1, 10).ToString();
                        colaSin.eliminar();
                    }



10-Feb-2014 20:26
Nacho Cabanes (+84)

Te puede bastar con un "contadorDeTarjetasPendientes":


// Al principio del programa
tarjetasPendientes = 3;
...
// En la parte repetitiva
if (tarjetasPendientes > 0)
{
    AtenderTarjeta();
    tarjetasPendientes --;
}
else
{
    AtenderEfectivo();
    tarjetasPendientes = 3;
}



11-Feb-2014 02:13
Invitado (cristian)

Hola nacho, la verda que soy novato progrtamando, me podrias dar tu correo para asi mandarte mi programita porfavor? Es una tarea final importante, porfavor te lo agradeceria bastante, intente lo q me dijiste pero no me sale :s


12-Feb-2014 23:06
Nacho Cabanes (+84)

No.

Esto es un foro. Se trata de que las respuestas sea públicas para que puedan ayudarte a ti y a los demás.

Para ayudarte a entender el problema, redúcelo a lo mínimo posible. Olvídate momentáneamente de Windows Forms y céntrate en el manejo de las dos colas, incluso con datos prefijados en vez de pedirle al usuario. Cuando un esqueleto básico que resuelve el problema te funcione, podrás adaptarlo a Windows Forms o al entorno que quieras.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)