Yevgen Grynechko INYNIERSKA PRACA DYPLOMOWA Projekt systemu organizacji
















- Slides: 16
Yevgen Grynechko INŻYNIERSKA PRACA DYPLOMOWA Projekt systemu organizacji e-sport z implementacją zarządzania środowiskiem w MSSQL Server 2017 Promotor: dr inż. Szymon Supernak
Cel i zakres pracy Cel Analiza środowiska e-sport i projekt oprogramowania pozwalającego na śledzenie oraz prezentację wyników rozgrywek e-sportowych Zakres ◎ Analizę procesów biznesowych firmy e-sportowej ◎ Analizę wymagań funkcjonalnych i pozafunkcjonalnych ◎ Przegląd statystyk i śledzenie dynamiki gry oraz osiągnięć graczy ◎ Prezentację wyników i analiz wyników rozgrywek esportowych 2
Dziedzina problemu E-Sport w grze Dota 2 ◎ Środowisko e-sportowe w grze Dota 2 ◎ Procesy biznesowe firmy e-sport 3
Główni interesariusze w e-sport 4
Diagram kontekstowy systemu 5
Projekt bazy danych 6
Place your screenshot here Interfejs użytkownika Okno logowania, widok menu głównego oraz okno obsługi zgłoszeń 7
Place your screenshot here System do analizy danych Analiza danych z aplikacji wykonana w Qlik Sense 8
Implementacja systemu 4. Qlik Sense Stworzenie systemu do analizy danych 3. C# Dota 2 Stats 2. SSIS Przygotowanie pakietu SSIS do zasilania bazy danych 1. SQL Server Zaprojektowanie bazy danych 9
Implementacja systemu SSIS Pakiet SSIS służący do wypełniania tabeli ‚Teams’ 10
Implementacja systemu Skrypt do obróbki REST API public class Script. Main : User. Component { public override void Create. New. Output. Rows() { //Set Webservice URL string w. Url = "https: //api. opendota. com/api/teams? json"; try { //Call get. Web. Service. Result to return our Teams array Root. Object[] out. Put. Response = Get. Web. Service. Result(w. Url); foreach (var r in out. Put. Response) { Output 0 Buffer. Add. Row(); Output 0 Buffer. teamid = r. team_id; Output 0 Buffer. rating = r. rating; Output 0 Buffer. wins = r. wins; Output 0 Buffer. losses = r. losses; Output 0 Buffer. lastmatchtime = r. last_match_time; Output 0 Buffer. name = r. name; Output 0 Buffer. tag = r. tag; Output 0 Buffer. logourl = r. logo_url; } } catch (Exception e) { Fail. Component(e. To. String()); } } private Root. Object[] Get. Web. Service. Result(string w. Url) { Http. Web. Request http. WReq = (Http. Web. Request)Web. Request. Create(w. Url); Http. Web. Response http. WResp = (Http. Web. Response)http. WReq. Get. Response(); Root. Object[] json. Response = null; try { //Test the connection if (http. WResp. Status. Code == Http. Status. Code. OK) { Stream response. Stream = http. WResp. Get. Response. Stream(); string json. String = null; //Set json. String using a stream reader using (Stream. Reader reader = new Stream. Reader(response. Stream)) { json. String = reader. Read. To. End(); reader. Close(); } //Deserialize our JSON Java. Script. Serializer sr = new Java. Script. Serializer(); json. Response = sr. Deserialize<Root. Object[]>(json. String); } //Output connection error message else { Fail. Component(http. WResp. Status. Code. To. String()); } } //Output JSON parsing error catch (Exception e) { Fail. Component(e. To. String()); } return json. Response; } private void Fail. Component(string error. Msg) { bool fail = false; IDTSComponent. Meta. Data 100 comp. Metadata = this. Component. Meta. Data; comp. Metadata. Fire. Error(1, "Error Getting Data From Webservice!", error. Msg, "", 0, out fail); } } public class Root. Object { public int team_id { get; set; } public double rating { get; set; } public int wins { get; set; } public int losses { get; set; } public int last_match_time { get; set; } public string name { get; set; } public string tag { get; set; } public string logo_url { get; set; } } 11
Implementacja systemu Wybrane procedury składowe Procedura służąca do wyszukiwania oraz wyświetlania rankingu zespołów. CREATE PROCEDURE [dbo]. [Matches. View. Or. Search] @Team. Name nvarchar(50), @League. Name nvarchar(100) AS Select DATEADD(second, start_time, '19700101') as Start. Time, radiant_name, dire_name, league_name, radiant_score, dire_score from dbo. Pro. Matches Where (dire_name like @Team. Name+'%' or radiant_name like @Team. Name+'%') and league_name like @League. Name +'%' order by start_time desc GO Procedura dodająca bądź aktualizująca użytkownika z poziomu „Administratora”. create procedure [dbo]. [User. Add. Or. Edit] @mode nvarchar(10), @User. ID int, @First. Name varchar(255), @Last. Name varchar(255), @Email varchar(255), @Date. Of. Birth date, @User. Name varchar(255), @Password varchar(255), @Role varchar(255) AS IF @mode = 'Add' BEGIN insert into Users (First. Name, Last. Name, Email, Date. Of. Birth, User. Name, Password, Role) Values( @First. Name, @Last. Name, @Email, @Date. Of. Birth, @User. Name, @Password, @Role) END Else if @mode='Edit' BEGIN UPDATE dbo. Users SET User. Name = @User. Name, First. Name = @First. Name, Last. Name = @Last. Name, Email = @Email, Date. Of. Birth = @Date. Of. Birth, Password = @Password, Role = @Role where User. ID = @User. ID END GO 12
Implementacja systemu GUI Wypełnianie tabel Wyświetlanie zdjęć Wysyłanie maili 13
Implementacja systemu Stworzenie modelu danych w Qlik Sense Połączenie z bazą danych SQL Server Model danych w Qlik Sense 14
PODSUMOWANIE Wnioski z pracy ◎ Spełnienie założonych na początku celów. ◎ Kompletny proces aktualizacji bazy danych. ◎ Wbudowany system obsługi zgłoszeń użytkowników systemu. ◎ Dodatkowy system raportujący. ◎ Rozwiązanie pojawiających się problemów programistycznych. 15
KONIEC Dziękuję za uwagę! 16