can anyone help me? I've made an address book. But I don't understand how to sort the information in alphabetic order. And also the information which is written in information.txt is not neat. Does anyone know how to fix it ?
here is my code..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
void credit();
void menu();
void add();
void search();
void s_name();
void edit();
void e_name();
void change(FILE *editPtr, char check[],char data[]);
void delete_();
void d_name();
void empty(FILE *editPtr, char check[],char data[]);
void print();
void view();
void sort();
struct data{
char f_name[20];
char l_name[20];
char address[50];
char city [20];
char postcode[6];
char country[20];
char home_phone[20];
char work_phone[20];
char mobile_phone[20];
char email[30];
}record;
int main()
{
credit();
system("pause");
menu();
}
void credit()
{
printf("Simple Personal Information Manager Project\n");
printf("===========================================\n");
printf("\nMade by : \n");
printf("1. Bayu Dhanubroto\n");
printf("2. Oky Mauludany\n");
printf("\nFinal Project\nProgramming Principles\n01PBC\n\n");
printf("===========================================\n");
}//end credit function
void menu()
{
int choice;
int counter=1;
while(counter!=-1){
system("cls");
printf("Personal Information Manager\n\n");
printf("What do you want to do?\n");
printf("[1]. Add Information\n");
printf("[2]. Search Information\n");
printf("[3]. Edit Information\n");
printf("[4]. Delete Information\n");
printf("[5]. View All Information\n");
printf("[6]. Exit\n\n");
printf("Please choose an option : ");
scanf("%d", &choice);
if(choice<1 || choice >6){
printf("Please only enter 1-5!\n");
system("pause");
}//end if
else {
switch(choice){
case 1 : add(); break;
case 2 : search(); break;
case 3 : edit(); break;
case 4 : delete_(); break;
case 5 : view(); break;
case 6 : exit(1); break;
}//end switch
}//end else
}//end while
}//end menu function
void add()
{
FILE *cfPtr;
int choice;
char buffer[10];
system("cls");
//fopen opens the file; exits if file cannot be opened
if((cfPtr = fopen("information.txt","ab"))==NULL){
printf("File could not be opened.\n");
}//end if
else {
printf("======Adding New Record======\n");
printf("\nEnter first name : ");
gets(buffer);
gets(record.f_name);
record.f_name[0]=toupper(record.f_name[0]);
printf("Enter last name : ");
gets(record.l_name);
record.l_name[0]=toupper(record.l_name[0]);
printf("Enter the address : ");
gets(record.address);
printf("Enter the city : ");
gets(record.city);
record.city[0]=toupper(record.city[0]);
printf("Enter the post code : ");
gets(record.postcode);
printf("Enter the country : ");
gets(record.country);
record.country[0]=toupper(record.country[0]);
printf("Enter Phone Number\n");
printf("Home : ");
gets(record.home_phone);
printf("Work : ");
gets(record.work_phone);
printf("Mobile : ");
gets(record.mobile_phone);
printf("Enter email address : ");
gets(record.email);
fwrite(&record, sizeof(record), 1, cfPtr);
printf("\nRecord Saved\n");
printf("Do you want to continue ? [1]. Yes [2]. No\n");
scanf("%d", &choice);
if (choice == 1){
add();
}//end if
fclose(cfPtr);
}//end else
}//end add function
void search()
{
int choice;
int counter=1;
system("cls");
printf("[1]. Search by name\n");
printf("[2]. Return to menu\n");
printf("\nPlease choose an option : ");
scanf("%d", &choice);
if(choice<1 || choice >2){
printf("Please only enter 1-2!\n");
system("pause");
search();
}//end if
else {
switch(choice){
case 1 : s_name(); break;
case 2 : menu(); break;
}//end switch
}//end else
system("pause");
}
void s_name()
{
FILE *cfPtr;
int result;
char check_f_name[20];
char check_l_name[20];
char buffer[10];
int choice;
int counter=1;
system("cls");
printf("[1]. Search from the first name\n");
printf("[2]. Search from the last name\n\n");
printf("Please choose an option : ");
scanf("%d", &choice);
if(choice<1 || choice >2){
printf("Please only enter 1-2!\n");
system("pause");
s_name();
}//end if
else {
switch(choice){
case 1 :
if((cfPtr = fopen("information.txt","rb+"))==NULL){
printf("File could not be opened.\n");
}//end if
else{
printf("Enter the first name : ");
gets(buffer);
gets(check_f_name);
check_f_name[0]=toupper(check_f_name[0]);
while(fread(&record,sizeof(record), 1, cfPtr)
&& strcmp(check_f_name, record.f_name));
result = strcmp(check_f_name, record.f_name);
if(result!=0)
{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record not found!\n\n");
}//end if
else{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record found!\n\n");
print();
}//end imner else
fclose(cfPtr);
system("pause");
search();
}//end else
break;
case 2 :
if((cfPtr = fopen("information.txt","rb+"))==NULL){
printf("File could not be opened.\n");
}//end if
else{
printf("Enter the last name : ");
gets(buffer);
gets(check_l_name);
check_l_name[0]=toupper(check_l_name[0]);
while(fread(&record,sizeof(record), 1, cfPtr)
&& strcmp(check_l_name, record.l_name));
result = strcmp(check_l_name, record.l_name);
if(result!=0)
{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record not found!\n\n");
}//end if
else{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record found!\n\n");
print();
}//end else
fclose(cfPtr);
system("pause");
search();
}//end else
break;
}//end switch
}//end else
}
void edit()
{
int choice;
int counter=1;
system("cls");
printf("[1]. Edit by name\n");
printf("[2]. Return to menu\n");
printf("\nPlease choose an option : ");
scanf("%d", &choice);
if(choice<1 || choice>2){
printf("Please only enter 1-2!\n");
system("pause");
edit();
}//end inner if
switch (choice){
case 1 : e_name(); break;
case 2 : menu(); break;
}//end switch
}//end edit function
void e_name()
{
FILE *cfPtr;
int result;
char check_f_name[20];
char check_l_name[20];
char buffer[10];
int choice1;
int choice2;
system("cls");
printf("[1]. Search from the first name\n");
printf("[2]. Search from the last name\n\n");
printf("Please choose an option : ");
scanf("%d", &choice1);
if(choice1<1 || choice1 >2){
printf("Please only enter 1-2!\n");
system("pause");
e_name();
}//end if
else {
switch(choice1){
case 1 :
if((cfPtr = fopen("information.txt","rb+"))==NULL){
printf("File could not be opened.\n");
}//end if
else{
printf("Enter the first name : ");
gets(buffer);
gets(check_f_name);
check_f_name[0]=toupper(check_f_name[0]);
while(fread(&record,sizeof(record), 1, cfPtr)
&& strcmp(check_f_name, record.f_name));
result = strcmp(check_f_name, record.f_name);
if(result!=0)
{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record not found!\n\n");
}
else{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record found!\n\n");
print();
printf("Do you want to edit this record?\n");
printf("[1]. Yes / [2]. No\n");
printf("Choose an option : ");
scanf("%d", &choice2);
if(choice2<1 || choice2>2){
printf("Please only enter 1-2!\n");
system("pause");
e_name();
}//end inner if
else {
switch (choice2){
case 1 :
change(cfPtr, check_f_name, record.f_name);
printf("\nRecord edited!\n");
system("pause");
break;
case 2 :
menu();
break;
}//end switch
}//end inner else
}//end else
fclose(cfPtr);
}//end else
break;
case 2 :
if((cfPtr = fopen("information.txt","rb+"))==NULL){
printf("File could not be opened.\n");
}//end if
else{
printf("Enter the last name : ");
gets(buffer);
gets(check_l_name);
check_l_name[0]=toupper(check_l_name[0]);
while(fread(&record,sizeof(record), 1, cfPtr)
&& strcmp(check_l_name, record.l_name));
result = strcmp(check_l_name, record.l_name);
if(result!=0)
{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record not found!\n\n");
}
else{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record found!\n\n");
print();
printf("Do you want to edit this record?\n");
printf("[1]. Yes / [2]. No\n");
printf("Choose an option : ");
scanf("%d", &choice2);
if(choice2<1 || choice2>2){
printf("Please only enter 1-2!\n");
system("pause");
e_name();
}//end inner if
else {
switch (choice2){
case 1 :
change(cfPtr, check_l_name, record.l_name);
printf("\nRecord edited!\n");
system("pause");
break;
case 2 :
menu();
break;
}//end switch
}//end inner else
}//end else
fclose(cfPtr);
}//end else
break;
}//end switch
}//end else
}//end e_name function
void change(FILE *editPtr, char check[],char data[])
{
char buffer[10];
rewind(editPtr);
while(fread(&record, sizeof(record), 1, editPtr) && strcmp(check,data));
if(!strcmp(check,data)){
system("cls");
printf("\nEnter first name : ");
gets(buffer);
gets(record.f_name);
record.f_name[0]=toupper(record.f_name[0]);
printf("Enter last name : ");
gets(record.l_name);
record.l_name[0]=toupper(record.l_name[0]);
printf("Enter the address : ");
gets(record.address);
printf("Enter the city : ");
gets(record.city);
record.city[0]=toupper(record.city[0]);
printf("Enter the post code : ");
gets(record.postcode);
printf("Enter the country : ");
gets(record.country);
record.country[0]=toupper(record.country[0]);
printf("Enter Phone Number\n");
printf("Home : ");
gets(record.home_phone);
printf("Work : ");
gets(record.work_phone);
printf("Mobile : ");
gets(record.mobile_phone);
printf("Enter email address : ");
gets(record.email);
fseek(editPtr, ftell(editPtr) - sizeof(record),0);
fwrite(&record, sizeof(record), 1, editPtr);
}//end if
fclose(editPtr);
}
void delete_()
{
int choice;
system("cls");
printf("[1]. Delete by name\n");
printf("[2]. Return to menu\n");
printf("\nPlease choose an option : ");
scanf("%d", &choice);
if(choice<1 || choice >2){
printf("Please only enter 1-2!\n");
system("pause");
delete_();
}//end if
else {
switch(choice){
case 1 : d_name(); break;
case 2 : menu(); break;
}//end switch
}//end else
system("pause");
}//end delete function
void d_name()
{
FILE *cfPtr;
int result;
char check_f_name[20];
char check_l_name[20];
char buffer[10];
int choice1;
int choice2;
system("cls");
printf("[1]. Search from the first name\n");
printf("[2]. Search from the last name\n\n");
printf("Please choose an option : ");
scanf("%d", &choice1);
if(choice1<1 || choice1 >2){
printf("Please only enter 1-2!\n");
system("pause");
d_name();
}//end if
else {
switch(choice1){
case 1 :
if((cfPtr = fopen("information.txt","rb+"))==NULL){
printf("File could not be opened.\n");
}//end if
else{
printf("Enter the first name : ");
gets(buffer);
gets(check_f_name);
check_f_name[0]=toupper(check_f_name[0]);
while(fread(&record,sizeof(record), 1, cfPtr)
&& strcmp(check_f_name, record.f_name));
result = strcmp(check_f_name, record.f_name);
if(result!=0)
{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record not found!\n\n");
}
else{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record found!\n\n");
print();
printf("Do you want to delete this record?\n");
printf("[1]. Yes / [2]. No\n");
printf("Choose an option : ");
scanf("%d", &choice2);
if(choice2<1 || choice2>2){
printf("Please only enter 1-2!\n");
system("pause");
d_name();
}//end inner if
else {
switch (choice2){
case 1 :
empty(cfPtr, check_f_name, record.f_name);
printf("Record deleted!\n");
break;
case 2 :
menu();
break;
}//end switch
}//end inner else
}//end else
fclose(cfPtr);
}//end else
break;
case 2 :
if((cfPtr = fopen("information.txt","rb+"))==NULL){
printf("File could not be opened.\n");
}//end if
else{
printf("Enter the last name : ");
gets(buffer);
gets(check_l_name);
check_l_name[0]=toupper(check_l_name[0]);
while(fread(&record,sizeof(record), 1, cfPtr)
&& strcmp(check_l_name, record.l_name));
result = strcmp(check_l_name, record.l_name);
if(result!=0)
{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record not found!\n\n");
}
else{
system("cls");
printf("==SEARCHING==\n");
system("pause");
system("cls");
printf("Record found!\n\n");
print();
printf("Do you want to delete this record?\n");
printf("[1]. Yes / [2]. No\n");
printf("Choose an option : ");
scanf("%d", &choice2);
if(choice2<1 || choice2>2){
printf("Please only enter 1-2!\n");
d_name();
}//end inner if
else {
switch (choice2){
case 1 :
empty(cfPtr, check_l_name, record.l_name);
printf("Record deleted!\n");
break;
case 2 :
menu();
break;
}//end switch
}//end inner else
}//end else
fclose(cfPtr);
}//end else
break;
}//end switch
}//end else
}//end d_name function
void empty(FILE *delPtr, char check[],char data[])
{
int result;
FILE *temp;
temp = fopen("temp.txt","w");
rewind(delPtr);
while (fread(&record, sizeof(record), 1, delPtr))
{
if (strcmp(check,data)){
fwrite(&record, sizeof(record), 1, temp);
}//end if
}//end while
fclose(delPtr);
fclose(temp);
remove("information.txt");
rename("temp.txt", "information.txt");
record.f_name[0]='\0';
record.l_name[0]='\0';
record.address[0]='\0';
record.city[0]='\0';
record.postcode[0]='\0';
record.country[0]='\0';
record.home_phone[0]='\0';
record.work_phone[0]='\0';
record.mobile_phone[0]='\0';
record.email[0]='\0';
}//end empty function
void print()
{
printf("%s%s\n", "First name = ", record.f_name);
printf("%s%s\n", "Last name = ", record.l_name);
printf("%s%s\n", "Address = ",record.address);
printf("%s%s\n", "City = ", record.city);
printf("%s%s\n", "Post code = ", record.postcode);
printf("%s%s\n", "Country = ", record.country);
printf("%s%s\n", "Home phone = ", record.home_phone);
printf("%s%s\n", "Work phone = ", record.work_phone);
printf("%s%s\n", "Mobile phone = ", record.mobile_phone);
printf("%s%s\n", "Email = ", record.email);
printf("\n");
}
void view()
{
FILE *viewPtr;
system("cls");
if((viewPtr=fopen("information.txt","r"))== NULL){
printf("File could not be opened.\n");
}//end if
else{
rewind(viewPtr);
while(!feof(viewPtr)){
record.f_name[0]='\0';
record.l_name[0]='\0';
record.address[0]='\0';
record.city[0]='\0';
record.postcode[0]='\0';
record.country[0]='\0';
record.home_phone[0]='\0';
record.work_phone[0]='\0';
record.mobile_phone[0]='\0';
record.email[0]='\0';
fread(&record, sizeof(record),1,viewPtr);
if(record.f_name[0]!='\0'){
print();
}
else {
break;
}
}//end while
fclose(viewPtr);
}//end else
system("pause");
}
void sort()
{
FILE *temp;
}