其实是接了个外包单子,四小时爆撸20k代码
就共享出来吧
#include <bits/stdc++.h> using namespace std; bool comp1(vector<string> a, vector<string> b) { return a[0] < b[0]; } bool comp2(vector<string> a, vector<string> b) { return a[1] < b[1]; } class user { private: struct block { string user_name; string user_password; int user_type; //1 admin 2 supervisor 3 regular_user }; vector<block> vec; public: user(); ~user(); //use for file io //for convenience we use readable code-set void read_user_login_info() { ifstream is("user_list.db"); block tmp; while (is >> tmp.user_name >> tmp.user_password >> tmp.user_type) { vec.push_back(tmp); } is.close(); } void write_user_login_info() { ofstream os("user_list.db", ios::trunc); for (auto it : vec) { os << it.user_name << " " << it.user_password << " " << it.user_type << "\n"; } os.close(); } pair<int, string> login() { //log in to the system //return user_type and username string in_name, in_pwd; cout << "Please input username\n"; cin >> in_name; cout << "Please input passowrd\n"; cin >> in_pwd; for (auto it : vec) { if (in_name == it.user_name) { if (in_pwd == it.user_password) { cout << "Welcome!" << in_name << "\n"; return {it.user_type, it.user_name}; } else { cout << "Wrong certification, Please retry\n"; return {0, ""}; } } } cout << "Wrong certification, Please retry\n"; return {0, ""}; } string add_new_admin(string user_nm) { //only for test string user_pw = "123456"; vec.push_back({user_nm, user_pw, 1}); return user_pw; } string add_new_sup(string user_nm) { //only for test string user_pw = "123456"; vec.push_back({user_nm, user_pw, 2}); return user_pw; } string add_new_vol(string user_nm) { //add new volunteer //return the password srand(time(0)); string user_pw = to_string(rand()) + to_string(rand()); vec.push_back({user_nm, user_pw, 3}); return user_pw; } }; user::user(){}; user::~user(){}; user gb_user; //Globally store the user info class volunteer { private: vector<string> vol_meta; vector<vector<string>> vol_data; public: volunteer(); ~volunteer(); //file io begin// void read_vol_info() { ifstream is1("vol_meta.db"); string tmp; while (is1 >> tmp) { vol_meta.push_back(tmp); } is1.close(); ifstream is2("vol_list.db"); vector<string> tmpp; while (true) { tmpp.clear(); for (int i = 0; i < vol_meta.size(); i++) { if (is2 >> tmp) { tmpp.push_back(tmp); } else { goto readend; } } vol_data.push_back(tmpp); } readend: is2.close(); } void write_vol_info() { ofstream os1("vol_meta.db", ios::trunc); for (auto it : vol_meta) { os1 << it << "\n"; } os1.close(); ofstream os2("vol_list.db", ios::trunc); for (auto it : vol_data) { for (int i = 0; i < vol_meta.size(); i++) { if (i < it.size()) { os2 << it[i] << " "; } else { os2 << "null "; } } os2 << "\n"; } os2.close(); } //file io end// vector<string> get_vol_meta() { return vol_meta; } vector<pair<string, string>> get_vol_info(string ser_num) { //for personal user to get his own info vector<pair<string, string>> vol_view; for (auto it : vol_meta) { vol_view.push_back(make_pair(it, "null")); } for (auto it : vol_data) { if (*it.begin() == ser_num) { int i = 0; for (auto it2 : it) { vol_view[i++].second = it2; } return vol_view; break; } } return vol_view; } void add_new_vol(vector<string> new_piece) { //add_new_volunteer vol_data.push_back(new_piece); } void add_new_cons(string new_cons) { //add_new_constraint vol_meta.push_back(new_cons); } void list_all_vol() { cout << "Please input the sort key?\n1. By No\n2. By Name\n0. No sort\n"; int sot; cin >> sot; for (auto it : vol_meta) { cout << it << " "; } cout << "\n"; vector<vector<string>> tmp = vol_data; if (sot == 1) { sort(tmp.begin(), tmp.end(), comp1); } else if (sot == 2) { sort(tmp.begin(), tmp.end(), comp2); } for (auto it : tmp) { for (auto iter : it) { cout << iter << " "; } cout << "\n"; } } void filter_vol(int opr, string tag) { cout << "Please input the sort key?\n1. By No\n2. By Name\n0. No sort\n"; int sot; cin >> sot; for (auto it : vol_meta) { cout << it << " "; } cout << "\n"; vector<vector<string>> tmp; for (auto it : vol_data) { if (it.size() > opr && it[opr] == tag) { tmp.push_back(it); } } if (sot == 1) { sort(tmp.begin(), tmp.end(), comp1); } else if (sot == 2) { sort(tmp.begin(), tmp.end(), comp2); } for (auto it : vol_data) { if (it.size() > opr && it[opr] == tag) { for (auto iter : it) { cout << iter << " "; } cout << "\n"; } } } void modify_attr(string user_nm, int opr, string newval) { for (auto it : vol_data) { if (it[0] == user_nm) { it[opr] = newval; } } } }; volunteer::volunteer(){}; volunteer::~volunteer(){}; volunteer gb_vol; //Globally store the volunteer info class job { private: struct block { string title; string desc; }; vector<block> vec; public: job(); ~job(); void read_job_info() { ifstream is("job_list.db"); block tmp; while (is >> tmp.title >> tmp.desc) { vec.push_back(tmp); } is.close(); } void write_job_info() { ofstream os("job_list.db", ios::trunc); for (auto it : vec) { os << it.title << " " << it.desc << "\n"; } os.close(); } void add_job(string in_title, string in_desc) { vec.push_back({in_title, in_desc}); } int_fast32_t count_job() { return vec.size(); } void list_job() { cout << "Job title Job description\n"; int cnt = 1; for (auto it : vec) { cout << cnt++ << " " << it.title << " " << it.desc << "\n"; } } }; job::job(){}; job::~job(){}; job gb_job; //ȫ�ָ�λ���� class admin { private: public: admin(); ~admin(); int display_func() { cout << "0. Exit system\n"; cout << "1. Add new constraint\n"; cout << "2. Display volunteer info\n"; cout << "3. Search volunteer info\n"; int opr; cin >> opr; return opr; } void add_constraint() { cout << "Now adding new constraint...\n"; string in_cons; cin >> in_cons; gb_vol.add_new_cons(in_cons); cout << "New constraint" << in_cons << "has been added\n"; } void list_all_vol() { gb_vol.list_all_vol(); } void filter_vol() { cout << "Please input the key you want to filter by\n"; vector<string> meta_data = gb_vol.get_vol_meta(); for (int i = 0; i < meta_data.size(); i++) { cout << i + 1 << "." << meta_data[i] << "\n"; } int opr; cin >> opr; cout << "Please input the <key,value>\n"; string tag; cin >> tag; gb_vol.filter_vol(opr - 1, tag); } void modify_info() { cout << "Please input the No you want to make change\n"; string num; cin >> num; cout << "Please input the attribute you want to change\n"; vector<string> meta_data = gb_vol.get_vol_meta(); for (int i = 0; i < meta_data.size(); i++) { cout << i + 1 << "." << meta_data[i] << "\n"; } int opr; cin >> opr; cout << "Please input the new attribute\n"; string attrr; cin >> attrr; gb_vol.modify_attr(num, opr, attrr); } }; admin::admin(){}; admin::~admin(){}; class supervisor { private: public: supervisor(); ~supervisor(); int display_func() { cout << "0. Exit system\n"; cout << "1. Add new volunteer\n"; cout << "2. Display volunteer info\n"; cout << "3. Search volunteer info\n"; cout << "4. Add new job\n"; int opr; cin >> opr; return opr; } void add_volunteer() { cout << "Now adding new volunteer...\n"; vector<string> meta_data = gb_vol.get_vol_meta(); vector<string> new_piece; for (auto it : meta_data) { cout << "Now input " << it << " \n"; string in; cin >> in; new_piece.push_back(in); } gb_vol.add_new_vol(new_piece); cout << "New user " << new_piece[0] << " has been added"; cout << "Default password is " << gb_user.add_new_vol(new_piece[0]) << "\n"; } void list_all_vol() { gb_vol.list_all_vol(); } void filter_vol() { cout << "Please input the key you want to filter by\n"; vector<string> meta_data = gb_vol.get_vol_meta(); for (int i = 0; i < meta_data.size(); i++) { cout << i + 1 << "." << meta_data[i] << "\n"; } int opr; cin >> opr; cout << "Please input the <key,value>\n"; string tag; cin >> tag; gb_vol.filter_vol(opr - 1, tag); } void add_job() { cout << "Adding new job...\n"; string in_title, in_desc; cout << "Now input the job title\n"; cin >> in_title; cout << "Now input the job description\n"; cin >> in_desc; gb_job.add_job(in_title, in_desc); } void modify_info() { cout << "Please input the No you want to make change\n"; string num; cin >> num; cout << "Please input the attribute you want to change\n"; vector<string> meta_data = gb_vol.get_vol_meta(); for (int i = 0; i < meta_data.size(); i++) { cout << i + 1 << "." << meta_data[i] << "\n"; } int opr; cin >> opr; cout << "Please input the new attribute\n"; string attrr; cin >> attrr; gb_vol.modify_attr(num, opr, attrr); } }; supervisor::supervisor(){}; supervisor::~supervisor(){}; class vol_restricted { private: vector<pair<string, string>> vol_view; public: vol_restricted(string ser_num); ~vol_restricted(); int display_func() { cout << "0. Exit system\n"; cout << "1. Display personal info\n"; cout << "2. Sign for a job\n"; cout << "3. Complete my infomation\n"; int opr; cin >> opr; return opr; } void display_info() { for (auto it : vol_view) { cout << it.first << " "; } cout << "\n"; for (auto it : vol_view) { cout << it.second << " "; } cout << "\n"; } void sign_job() { cout << "The current jobs are:"; gb_job.list_job(); cout << "Please input the number you want to sign\n"; int num; cin >> num; cout << "You have signed successfully\n"; } void fill_info() { for (int i = 0; i < vol_view.size(); i++) { if (vol_view[i].second == "null") { cout << "Your attribute " << vol_view[i].first << " is missing, Please fill it\n"; string in; cin >> in; vol_view[i].second = in; gb_vol.modify_attr(vol_view[0].second, i, in); cout << "Updated!\n"; } } cout << "\n"; } }; vol_restricted::vol_restricted(string ser_num) { vol_view = gb_vol.get_vol_info(ser_num); }; vol_restricted::~vol_restricted(){}; void migrate_init() { cout << "If this is your first time use this system, input 1 for system migration otherwise input something else you like\n"; int op; cin >> op; if (op == 1) { cout << "Migrating the system\n"; cout << "Default users are\n"; cout << "Username Password\n"; cout << "admin 123456\n"; cout << "supervisor 123456\n"; gb_user.add_new_admin("admin"); gb_user.add_new_sup("supervisor"); gb_user.write_user_login_info(); gb_vol.add_new_cons("Ser_no"); //primary key gb_vol.add_new_cons("Name"); gb_vol.add_new_cons("Dept"); gb_vol.add_new_cons("Mobile"); gb_vol.write_vol_info(); cout << "Migrate Successfully, Please reboot the system\n"; exit(0); } else { cout << "Pass migration\n"; } } void sys_init() { cout << "System initilizing...\n"; gb_user.read_user_login_info(); gb_vol.read_vol_info(); gb_job.read_job_info(); } int main() { migrate_init(); sys_init(); pair<int, string> user_type; while (user_type = gb_user.login(), !user_type.first) { } if (user_type.first == 1) { admin adm; int opr_type; while (opr_type = adm.display_func(), opr_type) { if (opr_type == 1) { adm.add_constraint(); } else if (opr_type == 2) { adm.list_all_vol(); } else if (opr_type == 3) { adm.filter_vol(); } } } else if (user_type.first == 2) { supervisor sup; int opr_type; while (opr_type = sup.display_func(), opr_type) { if (opr_type == 1) { sup.add_volunteer(); } else if (opr_type == 2) { sup.list_all_vol(); } else if (opr_type == 3) { sup.filter_vol(); } else if (opr_type == 4) { sup.add_job(); } } } else if (user_type.first == 3) { vol_restricted vor(user_type.second); int opr_type; while (opr_type = vor.display_func(), opr_type) { if (opr_type == 1) { vor.display_info(); } else if (opr_type == 2) { vor.sign_job(); } else if (opr_type == 3) { vor.fill_info(); } } } gb_user.write_user_login_info(); gb_vol.write_vol_info(); gb_job.write_job_info(); return 0; }
您好,博主
可以投稿服务器或者scdn文章内容吗?
这边可以赞助高防scdn【国内外均可】【一年起】
并且会给您一个心意红包
国内正规持证公司
联合计划介绍:https://www.tsyvps.com/bbs/?p=158
如果不方便发您的联系方式
以下是我的联系方式!
我的QQ是:2814841448
我记得我做志愿者系统时候还是挺复杂的,档案管理、申请审核、活动管理、考勤管理什么的一大堆