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