home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / qc_prog / chap10 / phone.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-04-10  |  2.7 KB  |  115 lines

  1. /* phone.c  -- a telephone number mini-database that  */
  2. /*             demonstrates fseek()                   */
  3.  
  4. #include <stdio.h>          /* for FILE, BUFSIZ, NULL */
  5.  
  6. #define MAXL (128)
  7. char Name[MAXL];
  8. char Number[MAXL];
  9. char File[] = "C:\\TMP\\PHONE.DB";
  10. int  Count;
  11. FILE *Fp;
  12. int  Distance = (MAXL * MAXL);
  13.  
  14. main(argc, argv)
  15. int argc;
  16. char *argv[];
  17. {
  18.     if (argc == 1)
  19.         Ask();
  20.     else
  21.         Find(argv[1]);
  22.  
  23.     return (0);
  24.     }
  25.  
  26. Find(char *str)
  27.     {
  28.     int i;
  29.  
  30.     if ((Fp = fopen(File, "r")) == NULL)
  31.         {
  32.         fprintf(stderr, "\"%s\": Can't Read\n", File);
  33.         exit (1);
  34.         }
  35.     if (fread(&Count, 1, sizeof(int), Fp) != sizeof(int))
  36.         {
  37.         fprintf(stderr,"\"%s\": Error Reading\n", File);
  38.         exit (1);
  39.         }
  40.     for (i = 0; i < Count; i++)
  41.         {
  42.         fread(Name, 1, MAXL, Fp);
  43.         fread(Number, 1, MAXL, Fp);
  44.         if (ferror(Fp))
  45.             {
  46.             fprintf(stderr, "\"%s\": Error Reading.\n", File);
  47.             exit (1);
  48.             }
  49.         if (strcmp(*str, *Name) == 0)
  50.             {
  51.             printf("Name: %s\n", Name);
  52.             printf("Number: %s\n", Number);
  53.             return;
  54.             }
  55.         }
  56.     fprintf(stderr, "\"%s\": Not in database.\n", str);
  57.     return;
  58. }
  59.  
  60. Ask()
  61. {
  62.     if ((Fp = fopen(File, "r+")) == NULL)
  63.         Make();
  64.     else if (fread(&Count, 1, sizeof(int),Fp) != sizeof(int))
  65.         {
  66.         fprintf(stderr, "\"%s\": Error Reading\n", File);
  67.         exit (1);
  68.         }
  69.     printf("Name: ");
  70.     if (gets(Name) == NULL || *Name == '\0')
  71.         return;
  72.     printf("Number: ");
  73.     if (gets(Number) == NULL || *Number == '\0')
  74.         return;
  75.     if (fseek(Fp, (long)(Distance * Count), SEEK_CUR) != 0)
  76.         {
  77.         fprintf(stderr, "\"%s\": Error Seeking.\n", File);
  78.         exit (1);
  79.         }
  80.     fwrite(Name, 1, MAXL, Fp);
  81.     fwrite(Number, 1, MAXL, Fp);
  82.     if (ferror(Fp))
  83.         {
  84.         fprintf(stderr, "\"%s\": Error Writing.\n", File);
  85.         exit (1);
  86.         }
  87.     if (fseek(Fp, 0L, SEEK_SET) != 0)
  88.         {
  89.         fprintf(stderr, "\"%s\": Error Seeking.\n", File);
  90.         exit (1);
  91.         }
  92.     ++Count;
  93.     if (fwrite(&Count, 1, sizeof(int),Fp) != sizeof(int))
  94.         {
  95.         fprintf(stderr, "\"%s\": Error Writing\n", File);
  96.         exit (1);
  97.         }
  98.     return;
  99. }
  100.  
  101. Make()
  102. {
  103.     if ((Fp = fopen(File, "w+")) == NULL)
  104.         {
  105.         fprintf(stderr, "\"%s\": Can't Create\n", File);
  106.         exit (1);
  107.         }
  108.     Count = 0;
  109.     if (fwrite(&Count, 1, sizeof(int), Fp) != sizeof(int))
  110.         {
  111.         fprintf(stderr," \"%s\": Error Creating\n", File);
  112.         exit (1);
  113.         }
  114. }
  115.