#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <alloc.h>typedef struct{
char date;
int time;
char info;
}meeting;
void Edit_meeting(meeting *arr)
{
int num;
printf("Enter number of meeting to edit:");
scanf("%d", &num);
printf("Enter date:");
gets(arr.date);
printf("Enter time:");
scanf("%d", arr.time);
printf("Enter info:");
scanf("%s", arr.info);
}
void Del_meeting(meeting *arr, int *i)
{
int num;
printf("Enter number of meeting to delete (0-%d):", *i-1);
scanf("%d", &num);
if (num<0 || num>=*i)
{
printf("Wrong value...\n");
return;
}
for ( ; num<*i ; num++)
arr=arr;
(*i)--;
arr = (meeting*)realloc(arr, sizeof(meeting)*(*i));
}
meeting *Add_meeting(meeting *arr, int *i)
{
(*i)++;
arr = (meeting*)realloc(arr, sizeof(meeting)*(*i));
if (arr==NULL)
{
printf("Failed to allocate memory...\n");
exit(1);
}
printf("Enter date:");
flushall();
gets(arr.date);
printf("Enter time:");
flushall();
scanf("%d", &arr.time);
printf("Enter info:");
flushall();
scanf("%s", &arr.info);
return arr;
}
void Show_menu()
{
meeting *arr=NULL;
int i=0;
char option;
do
{
printf("\na.Add new meeting\nd.Delete meeting\ne.Edit meeting\nq.Quit\n");
flushall();
scanf("%c", &option);
switch (option)
{
case 'a': arr = Add_meeting(arr, &i);
break;
case 'd': Del_meeting(arr, &i);
break;
case 'e': Edit_meeting(arr);
break;
case 'q': exit(1);
default: printf("Wrong Choice...\n");
}
}
while (option != 'q');
if (arr!=NULL)
free(arr);
}
void main()
{
Show_menu();
}
התוכנית בכללי עושה ככה:
היא מציגה תפריט:
a.Add new meeting
d.Delete meeting
e.Edit meeting
q.Quit
ואז אני צריך לבחור איזה אפשרויות אני רוצה לעשות (a/d/e/q)
עכשיו אם אני בוחר ב a אז בעצם אני הולך להוסיף פגישה...
ואז אני מכניס את תאריך הפגישה, השעה, ופרטים עליה...
אם אני בוחר בd, אני פשוט מכניס את מספר הפגישה, ואז הפגישה נמחקת
אם אני בוחר בe, אז אני מכניס את מספר הפגישה שאני רוצה לערוך, ואז מכניס לה פרטים מחדש.
וq כמובן יוצא מהתוכנית.
אז התוכנית היא בעצם תוכנית לניהול פגישות...
עכשיו ככה היא בנויה:
היא מחולקת ל5 פונקציות:
main - שהיא הפונקציה הראשית, היא בעצם רק קוראת לפונקציה Show_menu.
Show_menu - היא מראה את התפריט, ואז קולטת את האפשרות למשתנה option, עכשיו יש בדיקה למשתנה option, כל אות שהוכנסה מופנת לפונקרציה משלה:
אם הוכנס a אז זה הולך לפונקציה Add_meeting.
Add_meeting - היא בעצם מגדילה את המשתנה i שזה בעצם משתנה המכיל את מספר האיברים של arr, ואז מקצה זיכרון לגודל האיברים הדרוש (i), ואז קולטת את הפרטים, arr.date שזה בעצם מכיל את התאריך וזה מחרוזת
arr.time שזה מכיל את השעה וזה מספר שלם, arr.info שזה מכיל את הפרטים וזה מחרוזת...
אם הוכנס d אז זה הולך לפונקציה Del_meeting
Del_meeting - קולטת את מספר הפגישה הנדרשת למחיקה,
ואז מעבירה את כל האיברים ממספר הפגישה איבר אחד אחורה, ואז מקטינה את מספר האיברים (i) ומקצה זיכרון מחדש, ובעצם ימחק רק התא האחרון בתוכנית.
אם נכנס e, אז זה הולך לפונקציה Edit_meeting
Edit_meeting - בעצם עושה את אותו הדבר כמו add_meeting כמעט.
עכשיו אין בקימפול ארורים/אזהרות, היא רצה כמו גברת...
אבל קשה להסביר מה הבעיה, יהיה יותר טוב אם תריצו אותה...
אבל בעיקרון, אני לא בטוח אם התוכנית מוסיפה פגישות למערך arr...
כאילו, אני מריץ את התוכנית, היא מראה לי את התפריט, אני מכניס 'a', הוא אומר Enter Date:
ואני מכניס 10\10\2004
הוא אומר Enter Time:
אני מכניס 5
הוא אומר Enter Info:
אני מכניס bla
ואז הוא מראה שוב את התפריט...
כמו שצריך...
אבל אני לא בטוח שבעצם כל הפרטים שהכנסתי באמת נכנסו למשתנים שלהם...
מבינים?
אבל כל הסיבתוכה היא בעצם במשתנה arr וi...
כאילו השימוש בהם מפוזר מאד, תסתכלו איך הגדרתי אותם, איך השתמשתי בהם בתוך התוכנית, ז"א בscanf אם כללתי & אם השתמשתי ב* וכו'...
האם אתם רואים בעיה בתוכנית?
תודה.