#include #include #include "manager.h" /* Manager: hire/fire technicians [7] change service rate [5] financial report (from transactions) [0] add_employee(); remove_employee(); set_service_rate(); do_financial_report(); */ char *stripnl(char *s) { int l; if(s[l=(strlen(s)-1)] == '\n') s[l]=0; return s; } int add_employee(/*int TechN,*/ char *FName, char *LName, int SSN, char *Position, float Wage) { EXEC SQL SET TRANSACTION READ WRITE; EXEC SQL INSERT INTO TECHNICIANS (FName, LName, SSN, Position, Wage) VALUES(:FName,:LName,:SSN,:Position,:Wage); /* EXEC SQL INSERT INTO TECHNICIANS (Tech#, FName, LName, SSN, Position, Wage) VALUES(:TechN,:FName,:LName,:SSN,:Position,:Wage);*/ if(sqlca.sqlcode < 0) return 0; EXEC SQL COMMIT; return 1; } int remove_employee(int TechN) { EXEC SQL SET TRANSACTION READ WRITE; EXEC SQL DELETE FROM TECHNICIANS WHERE Tech# = :TechN; if(sqlca.sqlcode < 0) return 0; EXEC SQL COMMIT; return 1; } int set_service_rate(char *Service, float newRate) { EXEC SQL SET TRANSACTION READ WRITE; EXEC SQL UPDATE SERVICES SET Rate = :newRate WHERE Name = :Service; if(sqlca.sqlcode < 0) return 0; EXEC SQL COMMIT; return 1; } int set_service_hours(char *Service, int newHours) { EXEC SQL SET TRANSACTION READ WRITE; EXEC SQL UPDATE SERVICES SET Hours = :newHours WHERE Name = :Service; if(sqlca.sqlcode < 0) return 0; EXEC SQL COMMIT; return 1; } void do_add_employee() { char FName[16], LName[16], Position[26], temp[26]; long int TechN, SSN; float Wage; printf("Adding a new technician.\n"); printf("First name: "); stripnl(fgets(FName, 16, stdin)); printf("Last name: "); stripnl(fgets(LName, 16, stdin)); printf("SSN: "); fgets(temp, 26, stdin); SSN = atol(temp); printf("Position: "); stripnl(fgets(Position, 26, stdin)); printf("Wage: "); fgets(temp, 26, stdin); Wage = atof(temp); /* if(add_employee(TechN, FName, LName, SSN, Position, Wage)) */ if(add_employee(FName, LName, SSN, Position, Wage)) printf("%s %s added.\n", FName, LName); else printf("Sorry, an error occured adding %s %s.\n", FName, LName); } void do_remove_employee() { char temp[26]; long int TechN; temp[0] = '\n'; printf("Tech# to remove [ for a list, 'Q' to abort]: "); fgets(temp, 26, stdin); if(temp[0]=='\n') { print_emp_list(); printf("Tech# to remove ['Q' to abort]: "); fgets(temp, 26, stdin); } if(temp[0]=='Q' || temp[0]=='q') return; TechN = atol(temp); if(remove_employee(int TechN)) printf("Technician #%d removed.\n", TechN); else printf("Sorry, an error occured removing Technician #%d.\n", TechN); } void do_update_service() { char Name[31], temp[31]; long int Hours, newHours; float Rate, newRate; temp[0] = '\n'; printf("Service to update [ for a list, 'Q' to abort]: "); fgets(temp, 31, stdin); if(temp[0]=='\n') { print_serv_list(); printf("Service to update ['Q' to abort]: "); fgets(temp, 31, stdin); } if(temp[0]=='Q' || temp[0]=='q') return; strcpy(Name, temp); EXEC SQL SELECT Hours,Rate INTO :Hours,:Rate FROM Services WHERE Name=:Name; printf("Hours [%d]: ", Hours); fgets(temp, 31, stdin); if(temp[0]!='\n') NewHours = atoi(temp); printf("Rate [%.2f]: ", Rate); fgets(temp, 31, stdin); if(temp[0]!='\n') NewRate = atof(temp); if(Hours!=newHours && set_service_hours(Name, newHours)) printf("New hours set.\n"); else printf("Sorry, an error occured setting the new hours.\n"); if(Rate!=newRate && set_service_rate(Name, newRate)) printf("New rate set.\n"); else printf("Sorry, an error occured setting the new rate.\n"); } void do_financial_report() { char pid[15], sid[15], service[30]; int qty, TechN, hours; float cost, price; float product_gross, product_cost, service_gross, service_cost; product_gross = product_cost = service_gross = service_cost = 0.0; EXEC SQL DECLARE Prod CURSOR FOR SELECT PID, Qty FROM PRODUCTS_SOLD; EXEC SQL OPEN Prod; EXEC SQL FETCH Prod INTO :pid,:qty; while(sqlca.sqlcode == 0) { EXEC SQL SELECT Price INTO :price FROM Products WHERE PID=:pid; EXEC SQL SELECT Sell_Price INTO :cost FROM Supplier_of WHERE PID=:pid; product_gross += qty*price; product_cost += qty*cost; EXEC SQL FETCH Prod INTO :pid,:qty; } EXEC SQL CLOSE Prod; EXEC SQL DECLARE Serv CURSOR FOR SELECT Service, Tech# FROM SERVICES_DONE; EXEC SQL OPEN Serv; EXEC SQL FETCH Serv INTO :service,:TechN; while(sqlca.sqlcode == 0) { EXEC SQL SELECT Rate,Hours INTO :price,:hours FROM Services WHERE Name=:service; EXEC SQL SELECT Wage INTO :cost FROM Technicians WHERE Tech#=:TechN; service_gross += hours*price; service_cost += hours*cost; EXEC SQL FETCH Serv INTO :service,:TechN; } EXEC SQL CLOSE Serv; EXEC SQL COMMIT; printf("product_gross = %f\n", product_gross); printf("product_cost = %f\n", product_cost); printf("service_gross = %f\n", service_gross); printf("service_cost = %f\n", service_cost); printf("Net income from products: %f\n", product_gross-product_cost); printf("Net income from services: %f\n", service_gross-service_cost); printf("Total gross income: %f\n", product_gross+service_gross); printf("Total costs: %f\n", product_cost+service_cost); printf("Overall net income: %f\n", (product_gross-product_cost)+(service_gross-service_cost)); } void print_emp_list() { } void print_serv_list() { }