פרויקט SQL קלפים

🦔 און מלצר   📅 מאי 2020

תגיות: ניתוח נתונים , פייתון , SQL , python , מדריך , שאלות למתחילים , שאלות למתקדמים , data analysis , קורס SQL , שאלות לראיון עבודה,  תרגול TSQL, DML , SSMS , SQL SERVER

במאמר הבא נסקור את דרישות והגדרות הפרוייקט.

הפרויקט הוא חינמי וחופשי

הורידו את הפרויקט והתחילו לפתור !

עבור אלה מאיתנו שלומדים שרוצים לבחון את הרמה שלהם ועבור אלה שלא מכירים כיצד בסיס נתונים משתלב באפליקציות ואתרי אינטרנט , הפרוייקט הזה הוא בשבילכם.

אז קצת רקע,

ביישומים ואתרי אינטרנט ישנו מודל כללי של העברת מידע בין החלק שהמשתמש רואה או בשמו המקצועי front-end שהוא בגדול דף html עם עיצוב css ופונקציונאליות מסוימת javascript לבין ה”קסם” שקורה מאחורי הקלעים back-end.

חלק ה-back-end מכיל שפת שרת כמו php , python , c-sharp שמעבירה בקשות למידע שמגיעות מהאתר אל בסיס הנתונים data base ובחזרה אל האתר.

התקשרות אל בסיס הנתונים מבוצעת ע”י פונקצייה function או פרוצדורה store procedure השמורה בסיס הנתונים וזאת כדי להימנע מ- sql injection.

ממשק-בסיס-נתונים-אתר
אתר -> שפת שרת -> פרוצדורה\וויו -> בסיס נתונים

הכנתי עבורכם פרוייקט המדמה שולחן במשחק קלפים מבוסס microsoft sql server ובניתי יישומון קטן אותו תוכלו להריץ מקומית על המחשב והוא בעצם מכיל בתוכו את ה-front-end ואת שפת השרת שמדברת עם בסיס הנתונים.

התפקיד שלכם הוא לכתוב את הפרוצדורות כדי שהיישום יוכל לקבל מידע מבסיס הנתונים לפי דרישות האפיון שמפורט בהמשך.

כדי לבצע את הפרוייקט יש תחילה להתקין:
  • Microsoft Sql Server
  • Sql Server Managment Studio
הפרוייקט מחולק לשלושה שלבים, כל מסך הוא שלב אחר בפרוייקט וכדי שהיישום יעבוד בהצלחה עליכם לכתוב פרוצדורות store procedure עבור כל כפתור בהתאם מסמך האיפיון.

מוכנים? הפרוייקט מתחיל

שלב 1 - הקמת בסיס נתונים וטבלאות

צרו בסיס נתונים ותנו לו שם לבחירתכם.

בתוך בסיס הנתונים יש להקים ארבע טבלאות, אין צורך לייצר קשרי גומלין ביניהן.

במשחק שלנו 5 שחקנים.

בחפיסה יש 52 קלפים .מספרי הקלפים מתחילים ב – 1 ונגמרים ב- 13, בנוסף יש לנו את ארבעת סוגי הקלפים:

  • לב – H
  • עלה- S
  • יהלום – D
  •  תלתן – C

שלב 2 - מסך התחברות

בקצרה
  1. הוסיפו סיסמא ברשומה חדשה אל טבלת Users.
  2. צרו פרוצדורה sp_login
  3. חזרו אל היישום ובמסך החיבור הקלידו:
    • שם משתמש – DATAOM
    • סיסמא
    • שם השרת שלכם
    • שם בסיס הנתונים שלכם
והתחברו!
מפורטכדי שנוכל לפתוח את היישום אנחנו צריכים להגדיר סיסמא , שרת ובסיס נתונים ראשית עליכם לבחור את סיסמת הכניסה אל היישום (עד 6 תווים) ולהזין אותה ברשומה חדשה אל טבלת Users בעמודה UserPassword.לאחר שהגדרתם והוספתם אל הטבלה את הסיסמא , צרו פרוצדורה בשם sp_Login  המקבלת פרמטר בשם password מסוג (6) nvarchar.מטרת הפרוצדורה היא לבחון האם הסיסמא שהקלדתם במסך החיבור מתאימה לסיסמא המופיעה בטבלת Users.הפרוצדורה sp_login בודקת האם בטבלת Users קיימת הסיסמא המתאימה לסיסמא שנרשמה ביישום והתקבל דרך פרמטר password , במידה וקיימת סיסמא כזאת הפרוצדורה תחזיר 1 במידה ולא קיים מחזירה 0.
login_page
פרוייקט קלפים SQL - מסך התחברות

שדה שם משתמש: DATAOM

שדה סיסמא: סיסמא לבחירתכם.

שדה שם שרת: שרת SQL המקומי שלכם.

שדה שם בסיס נתונים: שם בסיס הנתונים שהקמתם ובו נמצאת טבלת Users.

במידה והצלחתם, תיכנסו ותגיעו אל המסך הבא.

שלב 3 - פרוצדורות הצגת מידע ופקודות DML

עברתם לשלב הבא! כל הכבוד!

בקצרה

  1. הזינו כמה רשומות עבור חלק מהשחקנים בטבלת Hands.
  2. הזינו כמה רשומות עבור קופת הקלפים בטבלת Deck.
  3. צרו את פרוצדורות הבאות:
    • sp_DeckCount – לספירת הקופה.
    • sp_ShowHands – להצגת הקלפים של השחקנים.
    • sp_GetRows – להצגת רשומות בטבלת Testim.
    • sp_insertRecords – להכנסת רשומות אל טבלת Testim.
    • sp_updateRecords – לעדכון רשומות בטבלת Testim.
    • sp_deleteRecords – למחיקת רשומות בטבלת Testim.
cards_part2_page
פרוייקט קלפים SQL - מסך חלק 2

מפורט

אוקי אז עכשיו הגענו אל החלק העיקרי בפרוייקט. עלינו לייצר פרוצדורות ולתת מענה לכל כפתור המופיע על הלוח.

בחלק זה נעבוד עם טבלאות Hands, Deck ו- Testim לביצוע פקודות DML

כדי שנוכל לבדוק את הפרוצדורות יש להזין רשומות אל טבלת Hands וטבלת Deck.

השאירו את טבלת Testim ריקה.

הפרוצדורות שיש לייצר לצורך שלב 3, ליחצו על הסימן “+” כדי לראות הסבר לכל אחת:

מטרת הפרוצדורההפרוצדורה סופרת את כמות הרשומות שיש בטבלת Deck
תיאור הפרוצדורהבעת הפעלה הפרוצדורה סופרת רשומות בטבלת Deck
פרמטריםללא
מחזירהint
מטרת הפרוצדורהבהתאם לבחירת המשתמש, הפרוצדורה מציגה רשומות מטבלת Hands.
תיאור הפרוצדורההפרוצדורה מציגה את כל הקלפים שיש לשחקן מסוים לפי מה שבחר במשתמש, במידה והמשתמש בחר להציג ALL הפרוצדורה תחזיר את רשומות כל השחקנים בטבלת Hands.
פרמטרים(3) HandID nvarchar
מחזירהResult Set
מטרת הפרוצדורההצגת הרשומות מטבלת Testim כדי לראות השפעה של פקודות DML.
תיאור הפרוצדורההפרוצדורה מציגה את כל הרשומות מטבלת Testim.
פרמטריםללא
מחזירהResult Set
מטרת הפרוצדורההכנסת רשומה לתוך טבלת Testim לפי המידע שהזין המשתמש בתיבת טקסט ביישום.
תיאור הפרוצדורההפרוצדורה מקבלת פרמטרים המגיעים מהיישום ורושמת רשומה אחת חדשה בגין הערכים שנכנסו.
פרמטריםHandID int CardNumber int CardType char(1)
מחזירהלא מחזירה
מטרת הפרוצדורהעדכון ערכי קלף בטבלת Testim
תיאור הפרוצדורההפרוצדורה מאתרת קלף לפי מספר סידורי CardSn ומעדכנת את הערכים באותה רשומה בהתאם לערכים שהזין המשתמש.
פרמטריםCardSn int HandID int CardNumber int CardType char(1)
מחזירהלא מחזירה.
מטרת הפרוצדורהמחיקת רשומה בטבלת Testim
תיאור הפרוצדורההפרוצדורה מאתרת רשומה לפי CardSn ומוחקת אותה
פרמטריםCardSn int
מחזירהלא מחזירה.

המסך מחולק לשני חלקים.

החלק השמאלי מאפשר לקבל את מספר הקלפים שיש בחבילה ועל ידי בחירת מספר שחקן להציג את הרשומות שיש עבורו בטבלה.

החלק הימני מאפשר לנו לבצע פקודות Insert , Update או Delete ולהציג את התוצאות של הפקודות בטבלת Testim.

אחרי שביצענו בהצלחה את כל הפרוצדורות וכל הכפתורים עובדים

ניתן לעבור אל המסך האחרון על ידי לחיצה על הכפתור בפינה הימנית “מעבר אל חלק 3”.

שלב 4 - קלפים ונהנים!

הגענו בהצלחה אל השלב האחרון!

בקצרה

צרו את פרוצדורות הבאות:

  •  sp_ShowHandFirstCard – להצגת הקלף הראשון שמחזיק שחקן מסוים.
  • sp_MakeDeck – ליצירת חפיסת קלפי המשחק שלנו
  • sp_DealFullHand – לחלוקת הקלפים לכל חמשת השחקנים
cards_part3_page

מפורט

החלק האחרון לא פחות מאתגר מקודמיו , משלב את הבנה שלנו בטרנזקציות , ניהול טבלאות וכתיבת TSQL

עליכם לייצר שלוש פרוצדורות נוספות. אז אמרנו משחק קלפים מה בנוגע לחפיסת קלפים וחלוקתם לשחקנים.

אז במשחק שלנו  ,יש כמובן 52 קלפים המחולקים ל13 מספרים וארבעה סוגים  .

הפרוצדורה הראשונה sp_MakeDeck תהיה הפרוצדורה ליצירת החפיסה. זכרו לבדוק שהחפיסה ריקה לפני שמתחילים להכניס אליה קלפים.

לאחר מכן נרצה לחלק את החפיסה לחמשת השחקנים ולצורך הנוחות כל שחקן מחזיק 5 קלפים בדיוק. נקו את טבלת Hands ובעזרת הפרוצדורה sp_DealFullHand חלקו לכל שחקן 5 קלפים בצורה אקראית! אם ראיתם שכל שחקן מקבל פשוט 5 רשומות ראשונות מהחפיסה סימן שלא ביצעתם זאת כהלכה.

הפרוצדורה האחרונה sp_ShowHandFirstCard תציג לנו את הקלף הראשון שמחזיק שחקן לבחירתנו במסך הימני.

הפרוצדורות שיש לייצר לצורך שלב 4, ליחצו על הסימן “+” כדי לראות הסבר לכל אחת:

מטרת הפרוצדורהיצירת חפיסת קלפים חדשה מלאה עם 52 קלפי משחק
תיאור הפרוצדורהבעת הפעלת הפרוצדורה , נרוקן את החפיסה ונמלא אותה ב52 קלפים. כדי לוודא שהפרוצדורה הצליחה נציג אותה במסך השמאלי
פרמטריםללא
מחזירהResult Set
מטרת הפרוצדורהחלוקת 5 קלפים אקראית לכל שחקן
תיאור הפרוצדורההפרוצדורה תנקה את טבלת Hands ותזין במקום חמישה קלפים בצורה אקראית עבור כל שחקן.
את הקלפים שחולקו לשחקן יש למחוק מהחפיסה כמובן.
נדפיס את תוצאות הפרוצדורה כדי לוודא את התוצאה.
פרמטריםללא
מחזירהResult Set
מטרת הפרוצדורההצגת הקלף הראשון שמחזיק שחקן
תיאור הפרוצדורההפרוצדורה מציגה את הקלף הראשון מטבלת Hands עבור שחקן אותו בחר המשתמש
פרמטריםHandID int
מחזירהResult Set

סיכום

אז הפרוייקט הקטן בא לתת לנו טעינה קטנה מכיצד מתנהל ממשק מעבר המידע בין המשתמש לבין בסיס הנתונים.

כמובן שישנם אלמנטים נוספים שמתקיימים בסביבת אמת כמו הרשאות , כתיבה נכונה ושימוש נכון באובייקטים בסיס הנתונים וכן הלאה.

נפגש בפרוייקט הבא  🙂

המרצה שלך

און מלצר

אני  און מלצר  רואה חשבון, לשעבר ראש צוות ניתוח נתונים וכיום מרצה מוביל לעולם אנליזה ונתונים, פיתוח בינה עסקית ומקצועות ההיי-טק .

אני כאן, כי אני אוהב ללמד , אוהב את האתגר שיש בפתרון בעיות קוד והיופי שנמצא בתוך הנתונים.

יותר מזה ,אני מאמין ויודע שכל אחד יכול ומסוגל לתכנת ולנתח נתונים
וזאת זכות גדולה בשבילי להעביר את הידע


אז למה אתם מחכים? הצטרפו אליי

נגישות