PDA

View Full Version : سوال: نوشتن case 3 برنامه



vB.N3T
یک شنبه 06 آذر 1390, 12:15 عصر
سلام دوستان خوبید
من یک برنامه نوشتم قسمت 1 و 2 کامل هست
در مورد اطلاعات یک دانشجو را میگیره و در لیست قرار میده
ایدی( شماره دانشجویی) نام و نام خانوادگی... این کیس 1 برنامه بود (( به ترتیب ایدی مرتب وارد لیست میشه ))

کیس 2 هم اطلاعات همه دانشجویان را نمایش میده

حالا میخواهم کیس 3 رو بنویسم مشکل دارم
میخوام یه شماره دانشجویی بگیره و اون دانشجو رو حذف کنه
ممنون میشم کمک کنید


#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;
}

soorena
یک شنبه 06 آذر 1390, 14:09 عصر
برای حذف يه دانشجو اول بايد ايدی اون رو از ورودی بگيری و از اول ليست شروع به پيميش کنی و هر جا که ايدی ها تطابق داشت اون عنصر رو از ارايه حذف کنی و لينک ها رو اصلاح کنی:


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;


}

vB.N3T
یک شنبه 06 آذر 1390, 17:22 عصر
اگه بخوام تعداد دانشجوا رو بگیرم باید... همه ایدی ها رو بریزم تو یه متغیر؟

مسعود اقدسی فام
سه شنبه 08 آذر 1390, 14:50 عصر
اگه بخوام تعداد دانشجوا رو بگیرم باید... همه ایدی ها رو بریزم تو یه متغیر؟
باید یه متغیر با مقدار اولیه صفر تعریف کنی. هر بار که دانشجویی اضافه می‌شه یه واحد اضافه، و وقتی حذف می‌شه یه واحد کم کنی. در این حالت خالی بودن لیست هم از صفر بودن عدد مشخص می‌شه.