נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: עבודה עם קבצים

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
צחי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 10 May 2007 בשעה 14:23 | IP רשוּם
ציטוט צחי

שלום לכולם

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

אם מישהוא יודע מה אפשר לעשות עם העבודה הזו

הוא מוזמן לכתוב לי חזרה

איין לנו מושג אייך מתחילים

בתודה רבה

נושא התרגיל: מערכת לניהול רישום סטודנטים לקורסים

מטרת התרגיל

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

תאור התרגיל

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

פרטים מסבירים והמלצות עבודה, מפורטים בנספח שבסוף התרגיל.

תאור המערכת

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

בתכנית מוגדר מסבנה מטיפוס std  שיכיל מדע על סטודנט.
התכנית  תבצע: 

·        קליטה של סטודנטים חדשים.

·        עדכון של סטודנטים קיימים.

·       הצגה של סטודנטים קיימים.

 

הפעלת התוכנית

התוכנית, אשר תקרא mtm_ student_courses, תופעל באופן הבא:

 

 mtm_student_courses [ -i input_file_name] [-o output_file_name]

 

          קיום דגל  i- יגרום למערכת לקבל הוראות מהקובץ input_file_name.
אי קיום הדגל -  הקלט יגיע מערוץ הקלט הסטנדרטי (
standard input).

          קיום דגל  o- יגרום למערכת לשלוח את הפלט של התכנית לקובץ ששמו output_file_name.
אי קיום הדגל - פלט ישלח לערוץ הפלט הסטנדרטי (
standard output).

          שימו לב ששני הפרמטרים האלה הם רשות (כלומר, יכולים להיות 0, 2 או 4 אפשרויות).

          שימוש בדגלים  i-” או ב-”o-” ללא העברת שמות הקבצים,  שגוי.

          שינוי סדר הארגומנטים  ו/ או העברת ארגומנטים אחרים מלבד הנ"ל, שגוי!

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

 

מבנה סטודנט בתוכנית

typedef struct

[{

char  *first;

char * second;

char  subjects [8][6];

}


 

מבנה סטודנט  בקובץ

 

  • כל סטודנט יוחזק בקובץ בגודל קבוע, ללא רווחים בתוך הקובץ
  • שם פרטי – ברוחב שדה של 10 תווים מוצמד לשמאל
  • שם משפחה  - – ברוחב שדה של 10 תווים מוצמד לשמאל
    8  מקצועות לימוד ( קורסים)   שייוצגו כל אחד   ברוחב שדב של 6 תווים, ויכילו את מספר המקצוע.
    אם מס'  המקצוע, קטן  מ-6 תווים, המידע ישב  בקובץ מוצמד לימין.

 

קלט לתוכנית

  • מקור אפשרי : הקלט הסטנדרטי  או  מקובץ.
  • הקלט מורכב מסדרת מחרוזות.
  • בכל שורה תהיה הוראה אחת.
  • יתכנו שורות ריקות שלא יכילו הוראות כלשהן.
  • קלט מערוץ קלט הסטנדרטי נסיים במחרוזת ריקה.
  • קלט מקובץ יסתיים לפי הנדרש או בסיום הקובץ
  •  ניתן להניח כי הקלט תקין מבחינה המבנה .
  • ניתן להניח שמבנה הקובץ תקין.
  • יכולות להיות שורות שיתחילו בסימן הערה ; (נקודה-פסיק). אין  להתייחס לשורות אלו .
  • בדיקת הגעה לסוף הקובץ באמצעות הפונקציה feof.

 

מבנה שורת הוראה

שורת הוראה תכיל לכל היותר 60=MAX_LEN תווים . אם יש מספר שדות (פרמטרים) לפקודה, הם מופרדים ברווחים (אחד או יותר).   שדה לא יכול להכיל רווח.   יכולים להופיע רווחים לפני תחילת הפקודה.

 

טיפול בשגיאות

·        זוהתה שגיאה , תוכנית תופנה לפונקציה    mtm_error שתדווח לערוץ הפלט הודעות שגיאה.

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

·        במקרה בו שתי הודעות שגיאה או יותר אמורות להיות מודפסות בו זמנית, תודפס רק הראשונה מתוכן, כאשר הסדר נקבע על פי הסדר שבו מופיעות השגיאות.

סוגי ההוראות:

 

1.             הוספת סטודנט למערכת.

AddStudent <StudentID> <StudentFirstName> < StudentLastName >

הפקודה מוסיפה סטודנט למערכת.

·           StudentID  הוא מספר שלם גדול מאפס שבעזרתו נזהה את המשתמש,

·               StudentFirstName  היא מחרוזת שמכילה את השם הפרטי של הסטודנט,

·               StudentLastName   היא מחרוזת שמכילה את שם המשפחה של הסטודנט.

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

 


 

 

2.            הוספת קורס לרשימה של סטודנט.

AddCourse <StudentID> <CourseNumber>

הפקודה מצרפת  קורס רשומת המידע של  סטודנט מסויים.

·        StudentID הוא מספר הזהות של הסטודנט שלרשימתו מוסיפים את הקורס.

·        CourseNumber הוא מספר שלם המייצג את מספר הקורס.

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

 

3.            הורדת קורס מרשימה של סטודנט.

RemoveCourse <StudentID> <CourseNumber>

הפקודה מווחקת מידע ה מרשומת הסטודנט בקובץ

·        StudentID הוא מספר הזיהוי של הסטודנט שמרשימתו מורידים את הקורס

·        CourseNumber הוא מספר הקורס שמורידים.

·        הורדה של קורס שאינו ברשימה הוא שגוי. יש להוציא הודעה מתאימה ולהמשיך את התכנית.

 

 

4.            הורדת סטודנט מהמערכת.

RemoveStudent <StudentID>

הפקודה מורידה משתמש מהמערכת. StudentID

·        הוא מספר הזיהוי של הסטודנט אותו מורידים.

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

·        אם הוא קיים, התוכנית תוריד אותו.

 

 

5.          הדפסת דו"ח.

Report  -a [ -i CourseNumber]

 


להצגת דוח יש שלוש אפשרויות

·        אם הבקשה מלווה בדגל  a- יש להציג את כל הסטודנטים שקיימים, לפי סדר הופעתם בקובץ .

·        אם הבקשה מלווה בדגל  i-  אחריו יופיע  CourseNumber   : יש להציג את כל הסטודנטים שרשומים לקורס  שמספרו ההוא  CourseNumber

·        אם הבקשה מגיעה ללא דגלונים , יתבצע התהליך הבא:

-                יבחר  מספר  n  אקראי בין 1-10. להלן n  מקורי

-                ניגש להציג את הסטודנט ה – n

-                נבודד את  ספרת הביקורת של הסטודנט  ה – n וזה יהיה  הערך הבא של 

-               נחזור על התהליך   n  מקורי  פעמים

 

 


 

דרישות, הגבלות הערות רמזים ותוספות:

·        יש להקפיד על תכנון נכון של התוכנית וכתיבה נכונה ב-C. בשלב זה של לימודיכם הנכם מסוגלים ונדרשים לתכנן ולכתוב תוכנית בסדר הגודל הנתון בעצמכם.

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

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

·        לצורך ניתוח הקלט (parsing) מומלץ להשתמש בפונקציה strtok על מנת לפרק שורות למילים בודדות, ובפונקציה atoi כדי להמיר מחרוזת למספר.

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

·        זכרו כי לא ניתן להשוות שתי מחרוזות על ידי אופרטור ההשוואה (==), ויש להשתמש בפונקציה strcmp.

·        מספר הקורס מזהה אותו חד ערכית

·        מספר סטודנט  מזהה אותו חד ערכית

 

 

הגשת התוכנית:

הגשה אלקטרונית , בקליקיט, למרגל הקורס, בזוגות.

עליכם להגיש קובץ מכווץ (zipped file) שיכיל את :

·        קבצי המקור,

·        קובץ הרצה בשם mtm_student_courses.

·        וקןבץ פלטים  בפורמט DOC שמכיל צילום מסכים המוכיחים את  הרצת התוכנית שלכם

·        בקובץ הפלטים ירשם שם מגישי העבודה

·        תאריך ההגשה 18 במאי 2007 , סוף היום.

הגשה בזמן, לא יתקבלו עבודות באיחור, אלא במקרים חריגים,  באישור המרצה- מראש.

 

 

 


 

דוגמא לנתוני קובץ קלט:

 

 

AddStudent 33333333 Johnny Depp

AddStudent 44444444 Sandra Bullock

AddStudent 77777777 Tom Cruise

AddStudent 88888888 Cameron Diaz

AddStudent 22222222 Gwyneth Paltrow

AddCourse 22222222  61902   

AddStudent 99999999 Matt Damon

AddCourse 44444444  61902   

AddCourse 55555555  61902   

AddCourse 44444444  97153   

RemoveCourse 44444444  97153  

AddStudent 77777777 Philip Seymour Hoffman

AddCourse 77777777  61902   

AddCourse 11111111  61902   

RemoveStudent 33333333

Report

Report -i 61902   

Report -a


 

נספח לתרגיל

·        בגלל התנאים המיוחדים שבו אנחנו עושים את התרגיל, יש צורך בעזרה, מלווה לתרגיל.

·        ננסה להנחות אתכם בגישה לפתרון, בנספח ודרך הפורום של האתר.

·        החומר לתרגיל זה זהה לשני הקורסים של תכנה ותעונ.

·        חומר עזר קיים באתר, בהרצאות, בדוגמאות.

·        ממולץ להסתכל בשתי המחיצות , באתר הקורס, של תכנה ושל תעו"נ.

·        אנו מודעים שלכך שחלק מהחומר  לא נילמד בכיתות השונות.
בכל הכיתות , השביתה תפסה אותנו , לפני שהספקנו לסיים את הנושא,.
יש כיתות שלא למדו העברת פרמטרים ל-
main  ויש כיתות שלא למדו ניוד מצביע בקובץ ויש כיתות שלמדו את החומר אבל עדיין לא תרגלו אותו.

 

הסברים.

 

·        ערוץ הקלט הסטנדרטי (standard input) -  פירושו מקלדת

  • ערוץ הפלט הסטנדרטי (standard output) – פירושו מסך.
  • פקודות fprintf  fscanf  עובדות מוך קבצים ומול  מקלדת ומסך.
  • stdin   - מצביע לקובץ קלט סטנדרטי. ( אין צורך להגדירו)
  • stdout - מצביע לקובץ פלט  סטנדרטי. ( אין צורך להגדירו)
  • stderr - מצביע לקובץ פלט שגיאות  סטנדרטי. ( אין צורך להגדירו)
  • פרמטרים שמועברים לתכנית מבחוץ ( מועברים ל- main  )    יכולים להופיע במספר לא קבוע, ולכן, אם הם קיימים יש דגלון שמודיע עליהם.
    הדגלון מסומן תמיד במינוס ואחריו אות  ידועה.

 

המלצות

·        מי שלא למד, העברת פרמטרים ל- main  , שיבצע את התרגיל  תחילה ללא פרמטרים , אלא מול קובץ . אחר כך ישלים את הקטע של האפשרות החלופית .

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

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

 

 

 

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 10 May 2007 בשעה 16:31 | IP רשוּם
ציטוט ניר

איזה מהחומר אתה יודע? איזה לא? האם הבעיה היא בהבנה של החומר או ביישום?

__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
הילה
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 14 May 2007 בשעה 17:21 | IP רשוּם
ציטוט הילה

צחי או ניר, 

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

תודה.

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

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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