diff --git a/图鉴系统.txt b/图鉴系统.txt new file mode 100644 index 0000000..4d03477 --- /dev/null +++ b/图鉴系统.txt @@ -0,0 +1,801 @@ +#include +#include +#include +#include +#include + +using namespace std; + +class item { +private: + string itemname; + int intnum{ 0 }, strnum{ 0 }; + vector intentry; + vector strentry; + friend class kind; + friend class handbook; +public: + item(const item &_item) { + itemname = _item.itemname; + intnum = _item.intnum; + strnum = _item.strnum; + intentry = _item.intentry; + strentry = _item.strentry; + } + + item() { + + } + + ~item() { + + } + +}; + +class kind { +public: + string kindname; + int intnum{0}; + vector intname; + int strnum{0}; + vector strname; + vector itemlist; + + kind(vector _itemlist) { + this->itemlist = _itemlist; + } + kind() { + + } + + ~kind(){} + +}; + +class handbook { +public: + vector kindlist; + int password{ 123456 }; + handbook(vector _kindlist) { + this->kindlist = _kindlist; + } + handbook() { + + } + ~handbook() { + + } + + void kindprint(int n) { + cout << "\n种类名:" << kindlist[n].kindname; + for (int i{ 0 }; i < kindlist[n].intnum; i++) { + cout << "\n第" << i + 1 << "个词条:" << kindlist[n].intname[i]; + } + for (int i{ 0 }; i <= kindlist[n].strnum; i++) { + cout << "\n第" << kindlist[n].intnum + i + 1 << "个词条:" << kindlist[n].strname[i]; + } + } + + void itemprint(int n0, int n1) { + cout << "\n物品名:" << kindlist[n0].itemlist[n1].itemname; + for (int i{ 0 }; i < kindlist[n0].intnum; i++) { + cout << "\n" << kindlist[n0].intname[i] << ":" << kindlist[n0].itemlist[n1].intentry[i]; + } + for (int i{ 0 }; i <= kindlist[n0].strnum; i++) { + cout << "\n" << kindlist[n0].strname[i] << ":" << kindlist[n0].itemlist[n1].strentry[i]; + } + } + + void myregister() { + cout << "请选择你的登录方式: 1.管理员登录 2.游客登录\n"; + cout << "请输入你的选择(输入方式前的序号后按回车):"; + int sel, password0{1}; + while (cin >> sel) { + if (sel != 1 && sel != 2) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel == 1) { + cout << "请输入管理员密钥(输入1进入游客模式):"; + while (cin >> password0) { + if (password0 != password && password0!=1) { + cout << "密码错误!\n" << "请重新输入你的密码(输入1进入游客模式):"; + } + else break; + } + } + if (password0 == 1)sel = 2; + menu(sel); + } + + void menu(int sel) { + system("cls"); + string sel1; + if (sel == 1) { + cout << "\t\t\t**********欢迎来到学生成绩管理系统**********" << endl; + cout << "\t\t\t你可以进行以下操作:" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 1 信息创建(种类/物品) |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 2 信息删除(种类/物品) |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 3 信息修改(种类/物品) |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 4 物品清单查看 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 5 物品信息查找 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 6 物品数据分析 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 7 清空系统数据 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 0 退出 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t请选择【0-7】:"; + while (cin >> sel1) { + if (sel1 != "1" && sel1 != "2" && sel1 != "3" && sel1!="4" && sel1!="5" && sel1!="6" && sel1!="7" && sel1!="0") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel1 == "1") { + system("cls"); + cout << "请选择你要创建的类别: 1.种类 2.物品\n"; + cout << "请输入你的选择(输入方式前的序号后按回车):"; + string sel2; + while (cin >> sel2) { + if (sel2 != "1" && sel2 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel2 == "1") + kindcreate(); + else + itemcreate(); + } + else if (sel1 == "2") { + system("cls"); + cout << "请选择你要删除的类别: 1.种类 2.物品\n"; + cout << "请输入你的选择(输入方式前的序号后按回车):"; + string sel2; + while (cin >> sel2) { + if (sel2 != "1" && sel2 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel2 == "1") + kinddelete(); + else + itemdelete(); + } + else if (sel1 == "3") { + system("cls"); + cout << "请选择你要修改的类别: 1.种类 2.物品\n"; + cout << "请输入你的选择(输入方式前的序号后按回车):"; + string sel2; + while (cin >> sel2) { + if (sel2 != "1" && sel2 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel2 == "1") + kindamend(); + else + itemamend(); + } + else if (sel1 == "4") { + inventory(); + } + else if (sel1 == "5") { + search(); + } + else if (sel1 == "6") { + + } + else if (sel1 == "7") { + system("cls"); + cout << "是否确定要清空数据? 1.清空 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") { + password = 123456; + kindlist.clear(); + cout << "\n已清空系统数据"; + string sel; + cout << "\n输入任意字符后按回车即可返回菜单"; + cin >> sel; + menu(1); + } + else { + menu(1); + } + } + else { + system("cls"); + cout << "是否保存数据? 1.保存 2.直接退出"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") { + writefile(); + cout << "已保存系统数据"; + string sel; + cout << "\n输入任意字符后按回车即可退出"; + cin >> sel; + } + } + } + else { + cout << "\t\t\t**********欢迎来到学生成绩管理系统**********" << endl; + cout << "\t\t\t你可以进行以下操作:" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 1 物品清单查看 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 2 物品信息查找 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 3 物品数据分析 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t| 0 退出 |" << endl; + cout << "\t\t\t|------------------------------------------|" << endl; + cout << "\t\t\t请选择【0-3】:"; + while (cin >> sel1) { + if (sel1 != "1" && sel1 != "2" && sel1 != "3" && sel1 != "0") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel1 == "1") { + inventory(); + } + else if (sel1 == "2") { + search(); + } + else if (sel1 == "3") { + + } + else { + + } + } + + } + + void kindcreate() { + kind kind0; + system("cls"); + cout << "请输入你要添加的种类名:"; + cin>> kind0.kindname; + cout << "请输入你要创建的数字型词条数:"; + cin >> kind0.intnum; + for(int i{0};i< kind0.intnum;i++){ + cout << "请输入你要创建的第" << i + 1 << "个数字型词条名:"; + string name; + cin >> name; + kind0.intname.push_back(name); + } + cout << "请输入你要创建的文字型词条数:"; + cin >> kind0.strnum; + for (int i{ 0 }; i < kind0.strnum; i++) { + cout << "请输入你要创建的第" << i + 1 << "个文字型词条名:"; + string name; + cin >> name; + kind0.strname.push_back(name); + } + kind0.strname.push_back("备注"); + kindlist.push_back(kind0); + system("cls"); + cout << "创建成功!\n"; + int n = kindlist.size()-1; + kindprint(n); + cout << "\n是否继续创建? 1.继续创建 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel2; + while (cin >> sel2) { + if (sel2 != "1" && sel2 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel2 == "1") + kindcreate(); + else + menu(1); + } + + void itemcreate() { + system("cls"); + cout << "请选择你要创建的位置:\n"; + for (int i{ 0 }; i < kindlist.size(); i++) { + cout << i + 1 << "." << kindlist[i].kindname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel2; + while (cin >> sel2) { + if (sel2 < 1 || sel2 >kindlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + item item0; + system("cls"); + cout << "请输入你要添加的物品名:"; + cin >> item0.itemname; + item0.intnum=kindlist[sel2-1].intnum; + for (int i{ 0 }; i < item0.intnum; i++) { + cout << "请输入你要创建物品的“" << kindlist[sel2-1].intname[i] << "”词条内容:"; + int entry; + cin >> entry; + item0.intentry.push_back(entry); + } + item0.strnum = kindlist[sel2-1].strnum; + for (int i{ 0 }; i <= item0.strnum; i++) { + cout << "请输入你要创建物品的“" << kindlist[sel2-1].strname[i] << "”词条内容:"; + string name; + cin >> name; + item0.strentry.push_back(name); + } + kindlist[sel2-1].itemlist.push_back(item0); + system("cls"); + cout << "创建成功!\n"; + int n = kindlist[sel2 - 1].itemlist.size()-1; + itemprint(sel2 - 1, n); + cout << "\n是否继续创建? 1.继续创建 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + itemcreate(); + else + menu(1); + } + + void kinddelete() { + system("cls"); + cout << "请选择你要删除的种类:\n"; + for (int i{ 0 }; i < kindlist.size(); i++) { + cout << i + 1 << "." << kindlist[i].kindname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel2; + while (cin >> sel2) { + if (sel2 < 1 || sel2 >kindlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + vector::iterator it=kindlist.begin(); + for (int i{ 1 }; i < sel2; i++) + it++; + kindlist.erase(it); + system("cls"); + cout << "删除成功!\n"; + cout << "\n是否继续删除? 1.继续删除 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + kinddelete(); + else + menu(1); + } + + void itemdelete() { + system("cls"); + cout << "请选择你要删除的物品所属的种类:\n"; + for (int i{ 0 }; i < kindlist.size(); i++) { + cout << i + 1 << "." << kindlist[i].kindname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel2; + while (cin >> sel2) { + if (sel2 < 1 || sel2 >kindlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + system("cls"); + cout << "请选择你要删除的物品:\n"; + for (int i{ 0 }; i < kindlist[sel2-1].itemlist.size(); i++) { + cout << i + 1 << "." << kindlist[sel2-1].itemlist[i].itemname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel1; + while (cin >> sel1) { + if (sel1 < 1 || sel1 >kindlist[sel2-1].itemlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + vector::iterator it = kindlist[sel2-1].itemlist.begin(); + for (int i{ 1 }; i < sel1; i++) + it++; + kindlist[sel2-1].itemlist.erase(it); + system("cls"); + cout << "删除成功!\n"; + cout << "\n是否继续删除? 1.继续删除 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + kinddelete(); + else + menu(1); + } + + void kindamend() { + system("cls"); + cout << "请选择你要修改的种类:\n"; + for (int i{ 0 }; i < kindlist.size(); i++) { + cout << i + 1 << "." << kindlist[i].kindname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel2; + while (cin >> sel2) { + if (sel2 < 1 || sel2 >kindlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + system("cls"); + int j{ 1 }; + cout << "1."<> sel1) { + if (sel1 < 1 || sel1 >kindlist[sel2-1].intnum+kindlist[sel2-1].strnum+2) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel1 == 1) + { + cout << "你想将“" << kindlist[sel2 - 1].kindname << "”修改为:"; + cin >> kindlist[sel2-1].kindname; + } + else if (sel1 > 1 && sel1 < kindlist[sel2 - 1].intnum + 2) + { + cout << "你想将“" << kindlist[sel2 - 1].intname[sel1 - 2] << "”修改为:"; + cin >> kindlist[sel2 - 1].intname[sel1 - 2]; + } + else + { + cout << "你想将“" << kindlist[sel2 - 1].strname[sel1 - kindlist[sel2 - 1].intnum - 2] << "”修改为:"; + cin >> kindlist[sel2 - 1].strname[sel1 - kindlist[sel2 - 1].intnum - 2]; + } + + system("cls"); + cout << "修改成功!"; + kindprint(sel2 - 1); + cout << "\n是否继续修改? 1.继续修改 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + kindamend(); + else + menu(1); + } + + void itemamend() { + system("cls"); + cout << "请选择你要修改的种类:\n"; + for (int i{ 0 }; i < kindlist.size(); i++) { + cout << i + 1 << "." << kindlist[i].kindname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel1; + while (cin >> sel1) { + if (sel1 < 1 || sel1 >kindlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + system("cls"); + cout << "请选择你要修改的物品:\n"; + for (int i{ 0 }; i < kindlist[sel1-1].itemlist.size(); i++) { + cout << i + 1 << "." << kindlist[sel1-1].itemlist[i].itemname << " "; + } + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + int sel2; + while (cin >> sel2) { + if (sel2 < 1 || sel2 >kindlist[sel1-1].itemlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + system("cls"); + int j{ 1 }; + cout << "1." << kindlist[sel1 - 1].itemlist[sel2-1].itemname << "\t"; + for (int i{ 0 }; i < kindlist[sel1 - 1].intnum; i++) { + j++; + cout << j << "." << kindlist[sel1 - 1].itemlist[sel2-1].intentry[i] << "\t\t "; + } + for (int i{ 0 }; i <= kindlist[sel1 - 1].strnum; i++) { + j++; + cout << j << "." << kindlist[sel1 - 1].itemlist[sel2-1].strentry[i] << "\t\t "; + } + cout << endl; + cout << "请选择你要修改的内容:\n"; + cout << "\n请输入你的选择(输入内容前的序号后按回车):"; + int sel; + while (cin >> sel) { + if (sel < 1 || sel >kindlist[sel1 - 1].intnum + kindlist[sel1 - 1].strnum + 2) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel == 1) + { + cout << "你想将“" << kindlist[sel1 - 1].itemlist[sel2-1].itemname << "”修改为:"; + cin >> kindlist[sel1 - 1].itemlist[sel2 - 1].itemname; + } + else if (sel > 1 && sel < kindlist[sel1 - 1].intnum + 2) + { + cout << "你想将“" << kindlist[sel1 - 1].itemlist[sel2 - 1].intentry[sel - 2] << "”修改为:"; + cin >> kindlist[sel1 - 1].itemlist[sel2 - 1].intentry[sel - 2]; + } + else + { + cout << "你想将“" << kindlist[sel1 - 1].itemlist[sel2-1].strentry[sel - kindlist[sel1 - 1].intnum - 2] << "”修改为:"; + cin >> kindlist[sel1 - 1].itemlist[sel2 - 1].strentry[sel - kindlist[sel1 - 1].intnum - 2]; + } + system("cls"); + cout << "修改成功!"; + itemprint(sel1 - 1,sel2-1); + cout << "\n是否继续修改? 1.继续修改 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + itemamend(); + else + menu(1); + } + + void inventory() { + system("cls"); + cout << "请选择你要查看的清单范围:\n"; + cout << "1.全部\t"; + for (int i{ 0 }; i < kindlist.size(); i++) + cout << i + 2 << "." << kindlist[i].kindname << "\t"; + cout << "\n请输入你的选择(输入选择前的序号后按回车):"; + int sel1; + while (cin >> sel1) { + if (sel1 < 1 || sel1 >kindlist.size()+1) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel1 == 1) { + int j{ 0 }; + vectorjx,jy; + cout << "全部:\n"; + for (int i{ 0 }; i < kindlist.size(); i++) { + for (int k{ 0 }; k < kindlist[i].itemlist.size(); k++) { + j++; + cout << " " << j << "." << kindlist[i].itemlist[k].itemname<> sel) { + if (sel < 1 || sel >j) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + system("cls"); + itemprint(jx[j], jy[j]); + } + else{ + cout << kindlist[sel1 - 2].kindname<<":\n"; + for (int i{ 0 }; i < kindlist[sel1 - 2].itemlist.size(); i++) { + cout << " " << i + 1 << "." << kindlist[sel1 - 2].itemlist[i].itemname << endl; + } + int sel; + cout << "请选择你要查看的物品\n" << "请输入你的选择(输入要查看物品前的序号):"; + while (cin >> sel) { + if (sel < 1 || sel >kindlist[sel1 - 2].itemlist.size()) { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + system("cls"); + itemprint(sel1 - 2, sel - 1); + } + cout << "\n是否继续查看? 1.继续查看 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + inventory(); + else + menu(1); + } + + void search() { + system("cls"); + cout << "请输入你要查找的物品名:"; + string name; + bool a = 0; + cin >> name; + for (int i = 0; i < kindlist.size(); i++) { + for (int j = 0; j < kindlist[i].itemlist.size(); j++) { + if (name == kindlist[i].itemlist[j].itemname) { + a = 1; + itemprint(i, j); + } + } + } + if (a == 0) { + cout << "\n未查找到输入的物品名"; + } + cout << "\n是否继续查找? 1.继续查找 2.返回菜单"; + cout << "\n请输入你的选择(输入方式前的序号后按回车):"; + string sel3; + while (cin >> sel3) { + if (sel3 != "1" && sel3 != "2") { + cout << "输入字符不合法,请重新输入你的选择:"; + } + else break; + } + if (sel3 == "1") + search(); + else + menu(1); + } + + void readfile() { + ifstream kind12; + kind12.open("myfile.txt",ios::in); + kind12 >> password; + int kindnum; + kind12 >> kindnum; + for (int i = 0; i < kindnum; i++) + { + kind kind0; + int itemnum0; + kind12 >> itemnum0; + kind12 >> kind0.intnum; + kind12 >> kind0.strnum; + kind12 >> kind0.kindname; + for (int a = 0; a < kind0.intnum; a++) + { + string intname0; + kind12 >> intname0; + kind0.intname.push_back(intname0); + } + for (int b = 0; b <= kind0.strnum; b++) + { + string strname0; + kind12 >> strname0; + kind0.strname.push_back(strname0); + } + for (int j = 0; j < itemnum0; j++) + { + item item0; + kind12 >> item0.itemname; + for (int k{ 0 }; k < kind0.intnum; k++) + { + int intentry0; + kind12 >> intentry0; + item0.intentry.push_back(intentry0); + } + for (int h{ 0 }; h <= kind0.strnum; h++) + { + string strentry0; + kind12 >> strentry0; + item0.strentry.push_back(strentry0); + } + kind0.itemlist.push_back(item0); + } + kindlist.push_back(kind0); + } + kind12.close(); + } + + void writefile() { + ofstream kind22; + kind22.open("myfile.txt", ios::out); + kind22 << password << endl; + kind22 << kindlist.size()<