bugdb.cpp
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· C++ 代码 · 共 2,061 行 · 第 1/5 页
CPP
2,061 行
return true; } int selfStatus = persons->status; key = name; if (persons.select(qPerson) == 0) { error(con, "Person not found"); return true; } if (persons->status == Person::isAdministrator) { con << TAG << HTML_HEAD "<TITLE>BUGDB Administrator</TITLE></HEAD>" BODY "<H2>Administrator menu</H2><FONT SIZE=\"+1\">" "<UL><LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=addUserForm&myself=" << URL << myself << "\">Add user</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=addEngineerForm&myself=" << URL << myself << "\">Add engineer</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=selectPersonForm&myself=" << URL << myself << "\">Select person" "</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=removePersonForm&myself=" << URL << myself << "\">Remove person</A></UL>" "<UL><LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=addSoftwareForm&myself=" << URL << myself << "\">Add software product</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=selectSoftwareForm&myself=" << URL << myself << "\">Select software product</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=removeSoftwareForm&myself=" << URL << myself << "\">Remove software product</A></UL>" "<UL><LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=selectBugForm&myself=" << URL << myself << "\">Select bug</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=removeBugForm&myself=" << URL << myself << "\">Remove bug</A></UL>"; if (selfStatus == Person::isAdministrator) { con << TAG << "<UL><LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=changePasswordForm" "&myself=administrator&name=" << URL << myself << "\">Change password</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=shutdown\">Shutdown server</A></UL>"; } con << TAG << "</FONT></BODY></HTML>"; return true; } con << HTML_HEAD "<TITLE>" << name << "</TITLE></HEAD>" BODY "<H2>" << name << "</H2><FONT SIZE=\"+1\">" "<UL><LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=createBugReportForm&myself=" << URL << myself << "\">Create bug report</A>"; if (persons->sEmailAddress[0] != '\0') { con << TAG << "<LI><A HREF=\"mailto:" << persons->sEmailAddress << "\">Send e-mail</A>" "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=bugQueryForm&myself=" << URL << myself << "\">Find a bug</A>"; } if (strcmp(myself, name) == 0 || selfStatus == Person::isAdministrator) { con << TAG << "<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=changePasswordForm&myself=" << URL << myself << "&name=" << URL << name << "\">Change password</A>"; } con << TAG << "</UL></FONT><P><TABLE><TR><TH ALIGN=LEFT>Person name:</TH>" "<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\"><INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"" "updatePerson\"><INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\"><INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<INPUT TYPE=text NAME=\"newname\" SIZE=30 VALUE=\"" << name << "\"><INPUT TYPE=submit VALUE=\"Change\"></FORM></TD></TR>" "<TR><TH ALIGN=LEFT>E-Mail:</TH>" "<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\"><INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"" "updatePerson\"><INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\"><INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<INPUT TYPE=text NAME=\"email\" SIZE=30 VALUE=\"" << persons->sEmailAddress << "\">" "<INPUT TYPE=submit VALUE=\"Change\"></FORM></TD></TR>"; if (persons->status != Person::isUser) { con << TAG << "<TR><TH ALIGN=LEFT>Projects:</TH>" "<TD><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=\"" << myself << "\">" "<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<SELECT NAME=\"software\" SIZE=1>"; if (persons->setProjects.length() != 0) { print(con, persons->setProjects); con << TAG << "</SELECT><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">" " <INPUT TYPE=submit NAME=\"action\" VALUE=\"Detach\">"; } else { con << TAG << EMPTY_LIST; } if (products.select() != 0) { con << TAG << "</FORM></TD></TR>" "<TR><TH ALIGN=LEFT>Attach to project:</TH>" "<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" " "VALUE=\"attachToProject\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself <<"\">" "<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<SELECT NAME=\"software\" SIZE=1>"; print(con, products); con << TAG << "</SELECT><INPUT TYPE=submit VALUE=\"Attach\">"; } con << TAG << "</FORM></TD></TR>" "<TR><TH ALIGN=LEFT>Find a person:</TH>" "<TD><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=\"" << myself << "\">" "<INPUT TYPE=text NAME=\"name\" SIZE=30>" "<INPUT TYPE=submit VALUE=\"Find\"></FORM></TD></TR>"; } con << TAG << "<TR><TH ALIGN=LEFT>Used software:</TH>" "<TD><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=\"" << myself << "\">" "<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<SELECT NAME=\"software\" SIZE=1>"; if (persons->setUsedSoftware.length() != 0) { print(con, persons->setUsedSoftware); con << TAG << "</SELECT><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">" " <INPUT TYPE=submit NAME=\"action\" VALUE=\"Unregister\">"; } else { con << TAG << EMPTY_LIST; } if (products.select() != 0) { con << TAG << "</FORM></TD></TR>" "<TR><TH ALIGN=LEFT>Register as software user:</TH>" "<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" " "VALUE=\"registerSoftware\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">" "<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<SELECT NAME=\"software\" SIZE=1>"; print(con, products); con << TAG << "</SELECT><INPUT TYPE=submit VALUE=\"Register\">"; } con << TAG << "</FORM></TD></TR></TABLE><P>" "<B>Reported bugs:</B><BR>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" " "VALUE=\"bugForm\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">" "<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<SELECT NAME=\"bug\" SIZE=5>"; if (persons->setReportedBugs.length() != 0) { print(con, persons->setReportedBugs); con << TAG << "</SELECT><BR><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">"; } else { con << TAG << EMPTY_LIST; } con << TAG << "</FORM><P>"; if (persons->status != Person::isUser) { con << TAG << "<P><B>Assigned bugs:</B><BR>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden " "NAME=\"page\" VALUE=\"bugForm\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">" "<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">" "<SELECT NAME=\"bug\" SIZE=5>"; if (persons->setAssignedBugs.length() != 0) { print(con, persons->setAssignedBugs); con << TAG << "</SELECT><BR>" "<INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\"> " "<INPUT TYPE=submit NAME=\"action\" VALUE=\"Deassign\">"; } else { con << TAG << EMPTY_LIST; } con << TAG << "</FORM>"; } if (strcmp(name, myself) == 0) { con << TAG << "</BODY></HTML>"; } else { mainMenuReference(con); } return true;}bool createBugReportForm(WWWconnection& con){ int i; sequencer.select(); con << TAG << HTML_HEAD "<TITLE>Bug</TITLE></HEAD>" BODY "<H2>Bug</H2>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden " "NAME=\"page\" VALUE=\"createBugReport\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\""<<con.get("myself")<<"\">" "<INPUT TYPE=hidden NAME=\"bug\" VALUE=" << ++sequencer->nBugs << ">" "<TABLE><TH ALIGN=LEFT>Summary:</TH>" "<TD><INPUT TYPE=text NAME=\"summary\" SIZE=40></TD></TR>" "<TR><TH ALIGN=LEFT>Category:</TH>" "<TD><SELECT NAME=\"category\" SIZE=1>"; for (i = 1; eCATEGORY_STRING[i] != NULL; i++) { con << TAG << "<OPTION SELECTED VALUE=" << i << ">" << eCATEGORY_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Severity:</TH>" "<TD><SELECT NAME=\"severity\" SIZE=1>"; for (i = 1; eSEVERITY_STRING[i] != NULL; i++) { con << TAG << "<OPTION SELECTED VALUE=" << i << ">" << eSEVERITY_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Priority:</TH>" "<TD><SELECT NAME=\"priority\" SIZE=1>"; for (i = 1; eFIXING_PRIORITY_STRING[i] != NULL; i++) { con << TAG << "<OPTION SELECTED VALUE=" << i << ">" << eFIXING_PRIORITY_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Software:</TH>" "<TD><SELECT NAME=\"software\" SIZE=1>"; if (products.select() != 0) { print(con, products); } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Version:</TH>" "<TD><INPUT TYPE=text NAME=\"version\"></TD></TR>" "<TR><TH ALIGN=LEFT>Platform:</TH>" "<TD><INPUT TYPE=text NAME=\"platform\"</TD></TR>" "<TR><TH ALIGN=LEFT>OS:</TH>" "<TD><INPUT TYPE=text NAME=\"os\"></TD></TR></TABLE><P>" "<INPUT TYPE=submit VALUE=\"Submit\"> " "<INPUT TYPE=reset></FORM>"; mainMenuReference(con); sequencer.update(); return true;}bool bugForm(WWWconnection& con);bool createBugReport(WWWconnection& con){ key = con.get("myself"); if (persons.select(qPerson) == 0) { error(con, "Author unknown"); return true; } key = con.get("software"); if (products.select(qSoftware) == 0) { error(con, "No such software product"); return true; } if (sscanf(con.get("version"), "%d.%d", &majorVersion, &minorVersion) != 2) { error(con, "Bad version format"); return true; } initialVersion = products->pVersions; if (versions.select(qVersion) == 0) { error(con, "No such software product version"); return true; } Bug bug; bug.bugId = atoi(con.get("bug")); bug.sOneLineSummary = con.get("summary"); bug.eCategory = atoi(con.get("category")); bug.eFixingPriority = atoi(con.get("priority")); bug.eSeverity = atoi(con.get("severity")); bug.sOperatingSystem = con.get("os"); bug.sHardwarePlatform = con.get("platform"); bug.pReportedBy = persons.currentId(); bug.pAssignedTo = null; bug.pSoftware = products.currentId(); bug.pVersion = versions.currentId(); bug.nReports = 0; insert(bug); con.addPair("action", "Select"); return bugForm(con);}bool bugForm(WWWconnection& con){ int i; char* bugStr = con.get("bug"); bugId = atoi(bugStr); if (bugs.select(qBug) == 0) { error(con, "No bug was selected"); return true; } char* myself = con.get("myself"); if (strcmp(con.get("action"), "Remove") == 0) { dbReference<Bug> pBug = bugs.currentId(); bugId = atoi(con.get("relatedbug")); if (bugs.select(qBug) == 0) { error(con, "No such bug"); return true; } int i = rindex(bugs->setSimilarBugs, pBug); if (i < 0) { error(con, "No such related bug"); return true; } bugs->setSimilarBugs.remove(i); bugs.update(); return bugForm(con); } key = myself; if (persons.select(qPerson) == 0) { error(con, "No such user"); return true; } if (strcmp(con.get("action"), "Deassign") == 0) { int i = rindex(persons->setAssignedBugs, bugs.currentId()); if (i < 0) { error(con, "Bug was not assigned"); return true; } persons->setAssignedBugs.remove(i); persons.update(); con.addPair("name", myself); return userForm(con); } int personStatus = persons->status; products.at(bugs->pSoftware); versions.at(bugs->pVersion); con << TAG << HTML_HEAD "<TITLE>Bug in " << products->sName << " v. " << versions->getVersionString() << "</TITLE></HEAD>" BODY "<H2>Bug in " << products->sName << " v. " << versions->getVersionString() << "</H2>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden " "NAME=\"page\" VALUE=\"updateBug\">" "<INPUT TYPE=hidden NAME=\"bug\" VALUE=" << bugStr << ">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">" "<TABLE><TH ALIGN=LEFT>Summary:</TH>" "<TD><INPUT TYPE=text NAME=\"summary\" SIZE=40 VALUE=\"" << bugs->sOneLineSummary << "\"></TD></TR>" "<TR><TH ALIGN=LEFT>Category:</TH>" "<TD><SELECT NAME=\"category\" SIZE=1>" "<OPTION SELECTED VALUE=" << bugs->eCategory << ">" << eCATEGORY_STRING[bugs->eCategory] << "</OPTION>"; for (i = 1; eCATEGORY_STRING[i] != NULL; i++) { con << TAG << "<OPTION VALUE=" << i << ">" << eCATEGORY_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Severity:</TH>" "<TD><SELECT NAME=\"severity\" SIZE=1>" "<OPTION SELECTED VALUE=" << bugs->eSeverity << ">" << eSEVERITY_STRING[bugs->eSeverity] << "</OPTION>"; for (i = 1; eSEVERITY_STRING[i] != NULL; i++) { con << TAG << "<OPTION VALUE=" << i << ">" << eSEVERITY_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Priority:</TH>" "<TD><SELECT NAME=\"priority\" SIZE=1>" "<OPTION SELECTED VALUE=" << bugs->eFixingPriority << ">" << eFIXING_PRIORITY_STRING[bugs->eFixingPriority] << "</OPTION>"; for (i = 1; eFIXING_PRIORITY_STRING[i] != NULL; i++) { con << TAG << "<OPTION VALUE=" << i << ">" << eFIXING_PRIORITY_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT></TD></TR>" "<TR><TH ALIGN=LEFT>Platform:</TH>"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?