Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <mem.h>
- //structs
- struct Date{
- int day;
- int month;
- int year;
- };
- struct Time{
- int hour;
- int min;
- };
- typedef struct {
- int employeeID;
- struct Date date;
- struct Time startTime;
- struct Time endTime;
- }worktime;
- //variables
- worktime worker[];
- FILE *fptr;
- int idx=3;
- int numb=0;
- char month[12][30]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
- //functions
- void openFile(char *fPath, char mode[]){
- fptr=fopen(fPath, mode);
- if(fptr==NULL){
- printf("Unable to open/create the file.");
- }
- }
- void closeFile(){
- if(fclose(fptr)==EOF) printf("Unable to close the file.");
- }
- void writeData(int largc, char *largv[]){
- if(((largc-3)%4!=0)){
- printf("Incorrect number of arguments!");
- return;
- }
- char split[300];
- char *seg;
- while(idx<largc){
- //ID
- worker[numb].employeeID=atoi(largv[idx]);
- idx++;
- //date
- strcpy(split, largv[idx]);
- seg = strtok(split, "/");
- worker[numb].date.day=atoi(seg);
- seg = strtok(NULL, "/");
- worker[numb].date.month=atoi(seg);
- seg = strtok(NULL, "/");
- worker[numb].date.year=atoi(seg);
- idx++;
- //start time
- strcpy(split, largv[idx]);
- seg = strtok(split, ":");
- worker[numb].startTime.hour=atoi(seg);
- seg = strtok(NULL, ":");
- worker[numb].startTime.min=atoi(seg);
- idx++;
- //end time
- strcpy(split, largv[idx]);
- seg = strtok(split, ":");
- worker[numb].endTime.hour=atoi(seg);
- seg = strtok(NULL, ":");
- worker[numb].endTime.min=atoi(seg);
- idx++;
- numb++;
- }
- openFile(largv[1], "a");
- int fidx=0;
- while(fidx<numb){
- fprintf(fptr, "\"%s", month[worker[fidx].date.month-1]);
- fprintf(fptr, " %d", worker[fidx].date.day);
- fprintf(fptr, " %d\"", worker[fidx].date.year);
- fprintf(fptr, ",\"%d\"", worker[fidx].employeeID);
- fprintf(fptr, ",\"%d:%d\"", worker[fidx].startTime.hour, worker[fidx].startTime.min);
- fprintf(fptr, ",\"%d:%d\"\n", worker[fidx].endTime.hour, worker[fidx].endTime.min);
- fidx++;
- }
- }
- int getData(char *largv[]){
- char lineRead[300];
- char *seg;
- char *date;
- openFile(largv[1], "r");
- //file into struct
- while (!feof(fptr)){
- if(fgets(lineRead, 300, fptr)==NULL)break;
- //get date
- seg=strtok(lineRead, "\"");
- if(*seg=='\n') break;
- date=seg;
- //get after date
- seg=strtok(NULL, "\"");
- seg=strtok(NULL, "\"");
- worker[numb].employeeID=atoi(seg);
- seg=strtok(NULL, "\"");
- seg=strtok(NULL, ":");
- worker[numb].startTime.hour=atoi(seg);
- seg=strtok(NULL, "\"");
- worker[numb].startTime.min=atoi(seg);
- seg=strtok(NULL, "\"");
- seg=strtok(NULL, ":");
- worker[numb].endTime.hour=atoi(seg);
- seg=strtok(NULL, "\"");
- worker[numb].endTime.min=atoi(seg);
- //go back to date
- date=strtok(date, " ");
- //convert month to int
- int i=0;
- while(strcmp(month[i], date)!=0){
- i++;
- }
- worker[numb].date.month=i+1;
- date=strtok(NULL, " ");
- worker[numb].date.day=atoi(date);
- date=strtok(NULL, "\"");
- worker[numb].date.year=atoi(date);
- numb++;
- }
- return numb;
- }
- void printData(char *largv[]){
- getData(largv);
- int i=0;
- while(i<numb){
- 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);
- i++;
- }
- }
- void searchData(char *largv[]){
- int numb = getData(largv);
- int i=0;
- while(i<numb){
- if(atoi(largv[3])==worker[i].employeeID){
- 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);
- return;
- }
- i++;
- }
- printf("Couldn't find a matching employee ID.");
- }
- int main(int argc, char *argv[]){ ;
- if(strcmp(argv[2],"/a")==0) writeData(argc, argv);
- else if(strcmp(argv[2],"/p")==0) printData(argv);
- else if (strcmp(argv[2],"/s")==0) searchData(argv);
- return 0;
- }
- //by Jaroslaw Janas
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement