// dbInterface.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include const int iShortStr=50, iLongStr=500; char charbuffer[iLongStr]; char charbuffer2[iLongStr]; //FUNC void mgets(char* inchar, int maxLength); //CONNECT VARIABLES EXEC SQL BEGIN DECLARE SECTION; char ConnectionString [] = "postgres@127.0.0.1:5432"; char Login [] = "postgres"; char Password [] = "123456"; EXEC SQL END DECLARE SECTION; //DB VARIABLES EXEC SQL BEGIN DECLARE SECTION; int iNum1; int iNum2; int iNum3; char cData1[iLongStr]; char cData2[iLongStr]; char cData3[iLongStr]; char cData4[iLongStr]; EXEC SQL END DECLARE SECTION; EXEC SQL WHENEVER SQLERROR SQLPRINT; bool login() { printf("Date Base Login \n"); printf("Login: "); mgets(Login,iShortStr); printf("Pass: "); mgets(Password,iShortStr); EXEC SQL CONNECT TO :ConnectionString USER :Login using :Password; if( sqlca.sqlcode != 0 || strncmp(sqlca.sqlstate,"00",2)) return false; else return true; } int m_sel_client() { system("clear"); printf("SELECT CLIENT\n"); printf("Name: \n"); mgets(cData1,iShortStr); if(!strcmp(cData1,"*")) { EXEC SQL DECLARE Cursor CURSOR FOR SELECT fio,adress FROM client ORDER BY fio; EXEC SQL OPEN Cursor; while(1) { EXEC SQL FETCH Cursor INTO :cData2, :cData3; if (sqlca.sqlcode == ECPG_NOT_FOUND || strncmp(sqlca.sqlstate,"00",2)) break; printf("\t %s \t %s\n", cData2, cData3); } EXEC SQL CLOSE Cursor; } else { EXEC SQL SELECT fio,adress INTO :cData2, :cData3 FROM client WHERE fio = :cData1; printf("\t %s \t %s\n", cData2, cData3); } return false; } void m_select() { char sitem[512]; while(1) { printf("1. SELECT CLIENTS by Client Name\n"); printf("2. SELECT ORDERS by Client Name\n"); printf("3. SELECT PROVIDERS by Provider Name\n"); printf("4. SELECT STUFF by Stuff Name\n"); printf("5. SELECT TRANSPORT by Transport Name\n"); printf("6. Dynamic sql insert\n"); printf("7. Dynamic sql select one\n"); printf("8. Dynamic sql select more than one\n"); printf("9. QUIT\n"); printf("choose menu item > "); if(scanf("%s", &sitem)!=1) break; if (strlen(sitem)>1) continue; switch(sitem[0]) { case '1': m_sel_client(); break; } } } int m_ins_client(){ system("clear"); printf("INSERT CLIENT\n"); printf("Name: \n"); mgets(cData1,iShortStr); printf("Adress: \n"); mgets(cData2,iLongStr); EXEC SQL SELECT count(fio) INTO :iNum1, :cData2 FROM client WHERE fio = :cData1; if(iNum1 == 0) printf("ERROR: CLIENT ALREADY EXISTS!\n"); else EXEC SQL INSERT INTO client(fio, adress) VALUES(:cData1, :cData2); EXEC SQL COMMIT; return false; } int m_ins_order(){ system("clear"); printf("INSERT ORDER\n"); printf("Client Name: \n"); mgets(cData1,iShortStr); printf("Store Name: \n"); mgets(cData2,iShortStr); printf("Stuff Name: \n"); mgets(cData3,iShortStr); printf("Provider Name: \n"); mgets(cData4,iShortStr); //iNum1 = getMaxIdFromTable("order"); EXEC SQL INSERT INTO order(id, client_id, store_name, stuff_name, provider_name) VALUES(:iNum1, :cData1, :cData2); EXEC SQL COMMIT; // ORDER //id, client_id, store_name, stuff_name, provider_name return false; } int m_ins_transport(){return false;} int m_ins_delivery(){return false;} int m_ins_provider(){return false;} int m_ins_providerstuff(){return false;} int m_ins_store(){return false;} int m_ins_stuffonstore(){return false;} int m_insert() { /* TRANSPORT number, capacity DELIVERY data, order_id, transport_number PROVIDER name, adress PROVIDER STUFF prov_name, stuff_name, stuff_amount, stuff_price STUFF name, info STORE name, adress */ char sitem[512]; while(1) { system("clear"); printf("INSERT MENU\n"); printf("1. INSERT CLIENT\n"); printf("2. INSERT ORDER\n"); printf("3. INSERT TRANSPORT\n"); printf("4. INSERT DELIVERY\n"); printf("5. INSERT PROVIDER\n"); printf("6. INSERT PROVIDER STUFF\n"); printf("7. INSERT STORE\n"); printf("8. INSERT STUFF ON STORE\n"); printf("9. BACK\n"); printf("choose menu item > "); if(scanf("%s", &sitem)!=1) break; if (strlen(sitem)>1) continue; switch(sitem[0]) { case '1': m_ins_client(); break; case '2': m_ins_order(); break; case '3': m_ins_transport(); break; case '4': m_ins_delivery(); break; case '5': m_ins_provider(); break; case '6': m_ins_providerstuff(); break; case '7': m_ins_store(); break; case '8': m_ins_stuffonstore(); break; case '9': return false; default: break; } } } void m_update() {} void m_delete() {} int menu() { char sitem[512]; while(1) { system("clear"); printf("%s","LOGIN OK \n"); printf("%s","WELCOME TO DATEBASE \n\n"); printf("MAIN MENU\n"); printf("1. SELECT\n"); printf("2. INSERT\n"); printf("3. UPDATE\n"); printf("4. DELETE\n"); printf("5. delete values\n"); printf("6. Dynamic sql insert\n"); printf("7. Dynamic sql select one\n"); printf("8. Dynamic sql select more than one\n"); printf("9. QUIT\n"); printf("choose menu item > "); if(scanf("%s", &sitem)!=1) break; if (strlen(sitem)>1) continue; switch(sitem[0]) { case '1': m_select(); break; case '2': m_insert(); break; case '3': m_update(); break; case '4': m_delete(); break; case '5': break; case '6': break; case '7': break; case '8': break; case '9': return false; default: break; } } return true; } int main() { while (1) { if(login()) { system("clear"); while(menu()){}; EXEC sql disconnect; break; } else { system("clear"); printf("%s","LOGIN FAILED \n"); printf("%s","TRY AGAIN? (y/n) \n"); mgets(charbuffer,1); system("clear"); if(!strcmp(charbuffer,"n")) break; } } return 0; } //////////////////////////// //////////////////////////// //////////////FUNCTIONS //////////////////////////// void mgets(char* inchar, int maxLength) { gets(inchar); if (strlen(inchar) > maxLength) { printf("%s%d%s", "Warring: input length exceeded, converting to maximum acceptable length - ",maxLength, "\n"); inchar[maxLength] = '\0'; } }