Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:ztb:2010:projekty:ipoints:start [2010/05/30 13:30] ztb2010 |
pl:dydaktyka:ztb:2010:projekty:ipoints:start [2019/06/27 15:50] (aktualna) |
| |
==== Identyfikacja funkcji ==== | ==== Identyfikacja funkcji ==== |
| |
==== Analiza hierarchii funkcji projektowanej aplikacji ==== | ==== Analiza hierarchii funkcji projektowanej aplikacji ==== |
| |
| === FHD - Functional Hierarchy Diagram === |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:ipoints:ipoints_fhd.png|}} |
==== Budowa i analiza diagramu przepływu danych ==== | ==== Budowa i analiza diagramu przepływu danych ==== |
| |
| === Diagram kontekstowy === |
| {{:pl:dydaktyka:ztb:2010:projekty:ipoints:ipoints_kontekstowy.png|}} |
| |
| === DFD - level 0 === |
| {{:pl:dydaktyka:ztb:2010:projekty:ipoints:ipoints_dfd_0.png|}} |
| |
==== Wybór encji (obiektów) i ich atrybutów oraz ich powiązania (relacje) ==== | ==== Wybór encji (obiektów) i ich atrybutów oraz ich powiązania (relacje) ==== |
| |
==== Projekt diagramów STD ==== | ==== Projekt diagramów STD ==== |
| |
| Dzięki mechanizmowi TabBarControllera można przemieszczać sie swobodnie pomiędzy czterema głównymi widokami (lista gier, znajomi(część społecznościowa), pojedynki i profil) nie koniecznie miedzy ich początkowymi oknami - położenie w każdym widoku zostaje zapamiętane. |
| Jedyny sposób opuszczenia aplikacji jest naciśnięcie przycisku Home na urządzeniu. |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:ipoints:ipoints_std.png}} |
| |
| ==== Projektowanie tabel, kluczy, kluczy obcych, powiązań między tabelami, indeksów, etc. w oparciu o zdefiniowany diagram ERD ==== |
| |
| <code sql> |
| CREATE TABLE `ip_challenges` ( |
| `challengeID` int(11) NOT NULL auto_increment, |
| `projectID` varchar(15) NOT NULL default '', |
| `goal` int(11) NOT NULL default '0', |
| `active` int(11) NOT NULL default '0', |
| `days` int(11) NOT NULL default '0', |
| `finishDate` datetime NOT NULL default '0000-00-00 00:00:00', |
| `friendshipID` int(11) NOT NULL default '0', |
| `creator` varchar(40) NOT NULL default '', |
| PRIMARY KEY (`challengeID`), |
| KEY `projectID` (`projectID`), |
| KEY `friendshipID` (`friendshipID`), |
| KEY `creator` (`creator`) |
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=97 ; |
| |
| CREATE TABLE `ip_developers` ( |
| `developerID` int(4) NOT NULL auto_increment, |
| `firstName` varchar(65) NOT NULL default '', |
| `lastName` varchar(65) NOT NULL default '', |
| `email` varchar(65) NOT NULL default '', |
| `password` varchar(65) NOT NULL default '', |
| `companyName` varchar(65) default NULL, |
| PRIMARY KEY (`developerID`) |
| ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=14 ; |
| |
| |
| CREATE TABLE `ip_friends` ( |
| `friendshipID` int(11) NOT NULL auto_increment, |
| `player1ID` varchar(40) NOT NULL default '', |
| `player2ID` varchar(40) NOT NULL default '', |
| `type` int(11) NOT NULL default '1', |
| PRIMARY KEY (`friendshipID`), |
| KEY `player1ID` (`player1ID`), |
| KEY `player2ID` (`player2ID`) |
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=40 ; |
| |
| CREATE TABLE `ip_projects` ( |
| `projectID` varchar(15) NOT NULL default '', |
| `projectName` varchar(20) NOT NULL default '', |
| `iconURL` varchar(70) NOT NULL default '', |
| `scoreType` int(11) NOT NULL default '0', |
| `description` text NOT NULL, |
| `developerID` int(4) NOT NULL default '0', |
| `promoted` int(2) NOT NULL default '0', |
| `graphicURL` text NOT NULL, |
| `genere` varchar(20) NOT NULL default '', |
| `price` int(11) NOT NULL default '0', |
| PRIMARY KEY (`projectID`), |
| KEY `developerID` (`developerID`) |
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
| |
| |
| CREATE TABLE `ip_results` ( |
| `resultID` int(11) NOT NULL auto_increment, |
| `createdAt` timestamp NOT NULL default CURRENT_TIMESTAMP, |
| `playerID` varchar(40) NOT NULL default '', |
| `projectID` varchar(15) NOT NULL default '', |
| `score` int(11) NOT NULL default '0', |
| PRIMARY KEY (`resultID`), |
| KEY `projectID` (`projectID`), |
| KEY `playerID` (`playerID`) |
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1299 ; |
| |
| CREATE TABLE `ip_users` ( |
| `playerID` varchar(40) NOT NULL default '', |
| `playerName` varchar(20) NOT NULL default '', |
| `createdAt` datetime NOT NULL default '0000-00-00 00:00:00', |
| `updatedAt` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, |
| `avatarURL` varchar(100) NOT NULL default '', |
| `email` varchar(30) NOT NULL default '', |
| `pass` varchar(20) NOT NULL default '', |
| `link` varchar(50) NOT NULL default '', |
| PRIMARY KEY (`playerID`) |
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
| |
| |
| -- |
| -- Constraints for table `ip_challenges` |
| -- |
| ALTER TABLE `ip_challenges` |
| ADD CONSTRAINT `ip_challenges_ibfk_1` FOREIGN KEY (`projectID`) REFERENCES `ip_projects` (`projectID`), |
| ALTER TABLE `ip_challenges` |
| ADD CONSTRAINT `ip_challenges_ibfk_1` FOREIGN KEY (`projectID`) REFERENCES `ip_projects` (`projectID`), ADD CONSTRAINT `ip_challenges_ibfk_2` FOREIGN KEY (`friendshipID`) REFERENCES `ip_friends` (`friendshipID`), |
| ALTER TABLE `ip_challenges` |
| ADD CONSTRAINT `ip_challenges_ibfk_1` FOREIGN KEY (`projectID`) REFERENCES `ip_projects` (`projectID`), ADD CONSTRAINT `ip_challenges_ibfk_2` FOREIGN KEY (`friendshipID`) REFERENCES `ip_friends` (`friendshipID`), ADD CONSTRAINT `ip_challenges_ibfk_3` FOREIGN KEY (`creator`) REFERENCES `ip_users` (`playerID`); |
| |
| -- |
| -- Constraints for table `ip_friends` |
| -- |
| ALTER TABLE `ip_friends` |
| ADD CONSTRAINT `ip_friends_ibfk_1` FOREIGN KEY (`player1ID`) REFERENCES `ip_users` (`playerID`), |
| ALTER TABLE `ip_friends` |
| ADD CONSTRAINT `ip_friends_ibfk_1` FOREIGN KEY (`player1ID`) REFERENCES `ip_users` (`playerID`), ADD CONSTRAINT `ip_friends_ibfk_2` FOREIGN KEY (`player2ID`) REFERENCES `ip_users` (`playerID`); |
| |
| -- |
| -- Constraints for table `ip_projects` |
| -- |
| ALTER TABLE `ip_projects` |
| ADD CONSTRAINT `ip_projects_ibfk_1` FOREIGN KEY (`developerID`) REFERENCES `ip_developers` (`developerID`); |
| |
| -- |
| -- Constraints for table `ip_results` |
| -- |
| ALTER TABLE `ip_results` |
| ADD CONSTRAINT `ip_results_ibfk_1` FOREIGN KEY (`playerID`) REFERENCES `ip_users` (`playerID`), |
| ALTER TABLE `ip_results` |
| ADD CONSTRAINT `ip_results_ibfk_1` FOREIGN KEY (`playerID`) REFERENCES `ip_users` (`playerID`), ADD CONSTRAINT `ip_results_ibfk_2` FOREIGN KEY (`projectID`) REFERENCES `ip_projects` (`projectID`); |
| </code> |
| |
| ==== Denormalizacja struktury tabel ==== |
| |
| Tabela została zdenormalizowana w celu wygodniejszej pracy na zawartych w niej danych. Anomalie, które przez to mogą się pojawić zabezpieczone są przez interfejs umożliwiający dodawanie pewnych danych (np nowych pojedynków pomiędzy graczami) tylko w pewnych określonych warunkach tak by uniknąć wystąpienia anomalii. |
| |
| ==== Projektowanie operacji na danych ==== |
| |
| Do komunikacji z bazą aplikacja używa skryptów php znajdujących sie na serwerze, te po wywołaniu generują odpowiedź w postaci danych w formacie XML lub przy pomocy statusu protokołu http |
| |
| przykłady kwarend: |
| <code sql> |
| $query = 'SELECT * FROM (SELECT playerName, avatarURL FROM ip_users WHERE playerID IN (SELECT player2ID FROM ip_friends WHERE player1ID = "'. $udid .'" AND type = 2) |
| UNION |
| SELECT playerName, avatarURL FROM ip_users WHERE playerID IN (SELECT player1ID FROM ip_friends WHERE player2ID = "'. $udid .'" AND type = 2)) as friends ORDER BY playerName'; |
| |
| $query = 'INSERT INTO ip_users (playerID, playerName, createdAt) |
| VALUES ("'. $udid.'","'.$name . '",now())'; |
| |
| $my_friends = 'SELECT * FROM (SELECT playerName FROM ip_users WHERE playerID IN (SELECT player2ID FROM ip_friends WHERE player1ID = "'. $udid .'" AND type = 2) |
| UNION |
| SELECT playerName FROM ip_users WHERE playerID IN (SELECT player1ID FROM ip_friends WHERE player2ID = "'. $udid .'" AND type = 2)) as friends ORDER BY playerName'; |
| |
| $invit_recived = 'SELECT playerName FROM ip_users WHERE playerID IN (SELECT player1ID FROM ip_friends WHERE player2ID = "'. $udid .'" AND (type = 1 OR type =3)) ORDER BY playerName'; |
| |
| $invit_sent = 'SELECT playerName FROM ip_users WHERE playerID IN (SELECT player2ID FROM ip_friends WHERE player1ID = "'. $udid .'" AND type = 1) ORDER BY playerName'; |
| |
| $query = 'UPDATE ip_friends SET type = 3 WHERE player1ID = (SELECT playerID FROM ip_users WHERE playerName = "'. $name .'") AND player2ID = "'. $udid .'" AND type = 1'; |
| |
| </code> |
| ==== Interfejs użytkownika ==== |
| |
| Zrzuty ekranu symulatora (natywna aplikacja iPoints) |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:ipoints:screen_shot_2010-06-16_at_11.13.48_pm.png|}}{{:pl:dydaktyka:ztb:2010:projekty:ipoints:screen_shot_2010-06-16_at_11.14.28_pm.png}}|{{:pl:dydaktyka:ztb:2010:projekty:ipoints:screen_shot_2010-06-16_at_11.14.37_pm.png}}|{{:pl:dydaktyka:ztb:2010:projekty:ipoints:screen_shot_2010-06-16_at_11.14.45_pm.png|}} |
| |