实现一个小型的图书管理系统,方便读者借书还书及办理各种手续,更方便工作人员对图书进行更有效的管理,是一个记录图书借记和存储的工具。
二.程序主要功能
该程序的主要功能有:读者功能:可进行读者注册、修改密码、查询书籍、查询借阅记录。
读者:
管理员:
图书信息管理可以进行添加新书、删除图书、修改、显示所有书籍等操作。其中添加内容包括:书名、ISBN编号、作者、出版社是否在架,方便读者根据不同需要进行查找、查看;(数据全部存储在文本文件内)
添加书籍:向图书管理系统中添加新书
显示书籍:显示图书的所有书籍信息
书籍删除:按照书名进行删除指定书籍
查找书籍:按照姓名查看指定书籍信息
修改书籍:按照姓名重新修改指定书籍
退出图书管理系统:退出当前使用的系统————————————————
三.程序运行平台
程序语言:C++
IDEA:xcode
代码:
#ifndefUNTITLED4_LIBRARY_H
#defineUNTITLED4_LIBRARY_H
#include
#include
#include
#include
usingnamespacestd;
constintsize=200;
intjd;
//书籍类
classBook{
protected:
stringname;//书名
stringwriter;//作者
stringpress;//出版社
stringleibie;//类别
stringISBN;//编码
intnum=0;//库存
friendclassLibrary;
public:
Book(){name="",writer="",press="",ISBN="";};
intbk_num;//数量
voidset_name();
voidset_writer();
voidset_press();
voidset_ISBN();
voidset_leibie();
voidset_num();
stringget_name(){returnname;}
stringget_writer(){returnwriter;}
stringget_press(){returnpress;}
stringget_ISBN(){returnISBN;}
friendistream&operator>>(istream&is,Book&book){
is>>book.name>>book.writer>>book.press>>book.leibie>>book.num>>book.ISBN;
returnis;
}
friendostream&operator<<(ostream&os,Book&book){
os< returnos; }; //用户类 classUser{ stringname;//用户名 stringpassword;//密码 User(){name="",password="";}; charid;//判断用户类型 intkey;//判断用户当前情况 intnums=0;//当前用户数量 intbk_size=0;//当前用户借阅书籍数量 stringbr_name;//借阅书籍名称 voidset_username(); voidset_password(); boolis_login(int); boolis_match(string,string);//匹配用户名 boolis_teacher();boolis_student(); stringget_username(){returnname;} stringget_password(){returnpassword;} voidrevise_password();//修改密码 voidre_gister();//注册 intlog_in(string,char); voiduser_information(); voidread(string);//浏览数组数据 voidsave();//文本数据存储至数组函数 intpos(string);//获取用户名在文件中第几行 boolis_password(stringstr); voidadd_user(); voiddel_user(); Usertp; //图书管理类 classLibrary:publicUser,Book { intlent(User&);//还书 intpos(); intbk_size=0; voidread(); voidborrow(char,User&); voidshow_history();//个人借阅记录查询 voidshow_list();//打印书籍信息 voidview_history(char); Book*show_info(User&); conststringget_time(); boolis_lent(); voidrenew(User&); voidsave(); voidmodify();//修改图书信息 boolis_borrow(); voidresearch(); voidadd_book(); voiddel_book(User&); voidmenu(); voiddenglu(); voidjiehuanshu(); #endif/*library_system_h*/ Book*bk=newBook[size]; User*ur=newUser[size]; time_tnow; time(&now); structtm*lt; lt=localtime(&now); charbuffer[50]; sprintf(buffer,"%d/%d/%d%2d:%2d",(int)lt->tm_year+1900,(int)(lt->tm_mon+1),(int)lt->tm_mday,(int)lt->tm_hour,(int)lt->tm_min); returnstring(buffer); stringGetdeadline(){//计算还书日期 time_tnow;time_tk; k=time(&now)+1728000; lt=localtime(&k); sprintf(buffer,"%d/%d/%d%",(int)lt->tm_year+1900,(int)(lt->tm_mon+1),(int)lt->tm_mday); return(buffer); voidBook::set_name(){ cin>>name; voidBook::set_writer(){ cin>>writer; voidBook::set_press(){ cin>>press; voidBook::set_ISBN(){ cin>>ISBN; voidBook::set_leibie(){ cin>>leibie; voidBook::set_num(){ cin>>num; //user //获取用户文本数据 boolUser::is_login(intn){ if(n==1) return1; else return0; voidUser::read(stringfilename){ ifstreaminfile; nums=0; infile.open(filename,ios::in); while(!infile.is_open()){ cout<<"Couldnotopenit\n"; exit(0); if(filename=="user.txt"){ for(inti=0;infile.peek()!=EOF;i++){ if(infile.fail()) break; infile>>ur[i].name; infile>>ur[i].password; nums++; nums=nums-1; cout<<"【系统提示】暂未开通此模块\n"; infile.close(); //保存新用户信息 voidUser::save(){//添加到userinfo.txt文件 ofstreamoutfile; outfile.open("user.txt",ios::out); inti=0; while(!outfile.eof()){ outfile< i++; outfile.close(); voidUser::set_username(){ inta; cout<<"输入用户名:"; cin>>tp.name; a=tp.is_match(tp.name,"register"); while(a==0){ cout<<"【警告】用户名重复,请重新输入:\n"; voidUser::set_password(){ stringkey1,key2; cout<<"请输入密码:\n"; cin>>key1; cout<<"再次输入密码:\n";//崩溃写不来了^^ do cin>>key2; if(key1!=key2) cout<<"两次密码不一致,请重新输入:\n"; }while(key1!=key2); tp.password=key2; voidUser::revise_password(){ fstreamfile; stringstr;stringkey1,key2;inta;intb; tp.read("user.txt"); cout<<"输入要修改的用户名:\n"; cin>>str; a=tp.is_match(str,"log"); be:if(a==0){ cout<<"用户名不存在,请重新输入:\n"; gotobe; b=tp.pos(str); cout<<"请输入原密码:\n"; rt:if(str==ur[b].password) file< else{ cout<<"【警告】密码错误,请重新输入:\n"; gotort; cout<<"输入新密码:\n"; cout<<"再次输入:\n"; go:if(key1==key2) ur[b].password=key1; cout<<"【警告】两次密码不一致,请重新输入:\n"; gotogo; tp.save(); cout<<"【系统提示】修改成功!"; //匹配用户名 boolUser::is_match(stringstr,stringmode){ inti; infile.open("user.txt",ios::in); for(i=0;!infile.eof();i++){ if(str==ur[i].name&&mode=="register"){ elseif(str==ur[i].name&&mode=="log") if(mode=="register") boolUser::is_password(stringstr){ if(str==ur[i].password)return1; //计数 intUser::pos(stringstr){ ifstreamin; User*buffer=newUser[size]; in.open("user.txt"); while(in.peek()!=EOF){ in>>buffer[i].name; in>>buffer[i].password; if(str==buffer[i].name) in.close(); delete[]buffer; returni; //注册 voidUser::re_gister(){ fstreamfp; fp.open("user.txt",ios::app); while(!fp.is_open()) cout<<"couldnotopen"; tp.set_username(); tp.set_password(); cout<<"【系统提示】注册成功\n"; fp< fp.close(); intUser::log_in(stringfilename,charjd){ inti;//记录用户名在文件的位置 intindex=0; stringstr; charpassword[30]; stringkey; switch(jd){ case'1': inta=tp.is_match(tp.name,"log"); while(!a){ cout<<"【警告】用户名不存在!请重新输入:\n"; a=tp.is_match(tp.name,"log"); i=tp.pos(tp.name); cin>>key; for(inti=0;i key+=password[i]; tp.password=key; //验证密码 while(1){ if(tp.password==ur[i].password){ tp.key=tp.is_login(1); cin>>tp.password; case'2': charbuffer[20]; charstr[20]; cout<<"输入管理员密码:\n"; outfile.open("admin.txt",ios::out); outfile<<"123"; ifstreamin(filename); in.getline(buffer,20); if(strcmp(str,buffer)==0){ inta=tp.is_login(1); returna; cout<<"密码错误,请重新输入:\n"; }while(strcmp(str,buffer)); default: //个人信息 voidUser::user_information(){ chartemp[100]; str=tp.name; file.open("userinfo",ios::in||ios::app); while(file.peek()!=EOF){ if(str==ur[i].name){ file.getline(temp,100); file< voidUser::add_user(){ ofstreamfile; file.open("user.txt",ios::app); cout<<"【系统提示】添加成功\n"; file< file.close(); voidUser::del_user(){ inta;charaa; read("user.txt"); for(inti=0;i cout< cout<<"请选择你要删除的用户:\n"; cin>>a; if(cin.fail()||a<0){ cout<<"【系统提示】重新输入:\n"; cin.clear(); cin.get(); cout<<"确定要删除吗?y确定,其他键取消\n"; cin>>aa; if(aa=='y'){ for(inti=a-1;i ur[i]=ur[i+1]; cout<<"【系统提示】删除成功!\n"; save(); //library //获取书籍文本数据 voidLibrary::read(){ ifstreamin("list.txt"); inti=0;bk_num=0; in>>bk[i]; bk_num++; bk_num--; //定位文件中的位置 intLibrary::pos(){ Book*buffer=newBook[size]; in.open("list.txt"); in>>buffer[bk_num]; returnbk_num; //打印书籍信息到终端 voidLibrary::show_list(){ read(); cout<<"--------------图书信息------------"< cout<<"目前书库内有"< cout<<"编号书名作者出版社类别库存ISBN"< for(inti=0;i cout<<""< //借书 voidLibrary::borrow(charid,User&ps){ fp.open("history.txt",ios::app); fstreamfp2("reader.txt",ios::app); fstreamfp3("reader.txt",ios::in); charbuffer[30]; while(fp3.peek()!=EOF){ fp3.getline(buffer,30); bk_size++; show_list(); if(tp.id==1)//设置借书数量 tp.nums=5; elseif(tp.id==2) tp.nums=10; inta;intb;stringword;stringkey;stringdata=word+key; cout<<"【系统提示】借几本书?______\n"; while(true){ cout<<"【系统提示】请重新输入:\n"; while(a--){ if(tp.id==1&&a+bk_size>5){ cout<<"【系统提示】您的借书权限不够,最多借5本书"; if(tp.id==2&&a+bk_size>10){ cout<<"【系统提示】您的借书权限不够,最多借10本书"; cout<<"输入借阅书籍序号:\n"; cin>>b; if(cin.fail()){ if(bk[b-1].num==0) cout<<"【系统提示】此书库存不够\n"; bk[b-1].num--; fstreamfp4("list.txt",ios::out); fp4< key=Getdeadline(); fp2< fp2< fp< fp2.close(); //还书 intLibrary::lent(User&tp){ stringbook[20]; stringtime[20]; charaa; stringstr[200]; ifstreamfile; ofstreamfile2; stringnow=GetLocaltime(); file.open("reader.txt",ios::in); while(!file.is_open()){ cout<<"couldnotopen\n"; exit(EXIT_FAILURE); file>>str[i]; file>>book[i]; file>>time[i]; intn=1; while(n){ for(intj=0;j if(tp.name==str[j]) cout< continue; if(i-1==0){ cout<<"【系统提示】您没有借阅书籍\n"< cout<<"【系统提示】您有"< cout<<"选择您要归还的书籍:\n"; for(intj=a-1;j str[j]=str[j+1]; book[j]=book[j+1]; time[j]=time[j+1]; file2.open("reader.txt",ios::out); for(intj=0;j file2< file2<