کمک در case 2 رنامه

-Mitra

Member
کمک در case 2 برنامه

سلام به همه دوستانم :rose:

دوستان من یه برنامه دارم( اطلاعات دانشجویان) که از جند قسمت تشکیل شده
قسمت 1 که مهم ترین فسمت و بیس اصلی بود رو نوشتم
قسمت اول ایدی و نام و نام خانوادگی را میگیره و در لیست قرار میده یه صورت مرتب شده (مثلا اگه ایدی بعدی بزرگتر بود میاد اول)

تا اینجا مشکلی ندارم

حالا میخوام کیس 2 رو بنویسم مشکل دارم

کیس 2 باید وقتی اجرا بشه
نمایش همه دانشجویان باشه
ممنون میشم کمکم کنید ( با دستورات سی پلاس پلاس مینویسم :rose:) پیشاپیش ممنون

کد قسمت اول برنامه (( من با کامپایلر TC اجرا میکنم))


کد:
#include<iostream.h>
#include<conio.h>
#define size 100
struct stu{
int id;
char name[10];
char family[30];
stu *next;};
int main(){
clrscr();
stu *t,*start=NULL,*p,*z,*g,*d;

int a,b;
char na,fa;
do{
cout<<"\n1-> sabte moshakhasate daneshjoo \n";
cout<<"2->nameieshe kole etelaat \n";
cout<<"3->namaieshe tedade daneshjooian \n";
cout<<"4->search daneshjoo ba asase id \n" ;
cout<<"5->hazfe daneshjoo \n";
cout<<"exit \n\n";
cout<<"Enter a :\n";
cin>>a;
switch(a){

case 1:
cout<<"enter ID :\n ";
cin>>b;
cout<<"enter name :\n ";
cin>>t->name;
cout<<"enter Family :\n ";
cin>>t->family;
cout<<"Submit Data\n";
t=new stu[1];
t->id=b;
if(start==NULL){
start=t;
p=start;}
else
{
z=start;
while(z!=NULL && z->id<b){
g=z;
z=z->next; }}
if(z==NULL)
{
p->next=t;
p=p->next;
p->next=NULL;
}
 else{
z=d->next;
d=g->next; }
}
}while(a!=6);
getch();
return 0;
}
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام به همه دوستانم :rose:

دوستان من یه برنامه دارم( اطلاعات دانشجویان) که از جند قسمت تشکیل شده
قسمت 1 که مهم ترین فسمت و بیس اصلی بود رو نوشتم
قسمت اول ایدی و نام و نام خانوادگی را میگیره و در لیست قرار میده یه صورت مرتب شده (مثلا اگه ایدی بعدی بزرگتر بود میاد اول)

تا اینجا مشکلی ندارم

حالا میخوام کیس 2 رو بنویسم مشکل دارم

کیس 2 باید وقتی اجرا بشه
نمایش همه دانشجویان باشه
ممنون میشم کمکم کنید ( با دستورات سی پلاس پلاس مینویسم :rose:) پیشاپیش ممنون

کد اضافه کردن عضو به لیست چند تا ایراد داره.
شرط (z == NULL) همواره بررسی میشه، حتی زمانی که عضو اول رو به لیست اضافه می کنید.
کد:
    stu *t, *start = NULL, *p, *z, *g, *d;
.
.
.
                if (z == NULL)
                {
حالا زمانی که اولین عضو اضافه میشه مقدار z چنده؟ مشخص نیست. می تونه هر مقداری باشه،
در زبان های ++C و C همیشه باید حواستون به مقدار اولیه متغیر ها باشه چون بصورت پیشفرض مقدار
مشخصی ندارند. اگر قرار است مقدار مشخصی باشند خودتان مقدارش را در ابتدای کد ثبت کنید.

چه زمانی z برابر NULL خواهد بود؟ زمانی که یا لیست خالی است یا id تمامی اعضاء از عضو جدید کوچکتر باشد.
حالا مقدار p در این شرایط چیست؟ مقدارش موقعی که عضو اول اضافه می شود نامشخص است :
کد:
p->next=t;
p=p->next;
p->next=NULL;

همچنین شما مقدار start را فقط موقع اضافه کردن عضو اول تغییر می دهید، حالا اگر عضو های بعدی از عضو اول
کوچکتر بودند و در ابتدای لیست قرار گرفتند مقدار start باید تغییر کند که نمی کند.

دستورات cin هم مشکل دارند، شما اول مقادیر رو در t -> name و t -> family درج می کنید اما تازه بعد از آن
t را ایجاد می کنید، یعنی قبل از اینکه حافظه اش تخصیص داده شود در متغیری که وجود ندارد مقدار قرار می دهید :
کد:
cout<<"enter name :\n ";
cin>>t->name;
cout<<"enter Family :\n ";
cin>>t->family;
cout<<"Submit Data\n";
t=new stu[1];

کد:
#include <iostream.h>
#include <conio.h>

#define size 100

struct stu
{
    int id;
    char name[10];
    char family[30];
    stu *next;
};

int main()
{
    clrscr();
    stu *t, *start = NULL, *p, *z, *g, *d;
    int a, b;
    char na, fa;
    do
    {
        cout << "\n1-> sabte moshakhasate daneshjoo \n";
        cout << "2->nameieshe kole etelaat \n";
        cout << "3->namaieshe tedade daneshjooian \n";
        cout << "4->search daneshjoo ba asase id \n" ;
        cout << "5->hazfe daneshjoo \n";
        cout << "exit \n\n";
        cout << "Enter a :\n";
        cin >> a;
        switch(a)
        {
            case 1:
                t = new stu[1];
                cout << "enter ID :\n ";
                cin >> b;
                t -> id = b;
                cout << "enter name :\n ";
                cin >> t -> name;
                cout << "enter family :\n ";
                cin >> t -> family;
                cout << "Submit Data\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 << "    Name = " << p -> name
                    << "    Family = " << p -> family << "\n";
                    p = p -> next;
                }
        }
    } while (a != 6);
    getch();
    return 0;
}
 

-Mitra

Member
خیلی ممنون
ببخشید من باید باز برنامه رو کسترش بدم
این بار باید یه ایدی رو بگیره و اون دانشجو رو حذف کنه من کد رو نوشتم اما نمیتونم خروجی بگیرم....ساختاری که شما مینویسی خیلی روان تر از من هست من نمیخوام از void استفاده کنم ممنون میشم کمک کنید یه کد جدید بنویسم مثل قلی که خیلی روان بود اما این کدی که نوشتم اصلا خوب نیست

کد:
void delete_student(node * start,int num)
{
    node *t;
    t=find_student(node * start,int num);
    if (t==NULL)
    {
        cout<<"no match found!!";
        return;
    }
    elseif (t==start)
    {
        start=start->next;  //it's a new start pointer to array
        return;
    }
    else
    {
        t->next=(t->next)->next;
        return;
    }
}
 
 
 
 
node * find_student(node * start,int num)
{
    //num is the student id to delete
    //start is a pointer to the first cell of your array
    node *before;
    if (start==NULL)
    {
        cout<<"list is empty\n"
        return;
    }
    if (start->id == num)
    {
        return start;
    }
    q=NULL;
     
    while (start !=NULL)
    {
        if (start->id == num)
        {
            break;
        }
        q=start;
        start=start->next;
         
    }
    if (q==NULL)
    {
        //no match found 
        return NULL
    }
    else 
        return q;
     
 
}
 

the_king

مدیرکل انجمن
خیلی ممنون
ببخشید من باید باز برنامه رو کسترش بدم
این بار باید یه ایدی رو بگیره و اون دانشجو رو حذف کنه من کد رو نوشتم اما نمیتونم خروجی بگیرم....ساختاری که شما مینویسی خیلی روان تر از من هست من نمیخوام از void استفاده کنم ممنون میشم کمک کنید یه کد جدید بنویسم مثل قلی که خیلی روان بود اما این کدی که نوشتم اصلا خوب نیست
زمانی که می خواهید عضوی رو از لیست حذف کنید دانستن موقعیت خود عضو همانقدر مهم است که دانستن عضو
قبلی اش، چون شما برای حذف کردن یک عضو باید بدانید که کدام عضو پشت سرش قرار دارد، اگر تابع جستجو شما عضو
قبلی را اعلام نکند بدرد تابع حذف کردن نمی خورد و حذف کردن عضو نیاز به جستجوی اضافی دیگری دارد.

لذا بهتر است که تابع جستجو را طوری بنویسید که هم عضو جستجو شده و هم عضو قبلی را اعلام کند تا کاربرد بیشتری
داشته باشد و در تابع حذف کردن هم قابل استفاده باشد.

یک مورد دیگر هم هست، توابع فقط می توانند متغیر هایی را خارج از بدنه خودشان تغییر دهند که یا متغیر سراسری
باشند (خارج از بدنه main تعریف شان کنید)، یا بصورت اشاره گر بهشان دسترسی دارند، اگر در هنگام نوشتن تابع
حذف کردن مقدار start رو بصورت node* بهشان ارسال کنید (دسترسی با مقدار اشاره گر) ، تابع فقط می تواند start
را بخواند و یا node اش را ویرایش کند، اما نمی تواند مقدار خود start را در main تغییر دهد، شما باید start را بصورت
دسترسی با ارجاع بفرستید یعنی اشاره گری که به اشاره گر start اشاره می کند، بصورت جفت ستاره ** node

اگر می خواهید start را بصورت ارجاع با node **start ارسال کنید در هنگام فراخوانی تابع بصورت start& بنویسید
و اگر خواستید داخل تابع مقدار start را تغییر دهید بصورت = start* بنویسید.

کد:
#include <iostream.h>
#include <conio.h>

#define size 100

struct node
{
    int id;
    char name[10];
    char family[30];
    node *next;
};

int student_count(node *start)
{
    node *p;
    int count = 0;
    p = start;
    while (p != NULL)
    {
        count++;
        p = p -> next;
    }
    return count;
}

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

void delete_student(node **start, int id)
{
    node *t, *back;
    t = find_student(*start, id, &back);
    if (t == NULL)
        return;
    if (back == NULL)
        *start = t -> next;
    else
        back -> next = t -> next;
    delete t;
}

int main()
{
    //clrscr();
    node *t, *start = NULL, *p, *z;
    int a, b;
    do
    {
        cout << "\n1-> sabte moshakhasate daneshjoo \n";
        cout << "2->nameieshe kole etelaat \n";
        cout << "3->namaieshe tedade daneshjooian \n";
        cout << "4->search daneshjoo ba asase id \n" ;
        cout << "5->hazfe daneshjoo \n";
        cout << "6->exit \n\n";
        cout << "Enter a :\n";
        cin >> a;
        switch(a)
        {
            case 1:
                t = new node[1];
                cout << "enter ID :\n ";
                cin >> b;
                t -> id = b;
                cout << "enter name :\n ";
                cin >> t -> name;
                cout << "enter family :\n ";
                cin >> t -> family;
                cout << "Submit Data\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 << "    Name = " << p -> name
                    << "    Family = " << p -> family << "\n";
                    p = p -> next;
                }
                break;
            case 3:
                cout << "Tedade daneshjooian = " << student_count(start) << "\n";
                break;
            case 4:
                cout << "enter ID :\n ";
                cin >> b;
                p = find_student(start, b, NULL);
                if (p != NULL)
                    cout << "ID = " << p -> id << "    Name = " << p -> name
                    << "    Family = " << p -> family << "\n";
                break;
            case 5:
                cout << "enter ID :\n ";
                cin >> b;
                delete_student(&start, b);
                break;
        }
    } while (a != 6);
    getch();
    return 0;
}
 

-Mitra

Member
ممنون....ببخشید منظور شما چی بود نفهمیدم
الان برنامه اجرا میشه و مثلا ایدی 100 نام مهدی نام خانوادگیی زضایی میدم
و کیس 4 رو اجرا میکنم و ایدی 100 رو میدم که حذف کنه
بعد کیس 2 رو اجرا میکنم باز ایدی 100 مهدی رضایی هنوز هست

(نمیشه از این تابع ها استفاده نکرد مثل کیس 1 و 2 از اشاره گر ها استفاده کرد)؟

مثلا به ما اینطور گفتن

برای حذف ا ابتدای لیست از این کد


کد:
start=p->next;
delete p;
از میان لیست

کد:
q=p->next;
p->next=p-next;
delete q;

از اخر لیست

کد:
delete p->next;
p->next=NULL;

اگه بشه با این ساختار درست کرد خیلی بهتره دیگه اون توابع نباشن
 
آخرین ویرایش:

the_king

مدیرکل انجمن
ممنون....ببخشید منظور شما چی بود نفهمیدم
الان برنامه اجرا میشه و مثلا ایدی 100 نام مهدی نام خانوادگیی زضایی میدم
و کیس 4 رو اجرا میکنم و ایدی 100 رو میدم که حذف کنه
بعد کیس 2 رو اجرا میکنم باز ایدی 100 مهدی رضایی هنوز هست

(نمیشه از این تابع ها استفاده نرکد مثل کیس 1 و 2 از اشاره گر ها استفاده کرد)؟
اگر از تابع استفاده نکنید طول کد حذف کردن بیشتر میشه چون برای جستجو کردن دیگه تابعی آماده نیست.

با کیس 4 چیزی حذف نمیشه، جستجو میشه :
کد:
 cout << "4->search daneshjoo ba asase id \n" ;

اون کیس 5 ئه که حذف می کنه :
کد:
 cout << "5->hazfe daneshjoo \n";
 

-Mitra

Member
بله امدم ویرایش کنم که شما انلاین بود جواب دادید
یعنی این تابع باید باشه؟؟؟ چون از تابع اماده استفاده کنم موقع کنفرانس یه سوال کنه بمونم توش دیگه....؟
اگه حذف بشه نمیشه مثلا میخواهیم یکی رو حذف کنیم
یه متغیر بزاریم به خانه بعدی اشاره کنه
و خذف کنیم و بعد ادرس ها را اپدیت کنیم ...که این تابع ها هم برداشته بشن؟؟؟؟؟
 
آخرین ویرایش:

-Mitra

Member
میشه این کد ها رو تقسیر کنی ( میفهمم چی هست اما خئد شما بگی بهتر متوجعه میشم )

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

این جا ** ستاره داره این برای چی هست؟؟ اگه یکی باشه برنامه ایا با مشکل رو به رو میشه؟


و این خط تو کیس 4

کد:
p = find_student(start, b, NULL);
 

the_king

مدیرکل انجمن
میشه این کد ها رو تقسیر کنی ( میفهمم چی هست اما خئد شما بگی بهتر متوجعه میشم )
پارامتر back برای اینه که تابع find_student عضو پشت سر عضو جستجو شده رو به ما اعلام کنه. یعنی یک پارامتر
خروجی تابع است که تابع مقدارش رو مشخص می کنه، نه پارامتر ورودی که ما مقدارش رو مشخص کنیم.
به عنوان مثال عملی فرض کنید که بجای **node back از *node back استفاده کنیم و کد داخل روتین ما
اینطوری باشه :
کد:
void my_function(node *back)
{
    back = NULL;
}
و اینطوری فراخوانی اش کنیم :
کد:
    node *test = new node[1];
    my_function(test);
    if (test == NULL)
        cout << "yes \n";
    else
        cout << "no \n";
با اجرا کردن این کد پیغام yes نشان داده می شود یا no؟ پیغام no ، چون مقدار test در روتین my_function هیچ
تغییری نمی کند. ما مقدار test را به روتین ارسال کرده ایم، نه آدرسش را، بنابر این my_function نمی تواند تغییری
روی test ایجاد کند.
به همین منظور ما از node **back استفاده می کنیم تا آدرس test را به روتین my_function ارسال کنیم، به *
های اضافه شده توجه کنید :
کد:
void my_function(node **back)
{
    *back = NULL;
}

اینبار پیغام yes نمایش داده می شود، چون روتین به آدرس test دسترسی دارد و می تواند مقدار test را تغییر دهد،
به & اضافه شده توجه کنید :
کد:
    node *test = new node[1];
    my_function(&test);
    if (test == NULL)
        cout << "yes \n";
    else
        cout << "no \n";

t موقعیت شروع جستجو رو مشخص می کند و b موقعیت عضو پشت سر t، چون عضو اول پشت سر ندارد
مقدار اولیه b برابر NULL است.
کد:
    node *t, *b;
    t = start;
    b = NULL;

جستجو تا زمانی انجام می شود که یا t به انتهای لیست برسد و یا عضو مورد نظر پیدا شود و break کنیم.
هر بار که سراغ عضو بعدی می رویم ابتدا t در b ذخیره می شود تا عضو پشت سر آن مشخص شود.
کد:
    while (t != NULL)
    {
        if (t -> id == id)
            break;
        b = t;
        t = t -> next;
    }

اگر t برابر NULL باشد یعنی عضو مورد نظر پیدا نشده و طبیعتا مقدار back هم مهم نیست. اما اگر عضو مورد نظر
پیدا شد بررسی می کنیم که فراخواننده تابع مقدار back را از ما درخواست کرده یا خیر، اگر مقدار back برابر
NULL نباشد مقدار back را مشخص می کنیم، وگرنه فراخواننده به مقدار back نیازی ندارد.
کد:
    if (t == NULL)
        cout << "ID not found.\n";
    else
        if (back != NULL)
            *back = b;
 
آخرین ویرایش:

-Mitra

Member
قسمت دوم رو فهمیدم اول رو یه کمی حرفه ای گفتید شما برنامه نویس حرفه ای هستید و کد نویس خوب
قسمت 2 ستاره ای به زبون ساده چرا /
 

the_king

مدیرکل انجمن
قسمت دوم رو فهمیدم اول رو یه کمی حرفه ای گفتید شما برنامه نویس حرفه ای هستید و کد نویس خوب
قسمت 2 ستاره ای به زبون ساده چرا /
چون با * node یک اشاره گر می سازید که به node اشاره می کند و با ** node یک اشاره گر که به
اشاره گری از نوع * node اشاره می کند. با اولی می توانید به یک node اشاره کنید یا مقدار node را عوض کنید
اما نمی توانید مقدار یک اشاره گر * node مثل start را عوض کنید. اما با دومی شما به یک اشاره گر مثل start
اشاره می کنید و می توانید هم مقدار خود start و node ای که بهش اشاره می کند را عوض کنید.

فرض کنید که یک node داریم با اسم n :
کد:
node *n = new node[1];

اگر بخواهیم مقدار id آن node را عوض کنیم می نویسیم :
کد:
n -> id = 5;

n خودش یک اشاره گر است که به آن node اشاره می کند، می توانیم علاوه بر n با اشاره گر دیگری
هم اینکار را انجام دهیم، فرضا m هم به همان node اشاره کند :
کد:
node *m = n;
m -> id = 7;

حالا اگر بخواهیم مقدار n (نه مقدار node، مقدار خود اشاره گر n) را عوض کنیم یا مستقیما اینکار را انجام می دهیم :
کد:
n = NULL;

یا بصورت غیر مستقیم یک اشاره گری تعریف می کنیم که به اشاره گر n اشاره کند :
کد:
node **x = &n;
x اشاره گری است که به یک اشاره گر اشاره می کند، با x هم می توانید مقدار n را عوض کنید و هم مقدار id
داخل node را :
کد:
(*x) -> id = 9;
کد:
*x = NULL;

محدود به یک یا دو ستاره هم نیستید، می توانید اشاره گری به اسم y بسازید که به اشاره گر x که به اشاره گر n
اشاره می کند اشاره کند :
کد:
node ***y = &x;

با استفاده از y می توانید هم مقدار x و هم مقدار n و هم مقدار id داخل node را عوض کنید.
تغییر دادن مقدار id داخل node :
کد:
(**y) -> id = 11;

تغییر دادن مقدار n :
کد:
**y = NULL;

تغییر دادن مقدار x
کد:
*y = NULL;
 

-Mitra

Member
ممنون خیلی عالی بود اینا رو نمیدونسم در کل اگه بخوام به صورت 1 ستاره ای بنویسم باید کدام قسمت رو تغیر بدم
چون استاد اینو ببینه میفهمه یه شخص حرفه ای نوشته
امکانش هست راهنمایی کنی ممنون ببخشید خیلی سوال کردم
 

the_king

مدیرکل انجمن
ممنون خیلی عالی بود اینا رو نمیدونسم در کل اگه بخوام به صورت 1 ستاره ای بنویسم باید کدام قسمت رو تغیر بدم
چون استاد اینو ببینه میفهمه یه شخص حرفه ای نوشته
امکانش هست راهنمایی کنی ممنون ببخشید خیلی سوال کردم

دو اشاره گر back و start رو بیارید قبل از main ، یعنی متغیر سراسری شوند، نه متغیر های محلی main
اینطوری همه توابع بهشون دسترسی دارند و در تعریف توابع نیازی به پارامتر های back و start نیست.

کد:
#include <iostream.h>
#include <conio.h>

#define size 100

struct node
{
    int id;
    char name[10];
    char family[30];
    node *next;
};

node *back, *start = NULL;

int student_count()
{
    node *p;
    int count = 0;
    p = start;
    while (p != NULL)
    {
        count++;
        p = p -> next;
    }
    return count;
}

node *find_student(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 << "ID not found.\n";
    else
        back = b;
    return t;
}

void delete_student(int id)
{
    node *t;
    t = find_student(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, b;
    do
    {
        cout << "\n1->sabte moshakhasate daneshjoo \n";
        cout << "2->nameieshe kole etelaat \n";
        cout << "3->namaieshe tedade daneshjooian \n";
        cout << "4->search daneshjoo ba asase id \n" ;
        cout << "5->hazfe daneshjoo \n";
        cout << "6->exit \n\n";
        cout << "Enter a :\n";
        cin >> a;
        switch(a)
        {
            case 1:
                t = new node[1];
                cout << "enter ID :\n ";
                cin >> b;
                t -> id = b;
                cout << "enter name :\n ";
                cin >> t -> name;
                cout << "enter family :\n ";
                cin >> t -> family;
                cout << "Submit Data\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 << "    Name = " << p -> name
                    << "    Family = " << p -> family << "\n";
                    p = p -> next;
                }
                break;
            case 3:
                cout << "Tedade daneshjooian = " << student_count() << "\n";
                break;
            case 4:
                cout << "enter ID :\n ";
                cin >> b;
                p = find_student(b);
                if (p != NULL)
                    cout << "ID = " << p -> id << "    Name = " << p -> name
                    << "    Family = " << p -> family << "\n";
                break;
            case 5:
                cout << "enter ID :\n ";
                cin >> b;
                delete_student(b);
                break;
        }
    } while (a != 6);
    getch();
    return 0;
}
 

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

بالا