Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <mem.h>
  4.  
  5. //structs
  6. struct Date{
  7.     int day;
  8.     int month;
  9.     int year;
  10. };
  11.  
  12. struct Time{
  13.     int hour;
  14.     int min;
  15. };
  16.  
  17. typedef struct {
  18.     int employeeID;
  19.     struct Date date;
  20.     struct Time startTime;
  21.     struct Time endTime;
  22. }worktime;
  23.  
  24. //variables
  25. worktime worker[];
  26. FILE *fptr;
  27. int idx=3;
  28. int numb=0;
  29. char month[12][30]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
  30.  
  31. //functions
  32. void openFile(char *fPath, char mode[]){
  33.     fptr=fopen(fPath, mode);
  34.     if(fptr==NULL){
  35.         printf("Unable to open/create the file.");
  36.     }
  37. }
  38.  
  39. void closeFile(){
  40.     if(fclose(fptr)==EOF) printf("Unable to close the file.");
  41. }
  42.  
  43. void writeData(int largc, char *largv[]){
  44.     if(((largc-3)%4!=0)){
  45.         printf("Incorrect number of arguments!");
  46.         return;
  47.     }
  48.     char split[300];
  49.     char *seg;
  50.     while(idx<largc){
  51.         //ID
  52.         worker[numb].employeeID=atoi(largv[idx]);
  53.         idx++;
  54.         //date
  55.         strcpy(split, largv[idx]);
  56.  
  57.         seg = strtok(split, "/");
  58.         worker[numb].date.day=atoi(seg);
  59.         seg = strtok(NULL, "/");
  60.         worker[numb].date.month=atoi(seg);
  61.         seg = strtok(NULL, "/");
  62.         worker[numb].date.year=atoi(seg);
  63.         idx++;
  64.         //start time
  65.         strcpy(split, largv[idx]);
  66.  
  67.         seg = strtok(split, ":");
  68.         worker[numb].startTime.hour=atoi(seg);
  69.         seg = strtok(NULL, ":");
  70.         worker[numb].startTime.min=atoi(seg);
  71.         idx++;
  72.         //end time
  73.         strcpy(split, largv[idx]);
  74.  
  75.         seg = strtok(split, ":");
  76.         worker[numb].endTime.hour=atoi(seg);
  77.         seg = strtok(NULL, ":");
  78.         worker[numb].endTime.min=atoi(seg);
  79.         idx++;
  80.         numb++;
  81.     }
  82.     openFile(largv[1], "a");
  83.     int fidx=0;
  84.     while(fidx<numb){
  85.         fprintf(fptr, "\"%s", month[worker[fidx].date.month-1]);
  86.         fprintf(fptr, " %d", worker[fidx].date.day);
  87.         fprintf(fptr, " %d\"", worker[fidx].date.year);
  88.         fprintf(fptr, ",\"%d\"", worker[fidx].employeeID);
  89.         fprintf(fptr, ",\"%d:%d\"", worker[fidx].startTime.hour, worker[fidx].startTime.min);
  90.         fprintf(fptr, ",\"%d:%d\"\n", worker[fidx].endTime.hour, worker[fidx].endTime.min);
  91.         fidx++;
  92.     }
  93. }
  94.  
  95. int getData(char *largv[]){
  96.     char lineRead[300];
  97.     char *seg;
  98.     char *date;
  99.     openFile(largv[1], "r");
  100.     //file into struct
  101.     while (!feof(fptr)){
  102.         if(fgets(lineRead, 300, fptr)==NULL)break;
  103.         //get date
  104.         seg=strtok(lineRead, "\"");
  105.         if(*seg=='\n') break;
  106.         date=seg;
  107.         //get after date
  108.         seg=strtok(NULL, "\"");
  109.         seg=strtok(NULL, "\"");
  110.         worker[numb].employeeID=atoi(seg);
  111.         seg=strtok(NULL, "\"");
  112.         seg=strtok(NULL, ":");
  113.         worker[numb].startTime.hour=atoi(seg);
  114.         seg=strtok(NULL, "\"");
  115.         worker[numb].startTime.min=atoi(seg);
  116.         seg=strtok(NULL, "\"");
  117.         seg=strtok(NULL, ":");
  118.         worker[numb].endTime.hour=atoi(seg);
  119.         seg=strtok(NULL, "\"");
  120.         worker[numb].endTime.min=atoi(seg);
  121.         //go back to date
  122.         date=strtok(date, " ");
  123.         //convert month to int
  124.         int i=0;
  125.         while(strcmp(month[i], date)!=0){
  126.             i++;
  127.         }
  128.         worker[numb].date.month=i+1;
  129.         date=strtok(NULL, " ");
  130.         worker[numb].date.day=atoi(date);
  131.         date=strtok(NULL, "\"");
  132.         worker[numb].date.year=atoi(date);
  133.         numb++;
  134.     }
  135.     return numb;
  136. }
  137.  
  138. void printData(char *largv[]){
  139.     getData(largv);
  140.     int i=0;
  141.     while(i<numb){
  142.         printf("Date: %d/%d/%d Employee: %d started at %d:%d and finished at %d:%d\n", worker[i].date.day, worker[i].date.month, worker[i].date.year, worker[i].employeeID, worker[i].startTime.hour, worker[i].startTime.min, worker[i].endTime.hour, worker[i].endTime.min);
  143.         i++;
  144.     }
  145. }
  146.  
  147. void searchData(char *largv[]){
  148.     int numb = getData(largv);
  149.     int i=0;
  150.     while(i<numb){
  151.         if(atoi(largv[3])==worker[i].employeeID){
  152.             printf("Date: %d/%d/%d Employee: %d started at %d:%d and finished at %d:%d", worker[i].date.day, worker[i].date.month, worker[i].date.year, worker[i].employeeID, worker[i].startTime.hour, worker[i].startTime.min, worker[i].endTime.hour, worker[i].endTime.min);
  153.             return;
  154.         }
  155.         i++;
  156.     }
  157.     printf("Couldn't find a matching employee ID.");
  158. }
  159.  
  160. int main(int argc, char *argv[]){ ;
  161.     if(strcmp(argv[2],"/a")==0) writeData(argc, argv);
  162.     else if(strcmp(argv[2],"/p")==0) printData(argv);
  163.     else if (strcmp(argv[2],"/s")==0) searchData(argv);
  164.     return 0;
  165. }
  166. //by Jaroslaw Janas
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement