ממשק משתמש בקונסולה / ממשק מנהל
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 66 מתוך 70.
אתגר
קלנשלים את מערכת הספרייה שלך באמצעות בניית ממשק מסוף שמחבר בין כל הרכיבים שלך! תיצור ממשק מנהל מערכת שמעבד פקודות לניהול הספרייה — הוספת ספרים, רישום משתמשים, טיפול בפעולות השאלה וחיפוש בקטלוג.
תמשיך לבנות על מבנה הפרויקט הקיים שלך:
Book.cs: השאר את המחלקה Book שלך עםId,Title,Author,IsAvailable, ועם המתודותBorrow()ו־Return().User.cs: השאר את המחלקה User שלך עם מעקב אחר השאלות, הקבועMaxBooks, המתודהCanBorrow(), ומתודות לניהול ספרים שהושאלו.Library.cs: השאר את המחלקה Library שלך עם כל לוגיקת ההשאלה ומתודות החיפוש באמצעות LINQ שבנית. הוסף מתודה חדשהGetAllBooks()שמחזירה את כל הספרים בספרייה, ומתודהGetAllUsers()שמחזירה את כל המשתמשים הרשומים.Program.cs: כאן ממשק המסוף שלך מתעורר לחיים! תבנה מעבד פקודות שקורא פקודות ומבצע את פעולות הספרייה המתאימות. חשוב על זה כלוח הבקרה של מנהל המערכת בספרייה שלך.
ממשק המסוף שלך צריך לטפל בפקודות הבאות:
ADD_BOOK|id|title|author- מוסיף ספר חדש ומדפיסAdded: {Title}ADD_USER|name|memberId- רושם משתמש חדש ומדפיסRegistered: {Name}BORROW|bookId|memberId- מעבד בקשת השאלה (השתמש בלוגיקת BorrowBook הקיימת שלך)RETURN|bookId|memberId- מעבד בקשת החזרה (השתמש בלוגיקת ReturnBook הקיימת שלך)SEARCH|type|value- מחפש בקטלוג, כאשר type הואtitle,author,available, אוborrowedSTATUS- מדפיס סיכום המציג את מספר הספרים הכולל, מספר הספרים הזמינים, מספר המשתמשים הכולל ומספר הספרים שהושאלו
עבור הפקודה STATUS, הדפס את הסיכום בפורמט הבא:
--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}בתוצאות החיפוש, הדפס כל ספר בשורה נפרדת בפורמט {Title} by {Author}, או No books found אם אין תוצאות.
הקלט שתקבל:
- שם הספרייה
- מספר הפקודות לעיבוד
- כל פקודה בשורה נפרדת, בפורמטים שתוארו למעלה
לדוגמה, אם הקלט הוא:
Downtown Library
8
ADD_BOOK|B001|Clean Code|Robert Martin
ADD_BOOK|B002|The Pragmatic Programmer|David Thomas
ADD_USER|Alice|101
ADD_USER|Bob|102
BORROW|B001|101
SEARCH|available
BORROW|B002|102
STATUSהפלט צריך להיות:
Added: Clean Code
Added: The Pragmatic Programmer
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
The Pragmatic Programmer by David Thomas
Bob borrowed The Pragmatic Programmer
--- Library Status ---
Total Books: 2
Available: 0
Total Users: 2
Books Borrowed: 2ממשק המסוף שלך משמש כדבק שמחבר בין קלט המשתמש לרכיבי הספרייה המאורגנים היטב שלך. כל פקודה מועברת למתודה המתאימה במחלקה Library שלך, ומדגימה כיצד ארכיטקטורה נקייה הופכת את בניית ממשקי המשתמש לפשוטה!
נסו בעצמכם
using System;
using System.Collections.Generic;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// קרא את שם הספרייה
string libraryName = Console.ReadLine();
// צור מופע של Library עם שם הספרייה
Library library = new Library(libraryName);
// קרא את מספר הפקודות
int numCommands = Convert.ToInt32(Console.ReadLine());
// עבד כל פקודה
for (int i = 0; i < numCommands; i++)
{
string commandLine = Console.ReadLine();
string[] parts = commandLine.Split('|');
string command = parts[0];
// TODO: טפל בפקודת ADD_BOOK
// פורמט: ADD_BOOK|id|title|author
// הדפס: Added: {title}
// TODO: טפל בפקודת ADD_USER
// פורמט: ADD_USER|name|memberId
// הדפס: Registered: {name}
// TODO: טפל בפקודת BORROW
// פורמט: BORROW|bookId|memberId
// הדפס את התוצאה של library.BorrowBook()
// TODO: טפל בפקודת RETURN
// פורמט: RETURN|bookId|memberId
// הדפס את התוצאה של library.ReturnBook()
// TODO: טפל בפקודת SEARCH
// פורמט: SEARCH|type|value (type יכול להיות title, author, available, borrowed)
// הדפס כל ספר בתור "{Title} by {Author}" או "No books found"
// TODO: טפל בפקודת STATUS
// הדפס:
// --- Library Status ---
// Total Books: {count}
// זמינים: {count}
// Total Users: {count}
// Books Borrowed: {count}
}
}
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויות3ארכיטקטורת מחלקות
נתוני מופע לעומת נתונים סטטייםמילות המפתח 'readonly' ו-'const'שדות גיבויסיכום – מנהל חשבונות בנק12פרויקט: מערכת ספרייה
מבנה הפרויקטמודלים של ספרים ומשתמשיםלוגיקת השאלת ספריםחיפוש באמצעות LINQממשק משתמש בקונסולה / ממשק מנהלבדיקות יחידה (NUnit/xUnit)תרגלו בעצמכם: קומפיילר C# אונליין