Created
February 23, 2016 20:39
-
-
Save aziflaj/7fc0f266de4d30babf17 to your computer and use it in GitHub Desktop.
An address book manager written in C as a homework
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <conio.h> | |
#define MAX 100 | |
struct PERSON { | |
char fName[20]; /* emri i nje personi ne librin e adresave */ | |
char lName[20]; /* mbiemri i nje personi ne librin e adresave */ | |
char id[20]; /* ID i nje personi ne librin e adresave */ | |
char cel[20]; /* numri i telefonit te nje personi ne librin e adresave */ | |
char eMail[30]; /* e-mail i nje personi ne librin e adresave */ | |
} pList[MAX]; /* lista e gjithe personave ne DB */ | |
void shkruaj(char *filename, struct PERSON *p,int n); | |
void lexo(char *filename,struct PERSON *p,int n); | |
void printo(struct PERSON p); | |
int dblen(char *filename); | |
int kerkoSipas(int type,char* data); | |
void sort(char* filename,int type); | |
int fshi(char *filename,char* ID); | |
void modifiko(char *filename,char *id); | |
void consolePauser(); | |
int main() { | |
int zgjedhja,lng; | |
while (1) { | |
system("cls"); | |
printf("\t\tAddressBook\n\n\n"); | |
printf("1. Afisho te dhenat\n"); | |
printf("2. Shto person\n"); | |
printf("3. Fshi person sipas ID\n"); | |
printf("4. Modifiko person sipas ID\n"); | |
printf("5. Kerko sipas\n"); | |
printf("6. Rendit sipas\n\n"); | |
scanf("%d",&zgjedhja); | |
switch(zgjedhja) { | |
case 1: | |
lng = dblen("db.lsd"); | |
lexo("db.lsd",pList,lng); | |
for (int i=0;i<lng;i++) | |
printo(pList[i]); | |
consolePauser(); | |
break; | |
case 2: ; | |
struct PERSON human; | |
printf("Emri: "); | |
scanf("%s",human.fName); | |
printf("Mbiemri: "); | |
scanf("%s",human.lName); | |
printf("ID: "); | |
scanf("%s",human.id); | |
printf("Telefon: "); | |
scanf("%s",human.cel); | |
printf("E-Mail: "); | |
scanf("%s",human.eMail); | |
//append into pList | |
lng = dblen("db.lsd"); | |
lexo("db.lsd",pList,lng); | |
pList[lng] = human; | |
//write to db.lsd | |
shkruaj("db.lsd",pList,lng+1); | |
consolePauser(); | |
break; | |
case 3: ; | |
char id_qe_fshihet[20]; | |
int success; | |
printf("Fshi person\n"); | |
printf("Jepni ID e personit qe do fshihet: "); | |
scanf("%s",id_qe_fshihet); | |
success = fshi("db.lsd",id_qe_fshihet); | |
if (!success) { | |
printf("ID nuk u gjet\n"); | |
} | |
consolePauser(); | |
break; | |
case 4: ; | |
char id_modifiko[20]; | |
printf("Modifiko te dhenat per nje person\n"); | |
printf("ID qe do modifikohet: "); | |
scanf("%s",id_modifiko); | |
modifiko("db.lsd",id_modifiko); | |
consolePauser(); | |
break; | |
case 5: ; | |
int kerko,fl; | |
char cfare[20]; | |
printf("Kerko sipas:\n"); | |
printf("1. Emrit\n"); | |
printf("2. Mbimrit\n"); | |
printf("3. ID\n"); | |
printf("4. Telefonit\n"); | |
printf("5. E-Mailit\n"); | |
scanf("%d",&kerko); | |
printf("Ke te kerkoje: "); | |
scanf("%s",cfare); | |
fl = kerkoSipas(kerko,cfare); | |
if (fl == 0) { | |
printf("Asnje rezultat\n"); | |
} | |
consolePauser(); | |
break; | |
case 6: ; | |
int rendit; | |
printf("Rendit sipas:\n"); | |
printf("1. Emrit\n"); | |
printf("2. Mbimrit\n"); | |
printf("3. ID\n"); | |
printf("4. Telefonit\n"); | |
printf("5. E-Mailit\n"); | |
scanf("%d",&rendit); | |
sort("db.lsd",rendit); | |
consolePauser(); | |
break; | |
default: | |
fprintf(stderr,"Komande e panjohur!"); | |
consolePauser(); | |
} | |
} | |
return 0; | |
} | |
void shkruaj(char *filename, struct PERSON *p,int n) { | |
FILE *fp; | |
fp = fopen(filename,"w+b"); | |
fwrite(p,sizeof(struct PERSON),n,fp); | |
fclose(fp); | |
} | |
void lexo(char *filename,struct PERSON *p,int n) { | |
FILE *fp; | |
fp = fopen(filename,"r"); | |
fread(p,sizeof(struct PERSON),n,fp); | |
fclose(fp); | |
} | |
void printo(struct PERSON p) { | |
printf("Emri: %s\n",p.fName); | |
printf("Mbiemri: %s\n",p.lName); | |
printf("ID: %s\n",p.id); | |
printf("Telefon: %s\n",p.cel); | |
printf("E-Mail: %s\n\n",p.eMail); | |
} | |
int dblen(char *filename) { | |
FILE *fp; | |
int len=-1; | |
struct PERSON tmp; | |
fp = fopen(filename,"r"); | |
while ( !feof(fp) ) { | |
fread(&tmp,sizeof(struct PERSON),1,fp); | |
len++; | |
} | |
return len; | |
} | |
int kerkoSipas(int type,char* data) { | |
int i; | |
int flag=0; | |
int lng = dblen("db.lsd"); | |
lexo("db.lsd",pList,lng); | |
switch(type) { | |
case 1: /* kerko sipas emrit */ | |
for (i=0;i<lng;i++){ | |
if (!strcmp(pList[i].fName,data)) { | |
printo(pList[i]); | |
flag++; | |
} | |
} | |
break; | |
case 2: /* kerko sipas mbiemrit */ | |
for (i=0;i<lng;i++){ | |
if (!strcmp(pList[i].lName,data)) { | |
printo(pList[i]); | |
flag++; | |
} | |
} | |
break; | |
case 3: /* kerko sipas ID */ | |
for (i=0;i<lng;i++){ | |
if (!strcmp(pList[i].id,data)) { | |
printo(pList[i]); | |
flag++; | |
} | |
} | |
break; | |
case 4: /* kerko sipas telefonit */ | |
for (i=0;i<lng;i++){ | |
if (!strcmp(pList[i].cel,data)) { | |
printo(pList[i]); | |
flag++; | |
} | |
} | |
break; | |
case 5: /* kerko sipas e-Mailit */ | |
for (i=0;i<lng;i++){ | |
if (!strcmp(pList[i].eMail,data)) { | |
printo(pList[i]); | |
flag++; | |
} | |
} | |
break; | |
default: | |
printf("Zgjedhje e gabuar\n"); | |
return -1; | |
} | |
return flag; | |
} | |
void sort(char* filename,int type) { | |
int length = dblen(filename); | |
lexo(filename,pList,length); | |
switch(type) { | |
case 1: /* rendit sipas emrit */ | |
for (int i=0;i<length;i++) { | |
for (int j=i;j<length;j++) { | |
if (strcmp( pList[i].fName, pList[j].fName ) == 1 ) { | |
struct PERSON tmp = pList[j]; | |
pList[j] = pList[i]; | |
pList[i] = tmp; | |
} | |
} | |
} | |
break; | |
case 2: /* rendit sipas mbiemrit */ | |
for (int i=0;i<length;i++) { | |
for (int j=i;j<length;j++) { | |
if (strcmp( pList[i].lName, pList[j].lName ) == 1 ) { | |
struct PERSON tmp = pList[j]; | |
pList[j] = pList[i]; | |
pList[i] = tmp; | |
} | |
} | |
} | |
break; | |
case 3: /* rendit sipas ID */ | |
for (int i=0;i<length;i++) { | |
for (int j=i;j<length;j++) { | |
if (strcmp( pList[i].id, pList[j].id ) == 1 ) { | |
struct PERSON tmp = pList[j]; | |
pList[j] = pList[i]; | |
pList[i] = tmp; | |
} | |
} | |
} | |
break; | |
case 4: /* rendit sipas telefonit */ | |
for (int i=0;i<length;i++) { | |
for (int j=i;j<length;j++) { | |
if (strcmp( pList[i].cel, pList[j].cel ) == 1 ) { | |
struct PERSON tmp = pList[j]; | |
pList[j] = pList[i]; | |
pList[i] = tmp; | |
} | |
} | |
} | |
break; | |
case 5: /* rendit sipas emrit */ | |
for (int i=0;i<length;i++) { | |
for (int j=i;j<length;j++) { | |
if (strcmp( pList[i].eMail, pList[j].eMail ) == 1 ) { | |
struct PERSON tmp = pList[j]; | |
pList[j] = pList[i]; | |
pList[i] = tmp; | |
} | |
} | |
} | |
break; | |
default: | |
printf("Zgjedhje e gabuar"); | |
return; | |
} | |
/* printojme te dhenat */ | |
for (int i=0;i<length;i++) | |
printo(pList[i]); | |
} | |
int fshi(char *filename,char* ID) { | |
int length = dblen(filename); | |
lexo(filename,pList,length); | |
int index = -1; | |
/* gjejme indeksin me id = ID */ | |
for (int i=0;i<length;i++) { | |
if (!strcmp(pList[i].id,ID)) { | |
index = i; | |
break; | |
} | |
} | |
if (index == -1) { | |
return 0; | |
} | |
for(int i=index;i<length-1;i++) { | |
pList[i] = pList[i+1]; | |
} | |
shkruaj(filename,pList,length-1); | |
return 1; | |
} | |
void modifiko(char *filename,char *id) { | |
int length = dblen(filename); | |
int index = -1; | |
int mod; | |
int again; | |
char nuovo[20]; | |
lexo(filename,pList,length); | |
/* gjejme indeksin me id = ID */ | |
for (int i=0;i<length;i++) { | |
if (!strcmp(pList[i].id,id)) { | |
index = i; | |
break; | |
} | |
} | |
if (index == -1) { | |
printf("ID nuk u gjet"); | |
return; | |
} | |
printo(pList[index]); | |
do { | |
printf("Modifiko: \n"); | |
printf("1. Emrin\n"); | |
printf("2. Mbiemrin\n"); | |
printf("3. ID\n"); | |
printf("4. Telefonin\n"); | |
printf("5. Emailin\n"); | |
scanf("%d",&mod); | |
switch(mod) { | |
case 1: | |
printf("Emri i ri: "); | |
scanf("%s",nuovo); | |
strcpy(pList[index].fName,nuovo); | |
break; | |
case 2: | |
printf("Mbiemri i ri: "); | |
scanf("%s",nuovo); | |
strcpy(pList[index].lName,nuovo); | |
break; | |
case 3: | |
printf("ID i ri: "); | |
scanf("%s",nuovo); | |
strcpy(pList[index].id,nuovo); | |
break; | |
case 4: | |
printf("Telefoni i ri: "); | |
scanf("%s",nuovo); | |
strcpy(pList[index].cel,nuovo); | |
break; | |
case 5: | |
printf("E-Mail i ri: "); | |
scanf("%s",nuovo); | |
strcpy(pList[index].eMail,nuovo); | |
break; | |
default: | |
printf("Komande e gabuar!\n"); | |
} | |
printf("Shtypni 0 nese doni te mos ndryshoni me, "); | |
printf("ose cdo numer tjeter per te ruajtur te dhenat"); | |
scanf("%d",&again); | |
} while (again); | |
shkruaj(filename,pList,length); | |
} | |
void consolePauser() { | |
printf("Shtypni nje buton per te vazhduar"); | |
getch(); | |
system("cls"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment