bugdb.cpp
来自「一个功能强大的内存数据库源代码,c++编写,有详细的注释」· C++ 代码 · 共 2,061 行 · 第 1/5 页
CPP
2,061 行
} reports.at(next); curr = next; next = reports->pNext; } while (reports->index != index); if (strcmp(con.get("action"), "Remove") == 0) { reports.remove(); bugs->nReports -= 1; if (prev == null) { bugs->pWorkArounds = next; } else { reports.at(prev); reports->pNext = next; reports.update(); } bugs.update(); con.addPair("action", "Select"); return bugForm(con); } char date[64]; reports->creationDate.asString(date, sizeof date); char* myself = con.get("myself"); key = myself; if (persons.select(qPerson) == 0) { error(con, "No such person"); return true; } int personStatus = persons->status; persons.at(reports->pAuthor); con << TAG << HTML_HEAD "<TITLE>Work around " << date << "</TITLE></HEAD>" BODY "<H2>Work around " << date << "</H2>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden " "NAME=\"page\" VALUE=\"updateWorkAround\">" "<INPUT TYPE=hidden NAME=\"bug\" VALUE=" << bugStr << ">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\"><INPUT TYPE=hidden NAME=\"workaround\" VALUE=" << index << "><B>Created by "; if (personStatus == Person::isUser) { con << TAG << "<A HREF=\"mailto:" << persons->sEmailAddress << "\">" << persons->sName << "</A>"; } else { con << TAG << "<A HREF=\"" << con.getStub() << "?socket=" << con.getAddress() << "&page=userForm&myself=" << URL << myself << "&name=" << URL << persons->sName << "\">" << persons->sName << "</A>"; } con << TAG << "<P>Status: </B><SELECT SIZE=1 NAME=\"status\">" "<OPTION SELECTED VALUE=" << reports->status << ">" << eSTATUS_STRING[reports->status] << "</OPTION>"; for (int i = 1; eSTATUS_STRING[i] != NULL; i++) { con << TAG << "<OPTION VALUE=" << i << ">" << eSTATUS_STRING[i] << "</OPTION>"; } con << TAG << "</SELECT><P>" "<B>Bug description:</B><BR>" "<TEXTAREA COLS=40 ROWS=5 NAME=\"description\">" << reports->sDescription << "</TEXTAREA><P>"; if (personStatus != Person::isUser) { con << TAG << "<INPUT TYPE=submit VALUE=\"Update\"> " "<INPUT TYPE=reset VALUE=\"Reset\">"; } con << TAG << "</FORM>"; mainMenuReference(con); return true;}bool updateReport(WWWconnection& con){ bugId = atoi(con.get("bug")); if (bugs.select(qBug) == 0) { error(con, "No such bug"); return true; } reportId = atoi(con.get("report")); firstReport = bugs->pReportHistory; if (reports.select(qReport) == 0) { error(con, "No report was selected"); return true; } reports->sDescription = con.get("description"); reports->status = atoi(con.get("status")); reports.update(); con.addPair("action", "Select"); return bugForm(con);}bool updateWorkAround(WWWconnection& con){ bugId = atoi(con.get("bug")); if (bugs.select(qBug) == 0) { error(con, "No such bug"); return true; } reportId = atoi(con.get("workaround")); firstReport = bugs->pWorkArounds; if (reports.select(qReport) == 0) { error(con, "No report was selected"); return true; } reports->sDescription = con.get("description"); reports->status = atoi(con.get("status")); reports.update(); con.addPair("action", "Select"); return bugForm(con);}bool attachToProject(WWWconnection& con){ key = con.get("name"); if (persons.select(qPerson) == 0 || persons->status == Person::isUser) { error(con, "No such engineer"); } else { key = con.get("software"); if (products.select(qSoftware) == 0) { error(con, "No such software product"); } else { if (rindex(products->setEngineers, persons.currentId()) >= 0) { error(con, "Engineer already attached to the project"); } else { products->setEngineers.append(persons.currentId()); products.update(); return userForm(con); } } } return true;}bool registerSoftware(WWWconnection& con){ key = con.get("name"); if (persons.select(qPerson) == 0) { error(con, "No such person"); } else { key = con.get("software"); if (products.select(qSoftware) == 0) { error(con, "No such software product"); } else { if (rindex(products->setUsers, persons.currentId()) >= 0) { error(con, "User already registered this software"); } else { products->setUsers.append(persons.currentId()); products.update(); return userForm(con); } } } return true;}bool softwareForm(WWWconnection& con){ char* software = con.get("software"); if (software == NULL) { error(con, "No software product was selected"); return true; } key = software; if (products.select(qSoftware) == 0) { error(con, "No such software product"); return true; } if (strcmp(con.get("action"), "Detach") == 0) { key = con.get("name"); if (persons.select(qPerson) == 0) { error(con, "No such person"); return true; } int i = rindex(persons->setProjects, products.currentId()); if (i < 0) { error(con, "Person was not attached to the project"); return true; } persons->setProjects.remove(i); persons.update(); return userForm(con); } if (strcmp(con.get("action"), "Unregister") == 0) { key = con.get("name"); if (persons.select(qPerson) == 0) { error(con, "No such person"); return true; } int i = rindex(persons->setUsedSoftware, products.currentId()); if (i < 0) { error(con, "Person was not registered"); return true; } persons->setProjects.remove(i); persons.update(); return userForm(con); } char* myself = con.get("myself"); key = myself; if (persons.select(qPerson) == 0) { error(con, "No such person"); return true; } int personStatus = persons->status; con << TAG << HTML_HEAD "<TITLE>" << software << "</TITLE></HEAD>" BODY "<H2>" << software << "</H2>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden " "NAME=\"page\" VALUE=\"updateSoftware\">" "<INPUT TYPE=hidden NAME=\"software\" VALUE=\"" << software << "\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">" "<TABLE><TR><TH ALIGN=LEFT>Product name:</TH>" "<TD><INPUT TYPE=text NAME=\"newname\" VALUE=\"" << software << "\">" "</TD></TR>"; if (products->pVersions != null) { versions.at(products->pVersions); con << TAG << "<TR><TH ALIGN=LEFT>Current version:</TH>" "<TD><INPUT TYPE=text NAME=\"version\" SIZE=8 VALUE=\"" << versions->getVersionString() << "\"></TD></TR>" "<TR><TH ALIGN=LEFT>Current version label:</TH>" "<TD><INPUT TYPE=text NAME=\"label\" SIZE=20 VALUE=\"" << versions->sLabel << "\"></TD></TR>" "<TR><TH ALIGN=LEFT>Current version comment:</TH>" "<TD><INPUT TYPE=text NAME=\"comment\" SIZE=40 VALUE=\"" << versions->sComment << "\"></TD></TR>"; } else { con << TAG << "<TR><TH ALIGN=LEFT>Current version:</TH>" "<TD><INPUT TYPE=text NAME=\"version\" SIZE=8></TD></TR>" "<TR><TH ALIGN=LEFT>Current version label:</TH>" "<TD><INPUT TYPE=text NAME=\"label\" SIZE=20></TD></TR>" "<TR><TH ALIGN=LEFT>Current version comment:</TH>" "<TD><INPUT TYPE=text NAME=\"comment\" SIZE=40></TD></TR>"; } con << TAG << "</TABLE><BR>"; if (personStatus != Person::isUser) { con << TAG << "<INPUT TYPE=submit VALUE=\"Update\"> <INPUT TYPE=reset>"; } con << TAG << "</FORM><P>" "<TABLE><TR><TH ALIGN=LEFT>Engineers:</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 << "\"><SELECT NAME=\"name\" SIZE=1>"; if (products->setEngineers.length() != 0) { print(con, products->setEngineers); con << TAG << "</SELECT>"; if (personStatus != Person::isUser) { con << TAG << "<INPUT TYPE=submit VALUE=\"Select\">"; } } else { con << TAG << EMPTY_LIST; } con << TAG << "</FORM></TD></TR>" "<TR><TH ALIGN=LEFT>Users:</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 << "\"><SELECT NAME=\"name\" SIZE=1>"; if (products->setUsers.length() != 0) { print(con, products->setUsers); con << TAG << "</SELECT>"; if (personStatus != Person::isUser) { con << TAG << "<INPUT TYPE=submit VALUE=\"Select\">"; } } else { con << TAG << EMPTY_LIST; } con << TAG << "</FORM></TD></TR>" "<TR><TH ALIGN=LEFT>Bugs:</TH>" "<TD><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 << "\"><SELECT NAME=\"bug\" SIZE=1>"; if (products->setBugs.length() != 0) { print(con, products->setBugs); con << TAG << "</SELECT><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">"; } else { con << TAG << EMPTY_LIST; } con << TAG << "</FORM></TD></TR>" "<TR><TH ALIGN=LEFT>Versions:</TH><TD>" "<FORM METHOD=POST ACTION=\""<<con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"versionForm\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\"><INPUT TYPE=HIDDEN NAME=\"software\" VALUE=\"" << software << "\"><SELECT NAME=\"version\" SIZE=1>"; initialVersion = products->pVersions; if (versions.select(qAllVersions) != 0) { print(con, versions); con << TAG << "</SELECT><INPUT TYPE=submit VALUE=\"Select\">"; } else { con << TAG << EMPTY_LIST; } con << TAG << "</FORM></TD></TR></TABLE>"; mainMenuReference(con); return true;}bool updateSoftware(WWWconnection& con) { char* software = con.get("software"); key = software; if (products.select(qSoftware) == 0) { error(con, "No such software product"); return true; } Version version; char* currentVersion = con.get("version"); version.sLabel = con.get("label"); version.sComment = con.get("comment"); if (sscanf(currentVersion, "%d.%d", &majorVersion, &minorVersion) != 2) { error(con, "Bad version number (MAJOR.MINOR expected)"); return true; } products->sName = con.get("newname"); version.majorVersionNumber = majorVersion; version.minorVersionNumber = minorVersion; version.released = dbDateTime::current(); if (products->pVersions != null) { initialVersion = products->pVersions; if (versions.select(qVersion) != 0) { versions->sComment = version.sComment; versions->sLabel = version.sLabel; } else { versions.at(products->pVersions); if (versions->majorVersionNumber > majorVersion || (versions->majorVersionNumber == majorVersion && versions->minorVersionNumber > minorVersion)) { error(con, "Version number less than of current version"); return true; } version.pNext = products->pVersions; products->pVersions = insert(version); } } else { version.pNext = null; products->pVersions = insert(version); } products.update(); con.addPair("name", con.get("myself")); return userForm(con);}bool versionForm(WWWconnection& con) { char* software = con.get("software"); char* myself = con.get("myself"); char buf[64]; key = software; if (products.select(qSoftware) == 0) { error(con, "No such software product"); return true; } char* versionString = con.get("version"); if (sscanf(versionString, "%d.%d", &majorVersion, &minorVersion) != 2) { error(con, "Bad version format"); return true; } initialVersion = products->pVersions; if (versions.select(qVersion) == 0) { error(con, "No such version"); return true; } key = myself; if (persons.select(qPerson) == 0) { error(con, "No such person"); return true; } con << TAG << HTML_HEAD "<TITLE>" << software << " v. " << versionString << "</TITLE></HEAD>" BODY "<H2>" << software << " v. " << versionString << "</H2>" "<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">" "<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() << "\"><INPUT TYPE=hidden " "NAME=\"page\" VALUE=\"updateVersion\">" "<INPUT TYPE=hidden NAME=\"software\" VALUE=\"" << software << "\">" "<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">" "<INPUT TYPE=hidden NAME=\"version\" VALUE=\"" << versionString <<"\">" "<TABLE><TR><TH ALIGN=LEFT>Released:</TH>" "<TD>" << versions->released.asString(buf, sizeof buf) << "</TD></TR>" "<TR><TH ALIGN=L
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?