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();
}