#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#define MAX 10000
struct person {
char initials[10];
char surname[40];
char name[40];
char telno[40];
}person_list[MAX];
struct person temp;
int counter;
void init_list(void), enter(void);
void delete(void), list(void);
void load(void), save(void);
void sort(void);
void loadbackup(void), outputtwo(void), loadbackuptwo(void);
void copy(void);
void search(void);
void searchbysurname(void);
int find_free(void);
int main(void)
{
int choice;
counter = 0;
init_list();
for(;;) {
printf("\n");
printf("1. Create a record\n");
printf("2. Delete a record\n");
printf("3. List the file\n");
printf("4. Save the file\n");
printf("5. Load the file\n");
printf("6. Sort the file\n");
printf("7. Copy the file after saving\n");
printf("8. Load the copied file\n");
printf("9. Search by initials\n");
printf("10. Search by surname\n");
printf("11. Save with a filename of your choice\n");
printf("12. Load from a filename of your choice\n");
printf("13. Quit\n");
do {
printf("\nEnter your choice: ");
scanf("%i",&choice);
}while(choice < 1 && choice > 13);
if(choice==1) enter();
if(choice==2) delete();
if(choice==3) list();
if(choice==4) save();
if(choice==5) load();
if(choice==6)sort();
if(choice==7) copy();
if(choice==8) loadbackup();
if(choice==9) search();
if(choice==10) searchbysurname();
if(choice==11) outputtwo();
if(choice==12) loadbackuptwo();
if(choice==13) exit(1);
}
return 0;
}
void init_list(void)
{
register int t;
for(t=1; t<MAX; ++t) person_list[t].initials[0] ='\0';
}
void enter(void)
{
int slot;
char s[80];
slot = find_free();
if(slot==-1) {
printf("\nList Full");
return;
}
printf("\nEnter initials: ");
scanf("%s",person_list[slot].initials);
printf("\nEnter surname: ");
scanf("%s",person_list[slot].surname);
printf("\nEnter first name: ");
scanf("%s",person_list[slot].name);
printf("\nEnter telephone number: ");
scanf("%s",person_list[slot].telno);
counter = counter +1;
}
int find_free(void)
{
register int t;
for(t=1; person_list[t].initials[0] && t<MAX; t++)
if(t==MAX) return -1;
return t;
}
void delete(void)
{
int recnum;
printf("enter a record number #: ");
scanf("%i", &recnum);
person_list[recnum].initials[0] = '\0';
}
void list(void)
{
register int t;
int count;
count = 0;
for(t=1; t<MAX; t++) {
if(person_list[t].initials[0]) {
count = count +1;
printf("Record number: %i\n",count);
printf("Initials: %s\n", person_list[t].initials);
printf("Surname: name %s\n", person_list[t].surname);
printf("First name: %s\n", person_list[t].name);
printf("Telephone number: %s\n", person_list[t].telno);
printf("\n");
}
}
printf("\n\n");
}
void sort(void)
{
register int u;
register int t;
for (t=1; t<counter; t++){
for (u=t+1; u<=counter; u++)
if( strcmp(person_list[t].initials, person_list[u].initials) >0){
strncpy(temp.initials, person_list[t].initials, 10);
strncpy(temp.surname, person_list[t].surname, 40);
strncpy(temp.name, person_list[t].name, 40);
strncpy(temp.telno, person_list[t].telno, 40);
strncpy(person_list[t].initials, person_list[u].initials, 10);
strncpy(person_list[t].surname, person_list[u].surname, 40);
strncpy(person_list[t].name, person_list[u].name, 40);
strncpy(person_list[t].telno, person_list[u].telno, 40);
strncpy(person_list[u].initials, temp.initials, 10);
strncpy(person_list[u].surname, temp.surname, 40);
strncpy(person_list[u].name, temp.name, 40);
strncpy(person_list[u].telno, temp.telno, 40);
}
}
}
void save(void)
{
int t;
FILE *stream;
stream = fopen("personlist1.txt", "w+");
for(t=1; t<MAX; t++) {
if(person_list[t].initials[0]) {
fprintf(stream,"%i\n",t);
fprintf(stream,"%s\n", person_list[t].initials);
fprintf(stream,"%s\n", person_list[t].surname);
fprintf(stream,"%s\n", person_list[t].name);
fprintf(stream,"%s\n", person_list[t].telno);
fprintf(stream,"\n");
}
}
fclose(stream);
return;
}
void load(void)
{
int t;
char i[MAX];
FILE *stream;
init_list();
stream = fopen("personlist1.txt", "r+");
t=0;
do
{
t=t+1;
fscanf(stream,"%s\n",i);
fscanf(stream,"%s\n", person_list[t].initials);
fscanf(stream, "%s\n", person_list[t].surname);
fscanf(stream, "%s\n", person_list[t].name);
fscanf(stream, "%s\n", person_list[t].telno);
fscanf(stream, "\n");
counter=counter+1;
}while(!feof(stream));
fclose(stream);
return;
}
void copy(void)
{
FILE *in, *out;
int c;
if ((in = fopen ("personlist1.txt", "r")) ==NULL){
printf("Cant open %s file for reading.\n","cdlist");
return 1;
}
if ((out = fopen("personlist2.txt", "w")) ==NULL){
printf("Cant open %s for writing.\n", "cdlistbackup");
return 2;
}
while ((c = getc (in)) !=EOF)
putc (c, out);
fclose (in);
fclose(out);
printf("File has been copied.\n");
return 0;
}
void loadbackup(void)
{
int t;
char i[MAX];
FILE *stream;
init_list();
stream = fopen("personlist2.txt", "r+");
t=0;
do
{
t=t+1;
fscanf(stream,"%s\n",i);
fscanf(stream,"%s\n", person_list[t].initials);
fscanf(stream, "%s\n", person_list[t].surname);
fscanf(stream, "%s\n", person_list[t].name);
fscanf(stream, "%s\n", person_list[t].telno);
fscanf(stream, "\n");
}while(!feof(stream));
fclose(stream);
return;
}
void search(void)
{
int i, count;
char s[30];
count=0;
printf("\nEnter an initial.\n");
scanf("%s",s);
for(i=1;i<MAX;i++)
{
if(person_list[i].initials[0]) {
count = count +1;
}
if (strcmp(s, person_list[i].initials)==0)
{
printf("\nRecord number: %i\n", count);
printf("\nInitials: %s\n",person_list[i].initials);
printf("\nSurname: %s\n",person_list[i].surname);
printf("\nFirst name: %s\n",person_list[i].name);
printf("\nTelephone number: %s\n",person_list[i].telno);
printf("\n");
}
}
}
void searchbysurname(void)
{
int i, count;
char s[30];
count =0;
printf("\nEnter a surname.\n");
scanf("%s",s);
for(i=1;i<MAX;i++)
{
if(person_list[i].initials[0]) {
count = count +1;
}
if (strcmp(s, person_list[i].surname)==0)
{
printf("\nRecord number: %i\n", count);
printf("\nInitials: %s\n",person_list[i].initials);
printf("\nSurname: %s\n",person_list[i].surname);
printf("\nFirst name: %s\n",person_list[i].name);
printf("\nTelephone number: %s\n",person_list[i].telno);
printf("\n");
}
}
}
void outputtwo(void)
{
FILE *stream;
register int t;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
if((stream=fopen(filename, "w+"))==NULL) {
printf("Cannot open file.\n");
return;
}
for(t=1; t<MAX; t++) {
if(person_list[t].initials[0]) {
fprintf(stream,"%i\n",t);
fprintf(stream,"%s\n", person_list[t].initials);
fprintf(stream,"%s\n", person_list[t].surname);
fprintf(stream,"%s\n", person_list[t].name);
fprintf(stream,"%s\n", person_list[t].telno);
fprintf(stream,"\n");
}
}
fclose(stream);
return;
}
void loadbackuptwo(void)
{
FILE *stream;
char filename[30];
printf("Enter a file name.\n");
scanf("%s",filename);
printf("\n");
register int t;
char i[MAX];
if((stream=fopen(filename, "r+"))==NULL) {
printf("Cannot open file,\n");
return;
}
init_list();
counter = 0;
t=0;
do
{
t=t+1;
fscanf(stream,"%s\n",i);
fscanf(stream,"%s\n", person_list[t].initials);
fscanf(stream, "%s\n", person_list[t].surname);
fscanf(stream, "%s\n", person_list[t].name);
fscanf(stream, "%s\n", person_list[t].telno);
fscanf(stream, "\n");
counter=counter+1;
}while(!feof(stream));
fclose(stream);
return;
}