Skocz do zawartości
stufa

Program Do Obslugi Magazynu

Rekomendowane odpowiedzi

Witam! Potrzebuje pomocy w napisaniu programu do obslugi magazynu. Ma to byc prosty programik, bo jestem poczatkujacym (bardzo) uzytkownikiem C#.

Otoz program ma miec mozliwosc dodania produktu (nazwa i ilość), sprzedaż towaru (czyli generalnie tylko odjecie wpisanej liczby od tego co jest "na stanie"), zakupu(czyli dodanie).

 

Podstawowa sprawa - w czym przechowywać dane o ilości danego produktu? Na zajęciach poznalismy tylko arraylisty i ewentualnie zapis/odczyt plikow. Arraylist odpada chyba - moze tylko ewentualnie przechowywac nazwy towarow.

No chyba zeby zrobic drugiego arraylista i w nim przechowywac ilosc. Ale jak to potem powiazac - ze jak zrobie sobie np. metode Wyswietl to mi pokaze ze jest mleko(z jednego arraylista) i 10szt (z drugiego arraylista)...

 

Jakis pomysł?? Bo ja nie wiem jak to ugryść :?

Edytowane przez stufa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrób sobie jakąś klasę produkt lub strukturę. Na przykład tak:

public class Produkt{	public string Nazwa = string.Empty;	public int Ilość = 0;	... dodatkowe atrybuty}

Teraz możesz to przechowywać w jednej liście.

 

Jak to przechowywać: propnuje xmla, lub jakiś plik binarny (jak już wiesz co i jak). Oczywiście może to być prosty plik tekstowy. Napiszesz to w ten sposób (pseudokod)

foreach( Produkt p in listaProduktow ){	 ZapiszDoPliku(p);}public void ZapiszDoPliku(Produkt p){	plik.WriteLine(p.Nazwa + " " + p.Ilosc); }
Jedna linijka w pliku to 1 produkt. Linia ma postać: NazwaProduktu Ilość.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dzieki za podpowiedz... po wielu probach udalo mi sie stworzyc szkielet programu.... rozlozylem go na 3 klasy :

-Program - z metoda Main(), ktora tylko tworzy obiekty i uruchamia program

namespace ProduktMagazyn2{	class Program	{		static void Main(string[] args)		{			Produkt p1 = new Produkt("mleko", 10);			Magazyn n = new Magazyn();			n.Uruchom();		}	}}

- Produkt

 

using System;using System.Collections;using System.Text;namespace ProduktMagazyn2{   public class Produkt	{	   private string nazwa;	   private int ilosc;	  	   public Produkt(string nazwa, int ilosc) 	   {		   this.nazwa = nazwa;		   this.ilosc = ilosc;	   }	   public string pobierzNazwe() 	   {		   return nazwa;	   }	   public int pobierzIlosc() 	   {		   return ilosc;	   }	}}

no i Magazyn, ktora jest "cialem" programu:

 

using System;using System.Collections;using System.Text;namespace ProduktMagazyn2{   public class Magazyn	{	   private ArrayList stanMagazynu = new ArrayList();	   public void Dodaj(Produkt p) 	   {		   stanMagazynu.Add(p);	   }	   public void Drukuj()	   {		   foreach (object o in stanMagazynu) 		   {			   Console.WriteLine(((Produkt)o).pobierzNazwe());			   Console.WriteLine(((Produkt)o).pobierzIlosc());		   }	   }	   public void Uruchom() 	   {		   bool koniec = false;		   do		   {			   Console.WriteLine("MAGAZYN");			   Console.WriteLine();			   Console.WriteLine();			   Console.WriteLine();			   Console.WriteLine("1 - Dodaj Produkt");			   Console.WriteLine("2 - Pokaż stan magazynu");			   Console.WriteLine("3 - Zakończ program");			   string wybor = Console.ReadLine();			   if (wybor == "1")			   {				   Console.WriteLine("Podaj nazwe produktu");				   string nazwaProduktu = Console.ReadLine();				   Console.WriteLine("Podaj ilość produktu");				   int iloscProduktu = int.Parse(Console.ReadLine());				   Dodaj(new Produkt(nazwaProduktu, iloscProduktu));			   }			   else if (wybor == "2")			   {				   Drukuj();			   }			   else if (wybor == "3")			   {				   koniec = true;			   }		   } while (koniec == false); 	   }   }}

teraz mam pytanko :

-jak poprawic metode Dodaj, tak aby wyswietlala stan magazynu w formi produkt....ilosc (teraz wszystkie pola wyswietla jedno pod drugim)

-jak stworzyc metode kup (czyli dodanie jakies ilisci towaru, ktory jest juz na stanie) i analogicznie sprzedaj (czyli odejmie zadana ilosc od stanu magazynu)....

Edytowane przez stufa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kilka małych uwag tak na początek: zamiast pobierzNazwe i pobierzIlosc zrób sobie to w ten sposób:

public string Nazwa{	get	{		return nazwa;	}	//jesli chcesz miec mozliwosc ustawiania tej zmiennej	set			{		nazwa = value;	}}
Analogicznie zrób z ilością.

 

Zamiast ArrayLista korzystaj z list używających Generics. Będzie to wyglądać w ten sposób:

private List<Produkt> stanMagazynu = new List<Produkt>();

Drukowanie w postaci: Produkt: Ilość można osiągnąc następująco:

Console.WriteLine( "{0}: {1}", produkt.Nazwa, produkt.Ilosc );lub składając stringaConsole.WriteLine( produkt.Nazwa + ": " + produkt.Ilosc.ToString() );

Kup i Sprzedaj można zrobić tak:

//Metoda pomocniczaprivate Produkt ZnajdzProdukt( string nazwa ){	 foreach( Produkt p in stanMagazynu )	 {		   if( p.Nazwa = nazwa )		   {				 return p;		   }	 }	 //Nie ma na stanie zwracamy null	 return null;}public void Kup( string nazwa, int ilosc ){	Produkt p = ZnajdzProdukt( nazwa );	if( p != null )	{		p.Ilosc += ilosc;	}	else	{		 //Nie mamy tego produktu w bazie wiec dodajmy go		 Dodaj( new Produkt( nazwa, ilosc ) );	}}public void Sprzedaj( string nazwa, int ilosc ){	Produkt p = ZnajdzProdukt( nazwa );	if( p != null )	{		 //Nie mozemy sprzedac wiecej niz mamy		 if( p.Ilosc >= ilosc )		 {			 p.Ilosc -= ilosc;		 }	}}

Tak to może wyglądać.

Edytowane przez ghostek

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dzieki za pomoc :) chetnie skorzzystalbym z Twoich sugestii, ale nie miałem takich rzeczy na zajeciach, wiec koles moglby pomyslec ze ktos mi ten program napisal. Natomiast Kup i Sprzedaj sa inspirujace i napewno mi pomoga :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

jeszcze jedna sprawa.....zapis i odczyt z pliku....:)

Nie mam pomysłu już - od piatku sie z tym mecze i nic....

Uzywam filestreama do utworzenia plkiu stan.txt

potem streamwriterem nie moge sie odwolac do utworzonego filestreama. czy musze to robic w metodzie Main??

 

bo program sie nie wywala, ale plik jest pusty...... jakies sugestie ??

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

string xxx = "mleko : 10";string[] temp = new String[2]; char[] spliters = new Char[1];spliters[0] = ':';temp = xxx.Split(spliters, 2);MessageBox.Show("Nazwa: " + temp[0]+ "  Sztuk:" + temp[1]);

edit: Pewnie da się zrobić to trochę krócej/lepiej, ale mimo wszystko to działa :>

Edytowane przez GDR

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

:lol2: wielkie dzieki za pomoc :) w sobote ide na chrzest bojowy, tzn zaliczenie :)

programik gotowy do walki. Mam nadzieje ze damy rade :) Jeszcze raz wielkie dzieki dla ghostek, GDR, alienzero

 

apryszyjejt :lol2:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam po dluzszej nieobecnosci :)

pozstanowilem troche "dobajerzyc" swoj program (oczywiscie w ramach swoich niewielkich umiejetnosci). Zrobilem go pod okienkami, polaczenie z baza sql`a ogolnie gra i buczy :)

dodawanie produktu na stan wyszlo mi w miare szybko.

mam problem z wyswietlaniem stanu: ogolnie wyglada to tak:

- z main menu klikamy :STAN: i wyskakuje okienko ze stanem (czyli select * from produkt), tyl tylko ze datagrid pozostaje pusty - co robie źle ?? :mur:

 

private void btnWyswietl_Click(object sender, EventArgs e)		{		   						stan.Show();						string connectionString = "workstation id=\"Desktop\";packet size=4096;integrated security=SSPI;data s" +				"ource=\"Desktop\";persist security info=False;initial catalog=Magazyn";			SqlConnection polaczenieSql = new SqlConnection();			try			{				polaczenieSql.ConnectionString = connectionString;				polaczenieSql.Open();			}			catch (Exception ex1)			{				MessageBox.Show(ex1.Message, "Brak dostępu", MessageBoxButtons.OK, MessageBoxIcon.Error);			}			SqlCommand wyswietl = polaczenieSql.CreateCommand();			wyswietl.CommandType = CommandType.Text;			wyswietl.CommandText = "Select * from Produkt";						SqlDataAdapter da = new SqlDataAdapter();			da.SelectCommand = wyswietl;						DataSet ds = new DataSet();			da.SelectCommand = wyswietl;			da.Fill(ds, "Produkt");									dataGridView1.DataSource = ds;			dataGridView1.DataMember = "Produkt";						polaczenieSql.Close();		   						}	}}

jakis pomysl??

jak sie zabrac za ściaganie ze stanu?? bo podam nazwe, jesli nazwa jest w bazie danych to sciagnie wpisana ilosc. Ale jak to zrobic, ze w instrukcji sql odjac cos od komorki w tabeli (chodzi o ilosc).

jakies pomysly, wskazowki??

Edytowane przez stufa

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nikt nie ma pomyslu ?? :unsure: no nic jakos sobie poradzilem. Nie wiem jednak jak sie zabrac za usuwanie produktow z bazy ??

aha i jeszcze jedno - program dzial- ale jak chce wyswietlic sobie stan to jest oki- ale jak chce to zrobic drugi raz to wyskakuje blad - cos tam dispose - domyslam sie ze trzeba zwolnic jakies zasoby, ale o co chodzi konkretnie ??? POMOCY

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...