⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clidb.cpp

📁 一个功能强大的内存数据库源代码,c++编写,有详细的注释
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//-< CLIDB.CPP >-----------------------------------------------------*--------*// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *// (Main Memory Database Management System)                          *   /\|  *//                                                                   *  /  \  *//                          Created:      7-Nov-99    K.A. Knizhnik  * / [] \ *//                          Last update:  7-Nov-99    K.A. Knizhnik  * GARRET *//-------------------------------------------------------------------*--------*// Example of Web database publishing: Clients Database//-------------------------------------------------------------------*--------*#include "clidb.h"dbDatabase db;//- Client ------------------------------------------------void Client::print(WWWconnection& con) const {     con << TAG << "<OPTION VALUE=" << clientId << ">" << organization 	<< "</OPTION>";}    REGISTER(Client);//- Manager ------------------------------------------------bool Manager::loginFromAnyHost;void Manager::print(WWWconnection& con) const {     con << TAG << "<OPTION VALUE=\"" << name << "\">" << name 	<< "</OPTION>";}    REGISTER(Manager);//- Segment ------------------------------------------------void Segment::print(WWWconnection& con) const {     con << TAG << "<OPTION VALUE=\"" << name << "\">" << name 	<< "</OPTION>";}    REGISTER(Segment);//- History ------------------------------------------------void History::print(WWWconnection& con) const {         ThreadContext& the = ThreadContext::of(con);    char buf[64];        con << TAG << "<OPTION VALUE=" << messageId << ">"  	<< date.asString(buf, sizeof buf)	<< " " << (the.managerForm 		   ? the.clients.at(client)->organization 		   : manager != null ? the.managers.at(manager)->name : "")	<< "</OPTION>";}    REGISTER(History);//---- ClientSequencer -------------------------------------REGISTER(Sequencer);template<class T>void print(WWWconnection& con, dbCursor<T>& cursor) {    do { 	cursor->print(con);    } while(cursor.next());}template<class T>void print(WWWconnection& con, dbArray<dbReference<T> > const& arr) {    dbCursor<T> cursor;    for (int i = 0, n = arr.length(); i < n; i++) { 	cursor.at(arr[i])->print(con);    } }//---- Thread Context --------------------------------------------------ThreadContext& ThreadContext::of(WWWconnection& con){    if (con.userData == NULL) { 	con.userData = new ThreadContext;    }    return *(ThreadContext*)con.userData;}ThreadContext::ThreadContext() {    qClient = "clientId=",clientId;    qManager = "name=",&name;    qClients = "start from",clientsArray,"order by organization";    qManagers = "start from",managersArray,"order by name";    qSegment = "name=",&name;    qMessage = "messageId=",messageId;    qMessages = "start from",messagesArray,	        "order by",dbDateTime::descent("date");}//--- HTML specific part -------------------------------------------#define HTML_HEAD "Content-type: text/html\r\n\r\n\<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 3.2//EN\"><HTML><HEAD>"#define BODY "<BODY BGCOLOR=\"#c0c0c0\">"#define EMPTY_LIST "<OPTION>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</OPTION></SELECT><BR>"void mainMenuReference(WWWconnection& con){    char* manager = con.get("manager");    if (manager != NULL) { 	con << TAG 	    << "<P><HR><CENTER><A HREF=\"" << con.getStub() << "?socket=" 	    << con.getAddress() << "&page=managerForm&manager=" 	    << URL << manager << "\">Back to main menu</A></CENTER>";    }    con << TAG << "</BODY></HTML>";}bool error(WWWconnection& con, char const* msg){    con << TAG << 	HTML_HEAD "<TITLE>ClientDB error</TITLE></HEAD><BODY>"	"<H1><FONT COLOR=\"#FF0000\">"	<< msg << "</FONT></H1></BODY></HTML>";    mainMenuReference(con);    return true;}bool addManagerForm(WWWconnection& con){    con << TAG << 	HTML_HEAD "<TITLE>Add new manager</TITLE></HEAD>"	BODY	"<H2>Add manager</H2>"	"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"	"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 	"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addManager\">"	"<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<	"\">"	"<INPUT TYPE=hidden NAME=\"segment\" VALUE=\"" << con.get("segment") <<	"\"><TABLE>"	"<TR><TH ALIGN=LEFT>Manager name</TH>"	"<TD><INPUT TYPE=text NAME=\"name\" SIZE=30></TD></TR>"	"<TR><TH ALIGN=LEFT>Host IP address</TH>"	"<TD><INPUT TYPE=text NAME=\"ipaddr\" SIZE=16 VALUE=\"*\"></TD></TR>"	"<TR><TH ALIGN=LEFT>Administrator rights</TH>"	"<TD><INPUT TYPE=CHECKBOX NAME=\"miniadmin\" VALUE=\"on\"></TD></TR>"	"</TABLE>"	"<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"	"<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool addClientForm(WWWconnection& con){    con << TAG << 	HTML_HEAD "<TITLE>Add new client</TITLE></HEAD>"	BODY	"<H2>Add client</H2>"	"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"	"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 	"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addClient\">"	"<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<	"\">"	"<INPUT TYPE=hidden NAME=\"segment\" VALUE=\"" << con.get("segment") <<	"\"><TABLE>"	"<TR><TH ALIGN=LEFT>Organization</TH>"	"<TD><INPUT TYPE=text NAME=\"organization\" SIZE=40></TD></TR>"	"<TR><TH ALIGN=LEFT>Phone</TH>"	"<TD><INPUT TYPE=text NAME=\"phone\" SIZE=20></TD></TR>"	"<TR><TH ALIGN=LEFT>Phone2</TH>"	"<TD><INPUT TYPE=text NAME=\"phone2\" SIZE=20></TD></TR>"	"<TR><TH ALIGN=LEFT>Fax</TH>"	"<TD><INPUT TYPE=text NAME=\"fax\" SIZE=20></TD></TR>"	"<TR><TH ALIGN=LEFT>E-Mail</TH>"	"<TD><INPUT TYPE=text NAME=\"email\" SIZE=30></TD></TR>"	"<TR><TH ALIGN=LEFT>WWW address</TH>"	"<TD><INPUT TYPE=text NAME=\"www\" SIZE=30></TD></TR>"	"<TR><TH ALIGN=LEFT>Person</TH>"	"<TD><INPUT TYPE=text NAME=\"person\" SIZE=40></TD></TR>"	"<TR><TH ALIGN=LEFT>Person2</TH>"	"<TD><INPUT TYPE=text NAME=\"person2\" SIZE=40></TD></TR>"	"<TR><TH ALIGN=LEFT>CEO</TH>"	"<TD><INPUT TYPE=text NAME=\"lpr\" SIZE=40></TD></TR>"	"<TR><TH ALIGN=LEFT>Address</TH>"	"<TD><INPUT TYPE=text NAME=\"addr\" SIZE=40></TD></TR>"	"<TR><TH ALIGN=LEFT>Information</TH>"	"<TD><INPUT TYPE=text NAME=\"info\" SIZE=40></TD></TR>"	"<TR><TH ALIGN=LEFT>Status</TH>"	"<TD><INPUT TYPE=text NAME=\"status\" SIZE=40></TD></TR>"	"</TABLE><INPUT TYPE=submit VALUE=\"Add\">&nbsp;"	"<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool addSegmentForm(WWWconnection& con){    con << TAG << 	HTML_HEAD "<TITLE>Add new segment</TITLE></HEAD>"	BODY	"<H2>Add segment</H2>"	"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"	"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 	"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addSegment\">"	"<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<	"\"><TABLE>"	"<TR><TH ALIGN=LEFT>Segment name </TH>"	"<TD><INPUT TYPE=text NAME=\"name\" SIZE=30></TD></TR>"	"</TD></TR></TABLE><P>"	"<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"	"<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool addHistoryForm(WWWconnection& con){    con << TAG << 	HTML_HEAD "<TITLE>Add message</TITLE></HEAD>"	BODY	"<H2>Add message</H2>"	"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"	"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 	"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addHistory\">"	"<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<	"\"><INPUT TYPE=hidden NAME=\"client\" VALUE=" << con.get("client") <<	"\"><TEXTAREA NAME=\"message\" ROWS=10 COLS=60></TEXTAREA><P>"	"<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"	"<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool editManagerForm(WWWconnection& con){    if (con.get("new")) { 	return addManagerForm(con);    }    ThreadContext& the = ThreadContext::of(con);    the.name = con.get("name");    if (the.name == NULL) { 	return error(con, "No manager was selected");    }    if (the.managers.select(the.qManager) == 0) { 	return error(con, "No such manager");    }        con << TAG << 	HTML_HEAD "<TITLE>Edit manager form</TITLE></HEAD>"	BODY	"<H2>Update manager</H2>"	"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"	"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 	"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"editManager\">"	"<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<	"\"><INPUT TYPE=hidden NAME=\"oldName\" VALUE=\"" << the.name << "\">"	"<TABLE><TR><TH ALIGN=LEFT>Manager name</TH>"	"<TD><INPUT TYPE=text NAME=\"name\" SIZE=30 VALUE=\""         << the.managers->name << "\"></TD></TR>"	"<TR><TH ALIGN=LEFT>Host IP address</TH>"	"<TD><INPUT TYPE=text NAME=\"ipaddr\" SIZE=16 VALUE=\""	<< the.managers->IPaddr << "\"</TD></TR>"	"<TR><TH ALIGN=LEFT>Administrator rights</TH>"	"<TD><INPUT TYPE=CHECKBOX NAME=\"miniadmin\" VALUE=\"on\""	<< ((the.managers->flags & Manager::isMinAdmin)	    ? "CHECKED" : "") << "></TD></TR></TABLE>"	"<INPUT TYPE=submit NAME=\"action\" VALUE=\"Update\">&nbsp;"	"<INPUT TYPE=submit NAME=\"action\" VALUE=\"Remove\"></FORM><P>"	"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"	"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << 	"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"editHistoryForm\">"	"<INPUT TYPE=hidden NAME=\"manager\" VALUE=\"" << con.get("manager") <<	"\"><SELECT NAME=\"messageId\" SIZE=15>";    the.managerForm = true;    if (the.managers->messages.length() != 0) { 	print(con, the.managers->messages);	con << TAG << 	    "</SELECT><BR><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\"></FORM>";    } else { 	con << TAG << EMPTY_LIST "</FORM>";    }    mainMenuReference(con);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -