nevoie ajutor proiect facultate


  1. #1
    Junior crazybay's Avatar crazybay a avut ceva conflicte in trecut
    Data de inscriere
    27-06-2008
    Locaţie
    craiova
    Varsta
    37
    Sex
    M
    Mesaje
    75
    Mesaje bazar
    162
    Putere Reputatie
    0
    Reputatie
    -10
    Puncte CF
    14.5

    nevoie ajutor proiect facultate

    Am un proiect luat din alte surse si nu merge corect..imi da mereu eroare in timpul rularii

    Cine poate sa ma ajute..va rog frumos


    Cod:
    // Orarul unei facultati
    
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<ctype.h>
    
    typedef struct {char ziua[10];
    	       }zile_lucratoare;
    zile_lucratoare zile[5];
    
    
    // definirea datelor
    typedef struct {char ziua[10];
    		int nr_ordine;/* daca ziua=Luni =>nr_ordine=1,daca ziua=Marti
    				 => nr_ordine=2 ,...   */
    		int ora_inceput;
    		int ora_sfarsit;
    		char materie[20];
    		char tip_materie[15];    // curs,seminar,laborator
    
    		int nrore;// numarul de ore care se vor efectua in ziua
    			  // respectiva,la materia respectiva(tipul de materie)
    		char nume[15];
    		char prenume[15];
    	       }date;
    
    // definirea listei
    typedef struct noduri {date inf;
    		       noduri *urm;
    		      }nod;
    nod *prim;
    
    // definirea fisierului
    FILE *f1,*f2;
    date inf;
    int ok=0; /* este folosit pt. functia "adaugare"(daca nu s-a adaugat el. la
    	      lista,inseamna ca datele au fost introduse gresit)   */
    
    void adauga_la_sfarsitul_listei(nod *adaug)
    {nod *temp2;
     temp2=prim;
     while(temp2->urm!=NULL)
           temp2=temp2->urm;
     temp2->urm=adaug;
     adaug->urm=NULL;
    }
    
    void atribuire_nr_ordine(nod *temp3)
    {if(strcmp(temp3->inf.ziua,"Luni")==0 || strcmp(temp3->inf.ziua,"luni")==0)
       temp3->inf.nr_ordine=1;
     else if(strcmp(temp3->inf.ziua,"Marti")==0 || strcmp(temp3->inf.ziua,"marti")==0)
    	temp3->inf.nr_ordine=2;
          else if(strcmp(temp3->inf.ziua,"Miercuri")==0 || strcmp(temp3->inf.ziua,"miercuri")==0)
    	     temp3->inf.nr_ordine=3;
    	   else if(strcmp(temp3->inf.ziua,"Joi")==0 || strcmp(temp3->inf.ziua,"joi")==0)
    		  temp3->inf.nr_ordine=4;
    		else if(strcmp(temp3->inf.ziua,"Vineri")==0 || strcmp(temp3->inf.ziua,"vineri")==0)
    		       temp3->inf.nr_ordine=5;
    }
    
    void intr_date_din_fisier_text_in_lista()
    {FILE *ft;
     char sir[200];
     char ch;
     char alege;
     int i,ok=1;
     nod *temp;
    
     ft=fopen("date_int.txt","rt");
     ch=fgetc(ft);
     if(prim!=NULL)    // daca lista a fost creata anterior
       {printf("Lista a fost creata,vreti sa introduceti noile date peste vechile date(d,n) ?\n");
        alege=getch();
        if(alege=='d' || alege=='D')
          {while(!feof(ft)) {i=0;
    			 strcpy(sir,"");
    			 while(ch!='\n') {sir[i++]=ch;
    					  ch=fgetc(ft);
    					 }
    			 sir[i]='\0';
    
    			 if(ok==1) {prim=new nod;
    				    sscanf(sir,"%s %s %d %s %s %d %d\n",
    					   prim->inf.materie,prim->inf.tip_materie,
    					   &prim->inf.nrore,
    					   prim->inf.nume,prim->inf.prenume,
    					   &prim->inf.ora_inceput,&prim->inf.ora_sfarsit);
    				    prim->urm=NULL;
    				    ok--;
    				   }
    			 else {temp=new nod;
    			       sscanf(sir,"%s %s %d %s %s %d %d\n",
    				      temp->inf.materie,temp->inf.tip_materie,
    				      &temp->inf.nrore,
    				      temp->inf.nume,temp->inf.prenume,
    				      &temp->inf.ora_inceput,&temp->inf.ora_sfarsit);
    			       adauga_la_sfarsitul_listei(temp);
    			      }
    			 ch=fgetc(ft);
    			}
           printf("Noile date au fost introduse.\n");
          }
        else printf("Au ramas vechile date.\n");
       }
     else     // altfel(daca lista este vida)
       {while(!feof(ft)) {i=0;
    		      strcpy(sir,"");
    		      while(ch!='\n') {sir[i++]=ch;
    				       ch=fgetc(ft);
    				      }
    		      sir[i]='\0';
    
    		      if(ok==1) {prim=new nod;
    				 sscanf(sir,"%s %s %d %s %s %d %d\n",
    					prim->inf.materie,prim->inf.tip_materie,
    					&prim->inf.nrore,
    					prim->inf.nume,prim->inf.prenume,
    					&prim->inf.ora_inceput,&prim->inf.ora_sfarsit);
    				 prim->urm=NULL;
    				 ok--;
    				}
    		      else {temp=new nod;
    			    sscanf(sir,"%s %s %d %s %s %d %d\n",
    					temp->inf.materie,temp->inf.tip_materie,
    					&temp->inf.nrore,
    					temp->inf.nume,temp->inf.prenume,
    					&temp->inf.ora_inceput,&temp->inf.ora_sfarsit);
    
    			    adauga_la_sfarsitul_listei(temp);
    			   }
    		      ch=fgetc(ft);
    		     }
        printf("Datele au fost introduse.\n");
       }
    
     fclose(ft);
     getch();
    }
    
    void intr_orarul_din_fisier_binar_in_lista()
    {nod *temp,*temp1;
     int ok=0;
     f1=fopen("date.dat","rb");
     fread(&inf,sizeof(date),1,f1);
     prim=new nod;      // adaugam in lista prima informatie din fisierul binar
     prim->inf=inf;
     prim->urm=NULL;
    
     fread(&inf,sizeof(date),1,f1);  // adaugam la sf. listei si celelalte inf.
     while(!feof(f1)) {temp=new nod;
    		   temp->inf=inf;
    		   temp->urm=NULL;    // sau adauga_la_sfarsitul_listei(temp)
    
    		   temp1=prim;
    		   while(temp1->urm!=NULL)
    			temp1=temp1->urm;
    		   temp1->urm=temp;        // pana aici
    
    		   fread(&inf,sizeof(date),1,f1);
    		   ok++;   // incrementand variabila inseamna ca fisierul nu este vid
    		  }
     if(ok) {
    	 printf("Ultimul orar realizat a fost introdus in lista.");
    	 getch();
    	}
    }
    
    void intr_orarul_din_fisier_text_in_lista()
    {FILE *ft;
     char *sir;
     char ch;
     char alege;
     int i,ok=1;
     nod *temp;
    
     
     ft=fopen("orar_int.txt","rt");
     ch=fgetc(ft);
     if(prim!=NULL) {printf("Lista a fost creata,vreti sa introduceti noile date peste vechile date(d,n) ?\n");
    		 alege=getch();
    		 if(alege=='d' || alege=='D')
    		   {while(!feof(ft)) {i=0;
    				      strcpy(sir,"");
    				      while(ch!='\n') {sir[i++]=ch;
    						       ch=fgetc(ft);
    						      }
    				      sir[i]='\0';
    
    				      if(ok==1) {prim=new nod;
    						 sscanf(sir,"%s %d %d %s %s %s %s\n",prim->inf.ziua,
    							&prim->inf.ora_inceput,&prim->inf.ora_sfarsit,
    							prim->inf.materie,prim->inf.tip_materie,
    							prim->inf.nume,prim->inf.prenume);
    						 prim->inf.nrore=prim->inf.ora_sfarsit - prim->inf.ora_inceput;
    						 atribuire_nr_ordine(prim);
    						 prim->urm=NULL;
    						 ok--;
    						}
    				      else {temp=new nod;
    					    sscanf(sir,"%s %d %d %s %s %s %s\n",temp->inf.ziua,
    						   &temp->inf.ora_inceput,&temp->inf.ora_sfarsit,
    						   temp->inf.materie,temp->inf.tip_materie,
    						   temp->inf.nume,temp->inf.prenume);
    					    temp->inf.nrore=temp->inf.ora_sfarsit - temp->inf.ora_inceput;
    					    atribuire_nr_ordine(temp);
    					    adauga_la_sfarsitul_listei(temp);
    					   }
    				      ch=fgetc(ft);
    				     }
    		    printf("Noile date au fost introduse.\n");
    		   }
    		 else printf("Au ramas vechile date.\n");
    		}
     else {while(!feof(ft)) {i=0;
    			 strcpy(sir,"");
    			 while(ch!='\n') {sir[i++]=ch;
    					  ch=fgetc(ft);
    					 }
    			 sir[i]='\0';
    
    			 if(ok==1) {prim=new nod;
    				    sscanf(sir,"%s %d %d %s %s %s %s\n",prim->inf.ziua,
    					   &prim->inf.ora_inceput,&prim->inf.ora_sfarsit,
    					   prim->inf.materie,prim->inf.tip_materie,
    					   prim->inf.nume,prim->inf.prenume);
    				    prim->inf.nrore=prim->inf.ora_sfarsit - prim->inf.ora_inceput;
    				    atribuire_nr_ordine(prim);
    				    prim->urm=NULL;
    				    ok--;
    				   }
    			 else {temp=new nod;
    			       sscanf(sir,"%s %d %d %s %s %s %s\n",temp->inf.ziua,
    				      &temp->inf.ora_inceput,&temp->inf.ora_sfarsit,
    				      temp->inf.materie,temp->inf.tip_materie,
    				      temp->inf.nume,temp->inf.prenume);
    			       temp->inf.nrore=temp->inf.ora_sfarsit - temp->inf.ora_inceput;
    			       atribuire_nr_ordine(temp);
    			       adauga_la_sfarsitul_listei(temp);
    			      }
    			 ch=fgetc(ft);
    			}
           printf("Datele au fost introduse.");
          }
    
     fclose(ft);
     getch();
    }
    
    void creare_lista() // citire datele pt. orar de la tastatura
    {nod *temp;
     char ch;
     if(prim==NULL) {prim=new nod;
    		 printf("Materie :");scanf("%s",prim->inf.materie);
    		 printf("Tipul materiei :");scanf("%s",prim->inf.tip_materie);
    		 printf("Numarul de ore pt %s %s :",prim->inf.materie,prim->inf.tip_materie);
    		   scanf("%d",&prim->inf.nrore);
    		 printf("Numele profesorului :");scanf("%s",prim->inf.nume);
    		 printf("Prenumele profesorului :");scanf("%s",prim->inf.prenume);
    		 printf("De la ce ora poate sa vina profesorul la facultate :");
    		   scanf("%d",&prim->inf.ora_inceput);
    		 printf("Pana la ce ora poate sa stea profesorul la facultate :");
    		   scanf("%d",&prim->inf.ora_sfarsit);
    		 prim->urm=NULL;
    		 printf("\n   Doriti sa mai introduceti date(d,n) ?");
    		 ch=getch();
    		 while(ch!='n') {
    				 temp=new nod;
    				 printf("Materie :");scanf("%s",temp->inf.materie);
    				 printf("Tipul materiei :");scanf("%s",temp->inf.tip_materie);
    				 printf("Numarul de ore pt %s %s :",temp->inf.materie,temp->inf.tip_materie);
    				   scanf("%d",&temp->inf.nrore);
    				 printf("Numele profesorului :");scanf("%s",temp->inf.nume);
    				 printf("Prenumele profesorului :");scanf("%s",temp->inf.prenume);
    				 printf("De la ce ora poate sa vina profesorul la facultate :");
    				   scanf("%d",&temp->inf.ora_inceput);
    				 printf("Pana la ce ora poate sa stea profesorul la facultate :");
    				   scanf("%d",&temp->inf.ora_sfarsit);
    				 adauga_la_sfarsitul_listei(temp);
    
    				 printf("\n   Doriti sa mai introduceti date(d,n) ?");
    				 ch=getch();
    				}
    		}
     else {printf("Lista este deja creata");
           getch();
          }
    }
    
    void creare_orar()
    {nod *temp;
     int nr1,nr2,nr3,nr4,nr5;
     int aux; // variabila care retine nr de ore introduse in acea zi
     int i;   // o variabila care numeroteaza zilele
     int oracurenta;
    
     printf("       Introduceti numarul de ore pentru fiecare zi \n");
     for(i=1;i<=5;i++)
        switch (i) {case 1:printf("Introduceti numarul de ore pentru luni :");
    		       scanf("%d",&nr1);break;
    		case 2:printf("Introduceti numarul de ore pentru marti :");
    		       scanf("%d",&nr2);break;
    		case 3:printf("Introduceti numarul de ore pentru miercuri :");
    		       scanf("%d",&nr3);break;
    		case 4:printf("Introduceti numarul de ore pentru joi :");
    		       scanf("%d",&nr4);break;
    		case 5:printf("Introduceti numarul de ore pentru vineri :");
    		       scanf("%d",&nr5);break;
    	       }
     i=1;          // inseamna prima zi(Luni)
     aux=0;        // nu a fost introdusa nici o ora in acea zi
     oracurenta=8;        // ora curenta in timpul zilei
     temp=prim;
    
    
     while(temp!=NULL)
          {switch (i) {case 1:
    /* daca nr de ore intr. in acea zi + orele care vor fi intr. <= nr. de ore
       stabilit pt. acea zi */ if(aux+temp->inf.nrore<=nr1)
    /* daca ora cur. >= ora de inceput a profesorului && ora cur.<= ora de
       sfarsit a prof. - nr. de ore ale cursului(sem,lab,...)  */
    			     if(oracurenta>=temp->inf.ora_inceput &&
    				oracurenta<=temp->inf.ora_sfarsit-temp->inf.nrore)
    /* acest curs va fi stab.luni */{strcpy(temp->inf.ziua,"Luni");
    /* atrib. nr de ordine pt.luni*/ temp->inf.nr_ordine=1;
    /* adunam nr de ore pt. luni */  aux+=temp->inf.nrore;
    /* ora de inc. este ora cur. */	 temp->inf.ora_inceput=oracurenta;
    /*adunam nr de ore ale cursului*/oracurenta+=temp->inf.nrore;
      // la ora curenta
    /* ora de sf. este oracure. */   temp->inf.ora_sfarsit=oracurenta;
    /* trecem la urm. inreg.*/	 temp=temp->urm;
    				}
    			     else if(oracurenta<=18) oracurenta++;
    				  else {aux=0;oracurenta=8;i++;}
    			   else {aux=0; // nu a fost introdusa nici o ora in ziua urm.
    				 oracurenta=8;
    				 i++;}   // trecem la urmatoarea zi
    			   break;
    		   case 2:
    /* daca nr de ore intr. in acea zi + orele care vor fi intr. <= nr. de ore
       stabilit pt. acea zi */ if(aux+temp->inf.nrore<=nr2)
    /* daca ora cur. >= ora de inceput a profesorului && ora cur.<= ora de
       sfarsit a prof. - nr. de ore ale cursului(sem,lab,...)  */
    			     if(oracurenta>=temp->inf.ora_inceput &&
    				oracurenta<=temp->inf.ora_sfarsit-temp->inf.nrore)
    /* acest curs va fi stab.mart */{strcpy(temp->inf.ziua,"Marti");
    /* atrib. nr de ordine pt.mart*/ temp->inf.nr_ordine=2;
    /* adunam nr de ore pt.marti */  aux+=temp->inf.nrore;
    /* ora de inc. este ora cur. */	 temp->inf.ora_inceput=oracurenta;
    /*adunam nr de ore ale cursului*/oracurenta+=temp->inf.nrore;
      // la ora curenta
    /* ora de sf. este oracure. */   temp->inf.ora_sfarsit=oracurenta;
    /* trecem la urm. inreg.*/	 temp=temp->urm;
    				}
    			     else if(oracurenta<=18) oracurenta++;
    				  else {aux=0;oracurenta=8;i++;}
    			   else {aux=0; // nu a fost introdus nici o ora in ziua urm.
    				 oracurenta=8;
    				 i++;}   // trecem la urmatoarea zi
    			   break;
    		   case 3:
    /* daca nr de ore intr. in acea zi + orele care vor fi intr. <= nr. de ore
       stabilit pt. acea zi */ if(aux+temp->inf.nrore<=nr3)
    /* daca ora cur. >= ora de inceput a profesorului && ora cur.<= ora de
       sfarsit a prof. - nr. de ore ale cursului(sem,lab,...)  */
    			     if(oracurenta>=temp->inf.ora_inceput &&
    				oracurenta<=temp->inf.ora_sfarsit-temp->inf.nrore)
    /* acest curs va fi stab.mier */{strcpy(temp->inf.ziua,"Miercuri");
    /* atrib. nr de ordine pt.mier*/ temp->inf.nr_ordine=3;
    /* adunam nr de ore pt.mierc */  aux+=temp->inf.nrore;
    /* ora de inc. este ora cur. */	 temp->inf.ora_inceput=oracurenta;
    /*adunam nr de ore ale cursului*/oracurenta+=temp->inf.nrore;
      // la ora curenta
    /* ora de sf. este oracure. */   temp->inf.ora_sfarsit=oracurenta;
    /* trecem la urm. inreg.*/	 temp=temp->urm;
    				}
    			     else if(oracurenta<=18) oracurenta++;
    				  else {aux=0;oracurenta=8;i++;}
    			   else {aux=0; // nu a fost introdus nici o ora in ziua urm.
    				 oracurenta=8;
    				 i++;}   // trecem la urmatoarea zi
    			   break;
    		   case 4:
    /* daca nr de ore intr. in acea zi + orele care vor fi intr. <= nr. de ore
       stabilit pt. acea zi */ if(aux+temp->inf.nrore<=nr4)
    /* daca ora cur. >= ora de inceput a profesorului && ora cur.<= ora de
       sfarsit a prof. - nr. de ore ale cursului(sem,lab,...)  */
    			     if(oracurenta>=temp->inf.ora_inceput &&
    				oracurenta<=temp->inf.ora_sfarsit-temp->inf.nrore)
    /* acest curs va fi stab. joi */{strcpy(temp->inf.ziua,"Joi");
    /* atrib. nr de ordine pt. joi*/ temp->inf.nr_ordine=4;
    /* adunam nr de ore pt. joi */   aux+=temp->inf.nrore;
    /* ora de inc. este ora cur. */	 temp->inf.ora_inceput=oracurenta;
    /*adunam nr de ore ale cursului*/oracurenta+=temp->inf.nrore;
      // la ora curenta
    /* ora de sf. este oracure. */   temp->inf.ora_sfarsit=oracurenta;
    /* trecem la urm. inreg.*/	 temp=temp->urm;
    				}
    			     else if(oracurenta<=18) oracurenta++;
    				  else {aux=0;oracurenta=8;i++;}
    			   else {aux=0; // nu a fost introdus nici o ora in ziua urm.
    				 oracurenta=8;
    				 i++;}   // trecem la urmatoarea zi
    			   break;
    		   case 5:
    /* daca nr de ore intr. in acea zi + orele care vor fi intr. <= nr. de ore
       stabilit pt. acea zi */ if(aux+temp->inf.nrore<=nr5)
    /* daca ora cur. >= ora de inceput a profesorului && ora cur.<= ora de
       sfarsit a prof. - nr. de ore ale cursului(sem,lab,...)  */
    			     if(oracurenta>=temp->inf.ora_inceput &&
    				oracurenta<=temp->inf.ora_sfarsit-temp->inf.nrore)
    /* acest curs va fi stab. joi */{strcpy(temp->inf.ziua,"Vineri");
    /* atrib. nr de ordine pt.vine*/ temp->inf.nr_ordine=5;
    /* adunam nr de ore pt. joi */   aux+=temp->inf.nrore;
    /* ora de inc. este ora cur. */	 temp->inf.ora_inceput=oracurenta;
    /*adunam nr de ore ale cursului*/oracurenta+=temp->inf.nrore;
      // la ora curenta
    /* ora de sf. este oracure. */   temp->inf.ora_sfarsit=oracurenta;
    /* trecem la urm. inreg.*/	 temp=temp->urm;
    				}
    			     else if(oracurenta<=18) oracurenta++;
    				  else i++;
    			   else i++;   // nu mai este nici o zi
    			   break;
    		   case 6: printf("Vezi ca ajunsa la i=6 !!!!!!!\n");
    			   printf("Ceva nu e bine");
    		 }
          }
    }
    
    void inserare_inf_citita_de_la_tastatura(nod *temp)
    {nod *temp1;
    // daca prima litera este mica ,at. ea va fi inlocuita cu cea mare
    // "islower" returneaza o val.!=0 daca caracterul din paranteza este mic
     if(islower(temp->inf.ziua[0])!=0)
        temp->inf.ziua[0]=toupper(temp->inf.ziua[0]);
    
     //se parc. lista pentru a ajunge la nodul unde trebuie sa introducem inf.citita
     //se foloseste variabila temp1 care initial va fi capatul listei
     temp1=prim;
     while(temp1->urm!=NULL && strcmp(temp1->inf.ziua,temp->inf.ziua)!=0)
           temp1=temp1->urm;
    //se testeaza daca s-a gasit unde sa se intr. inf. citita sau s-a terminat lista
     if(strcmp(temp1->inf.ziua,temp->inf.ziua)==0)
      //s-a gasit ziua cautata si se insereaza in functie de ora
      //se seteaza leg. din dr. a noului nod la nodul din dr. al nodului gasit
        while(strcmp(temp1->inf.ziua,temp->inf.ziua)==0)
    // daca temp1 este primul el. al listei &&
    // daca ora de sf. a materiei citite <= ora de inc. a materiei urm. ei(din aceeasi zi)
    // && ora de inc. >= ora 8 dimineata
    	  if(temp1==prim && temp->inf.ora_sfarsit <= temp1->inf.ora_inceput &&
    	     temp->inf.ora_inceput >= 8)
    	    {temp->urm=temp1;      // temp devine primul element al listei
    	     prim=temp;
    	     ok++;break;
    	    }
    	  else
    // daca ora de inc. a materiei citite >= ora de sf. a materiei urm. ei(din aceeasi zi)
    // && ora de sf. a mat. citite <= ora de inc. a mat. care va urma dupa ea
    	       if(temp->inf.ora_inceput >= temp1->inf.ora_sfarsit &&
    		  temp->inf.ora_sfarsit <= temp1->urm->inf.ora_inceput)
    		 {/* se seteaza leg. din dr. a nodului citit la nodul din
    		     dreapta nodului gasit */
    		  temp->urm=temp1->urm;
    		  // se seteaza leg. din dr. a nodului gasit de noul nod citit
    		  temp1->urm=temp;
    		  ok++;break;
    		 }
    	       else
    // daca ora de inc. a materiei citite >= ora de sf. a materiei dinaintea ei(din aceeasi zi)
    // && materia urmatoare nu se mai afla in ziua respectiva
    // && ora de sf. <= ora 20 (seara)
    		    if(temp->inf.ora_inceput >= temp1->inf.ora_sfarsit &&
    		       strcmp(temp1->urm->inf.ziua,temp->inf.ziua)!=0 &&
    		       temp->inf.ora_sfarsit <=20)
    		      {/* se seteaza leg. din dr. a nodului citit la nodul din
    			  dreapta nodului gasit */
    		       temp->urm=temp1->urm;
    		       // se seteaza leg. din dr. a nodului gasit de noul nod citit
    		       temp1->urm=temp;
    		       ok++;break;
    		      }
    		    else
    // daca ora de inc. a materiei citite >= ora de sf. a materiei dinaintea ei(din aceeasi zi)
    // && materia este ultima din saptamana && ora de sf. <= ora 20 (seara)
    			 if(temp->inf.ora_inceput >= temp1->inf.ora_sfarsit &&
    			    temp1->urm==NULL && temp->inf.ora_sfarsit <=20)
    		 // nodul citit devine ult. nod din lista
    			   {temp1->urm=temp;
    			    temp->urm=NULL;
    			    ok++;break;
    			   }
    			 else temp1=temp1->urm;
     else {// vechiului sfarsit al listei va indica catre noul nod creat
           temp1->urm=temp;
           // deoarece noul nod trebuie sa devina ultimul nod din lista,
           // leg. din dr. se va face NULL
           temp->urm=NULL;
           ok++;
          }
    }
    
    void adaugare()
    {nod *temp;
    
     temp=new nod;
     printf("Ziua :");scanf("%s",temp->inf.ziua);
     printf("Ora de inceput : ");scanf("%d",&temp->inf.ora_inceput);
     printf("Ora de sfarsit : ");scanf("%d",&temp->inf.ora_sfarsit);
     printf("Materie : ");scanf("%s",temp->inf.materie);
     printf("Tipul materiei : ");scanf("%s",temp->inf.tip_materie);
     temp->inf.nrore=temp->inf.ora_sfarsit - temp->inf.ora_inceput;
     printf("Numele profesorului : ");scanf("%s",temp->inf.nume);
     printf("Prenumele profesorului : ");scanf("%s",temp->inf.prenume);
     atribuire_nr_ordine(temp);
    
     inserare_inf_citita_de_la_tastatura(temp);
    }
    
    
    void stergere(nod *temp2)
    {nod *temp,*temp1;
     int ok=0; // pp. la inceput ca inregistrarea nu va fi gasita
     if(islower(temp2->inf.ziua[0])!=0)
        temp2->inf.ziua[0]=toupper(temp2->inf.ziua[0]);
    
     temp=temp1=prim;
     // cat timp nu am gasit ziua si ora de inc. a inf. de sters
     while(temp!=NULL)
          {while(strcmp(temp->inf.ziua,temp2->inf.ziua)==0)
    	    {if(temp->inf.ora_inceput==temp2->inf.ora_inceput)
    	       {ok=1;
    		break;}
    	     else {temp1=temp;
    		   temp=temp->urm;} // altfel trecem la urmatoarea inregistrare
    	    }
         // daca ok==1 inseamna inregistrarea a fost gasita
           if(ok==1) break;
           else {temp1=temp;   // altfel trecem la urmatoarea inreg.
    	     temp=temp->urm;}
          }
     // verificam daca s-a gasit nodul sau nu
     // daca ziua sau ora de inc. nu sunt la fel
     if(ok==0) printf("Nodul dorit nu s-a gasit");
     else {//verificam daca nodul ce se sterge este primul nod
           if (temp==prim) {//verificam daca nu mai exista alte noduri
    			if(prim->urm==NULL) {delete prim;
    					     prim=NULL;
    					     printf("Lista s-a sters");
    					    }
    			else {prim=prim->urm;
    			      delete temp;
    			      printf("Nodul s-a sters");
    			     }
    		       }
           else {/* adr. nodului din stg. nodului de sters se leaga la nodul
    		din dr. nodului de sters  */
    	     temp1->urm=temp->urm;
    	     delete temp;
    	     printf("Nodul s-a sters");
    	    }
          }
    }
    
    void modificare()
    {nod *temp,*temp1;
     char ziua[10];
     int ora_inceput;
     int ok=0;       // ok=0 - pp. ca nu exista informatia in lista
     if(prim==NULL) printf("Trebuie sa creati mai intai lista!");
     else {printf("Dati ziua in care se afla informatia pe care doriti s-o modificati :");
           scanf("%s",ziua);
           printf("Dati ora la care incepe cursul(sem,laborator,...) :");
           scanf("%d",&ora_inceput);
    
           if(islower(ziua[0])!=0)
    	  ziua[0]=toupper(ziua[0]);
    
           temp=prim;
           while(temp!=NULL)
    	    {if(strcmp(temp->inf.ziua,ziua)==0 &&
    		temp->inf.ora_inceput==ora_inceput)
    	       {temp1=new nod;
    		printf("Introduceti noile date :\n");
    		printf("Ziua : ");scanf("%s",temp1->inf.ziua);
    		printf("Ora de inceput : ");scanf("%d",&temp1->inf.ora_inceput);
    		printf("Ora de sfarsit : ");scanf("%d",&temp1->inf.ora_sfarsit);
    		printf("Materie : ");scanf("%s",temp1->inf.materie);
    		printf("Tipul materiei : ");scanf("%s",temp1->inf.tip_materie);
    		temp1->inf.nrore=temp1->inf.ora_sfarsit - temp1->inf.ora_inceput;
    		printf("Numele profesorului : ");scanf("%s",temp1->inf.nume);
    		printf("Prenumele profesorului : ");scanf("%s",temp1->inf.prenume);
    
    		atribuire_nr_ordine(temp1);
    		ok=1;break;
    	       }
    	     temp=temp->urm;
    	    }
           if(ok==0) printf("Inregistrarea nu exista!");
    // facem asa,pt. ca s-ar putea sa nu se mai introduca aceasi zi(ora)
    // si atunci inregistrarea n-ar mai avea acelasi loc in lista
           else {stergere(temp);  // stergem vechea inreg.
    	     // si o introducem pe cea noua in orar
    	     
    	     inserare_inf_citita_de_la_tastatura(temp1);
    	     printf("Modificarea a fost efectuata.");
    	    }
          }
     getch();
    }
    
    void afisare_orarul()
    {nod *temp;
     int i=1;   // pt. fiecare zi a saptamanii afisam "---..." pt. a le desparti in orar
     int ok=0;  // il folosim pt. a afisa
     temp=prim;
     while(temp!=NULL)
          {if(temp->inf.nr_ordine==1)
    	 {if(ok==0) {printf("------------------------------------------------------------------------------\n");
    		     ok=1;}  // pt. a afisa o sg. data
    	  printf("%-10s | %-2d-%-2d %-20s %-15s %-15s %-15s\n",
    		 temp->inf.ziua,temp->inf.ora_inceput,
    		 temp->inf.ora_sfarsit,temp->inf.materie,
    		 temp->inf.tip_materie,temp->inf.nume,temp->inf.prenume);
    	 }
           else if(temp->inf.nr_ordine==2)
    	      {if(i==1) {printf("------------------------------------------------------------------------------\n");
    			 i++;}
    	       printf("%-10s | %-2d-%-2d %-20s %-15s %-15s %-15s\n",
    		      temp->inf.ziua,temp->inf.ora_inceput,
    		      temp->inf.ora_sfarsit,temp->inf.materie,
    		      temp->inf.tip_materie,temp->inf.nume,temp->inf.prenume);
    	      }
    	    else if(temp->inf.nr_ordine==3)
    /* daca avem numai luni in orar,i-ul nu se ve face niciodata 2(de aceea testam
       daca i== si cu 1)  */
    		   {if(i==2 || i==1) {printf("------------------------------------------------------------------------------\n");
    				      i++;}
    		    printf("%-10s | %-2d-%-2d %-20s %-15s %-15s %-15s\n",
    			   temp->inf.ziua,temp->inf.ora_inceput,
    			   temp->inf.ora_sfarsit,temp->inf.materie,
    			   temp->inf.tip_materie,temp->inf.nume,temp->inf.prenume);
    		   }
    		 else if(temp->inf.nr_ordine==4)
    			{if(i==3 || i==2 || i==1) {printf("------------------------------------------------------------------------------\n");
    						   i++;}
    			 printf("%-10s | %-2d-%-2d %-20s %-15s %-15s %-15s\n",
    				temp->inf.ziua,temp->inf.ora_inceput,
    				temp->inf.ora_sfarsit,temp->inf.materie,
    				temp->inf.tip_materie,temp->inf.nume,temp->inf.prenume);
    			}
    		      else if(temp->inf.nr_ordine==5)
    			     {if(i==4 || i==3 || i==2 || i==1) {printf("------------------------------------------------------------------------------\n");
    								i++;}
    			      printf("%-10s | %-2d-%-2d %-20s %-15s %-15s %-15s\n",
    				     temp->inf.ziua,temp->inf.ora_inceput,
    				     temp->inf.ora_sfarsit,temp->inf.materie,
    				     temp->inf.tip_materie,temp->inf.nume,temp->inf.prenume);
    			     }
           temp=temp->urm;
          }
     getch();
    }
    
    void afisare_orarul_din_lista_in_fisierul_orar_ies_txt()
    {nod *temp;
     FILE *ft;
     char *sir;
    
     ft=fopen("orar_ies.txt","wt");
     temp=prim;
     while(temp!=NULL) {strcpy(sir,"");
    		    // nu trebuie sa afisam si nr de ore al materiei
    		    // scrie in sir datele din lista
    		    sprintf(sir,"%s %d %d %s %s %s %s\n",temp->inf.ziua,
    			    temp->inf.ora_inceput,temp->inf.ora_sfarsit,
    			    temp->inf.materie,temp->inf.tip_materie,
    			    temp->inf.nume,temp->inf.prenume);
    		    fputs(sir,ft);/* introduce datele din "sir" in fisierul
    				     "date_ies.txt"   */
    		    puts(sir);// afiseaza datele din "sir" pe ecran
    			   // ,pt a verifica datele cu cele afisate in fisier
    
    		    temp=temp->urm;
    		   }
     fclose(ft);
     getch();
    }
    
    void intr_orarul_din_lista_in_fisier_binar()
    {nod *temp;
    
     remove("date.dat");
     f1=fopen("date.dat","wb");
     temp=prim;
     while(temp!=NULL) {strcpy(inf.ziua,temp->inf.ziua);
    		    inf.nr_ordine=temp->inf.nr_ordine;
    		    inf.ora_inceput=temp->inf.ora_inceput;
    		    inf.ora_sfarsit=temp->inf.ora_sfarsit;
    		    strcpy(inf.materie,temp->inf.materie);
    		    strcpy(inf.tip_materie,temp->inf.tip_materie);
    		    inf.nrore=temp->inf.nrore;
    		    strcpy(inf.nume,temp->inf.nume);
    		    strcpy(inf.prenume,temp->inf.prenume);
    
    		    fwrite(&inf,sizeof(date),1,f1);
    		    temp=temp->urm;
    		   }
     fclose(f1);
    }
    
    void main()
    {nod *temp;
     char alege, alege1,ch;
    
     do {
         printf("\n1-Introducere date");
         printf("\n2-Creare Orar");
         printf("\n3-Adaugare");
         printf("\n4-Stergere");
         printf("\n5-Modificare");
         printf("\n6-Listare");
         printf("\n0-Exit");
         alege=getch();
         switch(alege) {case '1':{do {
    				  printf("\n1-Introducere date de la tastatura");
    				  printf("\n2-Introducere date din fisier text(daca s-a creat anterior  date_int.txt)");
    				  printf("\n3-Introducere orar din fisier binar");
    				  printf("\n      Numai daca s-a rulat problema anterior pe acest HD sau Floppy disk");
    				  printf("\n4-Introducere orar din fisier text(daca s-a creat anterior  orar_int.txt)");
    				  printf("\n0-Exit");
    				  alege1=getch();
    				  switch(alege1) {case '1':
    							   creare_lista();break;
    						  case '2':intr_date_din_fisier_text_in_lista();break;
    						  case '3':intr_orarul_din_fisier_binar_in_lista();break;
    						  case '4':intr_orarul_din_fisier_text_in_lista();break;
    						 }
    				 }
    			      while(alege1!='0');
    			     }break;
    		    case '2':
    			     if(prim==NULL) {printf("Trebuie sa creati mai intai lista!");
    					     getch();}
    			     else creare_orar();
    			     break;
    		    case '3':
    			     if(prim==NULL) {printf("Trebuie sa creati mai intai lista!");
    					     ok++; // ca sa nu mai intram in "while" de mai jos
    					     getch();
    					    }
    			     else adaugare();
    		     // daca datele nu au fost introduse corect
    			     while(ok==0) {printf("Datele au fost introduse gresit.\n");
    					   printf("Vreti sa introduceti datele din nou(d,n) ?");
    					   ch=getch();
    					   if(ch=='d' || ch=='D') {
    								   ok=0;
    								   adaugare();
    								  }
    //pt. a fi facut in if-ul urm. 0(daca am fi facut pe ok=0 era o bucla infinita)
    					   else ok=1;
    					  }
    // altfel il initializam iarasi cu 0,pt. o alta posibila adaugare
    			     if(ok==1) ok=0;
    			     break;
    		    case '4':
    			     if(prim!=NULL) {temp=new nod;
    					     printf("Dati numai ziua si ora de inceput a informatiei pe care doriti s-o stergeti.\n");
    					     printf("Ziua :");scanf("%s",temp->inf.ziua);
    					     printf("Ora de inceput :");scanf("%d",&temp->inf.ora_inceput);
    					     stergere(temp);
    					     getch();
    					    }
    			     else {printf("Trebuie sa creati mai intai lista!");
    				   getch();}
    			     break;
    		    case '5':modificare();break;
    		    case '6':do {
    				 printf("\n1-Afisare orarul pe ecran");
    				 printf("\n2-Afisare orarul in fisierul orar_ies.txt");
    				 printf("\n0-Exit.");
    				 alege1=getch();
    				 switch(alege1) {case '1':
    							  if(prim==NULL)
    							    {printf("Trebuie sa creati mai intai lista!");
    							     getch();}
    							  else afisare_orarul();
    							  break;
    						 case '2':
    							  if(prim==NULL)
    							    {printf("Trebuie sa creati mai intai lista!");
    							     getch();}
    							  else afisare_orarul_din_lista_in_fisierul_orar_ies_txt();
    							  break;
    						}
    				}
    			     while(alege1!='0');
    			     break;
    		   }
        }
     while(alege!='0');
     if(prim!=NULL)     // daca lista nu este goala intr. datele in fis. binar
       intr_orarul_din_lista_in_fisier_binar();
    }

  2. #2
    Member alex707's Avatar alex707 reprezinta o cantitate neglijabila
    Data de inscriere
    28-09-2006
    Varsta
    43
    Sex
    M
    Mesaje
    183
    Mesaje bazar
    63
    Putere Reputatie
    0
    Reputatie
    8
    Puncte CF
    30.0
    Vad ca da mai multe erori, dar in primul rand poate e de la modul de folosire ca nu prea are error handling in el. Zi-mi cam cum vrei sa il folosesti si intre timp ma uit pe la ce am gasit eu. Dar daca imi spui un exemplu concret de eroare care nu ai reusit sa o rezolvi poate as putea sa te ajut mai eficient

    P.S.: proiectul asta este foarte vechi, intre timp unele din functii sunt deprecated (http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx) si nu numai asta.

    O problema care am gasit-o este in functia afisare_orarul_din_lista_in_fisierul_orar_ies_txt.
    Se defineste sir ca fiind pointer, dar nimeni nu-i aloca o dimensiune.
    Motiv pentru care:
    strcpy(sir, ""); va crapa intotdeauna.
    inainte de a aloca ceva in sir trebuie sa ii dai un malloc(size) unde iti calculezi size-ul care sa il aloci bazat pe dimensiunile din struct (care le stii, sau folosesti sizeof).

    Cod:
    char *sir;
    sir = (char *) malloc(size);
    Cast-ul trebuie sa il faci pentru ca malloc returneaza * void si castul iti pune din nou pointerul catre inceputul zonei de memorie si este pregatit sa primeasca date.

    La sfarsit sa nu uiti sa dai free la sir.

    In afara de asta de care am dat eu mai sunt niste probleme logice la modul in care se face orarul, de-asta daca nu specifici clar cum vrei sa iti calculeze nu prea am cu ce sa te ajut. Asa cum e functioneaza cat de cat.
    Cam ai de munca la el.
    Daca mai am timp mai pun maine ce mai gasesc.
    Last edited by alex707; 25-06-2012 at 21:50.
    Success is not final, failure is not fatal: it is the courage to continue that counts. --Sir Winston Churchill
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

  3. #3
    Junior crazybay's Avatar crazybay a avut ceva conflicte in trecut
    Data de inscriere
    27-06-2008
    Locaţie
    craiova
    Varsta
    37
    Sex
    M
    Mesaje
    75
    Mesaje bazar
    162
    Putere Reputatie
    0
    Reputatie
    -10
    Puncte CF
    14.5
    Ms pt sfaturi...o sa tin cont de ele si o sa vad ce pot face.Proiectul in sine era vorba despre orarul unei facultati si stiu ca se putea face mai simplu...dar asta este
    Vrei mai putine reclame? Inregistreaza-te sau logheaza-te

Tags for this Thread

Google+

Cautati logo-ul CraiovaForum?

Iata cateva variante: