Skip to content

Instantly share code, notes, and snippets.

@aziflaj
Created February 23, 2016 20:39
Show Gist options
  • Save aziflaj/7fc0f266de4d30babf17 to your computer and use it in GitHub Desktop.
Save aziflaj/7fc0f266de4d30babf17 to your computer and use it in GitHub Desktop.
An address book manager written in C as a homework
#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