I am planning to digitise my church library so am using C to code a virtual library. I am quite behind schedule but i am refreshing my C lanugage after a long break. I will post my previous work here. Overall i have just written the code to add and delete members from a text document. so at the moment a new member can be added and saved to text file and loaded to the program anytime and also deleted from the file. I will begin to work on the books borrowing and cd borrowing by next week once i Recap all the C jargon. For now please try the following code and CHANGE IT IN WHATEVER WAY YOU LIKE! It's yours.
<small glitch, Program stops unexpectedly, This is one f*cking problem, the cause of which i can't identify, DAMN>
Code:
#include<iostream.h>
#include<stdio.h>
#include<string.h>
struct borrowed
{
char member_name[50]; // to access from borrowed.txt file
char items_name[150];
char type;
char due_date[8];
};
struct members
{
char name[50];
char joined_date[8];
struct borrowed borrowed_items[5];
};
int security(char username[10],char password[10]); // fucntion prototypes
void store_in_memfile(char members_init[58]); // stores name and joined date to file
void delete_from_memfile(char members_name[50],struct members member[1000]); // deletes the member
int update_total_members(void);
int load_members(struct members member[1000]); // ONLY loads NAME and JOINED DATE to structure members, RETURNS total number of members
void show(void);
int main()
{
char username[10],password[10];
int op;
char members_init[58],members_det[58]; // name and joined_date
char members_name[50]; // name to DELETE
int total_members; // takes the value of line counter
struct members member[1000];
printf("\n\t\tCalvary Life Assembly Digital Library\n\n\n");
while(1) // security while loop
{
printf("Please enter your USERNAME and PASSWORD\n");
strcpy(username,"x"); // clear the u_n and p_w
strcpy(password,"x");
scanf("%s%s",username,password);
if(security(username,password))
{
continue;
}
else
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); // hide the p_w
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\nSECURITY CLEARED!\n\n");
break;
}
} // security while loop
printf("\n\t\tCalvary Life Assembly Digital Library\n\n\n\n");
while(1)
{
printf("\n\tPress 1 - ADD New MEMBER\n\n");
printf("\tPress 2 - DELETE a MEMBER\n\n");
printf("\tPress 3 - VIEW All members\n\n");
printf("\tPress ctrl c - EXIT\n\n\n");
printf("You Entered --> : ");
scanf("%d",&op);
if(op == 1)
{ // read from keyboard
printf("\nEnter FULL NAME with _ for spaces AND(after a space) Today's date <dd/mm//yy>.\n");
fflush(stdin);
fgets(members_init,58,stdin);
fflush(stdin);
store_in_memfile(members_init); // append to members.txt file
}
if(op == 2)
{
printf("\n\tWARNING : You are about to DELETE a member.\n");
printf("\nEnter the FULL NAME with _ for spaces.\n");
fflush(stdin);
scanf("%s",members_name);
delete_from_memfile(members_name,member); // delete a member, sending MEMBER NAME ONLY
}
if(op == 3)
{
show();
}
if(op == 4)
{
}
total_members = update_total_members(); // update total_membters after store or delete members, printf("\n\ntotal members = %d",total_members);
load_members(member); // load members NAME and JOINED DATE from file into structure
/* test*/
}
system("pause > null");
return 0;
} // END OF MAIN
int security(char username[10],char password[10])
{
if(!(strcmp(username,"1")) && !(strcmp(password,"1")))
return 0;
else
return 1;
}
void store_in_memfile(char members_init[58])
{
FILE *members;
members = fopen("members.txt","a");
if(members == NULL)
{
printf("\n\tWARNING : UNABLE to open members.txt\n");
return;
}
fprintf(members,"%s",members_init); // add the new member
fclose(members);
return;
}
int update_total_members(void)
{
FILE *members;
int line_no=0;
char members_det[58];
members = fopen("members.txt","r");
if(members == NULL)
{
printf("\n\tWARNING : UNABLE to open members.txt\n");
return 0;
}
while(fgets(members_det,58,members)) // update total_members
{
line_no = line_no + 1;
}
fclose(members);
return line_no; // update total_members
}
void delete_from_memfile(char members_name[50],struct members member[1000])
{ // members_name = MEMBERS NAME ONLY.
char members_det[58]; // this string reads a line from file (here DUMMY)
int total_members,ctr,i=1; // ctr is the line number in file.
char members_del[58]; // holds name and joined_date together from struct
total_members = load_members(member); // load the structure from file
FILE *members;
members = fopen("members.txt","w"); // write to file the DELETED member
if(members == NULL)
{
printf("\n\tWARNING : UNABLE to open members.txt\n");
return;
}
for(ctr=0;ctr<total_members;ctr++)
{
members_del[0] = '\0'; // clears the string
if(!(strcmp(members_name,(member[ctr].name)))) // use ctr as line number to write
{
// ctr as member to be deleted.
strcpy((member[ctr].name),"-");
strcpy((member[ctr].joined_date),"-\n");
/* test printf("\n%s%s\n",(member[ctr].name),(member[ctr].joined_date));*/
}
/* test else printf("\n%s%s\n",(member[ctr].name),members_name); */
strcat(members_del,(member[ctr].name)); // here do the string concatanate for ALL strings.
strcat(members_del," ");
strcat(members_del,(member[ctr].joined_date));
fprintf(members,"%s",members_del); // write line by line(ctr as line number) to file
/* test printf("%s\n",members_del); */
members_del[0] = '\0'; // clears the string
}
/* test printf("%s\n",members_del); */
fclose(members);
total_members = load_members(member); // load the structure from file
return;
}
int load_members(struct members member[1000]) // loads ONLY NAME and JOINED DATE to structure
{
FILE *members;
char members_det[58]; // a line from file
char *temp_name,*temp_joined_date; // strings to hold PARSE tokens
int i=0; // struct counter
members = fopen("members.txt","r");
if(members == NULL)
{
printf("\n\tWARNING : UNABLE to open members.txt\n");
return 0;
}
while(fgets(members_det,58,members)) // load a line into members_det string
{
temp_name = strtok(members_det," "); // parse the string members_det into tokens, first token is from 1st char to " ".
temp_joined_date = strtok(NULL,""); // second token(string) is from char after " " to end of word/line.
strcpy((member[i].name),temp_name);
strcpy((member[i].joined_date),temp_joined_date);
i++;
}
// printf("\n%s %s\n",(member[9].name),(member[9].joined_date));
fclose(members);
return i;
}
void show(void)
{
char members_det[58]; // a line from file
FILE *members;
members = fopen("members.txt","r");
if(members == NULL)
{
printf("\n\tWARNING : UNABLE to open members.txt\n");
return;
}
printf("\n\n\n\t\tNAME JOINED-DATE\n");
while(fgets(members_det,58,members)) // load a line into members_det string
{
printf("\t\t%s",members_det);
}
printf("\n\n");
fclose(members);
return;
}
