EMERGENCY!!!How to make a database using string function in C

askmewhy25's Avatar, Join Date: Jan 2010
Go4Expert Member
I have a homework which should have the following:
  • program stores strings of arrays. strings can be names, addresses, etc.
  • program shows selection screen that allows the user to enter strings(max. of 16 strings have a maximum of 128 characters), remove a string from the database, view string s in the database, search a string and quit the program.
  • last the program allow the user to save strings and load strings to and from a text file. this requirements requires the use of I/O
askmewhy25's Avatar, Join Date: Jan 2010
Go4Expert Member
Code:
#include<stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

typedef struct {
		char name[30];
		char company[50];
		char address[200];
		char pin[7];
		char web[30];
		}entry;
char name[30];char company[50];											
FILE *fpt;int menu(void);
entry *ptr,commodity;
int n=sizeof(entry);char ch,y;
void edit(entry *);
void main()
{
	int choice;
	do
	{
	choice=menu();
	switch(choice)
	{
		case 1:ptr=(entry *)malloc(sizeof(entry));
			fpt=fopen("data5.bin","a");
			printf("\nEnter the name of the commodity:");
			scanf("%s",ptr->name);
			printf("\nEnter the name of the producing company:");
			scanf("%s",ptr->company);
			printf("\nEnter the address of the producing company:");
			scanf("%s",ptr->address);
			printf("\nEnter the pincode:");
			scanf("%s",ptr->pin);
			printf("\nEnter the website of the producing company:");
			scanf("%s",ptr->web);
			fwrite(ptr,n,1,fpt);printf("ENTERED\n");
			fclose(fpt);
			continue;
		case 2:ptr=(entry *)malloc(sizeof(entry)); 
				fpt=fopen("data5.bin","r+");
		   do 
		   {
  			if (fread(&ptr->name, sizeof(ptr->name), 1, fpt) == 1 &&
      	fread(&ptr->company, sizeof(ptr->company), 1, fpt) == 1 &&
      	fread(&ptr->address, sizeof(ptr->address), 1, fpt) == 1 &&
      	fread(&ptr->pin, sizeof(ptr->pin), 1, fpt) == 1 && 
      	fread(&ptr->web, sizeof(ptr->web), 1, fpt) == 1)
      			{
    					printf("\n\nThe name of the commodity:");
						printf("%s",ptr->name);
						printf("\nThe name of the producing company:");
						printf("%s",ptr->company);
						printf("\nThe address of the producing company:");
						printf("%s",ptr->address);
						printf("\nPincode:");
						printf("%s",ptr->pin);
						printf("\nWebsite of the producing company:");
						printf("%s",ptr->web);
						printf("\nWant to EDIT this entry?(Enter y/n):");
						ch=getchar();
						if(ch==y) 
							edit(ptr);
			     }
   else if (feof(fpt)) 
          {
    printf("\n\nfinished reading file!\n");
    break;
    }
   else {
    printf("an error occured while reading the file!\n");
    break;
  	 }
} while (1);
		       fclose(fpt);continue;
	   case 3:printf("\nThank You for using!");exit(1);      								
	}
	}while(choice==1||choice==2);
	getch();
}
int menu(void)
{
	int choice;
	do{
		printf("Enter your choice:\n");
		printf("1.ADD a entry\n");
		printf("2.DISPLAY cum EDIT\n");
		printf("3.EXIT\n");
		scanf("%d",&choice);
	}while(choice!=1 && choice!=2 && choice!=3);
	return(choice);
}
void edit(entry *ptr)
{
	printf("\nWant to EDIT name of commodity?(y/n):");
	ch=getchar();
	if(ch==y)
	{		
			printf("\nEnter new commodity name:");
			scanf("%s",name);
			ptr->name=name;
	}
	printf("\nWant to EDIT name of company?(y/n):");
	ch=getchar();
	if(ch==y)
	{		
			printf("\nEnter new company name:");
			scanf("%s",company);
			ptr->company=company;
	}                      //....etc..etc.
	fwrite(ptr,n,1,fpt);
	return;
}

Last edited by shabbir; 29Jan2010 at 18:14.. Reason: Code blocks
Gene Poole's Avatar, Join Date: Nov 2009
Contributor
What, specifically, is the problem?
askmewhy25's Avatar, Join Date: Jan 2010
Go4Expert Member
my program does not compile..there are errors in line 102 and 110..

ptr->name=name;
ptr->company=company;

these are the code which i am having trouble..
Gene Poole's Avatar, Join Date: Nov 2009
Contributor
Those are pointers to arrays of characters. the equal ('=') operator only works on POD (plain old data) types or classes that implement the equal operator. For C-strings, you need the standard C library string copy functions like strncpy():

Code:
  strncpy(ptr->name,name,29);

  //...

  strncpy(ptr->company,company,49);