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\">"		"&nbsp;<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\">"	    "&nbsp;<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\">&nbsp;"		"<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\">&nbsp;"	    "<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 + -
显示快捷键?