写程序的日记

花了十多个小时完成老师布置的任务(应该算吧=D)
还有些小问题仍待解决。
这里算是自己的一个小的努力的纪念碑吧
bug:

  1. 学生能还老师借的书(笑死)
  2. 还书还是有点小bug??没有检查出大问题吧?
    (笑)
    于2021、6、21重新更新了一点,可以输出日志。
    还是懒得修bug =D;
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<fstream>
#include<sstream>
#include<map>
#include<iostream>
#include<vector>
//#pragma warning(disable:4996);
using namespace std;
string ID, mima;
class BOOK {private:string nam;int left = 0;int day = -99;string who="NONE";bool tech_only = 0;//0为所有人可 1仅老师可借阅
public:BOOK() {}BOOK(string name, int left, string who, int day, bool tech_only){this->nam = name;this->left = left;this->day = day;this->who = who;this->tech_only = tech_only;}friend ostream& operator <<(ostream& input, BOOK& t);friend ifstream& operator >> (ifstream& output, BOOK& t);string get_nam(){return nam;}int get_day(){return day;}int get_left(){return left;}string get_who(){return who;}bool get_tech(){return tech_only;}void change(string a,int day){this->left = 0;this->day = day;this->who = a;}void book_return(){this->left = 1;this->day = -99;this->who = "NONE";}
};
class EBOOK :public BOOK
{private:public:EBOOK(string name, int left, string who, int day, bool tech_only) :BOOK(name, left, who, day, tech_only){}friend ostream& operator <<(ostream& input, EBOOK& t);friend ifstream& operator >> (ifstream& output, EBOOK& t);
};
class DVD :public BOOK
{private:public:DVD(string name, int left, string who, int day, bool tech_only) :BOOK(name, left, who, day, tech_only){}friend ostream& operator <<(ostream& input, DVD& t);friend istream& operator >> (istream& output, DVD& t);
};ostream& operator <<(ostream& input, BOOK& t)  //book 输出
{input << "名称:" << t.nam;// << "  还书天数" << t.day << endl;if (t.left){input << "   可借阅\n" << endl;}else {input << "  还书天数" << t.day << endl << endl;}return input;
}
ifstream& operator >> (ifstream& output, BOOK& t)
{output >> t.nam >> t.left >> t.who >> t.day >> t.tech_only;return output;
}
ostream& operator <<(ostream& input, EBOOK& t)  //EBOOK输出
{input << "名称:" << t.get_nam();// << "  还书天数" << t.get_day() << endl;if (t.get_left()){input << "   可借阅\n" << endl;}else{input << "  还书天数" << t.get_day() << endl << endl;}return input;
}
ifstream& operator >> (ifstream& output, EBOOK& t)
{return output;
}
ostream& operator <<(ostream& input, DVD& t)   //DVD输出
{input << "名称:" << t.get_nam();// << "  还书天数" << t.get_day() << endl;if (t.get_left()){input << "   可借阅\n" << endl;}else{input << "  还书天数" << t.get_day() << endl << endl;}return input;
}
istream& operator >> (istream& output, DVD& t)
{//output >> t.nam;return output;
}
vector<BOOK>book;
vector<EBOOK>ebook;
vector<DVD>dvd;
string Who_did;int length_book = 0;
int length_ebook = 0;
int length_dvd = 0;
int did_book[1001];
int did_ebook[1001];
int did_dvd[1001];int length_book_return = 0;
int length_ebook_return = 0;
int length_dvd_return = 0;
int did_book_return[1001];
int did_ebook_return[1001];
int did_dvd_return[1001];
void solution() //录入书本
{ifstream fin("book.txt");if (!fin){cout << "不能打开book输入文件" << endl;return;}string c; //nameint i;//借出状态int day;//剩余天数string ch;//谁借的bool tech_only;//仅仅老师能借的BOOK t; //testwhile (fin >> t){book.push_back(t);}fin.close();ifstream fin1("ebook.txt");if (!fin1){cout << "不能打开ebook输入文件" << endl;return;}while (fin1 >> c >> i >> ch >> day>> tech_only){EBOOK t(c, i, ch, day, tech_only);ebook.push_back(t);}fin1.close();ifstream fin2("dvd.txt");if (!fin2){cout << "不能打开dvd输入文件" << endl;return;}while (fin2 >> c >> i >> ch >> day>> tech_only){DVD t(c, i, ch, day, tech_only);dvd.push_back(t);}fin2.close();
}
void add()//添加书本
{cout << "添加总数 :";int N;cin >> N;//总数cout << endl;for (int i = 1; i <= N; i++){cout << "输入书本类型: \n书本: B \n电子书: E\nDVD: D\n ";string aaa;cin >> aaa;if (aaa == "B"){string name;cout << "输入书名: ";cin >> name;BOOK t(name, 1, "NONE", -99, 0);book.push_back(t);}else if (aaa == "E"){string name;cout << "输入书名: ";cin >> name;EBOOK t(name, 1, "NONE", -99, 0);ebook.push_back(t);}else if (aaa == "D"){string name;cout << "输入书名: ";cin >> name;DVD t(name, 1, "NONE", -99, 0);dvd.push_back(t);}}}
void Adm_display()
{cout << "BOOK : \n";for (int i = 0; i < book.size(); i++){cout << book[i];cout << "借阅者" << book[i].get_who() << endl;}cout << "EBOOK  :  \n";for (int i = 0; i < ebook.size(); i++){cout << ebook[i];cout << "借阅者" << ebook[i].get_who() << endl;}cout << "DVD :  \n";for (int i = 0; i < dvd.size(); i++){cout << dvd[i];cout << "借阅者" << dvd[i].get_who() << endl;}
}
void Log()
{cout << "退出文件夹中可查看" << endl;
}
void Adm()
{while (1){cout << "查询 请输入 L" << endl;cout << "如果添加书籍 按 A" << endl;cout << "导出日志 OUT" << endl;cout << "退出 输入END" << endl;string DID;try{cin >> DID;if (!(DID == "A" || DID == "END" || DID == "L" || DID == "OUT"))throw 1;}catch (int){cout << "输入错误 退出程序" << endl;return;}if (DID == "A"){add();}else if (DID == "L"){Adm_display();}else if (DID == "END"){return;}else if (DID == "OUT"){Log();}}}
void stu_brow()
{int Time = 0;while (1){if (Time > 3){cout << "学生超出今日能借书范围" << endl;return;}Time++;cout << "请输入借书类型 :BOOK ,EBOOK ,DVD :";string typ;cin >> typ;if (typ == "EBOOK"){cout << "请输入借阅书目 : ";string name;cin >> name;for (int i = 0; i <= ebook.size(); i++){if (name == ebook[i].get_nam()){if (!ebook[i].get_left()){cout << "可恶书被抢走了 (〃>目<) orz" << endl;return;}else{ebook[i].change("stu",40);}length_ebook++;did_book[length_ebook] = i;break;}else if (i == ebook.size() - 1){cout << "输入书名有误" << endl;}}}else if (typ == "BOOK"){cout << "请输入借阅书目 : ";string name;cin >> name;for (int i = 0; i < book.size(); i++){if (name == book[i].get_nam()){if (!book[i].get_left()){cout << "可恶书被抢走了 (〃>目<) orz" << endl;return;}else{book[i].change("stu", 40);}length_book++;did_book[length_book] = i;break;}else if (i == book.size() - 1){cout << "输入书名有误" << endl;}}}else if (typ == "DVD"){cout << "请输入借阅书目 : ";string name;cin >> name;for (int i = 0; i < dvd.size(); i++){if (name == dvd[i].get_nam()){if (!dvd[i].get_left()){cout << "可恶书被抢走了 (〃>目<) orz" << endl;return;}else{dvd[i].change("stu", 40);}length_dvd++;did_dvd[length_dvd] = i;break;}else if (i == dvd.size() - 1){cout << "输入书名有误" << endl;}}}else{cout << "输入错误退出" << endl;return;}cout << "继续借阅请输入 C 其他返回";string a;cin >> a;if (a != "C"){return;}}
}
void all_return()
{while (1){cout << "请输入还书类型 :BOOK ,EBOOK ,DVD :";string typ;cin >> typ;if (typ == "BOOK"){cout << "请输入所还书名 :";string name;cin >> name;for (int i = 0; i < book.size(); i++){if (book[i].get_nam() == name){if (book[i].get_day() == 0){cout << "超时还书扣钱(●'◡'●) orz" << endl;}else{book[i].book_return();}length_book_return++;did_book_return[length_book_return] = i;break;}else if (i == book.size() - 1){cout << "书名有误" << endl;return;}}}else if (typ == "EBOOK"){cout << "请输入所还书名 :";string name;cin >> name;for (int i = 0; i < ebook.size(); i++){if (ebook[i].get_nam() == name){if (ebook[i].get_day() == 0){cout << "超时还书扣钱(●'◡'●) orz" << endl;break;}else{ebook[i].book_return();}length_ebook_return++;did_ebook_return[length_ebook_return] = i;break;}else if (i == ebook.size() - 1){cout << "书名有误" << endl;return;}}}else if (typ == "DVD"){cout << "请输入所还书名 :";string name;cin >> name;for (int i = 0; i < dvd.size(); i++){if (dvd[i].get_nam() == name){if (dvd[i].get_day() == 0){cout << "超时还书扣钱(●'◡'●) orz" << endl;break;}else{dvd[i].book_return();}length_dvd_return++;did_dvd_return[length_dvd_return] = i;break;}else if (i == dvd.size() - 1){cout << "书名有误" << endl;return;}}}else{cout << "输入有误" << endl;return;}cout << "继续请输入 C 退出任意键盘" << endl;string a;cin >> a;if (a != "C"){cout << "退出" << endl;return;}}
}
void tec_brow()
{int Time = 0;while (1){if (Time > 15){cout << "老师超出今日能借书范围" << endl;return;}Time++;cout << "请输入借书类型 :BOOK ,EBOOK ,DVD :";string typ;cin >> typ;if (typ == "EBOOK"){cout << "请输入借阅书目 : ";string name;cin >> name;for (int i = 0; i <= ebook.size(); i++){if (name == ebook[i].get_nam()){if (ebook[i].get_left()){ebook[i].change("teacher", 360);}else{cout << "咩有了呢 /(ㄒoㄒ)/~~" << endl;return;}length_ebook++;did_ebook[length_ebook] = i;break;}else if (i == ebook.size() - 1){cout << "输入书名有误" << endl;}}}else if (typ == "BOOK"){cout << "请输入借阅书目 : ";string name;cin >> name;for (int i = 0; i <= book.size(); i++){if (name == book[i].get_nam()){if (book[i].get_left()){book[i].change("teacher", 360);}else{cout << "咩有了呢 /(ㄒoㄒ)/~~" << endl;return;}length_book++;did_book[length_book] = i;break;}else if (i == book.size() - 1){cout << "输入书名有误" << endl;}}}else if (typ == "DVD"){cout << "请输入借阅书目 : ";string name;cin >> name;for (int i = 0; i <= dvd.size(); i++){if (name == dvd[i].get_nam()){if (dvd[i].get_left()){dvd[i].change("teacher", 360);}else{cout << "咩有了呢 /(ㄒoㄒ)/~~" << endl;return;}length_dvd++;did_dvd[length_dvd] = i;break;}else if (i == dvd.size() - 1){cout << "输入书名有误" << endl;}}}else{cout << "输入错误退出" << endl;return;}cout << "继续借阅请输入 C 其他返回";string a;cin >> a;if (a != "C"){return;}}
}
void display(bool tec_only)
{if (tec_only){cout << "BOOK : \n\n";for (int i = 0; i < book.size(); i++){cout << book[i];}cout << "EBOOK  :  \n\n";for (int i = 0; i < ebook.size(); i++){cout << ebook[i];}cout << "DVD :  \n\n";for (int i = 0; i < dvd.size(); i++){cout << dvd[i];}}else{cout << "BOOK : \n\n";for (int i = 0; i < book.size(); i++){if(!book[i].get_tech())cout << book[i];}cout << "EBOOK  :  \n\n";for (int i = 0; i < ebook.size(); i++){if (!ebook[i].get_tech())cout << ebook[i];}cout << "DVD :  \n\n";for (int i = 0; i < dvd.size(); i++){if (!dvd[i].get_tech())cout << dvd[i];}}
}
void did_stu()
{cout << "现有书目: " << endl;display(0);while (1){cout << "借书 B\n还书 R\n";cout << "返回请输入 Q\n" << endl;string wh; //操作try{cin >> wh;if (!(wh == "B" || wh == "R" || wh == "Q")){throw 1;}}catch (int){cout << "错误";return;}if (wh == "B"){stu_brow();}else if (wh == "R"){all_return();}else if (wh == "Q"){cout << "退出系统" << endl;return;}}
}
void did_teacher()
{cout << "现有书目: " << endl;display(1);while (1){cout << "借书 B\n还书 R\n";cout << "返回请输入 Q\n";string wh; //操作try{cin >> wh;if (!(wh == "B" || wh == "R" || wh == "Q")){throw 1;}}catch (int){cout << "错误";return;}if (wh == "B"){tec_brow();}else if (wh == "R"){all_return();}else if (wh == "Q"){return;}}
}
void login()
{cout << "借书 输入 Y 管理员 输入 N 其他退出程序" << endl;string s;cin >> s;if (s == "Y"){string Nm;cout << "学生请输入S 老师请输入T" << endl;cin >> Nm;//cout << (Nm != "T" && Nm != "S");Who_did = Nm;//学生S 老师Ttry{if (Nm != "T" && Nm != "S")throw 1;}catch (int){cout << "错误";exit(0);}solution();if (Nm == "S"){did_stu();}else if (Nm == "T"){did_teacher();}}else if (s == "N"){cout << "ID:";cin >> ID;cout << endl;cout << "密码:";cin >> mima;if (ID == "123" && mima == "000"){cout << "登录成功" << endl;solution();Adm();}else{cout << "登录失败" << endl;exit(0);}}
}
void final()
{ofstream fout("book.txt");if (!fout){cout << "不能打开book输入文件" << endl;return;}for (int i = 0; i < book.size(); i++){string nam = book[i].get_nam();int left = book[i].get_left();int day = book[i].get_day();string who = book[i].get_who();int tech_only = book[i].get_tech();fout << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}fout.close();ofstream fout1("ebook.txt");if (!fout1){cout << "不能打开ebook输入文件" << endl;return;}for (int i = 0; i < ebook.size(); i++){string nam = ebook[i].get_nam();int left = ebook[i].get_left();int day = ebook[i].get_day();string who = ebook[i].get_who();int tech_only = ebook[i].get_tech();fout1 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}fout1.close();ofstream fout2("dvd.txt");if (!fout2){cout << "不能打开dvd输入文件" << endl;return;}for (int i = 0; i < dvd.size(); i++){string nam = dvd[i].get_nam();int left = dvd[i].get_left();int day = dvd[i].get_day();string who = dvd[i].get_who();int tech_only = dvd[i].get_tech();fout2 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}fout2.close();ofstream fout3("LOG.txt");if (!fout3){cout << "不能打开LOG输入文件" << endl;return;}fout3 << "借出" << endl;for (int i = 1; i <= length_book; i++){int ttt = did_book[i];string nam = book[ttt].get_nam();int left = book[ttt].get_left();int day = book[ttt].get_day();string who = book[ttt].get_who();int tech_only = book[ttt].get_tech();fout3 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}for (int i = 1; i <= length_ebook; i++){int ttt = did_ebook[i];string nam = ebook[ttt].get_nam();int left = ebook[ttt].get_left();int day = ebook[ttt].get_day();string who = ebook[ttt].get_who();int tech_only = ebook[ttt].get_tech();fout3 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}for (int i = 1; i <= length_dvd; i++){int ttt = did_dvd[i];string nam = dvd[ttt].get_nam();int left = dvd[ttt].get_left();int day = dvd[ttt].get_day();string who = dvd[ttt].get_who();int tech_only = dvd[ttt].get_tech();fout3 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}fout3 << "归还" << endl;for (int i = 1; i <= length_book_return; i++){int ttt = did_book_return[i];string nam = book[ttt].get_nam();int left = book[ttt].get_left();int day = book[ttt].get_day();string who = book[ttt].get_who();int tech_only = book[ttt].get_tech();fout3 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}for (int i = 1; i <= length_ebook_return; i++){int ttt = did_ebook_return[i];string nam = ebook[ttt].get_nam();int left = ebook[ttt].get_left();int day = ebook[ttt].get_day();string who = ebook[ttt].get_who();int tech_only = ebook[ttt].get_tech();fout3 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}for (int i = 1; i <= length_dvd_return; i++){int ttt = did_dvd_return[i];string nam = dvd[ttt].get_nam();int left = dvd[ttt].get_left();int day = dvd[ttt].get_day();string who = dvd[ttt].get_who();int tech_only = dvd[ttt].get_tech();fout3 << nam << " " << left << " " << who << " " << day << " " << tech_only << endl;}fout3.close();
}
int main()
{login();final();
}

校园图书馆模拟器极其简陋版相关推荐

  1. 2019/7/2 图书馆检索·真·简陋版(新人学习向)

    首先,今天的成果挂出来 lib.py from flask import Flask,render_templateapp = Flask(__name__)@app.route("/lib ...

  2. java jpcap 抓包并分析_用Jpcap赶做了一个极其简陋版的TCP抓包程序

    Jpcap是一个能够抓取与发送网络数据包的Java组件. 你可以使用Jpcap从一个网络接口获取数据包,然后在Java中对它们进行分析和显示.同样也可以通过一个网络接口发送任意数据包.Jpcap当前能 ...

  3. excel图片链接转批量图片再加上超链接(简陋版)

    因为刚学python不久,又急着用,所以就编了个简陋版的 # -*- coding: utf8-*-#安装openpyxl,没安装的可以在桌面打开cmd,输入下面代码(使用阿里云镜像下载,下载速度快) ...

  4. 手机数控模拟器安卓版_车床模拟器2手机版下载-车床模拟器2游戏 v2.5.0安卓版_5577安卓网...

    车床模拟器2手机版上线啦,为大家提高真实的数控车床模拟玩法.完全没有任务的危险,你们可以发挥想象力制作出更多精美的物品,结合不同的工具打造属于你们的物品.玩法轻松,打发时间必备,一起来下载吧. [游戏 ...

  5. 简陋版C语言仿真通讯录之动态内存开辟版本

    简陋版C语言仿真通讯录 https://blog.csdn.net/csdn_kou/article/details/80287640 简陋版C语言仿真通讯录之动态内存开辟版本 给Contact结构体 ...

  6. 十分钟教会你原生JS压缩图片,极其精简版

    十分钟教会你原生JS压缩图片,极其精简版 原文链接:https://blog.csdn.net/yasha97/article/details/83629510 (一)实现思路 先通过input标签获 ...

  7. php 微信pic_url,一段代码实现微信公众号开发校园图书馆

    原标题:一段代码实现微信公众号开发校园图书馆 作者:vgft 来源:脚本 原文:https://www.jb51.net/article/149187.htm 本文实例为大家分享了php微信公众号图书 ...

  8. 电脑配置低android模拟器,安卓模拟器低配置版哪个好 电脑内存再小也不怕

    现在安卓模拟器作为安卓文件在电脑上运行的辅助工具,使用率非常高,不过有一些用户表示自己的电脑配置比较低,使用一些较为热门的模拟器可能会比较卡,不好用,那么下面小编就为大家推荐一番. 安卓模拟器低配置版 ...

  9. android x86 最低内存,安卓模拟器低配置版哪个好 电脑内存再小也不怕卡

    现在安卓模拟器作为安卓文件在电脑上运行的辅助工具,使用率非常高,不过有一些用户表示自己的电脑配置比较低,使用一些较为热门的模拟器可能会比较卡,不好用,那么下面小编就为大家推荐一番. 安卓模拟器低配置版 ...

最新文章

  1. ASP.NET生成静态页面的方法
  2. centos rpm安装mysql5.5_CentOS 5.5下RPM方式安装MySQL 5.5 详解
  3. 深入理解java虚拟机---读书笔记
  4. Python之gmplot:gmplot库的简介、安装、使用方法之详细攻略
  5. unittest单元测试框架—基本实例
  6. 为什么手机突然没有信号无服务器,手机为什么突然没有信号?
  7. consul配置参数大全、详解、总结
  8. 前端学习(1302):实现es6的转化
  9. windows下MBCS和UNICODE编码的转换
  10. 135.001 智能合约设计-——单员工薪酬系统
  11. 停止MySQL正在执行的SQL语句
  12. 从携程事件给我们警示
  13. 数据挖掘:计算边的中介中心值 edge_betweenness value
  14. oracle查看表索引及索引类型
  15. Java利用MessageDigest进行MD5加密
  16. 「Python海龟画图」利用海龟画笔绘制谢尔宾斯基三角形
  17. 批量图片压缩解决方案之Imagine
  18. linux桌面只运行浏览器,分享|4 个 Linux 桌面上的轻量级图像浏览器
  19. 手机内存卡格式化了怎么办
  20. 力扣:电话号码的字母组合

热门文章

  1. 为何删除bootmgr文件后系统仍然能启动
  2. 谭浩强C++习题答案
  3. 数字逻辑电路p230
  4. 微信小程序订单页面格式
  5. 访问FTP 报错:打开FTP服务器上的文件夹时发生错误。请检查是否有权限访问该文件夹 550 No such file or directory
  6. Unity 手机键盘
  7. DELL 7080MFF 黑苹果安装,优化
  8. 利用概率稠密位移网络消除深度配准与常规配准之间的差距pddNet
  9. DM10分区最完美的图文详解
  10. html右键菜单定位,HTML-右键菜单