السلام عليكم ورحمة الله و بركاته
ملاحظة : الكود قمت بكتابته في الونيكس لذلك ممكن تكون هناك مشاكل لتشغيله على الويندوز و هذا عائد لما ندرس به
كنت قد طرحت سؤالا سابقا عن منهجية التفكير لكتابة برنامج لانشاء فريق كرة قدم باستخدام القوائم و كما هو متوقع فقد وجدت الاجابات الوافية
في النهاية تمكنت من كتابة الكود الخاص بي و هذا خلال الشهر الفائت و قد كان متعبا بالنسبة لمبتدئة التقت بالقوائم لأول مرة
لكن هناك بعض الحالات الخاصة التي لم اتمكن من معالجتها لأنني لم اعرف كيفية التعامل مع الدالتين isalpha و isdigit و كيف اوظفهما و كلما حاولت ذلك أقع في الأمر المزعج حلقة لا منتهية و البرنامج يعلق لذلك لم أوظفهما
ما علينا، عدد أسطر الكود هو 328 أعلم أنه كثير لكن هذا ما أسعفتني به أفكاري
فكرة الكود تعتمد على أن يقوم المستعمل بادخال معلومات 4 لاعبين وضعياتهم محددة مسبقا و هذا يحدث ان اختار الخيار الأول و لكن ان قام من اول مرة باختيار الخيارات 2.....6 فان البرنامج سيطبع له رسالة القائمة فارغة و فيما يخص الخيار 7 فهو تفريغ القائمة و انهاء البرنامج حسنا سأترككم مع الكود الخاص بي
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct joueur
{
char n[20],p[20];
char ps[2];
int pr;
struct joueur *ptrn;
}J;
//**************la creation****************
J *init()
{
printf("vous allez entrer 4 joueur gardien(G), deffenseur(D), melieu terain(M) et attaquant(A)\n");
J *tete,*P,*j1,*j2,*j3,*j4;
int i;
tete=NULL;
j1=(J*)malloc(sizeof(J));
printf("le nom de gardien 1 :");
scanf("%s",(j1->n));
printf("le nom de f :");
scanf("%s",&(j1->p));
getchar();
do{
printf("entrer G pour la position :");
scanf("%s",(j1->ps));
getchar();
}while((strcmp((j1->ps),"G")));
printf("la valeur :");
scanf("%d",&(j1->pr));
printf("--------------------------\n");
(j1->ptrn)=NULL;
if(tete!=NULL)
{
P->ptrn=j1;
}
else
{
tete=j1;
}
P=j1;
j2=(J*)malloc(sizeof(J));
printf("le nom de deffenseur 1 :");
scanf("%s",&(j2->n));
printf("le nom de f :");
scanf("%s",&(j2->p));
getchar();
do{
printf("entrer D pour la position :");
scanf("%s",&(j2->ps));
getchar();
}while((strcmp((j2->ps),"D")));
printf("la valeur :");
scanf("%d",&(j2->pr));
printf("--------------------------\n");
(j2->ptrn)=NULL;
if(tete!=NULL)
{
P->ptrn=j2;
}
else
{
tete=j2;
}
P=j2;
j3=(J*)malloc(sizeof(J));
printf("le nom de milieu tirain 1 :");
scanf("%s",&(j3->n));
printf("le nom de f :");
scanf("%s",&(j3->p));
getchar();
do
{printf("entrer M pour la position :");
scanf("%s",&(j3->ps));
getchar();}while((strcmp((j3->ps),"M")));
printf("la valeur :");
scanf("%d",&(j3->pr));
printf("--------------------------\n");
(j3->ptrn)=NULL;
if(tete!=NULL)
{
P->ptrn=j3;
}
else
{
tete=j3;
}
P=j3;
j4=(J*)malloc(sizeof(J));
printf("le nom d'atakant 1 :");
scanf("%s",&(j4->n));
printf("le nom de f :");
scanf("%s",&(j4->p));
getchar();
do{printf("entrer A pour la position :");
scanf("%s",&(j4->ps));
getchar();}while((strcmp((j4->ps),"A")));
printf("la valeur :");
scanf("%d",&(j4->pr));
printf("--------------------------\n");
(j4->ptrn)=NULL;
if(tete!=NULL)
{
P->ptrn=j4;
}
else
{
tete=j4;
}
P=j4;
return tete;
}
//****************affichage***************
void aff(J *tete)
{ J *P;
P=tete;
if(!tete)
printf("la liste n'existe pas\n");
else
{
while (P!=NULL)
{
printf("-> %s\n",(P->n));
printf("-> %s\n",(P->p));
printf("-> %s\n",(P->ps));
printf("-> %d\n",(P->pr));
printf("------------------\n");
P=P->ptrn;
}
}
}
//***************vider la liste*****************
J *vider(J *tete)
{
tete=NULL;
printf("la liste est vide\n");
printf("-------------------------------------\n\n");
printf("-------------------------------------\n");
printf("merci bcp\n");
return tete;
}
//*******************la supression d'un element**************
J *supr_par_prenom(J *tete)
{
J *Prec,*P;
char Jprenom[20],position[2];
int trouv=1;
printf("entrer le nom de f : ");
scanf("%s",&Jprenom);
printf("entrer la position : ");
scanf("%s",&position);
P=tete;
while(trouv==1 && P!=NULL)
{
if(strcmp((P->p),Jprenom)==0 && strcmp((P->ps),position)==0)
{
trouv=0;
}
else
{
Prec=P;
P=P->ptrn;
}
}
if(trouv==1)
{
printf("ce joueur n'existe pas\n");
}
else
{
if(P==tete)
{
tete=P->ptrn;
}
else
{
Prec->ptrn=P->ptrn;
}
free(P);
}
return (tete);
}
//**************la recherche par nom de f*********************
void recherch_par_nom(J *tete)
{
char Jrnom[20],Jposition[2];
J *P;
int nbr;
if(!tete)
printf("la liste n'existe pas\n");
else
{P=tete;
nbr=0;
printf("entrer le nom de f de ce joueur : ");
scanf("%s",&Jrnom);
printf("entrer la position de ce joueur : ");
scanf("%s",&Jposition);
getchar();
while(P!=NULL)
{
if(((strcmp((P->p),Jrnom))==0) && ((strcmp(Jposition,(P->ps)))==0))
{
printf("-> %s\n",(P->n));
printf("-> %s\n",(P->p));
printf("-> %s\n",(P->ps));
printf("-> %d\n",(P->pr));
nbr=nbr+1;
}
P=P->ptrn;
}
if(nbr==0)
{
printf("ce joueur n'existe pas\n");
}
}}
//**************la recherche des elemenents inferieur ou egale un valeur***************
void recherch_par_valeur(J *tete)
{
J *P;
int valeur,nbr;
if(!tete)
printf("la liste n'existe pas\n");
else
{
P=tete;nbr=0;
printf("entrer la valeur de ce joueur : ");
scanf("%d",&valeur);
while (P!=NULL)
{
if((P->pr)<=valeur)
{
printf("-> %s\n",(P->n));
printf("-> %s\n",(P->p));
printf("-> %s\n",(P->ps));
printf("-> %d\n",(P->pr));
printf("--------------\n");
nbr=nbr+1;
}
P=P->ptrn;
}
if(nbr==0)
{
printf("cette valeur n'existe pas\n");
}
}
}
//***************l'insertion d'un element******************
J *insert_un_joueur(J *tete)
{
J *nvj,*P;
char Jinfo_n[20],Jinfo_p[20],Jinfo_ps[2];
int trouv,Jinfo_pr;
printf("le nom : ");
scanf("%s",&(Jinfo_n));
printf("le nom de f : ");
scanf("%s",&(Jinfo_p));
printf("la position : ");
scanf("%s",&(Jinfo_ps));
printf("la valeur : ");
scanf("%d",&(Jinfo_pr));
P=tete;
trouv=1;
while(P!=NULL && trouv==1)
{
if(strcmp((P->ps),(Jinfo_ps))==0)
{
trouv=0;
}
else
{
P=P->ptrn;
}
}
if(trouv==1)
{
printf("ce joueur ne peut pas inserer, modifier la position SVP\n");
}
else
{
nvj=(J*)malloc(sizeof(J));
memcpy(nvj->n,Jinfo_n,sizeof(Jinfo_n));
memcpy(nvj->p,Jinfo_p,sizeof(Jinfo_p));
memcpy(nvj->ps,Jinfo_ps,sizeof(Jinfo_ps));
nvj->pr=Jinfo_pr;
nvj->ptrn=P->ptrn;
P->ptrn=nvj;
}
return tete;
}
main()
{
int i,valeur,ter=1,c;
J *JOUEUR,*Jtete;
JOUEUR=NULL;
printf("ce programme pour creer votre equipe et vous pouvez modefier les joueurs\n");
printf("entrer votre commonde SVP :\n1-la creation de votre equipe\n2-l'insertion un autre joueur\n3-l'affichage de votre equipe\n4-la recherche par le nom\n5-la recherche par valeur\n6-la supression par le nom\n7-veder la liste et quitter le programme\n");
do
{
printf("votre commonde :");
scanf("%d",&c);
switch(c)
{
case 1:JOUEUR=init();break;
case 2:
if(JOUEUR==NULL)
printf("la liste n'existe pas\n");
else
JOUEUR=insert_un_joueur(JOUEUR);break;
case 3:aff(JOUEUR);break;
case 4:recherch_par_nom(JOUEUR);break;
case 5:recherch_par_valeur(JOUEUR);break;
case 6:
if(JOUEUR==NULL)
printf("la liste n'existe pas\n");
else
JOUEUR=supr_par_prenom(JOUEUR);break;
case 7:
if(JOUEUR==NULL)
printf("la liste n'existe pas\n");
else
JOUEUR=vider(JOUEUR);printf("au revoir\n");return 0;break;
default:printf("ce choix n'existe pas\n");break;
}
printf("1 pour une autre commonde deferant a 1 pour termener :");
scanf("%d",&ter);
}while(ter==1);
}أرجو المعذرة لأنني لم أشرح الكود الآن و لكنني سأحاول ذلك في وقت لاحق و أكيد ان كان هناك أي استفسار أو أي خطأ أو أي حالات خاصة اخرى لم أوظفها فأفيدوني يا أساتذتي الكرام فانما أنا سائرة في الطريق كمبتدئة
لكم جزيل الشكر و الله ولي الأجر و الثواب