home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / database / cdbms / posttime.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-06-01  |  2.3 KB  |  103 lines

  1. /* ------------------- posttime.c ---------------------- */
  2.  
  3. #include <stdio.h>
  4. #include "keys.h"
  5. #include "cdata.h"
  6. #include "cbs.c1"
  7.  
  8. char *sc;
  9. char *malloc();
  10. int fl[] = {CLIENTS, CONSULTANTS, PROJECTS, ASSIGNMENTS, -1};
  11. int els [] = {CONSULTANT_NO, CONSULTANT_NAME, 
  12.                 PROJECT_NO, PROJECT_NAME, HOURS, EXPENSE, 0};
  13. struct clients cl;
  14. struct consultants cs;
  15. struct projects pr;
  16. struct assignments as;
  17.  
  18. main()
  19. {
  20.     int term = '\0';
  21.     int edcons(), edproj();
  22.     long atol();
  23.     long exp, rt, time_chg;
  24.     int hrs;
  25.     
  26.     db_open("", fl);
  27.     sc = malloc(epos(0, els));
  28.     clrrcd(sc, els);
  29.     init_screen("Time & Expenses", els, sc);
  30.     edit(CONSULTANT_NO, edcons);    /* consultant number     */
  31.     protect(CONSULTANT_NAME, TRUE);    /* consultant name         */
  32.     edit(PROJECT_NO, edproj);        /* project number         */
  33.     protect(PROJECT_NAME, TRUE);    /* project name            */
  34.     while (term != ESC)    {
  35.         term = data_entry();
  36.         switch (term)    {
  37.             /* ----------- GO --------------- */
  38.             case F1:    
  39.                 hrs = atoi(sc + epos(HOURS, els));
  40.                 exp = atol(sc + epos(EXPENSE, els));
  41.                 rt = atol(as.rate);
  42.                 time_chg = rt * hrs;
  43.                 clrrcd(sc, els);
  44.                 sprintf(cl.amt_due, "%8ld",
  45.                         atol(cl.amt_due)+time_chg+exp);
  46.                 rtn_rcd(CLIENTS, &cl);
  47.                 sprintf(pr.amt_expended, "%9ld",
  48.                         atol(pr.amt_expended)+time_chg+exp);
  49.                 rtn_rcd(PROJECTS, &pr);
  50.                 break;
  51.             case ESC:
  52.                 if (spaces(sc))
  53.                     break;
  54.                 clrrcd(sc, els);
  55.                 term = '\0';
  56.                 break;
  57.             default:
  58.                 break;
  59.         }
  60.     }
  61.     clear_screen();
  62.     free(sc);
  63.     db_cls();
  64. }
  65.  
  66. /* -------- consultant number ---------- */
  67. edcons(s)
  68. char *s;
  69. {
  70.     if (find_rcd(CONSULTANTS, 1, s, &cs) == ERROR)    {
  71.         dberror();
  72.         return ERROR;
  73.     }
  74.     rcd_fill(&cs, sc, file_ele[CONSULTANTS], els);
  75.     put_field(CONSULTANT_NAME);
  76.     return OK;
  77. }
  78.  
  79.  
  80.  
  81. /* -------- project number ---------- */
  82. edproj(s)
  83. char *s;
  84. {
  85.     char consproj [11];
  86.  
  87.     if (find_rcd(PROJECTS, 1, s, &pr) == ERROR)    {
  88.         dberror();
  89.         return ERROR;
  90.     }
  91.     rcd_fill(&pr, sc, file_ele[PROJECTS], els);
  92.     put_field(PROJECT_NAME);
  93.     strcpy(consproj, cs.consultant_no);
  94.     strcat(consproj, pr.project_no);
  95.     if (find_rcd(ASSIGNMENTS, 1, consproj, &as) == ERROR)    {
  96.         error_message("Consultant not assigned to project");
  97.         return ERROR;
  98.     }
  99.     find_rcd(CLIENTS, 1, pr.client_no, &cl);
  100.     return OK;
  101. }
  102.  
  103.