精华内容
下载资源
问答
  • C#制作图书管理系统,功能比较简单,供刚学C#的人参考!
  • MFC制作图书管理系统

    千次阅读 2021-06-15 15:59:21
    图书管理系统 1 概述 图书管理系统结构简单明了,工作任务分配清晰,组织结构相互协调,部署任务分工明确,流通部,办公室等人员办公方便。 1.1系统简介:图书管理系统,结构,组织,部门与读者、图书的采编,流通...

    图书管理系统

    1 概述 图书管理系统结构简单明了,工作任务分配清晰,组织结构相互协调,部署任务分工明确,流通部,办公室等人员办公方便。

    1.1系统简介:图书管理系统,结构,组织,部门与读者、图书的采编,流通、借阅更加方便,工作简单,执行方便。

    2 系统需求

    2.1 功能需求

    (1) 功能1:

    图书信息维护:主要完成图书馆新进图书的编号、登记、入馆等操作。读者信息维护:主要是完成读者信息的添加、修改和删除等操作,只有是系统中的合法读者才有资格进行图书的借阅活动。

    (2) 功能2:

    借/还书处理:主要完成读者的借书和还书活动,记录读者借还书情况并及时反映图书的在库情况。读者借阅记录:让每位读者能及时了解自己的借书情况,包括曾经借阅记录以及未还书记录。

    (3) 功能3:

    图书书目检索:读者能够根据不同的信息(如书名、作者、关键词等)

    (4)功能4:

    管理员可以对图书,和会员进行相应的信息修改

    (5)功能5:

    登录与注册功能,进行相应的安全措施

    书馆的存书情况进行查找,以便快速的找到自己希望的图书。图书超期通知:为图书管理员提供一个统计信息,能够统计出到目前为止逾期未归还的图书及相应的读者信息

     

    部分运行截图

     

     

     

     

     

     

    下载链接

    https://download.csdn.net/download/zhiwenganyong/19661786 

    展开全文
  • C++编写的一个图书管理系统

    千次阅读 2020-11-28 10:24:12
    C++编写的一个图书管理系统 2018大一的课设,搬到这纪念一下,共1200多行代码 为图书管理人员编写一个图书管理系统图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表: 图书信息表——存储图书的...

    C++编写的一个图书管理系统

    2018大一的课设,搬到这纪念一下,共1200多行代码
    为图书管理人员编写一个图书管理系统,图书管理系统的设计主要是实现对图书的管理和相关操作,包括3个表:
    图书信息表——存储图书的基本信息,包括书号、书名、作者、出版社、出版日期、存馆数量、定价等。
    读者信息表——存储读者的基本信息,包括学号、姓名、学院、专业班级等。
    图书借阅表——存储读者借书的相关信息,包括学号、姓名、书号、书名、借阅日期、应还日期、归还日期等。
    

    用菜单选择方式完成了以下功能:

    1. 图书信息添加功能:包括书号、书名、作者、出版社、出版日期、存馆数量、定价等。

    2. 图书信息查询:分别按书名, 按作者名,
      按出版单位等进行查询。

    3. 图书信息排序:按书号、书名等按升序进行排序。

    4. 图书信息的修改、删除:按书号或书名进行图书的修改和删除。

    5. 读者信息添加功能:包括学号、姓名、学院、专业、班级等。

    6. 读者信息查询:分别按学号、姓名、班级等进行查询。

    7. 读者信息排序:按学号、学院等按升序进行排序。

    8. 读者信息的修改、删除:按学号+姓名进行读者信息的修改和删除

    9. 图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。

    10. 图书归还:输入学号+书号,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。

    11. 图书借阅查询:分别按学号、书名、学院等进行查询。

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <fstream>
    #include <cstdlib>
    #include <windows.h>
    #include <winbase.h>
    const int INC=20;
    using namespace std;
    class Date{   //Date类 :日期类
    public:
        int day;     //日
        int month;   //月
        int year;    //年
        Date(int d=1,int m=1,int y=2012){    //构造函数  默认初始日期2012.1.1
            //判断日期的合法性
            if(d>0&&d<32)day=d;else day=1;
            if(m>0&&m<13)month=m;else m=1;
            if(y>0)year=y;else year=2012;
        }
    	void setDay(int d){day=d;}       //设置日
    	void setMonth(int m){month=m;}   //设置月
    	void setYear(int y){year=y;}     //年
    	int getDay(){return day;}         //获取年月日
    	int getMonth(){return month;}
    	int getYear(){return year;}
    	void disp(){cout<<year<<"/"<<month<<"/"<<day;}   //显示日期
    	Date operator+(int dtmp);
    	bool isLeapYear(int yy);              //判断是否为闰年
    };
    bool Date::isLeapYear(int yy){          //判断是否为闰年
    	if(yy%400==0)
    		return true;
    	else if(yy%100!=0&&yy%4==0)
    		return true;
    	else return false;
    }
    
    Date Date::operator+(int dtmp){         //重载+运算符
    	//bool Date::isLeapYear(int yy);
    	int yy=year,mm=month,dd=day,mtmp,m2;     //年份yy   月份mm   日dd    借阅天数 dtmp
    	bool flag;
    	while(dtmp>=0)
    	{
    		if(isLeapYear(yy))
    		{
    			dtmp-=366;
    			flag=true;
    		}
    		else
    		{
    			dtmp-=365;
    			flag=false;
    		}
    		yy++;
    	}
    	if(flag)
    		dtmp+=366;
    	else dtmp+=365;
    	yy--;
    	if(isLeapYear(yy))
    	{
    		m2=29;
    	}
    	else
    	{
    		m2=28;
    	}
    	mtmp=dtmp+dd;
    	int m_day[]={0,31,m2,31,30,31,30,31,31,30,31,30,31};   //每月天数
    	for(;mtmp>m_day[mm];)
    	{
    		mtmp-=m_day[mm];
    		if(mm==12)
    		{
    			mm=0;
    			yy++;
    		}
    		mm++;
    	}
    	dd=mtmp;
    	Date dt(yy,mm,dd);
    	return dt;     //返回一个新日期
    }
    class Book{
    //书号、书名、作者、出版社、出版日期、出版定价、存馆数量
    private:
    	string num;   //s书号
    	string title;   //标题
    	string author;   //作者
    	string publisher;   //出版社
    	Date publishdate;   //Date类:出版日期
    	float price;   //价格
    	int howmany;    //存馆数量
    	public:
        Book(string num0="24416-5",string title0="数据结构",string author0="王红梅,胡明,王涛",
             string pub0="清华大学出版社",int bd=1,int bm=1,int by=2012,float pr=29.0,int ct=10):publishdate((bd,bm,by)){
        num=num0;title=title0;author=author0;publisher=pub0;price=pr;howmany=ct;}
        void setNum(string num0){num=num0;}      //设置书号
        void setTitle(string title0){title=title0;}   //设置标题
        void setAuthor(string author0){author=author0;}   //设置作者
        void setPublisher(string publisher0){publisher=publisher0;}   //设置出版社
        void setPublishdate(int bd,int bm,int by){Date d(bd,bm,by);publishdate=d;}    //设置出版日期,先构造在复制
        void setHowmany(int ct){howmany=ct;}    //设置库存
        void setPrice(float pr){price=pr;}   //设置价格
        string getNum(){return num;}        // 获取 书号 标题 作者 等信息
        string getTitle(){return title;}
        string getAuthor(){return author;}
        string getPublisher(){return publisher;}
        Date getPublishdate(){return publishdate;}
        int getHowmany(){return howmany;}
        float getPrice(){return price;}
        void dispABook(){
            cout <<num<< '\t'<<title<< '\t'<<author<< '\t'<<publisher<< '\t';       //获取Book信息  :书号标题  作者 出版社  日期
            getPublishdate().disp();    //获取日期信息
            cout<< '\t'<<price<< '\t'<<howmany << '\n' ;
            }
        friend class InBook;               //友元类
        friend class ReaderBorrowBook;
    };
    class Reader{
    //学号、姓名、学院、专业班级  读者类
    private:
    	string num;    //学号
    	string name;    //姓名
    	string college;   //专业
    	string classno;   //班级
    public:
        Reader(string num0="20150000",string name0="NoName",string college0="信息学院",string clsn="网络工程15-1"){
        num=num0;name=name0;college=college0; classno=clsn;}         //构造函数初始化信息
        void setNum(string num0){num=num0;}            //功能函数 设置信息
        void setName(string name0){name=name0;}
        void setCollege(string college0){college=college0;}
        void setClassno(string clsn){classno=clsn;}
        string getNum(){return num;}   //功能函数   获取信息
        string getName(){return name;}
        string getCollege(){return college;}
        string getClassno(){return classno;}
        void dispAReader(){                    //显示信息
            cout <<num<< "\t"<<name<< "\t"<<college<< "\t"<<classno<< "\n";
        }
        friend class Inreader;
        friend class ReaderBorrowBook;
    };
    
    class BorrowBook
    {                   //借阅的书类
    private:
    	string num;                //学号、姓名、书号、书名、借阅日期、应还日期、归还日期
    	string name;
    	string booknum;
    	string title;
    	Date borrowdate;
    	Date toreturndate;
        Date returndate;
    	BorrowBook(string num0="20150000",string name0="NoName",string booknum0="24416-5",
                string title0="数据结构",int bd=1,int bm=1,int by=2012,int td=1,int tm=5,int ty=2012,int rd=1,int rm=3,int ry=2012)
    			:borrowdate(bd,bm,by),toreturndate(td,tm,ty),returndate(rd,rm,ry)
    			{
                    num=num0;name=name0; booknum=booknum0;title=title0;  //初始化
    	}
        void setNum(string num0){num=num0;}  //设置学号
        void setName(string name0){name=name0;}//设置名字
        void setBookNum(string num0){booknum=num0;}//设置书号
        void setTitle(string title0){title=title0;}//书名
        void setBorrowdate(int bd,int bm,int by){Date d(bd,bm,by);borrowdate=d;}//借阅日期
        void setToreturndate(int td,int tm,int ty){Date d(td,tm,ty);toreturndate=d;}//
        void setReturndate(int rd,int rm,int ry){Date d(rd,rm,ry);returndate=d;}//归还日期
        string getNum(){return num;}   //获取学号
        string getName(){return name;}//获取名字
        string getBookNum(){return booknum;}//书号
        string getTitle(){return title;}//书名
        Date getBorrowdate(){return borrowdate;}//得到日期
        Date getReturndate(){return returndate;}
        Date getToreturndate(){return toreturndate;}
        void dispBorrowBook()     //显示值
        {
            cout <<num<< "\t"<<name<< "\t"<<booknum<< "\t"<<title<< "\t";
            borrowdate.disp();cout<<"\t";
            toreturndate.disp();cout<<"\t";
            returndate.disp();cout<< "\n";
        }
        friend class InBorrowBook;
        friend class ReaderBorrowBook;
    
    };
    void string2date(string pdates,int d[])
        {
            int k=0,by,bm,bd;
            while((pdates[k]<'0'||pdates[k]>'9')&&k<pdates.length())k++;
            by=0;
            for(;pdates[k]!='/'&&k<pdates.length();k++)
                by=by*10+pdates[k]-'0';
            k++;bm=0;
            for(;pdates[k]!='/'&&k<pdates.length();k++)
                bm=bm*10+pdates[k]-'0';
            if(pdates[k]=='/'){
              k++;bd=0;
              for(;k<pdates.length();k++)
                bd=bd*10+pdates[k]-'0';
                }
            else bd=1;
            d[0]=by;d[1]=bm;d[2]=bd;
        }
    class InBook
    {
        public:
        Book *book;    //book[n],很多本书
        int bookcount;     //记数
        void write2Bookfile()
        {
        string num,title,author,publisher,pdates;
        Date pdate;
        int i,bd,bm,by,ct;           //多余变量吧
        float price;
        ofstream outf( "d:\\book.txt", ios::out ) ;
        //写入的文件名应该与读出的文件名相同;调试时可以取不同的文件名,以免覆盖掉原文件
        if ( !outf )
          { cerr << "File could not be open." << endl ;  }
        outf<<"图书信息\n";
        for(int i=0;i<bookcount;i++)                 //写入图书信息
        {
            Date pd=book[i].getPublishdate();
            outf<<book[i].getNum()<< '\t'<<book[i].getTitle()<< '\t';
            outf<<book[i].getAuthor()<< '\t'<<book[i].getPublisher()<< '\t';
            outf<<pd.getYear()<<"/"<<pd.getMonth()<<"/"<<pd.getDay();
            outf<< '\t'<<book[i].getPrice()<< '\t'<<book[i].getHowmany()<< '\n' ;
        }
        outf.close() ;                 //关闭文件
        }
    int inbookFile( char * fileName, int delLine)    //获取图书信息
    {cout<<1<<endl;
        string num,title,author,publisher,pdates;
        Date pdate;
        int i,bd,bm,by,ct;
        float price;
        ifstream inf( fileName, ios::in ) ;
        if ( !inf )
          { cerr << "File could not be open." << endl ; return 1;   }
      char s[80];
      for ( i=1; i <= delLine; i++ )
          inf.getline( s, 80 ) ;
      i=0;
      while( !inf.eof() )//  { inf.getline( s, 80 ) ;    cout << s << endl ;  }
      {
          inf.getline( s, 80,'\t' ) ;//num=s;
          inf.getline( s, 80,'\t' ) ;title=s;
          inf.getline( s, 80,'\t' ) ;//author=s;
          inf.getline( s, 80,'\t' ) ;//publisher=s;
          inf.getline( s, 80,'\t' ) ;//pdates=s;
          inf>>price>>ct;
          if(title.length()>0)        i++;
          }
          bookcount=i;
          cout<<bookcount<<endl;
        inf.clear();
        inf.seekg(0,ios::beg);
        for ( i=1; i <= delLine; i++ )
          inf.getline( s, 80 ) ;
        book=new Book[bookcount+INC];
        for ( i=0; i <bookcount; i++ )
          {
          inf.getline( s, 80,'\t' ) ;num=s;
          inf.getline( s, 80,'\t' ) ;title=s;
          inf.getline( s, 80,'\t' ) ;author=s;
          inf.getline( s, 80,'\t' ) ;publisher=s;
          inf.getline( s, 80,'\t' ) ;pdates=s;
          inf>>price>>ct;//inf,getchar();
          if(title.length()>0){
            int d[3];
            if(num[0]==10)num=num.substr(1);
            string2date(pdates,d);
            by=d[0];bm=d[1];bd=d[2];
            book[i]=Book();
            book[i].setNum(num);
            book[i].setTitle(title);
            book[i].setAuthor(author);
            book[i].setPublisher(publisher);
            book[i].setPrice(price);
            book[i].setHowmany(ct);
            book[i].setPublishdate(bd,bm,by);
            }
          }
      inf.close() ;
      return bookcount;
      }
      friend class ReaderBorrowBook;
      int addbook(string num,string title,string author,string publisher,int bd,int bm,int by,float price,int ct)//添加图书信息
      {
            int i=bookcount;
            book[i]=Book();
            book[i].setNum(num);
            book[i].setTitle(title);
            book[i].setAuthor(author);
            book[i].setPublisher(publisher);
            book[i].setPrice(price);
            book[i].setHowmany(ct);
            book[i].setPublishdate(bd,bm,by);
            ++bookcount;
            return bookcount;
      }
        void searchbookbytitle(string title)         //按照书名查找
        {
            bool found=false;
            for(int i=0;i<bookcount;i++)
            if((book[i].getTitle()).find(title)!= string::npos) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                found=true;
                //return i;
                }
                if(!found)cout<<"book title:"<<title<<" not found."<<endl;
                //return -1;
        }
        int searchbookbytitlep(string title){    //精确查找
            for(int i=0;i<bookcount;i++)
            if(book[i].getTitle()==title) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                return i;
                }
                cout<<"book title:"<<title<<" not found."<<endl;
                return -1;
            }
        void searchbookbyauthor(string author)    //按照作者查找
        {
            bool found=false;
            for(int i=0;i<bookcount;i++)
            if((book[i].getAuthor()).find(author)!= string::npos) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                found=true;
                //return i;
                }
                if(!found)cout<<"book author:"<<author<<" not found."<<endl;
                //return -1;
        }
        int searchbookbyauthorp(string author) //精确查找
        {
            for(int i=0;i<bookcount;i++)
            if(book[i].getAuthor()==author) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                return i;
                }
                cout<<"book author:"<<author<<" not found."<<endl;
                return -1;
        }
        void searchbookbypub(string pub)    //按照出版社查找
        {
            bool found=false;
            for(int i=0;i<bookcount;i++)
            if((book[i].getPublisher()).find(pub)!= string::npos) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                found=true;
                //return i;
                }
            if(!found)cout<<"book publisher:"<<pub<<" not found."<<endl;
                //return -1;
        }
        int searchbookbypubp(string pub)
        {
            for(int i=0;i<bookcount;i++)
            if(book[i].getPublisher()==pub) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                return i;
                }
                return -1;
        }
        void searchbookbynum(string num)
        {//模糊查找包含num的串
            bool found=false;
            for(int i=0;i<bookcount;i++)
            if((book[i].getNum()).find(num)!= string::npos) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                found=true;
       //         return i;
                }
            if(!found)cout<<"book num:"<<num<<" not found."<<endl;
       //         return -1;
        }
        int searchbookbynump(string num)
        {//精确查找等于num的串
            for(int i=0;i<bookcount;i++)
            if((book[i].getNum())==num) {
                //cout<<book[i].getTitle()<< book[i].getTitle().find(title)<<endl;
                cout<<i<<"\t";
                book[i].dispABook();
                return i;
                }
                return -1;
        }
        void sortbookbynum()      //按照书号排序
        {
            for(int i=0;i<bookcount;i++){
                int k=i;
                for(int j=i+1;j<bookcount;j++)
                    if(book[j].getNum()<book[k].getNum()) k=j;
                //cout<<k<<" k&i "<<i<<" :"<<book[i].getNum()<<"---"<<book[k].getNum()<<endl;
                if(k!=i){
                    Book t=book[i];book[i]=book[k];book[k]=t;
                    }
                }
        }
        void sortbookbytitle()     //按照标题排序
        {
            for(int i=0;i<bookcount;i++)
            {
                int k=i;
                for(int j=i+1;j<bookcount;j++)
                    if(book[j].getTitle()<book[k].getTitle()) k=j;
                if(k!=i){
                    Book t=book[i];book[i]=book[k];book[k]=t;
                    }
            }
        }
        void changebookbynum(string oldnum,string newnum)     //按书号改信息
        {
            int k=searchbookbynump(oldnum);
            if(k>=0)    {
                book[k].setNum(newnum);
                cout<<"changebookbynum successed:"<<endl;
                book[k].dispABook();
            }
            else cout<<"changebook failed. No book of num="<<oldnum<<endl;
        }
        void deletebookbynum(string num)     //按书号删除书目
        {
            int k=searchbookbynump(num);
            if(k>=0)    {
                cout<<"Book to be deleted :"<<endl;
                book[k].dispABook();
                book[k]=book[bookcount-1];
                cout<<"deletebookbynum successed:"<<endl;
                bookcount--;
                //return bookcount;
            }
            else cout<<"deletebook  failed. No book of num="<<num<<endl;
        }
    
        void changebookbytitle(string oldtitle,string newtitle)
        {      //按标题修改书目
            int k=searchbookbytitlep(oldtitle);
            if(k>=0)    {
                book[k].setTitle(newtitle);
    
                cout<<"changebookbytitle successed:"<<endl;
                book[k].dispABook();
            }
            else cout<<"changebook failed. No book of title="<<oldtitle<<endl;
            }
    
        void deletebookbytitle(string title){        //按书名删除书
            int k=searchbookbytitlep(title);
            if(k>=0)    {
                cout<<"Book to be deleted :"<<endl;
                book[k].dispABook();
                book[k]=book[bookcount-1];
                cout<<"deletebookbytitle successed:"<<endl;
                bookcount--;
                //return bookcount;
            }
            else cout<<"deletebook  failed. No book of title="<<title<<endl;
    
            }
    };
    class InReader{
        public:
        Reader *reader;int readercount;  //reader[n],读者总数
        void write2Readerfile()     //写入读者信息
        {
            string a1,b1,c1,d1;
            ofstream fout( "d:\\reader.txt", ios::out );
            if ( !fout )
          { cerr << "File could not be open." << endl ;  }
        fout<<"读者信息\n";
        for(int i=0;i<readercount;i++)
        fout<<reader[i].getNum()<<'\t'<<reader[i].getName()<<'\t'<<reader[i].getCollege()<<'\t'<<reader[i].getClassno()<<endl;
        fout.close();
    
    
            }
    int inreaderFile( char * fileName, int delLine)   //获取读者信息
    {cout<<1<<endl;
        string num,name,college,classno;
        int i;
        ifstream inf( fileName, ios::in ) ;
      if ( !inf )
          { cerr << "File could not be open." << endl ; return 1;   }
      char s[80];
      for ( i=1; i <= delLine; i++ )
          inf.getline( s, 80 ) ;
      i=0;
      while( !inf.eof() )//  { inf.getline( s, 80 ) ;    cout << s << endl ;  }
      {
          inf.getline( s, 80,'\t' ) ;//num=s;
          inf.getline( s, 80,'\t' ) ;name=s;
          inf.getline( s, 80,'\t' ) ;//college=s;
          inf.getline( s, 80 ) ;//classno=s;
          if(name.length()>0)        i++;
          }
      readercount=i;
      cout<<readercount<<endl;
        inf.clear();
        inf.seekg(0,ios::beg);
        for ( i=1; i <= delLine; i++ )
          inf.getline( s, 80 ) ;
        reader=new Reader[readercount+INC];
        for ( i=0; i <readercount; i++ )
          {
          inf.getline( s, 80,'\t' ) ;num=s;
          inf.getline( s, 80,'\t' ) ;name=s;
          inf.getline( s, 80,'\t' ) ;college=s;
          inf.getline( s, 80 ) ;classno=s;
          if(name.length()>0){
              if(num[0]==10)num=num.substr(1);
            reader[i]=Reader();
            reader[i].setNum(num);
            reader[i].setName(name);
            reader[i].setCollege(college);
            reader[i].setClassno(classno);
            }
          }
      inf.close() ;
      return readercount;
    
      }
        int addreader(string num,string name,string college,string classno)   //添加读者
        {
            int i=readercount;
            reader[i]=Reader();
            reader[i].setNum(num);
            reader[i].setName(name);
            reader[i].setCollege(college);
            reader[i].setClassno(classno);
    
            ++readercount;
            return readercount;
        }
       void searchreaderbynum(string num){       //按学号查询读者
            bool found=false;
            for(int i=0;i<readercount;i++)
            if((reader[i].getNum()).find(num)!= string::npos) {
                cout<<i<<"\t";
                reader[i].dispAReader();
                found=true;
                //return i;
                }
            if(!found)cout<<"reader of num: "<<num<<" not found"<<endl;
                //return -1;
            }
       int searchreaderbynump(string num){     //按学号精确查询读者
            for(int i=0;i<readercount;i++)
            if(reader[i].getNum()==num) {
                cout<<i<<"\t";
                reader[i].dispAReader();
                return i;
                }
                return -1;
            }
        void searchreaderbyname(string nnname)     //按名字查询读者
        {
            for(int i=0;i<readercount;i++)
            if(reader[i].getName()==nnname)
            {
                cout<<i<<"\t";
                reader[i].dispAReader();
               // return i;
            }
           // return -1;
        }
        int searchreaderbynamep(string nnname){//模糊查找
            for(int i=0;i<readercount;i++)
            if(reader[i].getName()==nnname) {
                cout<<i<<"\t";
                reader[i].dispAReader();
                return i;
                }
                return -1;
        }
        void searchreaderbyzybj(string zzy)   //按学院查找
        {
            for(int i=0;i<readercount;i++)
            if(reader[i].getCollege()==zzy)
            {
                cout<<i<<"\t";
                reader[i].dispAReader();
              //  return i;
            }
              //  return -1;
    
        }
        int searchreaderbyzybjp(string zzy){   //精确查找
            for(int i=0;i<readercount;i++)
            if(reader[i].getCollege()==zzy) {
                cout<<i<<"\t";
                reader[i].dispAReader();
                return i;
                }
                return -1;
        }
        int searchreaderbyzybjjp(string bbj){  //按专业班级查找
            for(int i=0;i<readercount;i++)
            if(reader[i].getClassno()==bbj) {
                cout<<i<<"\t";
                reader[i].dispAReader();
                return i;
                }
                return -1;
        }
        void searchreaderbyzybjj(string bbj)   //模糊查找
        {
            for(int i=0;i<readercount;i++)
            if(reader[i].getClassno()==bbj)
            {
                cout<<i<<"\t";
                reader[i].dispAReader();
               // return i;
            }
               // return -1;
    
        }
        void deletereaderbyxuehao(string xxhh){        //按学号删除读者
            int k=searchreaderbynump(xxhh);
            if(k>=0)    {
                cout<<"reader to be deleted :"<<endl;
                reader[k].dispAReader();
                reader[k]=reader[readercount-1];
                cout<<"deletereaderbyxuehao successed:"<<endl;
                readercount--;
                //return bookcount;
            }
            else cout<<"deletereader  failed. No reader of xuehao="<<xxhh<<endl;
    
            }
            void deletereaderbyxingming(string xxh1h){        //按姓名删除读者
            int k=searchreaderbynamep(xxh1h);
            if(k>=0)    {
                cout<<"reader to be deleted :"<<endl;
                reader[k].dispAReader();
                reader[k]=reader[readercount-1];
                cout<<"deletereaderbyxingming successed:"<<endl;
                readercount--;
                //return bookcount;
            }
            else cout<<"deletereader  failed. No reader of xingming="<<xxh1h<<endl;
    
            }
            void sortreaderbyxuahao()   //按学号排序
        {
    
            for(int i=0;i<readercount;i++)
            {
                int k=i;
                for(int j=i+1;j<readercount;j++)
                    if(reader[j].getNum()<reader[k].getNum()) k=j;
                if(k!=i){
                    Reader t=reader[i];reader[i]=reader[k];reader[k]=t;
                    }
            }
    
    
        }
        void sortreaderbyxueyuan()   //按学院排序
        {
    
            for(int i=0;i<readercount;i++)
            {
                int k=i;
                for(int j=i+1;j<readercount;j++)
                    if(reader[j].getCollege()<reader[k].getCollege()) k=j;
                if(k!=i){
                    Reader t=reader[i];reader[i]=reader[k];reader[k]=t;
                    }
            }
    
    
        }
        void changereaderbyxuehao(string old,string news)    //修改学号
        {
             int k=searchreaderbynump(old);
            if(k>=0)    {
                reader[k].setNum(news);
                cout<<"changereaderbyxuehao successed:"<<endl;
               reader[k].dispAReader();
            }
            else cout<<"changereader failed. No reader of num="<<old<<endl;
        }
        void changereaderbyxingming(string old,string news)   //修改姓名
        {
             int k=searchreaderbynamep(old);
            if(k>=0)    {
                reader[k].setName(news);
                cout<<"changereaderbyxuehao successed:"<<endl;
               reader[k].dispAReader();
            }
            else cout<<"changereader failed. No reader of num="<<old<<endl;
        }
        void changereaderbyxueyuan(string old,string news)   //修改学院
        {
             int k=searchreaderbyzybjp(old);
            if(k>=0)    {
                reader[k].setCollege(news);
                cout<<"changereaderbyxuehao successed:"<<endl;
               reader[k].dispAReader();
            }
            else cout<<"changereader failed. No reader of num="<<old<<endl;
        }
    
        void changereaderbyzybj(string old,string news)   //修改专业班级
        {
             int k=searchreaderbyzybjjp(old);
            if(k>=0)    {
                reader[k].setClassno(news);
                cout<<"changereaderbyxuehao successed:"<<endl;
               reader[k].dispAReader();
            }
            else cout<<"changereader failed. No reader of num="<<old<<endl;
        }
      friend class ReaderBorrowBook;
    };
    class InBorrowBook{
        public:
        friend class ReaderBorrowBook;
        BorrowBook *borrowbook;int borrowbookcount;   //borrowbook[n],借书总数
        void searchborrowbookbyxuehao(string b)
        {
            for(int i=0;i<borrowbookcount;i++)
            if(borrowbook[i].getNum()==b)
            {
                cout<<i<<"\t";
                borrowbook[i].dispBorrowBook();
               // return i;
            }
               // return -1;
        }
        void searchborrowbookbysm(string b)     //按书名查找借阅书
        {
            for(int i=0;i<borrowbookcount;i++)
            if(borrowbook[i].getTitle()==b)
            {
                cout<<i<<"\t";
                borrowbook[i].dispBorrowBook();
               // return i;
            }
               // return -1;
        }
    
        void write2BorrowBookfile()   //写入借书文件
        {
    
            ofstream ffout( "d:\\borrowbook.txt", ios::out );
            if ( !ffout )
          { cerr << "File could not be open." << endl ;  }
        ffout<<"借阅信息\n";
        for(int i=0;i<borrowbookcount;i++)
        {
            Date bbb=borrowbook[i].getBorrowdate();
            Date ddd=borrowbook[i].getToreturndate();
            Date ccc=borrowbook[i].getReturndate();
            ffout<<borrowbook[i].getNum()<<'\t'<<borrowbook[i].getName()<<'\t'<<borrowbook[i].getBookNum()<<'\t'<<borrowbook[i].getTitle()<<'\t'<<bbb.getYear()<<"/"<<bbb.getMonth()<<"/"
    <<bbb.getDay()<<'\t'<<ddd.getYear()<<"/"<<ddd.getMonth()<<"/" <<ddd.getDay()<<'\t'<<ccc.getYear()<<"/"<<ccc.getMonth()<<"/" <<ccc.getDay()<<endl;   }
    
    
    
        }
    int inborrowbookFile( char * fileName, int delLine)   //获取借阅图书信息
    {cout<<1<<endl;
        string num,name,booknum,title;
        string borrowdates;
    	string toreturndates;
        string returndates;
        int i;
        ifstream inf( fileName, ios::in ) ;
      if ( !inf )
          { cerr << "File could not be open." << endl ; return 1;   }
      char s[80];
      for ( i=1; i <= delLine; i++ )
          inf.getline( s, 80 ) ;
      i=0;
      while( !inf.eof() )
      {
          inf.getline( s, 80,'\t') ;
          inf.getline( s, 80,'\t' ) ;
          inf.getline( s, 80,'\t' ) ;
          inf.getline( s, 80 ) ;
          if(strlen(s)>1)        i++;
          }
      borrowbookcount=i;
      cout<<borrowbookcount<<endl;
        inf.clear();
        inf.seekg(0,ios::beg);
        for ( i=1; i <= delLine; i++ )
          inf.getline( s, 80 ) ;
        borrowbook=new BorrowBook[borrowbookcount+INC];
        for ( i=0; i <borrowbookcount; i++ )
          {
          inf.getline( s, 80,'\t' ) ;num=s;
          inf.getline( s, 80,'\t' ) ;name=s;
          inf.getline( s, 80,'\t' ) ;booknum=s;
          inf.getline( s, 80,'\t' ) ;title=s;
          inf.getline( s, 80,'\t' ) ;borrowdates=s;
          inf.getline( s, 80,'\t' ) ;toreturndates=s;
          inf.getline( s, 80,'\n' ) ;returndates=s;
          if(name.length()>0){
              if(num[0]==10)num=num.substr(1);
            borrowbook[i]=BorrowBook();
            int d[3];
            string2date(borrowdates,d);
            int by=d[0],bm=d[1],bd=d[2];
            borrowbook[i].setBorrowdate(bd,bm,by);
            string2date(toreturndates,d);
            by=d[0];bm=d[1];bd=d[2];
            borrowbook[i].setToreturndate(bd,bm,by);
            string2date(returndates,d);
            by=d[0];bm=d[1];bd=d[2];
            borrowbook[i].setReturndate(bd,bm,by);
            borrowbook[i].setNum(num);
            borrowbook[i].setName(name);
            borrowbook[i].setBookNum(booknum);
            borrowbook[i].setTitle(title);
            }
          }
      inf.close() ;
    
      return borrowbookcount;
      }
      friend class ReaderBorrowBook;
      int searchbyreaderbook(string readernum,string booknum)     //按学号查询
      {
            for(int i=0;i<borrowbookcount;i++)
            if((borrowbook[i].getNum())==readernum&&(borrowbook[i].getBookNum())==booknum) {
                cout<<i<<"\t";
                borrowbook[i].dispBorrowBook();
                return i;
                }
                return -1;
    
      }
    };
    class ReaderBorrowBook{
    
        InBook bk;   //声明三个类
        InReader rd;
        InBorrowBook bb;
        public:
        void write2file(){
            bk.write2Bookfile();     //写入文件保存信息
            rd.write2Readerfile();
            bb.write2BorrowBookfile();
    
            }
        void init(){                                 //打开三个文件
            bk.inbookFile( "d:\\book.txt", 1);
            rd.inreaderFile( "d:\\reader.txt", 1);
            bb.inborrowbookFile( "d:\\borrowbook.txt", 1);
            }
        void dispBook(){                     //显示书信息
            for ( int i=0; i <bk.bookcount; i++ )
                {cout <<i<<":";
                bk.book[i].dispABook();}
            }
        void dispReader(){                    //显示读者信息
            for ( int i=0; i <rd.readercount; i++ )
                {cout <<i<<":";rd.reader[i].dispAReader();}
            }
        void dispBorrowbook(){                   //借书信息查询
            for ( int i=0; i <bb.borrowbookcount; i++ )
                {cout <<i<<":";bb.borrowbook[i].dispBorrowBook();}
              }
        void dispCount(){                         //总数显示
            cout<<bk.bookcount<<endl;cout<<rd.readercount<<endl;cout<<bb.borrowbookcount<<endl;
            }
        void addbook()    //添加书
        {
    
            string num,title,author,publisher;
            char num0[80],tit[80],auth[80],pub[80];
            int pd,pm,py,howmany;
            float price;
            Date publishdate;
            cout<<"书号、书名、作者、出版社、出版日期(yyyy mm dd)、定价、存馆数量"<<endl;
    
            string num1="24416-5",title0="数据结构",author0="王红梅,胡明,王涛",pub0="清华大学出版社";
            int pd0=1,pm0=1,py0=2012;
            float price0=29.0;
            int howmany0=10;
            //bookcount=
            cin>>num1>>title0>>author0>>pub0>>pd0>>pm0>>py0>>price0>>howmany0;
    
            bk.addbook(num1,title0,author0,pub0,pd0,pm0,py0,price0,howmany0);
            bk.write2Bookfile();
            int i=bk.bookcount-1;
            cout <<i<<":";
            bk.book[i].dispABook();
        }
        void addreader(){                         //添加读者
            string num,name,college,classno;
            char num0[80],nam[80],coll[80],clas[80];
            cout<<"学号\t姓名\t学院\t专业班级:"<<endl;
    
            string num1="20151000",name0="王涛",college0="computer",class0="network class 1";
            cin>>num1>>name0>>college0>>class0;
            rd.addreader(num1,name0,college0,class0);
            rd.write2Readerfile();
            int i=rd.readercount-1;
            cout <<i<<":";
            rd.reader[i].dispAReader();
            }
        void searchBook(){                         //查书
            cout<<"2.图书信息查询:分别按书名, 按作者名, 按出版社进行查询。"<<endl;
            char tit[80];
            string title="数据结构",author="胡明",pub="机械工业";
            int i,j,k,select;
            while(1){
                cout<<"图书信息查询:"<<endl;
                cout<<"1.按书名查询"<<endl;
                cout<<"2.按作者名查询"<<endl;
                cout<<"3.按出版社查询"<<endl;
                cout<<"0. return"<<endl;
                cin>>select;
                cin.get();
                switch(select){
                    case 1:
                        cout<<"书名:";
                        getline(cin,title,'\n');
                        bk.searchbookbytitle(title);
                        break;
                    case 2:
                        cout<<"作者名:";
                        getline(cin,author,'\n');
                        bk.searchbookbyauthor(author);
                        break;
                    case 3:
                        cout<<"出版社:";
                        getline(cin,pub,'\n');
                        bk.searchbookbypub(pub);break;
                    case 0:return;
                }
            }
            }
        void sortbook(){           //排序
            int select;
            cout<<"3.图书信息排序:按书号、书名等按升序进行排序。"<<endl;
            cout<<"图书信息排序:"<<endl;
            cout<<"1.按书号排序"<<endl;
            cout<<"2.按书名排序"<<endl;
            cout<<"0. return"<<endl;
            cin>>select;
            switch(select){
                case 1:
                        cout<<"书号:";
                        bk.sortbookbynum();
                        dispBook();
                        break;
                case 2:
                        cout<<"书名:";
                        bk.sortbookbytitle();
                        dispBook();
                        break;
                case 0:return;
                }
            }
        void editbook(){                  //编辑书
            string oldtitle="VisualBasic 程序设计教程",newtitle="VisualBasic 程序设计教程-C",oldnum="40667",newnum="40667-C";
            int select;
            cout<<"4.图书信息的修改、删除:按书号或书名进行图书的修改和删除。"<<endl;
            while(1){
            cout<<"图书信息的修改、删除:"<<endl;
            cout<<"1.按书号修改"<<endl;
            cout<<"2.按书号删除"<<endl;
            cout<<"3.按书名修改"<<endl;
            cout<<"4.按书名删除"<<endl;
            cout<<"0. return"<<endl;
            cin>>select;
            cin.get();
            switch(select){
                case 1:
                        cout<<"old书号:";
                        getline(cin,oldnum,'\n');
                        cout<<"new书号:";
                        getline(cin,newnum,'\n');
                        cout<<"changebookbynum: "<<oldnum<<" to "<<newnum<<endl;
                        bk.changebookbynum(oldnum,newnum);
                        //dispBook();
                        break;
                case 2:
                        cout<<"delete书号:";
                        getline(cin,oldnum,'\n');
                        cout<<"delete书号:"<<oldnum<<endl;
                        bk.deletebookbynum(oldnum);
                        //dispBook();
                        break;
                case 3:
                        cout<<"old书名:";
                        getline(cin,oldtitle,'\n');
                        cout<<"new书名:";
                        getline(cin,newtitle,'\n');
                        cout<<"changebookbytitle: "<<oldtitle<<" to "<<newtitle<<endl;
                        bk.changebookbytitle(oldtitle,newtitle);
                        //dispBook();
                        break;
                case 4:
                        cout<<"delete书名:";
                        getline(cin,oldtitle,'\n');
                        cout<<"deletebookbytitle: "<<oldtitle<<endl;
                        bk.deletebookbytitle(oldtitle);
                        //dispBook();
                        break;
                case 0:
                          bk.write2Bookfile();
                          cout<<"修改成功"<<endl;
                return;
                }
            }
        }
        void readerborrowabook(){                       //借阅
            cout<<"9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,"<<endl;
            string rdnum="20061709",booknum="33071",name,title;
            int select,rdpos,bookpos,y,m,d;
            while(1){
                cout<<"图书借阅:"<<endl;
                cout<<"1.借书"<<endl;
                cout<<"0.return"<<endl;
                cin>>select;
                cin.get();
                if(select==0)return;
                cout<<"borrow学号:";
                getline(cin,rdnum,'\n');
                cout<<"borrow书号:";
                getline(cin,booknum,'\n');
                bookpos=bk.searchbookbynump(booknum);
                rdpos=rd.searchreaderbynump(rdnum);
                if(bookpos>0&&rdpos>0){
                    int hm=bk.book[bookpos].getHowmany();
                    if(hm>0){
                        name=rd.reader[rdpos].getName();
                        title=bk.book[bookpos].getTitle();
                        bk.book[bookpos].setHowmany(hm-1); //修改图书信息表中的存馆数量
                        bb.borrowbook[bb.borrowbookcount].setNum(rdnum);
                        bb.borrowbook[bb.borrowbookcount].setBookNum(booknum);
                        bb.borrowbook[bb.borrowbookcount].setName(name);
                        bb.borrowbook[bb.borrowbookcount].setTitle(title);
    
                        SYSTEMTIME ct;
                        GetLocalTime(&ct);//取系统时间,如果用GetSystemTime(&ct);那么获取的是格林尼治标准时间
                        y=ct.wYear;
                        m=ct.wMonth;
                        d=ct.wDay;
                        Date toret=Date(d,m,y)+60;
                        bb.borrowbook[bb.borrowbookcount].setBorrowdate(d,m,y);
                        bb.borrowbook[bb.borrowbookcount].setToreturndate(toret.getDay(),toret.getMonth(),toret.getYear());
                        bb.borrowbook[bb.borrowbookcount].setReturndate(1,1,1);
                        bb.borrowbookcount++;
                        }
                    else cout<<booknum<<" 存馆数量=0"<<". can't be borrowed. "<<endl;
                    }
                else{
                    if(bookpos<0)cout<<"No book "<<booknum<<". can't borrow!"<<endl;
                    if(rdpos<0)cout<<"No reader "<<rdnum<<". can't borrow!"<<endl;
                }
            }
        }
        void readerreturnabook(){   //归还
            cout<<"10.图书归还:输入学号+书名,修改图书信息表中的存馆数量,图书借阅表中记录该同学的归还日期。"<<endl;
            char tit[80];
            string rdnum="20061709",booknum="33071",name,title;
            int selectttt,rdpos,bookpos,y,m,d;
            while(1){
                cout<<"图书归还:"<<endl;
                cout<<"1.还书"<<endl;
                cout<<"0.return"<<endl;
                cin>>selectttt;
                cin.get();
                if(selectttt==0) {return;}
                cout<<"return学号:"<<endl;
                getline(cin,rdnum,'\n');
    
                cout<<"return书号:";
                getline(cin,booknum,'\n');
    
                bookpos=bk.searchbookbynump(booknum);
                rdpos=rd.searchreaderbynump(rdnum);
                int k;
                k=bb.searchbyreaderbook(rdnum,booknum);
                if(k>=0){
                if(bookpos>0&&rdpos>0){
                        bk.book[bookpos].setHowmany(bk.book[bookpos].getHowmany()+1);
                        SYSTEMTIME ct;
                        GetLocalTime(&ct);//取系统时间
                        y=ct.wYear;
                        m=ct.wMonth;
                        d=ct.wDay;
                        bb.borrowbook[k].setReturndate(d,m,y);
                    }
    
                else{
                    if(bookpos<0)cout<<"No book "<<booknum<<". can't return!"<<endl;
                    if(rdpos<0)cout<<"No reader "<<rdnum<<". can't return!"<<endl;
                }}
                else cout<<"No borrowbook "<<endl;
            }
            }
    
        void searchreader()
        {
            string xuehao ,xingming,zzy,bbj;
            cout<<"6.读者信息查询:分别按学号、姓名、班级等进行查询。"<<endl;
            int selectt;
            while(1){
            cout<<"读者信息查询:"<<endl;
            cout<<"1.按学号查询"<<endl;
            cout<<"2.按姓名查询"<<endl;
            cout<<"3. 按学院查询"<<endl;
            cout<<"4. 按专业班级查询"<<endl;
            cout<<"0. return"<<endl;
            cin>>selectt;
            cin.get();
            switch(selectt)
            {
                case 1: cout<<"学号:"<<endl;
                getline(cin,xuehao,'\n');
                cout<<1<<endl;
                rd.searchreaderbynum(xuehao);
                break;
                case 2:cout<<"姓名:"<<endl;
                getline(cin,xingming,'\n');
                rd.searchreaderbyname(xingming);
                break;
                case 3:cout<<"学院: "<<endl;
                getline(cin,zzy,'\n');
                rd.searchreaderbyzybj(zzy);
                break;
                case 4:cout<<"专业班级: "<<endl;
                getline(cin,bbj,'\n');
                rd.searchreaderbyzybjj(bbj);
                break;
                case 0: return;
    
            }
            }
    
    
    
        }
    
        void sortreader()
        {
            int selectt1;
            cout<<"7:读者信息排序:按学号、学院等按升序进行排序。"<<endl;
            cout<<"读者信息排序:"<<endl;
            cout<<"1.按学号排序"<<endl;
            cout<<"2.按学院排序"<<endl;
            cout<<"0. return"<<endl;
            cin>>selectt1;
            switch(selectt1){
                case 1:
                        cout<<"学号:";
                        rd.sortreaderbyxuahao();
                        dispReader();
                        break;
                case 2:
                        cout<<"学院:";
                        rd.sortreaderbyxueyuan();
                        dispReader();
                        break;
                case 0:return;
                }
            }
    void editreader()
    {
        string xh,xm,xy,bj,newxh,newxm,newxy,newbj;
    
        int select2;
        cout<<"8.学生信息的修改、删除:。"<<endl;
    
            while(1){
            cout<<"学生信息的修改、删除:"<<endl;
            cout<<"1.按学号修改"<<endl;
            cout<<"2.按学号删除"<<endl;
            cout<<"3.按姓名修改"<<endl;
            cout<<"4.按姓名删除"<<endl;
            cout<<"0. return"<<endl;
            cin>>select2;
            cin.get();
            switch(select2)
            {
                case 1:cout<<"要修改学生的学号为:"<<endl;
                cin>>xh;
                cout<<"请输入新学号"<<endl;
                cin>>newxh;
                rd.changereaderbyxuehao(xh,newxh);
                break;
                case 2:cout<<"要删除的学生学号为:"<<endl;
                cin>>xh;
                rd.deletereaderbyxuehao(xh);
                break;
                case 3:cout<<"修改的学生姓名为:"<<endl;
                cin>>xm;
                cout<<"请输入修改后的姓名:"<<endl;
                cin>>newxm;
                rd.changereaderbyxingming(xm,newxm);
                break;
                case 4:cout<<"要删除的学生姓名为:"<<endl;
                cin>>xm;
                rd.deletereaderbyxingming(xm);
                break;
                case 0: rd.write2Readerfile();
                cout<<"修改成功";
                return;
    
            }
    
    }
    }
        void searchreaderborrowbook()
        {
            int bz;
            string xxh,ssm;
            while(1)
            {cout<<"11.图书借阅查询:分别按学号、书名、学院等进行查询。"<<endl;
            cout<<"1.按学号查询"<<endl;
            cout<<"2.按书名查询"<<endl;
            cout<<"0.return"<<endl;
            cin>>bz;
            switch(bz)
        {
                case 1:cout<<"请输入学号"<<endl;
                cin>>xxh;
                bb.searchborrowbookbyxuehao(xxh);break;
                case 2:cout<<"请输入书名"<<endl;
                cin>>ssm;bb.searchborrowbookbysm(ssm);break;
                case 0:
                return;
    
            }
    
    
        }
        }
    };
    int main(){
        ReaderBorrowBook rbb;
        rbb.init();
        rbb.dispBook();
        rbb.dispReader();
        rbb.dispBorrowbook();
        rbb.dispCount();
        int select;
        while(1){
            cout<<"菜单选择功能:"<<endl;
            cout<<"1.图书信息添加功能:包括书号、书名、作者、出版社名称、存馆数量、定价等"<<endl;
            cout<<"2.图书信息查询:分别按书名, 按作者名, 按出版单位等进行查询。"<<endl;
            cout<<"3.图书信息排序:按书号、书名等按升序进行排序。"<<endl;
            cout<<"4.图书信息的修改、删除:按书号或书名进行图书的修改和删除。"<<endl;
            cout<<"5.读者信息添加功能:包括学号、姓名、学院、专业班级等。"<<endl;
            cout<<"6.读者信息查询:分别按学号、姓名、班级等进行查询。"<<endl;
            cout<<"7.读者信息排序:按学号、学院等按升序进行排序。"<<endl;
            cout<<"8.读者信息的修改、删除:按学号+姓名进行读者信息的修改和删除。"<<endl;
            cout<<"9.图书借阅:输入学号+书号,如果该书图书信息表中的存馆数量大于0,则可以借出,"<<endl;
            cout<<"借出相应数量后修改图书信息表中的存馆数量,在图书借阅表添加该同学的借阅。"<<endl;
            cout<<"10.图书归还:输入学号+书名,修改图书信息表中的存馆数量,在图书借阅表中记录该同学的归还时间。"<<endl;
            cout<<"11.图书借阅查询:分别按学号、书名、学院等进行查询。"<<endl;
            cout<<"0.  exit"<<endl;
            cin>>select;
            switch(select){
                case 1:rbb.addbook();    rbb.dispCount();break;
                case 2:rbb.searchBook();break;
                case 3:rbb.sortbook();break;
                case 4:rbb.editbook();break;
                case 5:rbb.addreader();    rbb.dispCount();break;
                case 6:rbb.searchreader();break;
                case 7:rbb.sortreader();break;
                case 8:rbb.editreader();break;
                case 9:rbb.readerborrowabook();break;
                case 10:rbb.readerreturnabook();break;
                case 11:rbb.searchreaderborrowbook();break;
                case 0:rbb.write2file();exit(0);
                }
            }
        return 0;
    }
    

    部分截图

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • python图书管理系统

    万次阅读 多人点赞 2019-05-12 12:09:59
    '''图书管理系统 1. 创建一个列表存储书籍信息,包括书名,作者名,价格 2. 创建一个列表存储用户信息,包括用户名,密码 3. 制作一个注册登录系统,登录后可以使用添加书籍,删除书籍, 修改书籍信息,查询单本书籍...

    以下三个文件需在同一目录下。json文件格式不能更改

    books-fxm.json

    [
        {
            "name": "图书管理",
            "author": "fxm",
            "price": "99999"
        },
        {
            "name": "完美世界",
            "author": "辰东",
            "price": "99"
        },
        {
            "name": "斗破苍穹",
            "author": "土豆",
            "price": "99"
        }
    ]
    

    users-fxm.json

    [
        {
            "name": "fxm",
            "password": "123456"
        }
    ]
    

    main.py

    #!/usr/bin/python3
    #  -*- coding: utf-8 -*-
    """
    图书管理系统
    1. 创建一个列表存储书籍信息,包括书名,作者名,价格
    2. 创建一个列表存储用户信息,包括用户名,密码
    3. 制作一个注册登录系统,登录后可以使用添加书籍,删除书籍,
    修改书籍信息,查询单本书籍信息,查询所有书籍信息等功能
    4. 图书信息、用户信息存入文件中 (新增)
    
    
    图书管理系统操作说明
    一、普通用户
        1.先注册
        2.登录到系统
        3.进行功能操作    (增、删、改、查书籍)
        4.退出系统
    二、管理者
        1.使用管理者账户登陆(fxm:123456)
        2.管理普通用户    (删、改、查用户)
        3.退出系统
    """
    
    import json
    import os
    
    # 本系统保存信息的文件名
    file_name_books = "books-fxm.json"
    file_name_users = "users-fxm.json"
    
    
    # 主菜单
    def menu():
        print('*' * 40)
        print('*' * 10, '欢迎来到图书管理系统 1.0 ')
        print('*' * 40)
        print('请选择:')
        print("1: 注册新用户:")
        print("2. 已有账户,登陆:")
        print("3. 退出本系统")
    
    
    # 用户小屋(功能页面)
    def user_menu(self):
        print('*' * 40)
        print('欢迎%s!   来到图书小屋' % self)
        print('请选择您所需的功能:')
        print('1. 添加书籍')
        print('2. 删除书籍')
        print('3. 修改书籍信息')
        print('4. 查询单本书籍信息')
        print('5. 查询所有书籍信息')
        print('6. 退出您的图书小屋')
    
    
    # 管理者页面
    def manger():
        print('*' * 40)
        print('欢迎本系统管理者!!!')
        print('*' * 40)
        print('请选择您所需的功能:')
        print('1. 删除一个用户')
        print('2. 修改用户密码')
        print('3. 查看一个用户信息')
        print('4. 查看全部用户信息')
        print('5. 退出管理者页面')
    
    
    # 删除用户
    def del_user():
        user_name = input('请输入要删除的用户名:')
        count = 0
        index = 0
        for i in users:
            if user_name == i['name']:
                count = 1
                del users[index]
                print('删除成功!!!')
            index += 1
        if count == 0:
            print('查无此人!!!')
    
    
    # 修改用户
    def edit_user():
        user_name = input('请输入要修改密码的用户名:')
        count = 0
        index = 0
        for i in users:
            if user_name == i['name']:
                count = 1
                del users[index]
                new_user_name = user_name
                new_user_password = input('请输入修改后的密码:')
                new_user = {'name': new_user_name, 'password': new_user_password}
                users.append(new_user)
                print('修改成功!!!')
            index += 1
        if count == 0:
            print('查无此人!!!')
    
    
    # 查看一个用户
    def look_user():
        user_name = input('请输入要查看的用户名:')
        count = 0
        print('用户名\t密码\t')
        for i in users:
            if user_name == i['name']:
                count = 1
                print('%s\t\t%s\t' % (i['name'], i['password']))
        if count == 0:
            print('查无此人!!!')
    
    
    # 查看全部用户
    def look_users():
        print('用户名\t密码\t')
        for i in users:
            print('%s\t\t%s\t' % (i['name'], i['password']))
    
    
    # 注册页面
    def sign_up():
        user_name = input("请输入您的用户名:")
        # 检验用户名是否重复
        for i in users:
            if user_name == i['name']:
                print("用户名已存在!!!")
                return
        user_password = input("请输入您的密码:")
        user = {'name': user_name, 'password': user_password}
        users.append(user)
        print("注册成功!!!")
    
    
    # 登陆页面
    def login():
        user_name = input("请输入您的用户名:")
        user_password = input("请输入您的密码:")
        count = 0
        for i in users:
            if user_name == i['name']:
                count = 1
                if user_password == i['password']:
                    print("登陆成功!!!")
                    return user_name
                else:
                    print("密码错误!!!")
                    print("请重试。")
                    login()
        if count == 0:
            print("用户名不存在!!!")
            print("请重试。")
            login()
    
    
    # 添加书籍
    def add_book():
        book_name = input('请输入要添加书籍的名字:')
        # 检验书籍名是否重复
        for i in books:
            if book_name == i['name']:
                print("该书已存在!!!")
                return
        book_author = input('请输入要添加书籍的作者:')
        book_price = input('请输入要添加书籍的价格:')
        book = {'name': book_name, 'author': book_author, 'price': book_price}
        books.append(book)
        print('添加成功!!!')
    
    
    # 删除书籍
    def del_book():
        book_name = input('请输入要删除书籍的名字:')
        count = 0
        index = 0
        for i in books:
            if book_name == i['name']:
                count = 1
                del books[index]
                print('删除成功!!!')
            index += 1
        if count == 0:
            print('查无此书!!!')
    
    
    # 修改书籍
    def edit_book():
        book_name = input('请输入要修改书籍的名字:')
        count = 0
        index = 0
        for i in books:
            if book_name == i['name']:
                count = 1
                del books[index]
                new_book_name = input('请输入修改后书籍的名字:')
                new_book_author = input('请输入修改后书籍的作者:')
                new_book_price = input('请输入修改后书籍的价格:')
                new_book = {'name': new_book_name, 'author': new_book_author, 'price': new_book_price}
                books.append(new_book)
                print('修改成功!!!')
            index += 1
        if count == 0:
            print('查无此书!!!')
    
    
    # 查看一本书籍
    def look_book():
        book_name = input('请输入要查看书籍的名字:')
        count = 0
        print('书名\t\t作者\t价格\t')
        for i in books:
            if book_name == i['name']:
                count = 1
                print('%s\t%s\t%s\t' % (i['name'], i['author'], i['price']))
        if count == 0:
            print('查无此书!!!')
    
    
    # 查看全部书籍
    def look_books():
        print('书名\t\t作者\t价格\t')
        for i in books:
            print('[%s]\t%s\t%s\t' % (i['name'], i['author'], i['price']))
    
    
    # 初始状态读取文件
    def get_init_data():
        if (not os.path.exists(file_name_users)) | (not os.path.exists(file_name_books)):
            raise print("缺少必要文件:", file_name_books, file_name_users)
        with open(file_name_books, 'r', encoding='utf-8') as f:
            books_json = json.load(f)
        with open(file_name_users, 'r', encoding='utf-8') as f:
            users_json = json.load(f)
        return books_json, users_json
    
    
    # 结束程序更新数据文件
    def set_init_data():
        with open(file_name_books, 'w', encoding='utf-8') as f:
            f.write(json.dumps(books, ensure_ascii=False, indent=4))
        with open(file_name_users, 'w', encoding='utf-8') as f:
            f.write(json.dumps(users, ensure_ascii=False, indent=4))
    
    
    # 用户与管理者
    def while_user(name):
        while name:  # 根据是否登陆成功,进入用户菜单
    
            if name == 'fxm':  # 判断是否为管理者
                manger()  # 管理者页面
                manger_n = input()
                if manger_n == '1':
                    del_user()  # 删除一个用户
                elif manger_n == '2':
                    edit_user()  # 修改用户密码
                elif manger_n == '3':
                    look_user()  # 查看一个用户信息
                elif manger_n == '4':
                    look_users()  # 查看全部用户信息
                elif manger_n == '5':
                    break  # 退出管理者页面
                else:
                    print("非法输入!!!")
                    print("请再次选择:")
    
            else:
                user_menu(name)  # 普通用户页面
                user_n = input()
                if user_n == '1':
                    add_book()  # 添加书籍
                elif user_n == '2':
                    del_book()  # 删除书籍
                elif user_n == '3':
                    edit_book()  # 修改书籍信息
                elif user_n == '4':
                    look_book()  # 查询单本书籍信息
                elif user_n == '5':
                    look_books()  # 查询所有书籍信息
                elif user_n == '6':
                    break  # 退出普通用户页面
                else:
                    print("非法输入!!!")
                    print("请再次选择:")
    
    
    # 主函数
    def main():
        # 循环菜单主页面
        while True:
            menu()  # 主菜单页面
            menu_n = input()
            if menu_n == '1':
                sign_up()
            elif menu_n == '2':
                # 循环用户菜单页面
                name = login()  # 用户登陆后返回值name
    
                while_user(name)  # 用户与管理者
    
            elif menu_n == '3':
                set_init_data()
                break
            else:
                print("非法输入!!!")
                print("请再次选择:")
    
    
    if __name__ == '__main__':
        # 初始信息读取
        books, users = get_init_data()
        # 调用主函数
        main()
    
    展开全文
  • 图书馆,作为文献的聚集地和展示平台,常常扮演着引领文化前进的角色,是每个大学不可或缺的基础设施,而图书管理系统则是一个图书馆能够正常运转的关键。本次课程设计使用C语言制作程序来实现图书的登记,删除,...

    C课程设计——图书管理系统

    1、题目意义

    图书馆,作为文献的聚集地和展示平台,常常扮演着引领文化前进的角色,是每个大学不可或缺的基础设施,而图书管理系统则是一个图书馆能够正常运转的关键。本次课程设计使用C语言制作程序来实现图书的登记,删除,查询,浏览以及读者的借阅,还书,会员登录,修改密码等功能。程序中涉及到数据链表和文件指针的操作,包括结构体数据定义,使用及文件的读写,定位,修改等。

    2、设计思想

    ①新建账号密码,然后通过二者的匹配登录系统,这样可以保证是本校同学才能使用,另外还可以修改密码。
    ②添加图书的基本信息,如 书号,书名,作者,出版社,类别,进库量;
    ③删除图书,通过图书的书名进行删除;
    ④图书查询,通过图书的书号,书名,作者或者类别进行检索;
    ⑤浏览图书的库存,将所有数目展示出来;
    ⑥借书登记,先判断是否有这本数,然后进行借书人学号,姓名,归还截止期限,借书书名进行登记
    ⑦还书情况查看。
    ⑧借阅情况查看。
    ⑨会员登录,通过数据文件中的已注册的账号密码来登录到图书管理系统。
    ⑩修改密码

    3.总设计框架图

    在这里插入图片描述

    4.代码展示

    在这里插入图片描述
    在这里插入图片描述

    #include <stdio.h>
    #include <stdlib.h>//其中包含system函数
    #include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
    #include <string.h>//定义字符数组
    #include <math.h>
    #define LEN sizeof(struct book)//有关图书信息的结构体
    #define LEN1 sizeof(struct reader)//有关读者信息的结构体
    #define LEN2 sizeof(struct land)//有关登录系统的结构体
    
    
    struct book//图书信息
    {
    	char num[20],nam[20],aut[20],pub[20],cat[20];
    	int  many;
    	float price;
    	struct book*next;
    };
    
    struct reader//读者借阅信息
    {
    	int jnum;
    	char jnam[20],time[20],tsnam[20];
    	struct reader *next;
    };
    struct land//登录信息
    {
    	int zhanghao;
    	char password[20];
    	struct land*next;
    };
    
    
    
    int tjzs();//统计library文本个数函数
    void xg(int,char[] );
    void mainmenu();//显示主菜单
    void tsmenu();//显示图书信息菜单
    void jmenu();//显示借阅信息菜单
    void lmenu();//显示登录菜单
    
    void main1();// 主菜单功能
    void tsmain();//图书菜单功能
    void cxts();//查询图书
    void zjts();//增加图书
    void scts();//删除图书
    void llts();//浏览图书
    
    void jmain();//读者借阅信息
    void js();//借书
    void hs();//还书
    void cxjs();//查询借书
    void lljs();// 浏览借书情况
    
    void land();//登录功能系统
    int xinjian(int,char[] );//创建账号密码
    void xgmm();//修改密码
    void lmain();//登录界面函数
    
    
    int tjzs()//统计图书文本个数
    {
    FILE *fp;
    int txcl=0,n;
    float tprice=0;
    char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'};
    fp=fopen("library.txt","r");//打开文件
    for (n=0;!feof(fp);n++)//逐个读文件
    fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
    n--;
    fclose(fp);//关闭文件
    return (n);//返回个数
    }
    
    
    int tjdzzs()//统计文读者本个数函数
    
    {
    FILE *fp;
    int zhenghao=0,n;
    char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
    fp=fopen("reader.txt","r");//打开文件
    for (n=0;!feof(fp);n++)//逐个读文件
    fscanf(fp,"%d%s%s%s ",&zhenghao,&mingzi,&riqi,&zname);
    n--;
    fclose(fp);//关闭文件
    return (n);//返回个数
    }
    
    
    int tjzs3()//统计账号密码文本个数
    {
    FILE *fp;
    int zhao=0,n;
    char mm[20]={'\0'};
    fp=fopen("land.txt","r");//打开文件
    for (n=0;!feof(fp);n++)//逐个读文件
    fscanf(fp,"%d %s",&zhao,mm);
    n--;
    fclose(fp);//关闭文件
    return (n);//返回个数
    }
    
    
    void mainmenu()//主菜单
    {
    system ("cls");
    
    printf("**************************************************");
    
    printf("\n\n 1.图书系统\n\n");
    
    printf("\n\n 2.借阅系统\n\n");
    
    printf("\n\n 3.退出系统\n\n");
    
    printf("\n\n 请按键选择,回车确定\n");
    
    printf("*************************************************\n");
    
    return ;
    }
    
    
    void tsmenu() //图书馆信息菜单
    {
    system ("cls");
    
    printf("****************************************************");
    
    printf("\n 1.增加图书\n\n");
    
    printf("\n 2.删除图书\n\n");
    
    printf("\n 3.查询图书\n\n");
    
    printf("\n 4.库存浏览\n\n");
    
    printf("\n 5.返回上一层\n\n");
    
    printf("\n 请按键选择,回车确定\n");
    
    printf("***************************************************\n");
    
    return ;
    
    }
    
    
    void main1()
    {
    	void tsmian();
    	void jmain();
    	char choose;
    	mainmenu();
    	scanf(" %c",&choose);
    	switch(choose)//功能函数
      {
    	  case'1':
    	    tsmain();
    	    break;
    	  case'2':
    	  	jmain();
    	  	break;
    	  case'3':
    	  	system("cls");
        getch();
      	exit(0);
      	system ("cls");
    	break;
      }
    }
    
    
    void tsmain()
    {
    	void zjts();
    	void scts();
    	void ctts();
    	void llts();
    	char choose;
    	tsmenu();
    	scanf(" %c",&choose);
    	for(;;)
    	{
    		switch(choose)
    	{
    	case'1':
    		zjts();
    		break;
    	case'2':
    		scts();
    		break;
    	case'3':
    		cxts();
    		break;
    	case'4':
    		llts();
    		break;
    	case'5':
    		main1();
    		break;
    	}
        }
    }
    
    
    void zjts()//增加图书
    {
    	FILE*fp;
    	char i;
    	int many=0;
        float price=0;
        char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
        system ("cls");
    
        if ((fp=fopen("library.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
    	{
          fp=fopen("library.txt","w");
          fclose(fp);
        }
    	fp=fopen("library.txt","a");
    	
    	printf("\n请按以下格式输入图书信息:\n书号 书名 作者 出版社 类别 进库量 单价");
    	
    	for(;i!=27;)//为了实现输入一次后按esc退出
    	{
    		printf("请输入:\n");
    		scanf("%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
    		fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
    	    printf("继续输入请按回车,结束输入请按Esc\n");
            i=getch();//暂停程序当i接收后继续下一条指令
            for (;i!=13&&i!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
            i=getch();
         }
    
    	fclose(fp);
        printf("\n保存成功,按任意键返回上一层!");
        getch();
    	tsmain();//返回上一层
    }
    
    void scts()//删除图书
    {
    	   struct book *head=NULL;
           struct book *p,*p1,*p2;
           int tmany=0,n=0,j,k;
           float tprice=0;
           char  tnam[20]={'\0'},taut[20]={'\0'},tcat[20]={'\0'},tpub[20]={'\0'},tnum[20]={'\0'};
    	   char jjnam[20]={'\0'};
    	   char i;
           FILE *fp;
           if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
               getch();
               tsmain();
           }
    
    	   else//实现删除的功能
    	   {
    	      system ("cls");
    	      printf("\n请输入你要删除的书名:");//输入删除图书书名
              scanf("%s",jjnam);
              printf("\n确认删除请回车,取消请按Esc\n");
              i=getch();
              for(;i!=13&&i!=27;)
              i=getch();
              if (i==27)
              tsmain();
    	      fp=fopen("library.txt","r");
    		 j=tjzs();
    
    	   for (k=0;k<j;k++)
           {
    	       fscanf(fp,"%s%s%s%s%s%d%f",tnum,tnam,taut,tpub,tcat,&tmany,&tprice);
               if (strcmp(jjnam,tnam))//比较名字,将不同名字的信息复制到链表
              {
    	          n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
    	            if (n==1)//建立链表
                    {
    		          p1=p2=(struct book*)malloc(LEN);
                      head=p1;
    				}
                    else
    			    {
    			      p2->next=p1;
    				  p2=p1;
                      p1=(struct book*)malloc(LEN);//新建链表
                    }
    
                    strcpy(p1->num,tnum);//复制书号
                    strcpy(p1->nam,tnam);//复制书名
                    strcpy(p1->aut,taut);//复制作者名字
                    strcpy(p1->pub,tpub);//复制出版社
                    strcpy(p1->cat,tcat);//复制类别
                    p1->many=tmany;//复制个数
                    p1->price=tprice;//复制单价
               }
           }
                 if (n==0)//如果图书只有一项且这一项刚好和要删除的相同
    			 {
    			 head=NULL;
    			 }
    			 else//建立链表的最后剩余一个储存空间,所以封底
    			 {
    			 p2->next=p1;
    			 p1->next=NULL;
    			 fclose(fp);
    			 }
        }
    
       fp=fopen("library.txt","w");//清空文件,只写打开,然后关闭
       fclose(fp);
       fp=fopen("library.txt","a");//追加文件
       p=head;
    
       for (;p!=NULL;)//把链表内容覆盖到文件
       {
       	   fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price);
       	   p=p->next;
       }
       fclose(fp);
       system ("cls");
       printf("\n删除成功 \n按任意键返回上一层\n");
       getch();//返回上一层
       tsmain();
    }
    
    
    void cxts()//查询图书
    {
    	   FILE *fp;
           int k=0,many=0,m=0,n=0;
    	   float price=0;
           char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
           char i;
           char chazhao[20]={'\0'};
           if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
      		   getch();
    		   tsmain();
           }
    	   system("cls");
           printf("请输入书号,书名,作者或类别查询:\n");
           scanf("%s",chazhao);
           system ("cls");
           m=tjzs();
    
    	   for (n=0;n<m;n++)
    	   {
    	    fscanf(fp,"%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
            if(!strcmp(chazhao,num)||!strcmp(chazhao,nam)||!strcmp(chazhao,aut)||!strcmp(chazhao,cat))
            {
            	if(k==0)
                {
    			  printf("查询结果:\n\n");
    			  printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t现存量\t单价\n");
                }
    			printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
                k++;
            }
           }
            if (k==0)//文件夹为空则输出无记录并返回上一层
            { system ("cls");
            printf("\n无符合记录!\n");
            getch();
            tsmain();
    		}
    		fclose(fp);//查询结束
    		getch();
    		tsmain();
    }
    
    
    void llts()//浏览图书
    {
    	FILE *fp;
    	int n=0;
           int k=0,m=0,many=0;
    	   float price=0;
           char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
      	   char i;
    	   if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
    		   getch();//返回
               tsmain();
    	   }
    	   n= tjzs();
           if (n==0)
          {
    	  system ("cls");
          printf("\n无任何记录!");
          }
    
    	     fp=fopen("library.txt","r");//打开只读文件
             system ("cls");
    	     printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t库存量\t单价\n");
      
    	   for (m=0;m<n;m++)//输出数据
    	     {
    	     fscanf(fp,"%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
    		 printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
    	 	}
    		fclose(fp);
            printf("\n按任意键返回\n");
            getch();
            tsmain();
    }
    
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`!~~~~~~~~~~~~~~~~~~~~~
    	
    void jmenu()//显示借书菜单
    {
    	system("cls");
    	printf("*****************************************************");
    	printf("\n\n 1.借书登记\n\n");
    	printf("\n\n 2.还书登记\n\n");
    	printf("\n\n 3.借阅情况查看\n\n");
    	printf("\n\n 4.查询借书\n\n");
        printf("\n\n 5.返回上一层\n\n");
    	printf("\n\n 请按键选择,回车确定\n");
    	printf("****************************************************");
    	return ;
    }
    
    
    void jmain()//借阅系统函数
    {
    	void js();
    	void hs();
    	void lljs();
    	void cxjs();
    	char choose;
    	jmenu();
    	scanf(" %c",&choose);
    	for(;;)
    	{
    		switch(choose)
    		{
    			case'1':
    			js();
    			break;
    			case'2':
    			hs();
    			break;
    			case'3':
    			lljs();
    			break;
    			case'4':
    			cxjs();
    			break;
    			case'5':
    			main1();
    			break;
    		}
    	}
    
    }
    
    
    
    void js()//借书函数
    {
    	FILE *fp,*fp3;
    	struct book *head=NULL;
        struct book *p,*p1,*p2;
        int i,loop,k,n=0,flag=0,s=0;
    	int jnum=0;
    	int many=0;
    	float tprice=0;
    	char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'},
             ttname[20]={'\0'},mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
    	char hit=0;
    
    	system("cls");
    	if((fp=fopen("library.txt","r"))==NULL)
    	{
    		system("cls");
    		printf("\n 图书馆无库存!按任意键退出!");
    		getch();
    		exit(0);
    	}
    	else
    	{
            printf("\n请输入借阅书名:\n请输入:");
    		scanf("%s",zname);
        k= tjzs();//统计图书馆文件个数
    
    	for (i=0;i<k;i++)//先将图书信息建立链表,更改库存
        	{
        		fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&many,&tprice);
    			n++;
    			if(n==1)
    			{
    				p1=p2=(struct book*)malloc(LEN);
    				head=p1;
    			}
    		    else
               	{
                    p2->next=p1;
                    p2=p1;
                    p1=(struct book*)malloc(LEN);
    
                }
    			strcpy(p1->num,tshuhao);//复制书号
    			strcpy(p1->nam,tname);//复制书名
    			strcpy(p1->aut,tauthor);//复制作者
    			strcpy(p1->pub,tchuban);//复制出版社
    			strcpy(p1->cat,tkind);//复制类别
    			p1->many=many;//复制现存量
    			p1->price=tprice;//复制单价
            }
            if(n==0)
     		head=NULL;
    		else
    		 {
    		 	p2->next=p1;
    		 	p1->next=NULL;
    		 	fclose(fp);
    		 }
    
    	}
    	p=head;
    	
    	for (;p!=NULL;)
    	{
    		if(!(strcmp(p->nam,zname)))//判断要借书的是否存在,标记等于1,存在库存减一
    		{
    			
                flag=1;
    		 	loop=p->many;
    		 	(p->many)--;
    		 }
    			p=p->next;
      }
    	if(flag&&(loop>0))//存在被借的图书且现存量大于0,把库存量变化后的链表存入文件
        {
    
    		fp=fopen("library.txt","w");
        	fclose(fp);
        	fp=fopen("library.txt","a");
        	p=head;
    
    		for(;p !=NULL;)
        	{
        		fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price);
       		   	p=p->next;
    		}
    		free(p);
    		fclose(fp);
    
    		if ((fp3=fopen("reader.txt","r"))==NULL)//建读者文件夹存入借书信息
            {
    		    fp3=fopen("reader.txt","w");//打开只读文件
                fclose(fp3);
            }
    		fp3=fopen("reader.txt","a");
    
    		printf("\n请按以下格式输入读者信息:\n 证号 姓名 借书日期 借书书名\n请输入:");//录入读者信息
     		scanf("%d %s %s %s",&jnum,mingzi,riqi,zname);
    		fprintf(fp3,"\n%-8d%-23s%-18s%-10s\n",jnum,mingzi,riqi,zname);
    	    fclose(fp3);
            printf("借书成功!请两个月内归还!!!按任意键返回\n");
    		getch();//返回
    		jmain();//调用借阅系统
       }
    	else
        {
        	if(flag!=0)
            printf("此书已被借完!按任意键返回!");//否则输出此书已被借完
    		else
    		printf("查找无此书!按任意键返回");
    	}
    	    getch();//返回
            jmain();//调用借阅系统
    
    }
    
    
    void hs ()//还书函数
    {
     	 FILE *fp,*fp3;
    	 struct reader *head=NULL;
    	 struct reader *p,*p1,*p2;
    	 struct book *lhead1=NULL;
    	 struct book *zp1,*lp1,*lp2;
    	 int txcl=0,i;
    	 float tprice=0;
    	 char tname[20]={'\0'},tauthor[20]={'\0'},tkind[20]={'\0'},
    	 tchuban[20]={'\0'},ttname[20]={'\0'},tshuhao[20]={'\0'};
    	 int ttzhenghao=0,tzhenghao=0,n=0,k=0,t=0,flag=0;
    	 char tmingzi[20]={'\0'},triqi[20]={'\0'},tzname[20]={'\0'},ttzname[20]={'\0'};
    	 char hitkey=0;
    	 system ("cls");
    {
     	 if ((fp=fopen("reader.txt","r"))==NULL)//不存在读者文件,则输出不能还书
    	  {
             system ("cls");
    		 printf("\n 不存在借书者!按任意键退出!");
    		 getch();
    		 system("cls");
    		 jmain();
          }
    
    	  else
    	  {{
    	     printf("\n请输入读者证号和书名:\n请输入:");
    		 scanf("%d %s",&ttzhenghao,ttzname);//输入还书证号和书名
    		 k=tjdzzs();//获取读者文件夹信息个数
    		 for (i=0;i<k;i++)//读取读者文件夹信息
               {
    			fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);
    			if((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname))//如果证号书名存在,则标记为1
    			flag=1;
    			}
          fclose(fp);
    	  fp=fopen("reader.txt","r");//打开读者文件,删除借书信息
    	  if(flag)
    	  {
    	  for (i=0;i<k;i++)//将读者文件复制到链表
    	  {
    	  fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);//读取文件信息
    	  if(!((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname)))
    	  {
              n++;
    		  if (n==1)
    		  {
    		      p1=p2=(struct reader*)malloc(LEN1);//新建链表
    			  head=p1;
    		  }
    		  else
    		  {
    		        p2->next=p1;
    				p2=p1;
    				p1=(struct reader*)malloc(LEN1);//新建链表
              }
    		  p1->jnum=tzhenghao;//复制证号
    		  strcpy(p1->jnam,tmingzi);//复制读者名字
    		  strcpy(p1->time,triqi);//复制日
    		  strcpy(p1->tsnam,tzname);//复制书名
    		  }}
    		  if (n==0)
    		  head=NULL;
    		  else
    		  {
    		       p2->next=p1;
    			   p1->next=NULL;
    			   fclose(fp);
    	      }
    		  fp=fopen("reader.txt","w");//清空读者文件
    		  fclose(fp);
    		  fp=fopen("reader.txt","a");//追加信息
    		  p=head;
    		  for (;p!=NULL;)//把链表内容覆盖读者文件
    		  {
    		      fprintf(fp,"\n%-8d%-23s%-18s%-10s\n",p->jnum,p->jnam,p->time,p->tsnam);
    			  p=p->next;
    	      }
    		  free(p);
    		  fclose(fp);
    		  }}}}
    
    		  if(flag)//标记为1,即还书时更改库存
    		  {{
    		  {
    		      printf("确认还书请按回车!");
    			  for (;hitkey!=13&&hitkey!=27;)
    			  hitkey=getch();
    			  if (hitkey==13)
    			  printf("成功!按任意键返回!");
    			  n=0;flag=0;
    			  fp3=fopen("library.txt","r");//打开图书馆文件
    			  k=tjzs();//获取图书馆文件个数
    			  for (i=0;i<k;i++)//将图书馆文件复制到链表
    			  {
    			       fscanf(fp3,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);//读取信息
    				   n++;
    				   if (n==1)
    				   {
    				       lp1=lp2=(struct book*)malloc(LEN);//新建链表
    					   lhead1=lp1;
    				   }
    				   else
    				   {
    				       lp2->next=lp1;
    					   lp2=lp1;
    					   lp1=(struct book*)malloc(LEN);//新建链表
    				   }
    				   strcpy(lp1->num,tshuhao);//复制书号
    				   strcpy(lp1->nam,tname);//复制书名
    				   strcpy(lp1->aut,tauthor);//复制作者
    				   strcpy(lp1->pub,tchuban);//复制出版社
    				   strcpy(lp1->cat,tkind);//复制类别
    				   lp1->many=txcl; //复制现存量
    				   lp1->price=tprice;//复制单价
    				   }
    				   if (n==0)
    				   {
     	  		          lhead1=NULL;
    				   }
    				   else
    				   {
    				   	   lp2->next=lp1;
    				   	   lp1->next=NULL;
    				   	   fclose(fp3);
    				   }}}
    				   zp1=lhead1;
    				   for (;zp1!=NULL;)
    				   {
    				        if(!(strcmp(zp1->nam,ttzname)))//寻找书名相同
    						++(zp1->many);//现存量加1
    						zp1=zp1->next;
    					}
    					fp3=fopen("library.txt","w");//清空图书馆文件
    					fclose(fp);
    					fp3=fopen("library.txt","a");//追加信息
    					zp1=lhead1;
    					for (;zp1!=NULL;)//把链表内容覆盖图书馆文件
    					{
                             fprintf(fp3,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",
            				 zp1->num,zp1->nam,zp1->aut,zp1->pub,zp1->cat,zp1->many,zp1->price);
    						 zp1=zp1->next;
    				    }
    					fclose(fp3);
    					getch();//返回
    					jmain();//调用借阅系统
    					}
    					else
    					printf("不存在此信息!按任意键返回!");
    					getch();//返回
    					jmain();//调用借阅系统
    }
    
    
    void lljs()//显示借书情况函数
    
    {
        FILE *fp;
        int zhenghao=0,xcl=0,n=0,i=0,j=0;
        char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
    	if ((fp=fopen("reader.txt","r"))==NULL)//打开读者文件夹
        {
            system ("cls");
            printf("\n记录文件不存在!按任意键返回");
    	    getch();
    	    jmain();
        }
        n=tjdzzs();
        if (n==0)
    	{ system ("cls");
    	printf("\n无任何记录!");
    	}
    	fp=fopen("reader.txt","r");
    	system ("cls");
    	printf("\n证号\t读者姓名\t\t借书日期\t书名\n");
    	for (;!feof(fp);)//输出文件信息
    	{
    	fscanf(fp,"%d%s%s%s\n ",&zhenghao,mingzi,riqi,zname);
    	printf("\n%-8d%-23s%-18s%-10s\n", zhenghao,mingzi,riqi,zname);
    	}
    	fclose(fp);
    	printf("\n按任意键返回\n");
    	getch();//返回
    	jmain();//调用借阅系统
    }
    
    					
    void cxjs()//查询借书
    {
    	   FILE *fp;
           int jsnum=0,k=0,many=0,m=0,n=0;
    
           char  jsnam[20]={'\0'},jstime[20]={'\0'},tsnam[20]={'\0'};
           char i;
           char chazhao[20]={'\0'};
           if ((fp=fopen("reader.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
      		   getch();
    		   jmain();
           }
    	   system("cls");
           printf("请输入证号或姓名查询:\n");
           scanf("%s",chazhao);
           system ("cls");
    	   m=tjzs();
    	   for (n=0;n<m;n++)
    	   {
    	    fscanf(fp,"%d%s%s%s",&jsnum,jsnam,jstime,tsnam);
            if(!strcmp(chazhao,jsnam)||(('chazhao'-'0')==jsnum))
            {
            	if(k==0)
                {
    			  printf("查询结果:\n\n");
    			  printf("\n证号\t读者姓名\t\t借书日期\t书名\n");
                }
    			printf("\n%-8d%-23s%-18s%-10s\n",jsnum,jsnam,jstime,tsnam);
                k++;
             }
           }
    	    if (k==0)//文件夹为空则输出无记录并返回上一层
            { system ("cls");
            printf("\n无符合记录!\n");
            getch();
            jmain();
    		}
           fclose(fp);//查询结束
    		getch();
    		jmain();
    }
    
    
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
    
    void lmenu()//显示登录菜单
    {
    
    
    printf("\n\n\t    欢迎使用会员登录系统\n\n");
    printf("**********************************************");
    printf("\n\n\t\t1.登录系统\n\n");
    printf("\n\n\t\t2.创建账号\n\n");
    printf("\n\n\t\t3.修改密码\n\n");
    printf("\n\n\t\t4.退出系统\n\n");
    printf("\n\n\t    请按键选择,回车确定\n");
    printf("**********************************************");
    return ;
    }
    
    
    void lmain()//登录功能函数
    {
    	void land();
    	void xinjian();
    	char choose;
    	lmenu();
    	scanf(" %c",&choose);
    	switch(choose)//功能函数
      {
    	  case'1':
    	    land();
    	    break;
    	  case'2':
    	  	xinjian();
    	  	break;
    	  	case'3':
    	  	xgmm();
    	  	break;
    	  case'4':
    	  	system("cls");
        getch();
      	exit(0);
      	system ("cls");
    	break;
      }
    }
    
    
    
    void xinjian()//新建账户密码
    {
    	FILE *fp;
    	int zhanghao;
    	char password[20],password1[20];
    	char hit=0;
    	if ((fp=fopen("land.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
    	{
          fp=fopen("land.txt","w");
          fclose(fp);
        }
        system("cls");
    	fp=fopen("land.txt","a");
    	for(;;)//输入两次密码确认,两次相同才能确认
    	{
    	   printf("\n请按以下格式输入账户:\n学号 密码\n");
    	   printf("请输入:");
    	   scanf("%d %s",&zhanghao,password);
           printf("再次输入密码:\n");
    	   scanf("%s",password1);
    	   if(strcmp(password,password1)==0)
    	   {
    	       fprintf(fp,"%d %s\n",zhanghao,password);
    		   break;
           }
           else
    	   {
    	       printf("两次输入密码不一致,继续创建按回车,退出按ESC");
    	       hit=getch();
    		   if(hit=27)
    		   system("cls");
    		   lmain();
    		         }
       }
       fclose(fp);
       printf("创建成功,按任意键返回");
       getch();
       system("cls");
       lmain();
    }
    
    
    
    int match(int m,char a[20])//匹配数据库中的账号密码
    {
    	FILE*fp;
    	int n=0,i=0;
    	int zhanghao;
    	char password[20];
    
    	if ((fp=fopen("land.txt","r"))==NULL)//不存在读者文件
    	  {
             system ("cls");
    		 printf("\n 还未存在用户!请新建账户");
    		 getch();
    	 	system("cls");
    		lmain();
    	
          }
    
    
            for(;!feof(fp);)
          {
            fscanf(fp,"%d%s",&zhanghao,password);
            if(m==zhanghao)
            {
            	if(strcmp(a,password)==0)
    			return 1;
    			else
    			{
    			return -1;
    		   }
    	    }
    	  }
    	  return 0;
     }
    
    void land()//输入账户密码的登录函数
    {
    	int zhanghao;
    	char password[20];
    	int i=2,j,k,n;
    	char hit=0;
    	system("cls");
    	do
    	{
    	   printf("\n请输入账号:\n");
           scanf("%d",&zhanghao);
           printf("确认输入请安回车,重新输入请按ECS");
           hit=getch();//暂停程序当i接收后继续下一条指令
           for (;hit!=13&&hit!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
           {
    	        hit=getch();
    	   }
        }
        while(hit==27);
    	 printf("\n请输入密码:\n");
    	 scanf("%s",password);
         i=match(zhanghao,password);
         if(i==1)
    	 {
           printf("登陆成功!按任意键继续");
    	   getch();
    	   main1();
    	 }
    	 else
    	 {
    	 	if(i==-1)
    		 {
    		 printf("密码错误!");
    		 getch();
             land();
    		 }
    		 if(i==0)
    		 printf("不存在此用户");
    		 getch();
    		 system("cls");
    		 lmain();
    	 }
    }
    
    void xg(int z,char m[20])//修改函数
    {
    	FILE *fp;
    	int zhanghao1,n,j,k;
    	char mima1[20];
    	struct land *head,*p,*p1,*p2;
    
    	 fp=fopen("land.txt","r");
    	   j =tjzs3();
    
    	   for (k=0;k<=j;k++)
           {
    	       fscanf(fp,"%d %s",&zhanghao1,mima1);
               if (z!=zhanghao1)//比较名字,将不同名字的信息复制到链表
              {
    	            n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
    	            if (n==1)//建立链表
                    {
    		          p1=p2=(struct land*)malloc(LEN2);
                      head=p1;
    				}
                    else
    			    {
    			      p2->next=p1;
    				  p2=p1;
                      p1=(struct land*)malloc(LEN2);//新建链表
                    }
     				p1->zhanghao=zhanghao1;
                    strcpy(p1->password,mima1);//复制账号密码
              }
           }
            if (n==0)
    			 {
    			 head=NULL;
    			 }
    			 else//建立链表的最后剩余一个储存空间,所以封底
    			 {
    			 p2->next=p1;
    			 p1->next=NULL;
    			 fclose(fp);
    			 }
    			  fp=fopen("land.txt","w");//清空文件,只写打开,然后关闭
                  fclose(fp);
                  fp=fopen("land.txt","a");//追加文件
                  p=head;
                for (;p!=NULL;)//把链表内容覆盖到文件
       			{
       	   		 	fprintf(fp,"%d %s%\n",p->zhanghao,p->password);
       	   			p=p->next;
    	        }
    	        fprintf(fp,"%d %s\n",z,m);
                fclose(fp);
                 system ("cls");
    
    }
    
    
    
    void xgmm()//修改密码
    {
    
    	   FILE *fp;
           int zh=0,k=0,many=0,m=0,n=0;
           int chazhao,hit;
           char mima[20]={'\0'},password1[20]={'\0'};
           char  mm[20]={'\0'};
           char i;
    
           if ((fp=fopen("land.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
      		   getch();
      		   system("cls");
    		   lmain();
           }
    	   system("cls");
           printf("请输入你的帐号和旧密码:\n");
           scanf("%d %s",&chazhao,mima);
    	   m =tjzs3();
    	   for (n=0;n<=m;n++)
    	   {
    	    fscanf(fp,"%d %s",&zh,mm);
            if(zh==chazhao)
            {
            	if(!strcmp(mm,mima))
            	{
            		printf("请输入新的密码");
            		scanf("%s",mima);
           		    printf("再次输入密码:\n");
    	            scanf("%s",password1);
    	             if(strcmp(mima,password1)==0)
    	   			 {
    		             xg(chazhao,mima);
    		            getch();
    				    lmain();
    	                system("cls");
       			     }
           			  else
    	   			  {
    	       		   	  printf("两次输入密码不一致,按任意键退出");
    	       			  hit=getch();
    		   			  system("cls");
    				      lmain();
    
       				  }
    			}
    			else
    			{
    				printf("旧密码错误,按任意键返回!");
    				getch();
    				system("cls");
    				lmain();
    	            
    			}
    
            }
          }
    	   printf("不存在此账号,按任意键返回");
    		fclose(fp);//修改结束
    		getch();
    		system("cls");
    		lmain();
    }
    
    
    
    int main()
    {
    	system("color 1F");
    	lmain();
    	return 0;
    }
    
    

    5.遇到的难点及解决办法

    (1)不知道如何停止程序,以及只让程序在ESC和回车按下后才继续工作。
    解:查阅资料getch()
    所在头文件:conio.h
    函数用途:从控制台读取一个字符,但不显示在屏幕上
    函数原型:int getch(void)
    返回值:读取的字符
    代码: for(;i!=13&&i!=27;)
    i=getch();

    (2)不知道C语言未初始化的变量的值,导致无限循环。
    解:全局变量 、静态变量初始值为0
    局部变量,自动变量初始值随机分配

    (3)不知道如何快速清理文件和新建文件
    解:查阅览书本后知道,先只写文件,如果文件名和已存在的相同,那么就会先删除原有文件,而且如果不存在文件将会之间新建文件。
    fp=fopen(“library.txt”,“w”); \清空
    fclose(fp);
    if ((fp=fopen(“library.txt”,“r”))==NULL)//快速新建
    {
    fp=fopen(“library.txt”,“w”);
    fclose(fp);
    }

    (4)对a!=2和a=!2弄混淆
    解:a!=2:表示a不等于“2”;
    a=!2:表示a等于“!2”(0);

    (5)编译正确,但是有的时候scanf语句好像没有执行,输入数据回车,程序没反应
    解:查阅得知:
    这种情况通常发生在前面已经有了输入语句,而当前的scanf是在接收字符(即用%c控制输入)时。由于前面的输入语句(不一定是scanf)把最后输入的’\n’遗留在了输入缓冲区,而当前的scanf("%c",…);又会把’\n’当一个字符接收,又由于scanf在%c控制下只接收一个字符,所以就不能接收正式输入的字符了。解决这一问题的最简单办法是在接收字符的scanf的控制符"%c"中的%前加一个空格写成" %c",把前一次输入遗留在输入缓冲区里的所有广义空格(’ ‘、’\t’、’\n’等)都吸收掉。在接收字符的scanf前加getchar()等的办法其实是有漏洞的——当缓冲区里只遗留了一个广义字符时可正常工作,若多于一个则同样出错。 按回车没反应

    (6),关于“feof”的误区
    For(;!feof(fp)?;
    n++;
    n–;来判断文件里面字符的个数为什么错误,
    查阅得知:
    1.EOF
    EOF是一个计算机术语,为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。通常在文本的最后存在此字符表示资料结束。这个定义的意思是,文档的结尾都有一个隐藏字符”EOF”,当程序读取它的时候,就会知道文件已经到达结尾。通常使用while循环加EOF判断作为读取结束的标志。
    EOF 的值通常为 -1,但它依系统有所不同。
    2.feof()
    feof()的原理:
    feof()函数,并不是通过读取到文件的EOF来评判,这个文件是否为空。
    对feof()来说,它的工作原理是,站在光标所在位置,向后看看还有没有字符。如果有,返回0;如果没有,返回非0。它并不会读取相关信息,只是查看光标后是否还有内容。
    直接使用时的错误分析:
    对于一个空文件来说,当程序打开它的时候,它的光标会停在文件的开头,但是由于文件里什么内容都没有存(但是EOF是存在的),即整个文件就存贮了一个EOF。当程序打开文件,并直接调用feof()时,这个函数就会站在光标的位置向后张望,结果就看见了EOF,然后就当然返回0了。所以使用feof()函数时,必须要读取文件,让光标移动。

    (7)错因:用正确的格式写入文件,结果却没有数据
    解:没有及时fclose(fp),不弥补数据储存的原理。
    打开文件fopen函数把返回值赋给fp,用fclose关闭文件,如果不关闭文件就结束程序将会丢失数据,因为,在向文件里面写入数据时,是先将数据输入到缓冲区,待缓冲区从满后才正式输出给文件。因此用fclose函数关闭文件时,先把缓冲区中的数据输出到磁盘文件,然后才撤销文件信息区。

    下载链接
    链接:https://pan.baidu.com/s/13fFq7OwTb9ulWMRYHym-ZA 密码:4wbd
    亲,点个赞
    
    
    展开全文
  • C语言课程设计 图书管理系统 提示:下方有设计要求及源代码。 、课程设计要求 设计要求: 引言 图书管理系统是智能办公系统的重要组成部分。图书管理系统将传统的图书管理方式彻底的解脱出来,提高管理效率,...
  • 基于Java和MySQL的图书管理系统

    万次阅读 多人点赞 2018-06-20 21:41:17
    Java图书管理系统 设计人:wangyunpeng_bio ...本次作业利用JAVA开发工具Eclipse和MySQL数据库来开发这个图书管理系统。该系统要解决的图书管理所要解决的问题,可以满足图书管理基本要求,包括添加、管理等功能。...
  • 简单用java做一个图书管理系统 首先,我们创建一个View类当做它的视图页 package view; import service.BookService; import service.UserService; import java.util.Scanner; public class View { Scanner sc =...
  • 用C语言写一个图书管理系统大作业

    千次阅读 2019-10-20 13:45:48
    //由于用户不一定一次性输入正确 所以设置个循环如果正确则跳出去错误则继续输出 while(1) {//设置一个值用来接收防止多次打印出输入错误和输入正确 int i=login(); if(i==1) { system("cls"); vipindex(); ...
  • C语言图书管理系统设计报告

    万次阅读 多人点赞 2017-06-20 17:37:54
    源代码:https://blog.csdn.net/k_young1997/article/details/73480766 XXXX大学 C语言课程设计报告 ...题 目 图书管理系统设计 专业班级 XXXX级计算机科学与技术本科X班 组 别 计科第...
  • 用C++做了一个图书管理系统

    千次阅读 2019-07-24 22:51:38
    图书管理系统功能如下: 添加书籍。 删除书籍。当系统中存在此书时,删除该书籍,否则提示用户删除失败。 借阅书籍。当系统中存在此书且未被借阅时,将书 的状态设置为“借出”,否则提示用户借阅失败。 归还...
  • jQuery+Ajax制作图书管理系统

    千次阅读 2020-06-20 22:37:47
    前言 这学期开设了jQuery基础的课程,并布置了第阶段的大作业,信息管理系统(我这里呢是写的是图书管理系统) 我
  • 用java代码写一个图书管理系统

    千次阅读 2020-07-28 13:09:55
    一个管理图书馆里的图书 package tushuguanlixiting; import java.util.Arrays; public class BookSystem { int numPeople = -1; int numBook = -1; String [][] people = new String [3] [2]; String [][] ...
  • 用Python写一个图书管理系统

    千次阅读 2019-04-15 22:51:01
    图书管理系统 1.查询图书 2.增加图书 3.借阅图书 4.归还图书 5.退出系统 ''') while True: choice = input('请选择:') if choice=='1': self.showAllBook() elif choice =='2': self.addBook() elif ...
  • javaee图书管理系统

    热门讨论 2012-11-11 20:00:27
    这是一个用javaee开发的图书管理系统,实现的技术是SSH和jdbc,servlet的一点技术,功能还是比较全面的。
  • 基于JavaWeb开发的图书管理系统

    万次阅读 多人点赞 2018-03-21 09:26:42
    使用Java开发的图书管理系统 如题,用Java开发而成,具备基础功能,读者可以注册登录,登录时会判断账号类型再分别跳到各自对应的页面,读者可以查找,借阅,还书,查看历史借阅记录,修改个人资料,密码等,管理...
  • python实现图书管理系统

    万次阅读 多人点赞 2019-06-09 22:34:16
    图书管理系统图书管理系统 某图书馆所藏图书如表1所示: 书号 书名 出版社 作者 价格 库存 10001 C语言程序设计 ...
  • java实现简单的图书管理系统

    万次阅读 多人点赞 2019-04-13 17:49:44
    Library类: 写了登录函数(1、普通用户,2、管理员,3、退出系统), Person类:定义的人的属性(姓名,性别,年龄)并且写了属性的get、set方法,定义了一些书。 operate接口:操作的接口,操作方法:查询/查阅,...
  • java实现一个简单的图书管理系统

    千次阅读 2020-08-24 18:33:18
    java实现一个简单的图书管理系统 定义图书类Book,具有属性账号id,书名name、作者author 和价格price,在创建图书对象时要求通过构造器进行创建,一次性将四个属性全部赋值,要求账号属性是int型,书名是String型,...
  • access图书管理系统

    热门讨论 2008-12-28 21:32:44
    用access制作图书管理系统属于课程设计,个人制作
  • .net图书管理系统完整版源码 包括图书管理,图书借阅,图书归还等功能
  • 用vue+elementUI实现一个图书管理系统

    千次阅读 2019-12-09 17:06:29
    看一下效果图 Edit: Create:
  • VB 图书管理系统

    千次阅读 多人点赞 2017-07-17 16:05:15
    VB 简单图书管理系统设计 图书管理系统源代码下载 基于VB,mysql数据库 拥有可操作界面 实现基本图书管理功能
  • 宅了两天多的时间,一个人从零开始学Qt和c++,强行做出了一个图书管理系统 以下是效果图: 【没有审美QAQ】 具体的代码要等到这学期结束之后再上传了。。。 以下的内容主要总结一下自己踩到的坑和一点点...
  • Django实现一个简单的图书管理系统

    千次阅读 2020-03-30 15:57:25
    我用的是Pycharm 2019.3.4 专业版,直接新建一个Django项目 数据库我用的是mysql 效果 增删查都有了 查: 首页查看图书列表 增: 删: 点击首页的图书名,可以跳转到详情页,然后可以删除图书 删除后的效果 目录...
  • JavaWeb 图书管理系统

    千次阅读 2021-01-07 16:21:48
    本项目是一个基于javaWeb的图书管理系统,实现了登录、注册和基本的CRUD操作 使用的技术是Servlet,jsp,ajax,bootstrap等 项目没有进行数据库调优(主要还是自己太菜了),所以应该无法撑起大规模访问 项目介绍 ...
  • 现在回头看看,这个图书管理系统做了将近有一个月了, 真的是慢,庆幸的是给做了出来, 没有半途而废,而且也熟悉了整个流程,例如数据库的连接和增删改查一些操作。 下面是我在整个过程遇到的一些问题和个人解决...
  • 图书管理系统

    千次阅读 2020-10-12 12:43:48
    项目总体功能描述:此项目为模拟图书馆的借阅系统,通过该系统可以查询目前图书的基本信息,图书是否在馆或者图书被谁借走,查询个人基本信息,借阅情况,同时也可以通过该系统进行图书的借阅操作。本系统管理员跟...
  • 用Python编写一个简易的图书管理系统

    千次阅读 多人点赞 2019-12-07 21:04:07
    本系统包括登录主界面、管理系统主界面以及各功能分支界面。   2.登录界面可以实现用户注册、用户登录和退出程序的功能。   3.管理系统主界面可以实现增加书籍、删除书籍、查阅书籍信息、修改书籍信息、查看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,461
精华内容 5,384
关键字:

如何制作一个图书管理系统