[ Foro de C# ]
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();
}
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;
}
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
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.)