diff --git a/database.h b/database.h new file mode 100644 index 0000000..ab14ef7 --- /dev/null +++ b/database.h @@ -0,0 +1,216 @@ +#include #took some help from https://github.coventry.ac.uk/milesd7/122COM-Project/blob/master/DataBase.h + +#include + +#include + +#include "libsqlite.hpp" + +using namespace std; + +int UploadLecturer(int id, string Name){ + + try + + { + + sqlite::sqlite db( "uni_info.db" ); //open database + + + + auto q1 = db.get_statement();//create cursor + + auto q2 = db.get_statement();//create cursor + + + + q1->set_sql( "INSERT INTO Lecturers ( Lect_ID, Lect_name) " + + "VALUES (?, ?);" );// insert into DB + + q1->prepare(); + + + + q1->bind( 1, id ); + + q1->bind( 2, Name ); + + + + q1->step(); + + + } + + + + catch( sqlite::exception e ) + + { + + cerr << e.what() << endl; + + return 1; + + } + +} +int UploadStudent(int id, string Name, string class1){ + + try + + { + + sqlite::sqlite db( "uni_info.db" ); //open database + + + + auto q1 = db.get_statement();//create cursor + + auto q2 = db.get_statement();//create cursor + + + + q1->set_sql( "INSERT INTO Student ( Stu_ID, Student_Name, Class) " + + "VALUES (?, ?, ?);" );// insert into DB + + q1->prepare(); + + + + q1->bind( 1, id ); + + q1->bind( 2, Name ); + + q1->bind( 3, class1 ); + + q1->step(); + + + } + + + + catch( sqlite::exception e ) + + { + + cerr << e.what() << endl; + + return 1; + + } + +} + + + + + + +int printLecturers(){ + + try + + { + + sqlite::sqlite db( "uni_info.db" ); // open database + + + + auto us = db.get_statement(); + + auto bo = db.get_statement(); + + + + us->set_sql( "SELECT * FROM Lecturers" );// set query + + us->prepare(); + + + + + while( us->step()){ + + if (us->get_int(0) < 10){// if datas from DB is less than 10 , spaces between id and name is 5 + + cout <<" "<< us->get_int(0) << " " << us->get_text(1) < get_int(0) << " " << us->get_text(1)<set_sql( "SELECT * FROM Student" );// set query + + us->prepare(); + + + + + while( us->step()){ + + if (us->get_int(0) < 10){// if datas from DB is less than 10 , spaces between id and name is 5 + + cout <<" "<< us->get_int(0) << " " << us->get_text(1) << " " << us->get_text(2)< get_int(0) << " " << us->get_text(1) <<" " << us->get_text(2)< + +#include + +#include + +#include + +#include + + + +#ifndef SQLITEPP + +#define SQLITEPP + + + +namespace sqlite + +{ + + class sqlite; + + class statement; + + typedef std::shared_ptr statement_ptr; + + typedef std::shared_ptr sqlite_ptr; + + + + class exception : public std::exception + + { + + friend statement; + + friend sqlite; + + public: + + exception(std::string msg) + + { + + this->_msg = msg; + + } + + std::string what() + + { + + return "Sqlite error: " + this->_msg; + + } + + private: + + void _set_errorno(int err) + + { + + } + + std::string _msg; + + }; + + + + class statement + + { + + friend sqlite; + + friend exception; + + public: + + void set_sql(std::string sql) + + { + + if(this->_prepared) + + { + + exception e("Can not set sql on prepared query."); + + throw e; + + } + + else + + { + + this->_sql = sql; + + } + + } + + void prepare() + + { + + this->_prepared = true; + + const char* tail; + + int rc = sqlite3_prepare_v2(this->_db, + + this->_sql.c_str(), + + this->_sql.length(), + + &this->_s, + + &tail); + + if(rc != SQLITE_OK) + + { + + exception e("Could not prepare sql."); + + e._set_errorno(rc); + + throw e; + + } + + this->_tail = std::string(tail); + + } + + + + bool step() + + { + + if(!this->_valid) + + { + + exception e("Trying to step an invalid statement."); + + } + + + + int rc = sqlite3_step(this->_s); + + if(rc == SQLITE_DONE) + + { + + this->_valid = false; + + return false; + + } + + if(rc == SQLITE_ROW) + + { + + this->_has_row = true; + + return true; + + } + + // Ok, this means error if we get here + + exception e("Sqlite had an error: " + std::string(sqlite3_errmsg(this->_db))); + + return false; + + } + + void reset() + + { + + int rc = sqlite3_reset(this->_s); + + if(rc != SQLITE_OK) + + { + + exception e("Could not reset the virtual machine."); + + throw e; + + } + + this->_valid = true; + + this->_has_row = false; + + this->_prepared = false; + + } + + + + void exec() + + { + + this->prepare(); + + this->step(); + + } + + + + double get_double(int fieldnumber) + + { + + return sqlite3_column_double(this->_s, fieldnumber); + + } + + + + int get_int(int fieldnumber) + + { + + return sqlite3_column_int(this->_s, fieldnumber); + + } + + + + std::string get_text(int fieldnumber) + + { + + return std::string((const char*)sqlite3_column_text(this->_s, fieldnumber)); + + } + + std::string get_blob(int fieldnumber) + + { + + return std::string((const char*)sqlite3_column_blob(this->_s, fieldnumber), + + sqlite3_column_bytes(this->_s, fieldnumber)); + + } + + + + void bind(int where, std::string text) + + { + + int rc = sqlite3_bind_text(this->_s, where, text.c_str(), text.length(), SQLITE_STATIC); + + if(rc != SQLITE_OK) + + { + + exception e("Could not bind text."); + + throw e; + + } + + } + + void bind(int where, double d) + + { + + int rc = sqlite3_bind_double(this->_s, where, d); + + if(rc != SQLITE_OK) + + { + + exception e("Could not bind double."); + + throw e; + + } + + } + + void bind(int where, int i) + + { + + int rc = sqlite3_bind_int(this->_s, where, i); + + if(rc != SQLITE_OK) + + { + + exception e("Could not bind int."); + + throw e; + + } + + } + + void bind_null(int where) + + { + + int rc = sqlite3_bind_null(this->_s, where); + + if(rc != SQLITE_OK) + + { + + exception e("Could not bind to NULL."); + + throw e; + + } + + } + + + + virtual ~statement() + + { + + sqlite3_finalize(this->_s); + + } + + private: + + statement(sqlite3* db) + + { + + this->_db = db; + + this->_prepared = false; + + this->_valid = true; + + this->_has_row = false; + + } + + statement(sqlite3* db, std::string sql) + + { + + this->_db = db; + + this->_prepared = false; + + this->_valid = true; + + this->_has_row = false; + + this->set_sql(sql); + + } + + sqlite3* _db; + + bool _prepared, _valid, _has_row; + + std::string _sql; + + std::string _tail; + + sqlite3_stmt* _s; + + }; + + + + class sqlite + + { + + friend statement; + + public: + + sqlite(std::string filename) throw (exception) + + { + + this->_filename = filename; + + int rc = sqlite3_open(filename.c_str(), &this->_db); + + if(rc != SQLITE_OK) + + { + + exception e("Could not open '" + filename + "'"); + + throw e; + + } + + } + + std::shared_ptr get_statement() + + { + + statement_ptr st(new statement(this->_db)); + + return st; + + } + + statement_ptr get_statement(std::string sql) + + { + + statement_ptr st(new statement(this->_db, sql)); + + return st; + + } + + int64_t last_insert_id() + + { + + return sqlite3_last_insert_rowid(this->_db); + + } + + virtual ~sqlite() + + { + + sqlite3_close(this->_db); + + } + + private: + + std::string _filename; + + + + sqlite3* _db; + + }; + +} + + + +#endif \ No newline at end of file diff --git a/timetable.cpp b/timetable.cpp new file mode 100644 index 0000000..39d5fc8 --- /dev/null +++ b/timetable.cpp @@ -0,0 +1,23 @@ +#include "database.h" +using namespace std; +int main(){ + int Lect_id,stu_id; + string Lect_name,name,class1; + cout<< "enter lecturer name"<>Lect_name; + cout<< "enter lecturer id"<>Lect_id; + + UploadLecturer(Lect_id, Lect_name); + printLecturers(); + + cout<< "enter student name"<>name; + cout<< "enter student id"<>stu_id; + cout<< "enter class code"<> class1; + UploadStudent(stu_id, name, class1); + printStudents(); + +} \ No newline at end of file diff --git a/uni_info.db b/uni_info.db new file mode 100644 index 0000000..01da067 Binary files /dev/null and b/uni_info.db differ