کمک در نوشتن case 4 برنامه

-Mitra

Member
سلام دوستان این یک برنامه مدیریت کتاب هست
که کیس 4 قرار یک مولف رو بگیره و اطلاعات رو نمایش بده
تابع شو نوشتم ولی یک ایدی میگیره و اطلاعات رو نمایش میده
اما من میخوام یک مولف رو بگیره و اطلاعات رو نمایش بده ممنون میشم کمکم کنید

کد:
#include <iostream.h>
#include <conio.h>
#define size 100

struct node
{
    int id;
    char moalef[30];
    int mojodi;
    
    node *next;
};

node *back, *start = NULL;




node *find_book(int id)
{
    node *t, *b;
    t = start;
    b = NULL;
    while (t != NULL)
    {
	if (t -> id==id)
            break;
        b = t;
        t = t -> next;
    }
    if (t == NULL)
        cout << " not found.\n";
    else
        back = b;
    return t;
}

void delete_book(int id)
{
    node *t;
    t = find_book(id);
    if (t == NULL)
        return;
    if (back == NULL)
        start = t -> next;
    else
        back -> next = t -> next;
    delete t;
}


int main()
{
    clrscr();
    node *t, *p, *z;
    int a;
    int b;
    do
    {
	cout<<"__________________________________________\n";
	cout << "\n1->Rejistr BOOK \n";
	cout << "2->Show All Data (ISBN)  \n";
	cout << "3->ENTER ISB \n";
	cout << "4->search  (MOlef) \n" ;
	cout << "5->Delete \n";
	cout << "6->yek adad dariaft \n\n";
        cout << "7->EXIT \n\n";

	cout<<"_________________________________________\n";
	cout<<"\n";

	cout << "Enter 1,2,3,4,5,6,7 :\n";
        cin >> a;
	switch(a)
        {
            case 1:
                t = new node[1];
		cout << "Enter ID :\n ";
		cout<<"\n";
		cin >> t->id;
		cout<<"\n";
		cout << "Enter Moalef :\n ";
		cout<<"\n";
		cin >> t -> moalef;
		 cout<<"\n";
		cout << "Enter mojodi:\n ";
		cout<<"\n";
		cin >> t -> mojodi;
		   cout<<"\n";
		cout << "Submit Data\n";
		cout<<"\n";
			cout<"--------------------\n";
			 cout<<"\n";
		z = start;
		p = NULL;
                while (z != NULL && z -> id < b)
                {
                    p = z;
                    z = z -> next;
                }
                if (p == NULL)
                {
                    t -> next = start;
                    start = t;
                }
                else
                {
                    t -> next = p -> next;
                    p -> next = t;
                }
                break;
            case 2:
                if (start == NULL)
                    cout << "List is empty.\n";
                p = start;
                while (p != NULL)
                {
                    cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
                    << "    Mojodi= " << p -> mojodi<< "\n";
                    p = p -> next;
                }
		break;
	    case 3:
		cout << "enter id :\n ";
		cin >> b;
		p = find_book(b);
		if (p != NULL)
		    cout << "ID = " << p -> id << "    moalef= " << p -> moalef
		    << "    mojodi= " << p -> mojodi<< "\n";
		break;

	    case 4:
		cout << "enter id :\n ";
		cin >> b;
		p = find_book(b);
		if (p != NULL)
		    cout << "ID = " << p -> id << "    moalef= " << p -> moalef
		    << "    mojodi= " << p -> mojodi<< "\n";
		break;
            case 5:
                cout << "enter ID :\n ";
                cin >> b;
		delete_book(b);
		cout<<"Delete ="<<b<<"\n";
                break;
	}
    } while (a != 7);
    cout<<"END Program";
    getch();
    return 0;
}
 

the_king

مدیرکل انجمن
1) یک کاراکتر > بعد از cout سوم از قلم افتاده :
کد:
		cout << "Submit Data\n";
		cout<<"\n";
			cout<"--------------------\n";
			 cout<<"\n";

2) برای جستجوی رشته به strcmp نیاز خواهید داشت، کتابخانه string.h را include کنید که strcmp در آن تعریف شده :
کد:
#include <iostream.h>
#include <conio.h>
[B][COLOR="Blue"]#include <string.h>[/COLOR][/B]

3) تابع find_book ای که دارید بر اساس id جستجو می کند، به آن دست نزنید، اما یک تابع دیگر هم با همان اسم
بسازید و به کد اضافه کنید که بر اساس نام مولف جستجو کند. ایرادی ندارد که دو تابع اسم یکسانی دارند :
کد:
node *find_book(char* moalef)
{
    node *t, *b;
    t = start;
    b = NULL;
    while (t != NULL)
    {
	if (strcmp(t -> moalef, moalef) == 0)
            break;
        b = t;
        t = t -> next;
    }
    if (t == NULL)
        cout << " not found.\n";
    else
        back = b;
    return t;
}

4) به تابع main یک متغیر رشته ای اضافه کنید که نام مولف را در آن بخوانید :
کد:
int main()
{
    clrscr();
    node *t, *p, *z;
    int a;
    int b;
[B][COLOR="Blue"]    char c[30];[/COLOR][/B]
    do
    {

5) کد case 4 را تغییر دهید :
کد:
	    case 4:
[B][COLOR="Blue"]		cout << "enter moalef :\n ";
		cin >> c;
		p = find_book(c);[/COLOR][/B]
		if (p != NULL)
 

-Mitra

Member
استاد the_king ممنون خیلی ممنون

استاد میشه یه کمک دیگه
اگر بخواهیم یه case 5 بنویسیم که یک عدد دریافت کند و کتاب های با موجودی کمتر از اون عدد رو نشون بده
ممنون
 

the_king

مدیرکل انجمن
استاد the_king ممنون خیلی ممنون

استاد میشه یه کمک دیگه
اگر بخواهیم یه case 5 بنویسیم که یک عدد دریافت کند و کتاب های با موجودی کمتر از اون عدد رو نشون بده
ممنون

شبیه case 2 ئه، با این تفاوت که برای نمایش عنصر p در حلقه while شرط قرار می دهید :
کد:
            case 6:
[B][COLOR="Blue"]                cout << "enter tedaad :\n ";
                cin >> b;[/COLOR][/B]
                if (start == NULL)
                    cout << "List is empty.\n";
                p = start;
                while (p != NULL)
                {
[B][COLOR="Blue"]                    if (p -> mojodi < b)
                    {[/COLOR][/B]
                        cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
                        << "    Mojodi= " << p -> mojodi<< "\n";
[B][COLOR="Blue"]                    }[/COLOR][/B]
                    p = p -> next;
                }
                break;
 

-Mitra

Member
کیس 6 اضافه کردم 2 تا خطا میده هر چی نگاه کردم خطا از کجا هست متوجه نشدم

کد:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#define size 100

struct node
{
    int id;
    char moalef[30];
    int mojodi;
    
    node *next;
};

node *back, *start = NULL;


node *find (char* moalef)
{
    node *t, *b;
    t = start;
    b = NULL;
    while (t != NULL)
    {
	if (strcmp(t -> moalef, moalef) == 0)
            break;
        b = t;
        t = t -> next;
    }
    if (t == NULL)
        cout << " not found.\n";
    else
        back = b;
    return t;
}

node *find_book(int id)
{
    node *t, *b;
    t = start;
    b = NULL;
    while (t != NULL)
    {
	if (t -> id==id)
            break;
        b = t;
        t = t -> next;
    }
    if (t == NULL)
        cout << " not found.\n";
    else
        back = b;
    return t;
}

void delete_book(int id)
{
    node *t;
    t = find_book(id);
    if (t == NULL)
        return;
    if (back == NULL)
        start = t -> next;
    else
        back -> next = t -> next;
    delete t;
}


int main()
{
    clrscr();
    node *t, *p, *z;
    int a;
    int b;
    char c [30];
    do
    {
	cout<<"__________________________________________\n";
	cout << "\n1->Rejistr BOOK \n";
	cout << "2->Show All Data (ISBN)  \n";
	cout << "3->ENTER ISB \n";
	cout << "4->search  (MOlef) \n" ;
	cout << "5->Delete \n";
	cout << "6->yek adad dariaft \n\n";
        cout << "7->EXIT \n\n";

	cout<<"_________________________________________\n";
	cout<<"\n";

	cout << "Enter 1,2,3,4,5,6,7 :\n";
        cin >> a;
	switch(a)
        {
            case 1:
                t = new node[1];
		cout << "Enter ID :\n ";
		cout<<"\n";
		cin >> t->id;
		cout<<"\n";
		cout << "Enter Moalef :\n ";
		cout<<"\n";
		cin >> t -> moalef;
		 cout<<"\n";
		cout << "Enter mojodi:\n ";
		cout<<"\n";
		cin >> t -> mojodi;
		   cout<<"\n";
		cout << "Submit Data\n";
		cout<<"\n";
			cout<<"--------------------\n";
			 cout<<"\n";
		z = start;
		p = NULL;
                while (z != NULL && z -> id < b)
                {
                    p = z;
                    z = z -> next;
                }
                if (p == NULL)
                {
                    t -> next = start;
                    start = t;
                }
                else
                {
                    t -> next = p -> next;
                    p -> next = t;
                }
                break;
            case 2:
                if (start == NULL)
                    cout << "List is empty.\n";
                p = start;
                while (p != NULL)
                {
                    cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
                    << "    Mojodi= " << p -> mojodi<< "\n";
                    p = p -> next;
                }
		break;
	    case 3:
		cout << "enter id :\n ";
		cin >> b;
		p = find_book(b);
		if (p != NULL)
		    cout << "ID = " << p -> id << "    moalef= " << p -> moalef
		    << "    mojodi= " << p -> mojodi<< "\n";
		break;

	    case 4:
		cout << "enter moalef :\n ";
		cin >> c;
		p = find(c);
		if (p != NULL)

   cout << "ID = " << p -> id << "    moalef= " << p -> moalef
		    << "    mojodi= " << p -> mojodi<< "\n";

		break;

            case 5:
                cout << "enter ID :\n ";
                cin >> b;
		delete_book(b);
		cout<<"Delete ="<<b<<"\n";
		break;}

		case 6:
		cout << "enter tedaad :\n ";
		cin >> b;
	      if (start == NULL)

		   cout << "List is empty.\n";
		p = start;
		while (p != NULL)
		{
		   if (p -> mojodi < b)
                    {
		       cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
			<< "    Mojodi= " << p -> mojodi<< "\n";
		    }
		   p = p -> next;

		     break;
		}
    } while (a != 7);
    cout<<"END Program";
    getch();
    return 0;
}
 

the_king

مدیرکل انجمن
کیس 6 اضافه کردم 2 تا خطا میده هر چی نگاه کردم خطا از کجا هست متوجه نشدم

چون مقدار tab و فاصله رو در سطر ها رعایت نمی کنید در تشخیص دادن ارتباط براکت ها اشتباه میشه.
براکت { مربوط به switch رو بد جایی بسته اید. قبل از اینکه case 6 شروع بشه بستید اش :
کد:
		cout<<"Delete ="<<b<<"\n";
		break;[B][COLOR="Red"][SIZE="4"]}[/SIZE][/COLOR][/B]

		case 6:
سر همین براکت حلقه while اون case 6 رو هم درست ننوشتید، break رو گذاشتید داخل حلقه while ،
نمی گذاره حلقه while تکرار بشه، در هر حالتی از حلقه می آید بیرون. اون break مربوط به switch است،
باید بعد از حلقه باشد. break درست بعد از if قرار گرفته :
کد:
		while (p != NULL)
		{
		   if (p -> mojodi < b)
                    {
		       cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
			<< "    Mojodi= " << p -> mojodi<< "\n";
		    }
[B][COLOR="Red"]		   p = p -> next;[/COLOR][/B]
            break;
		}

برای رفع کردن مشکل اون { رو که قبل از case 6 است بر دارید بیاورید قبل از break آخر case 6، چون break باید
بعد از حلقه while باشه، نه داخل حلقه :
کد:
                << "    Mojodi= " << p -> mojodi<< "\n";
                }
                p = p -> next;
[B][COLOR="Blue"][SIZE="4"]            }[/SIZE][/COLOR][/B]
            break;
        }
    } while (a != 7);
 
آخرین ویرایش:

-Mitra

Member
ببخشید خطا رو رفع کردم اما کیس 6کار نمیکنه

کد:
#include <iostream.h>
#include <conio.h>
#include <string.h>
#define size 100

struct node
{
    int id;
    char moalef[30];
    int mojodi;
    
    node *next;
};

node *back, *start = NULL;


node *find (char* moalef)
{
    node *t, *b;
    t = start;
    b = NULL;
    while (t != NULL)
    {
	if (strcmp(t -> moalef, moalef) == 0)
            break;
        b = t;
        t = t -> next;
    }
    if (t == NULL)
        cout << " not found.\n";
    else
        back = b;
    return t;
}

node *find_book(int id)
{
    node *t, *b;
    t = start;
    b = NULL;
    while (t != NULL)
    {
	if (t -> id==id)
            break;
        b = t;
        t = t -> next;
    }
    if (t == NULL)
        cout << " not found.\n";
    else
        back = b;
    return t;
}

void delete_book(int id)
{
    node *t;
    t = find_book(id);
    if (t == NULL)
        return;
    if (back == NULL)
        start = t -> next;
    else
        back -> next = t -> next;
    delete t;
}


int main()
{
    clrscr();
    node *t, *p, *z;
    int a;
    int b;
    char c [30];
    do
    {
	cout<<"__________________________________________\n";
	cout << "\n1->Rejistr BOOK \n";
	cout << "2->Show All Data (ISBN)  \n";
	cout << "3->ENTER ISB \n";
	cout << "4->search  (MOlef) \n" ;
	cout << "5->Delete \n";
	cout << "6->yek adad dariaft \n\n";
        cout << "7->EXIT \n\n";

	cout<<"_________________________________________\n";
	cout<<"\n";

	cout << "Enter 1,2,3,4,5,6,7 :\n";
        cin >> a;
	switch(a)
        {
            case 1:
                t = new node[1];
		cout << "Enter ID :\n ";
		cout<<"\n";
		cin >> t->id;
		cout<<"\n";
		cout << "Enter Moalef :\n ";
		cout<<"\n";
		cin >> t -> moalef;
		 cout<<"\n";
		cout << "Enter mojodi:\n ";
		cout<<"\n";
		cin >> t -> mojodi;
		   cout<<"\n";
		cout << "Submit Data\n";
		cout<<"\n";
			cout<<"--------------------\n";
			 cout<<"\n";
		z = start;
		p = NULL;
                while (z != NULL && z -> id < b)
                {
                    p = z;
                    z = z -> next;
                }
                if (p == NULL)
                {
                    t -> next = start;
                    start = t;
                }
                else
                {
                    t -> next = p -> next;
                    p -> next = t;
                }
                break;
            case 2:
                if (start == NULL)
                    cout << "List is empty.\n";
                p = start;
                while (p != NULL)
                {
                    cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
                    << "    Mojodi= " << p -> mojodi<< "\n";
                    p = p -> next;
                }
		break;
	    case 3:
		cout << "enter id :\n ";
		cin >> b;
		p = find_book(b);
		if (p != NULL)
		    cout << "ID = " << p -> id << "    moalef= " << p -> moalef
		    << "    mojodi= " << p -> mojodi<< "\n";
		break;

	    case 4:
		cout << "enter moalef :\n ";
		cin >> c;
		p = find(c);
		if (p != NULL)
   cout << "ID = " << p -> id << "    moalef= " << p -> moalef
		    << "    mojodi= " << p -> mojodi<< "\n";
		break;

            case 5:
                cout << "enter ID :\n ";
                cin >> b;
		delete_book(b);
		cout<<"Delete ="<<b<<"\n";
                break;
	
              case 6:
		cout << "enter tedaad :\n ";
		cin >> b;
	      if (start == NULL)
                          {

		   cout << "List is empty.\n";
		p = start;
		while (p != NULL)
		{
		   if (p -> mojodi < b)
                    {
		       cout << "ID = " << p -> id << "    Moalef= " << p -> moalef
			<< "    Mojodi= " << p -> mojodi<< "\n";
		    }
		   p = p -> next;

		     break;
		}

     
    } while (a != 7);
    cout<<"END Program";
    getch();
    return 0;
}
 

the_king

مدیرکل انجمن
ببخشید خطا رو رفع کردم اما کیس 6کار نمیکنه
نبایدم درست کار کنه، چون اون مورد break رو که توضیح دادم رفع نکردید.

این کد شما است :
کد:
			<< "    Mojodi= " << p -> mojodi<< "\n";
		    }
		   p = p -> next;

		     break;
		}

     
    } while (a != 7);

و این کدی که من نوشتم :
کد:
                << "    Mojodi= " << p -> mojodi<< "\n";
                }
                p = p -> next;
[B][COLOR="Blue"][SIZE="4"]            }[/SIZE][/COLOR][/B]
            break;
        }
    } while (a != 7);

در کد شما بین ;p = p -> next و ;break براکتی هست؟ نیست، یعنی break رفته داخل حلقه while
در حالی که اون break رو برای switch نوشته ایم نه while

حالا ببینید اون براکت رو که برداشتید کجا بردید. این کد رو شما نوشتید :
کد:
	      if (start == NULL)
                          {

		   cout << "List is empty.\n";
		p = start;

و این کدی که من نوشتم :
کد:
                if (start == NULL)
                    cout << "List is empty.\n";
                p = start;

براکتی که ربطی به NULL بودن start نداشته رو به if اش اضافه کرده اید.
 

جدیدترین ارسال ها

بالا