📄 book.cpp
字号:
#include <iostream.h>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
#include <string>
#include "tushu.h"
#include "time1.h"
#include "student.h"
#include <fstream>
#include <stdlib.h>
void del(int);
using namespace std;
void tushuinput(fstream &);
static int tnum=10;
char *s[5]={"小白","小黑","小红","小绿","小花"};
void input();
bool tim(ttime &,ttime &);
int enterchoice1();
void search(fstream &);
void outputline(fstream &, int);
void newbook(int);
void borrow(fstream &,fstream &);
void back(fstream &,fstream &);
void stufir();
int getbooknum(char *);
student getstu(int,fstream &);
tushu getbook(int,fstream &);
bool check(int,fstream &);
void menu();
int main()
{
cout<<"您现在即将进入图书管理系统,不要紧张,任意键继续..."<<endl;
getch();
menu();
stufir();
system("cls");
int choice;
while ( ( choice = enterchoice1() ) != 0 ) {
switch ( choice ) {
case 1:{
system("cls");
fstream access;
access.open("1.txt",ios::in); if(!access){cout<<"wrong!!!"<<endl;}
if(!access){cout<<"错误!!!\n";break;}
else
search(access);
break;}
case 2:
{system("cls");
fstream access1;
access1.open("1.txt",ios::in|ios::ate); if(!access1){cout<<"wrong!!!"<<endl;}
fstream as;
as.open("studata.dat",ios::in|ios::ate);
if(!as){cout<<"错误!!!\n";break;}
borrow(access1,as);
break;}
case 3:
{system("cls");
fstream access2;
access2.open("1.txt",ios::in|ios::ate); if(!access2){cout<<"wrong!!!"<<endl;}
fstream as1;
as1.open("studata.dat",ios::in|ios::ate);
if(!as1){cout<<"错误!!!\n";break;}
back(access2,as1);
break;}
case 4:
{
system("cls");
int admin=1111,ad;
int pass=1111,pa;
cout<<"输入管理员帐号:\n";
cin>>ad;
cout<<"输入管理员密码:\n";
cin>>pa;
if(ad==admin&&pa==pass){
int boo = getbooknum( "Enter a new book number" );
newbook(boo);}else cout<<"用户名或密码错误!!!将返回主菜单,请谅解...\n";
break;}
case 5:
{system("cls");
input();
break;}
case 6:{system("cls");
cout<<"恭喜你中了彩蛋!!!\n本系统是软件053 孙骁勐,叶馨,林零,朱佳锦 作品\n嘎嘎"<<endl;
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
break;}
default:
{ system("cls");
cerr << "跟你说不要乱按了嘛,再输一遍!!!\n";
getch();
cout<<endl; }
break;
}
}
return 0;
}
int enterchoice1()
{
system("cls");
cout <<"=================================================== ||\n"
<< "\n||键入你所要的选择: ||\n"<<"===================================================\n"
<< "||1-图书查询 ||\n"<<"===================================================\n"
<< "||2-借书 ||\n"<<"===================================================\n"
<< "||3-还书 ||\n"<<"===================================================\n"
<< "||4-图书信息更新 (添加或删除)(需管理员权限) ||\n"<<"===================================================\n"
<< "||5-图书库资料修改(图书手动初始化)(需管理员权限) ||\n"<<"===================================================\n"
<< "||0-退出 ||\n"<<"=================================================== ||\n"
<< "=================================================== ||\n";
int menuchoice;
cin >> menuchoice;
return menuchoice;
}
void input()
{
int admin=1111,ad;
int pass=1111,pa;
cout<<"输入管理员帐号:\n";
cin>>ad;
cout<<"输入管理员密码:\n";
cin>>pa;
if(ad==admin&&pa==pass){
fstream access;
access.open("1.txt",ios::out|ios::in);
if(!access){cout<<"wrong!!!"<<endl;
return ;}
access.seekp(0);
tushuinput(access);
}
else cout<<"用户名或密码错误!!!将返回主菜单,请谅解...\n";
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
return ;
}
void tushuinput(fstream &access)
{
tushu keji;int x=1,y,z=0;
cout<<"请输入要添加书的总数目\n";
cin>>tnum;
for(int l=0;l<tnum;l++)
{
if(l>0&&l%2==0)system("cls");
cout<<"请输入书的类型:(1:科技书---2:文艺书)"<<endl;
do{
if(x!=1&&x!=2)cout<<"错误!!!重新输入..."<<endl;
cin>>x;
keji.number=++z;
cout<<z<<"请输入书名:"<<endl;
cin>>keji.name;
cout<<"请输入书的数目:"<<endl;
cin>>keji.restnum;
cout<<"请输入地点:(1:留西 ---2:留下)"<<endl;
do{
cin>>y;
if(y!=1&&y!=2)cout<<"错误!!!重新输入..." ;}
while(y!=1&&y!=2);
if(y==1)strcpy(keji.place,"留西");
else strcpy(keji.place,"留下");
if(x==1)keji.sort=1;
else keji.sort=2;
if(x!=1&&x!=2)cout<<"wrong input!!!"<<endl;
else access.write(reinterpret_cast<char *>(&keji),sizeof(tushu));
}while(x!=1&&x!=2);
}
access.close();
}
void search(fstream& book)
{ cout << "1-科技类\n"
<< "2-文化类\n" <<endl;
int a;
cin>>a;
outputline(book , a);
}
void outputline(fstream& books, int a)
{ tushu convert;
books.seekg(0);
cout<<"图书编号 图书名称 图书数量 图书放置地点\n";
for ( int i=0; i<tnum; i++ )
{ books.read( reinterpret_cast<char *>( &convert ),sizeof(tushu) );
if(convert.sort==a&&convert.number==i+1)
cout << convert.number <<" " << convert.name<<" "
<< convert.restnum <<" " << convert.place<<endl;
}
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
}
void newbook(int b)
{
tushu convert,p;
fstream bookq;
bookq.open("1.txt",ios::in|ios::out);if(!bookq){cout<<"wrong!!!"<<endl;}
int y,x=1;
bookq.seekg(0);
for( int i=0; i<tnum; i++ ){bookq.read( reinterpret_cast<char *>( &convert ),
sizeof(tushu) );
if(convert.number==b){
cout << " Book number# " <<b
<< " 已经存在.你想删除它吗?(y/n)" << endl;
char g;
g=getche();
if(g=='y'||g=='n'){if(g=='y'){del(b);return;}else {cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
return ;}}
else
{cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;}
}}
cout<<"请输入书的类型:(1:科技书---2:文艺书)"<<endl;
do{
if(x!=1&&x!=2)cout<<"错误!!!重新输入..."<<endl;
cin>>x;
p.number=b;
cout<<"请输入书名:"<<endl;
cin>>p.name;
cout<<"请输入书的数目:"<<endl;
cin>>p.restnum;
cout<<"请输入地点:(1:留西 ---2:留下)"<<endl;
do{
cin>>y;
if(y!=1&&y!=2)cout<<"错误!!!重新输入..." ;}
while(y!=1&&y!=2);
if(y==1)strcpy(p.place,"留西");
else strcpy(p.place,"留下");
if(x==1)p.sort=1;
else p.sort=2;
if(x==1||x==2) {
bookq.seekp(sizeof(tushu)*(b-1));
bookq.write(reinterpret_cast<char *>(&p),sizeof(tushu));
bookq.close();}
if(tnum<b)tnum=b;}while(x!=1&&x!=2);
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
getch();
}
void borrow(fstream &shu,fstream &stu)
{
int k;
tushu m;
cout<<"输入你要借的书的序号:"<<endl;
cin>>k;
if(k<=tnum&&k>0){
shu.seekg((k-1)*sizeof(tushu));
shu.read(reinterpret_cast<char *>(&m),sizeof(tushu));
if(m.restnum>0)
{cout<<"输入你的学号:"<<endl;
int num; cin>>num;
if(check(num,stu)){student kk;ttime nn; (kk.lendtime)=nn;
kk=getstu(num,stu);
tushu dd=getbook(k,shu);
cout<<(kk).name<<" 你要借的书为 "<<(dd).name;
cout<<" 借书时间为:";
nn.ShowTime();
kk.booknum+=1;
dd.number-=1;
cout<<endl;
stu.seekp(sizeof(student)*(num-1));
shu.seekp(sizeof(tushu)*(k-1));
strcpy(kk.bookname,(getbook(k,shu)).name);
shu.write(reinterpret_cast<char *>(&dd),sizeof(tushu));
stu.write(reinterpret_cast<char *>(&kk),sizeof(student));
}
else cout<<"没有此学号!!!"<<endl;
}
else cout<<"对不起,此书已经被借光,请下次再来。"<<endl;
}
else cout<<"没有此书,请仔细核对!!!"<<endl;
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
}
void back(fstream &shu,fstream &stu) //反对
{
cout<<"请输入你的学号"<<endl;
int num;
cin>>num;
if(check(num,stu)){
cout<<"输入你要还的书的序号:"<<endl;
int p;
cin>>p;
tushu dd=getbook(p,shu);
student kk;
kk=getstu(num,shu);
ttime nn; (kk.backtime)=nn;
cout<<(kk).name<<" 你要借的书为 "<<(dd).name;
cout<<"还书时间为:";
nn.ShowTime();
kk.booknum-=1;
dd.number+=1;
kk.backtime.ShowTime();kk.lendtime.ShowTime();
if(tim(kk.backtime,kk.lendtime))
cout<<"你借的书已经过期,想死啊!!!"<<endl;
else cout<<"还书成功!!!"<<endl;
stu.seekp(sizeof(student)*(num-1));
shu.seekp(sizeof(tushu)*(p-1));
strcpy(kk.bookname,"");
shu.write(reinterpret_cast<char *>(&dd),sizeof(tushu));
stu.write(reinterpret_cast<char *>(&kk),sizeof(student));
}
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
}
bool check(int num,fstream &stu)
{
student kk;
stu.seekg(sizeof(student)*(num-1));
stu.read(reinterpret_cast<char *>(&kk),sizeof(student));
if(kk.number==num&&kk.booknum<7)return true;
else return false;
}
tushu getbook(int a,fstream &b)
{
tushu kk;
b.seekg(sizeof(tushu)*(a-1));
b.read(reinterpret_cast<char *>(&kk),sizeof(tushu));
return kk;
}
student getstu(int a,fstream &b)
{
student stu;
b.seekg(sizeof(student)*(a-1));
b.read(reinterpret_cast<char *>(&stu),sizeof(student));
return stu;
}
int getbooknum(char *u)
{
cout<<u<<endl;
int k;
cin>>k;
return k;
}
void stufir()
{
fstream stu;
int z=1;
stu.open("studata.dat",ios::in|ios::out);
if(!stu){
cout<<"Open wrong!!!"<<endl;
return;}
student k;
for(int i=0;i<5;i++)
{
stu.seekp(sizeof(student)*i);
k.number=z++;
strcpy(k.name,s[i]);
(k.lendtime).SetTime(0,0,0,0,0,0);
(k.backtime).SetTime(0,0,0,0,0,0);
k.booknum=0;
stu.write(reinterpret_cast<char *>(&k),sizeof(student));
}
}
bool tim(ttime &a,ttime &b)
{
if(a.m_year-b.m_year>0)return true;
else {
if(a.m_month-b.m_month>0)return true;
else return false;
}
}
void del(int b)
{
fstream access1;
access1.open("1.txt",ios::in|ios::ate); if(!access1){cout<<"wrong!!!"<<endl;}
access1.seekp(sizeof(tushu)*(b-1));
tushu kk;
access1.write(reinterpret_cast<char *>(&kk),sizeof(tushu));
cout<<"成功删除!!!"<<endl;
cout<<"按任意键返回..."<<endl;
getch();
cout<<endl;
}
void menu()
{
int k;
char a[132]="=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=";
for(int i=0;i<132;i++)
{
for(int k=i;k<133;k++)
cout<<a[i];}
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -