Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Symulator kinowych rezerwacji


Rekomendowane odpowiedzi

Opublikowano

Jakiś czas temu z nudy zrobiłem symulator kina w WPF, do zapisuje wykorzystuje on plik tekstowy. Może się komuś przydać, jednak nie należy brać go jako przykład :D.

MainWindow.Xaml.cs

using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace ArchCinema
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Kino kino = new Kino();
        void widocznosc(Grid jaki)
        {
            if (jaki.Visibility == Visibility.Hidden)
                jaki.Visibility = Visibility.Visible;
            else
                jaki.Visibility = Visibility.Hidden;
        }
        public MainWindow()
        {
            InitializeComponent();
            kino.sprawdzDane();
        }

        private void NowaRezerwacja(object sender, RoutedEventArgs e)
        {
            widocznosc(start); widocznosc(nowarezerwacja);
            ukladMiejsc.Text = string.Empty;
            godzinaIsala.ItemsSource = null; miejsce.ItemsSource = null;
            listaFilmow.ItemsSource = kino.sprawdzFilmy();
        }

        private void SprawdzRezerwacje(object sender, RoutedEventArgs e)
        {
            widocznosc(start); widocznosc(sprawdzrezerwacje); 
        }
        private void Rezerwuj(object sender, RoutedEventArgs e)
        {
            try
            {
                kino.Zarezerwuj(NowaRezerwacjaImie.Text, NowaRezerwacjaNazwisko.Text, listaFilmow.SelectedItem.ToString(), godzinaIsala.SelectedItem.ToString().Remove(0, 6).Replace(", ", "_"), miejsce.SelectedItem.ToString());
                godzinaIsala_SelectionChanged(null, null);
            }
            catch
            {
                MessageBox.Show("Uzupełnij wszystkie pola.");
            }
        }
        private void SprawdzSwojaRezerwacje(object sender, RoutedEventArgs e)
        {
            listaRezerwacji.ItemsSource=kino.sprawdz(SprawdzRezerwacjeImie.Text,SprawdzRezerwacjeNazwisko.Text);
        }

        private void listaFilmow_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            godzinaIsala.ItemsSource = kino.sprawdzGodzinyIsale(listaFilmow.SelectedItem.ToString());
        }

        private void godzinaIsala_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                List<string> miejsca = kino.sprawdzMiejsce(godzinaIsala.SelectedItem.ToString().Remove(0, 6).Replace(", ", "_"));
                int i = 0;
                miejsce.ItemsSource = miejsca; ukladMiejsc.Text = "---------EKRAN---------\n";
                foreach (string a in miejsca)
                {
                    if (i == 5)
                    {
                        ukladMiejsc.Text += "\n"; i = 0;
                    }
                    ukladMiejsc.Text += "[" + a + "]";
                    i++;
                }
            }
            catch { }
                
        }
    }
}
 

Kino.cs:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows;

namespace ArchCinema
{
    class Kino
    {
        public void sprawdzDane()
        {
            if (!File.Exists("data/filmy.txt"))
            {
                try
                {
                    StreamWriter sw = new StreamWriter( new FileStream("data/filmy.txt", FileMode.OpenOrCreate, FileAccess.Write));
                    sw.Write("Fantastyczna_czwórka 1_11:00 2_13:00 1_17:00 3_19:00 1_23:30\r\nHarry_Potter 2_17:00 1_20:00 3_23:00\r\nMały_Książę 3_14:00 4_16:00 4_18:30\r\nMakinowo 2_9:30 5_15:30");
                    sw.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }

        public List<string> sprawdz(string imie, string nazwisko)
        {
            List<string> dane = new List<string>(); List<string> wynik = new List<string>();
            try
            {
                StreamReader sr = new StreamReader(new FileStream("data/rezerwacje.txt", FileMode.OpenOrCreate, FileAccess.Read));
                while (!sr.EndOfStream)
                {
                    dane=sr.ReadLine().Split(' ').ToList();
                    if (dane[0] == imie + "_" + nazwisko) 
                    {
                        wynik.Add("Dokonano rezerwacji na film " + dane[1].Replace('_', ' ')+", o godzinie "+dane[2]+ ", miejsce: "+dane[3]+", sala nr "+dane[4]);
                    }
                }
                sr.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            if (!wynik.Any()) wynik.Add("Brak rezerwacji");
            
            return wynik;
        }
        public List<string> sprawdzFilmy()
        {
            List<string> dane = new List<string>(); List<string> wynik = new List<string>();
             try
            {
                StreamReader sr = new StreamReader(new FileStream("data/filmy.txt", FileMode.Open, FileAccess.Read));
                while (!sr.EndOfStream)
                {
                    dane = sr.ReadLine().Split(' ').ToList();
                    wynik.Add(dane[0].Replace('_', ' '));
                }
                sr.Close();
            }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.ToString());
             }
             return wynik;
        }
        public List<string> sprawdzGodzinyIsale(string nazwaFilmu)
        {
            List<string> dane = new List<string>(); List<string> wynik = new List<string>();
            try
            {
                StreamReader sr = new StreamReader(new FileStream("data/filmy.txt", FileMode.Open, FileAccess.Read));
                while (!sr.EndOfStream)
                {
                    dane = sr.ReadLine().Split(' ').ToList();
                    if (dane[0].Replace('_', ' ')==nazwaFilmu)
                    {
                        for (int i=1; i<dane.Count();i++)
                        {
                            wynik.Add("Sala: "+dane[i].Replace("_",", "));
                        }
                        
                        break;
                    }
                }
                sr.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return wynik;
        }
        public List<string> sprawdzMiejsce(string godzinaIsala)
        {
            List<string> dane = new List<string>(); List<string> wynik = new List<string>();
            try
            {
                StreamReader sr = new StreamReader(new FileStream("data/rezerwacje.txt", FileMode.Open, FileAccess.Read));
                for (int i = 1; i < 8; i++)
                {
                     for (int i2 = 1; i2 < 6; i2++ )
                     {           
                          wynik.Add(i + "-" + i2);
                     }
                }
               
                for (int x=0;x<wynik.Count;x++)
                {
                    sr.BaseStream.Seek(0,SeekOrigin.Begin);
                    while (!sr.EndOfStream)
                    {
                        dane = sr.ReadLine().Split(' ').ToList();
                        if (((dane[4] + "_" + dane[2]).ToString() == godzinaIsala.Trim()) && (dane[3] == wynik[x]))
                            wynik[x] = "X-X";
                    }
                }
                sr.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return wynik;
        }
        public void Zarezerwuj(string imie, string nazwisko, string film, string godzinaIsala, string miejsce)
        {
            List<string> dane = new List<string>();
            try
            {
                FileStream fs = new FileStream("data/rezerwacje.txt", FileMode.Open, FileAccess.ReadWrite);
                StreamReader sr = new StreamReader(fs); bool powodzenie=true;
                while (!sr.EndOfStream)
                {
                    dane = sr.ReadLine().Split(' ').ToList();
                    if ((dane[0] == imie + "_" + nazwisko) && (dane[1] == film.Replace(" ", "_")) && ((dane[4] + "_" + dane[2]).ToString() == godzinaIsala))
                    {
                        MessageBox.Show("Dokonano już rezerwacji na ten sens.");
                        powodzenie = false;
                        break; 
                    }
                }
                
                if (powodzenie)
                { 
                    if (miejsce=="X-X")
                    {
                            MessageBox.Show("To miejsce jest już zajęte."); 
                    }
                    else if (imie.Trim() == string.Empty || nazwisko.Trim() == string.Empty || film.Trim() == "-1" || godzinaIsala.Trim() == "-1" || (miejsce.Trim() == "-1" || miejsce.Trim() == "0"))
                    {
                            MessageBox.Show("Uzupełnij wszystkie pola."); 
                    }
                    else
                    {
                            StreamWriter sw = new StreamWriter(fs);
                            sw.WriteLine(imie+"_"+nazwisko+" "+film.Replace(" ","_")+" "+godzinaIsala.Remove(0,2)+" "+miejsce+" "+ godzinaIsala[0]);
                            MessageBox.Show("Pomyślnie dodano rezerwację.");
                            sw.Close();
                    }
                }
                sr.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

MainWindow.xaml:

<Window x:Class="ArchCinema.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ArchCinema" Height="366" Width="617" ResizeMode="CanMinimize">
    <Grid Background="#FF424242">
        <Grid HorizontalAlignment="Left" Height="325" VerticalAlignment="Top" Width="599" Name="start">
            <Button Content="Nowa rezerwacja" HorizontalAlignment="Left" Height="44" Margin="205,100,0,0" VerticalAlignment="Top" Width="170" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Click="NowaRezerwacja"/>
            <Button Content="Sprawdź swoje rezerwacje" HorizontalAlignment="Left" Height="44" Margin="205,193,0,0" VerticalAlignment="Top" Width="170" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Click="SprawdzRezerwacje"/>
        </Grid>
        <Grid HorizontalAlignment="Left" Height="325" VerticalAlignment="Top" Width="599" x:Name="nowarezerwacja" Visibility="Hidden">
            <Button Content="Rezerwuj" HorizontalAlignment="Left" Height="44" Margin="51,247,0,0" VerticalAlignment="Top" Width="170" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Click="Rezerwuj"/>
            <Button Content="Wróć" HorizontalAlignment="Left" Height="44" Margin="369,247,0,0" VerticalAlignment="Top" Width="170" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Click="NowaRezerwacja"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="548" Foreground="White"><Run Text="Imię"/><Run Text=":"/></TextBlock>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,68,0,0" TextWrapping="Wrap" Text="Nazwisko:" VerticalAlignment="Top" Width="548" Foreground="White"/>
            <TextBox HorizontalAlignment="Left" Height="16" Margin="123,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="416" Background="#FF188AAC" BorderBrush="{x:Null}" Foreground="White" Name="NowaRezerwacjaImie"/>
            <TextBox HorizontalAlignment="Left" Height="16" Margin="123,68,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="416" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Name="NowaRezerwacjaNazwisko"/>
            <ComboBox HorizontalAlignment="Left" Height="22" Margin="123,87,0,0" VerticalAlignment="Top" Width="116" BorderBrush="{x:Null}" Name="listaFilmow" SelectionChanged="listaFilmow_SelectionChanged"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,92,0,0" TextWrapping="Wrap" Text="Film:" VerticalAlignment="Top" Width="67" Foreground="White"/>
            <TextBlock HorizontalAlignment="Left" Height="33" Margin="51,111,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="67" Foreground="White"><Run Text="Godzina"/><LineBreak/><Run Text="i sala:"/></TextBlock>
            <ComboBox HorizontalAlignment="Left" Height="22" Margin="123,117,0,0" VerticalAlignment="Top" Width="116" BorderBrush="{x:Null}" Name="godzinaIsala" SelectionChanged="godzinaIsala_SelectionChanged"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,153,0,0" TextWrapping="Wrap" Text="Miejsce:" VerticalAlignment="Top" Width="67" Foreground="White"/>
            <ComboBox HorizontalAlignment="Left" Height="22" Margin="123,146,0,0" VerticalAlignment="Top" Width="116" BorderBrush="{x:Null}" Name="miejsce"/>
            <TextBlock HorizontalAlignment="Left" Height="136" Margin="244,106,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="295" Background="#FF188AAC" Foreground="White" TextAlignment="Center" Name="ukladMiejsc"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="245,87,0,0" TextWrapping="Wrap" Text="Miejsca:" VerticalAlignment="Top" Width="294" Foreground="White" TextAlignment="Center" />
        </Grid>
        <Grid HorizontalAlignment="Left" Height="325" VerticalAlignment="Top" Width="599" x:Name="sprawdzrezerwacje" Visibility="Hidden">
            <Button Content="Sprawdź" HorizontalAlignment="Left" Height="44" Margin="51,247,0,0" VerticalAlignment="Top" Width="170" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Click="SprawdzSwojaRezerwacje"/>
            <Button Content="Wróć" HorizontalAlignment="Left" Height="44" Margin="369,247,0,0" VerticalAlignment="Top" Width="170" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Click="SprawdzRezerwacje"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="548" Foreground="White"><Run Text="Imię"/><Run Text=":"/></TextBlock>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,68,0,0" TextWrapping="Wrap" Text="Nazwisko:" VerticalAlignment="Top" Width="548" Foreground="White"/>
            <ListBox HorizontalAlignment="Left" Height="118" Margin="51,113,0,0" VerticalAlignment="Top" Width="488" Name="listaRezerwacji"/>
            <TextBox HorizontalAlignment="Left" Height="16" Margin="123,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="416" Background="#FF188AAC" BorderBrush="{x:Null}" Foreground="White" Name="SprawdzRezerwacjeImie"/>
            <TextBox HorizontalAlignment="Left" Height="16" Margin="123,68,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="416" BorderBrush="{x:Null}" Foreground="White" Background="#FF188AAC" Name="SprawdzRezerwacjeNazwisko"/>
            <TextBlock HorizontalAlignment="Left" Height="19" Margin="51,95,0,0" TextWrapping="Wrap" Text="Lista rezerwacji:" VerticalAlignment="Top" Width="548" Foreground="White"/>
        </Grid>
        <TextBlock HorizontalAlignment="Left" Height="17" Margin="541,308,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="58" Foreground="#FFB6A6A6"><Run Text="By "/><Run Text="ArcheR."/></TextBlock>

    </Grid>
</Window>
 

Należy stworzyć folder 'data', a w nim plik filmy.txt o zawartości:

Fantastyczna_czwórka 1_11:00 2_13:00 1_17:00 3_19:00 1_23:30
Harry_Potter 2_17:00 1_20:00 3_23:00
Mały_Książę 3_14:00 4_16:00 4_18:30
Makinowo 2_9:30 5_15:30
Ida 4_19:00 5_10:00
Zbanowany 2_00:00 

Dodatkowe informacje:


 

------Dodawanie filmów------

Filmy można dodać w pliku filmy.txt (data/filmy.txt), według schematu:
Nazwa filmu numer sali_godzina numer sali_godzina numer sali_godzina numer sali_godzina ...
 
\
Na przykład: 
MPC_forum 3_9:00 1_15:00
/
 
WAŻNE: nazwy, które mają więcej niż jedno słowo trzeba połączyć znakiem "_" (bez cudzysłowia).
WAŻNE: kino posiada tylko 8 sal (do 9. numeru) ;).
 
 
------Opis systemu rezerwacji------
Rezerwacje zapisywane są w pliku rezerwacje.txt (data/rezerwacje.txt), według schematu:
Imie Nazwisko Nazwa filmu godzina numer miejsca numer sali
 
\
Na przykład
Adam_Kowalski MPC_forum 17:00 1-1 2
/
 
WAŻNE: nazwy, które mają więcej niż jedno słowo oraz imię i nazwisko trzeba połączyć znakiem "_" (bez cudzysłowia).

Screeny:

338161440533408914647.png

595991440533408914647.png

Kody można dowolnie edytować i wykorzystywać.

Chętnie poznam opinię innych pracowników Blizzarda doświadczonych w c# użytkowników z MPC xD.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...