?? 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<<"沒有此學號?。。?quot;<<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<<"你借的書已經過期,想死?。。。?quot;<<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 + -