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

📄 bugdb.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//-< BUGDB.CPP  >----------------------------------------------------*--------*// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *// (Main Memory Database Management System)                          *   /\|  *//                                                                   *  /  \  *//                          Created:     27-Mar-99    K.A. Knizhnik  * / [] \ *//                          Last update: 30-Jun-99    K.A. Knizhnik  * GARRET *//-------------------------------------------------------------------*--------*// Example of database Web publishing: Bug Tracking Database//-------------------------------------------------------------------*--------*#include "bugdb.h"//#define USE_EXTERNAL_HTTP_SERVER 1char const* const eCATEGORY_STRING[] = {    "",    "CRASH",    "PROGRAM_HANGS",    "UI_DISPLAY",    "UI_BEHAVIOR",    "CALCULATION",    "ERROR_HANDLING",    "PERFORMANCE",    "LICENSING",    "INSTALLATION",     "DOCUMENTATION",    "ENHANCEMENT",    "HOW_TO_QUESTION",    NULL};char const* const eSTATUS_STRING[] = {     "",    "OPENED",    "FIXED",    "CLOSED",    "PENDING_ENGINEER",    "PENDING_USER",    "POSTPONED",    "IRREPRODUCIBLE",    "WITHDRAWN",    "AS_DESIGNED",    NULL};char const* const eSEVERITY_STRING[] = {     "",    "FATAL",    "SERIOUS",    "MINOR",    NULL};char const* const eFIXING_PRIORITY_STRING[] = {     "",    "FIX_IMMEDIATELY",    "FIX_BEFORE_NEXT_BUILD_RELEASE",    "FIX_BEFORE_NEXT_MINOR_RELEASE",    "FIX_BEFORE_NEXT_MAJOR_RELEASE",    "FIX_IF_POSSIBLE",    "OPTIONAL",    NULL};dbDatabase db;dbCursor<Bug>          allBugs;dbCursor<Bug>          bugs(dbCursorForUpdate);dbCursor<Report>       reports(dbCursorForUpdate);dbCursor<Person>       persons(dbCursorForUpdate);dbCursor<Software>     products(dbCursorForUpdate);dbCursor<Version>      versions(dbCursorForUpdate);dbCursor<BugSequencer> sequencer(dbCursorForUpdate);dbQuery qBug;dbQuery qReport;dbQuery qAllReports;dbQuery qVersion;dbQuery qAllVersions;dbQuery qPerson;dbQuery qSoftware;//// Query paramters//char* key;int   bugId; int   reportId;dbReference<Report>  firstReport;dbReference<Version> initialVersion;int   majorVersion;int   minorVersion;//- Person ------------------------------------------------void Person::print(WWWconnection& con) const {     con << TAG << "<OPTION VALUE=\"" << sName << "\">" << sName << "</OPTION>";}    REGISTER(Person);//------- Version ---------------------------------------void Version::print(WWWconnection& con) const {     char buf[64];    con << TAG << "<OPTION VALUE=\"" << getVersionString() <<         "\">Version " << getVersionString() << " " << sLabel <<         " " << released.asString(buf, sizeof buf) << "</OPTION>";}int Version::getVersion() const {     return majorVersionNumber*100 + minorVersionNumber; }char* Version::getVersionString() const {    static char buf[16];    sprintf(buf, "%d.%02d", majorVersionNumber, minorVersionNumber);    return buf;}REGISTER(Version);//----- Software -------------------------------------int Software::getLastVersion() const {     if (pVersions == null) {         return 0;    }    versions.at(pVersions);    return versions->getVersion();}char* Software::getLastVersionString() const {     if (pVersions == null) {         return "";    }    versions.at(pVersions);    return versions->getVersionString();}void Software::print(WWWconnection& con) const {     con << TAG << "<OPTION VALUE=\"" << sName << "\">" << sName << "</OPTION>";}REGISTER(Software);//----- Report -------------------------------------------void Report::print(WWWconnection& con) const {     char buf[64];    if (pAuthor != null) {         persons.at(pAuthor);        con << TAG << "<OPTION VALUE=" << index << ">" << persons->sName << " "            << creationDate.asString(buf, sizeof buf) << "</OPTION>";    } else {         con << TAG << "<OPTION VALUE=" << index << ">" << "Report from "            << creationDate.asString(buf, sizeof buf) << "</OPTION>";    }}REGISTER(Report);//--- Bug -----------------------------------------void Bug::print(WWWconnection& con) const {    con << TAG << "<OPTION VALUE=" << bugId << ">" << sOneLineSummary         << "</OPTION>";}    REGISTER(Bug);//---- BugSequencer -------------------------------------REGISTER(BugSequencer);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);    } }//--- 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>"void mainMenuReference(WWWconnection& con){    char* myself = con.get("myself");    if (myself != NULL) {         con << TAG             << "<P><HR><CENTER><A HREF=\"" << con.getStub() << "?socket="             << con.getAddress() << "&page=userForm&myself="             << URL << myself <<  "&name=" << URL << myself            << "\">Back to main menu</A></CENTER>";    }    con << TAG << "</BODY></HTML>";}void error(WWWconnection& con, char const* msg){    con << TAG <<         HTML_HEAD "<TITLE>BUGDB error</TITLE></HEAD><BODY>"        "<H1><FONT COLOR=\"#FF0000\">"        << msg << "</FONT></H1></BODY></HTML>";    mainMenuReference(con);}void message(WWWconnection& con, char const* msg){    con << TAG <<         HTML_HEAD "<TITLE>BUGDB message</TITLE></HEAD><BODY>"        "<H1><FONT COLOR=\"#004000\">"        << msg << "</FONT></H1></BODY></HTML>";    mainMenuReference(con);}bool addUserForm(WWWconnection& con){    con << TAG <<         HTML_HEAD "<TITLE>Enter new user</TITLE></HEAD>"        BODY        "<H2>Add user</H2>"        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<         "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addUser\">"        "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<         "\"><TABLE>"        "<TR><TH ALIGN=LEFT>User name:</TH>"        "<TD><INPUT TYPE=text NAME=\"name\" SIZE=30</TD></TR>"        "<TR><TH ALIGN=LEFT>E-mail:</TH>"        "<TD><INPUT TYPE=text NAME=\"email\" SIZE=30 </TD></TR></TABLE><P>"        "<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool addEngineerForm(WWWconnection& con){    con << TAG <<         HTML_HEAD "<TITLE>Enter new engineer</TITLE></HEAD>"        BODY        "<H2>Add engineer</H2>"        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<         "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addEngineer\">"        "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<         "\"><TABLE>"        "<TR><TH ALIGN=LEFT>Engineer name:</TH>"        "<TD><INPUT TYPE=text NAME=\"name\" SIZE=30</TD></TR>"        "<TR><TH ALIGN=LEFT>E-mail:</TH>"        "<TD><INPUT TYPE=text NAME=\"email\" SIZE=30 </TD></TR></TABLE><P>"        "<INPUT TYPE=submit VALUE=\"Add\">&nbsp;"        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool addSoftwareForm(WWWconnection& con){    con << TAG <<         HTML_HEAD "<TITLE>Enter new software product</TITLE></HEAD>"        BODY        "<H2>Add software product</H2>"        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<         "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"addSoftware\">"        "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<         "\"><TABLE>"        "<TR><TH ALIGN=LEFT>Software name:</TH>"        "<TD><INPUT TYPE=text NAME=\"software\" SIZE=40</TD></TR>"        "<TR><TH ALIGN=LEFT>Version number:</TH>"        "<TD><INPUT TYPE=text NAME=\"version\" SIZE=8</TD></TR>"        "<TR><TH ALIGN=LEFT>Version label:</TH>"        "<TD><INPUT TYPE=text NAME=\"label\" SIZE=20</TD></TR>"        "<TR><TH ALIGN=LEFT>Version comment:</TH>"        "<TD><INPUT TYPE=text NAME=\"comment\" SIZE=40</TD></TR>"        "</TABLE><P><INPUT TYPE=submit VALUE=\"Add\">&nbsp;"        "<INPUT TYPE=reset VALUE=\"Reset\"></FORM>";    mainMenuReference(con);    return true;}bool selectSoftwareForm(WWWconnection& con){    con << TAG <<         HTML_HEAD "<TITLE>Select software product</TITLE></HEAD>"        BODY        "<H2>Select software product</H2>"        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<         "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"softwareForm\">"        "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<         "\"><SELECT SIZE=15 NAME=\"software\">";    if (products.select() > 0) {         print(con, products);        con << TAG <<            "</SELECT><BR><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">";    } else {         con << TAG << EMPTY_LIST;    }    con << TAG << "</FORM>";    mainMenuReference(con);    return true;}bool removeSoftwareForm(WWWconnection& con){    con << TAG <<         HTML_HEAD "<TITLE>Remove software product</TITLE></HEAD>"        BODY        "<H2>Remove software product</H2>"        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<         "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"removeSoftware\">"        "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<         "\"><SELECT SIZE=15 NAME=\"software\">";    if (products.select() != 0) {         print(con, products);        con << TAG << "</SELECT><BR><INPUT TYPE=\"submit\" VALUE=\"Remove\">";    } else {         con << TAG << EMPTY_LIST;    }    con << TAG << "</FORM>";    mainMenuReference(con);    return true;}bool selectPersonForm(WWWconnection& con){    con << TAG <<         HTML_HEAD "<TITLE>Select a person</TITLE></HEAD>"        BODY        "<H2>Select a person</H2>"        "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"        "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<         "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"userForm\">"        "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<         "\"><SELECT SIZE=20 NAME=\"name\">";    if (persons.select() != 0) {         print(con, persons);        con << TAG << "</SELECT><BR><INPUT TYPE=submit VALUE=\"Select\">";    } else {         con << TAG << EMPTY_LIST;    }    con << TAG << "</FORM>";    mainMenuReference(con);

⌨️ 快捷键说明

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