Guest User

Untitled

a guest
Nov 2nd, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. /* ds0112Company.ecpg */
  2. /* Diwas Sharma */
  3. /* Due: 2017-10-31 */
  4. /* CS 687-01 */
  5.  
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <stdlib.h>
  9.  
  10. EXEC SQL INCLUDE sqlca;
  11.  
  12. EXEC SQL WHENEVER SQLERROR sqlprint;
  13.  
  14. int main(int argc, char *argv[])
  15. {
  16. if(argc <= 1){
  17. printf("Insufficient arguments\n");
  18. return 0;
  19. }
  20.  
  21. /* Parse argument */
  22. if(strcmp(argv[1], "-insert") == 0){
  23. EXEC SQL BEGIN DECLARE SECTION;
  24. char *ssn=NULL, *fname=NULL, *lname=NULL, *project_name=NULL;
  25. char *mgr_ssn=NULL, *mgr_fname=NULL, *mgr_lname=NULL;
  26. int pno, dnum;
  27. float hours, retrived_hours=0;
  28.  
  29. char *iterator_ssn=NULL, *max_ssn=NULL, *max_fname=NULL, *max_lname=NULL;
  30. float iterator_hours=0, max_hours=0;
  31. EXEC SQL END DECLARE SECTION;
  32.  
  33. EXEC SQL CONNECT TO unix:postgresql://localhost DATABASE USER USER_NAME USING PASSWORD;
  34.  
  35. /* Assign parameters obtained from system */
  36. ssn = argv[3];
  37. pno = atoi(argv[5]);
  38. hours = atof(argv[7]);
  39.  
  40. /* Retrive employee detail */
  41. EXEC SQL SELECT fname, lname INTO :fname, :lname FROM ds0112.employee WHERE ssn=:ssn;
  42.  
  43. /* Retrive project info */
  44. EXEC SQL SELECT pname, dnum INTO :project_name, :dnum FROM ds0112.project WHERE pnumber=:pno;
  45.  
  46. /* Check if pno already exists */
  47. EXEC SQL SELECT hours INTO :retrived_hours FROM ds0112.works_on WHERE essn=:ssn AND pno=:pno;
  48. if(retrived_hours > 0){
  49. printf("Employee %s %s is already working %f hours in project %s. The operation is rejected.\n", fname, lname, retrived_hours, project_name);
  50. }
  51. else{
  52. /* Check if number of hours is greater than 0.1 */
  53. if(hours < 0.1){
  54. printf("The number of hours should be greater than 0.1\n");
  55. }
  56. else{
  57. /* Perform INSERT */
  58. EXEC SQL INSERT INTO ds0112.works_on VALUES (:ssn, :pno, :hours);
  59.  
  60. printf("Employee %s %s started to work %f hours in project %s.\n", fname, lname, hours, project_name);
  61. }
  62. }
  63.  
  64. /* Display project info */
  65. /* Print project name */
  66. printf("Project name: %s\n", project_name);
  67.  
  68. /* Obtain department info */
  69. EXEC SQL SELECT mgr_ssn INTO :mgr_ssn FROM ds0112.department WHERE dnumber=:dnum;
  70.  
  71. /* Obtain manager information */
  72. EXEC SQL SELECT fname, lname INTO :mgr_fname, :mgr_lname FROM ds0112.employee WHERE ssn=:mgr_ssn;
  73.  
  74. printf("Manager name: %s %s\n", mgr_fname, mgr_lname);
  75.  
  76. /* Store total hours */
  77. float total_hours = 0;
  78.  
  79. /* Make a database cursor for iteration */
  80. EXEC SQL DECLARE works_on_cursor CURSOR FOR SELECT essn, hours FROM ds0112.works_on WHERE pno=:pno;
  81.  
  82. /* Open cursor */
  83. EXEC SQL OPEN works_on_cursor;
  84.  
  85. EXEC SQL WHENEVER NOT FOUND DO BREAK;
  86.  
  87. while (SQLCODE==0)
  88. {
  89. EXEC SQL FETCH IN works_on_cursor INTO :iterator_ssn, :iterator_hours;
  90.  
  91. if(iterator_hours > max_hours){
  92. max_ssn = iterator_ssn;
  93. max_hours=iterator_hours;
  94. }
  95. total_hours += iterator_hours;
  96.  
  97. iterator_ssn = NULL;
  98. iterator_hours = 0;
  99. }
  100. EXEC SQL WHENEVER NOT FOUND CONTINUE;
  101.  
  102. /* Fetch Fname and lname of employee with maximum number of working hours */
  103. EXEC SQL SELECT fname, lname INTO :max_fname, :max_lname FROM ds0112.employee WHERE ssn=:max_ssn;
  104.  
  105. printf("Total number of hours: %f\n", total_hours);
  106. printf("Employee works most on the project is %s %s with number of hours %f\n", max_fname, max_lname, max_hours);
  107.  
  108. /* Close cursor */
  109. EXEC SQL CLOSE works_on_cursor;
  110.  
  111. /* Commit changes and disconnect */
  112. EXEC SQL COMMIT;
  113. EXEC SQL DISCONNECT;
  114. }
  115. else if(strcmp(argv[1], "-delete") == 0){
  116. EXEC SQL BEGIN DECLARE SECTION;
  117. char *ssn=NULL, *fname=NULL, *lname=NULL, *project_name=NULL;
  118. int pno;
  119. float hours, retrived_hours=0;
  120. EXEC SQL END DECLARE SECTION;
  121.  
  122. EXEC SQL CONNECT TO unix:postgresql://localhost DATABASE USER USER_NAME USING PASSWORD;
  123.  
  124. /* Assign parameters obtained from system */
  125. ssn = argv[3];
  126. pno = atoi(argv[5]);
  127.  
  128. /* Retrive employee detail */
  129. EXEC SQL SELECT fname, lname INTO :fname, :lname FROM ds0112.employee WHERE ssn=:ssn;
  130.  
  131. /* Retrive project info */
  132. EXEC SQL SELECT pname INTO :project_name FROM ds0112.project WHERE pnumber=:pno;
  133.  
  134. /* Check if employee works in a project */
  135. EXEC SQL SELECT hours INTO :retrived_hours FROM ds0112.works_on WHERE essn=:ssn AND pno=:pno;
  136. if(retrived_hours == 0){
  137. printf("Employee %s %s was not working on project %s\n", fname, lname, project_name);
  138. }
  139. else{
  140. /* Delete tuple */
  141. EXEC SQL DELETE FROM ds0112.works_on WHERE essn=:ssn AND pno=:pno;
  142.  
  143. printf("Employee %s %s stopped working on project %s\n", fname, lname, project_name);
  144. }
  145.  
  146. /* Perform changes and disconnect */
  147. EXEC SQL COMMIT;
  148. EXEC SQL DISCONNECT;
  149. }
  150. else{
  151. printf("Operation not found\n");
  152. return 0;
  153. }
  154.  
  155. return 0;
  156. }
Add Comment
Please, Sign In to add comment