|
#include <Wt/WApplication>
|
|
#include <Wt/WContainerWidget>
|
|
#include <Wt/WEnvironment>
|
|
#include <Wt/WLineEdit>
|
|
#include <Wt/WPushButton>
|
|
#include <Wt/WText>
|
|
#include <Wt/WMenu>
|
|
#include <Wt/WString>
|
|
#include <Wt/WTableView>
|
|
#include <Wt/WComboBox>
|
|
#include <Wt/WStackedWidget>
|
|
#include <Wt/Dbo/SqlTraits>
|
|
#include <Wt/Dbo/Dbo>
|
|
#include <Wt/Dbo/backend/Sqlite3>
|
|
#include <Wt/Dbo/Session>
|
|
#include <Wt/Dbo/Transaction>
|
|
#include <Wt/Dbo/ptr>
|
|
#include <Wt/Dbo/QueryModel>
|
|
#include <Wt/Dbo/SqlConnection>
|
|
#include <Wt/WBreak>
|
|
#include <Wt/WDate>
|
|
#include <Wt/WDatePicker>
|
|
#include <Wt/WDateValidator>
|
|
#include <Wt/WValidator>
|
|
#include <Wt/WInPlaceEdit>
|
|
#include <Wt/WLabel>
|
|
using namespace Wt;
|
|
namespace dbo = Wt::Dbo;
|
|
#include <string>
|
|
using namespace std;
|
|
class User
|
|
{
|
|
public:
|
|
std::string program;
|
|
std::string name;
|
|
std::string fathername;
|
|
std::string mothername;
|
|
std::string dobirth;
|
|
std::string rollno;
|
|
std::string stream;
|
|
std::string department;
|
|
std::string semester;
|
|
template <class Action>
|
|
void persist(Action& a)
|
|
{
|
|
dbo::field(a, program, "program");
|
|
dbo::field(a, name, "name");
|
|
dbo::field(a, fathername, "fathername");
|
|
dbo::field(a, mothername, "mothername");
|
|
dbo::field(a, dobirth, "dobirth");
|
|
dbo::field(a, rollno, "rollno");
|
|
dbo::field(a, stream, "stream");
|
|
dbo::field(a, department, "department");
|
|
dbo::field(a, semester, "semester");
|
|
}
|
|
};
|
|
class Myform : public WApplication
|
|
{
|
|
public:
|
|
dbo::Session session;
|
|
dbo::backend::Sqlite3 sqlite3;
|
|
WLineEdit *updatetext;
|
|
WLineEdit *retrievetext;
|
|
WLineEdit *nametxt;
|
|
WLineEdit *fathernametxt;
|
|
WLineEdit *mothernametxt;
|
|
WLineEdit *dateEdit;
|
|
WLineEdit *rollnotxt;
|
|
WComboBox *programbox;
|
|
WComboBox *streambox;
|
|
WComboBox *departmentbox;
|
|
WComboBox *semesterbox;
|
|
WContainerWidget *c;
|
|
WContainerWidget *c1;
|
|
WContainerWidget *c2;
|
|
WContainerWidget *c3;
|
|
WText *t0;
|
|
Myform (const WEnvironment &env) :WApplication (env), sqlite3 ("data.db")
|
|
{
|
|
session.setConnection (sqlite3);
|
|
session.mapClass<User>("User");
|
|
//session.createTables();
|
|
useStyleSheet("wpage.css");
|
|
setTitle("Databaseform");
|
|
WText *formtxt=new WText("<div>EXAM REGISTRATION FORM</div>",root());
|
|
formtxt->setStyleClass("form");
|
|
WStackedWidget *stack=new WStackedWidget();
|
|
WMenu *mainmenu=new WMenu(stack,Vertical,root());
|
|
mainmenu->setStyleClass("menu1");
|
|
root()->addWidget(stack);
|
|
c=new WContainerWidget();
|
|
c1=new WContainerWidget();
|
|
c2=new WContainerWidget();
|
|
c3=new WContainerWidget();
|
|
mainmenu->addItem("New user",c);
|
|
mainmenu->addItem("Exist account",c1);
|
|
mainmenu->addItem("Update data",c2);
|
|
mainmenu->addItem("Delete data",c3);
|
|
c->setStyleClass("cc1");
|
|
c1->setStyleClass("cc1");
|
|
c2->setStyleClass("cc1");
|
|
c3->setStyleClass("cc1");
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
//in place edit with buttons.
|
|
WContainerWidget *cn = new WContainerWidget(c2);
|
|
WText *out = new WText (cn);
|
|
out->setMargin(10,Wt::Right);
|
|
WInPlaceEdit *rajan = new WInPlaceEdit("this is editable text",c2);
|
|
rajan->setEmptyText("you deleted the text!");
|
|
rajan->valueChanged().connect(std::bind([=] (){
|
|
out->setText("In-place edit is set to.");
|
|
}));
|
|
|
|
WText *programtext_=new WText ("Program",c);
|
|
programbox=new WComboBox(c);
|
|
programbox->addItem("");
|
|
programbox->addItem("Under graduate section");
|
|
programbox->addItem("Post graduate section");
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *nametext_=new WText("Name ",c);
|
|
nametxt=new WLineEdit(c);
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *fathernametext_=new WText("Fathername",c);
|
|
fathernametxt=new WLineEdit(c);
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *mothernametext_=new WText("Mothername",c);
|
|
mothernametxt=new WLineEdit(c);
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
Wt::WContainerWidget *cc = new Wt::WContainerWidget(c);
|
|
Wt::WLabel *label = new Wt::WLabel("Birthdate",cc);
|
|
dateEdit = new Wt::WLineEdit(cc);
|
|
label->setBuddy(dateEdit);
|
|
|
|
Wt::WDatePicker *birthDP = new Wt::WDatePicker(dateEdit, cc);
|
|
//create and costomize a date validator
|
|
Wt::WDateValidator *dv = new Wt::WDateValidator();
|
|
dateEdit->setValidator(dv);
|
|
|
|
dv->setBottom(Wt::WDate(1990, 1, 1));
|
|
dv->setTop(Wt::WDate::currentDate());
|
|
dv->setFormat("dd/mm/yyyy");
|
|
dv->setMandatory(true);
|
|
dv->setInvalidBlankText("birthdate is mandatory!");
|
|
dv->setInvalidNotADateText("you should enter a date in the format" "\"dd/mm/yyyy\"!");
|
|
dv->setInvalidTooEarlyText((Wt::WString("That's too early... The date must be {1} or later!").arg(dv->bottom().toString("dd/MM/yyyy"))));
|
|
dv->setInvalidTooLateText((Wt::WString("That's too late... The date must be {1} or earlier!").arg(dv->top().toString("dd/MM/yyyy"))));
|
|
new Wt::WBreak(cc);
|
|
{
|
|
Wt::WValidator::Result result =
|
|
dv->validate(birthDP->lineEdit()->text());
|
|
if (result.state() == Wt::WValidator::Valid) {
|
|
Wt::WDate d = Wt::WDate::currentServerDate();
|
|
int years = d.year() - birthDP->date().year();
|
|
int days = d.daysTo(birthDP->date().addYears(years));
|
|
if (days < 0)
|
|
days = d.daysTo( birthDP->date().addYears(years + 1) );
|
|
} else { birthDP->lineEdit()->setFocus();
|
|
}
|
|
};
|
|
|
|
|
|
|
|
|
|
/*WText *dobirthtext_=new WText("DOBirth",c);
|
|
dobirthtxt=new WLineEdit(c);
|
|
c->addWidget(new WBreak());*/
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *rollnotext_=new WText("Rollno",c);
|
|
rollnotxt=new WLineEdit(c);
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *streamtext_=new WText("Stream",c);
|
|
streambox=new WComboBox(c);
|
|
streambox->addItem("");
|
|
streambox->addItem("B.tech");
|
|
streambox->addItem("M.tech");
|
|
streambox->addItem("M.B.A");
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *departmenttext_=new WText("Department",c);
|
|
departmentbox=new WComboBox(c);
|
|
departmentbox->addItem("");
|
|
departmentbox->addItem("Computer Engineering");
|
|
departmentbox->addItem("Civil Engineering");
|
|
departmentbox->addItem("Electronics and Communication Engineering");
|
|
departmentbox->addItem("Information Technology");
|
|
departmentbox->addItem("Mechnical Engineering");
|
|
departmentbox->addItem("Production Engineering");
|
|
departmentbox->addItem("M.B.A");
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *semestertext_=new WText("Semester",c);
|
|
semesterbox=new WComboBox(c);
|
|
semesterbox->addItem("");
|
|
semesterbox->addItem("1");
|
|
semesterbox->addItem("2");
|
|
semesterbox->addItem("3");
|
|
semesterbox->addItem("4");
|
|
semesterbox->addItem("5");
|
|
semesterbox->addItem("6");
|
|
semesterbox->addItem("7");
|
|
semesterbox->addItem("8");
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WPushButton *button=new WPushButton("Submit",c);
|
|
button->clicked().connect(this, &Myform::enterdata);
|
|
c->addWidget(new WBreak());
|
|
c->addWidget(new WBreak());
|
|
|
|
WText *updatetext_=new WText("Enter name to update data",c2);
|
|
c2->setStyleClass("form");
|
|
updatetext=new WLineEdit(c2);
|
|
WPushButton *updatebutton=new WPushButton("enter",c2);
|
|
updatebutton->clicked().connect(this, &Myform::updatedata);
|
|
|
|
WText *retrievetext_=new WText("Enter name to retrieve data",c1);
|
|
c1->setStyleClass("form");
|
|
retrievetext=new WLineEdit(c1);
|
|
WPushButton *retrievebutton=new WPushButton("enter",c1);
|
|
retrievebutton->clicked().connect(this, &Myform::retrievedata);
|
|
c1->addWidget(new WBreak());
|
|
|
|
}
|
|
~Myform (void)
|
|
{
|
|
cout<<"Myform dead"<<endl;}
|
|
void enterdata();
|
|
void retrievedata();
|
|
void updatedata();
|
|
};
|
|
void Myform::enterdata()
|
|
{
|
|
{
|
|
dbo::Transaction transaction(session);
|
|
|
|
|
|
User *user = new User();
|
|
user->name = nametxt->text().toUTF8();
|
|
user->fathername = fathernametxt->text().toUTF8();
|
|
user->mothername = mothernametxt->text().toUTF8();
|
|
user->dobirth = dateEdit->text().toUTF8();
|
|
user->rollno = rollnotxt->text().toUTF8();
|
|
user->program = programbox->currentText().toUTF8();
|
|
user->stream = streambox->currentText().toUTF8();
|
|
user->department = departmentbox->currentText().toUTF8();
|
|
user->semester = semesterbox->currentText().toUTF8();
|
|
dbo::ptr<User> userPtr = session.add(user);
|
|
transaction.commit();
|
|
}}
|
|
void Myform::updatedata()
|
|
{
|
|
sqlite3.setProperty("show-queries","true");
|
|
Wt::WString x=updatetext->text();
|
|
std::string y=x.toUTF8();
|
|
{
|
|
dbo::Transaction transaction(session);
|
|
|
|
|
|
dbo::ptr<User> users = session.find<User>().where("name = ?").bind(y);
|
|
User *user = new User();
|
|
users.modify()->name = nametxt->text().toUTF8();
|
|
users.modify()->fathername = fathernametxt->text().toUTF8();
|
|
users.modify()->mothername = mothernametxt->text().toUTF8();
|
|
users.modify()->dobirth = dateEdit->text().toUTF8();
|
|
users.modify()->rollno = rollnotxt->text().toUTF8();
|
|
users.modify()->program = programbox->currentText().toUTF8();
|
|
users.modify()->stream = streambox->currentText().toUTF8();
|
|
users.modify()->department = departmentbox->currentText().toUTF8();
|
|
users.modify()->semester = semesterbox->currentText().toUTF8();
|
|
dbo::ptr<User> userPtr = session.add(user);
|
|
transaction.commit();
|
|
}
|
|
}
|
|
|
|
void Myform::retrievedata()
|
|
{
|
|
sqlite3.setProperty("show-queries","true");
|
|
Wt::WString a=retrievetext->text();
|
|
std::string b=a.toUTF8();
|
|
{
|
|
dbo::Transaction transaction(session);
|
|
typedef dbo::collection< dbo::ptr<User> >Users;
|
|
Users users = session.find<User>().where("name=?").bind(b);
|
|
int i;
|
|
for (Users::const_iterator i = users.begin(); i !=users.end(); ++i)
|
|
{
|
|
c1->addWidget(new WText("name:"));
|
|
WText *nameout=new WText ((*i)->name,c1);
|
|
nameout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("father name:"));
|
|
WText *fathernameout=new WText ((*i)->fathername,c1);
|
|
fathernameout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("mother name:"));
|
|
WText *mothernameout=new WText ((*i)->mothername,c1);
|
|
mothernameout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("dobirth:"));
|
|
WText *dobirthout=new WText ((*i)->dobirth,c1);
|
|
dobirthout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("rollno"));
|
|
WText *rollnoout=new WText ((*i)->rollno,c1);
|
|
rollnoout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("stream:"));
|
|
WText *streamout=new WText ((*i)->stream,c1);
|
|
streamout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("department:"));
|
|
WText *departmentout=new WText ((*i)->department,c1);
|
|
departmentout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
|
|
c1->addWidget(new WText("semester:"));
|
|
WText *semesterout=new WText ((*i)->semester,c1);
|
|
semesterout->setStyleClass("output");
|
|
c1->addWidget(new WBreak());
|
|
c1->addWidget(new WBreak());
|
|
}
|
|
transaction.commit();
|
|
}}
|
|
WApplication * createApplication (WEnvironment const & env)
|
|
{ return new Myform (env); }
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
return WRun (argc, argv, & createApplication);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|