<prompt> Unda programu ya C ambayo: a. Huunganisha kwenye hifadhidata ya PostgreSQL iliyo na maelezo kuhusu vitabu jina, mwandishi, mwaka wa uchapishaji, aina. b. Hutoa kiolesura cha mstari amri kwa watumiaji ili kuuliza hifadhidata kulingana na vigezo mbalimbali k.m., jina la mwandishi, kipindi cha miaka ya uchapishaji, aina. c. Hutekeleza mfumo wa mapendekezo unaopendekeza vitabu sawa kulingana na maoni ya mtumiaji na matokeo ya hoja.PLINFORMAT  <response>: pamoja na pamoja na pamoja na pamoja na pamoja na kutumia nafasi ya majina std;kutumia nafasi ya majina pqxx;Kitabu cha muundo kitambulisho cha int; kichwa cha kamba; mwandishi wa kamba; int publication_year; aina ya kamba;;darasa BookDatabase umma: BookDatabaseconst string connection_string : conn_connection_string vekta query_books_by_authorconst string author rudisha query_booksmwandishi, mwandishi; vekta query_books_by_publication_year_rangeint start_year, int end_year hali ya mkondo wa kamba; condition publication_year KATI YA mwaka_wa_kuanza NA mwisho_mwaka; rudisha query_bookscondition.str; vekta query_books_by_genreconst stringgenre rudisha query_booksaina, aina; Privat: muunganisho conn_; vekta query_booksconst string column, const string value mkondo wa kamba sql; sql CHAGUA KUTOKA vitabu WAPI safu quotevalue ;; return execute_querysql.str; vekta query_booksconst string condition mkondo wa kamba sql; sql CHAGUA KUTOKA vitabu WAPI hali ;; return execute_querysql.str; vekta execute_queryconst string sql kazi txnconn_; matokeo res txn.execsql; txn.commit; vector vitabu; kwa const auto row : res vitabu.sukuma_nyuma safuid.kama, safutitle.kama, safumwandishi.kama, safupublication_year.kama, safugenre.kama ; vitabu vya kurudi; ;print_books utupuconst vectorvitabu ikiwa vitabu.tupu cout Hakuna matokeo yaliyopatikana. mwisho; kurudi; kwa consst auto book : books cout book.id book.title by book.author , iliyochapishwa katika book.publication_year , aina: book.genre endl; int main Badilisha na kamba yako ya unganisho ya PostgreSQL. const string connection_string dbnamemydb usermyuser passwordmypassword hostlocalhost port5432; BookDatabase dbconnection_string; wakati kweli cout nChagua chaguo:n 1. Hoja ya mwandishin 2. Hoja kulingana na kipindi cha miaka ya uchapishajin 3. Hoja kulingana na ainan 4. Tokan ; chaguo la ndani; cin chaguo; matokeo ya vekta ; kubadili chaguo kesi 1: cout Ingiza jina la mwandishi: ; mwandishi wa kamba; cin.puuza; getlinecin, mwandishi; matokeo db.query_books_by_authormwandishi; mapumziko; kesi 2: int start year, end_year; cout Ingiza mwaka wa kuanza: ; cin mwaka_wa_kuanza; cout Ingiza mwaka wa mwisho: ; cin mwisho_mwaka; matokeo db.query_books_by_publication_year_rangeanza_mwaka, mwisho_mwaka; mapumziko; kesi 3: cout Ingiza aina: ; aina ya kamba; cin.puuza; getlinesini, aina; matokeo db.query_books_by_genreaina; mapumziko; kesi 4: kurudi 0; chaguo-msingi: cout Chaguo batili. Jaribu tena. mwisho; endelea; print_booksmatokeo; kurudi 0; 