📄 library.cpp
字号:
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <iostream.h> //程序所需头文件
#include <stdio.h>
#include <string.h>
#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
///////////////////////////////////////////////////////////////////////////////////////////////////
const int PSW_LENGTH=24; //定义用户登录密码最大长度
const int MAX_READER_NUM=2000; //定义最大用户数量
const int MAX_BOOK_NUM=2000; //定义最大图书数量
///////////////////////////////////////////////////////////////////////////////////////////////////
ifstream ibook("book.txt",ios::beg,2);
ifstream ireader("reader.txt",ios::beg,2);
ofstream obook("book.txt",ios::ate,2);
ofstream oreader("reader.txt",ios::ate,2);
///////////////////////////////////////////////////////////////////////////////////////////////////
class Book_T //图书类
{
private:
long number; //图书编号
char name[40]; //书名
char author[20]; //作者
char isbn[20]; //ISBN号
int status; //目前状态 (0-删除 1-馆藏 2-外借 3-预定)
long lend_Reader; //记录借书者编号
long book_Reader; //记录预定者编号
public:
void setBook(long num=0,char *na="",char *auth="",char *is="",int st=1,long lend=0,long book=0)
{
number=num;
strcpy(name,na);
strcpy(author,auth);
strcpy(isbn,is);
status=st;
lend_Reader=lend;
book_Reader=book;
}
long getNumber() { return number; }
char *getName() { return name; }
char *getAuthor() { return author; }
int getStatus() { return status; }
char *getIsbn() { return isbn; }
void deleteBook() { number=0; status=0; }
int lendBook(long num)
{
if (status==1)
{
lend_Reader=num;
status=2;
return 1;
}
else return 0;
}
int bookBook(long num)
{
if (status==2 && lend_Reader!=num)
{
book_Reader=num;
status=3;
return 1;
}
else return 0;
}
int returnBook(long num)
{
if (status==2 && lend_Reader==num)
{
lend_Reader=0;
status=1;
return 1;
}
else if (status==3 && lend_Reader==num)
{
lend_Reader=book_Reader;
book_Reader=0;
status=2;
return 1;
}
return 0;
}
void print(long num)
{
cout<<setiosflags(ios::left)<<setw(10)<<number<<setw(25)<<name<<setw(20)<<author<<setw(15)<<isbn;
switch (status)
{
case 1: cout<<setw(5)<<"馆藏"; break;
case 2: cout<<setw(5)<<"外借"; break;
case 3: if (lend_Reader==num) cout<<setw(5)<<"外借";
else cout<<setw(5)<<"预定"; break;
default: break;
}
cout<<endl;
}
friend void readerInformation(long);
friend ostream &operator<<(ostream &, const Book_T &);
friend istream &operator>>(istream &, Book_T &);
};
///////////////////////////////////////////////////////////////////////////////////////////////////
class Reader_T //读者类
{
private:
long number; //读者编号
char name[20]; //读者姓名
char password[PSW_LENGTH]; //读者密码
int limit; //读者权限 (1-学生 2-教师 3-图书管理员 4-读者管理员 5-系统管理员 0-删除)
int borrowed_Num; //记录借书数目 (学生最多5本 教师最多10本)
public:
void setReader(long num=0, char *na="", char *psw="", int lim=1, int bNum=0)
{
number=num;
strcpy(name,na);
strcpy(password,psw);
limit=lim;
borrowed_Num=bNum;
}
int getNumber() { return number; }
char *getPassword() { return password; }
void changePassword(char *psw) { strcpy(password,psw); }
void changeLimit(int lim) { limit=lim; }
int checkPassword(char *psw) { return strcmp(password,psw); }
int getLimit() { return limit; }
void deleteReader() { number=0; limit=0; }
int getBorrowedNum() { return borrowed_Num; }
void borrowNumUp() { borrowed_Num++; }
void borrowNumDown() { borrowed_Num--; }
void print()
{
cout<<setiosflags(ios::left)<<setw(10)<<number<<setw(15)<<name<<setw(15);
switch (limit)
{
case 1: cout<<"学生"; break;
case 2: cout<<"教师"; break;
case 3: cout<<"图书管理员"; break;
case 4: cout<<"读者管理员"; break;
case 5: cout<<"系统管理员"; break;
default: break;
}
cout<<"已借书数:"<<borrowed_Num<<endl;
}
friend void readerInformation(long);
friend ostream &operator<<(ostream &, const Reader_T &);
friend istream &operator>>(istream &, Reader_T &);
};
///////////////////////////////////////////////////////////////////////////////////////////////////
int reader_Number; //记录总读者人数
int book_Number; //记录总图书数量
long temp_CardNumber; //记录登录读者的卡号
Book_T book[MAX_BOOK_NUM];
Reader_T reader[MAX_READER_NUM];
///////////////////////////////////////////////////////////////////////////////////////////////////
ostream &operator<<(ostream &obook, const Book_T &temp_Book) //流运算符的重载
{
return obook<<setw(10)<<temp_Book.number<<setw(30)<<temp_Book.name<<setw(20)<<temp_Book.author<<setw(15)<<temp_Book.isbn
<<setw(5)<<temp_Book.status<<setw(10)<<temp_Book.lend_Reader<<setw(10)<<temp_Book.book_Reader<<endl;
}
istream &operator>>(istream &ibook, Book_T &temp_Book)
{
return ibook>>temp_Book.number>>temp_Book.name>>temp_Book.author>>temp_Book.isbn
>>temp_Book.status>>temp_Book.lend_Reader>>temp_Book.book_Reader;
}
ostream &operator<<(ostream &oreader, const Reader_T &temp_Reader)
{
return oreader<<setw(10)<<temp_Reader.number<<setw(15)<<temp_Reader.name<<setw(15)<<temp_Reader.password
<<setw(5)<<temp_Reader.limit<<setw(5)<<temp_Reader.borrowed_Num<<endl;
}
istream &operator>>(istream &ireader, Reader_T &temp_Reader)
{
return ireader>>temp_Reader.number>>temp_Reader.name>>temp_Reader.password>>temp_Reader.limit
>>temp_Reader.borrowed_Num;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int searchBook(long bookNum) //查询书目函数
{
int search=-1;
for (int i=0; i<book_Number; i++)
if (book[i].getNumber()==bookNum) search=i;
return search;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int searchReader(long readerNum) //查询读者函数
{
int search=-1;
for (int i=0; i<reader_Number; i++)
if (reader[i].getNumber()==readerNum) search=i;
return search;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
char *password() //加密密码函数
{
int i=0;
char temp;
char temp_Psw[PSW_LENGTH];
while (i<PSW_LENGTH)
{
temp=getch();
if (temp==13 && i>0) break;
else if(temp==13)
{
cout<<endl<<"对不起,为了你的安全,请务必输入密码! "<<endl;
cout<<"请输入你的密码: "<<flush;
continue;
}
if ((temp_Psw[i]=temp)!='\b')
{
cout<<"*"<<flush;
i++;
}
else if (i>0)
{
cout<<'\b'<<'\0'<<'\b'<<flush;
i--;
}
}
temp_Psw[i]='\0';
cout<<endl;
return temp_Psw;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void changePassword() //修改当前用户密码
{
char psw[PSW_LENGTH];
char confirmPsw[PSW_LENGTH];
cout<<"请输入你的密码: "<<flush;
strcpy(psw,password());
if (!reader[searchReader(temp_CardNumber)].checkPassword(psw))
{
cout<<"请输入修改后的密码: "<<flush;
strcpy(psw,password());
cout<<"请确认修改后的密码: "<<flush;
strcpy(confirmPsw,password());
if (!strcmp(confirmPsw,psw))
{
reader[searchReader(temp_CardNumber)].changePassword(psw);
cout<<"密码修改成功!"<<endl;
}
else cout<<"操作失败,两次输入的密码不符!"<<endl;
}
else
{
cout<<"密码输入有误!"<<endl;
}
cout<<endl;
system("pause");
}
///////////////////////////////////////////////////////////////////////////////////////////////////
char yesno() //yes or no确认函数
{
char a,b;
while(1)
{
while(1)
{
a=getch();
while (a==13)
{
cout<<endl<<flush;
a=getch();
}
if (a=='y'||a=='n')
{
cout<<a<<flush;
break;
}
else continue;
}
while (1)
{
b=getch();
if(b==13)
{
cout<<endl;
return a;
}
else if (b=='\b')
{
cout<<'\b'<<" "<<'\b'<<flush;
break;
}
else continue;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
int checkChoice(int i, int j) //防止不符合要求的输入字符函数
{
char a,b;
while(1)
{
while(1)
{
a=getch();
while (a==13)
{
cout<<endl<<flush;
a=getch();
}
if ((a>=i+'0')&&(a<=j+'0'))
{
cout<<a<<flush;
break;
}
else continue;
}
while (1)
{
b=getch();
if(b==13)
{
cout<<endl;
return (a-'0');
}
else if (b=='\b')
{
cout<<'\b'<<" "<<'\b'<<flush;
break;
}
else continue;
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void bookOperate(long num) //流通管理系统
{
int choice=1;
long bookNum;
int maxnum=5;
if (reader[searchReader(num)].getLimit()>=2) maxnum=10;
while (choice)
{
cout<<endl<<"※※※※※※※※※※※※※※¤ 流通管理系统 ¤※※※※※※※※※※※※※※"<<endl;
cout<<endl<<"1-外借图书"<<endl;
cout<<"2-归还图书"<<endl;
cout<<"3-预定图书"<<endl;
cout<<"0-退出流通管理系统"<<endl;
cout<<endl<<"请输入你的选择: "<<flush;
choice=checkChoice(0,3);
switch (choice)
{
case 1:
cout<<"请输入要借的图书编号: "; cin>>bookNum;
if (searchBook(bookNum)==-1)
cout<<"对不起,该图书号不存在!"<<endl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -