图书管理系统
前言
制作不易,欢迎点赞哦。
这是大一小白完成的第一个项目,所以难免有许多不到位的 地方,还有些bug,比如,文件操作时产生空行,但是程序中没有处理空行的方式。导致会导致出现异常中断。但是,毕竟自己一个项目,值得纪念一下吧。这是我花费10天的零碎时间完成的。(因为还要上网课)如果你也和我一样是小白,欢迎你借鉴我的思路,完成你的第一个项目。思路请跳转到实验设计一节。
实验题目
实验 7-1:设计并编写一个 C++风格应用程序,模拟一个图书管理系统应用程序,
支持系统用户的图书借阅、图书管理、用户管理等功能。图书借阅管理主要包括
图书借阅、图书归还、借阅信息查看等功能。图书管理主要包括图书的增加、删
除、修改、查看、统计等功能。用户管理主要包括用户注册、登录、修改密码、
修改个人信息、设置用户类型等功能。
具体要求:
1、定义图书管理系统中的 Book 书目类(还可以定义 User 用户类、Log 图书借
还日志类等)。
2、合理应用类的继承性进行馆藏资源的继承性定义,可分为书、碟片、电子资
源等(或将系统用户分为读者、图书管理员、系统管理员)。
3、根据不同类型用户,登录系统显示不同的用户功能菜单,实现不同的操作处
理,如学生与教师所借阅书的数量和天数均不相同(或考虑图书馆中多种馆藏资
源支持的用户操作有所区别)。
4、增加异处理,在借阅图书时,已到所能借阅图书数量的最大数量给予提示;
归还图书时,图书已超期需要缴纳罚款。
5、通过重载运算符“<<”和“>>”方便图书信息、读者信息录入等操作,并实
现将馆藏图书信息、借阅记录等保存到磁盘,形成图书借还日志文件。
6、扩展实验:可尝试使用 MFC 可视化界面提高用户操作方便性和友好性。
实验题目分析
题目要求我们制作图书管理系统,支持的功能有,图书借阅、图书管理、用户管理等功能。
图书借阅管理包括:图书借阅、图书归还、借阅信息查看等功能。
图书管理主要包括图书的增加,删除,修改,查看,统计等功能。
用户管理主要包括用户的注册,登录,修改密码,修改个人信息,设置用户类型等功能。
运用继承,多态,重载等知识进行设计。
实验设计
如图所示,由于我对文件操作相关操作不熟悉,所以我开始的想法是,把用户,图书管理员,系统管理员的基本文件相关操作进行封装,形成UserFileManageAdd,SysManage_FileManage,UserFileManage,LiaManage_FileManage四个类,所以,在我的设计中,主要是依靠从文件中获取和分割信息,很少存在对成员变量的操作,或者说成员变量只是在其中起辅助作用。LiaManage图书管理员类和User用户类,继承了文件操作的基础功能,进行进一步封装,并添加了自己的具体功能。系统管理员功能直接应用SysManage_FileManage类,完成全部功能。每种功能通过数字选项进行区分和调用。登录时,也是通过数字选项进入不同的界面(展示不同的功能选项)。普通用户可以进行注册和登录,图书管理员只能进行登录,其信息全部由系统管理员修改和增加,系统管理员通过特殊口令进入管理系统。文件中的信息,以空格和换行分割。代表的信息如图所示。
核心代码
//User_FileManageadd.h
#pragma once
class User_FileManageadd //该类只添加一个函数,进行普通用户注册时的信息遍历
//确认该学号确实没有经过注册
{
public:
bool Cek_for_registration();
};
//User_FileManageadd.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "User_FileManageadd.h"
#include<iostream>
#include<fstream>
using namespace std;
bool User_FileManageadd::Cek_for_registration()
{
char info[10] = "";
cout << "注册前,请输入学号确认,您曾经没有注册:";
cin >> info;
fstream file;
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return false;
}
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(str, info) == 0)
{
cout << "您的账户已注册,若未注册,请联系系统管理员" << endl;
file.close();
return false;
}
}
file.close();
return true;
}
//UserFileManage.h
#pragma once
#include"User_FileManageadd.h"
class UserFileManage :public User_FileManageadd//该类实现了系统的一些基础功能
{
public:
//进行文件路径初始化
void LogFile_addlog(char*);//普通用户进行增加借还日志
void UInfoFile_addinfo(char*);//普通用户进行增加个人信息(注册)(存在注册前的检查行为)
void UInfoFile_change();//普通用户和图书管理员信息的修改
void BInfoFile_searchbook(char* info);//普通用户和图书管理员进行找书
//图书管理员的信息全部由系统管理员增加,不提供注册功能
};
//UserFileManage.cpp
#define _CRT_SECURE_NO_WARNINGS
#include"UserFileManage.h"
#include<iostream>
#include<fstream>
#include<string.h>
#include<string>
#include<stdlib.h>
using std::cin;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::ios;
void UserFileManage::LogFile_addlog(char* info)//进行日志文件的增加
{
fstream file;
file.open("BorrowLog.txt", ios::app);
if (!file.is_open())
{
cout << "文件打开失败!" << endl;
return;
}
file << "\n";
file << info;
file.close();
return;
}
void UserFileManage::UInfoFile_change()//进行个人信息的修改(包括密码)
{
cout << "请输入您的学(工)号\n";
char info[7] = "";
scanf("%s", info);
fstream file;
char str[256] = "";
char* token = new char[256];
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 100);
token = strtok(str, " ");
if (strcmp(info, token) == 0)
{
break;
}
}
char* id = token;
token = strtok(NULL, " ");
char* cord = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* sex = token;
token = strtok(NULL, " ");
char* phone = token;
token = strtok(NULL, " ");
char* number = token;
token = strtok(NULL, " ");
char* maxnum = token;
token = strtok(NULL, " ");
char* maxday = token;
file.close();
//得到各个信息
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("Userinfo.txt", ios::out);
int judge;
cout <<
"请输入您将要改变的信息:(更改密码请按1/姓名请按2/性别请按3/联系方式请按4,结束请按0,修改学(工)号请联系系统管理员):";
cin >> judge;
if (judge == 0)
{
return;
}
cout << "更改前,请输入密码:" << endl;
char fcord[20] = "";
cin >> fcord;
if (strcmp(fcord, cord) == 0)
{
cout << "密码正确" << endl;
cout << "请重新确认您要修改的内容的编号:";
while (judge != 0)
{
cin >> judge;
switch (judge)
{
case 1:
cout << "请输入更改后的密码(最多19位):" << endl;
cin >> cord;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 2:
cout << "请输入更改后的姓名:" << endl;
cin >> name;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 3:
cout << "请输入更改后的性别:" << endl;
cin >> sex;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 4:
cout << "请输入更改后的联系方式" << endl;
cin >> phone;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 0:
break;
default:
cout << "您输入的编号有误,请输入1-4的代码" << endl;
break;
}
}
cout << "已结束更改" << endl;
}
else
{
cout << "密码输入错误" << endl;
}
char result[1000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, cord);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, sex);
strcat(result, " ");
strcat(result, phone);
strcat(result, " ");
strcat(result, number);
strcat(result, " ");
strcat(result, maxnum);
strcat(result, " ");
strcat(result, maxday);
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
void UserFileManage::BInfoFile_searchbook(char* info)
{
fstream file;
char str[256];
char* token = NULL;
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (file.getline(str, 100))
{
token = strtok(str, " ");
if (strcmp(token, info) == 0)
{
break;
}
}
printf("图书编号\t书名\t\t出版日期\t出版社\t\t页数\t作者\t\n");
while (token != NULL)
{
printf("%s \t", token);
token = strtok(NULL, " ");
}
file.close();
}
void UserFileManage::UInfoFile_addinfo(char* info)
{
User_FileManageadd u;
fstream file;
file.open("Userinfo.txt", ios::app);
if (file.is_open())
{
file << "\n";
file << info;
file.close();
}
else
{
cout << "文件打开失败" << endl;
return;
}
file.close();
}
//LiaManage_FileManage.h
#pragma once
#include"UserFileManage.h"
class LiaManage_FileManage :public UserFileManage
{
public:
void TranverseLog();
void TranverseBook();
void AddBook();
void DeleteBook();
void ChangeBook();
void SearchLog(char* info);
void SearchBook();
ostream & operator<<(ostream & out);
};
#define _CRT_SECURE_NO_WARNINGS
#include "LiaManage_FileManage.h"
#include<fstream>
#include<iostream>
#include<string.h>
using namespace std;
void LiaManage_FileManage::TranverseLog()//图书管理员进行遍历输出借还日志输出
{
fstream file;
file.open("BorrowLog.txt", ios::in);
char* str = new char[256];
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 100);
cout << str << endl;
}
delete[] str;
return;
}
void LiaManage_FileManage::TranverseBook()
{
fstream file;
file.open("BookInfo.txt", ios::in);
if (file.is_open())
{
char* str = new char[256];
while (!file.eof())
{
file.getline(str, 256);
cout << str << endl;
}
delete[] str;
}
else
{
cout << "文件打开失败" << endl;
return;
}
}
void LiaManage_FileManage::AddBook()//图书管理员进行增书操作
{
fstream file;
file.open("BookInfo.txt", ios::app);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
cout << "请输入增加图书的信息:(按照:编号 书名 出版日期 出版社 页数 作者的格式输入)" << endl;
char str[256] = "";
cin.get();
cin.get(str, 200);
file << "\n";
file << str;
file << " 1";
file.close();
return;
}
void LiaManage_FileManage::DeleteBook()//图书管理员进行删除书操作
{
cout << "请输入将要删除的书14位编号" << endl;
char* info = new char[15];
cin >> info;
fstream file;
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
continue;
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("BookInfo.txt", ios::out);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
file << buffer;
file.close();
cout << "删除成功!" << endl;
return;
}
void LiaManage_FileManage::ChangeBook()//图书管理员进行改变书信息操作
{
cout << "请输入您将要修改信息的图书14位编号" << endl;
char* info = new char[256];
cin >> info;
fstream file;
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char* str = new char[256];
char* token = new char[256];
while (!file.eof())
{
file.getline(str, 256);
token = strtok(str, " ");
if (strcmp(info, token) == 0)
break;
}
//进行信息分割
char* id = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* date = token;
token = strtok(NULL, " ");
char* Pubhouse = token;
token = strtok(NULL, " ");
char* page = token;
token = strtok(NULL, " ");
char* author = token;
token = strtok(NULL, " ");
char* state = token;
file.close();
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("BookInfo.txt", ios::out);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
cout << "请问您将修改该书的哪项信息." << endl <<
"(编号请按1,书名请按2,出版日期请按3,出版社请按4 ,页数请按5,作者请按6,退出请按0" << endl;
int judge1, judge2;
judge1 = 1;
while (judge1 != 0)
{
cin >> judge1;
switch (judge1)
{
case 1:
cout << "请输入更改后书的编号" << endl;
cin >> id;
cout << "您是否将编号改为" << id << endl;
cout << "确认请按1,取消请按0;" << endl;
cin >> judge2;
if (!judge2)
{
cout << "请重新选择您将要改变的信息" << endl;
continue;
}
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 2:
cout << "请输入更改后的书名" << endl;
cin >> name;
cout << "您是否将书名改为" << name << endl;
cout << "确认请按1,取消请按0 ;" << endl;
cin >> judge2;
if (!judge2)
{
cout << "请重新选择您下一步将要更改信息的编号" << endl;
continue;
}
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 3:
cout << "请输入更改后的出版日期" << endl;
cin >> date;
cout << "您是否将出版日期更改为" << date << endl;
cout << "确认请按1,取消请按0" << endl;
cin >> judge2;
if (!judge2)
{
cout << "请重新选择您下一步将要更改信息的编号" << endl;
continue;
}
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 4:
cout << "请输入更改后的出版社" << endl;
cin >> Pubhouse;
cout << "您是否将出版社更改为" << Pubhouse << endl;
cout << "确认请按1,取消请按0" << endl;
cin >> judge2;
if (!judge2)
{
cout << "请重新选择您下一步将要更改信息的编号" << endl;
continue;
}
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 5:
cout << "请输入更改后的页数" << endl;
cin >> page;
cout << "您是否将页数更改问" << page << endl;
cout << "确认请按1,取消请按0" << endl;
cin >> judge2;
if (!judge2)
{
cout << "请重新选择您下一步将要更改信息的编号" << endl;
continue;
}
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 6:
cout << "请输入更改后的作者" << endl;
cin >> author;
cout << "您是否将作者改为" << author << endl;
cout << "确认请按1,取消请按0" << endl;
cin >> judge2;
if (!judge2)
{
cout << "请重新选择您下一步将要更改信息的编号" << endl;
continue;
}
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 0:
cout << "图书信息修改即将结束" << endl;
cout << "图书信息修改结束" << endl;
break;
default:
cout << "请输入0-6选项进行图书信息的修改" << endl;
break;
}
}
char result[10000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, date);
strcat(result, " ");
strcat(result, Pubhouse);
strcat(result, " ");
strcat(result, page);
strcat(result, " ");
strcat(result, author);
strcat(result, " ");
strcat(result, state);
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
void LiaManage_FileManage::SearchLog(char* info)
{
char str[256] = "";
char* token = new char;
fstream file;
file.open("BorrowLog.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, info) == 0)
{
while (token != NULL)
{
printf("%s \t", token);
token = strtok(NULL, " ");
}
cout << endl;
}
}
file.close();
}
void LiaManage_FileManage::SearchBook()
{
char info[50] = "";
cout << "请输入您查找图书的编号" << endl;
cin >> info;
fstream file;
char str[256];
char* token = NULL;
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (file.getline(str, 100))
{
token = strtok(str, " ");
if (strcmp(token, info) == 0)
{
break;
}
}
while (token != NULL)
{
printf("%s \t", token);
token = strtok(NULL, " ");
}
file.close();
}
//User.h
#pragma once
#include "UserFileManage.h"
class User :public UserFileManage
{
protected:
char* id = new char;
char* passcord = (char*)"123456";
char* name = new char;
char* sex = new char;
char* phone = new char;
char* num = (char*)"0";
char* maxnum = (char*)"5";
char* maxday = (char*)"30";
public:
User() = default;// ......
void ChangeInfo();//成功,可能存在潜在问题
void DisplayInfo();//成功
void DisplayLog();//成功
void SearchBook();//成功
void judge();//成功
void Register();//成功
//修改用户信息文件中的借阅数量和编号
//修改图书信息文件中的状态码
void Borrow();//成功,需要实现用户借书数量的增加操作
void Return();//需要实现用户借书数量的减小操作
void ChangeBookinfob(char*);//成功
void ChangeBookinfor(char*);//成功
User(char* id, char* cord);//成功
void Setnum(char*,int);//
};
void Login();//成功
//User.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "User.h"
#include<iostream>
#include<fstream>
#include<string.h>
#include<string>
#include<sstream>
#include <stdexcept>
using namespace std;
enum ERROR { OverdueError };
using std::cout;
bool judgecord(char* id ,char* cord)
{
fstream file;
file.open("Userinfo.txt", ios::in);
char str[256] = "";
char* token = new char[256];
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return false;
}
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, id) == 0)
{
break;
}
}
token = strtok(NULL, " ");
char* cord1 = new char[strlen(token) + 1];
strcpy(cord1, token);
file.close();
if (strcmp(cord1, cord) != 0)
{
cout << "密码错误,请重新登入" << endl;
exit(0);
}
return true;
}
User::User(char* id, char* cord)
{
judgecord(id, cord);
fstream file;
file.open("Userinfo.txt", ios::in);
char str[256] = "";
char* token = new char[256];
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, id) == 0)
{
break;
}
}
this->id = id;
file.close();
}
void User::ChangeInfo()
{
UserFileManage u;
u.UInfoFile_change();
}
void User::DisplayInfo()
{
fstream file;
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
char* token = new char[100];
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(str, id) == 0)
break;
}
while (token != NULL)
{
cout << token;
cout << " ";
token = strtok(NULL, " ");
}
cout << endl;
file.close();
}
void User::Borrow()
{
fstream file;
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
char*token = new char[256];
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, id) == 0)
break;
}
token = strtok(NULL, " ");
token = strtok(NULL, " ");
token = strtok(NULL, " ");
token = strtok(NULL, " ");
token = strtok(NULL, " ");
char* num = token;
if (strcmp(num,maxnum)==0)
{
cout << "您的借书数量已达上限" << endl;
return;
}
cout << "请输入您借阅书籍的编号" << endl;
char* info = new char;
cin >> info;
char* bookid = new char;
char* bookname = new char;
char* pubdate = new char;
char* pubhouse = new char;
char* page = new char;
char* author = new char;
char* state = new char;
char* token1 = new char;
file.close();
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char* str1 = new char[256];
while (!file.eof())
{
file.getline(str1, 255);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
break;
}
}
bookid = token1;
token1 = strtok(NULL, " ");
bookname = token1;
token1 = strtok(NULL, " ");
pubdate = token1;
token1 = strtok(NULL, " ");
pubhouse = token1;
token1 = strtok(NULL, " ");
page = token1;
token1 = strtok(NULL, " ");
author = token1;
token1 = strtok(NULL, " ");
state = token1;
if (strcmp(state, "0") == 0)
{
cout << "该书已借出" << endl;
return;
}
cout << "请输入借阅时间" << endl;
char* date = new char;
cin >> date;
char result[256] = "";
strcat(result,bookid);
strcat(result, " ");
strcat(result, bookname);
strcat(result, " ");
strcat(result, id);
strcat(result, " ");
strcat(result, date);
strcat(result, " ");
strcat(result, "0");
file.close();
UserFileManage u;
u.LogFile_addlog(result);
ChangeBookinfob(bookid);
Setnum(id, 1);
}
void User::Return()
{
char* info = new char;
cout << "请输入您归还书籍的编号" << endl;
cin >> info;
fstream file;
file.open("BorrowLog.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str,255);
token = strtok(str, " ");
if (strcmp(token, info) == 0)
break;
}
char* bookid = token;
token = strtok(NULL, " ");
char* bookname = token;
token = strtok(NULL, " ");
char* ID = token;
token = strtok(NULL, " ");
char* date = token;
string d = date;
int a = atoi(d.c_str());
int year = a / 10000;
int month = a % 10000 / 100;
int day = a % 10000 % 100;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)//闰年
{
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month || 12)
{
if (day == 1)
{
day = 31;
}
else
{
month++;
day--;
}
}
else if (month == 2)
{
month++;
day++;
}
else if (month == 12)
{
if (day == 1)
day = 31;
else
{
year++;
month = 1;
day--;
}
}
else
{
month++;
}
}
else//平年
{
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month || 12)//一个月31天
{
if (day == 1)//大月的一号情况
{
day = 31;
}
else
{
month++;
day--;
}
}
else if (month == 2)//平年的二月
{
month++;
day += 2;
}
else if (month == 12)
{
if (day == 1)
day = 31;
else
{
year++;
month = 1;
day--;
}
}
else//一个月30天 的情况
{
month++;
}
}
int curyear = 0;
int curmonth = 0;
int curday = 0;
cout << "请输入当前年" << endl;
cin >> curyear;
cout << "请输入当前月" << endl;
cin >> curmonth;
cout << "请输入当前日" << endl;
cin >> curday;
try
{
if (curyear > year)
{
cout << "逾期请缴纳罚款" << endl;
throw OverdueError;
if (curmonth > month)
{
cout << "逾期,请缴纳罚款" << endl;
throw OverdueError;
}
else if (curday > day)
{
cout << "逾期,请缴纳罚款" << endl;
throw OverdueError;
}
}
}
catch (ERROR e)
{
cout << "这里是缴纳罚款设施" << endl;
}
ostringstream os; //构造一个输出字符串流,流内容为空
os << curyear; //向输出字符串流中输出int整数i的内容
string ling = "0";
if (curmonth < 10)
os << ling;
os << month;
os << curday;
d = os.str();
char *da = const_cast<char*>(d.c_str());
file.close();
file.open("BorrowLog.txt", ios::app);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char log[256] = "";
strcat(log, "\n");
strcat(log, bookid);
strcat(log, " ");
strcat(log, bookname);
strcat(log, " ");
strcat(log, ID);
strcat(log, " ");
strcat(log, da);
strcat(log, " ");
strcat(log, "1");
file << log;
file.close();
ChangeBookinfor(bookid);
Setnum(id, 2);
}
void User::DisplayLog()
{
char* info = new char;
cout << "请输入您借阅书籍的编号" << endl;
cin >> info;
fstream file;
file.open("BorrowLog.txt", ios::in);
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 100);
token = strtok(str, " ");
if (strcmp(token, info) == 0)
break;
}
while (token != NULL)
{
cout << token << " ";
token = strtok(NULL, " ");
}
cout << endl;
file.close();
}
void User::SearchBook()
{
UserFileManage u;
cout << "请输入您想要寻找书籍的编号" << endl;
char* info = new char;
cin >> info;
u.BInfoFile_searchbook(info);
}
void User::Register()
{
UserFileManage u;
if (u.Cek_for_registration())
{
cout << "请输入您的学号" << endl;
scanf("%s", id);
}
else
{
return;
}
cout << "注册成功,默认密码为123456" << endl;
cout << "更改密码请您登入后,选择更改个人信息选项" << endl;
char result[256] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, passcord);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, sex);
strcat(result, " ");
strcat(result, phone);
strcat(result, " ");
strcat(result, "0");
strcat(result, " ");
strcat(result, maxnum);
strcat(result, " ");
strcat(result, maxday);
u.UInfoFile_addinfo(result);
cout << "登入请按1,退出请按0" << endl;
int judge;
cin >> judge;
if (judge)
Login();
else
return;
}
void User::judge()
{
while (1)
{
cout << "请进行选择" << endl;
cout << "借阅资料请按1,归还资料请按2,修改个人信息请按3,查看个人信息请按4,查看借阅信息请按5,查看图书信息请按6,结束退出请按0" << endl;
int pan;
cin >> pan;
if (pan == 0)
break;
switch (pan)
{
case 1:
Borrow();
break;
case 2:
Return();
break;
case 3:
cout << "正在进入信息修改系统......." << endl;
ChangeInfo();
break;
case 4:
DisplayInfo();
break;
case 5:
DisplayLog();
break;
case 6:
SearchBook();
break;
default:
cout << "请选择0-6的选项" << endl;
break;
}
}
}
void Login()
{
char* Id = new char;
char* cord = new char;
cout << "请输入学号" << endl;
cin >> Id;
cout << "请输入密码" << endl;
cin >> cord;
User u(Id, cord);
u.judge();
return;
}
void User::ChangeBookinfob(char* info)
{
fstream file;
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char* str = new char[256];
char* token = new char[256];
while (!file.eof())
{
file.getline(str, 256);
token = strtok(str, " ");
if (strcmp(info, token) == 0)
break;
}
//进行信息分割
char* id = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* date = token;
token = strtok(NULL, " ");
char* Pubhouse = token;
token = strtok(NULL, " ");
char* page = token;
token = strtok(NULL, " ");
char* author = token;
file.close();
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("BookInfo.txt", ios::out);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char result[10000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, date);
strcat(result, " ");
strcat(result, Pubhouse);
strcat(result, " ");
strcat(result, page);
strcat(result, " ");
strcat(result, author);
strcat(result, " ");
strcat(result, "0");
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
void User::Setnum(char* ID,int judge)
{
fstream file;
char str[256] = "";
char* token = new char[256];
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 100);
token = strtok(str, " ");
if (strcmp(ID, token) == 0)
{
break;
}
}
char* ID1 = token;
token = strtok(NULL, " ");
char* cord = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* sex = token;
token = strtok(NULL, " ");
char* phone = token;
token = strtok(NULL, " ");
char* number = token;
token = strtok(NULL, " ");
char* maxnum = token;
token = strtok(NULL, " ");
char* maxday = token;
file.close();
//得到各个信息
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, ID) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("Userinfo.txt", ios::out);
char result[1000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, cord);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, sex);
strcat(result, " ");
strcat(result, phone);
strcat(result, " ");
if (judge == 1)//借书
{
if (strcmp(number, "0") == 0)
{
strcat(result, "1");
}
if (strcmp(number, "1") == 0)
{
strcat(result, "2");
}
if (strcmp(number, "2") == 0)
{
strcat(result, "3");
}
if (strcmp(number, "3") == 0)
{
strcat(result, "4");
}
if (strcmp(number, "4") == 0)
{
strcat(result, "5");
}
}
if (judge == 2)//还书
{
if (strcmp(number, "5") == 0)
strcat(result, "4");
if (strcmp(number, "2") == 0)
strcat(result, "1");
if (strcmp(number, "3") == 0)
strcat(result, "2");
if (strcmp(number, "4") == 0)
strcat(result, "3");
if (strcmp(number, "1") == 0)
strcat(result, "0");
}
strcat(result, " ");
strcat(result, maxnum);
strcat(result, " ");
strcat(result, maxday);
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
void User::ChangeBookinfor(char* info)
{
fstream file;
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char* str = new char[256];
char* token = new char[256];
while (!file.eof())
{
file.getline(str, 256);
token = strtok(str, " ");
if (strcmp(info, token) == 0)
break;
}
//进行信息分割
char* id = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* date = token;
token = strtok(NULL, " ");
char* Pubhouse = token;
token = strtok(NULL, " ");
char* page = token;
token = strtok(NULL, " ");
char* author = token;
file.close();
file.open("BookInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("BookInfo.txt", ios::out);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char result[10000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, date);
strcat(result, " ");
strcat(result, Pubhouse);
strcat(result, " ");
strcat(result, page);
strcat(result, " ");
strcat(result, author);
strcat(result, " ");
strcat(result, "1");
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
//LiaManage.h
#pragma once
#include"LiaManage_FileManage.h"
class LiaManage
{
protected:
char* id;
public:
LiaManage(char* id);
void AddBook();//完成
void DisplayInfo();//完成
void DeleteBook();//完成
void ChangeBook();//完成
void DisplayLog();//完成
void DisplayBook();//完成
void SearchBook();//完成
void Judge();//完成
};
bool JudgeExist(char* ID);
void Loginm();
//LiaManage.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "LiaManage.h"
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdio.h>
using namespace std;
LiaManage::LiaManage(char* id)
{
this->id = id;
}
void LiaManage::AddBook()
{
LiaManage_FileManage l;
l.AddBook();
}
void LiaManage::DeleteBook()
{
LiaManage_FileManage l;
l.DeleteBook();
}
void LiaManage::ChangeBook()
{
LiaManage_FileManage l;
l.ChangeBook();
}
void LiaManage::DisplayLog()
{
LiaManage_FileManage l;
l.TranverseLog();
}
void LiaManage::DisplayBook()
{
LiaManage_FileManage l;
l.TranverseBook();
}
void LiaManage::SearchBook()
{
LiaManage_FileManage l;
l.SearchBook();
cout << endl;
}
void LiaManage::DisplayInfo()
{
fstream file;
file.open("ManageInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, id) == 0)
break;
}
while (token != NULL)
{
printf("%s ", token);
token = strtok(NULL, " ");
}
cout << endl;
file.close();
}
void LiaManage::Judge()
{
int judge;
while (1)
{
cout <<
"请进行选择(增加书籍请按1,删除书籍请按2,修改书籍信息请按3,"
<< "查找书籍请按4,查看个人信息请按5,查看借还日志请按6,查看所有图书请按7,结束请按0)";
cout << "(修改个人信息请联系图书管理员)" << endl;
cin >> judge;
if (judge == 0)
break;
switch (judge)
{
case 1:
AddBook();
break;
case 2:
DeleteBook();
break;
case 3:
ChangeBook();
break;
case 4:
SearchBook();
break;
case 5:
DisplayInfo();
break;
case 6:
DisplayLog();
break;
case 7:
DisplayBook();
break;
case 0:
exit(0);
default:
cout << "请输入0-6的选项" << endl;
break;
}
}
}
bool JudgeExist(char* ID)
{
fstream file;
file.open("ManageInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return false;
}
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, ID) == 0)
{
return true;
}
}
return false;
}
void Loginm()
{
char* ID = new char;
cout << "请输入您的工号" << endl;
cin >> ID;
if (JudgeExist(ID))
{
fstream file;
file.open("ManageInfo.txt", ios::in);
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(token, ID) == 0)
break;
}
token = strtok(NULL, " ");
char* psscord = new char;
cout << "请输入密码" << endl;
cin >> psscord;
if (strcmp(psscord, token) != 0)
{
cout << "密码错误" << endl;
exit(0);
}
cout << "密码正确" << endl;
LiaManage l(ID);
l.Judge();
}
else
cout << "对不起,工号不存在,请联系系统管理员" << endl;
}
//SysManage_FileManage.h
#pragma once
class SysManage_FileManage
{
public:
void TranverseUser();
void AddUser();
void AddManage();
void DeleteUser();
void ChangeUser();
void SearchUser();
void DeleteManage();
void ChangeManage();
void SearchManage();
void judge();
ostream & operator<<(ostream & out);
};
//SysManage_FileManage.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "SysManage_FileManage.h"
#include<string.h>
#include<stdio.h>
#include<iostream>
#include<fstream>
using namespace std;
void SysManage_FileManage::TranverseUser()
{
char* filepath = new char;
int judge;
cout << "获得普通用户全部信息请按1,获得图书管理员的全部信息请按2" << endl;
cin >> judge;
if (judge == 1)
filepath = { (char*)"Userinfo.txt" };
else if (judge == 2)
filepath = { (char*)"ManageInfo.txt" };
else
cout << "输入错误" << endl;
fstream file(filepath, ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
while (!file.eof())
{
file.getline(str, 100);
cout << str << endl;
}
file.close();
return;
}
ostream & SysManage_FileManage::operator<<(ostream & out)
{
TranverseUser();
}
void SysManage_FileManage::AddUser()
{
fstream file;
file.open("Userinfo.txt", ios::app);
char str[256] = "";
cout << "请输入用户信息" << endl;
cout << "按照学号,密码,姓名,性别,联系方式,借阅数量,最大借阅数,最大借阅天数输入" << endl;
cin.get();
cin.getline(str, 100);
file << "\n";
file << str;
file.close();
return;
}
void SysManage_FileManage::AddManage()
{
fstream file;
file.open("ManageInfo.txt", ios::app);
char str[256] = "";
cout << "请输入图书管理员信息" << endl;
cout << "按照工号,密码,姓名,性别,联系方式" << endl;
cin.get();
cin.getline(str, 100);
file << "\n";
file << str;
file.close();
return;
}
void SysManage_FileManage::SearchUser()
{
char info[10] = "";
cout << "请输入您将要查找用户的学号" << endl;
cin >> info;
fstream file;
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(str, info) == 0)
break;
}
while (token != NULL)
{
printf("%s \t", token);
token = strtok(NULL, " ");
}
file.close();
}
void SysManage_FileManage::DeleteUser()
{
cout << "请输入将要删除的用户学号" << endl;
char* info = new char[15];
cin >> info;
fstream file;
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
continue;
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("Userinfo.txt", ios::out);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
file << buffer;
file.close();
cout << "删除成功!" << endl;
return;
}
void SysManage_FileManage::ChangeUser()
{
cout << "请输入您的修改用户的学号\n";
char info[7] = "";
cin >> info;
fstream file;
char str[256] = "";
char* token = new char[256];
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 100);
token = strtok(str, " ");
if (strcmp(info, token) == 0)
{
break;
}
}
char* id = token;
token = strtok(NULL, " ");
char* cord = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* sex = token;
token = strtok(NULL, " ");
char* phone = token;
token = strtok(NULL, " ");
char* number = token;
token = strtok(NULL, " ");
char* maxnum = token;
token = strtok(NULL, " ");
char* maxday = token;
file.close();
//得到各个信息
file.open("Userinfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("Userinfo.txt", ios::out);
int judge;
cout << "请输入您将要改变的信息:(更改密码请按1/姓名请按2/性别请按3/联系方式请按4,"
<< "借阅数量请按5/最大借阅数请按6/最大借阅天数请按7,学号请按8,结束更改请按0):";
cin >> judge;
if (judge == 0)
{
return;
}
cout << "请重新确认您要修改的内容的编号:";
while (judge != 0)
{
cin >> judge;
switch (judge)
{
case 1:
cout << "请输入更改后的密码(最多19位):" << endl;
cin >> cord;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 2:
cout << "请输入更改后的姓名:" << endl;
cin >> name;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 3:
cout << "请输入更改后的性别:" << endl;
cin >> sex;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 4:
cout << "请输入更改后的联系方式" << endl;
cin >> phone;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 5:
cout << "请输入更改后的借阅数量" << endl;
cin >> number;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 6:
cout << "请输入更改后的最大借阅数" << endl;
cin >> maxnum;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 7:
cout << "请输入更改后的最大借阅天数" << endl;
cin >> maxday;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 8:
cout << "请输入更改后的学号" << endl;
cin >> id;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 0:
cout << "即将退出更改" << endl;
break;
default:
cout << "您输入的编号有误,请输入0-8的代码" << endl;
break;
}
}
cout << "已结束更改" << endl;
char result[1000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, cord);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, sex);
strcat(result, " ");
strcat(result, phone);
strcat(result, " ");
strcat(result, number);
strcat(result, " ");
strcat(result, maxnum);
strcat(result, " ");
strcat(result, maxday);
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
void SysManage_FileManage::SearchManage()
{
char info[10] = "";
cout << "请输入您将要查找管理员的工号" << endl;
cin >> info;
fstream file;
file.open("ManageInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str[256] = "";
char* token = new char;
while (!file.eof())
{
file.getline(str, 255);
token = strtok(str, " ");
if (strcmp(str, info) == 0)
break;
}
while (token != NULL)
{
printf("%s \t", token);
token = strtok(NULL, " ");
}
file.close();
}
void SysManage_FileManage::ChangeManage()
{
cout << "请输入您的修改图书管理员的工号\n";
char info[7] = "";
cin >> info;
fstream file;
char str[256] = "";
char* token = new char[256];
file.open("ManageInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
while (!file.eof())
{
file.getline(str, 100);
token = strtok(str, " ");
if (strcmp(info, token) == 0)
{
break;
}
}
char* id = token;
token = strtok(NULL, " ");
char* cord = token;
token = strtok(NULL, " ");
char* name = token;
token = strtok(NULL, " ");
char* sex = token;
token = strtok(NULL, " ");
char* phone = token;
token = strtok(NULL, " ");
file.close();
//得到各个信息
file.open("ManageInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
{
continue;
}
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("ManageInfo.txt", ios::out);
int judge;
cout << "请输入您将要改变的信息:(更改密码请按1/姓名请按2/性别请按3/联系方式请按4,"
<< "工号请按5,结束更改请按0):";
cin >> judge;
if (judge == 0)
{
return;
}
cout << "请重新确认您要修改的内容的编号:";
while (judge != 0)
{
cin >> judge;
switch (judge)
{
case 1:
cout << "请输入更改后的密码(最多19位):" << endl;
cin >> cord;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 2:
cout << "请输入更改后的姓名:" << endl;
cin >> name;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 3:
cout << "请输入更改后的性别:" << endl;
cin >> sex;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 4:
cout << "请输入更改后的联系方式" << endl;
cin >> phone;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 5:
cout << "请输入更改后的工号" << endl;
cin >> id;
cout << "更改成功,请继续输入您下一步将要更改的信息" << endl;
break;
case 0:
cout << "即将退出更改" << endl;
break;
default:
cout << "您输入的编号有误,请输入0-5的代码" << endl;
break;
}
}
cout << "已结束更改" << endl;
char result[1000] = "";
strcat(result, id);
strcat(result, " ");
strcat(result, cord);
strcat(result, " ");
strcat(result, name);
strcat(result, " ");
strcat(result, sex);
strcat(result, " ");
strcat(result, phone);
strcat(result, "\n");
strcat(result, buffer);
file << result;
file.close();
return;
}
void SysManage_FileManage::DeleteManage()
{
cout << "请输入将要删除的图书管理员的工号" << endl;
char* info = new char[15];
cin >> info;
fstream file;
file.open("ManageInfo.txt", ios::in);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
char str1[256] = "";
char* token1 = NULL;
char buffer[10000] = "";
token1 = new char;
while (!file.eof())
{
file.getline(str1, 100);
char* str2 = new char[strlen(str1) + 1];
strcpy(str2, str1);
token1 = strtok(str1, " ");
if (strcmp(token1, info) == 0)
continue;
strcat(buffer, str2);
strcat(buffer, "\n");
}
file.close();
file.open("ManageInfo.txt", ios::out);
if (!file.is_open())
{
cout << "文件打开失败" << endl;
return;
}
file << buffer;
file.close();
cout << "删除成功!" << endl;
return;
}
void SysManage_FileManage::judge()
{
while(1)
{
cout << "请您进行选择" << endl;
cout << "输出所有用户信息请按1,增加用户请按2,增加图书管理员请按3,删除用户请按4,更改用户信息请按5" << endl;
cout << "查找用户请按6,删除图书管理员请按7,修改图书管理员信息请按8,查找图书管理员请按9,退出请按0" << endl;
int judge;
cin >> judge;
if (judge == 0)
break;
switch (judge)
{
case 1:
TranverseUser();
break;
case 2:
AddUser();
break;
case 3:
AddManage();
break;
case 4:
DeleteUser();
break;
case 5:
ChangeUser();
break;
case 6:
SearchUser();
break;
case 7:
DeleteManage();
break;
case 8:
ChangeManage();
break;
case 9:
SearchManage();
break;
default:
cout << "请输入0-9的选项" << endl;
break;
}
}
}
//login.cpp
#include<iostream>
#include"User.h"
#include"LiaManage.h"
using namespace std;
void login()
{
char* SysManagekouling = (char*)"tianwanggaidihu";
char* kouling = new char;
cout << "普通用户请按1,图书管理员请按2,系统管理员请按3" << endl;
int pan;
cin >> pan;
switch (pan)
{
case 1:
int pan1;
cout << "注册请按1,登入请按2" << endl;
cin >> pan1;
if (pan1 == 1)
{
User u;
u.Register();
}
else if (pan1 == 2)
{
Login();
}
else
cout << "请输入1,2中的一项" << endl;
break;
case 2:
Loginm();
break;
case 3:
cout << "请输入系统管理员口令" << endl;
cin >> kouling;
if (strcmp(kouling, SysManagekouling) != 0)
{
cout << "口令错误" << endl;
exit(0);
}
SysManage_FileManage s;
s.judge();
break;
default:
cout << "请选择1-3的选项" << endl;
break;
}
}
int main()
{
cout << "正在进入登入页面" << endl;
cout << "-----------------------------------------------------" << endl;
login();
return 0;
}
实验结果截屏
实验成果分析
优点:大量熟练的使用了流和文件,类的结构还算清晰明了,实现的功能完整。所有程序由自己设计及完成。在实现过程中大量的查阅了资料,实现了能力的提升。
不足:在对文件进行处理时,可能会出现空行,导致执行其他操作时导致程序崩溃。多态和异常处理使用的较少。