C/C++教程

媒体库管理系统设计(C++)图书馆资料管理

本文主要是介绍媒体库管理系统设计(C++)图书馆资料管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

媒体库管理系统设计(C++)含模板

一、实验目的
图书馆中的资料很多,如果能分类对其资料流通进行管理,将会带来很多方便,因此需要有一个媒体库管理系统。
图书馆共有三大类物品资料:图书、视频光盘、图画。
这三类物品共同具有的属性有:编号、标题、作者、评级(未评级,一般,成人,儿童)等。其中图书类增加出版社、ISBN号、页数等信息;视频光盘类增加出品者的名字、出品年份和视频时长等信息;图画类增加出品国籍、作品的长和宽(以厘米计,整数)等信息。
二、实验内容
(1)添加物品:主要完成图书馆三类物品信息的添加,要求编号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加;当物品库已满,则提示不能再添加新的数据。
(2)查询物品
可按照三种方式来查询物品,分别为:
按标题查询:输入标题,输出所查询的信息,若不存在该记录,则提示“该标题不存在!”;
按编号查询:输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!”;
按类别查询:输入类别,输出所查询的信息,若不存在记录,则提示“该类别没有物品!”;
(3)显示物品库:输出当前物品库中所有物品信息,每条记录占据一行。
(4)编辑物品:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除物品:主要完成图书馆物品信息的删除。如果当前物品库为空,则提示“物品库为空!”,并返回操作;否则,输入要删除的编号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。
(6)统计信息
输出当前物品库中总物品数,以及按物品类别,统计出当前物品中各类别的物品数并显示。
(7)物品存盘:将当前程序中的物品信息存入文件中。
(8)读出物品:从文件中将物品信息读入程序。

为实现物品存盘读出物品功能需要在文件夹中建立相应文档,在文档中输入初始物品信息,格式由代码设定决定,这样才能从文档中读取数据。

以下分别为视频,图画,图书文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图画未设置内容,不做展示

程序效果展示

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

代码

#include <iostream>
#include <string>
#include <cstring>
#include <fstream>
#include <cstdlib>
using namespace std;
class person
{

};
class  Student    //定义学生类
{

  public:
    string name;
    float score;
  public:
    friend  ostream & operator<<(ostream & out,Student  &s);
    friend  istream & operator>>(istream & in,Student  &s);
    Student(string  n="gg ",float s=0)
    {
        name=n;
        score=s;
    }

    bool operator >(Student s) //重载 > 符号
	{
		if(this->score>s.score)
		return true;
		else return false;
	}

};
  ostream & operator<<(ostream & out,Student  &s)
  {
      out<<s.name<< "    "<<s.score<<endl;
      return out;
  }

   istream & operator>>(istream & in,Student  &s)
   {
       cout<<"请输入学生的姓名、成绩"<<endl;
       in>>s.name>>s.score;
       return in;
   }




//****************************************文件类模板***************************************
template <class T>
class  FileOperation
{
   private:
           fstream  File;     //文件流对象
           T  arr[100];       //对象数组
           int n;             //元素个数
           char  fileName[40];    //文件名
   public:

           FileOperation(char *fn)   //构造函数
           {
                strcpy(fileName,fn);
                n=0;

           }
          void  FileRead() //读文件   将文件记录读入数组对象的数组中
           {    n=0;
                File.open(fileName,ios::binary|ios::in);   //打开文件
                File.seekg(0,ios::end);     //文件指针指向文件尾
                long  fileLen=File.tellg();     //文件长度
                File.seekg(0,ios::beg);     //文件指针指向文件头
               while(File.tellg()<fileLen)
               {  File.read((char *)&arr[n],sizeof(T));
                  n++;
               }
               File.close();
           }

           void  add(T   a)  //添加一条记录到数组和文件
           {  //数组添加
                arr[n]=a;
                n++;
                //文件添加
                File.open(fileName,ios::binary|ios::out|ios::app);   //打开文件
                File.write((char *)&a,sizeof(T));  //写入新记录  */
                File.close();
           }
            void display1()   //显示数组记录

            {
                for(int  i=0;i<n;i++)
                    cout<<arr[i];
            }
            void display()   //显示文件记录
            {   T  a[100]; int i=0;
                File.open(fileName,ios::binary|ios::in);   //打开文件
               File.seekg(0,ios::end);     //文件指针指向文件尾
                long  fileLen=File.tellg();     //文件长度
                File.seekg(0,ios::beg);     //文件指针指向文件头
               while(File.tellg()<fileLen)
               {  File.read((char *)&a[i],sizeof(T));
                  cout<<a[i];
                  i++;
               }
               File.close();

            }
      int searchname(string  s)    //按姓名查询
    {    int flag=-1;
         for(int i=0;i<n;i++)
           if(arr[i].name==s)
            {  flag=i;
               break;
            }
        return flag;
    }

        int searchnum(string  s)    //按学号查询
    {          int flag=-1;
         for(int i=0;i<n;i++)
           if(arr[i].num==s)
            {  flag=i;
               break;
            }
        return flag;
    }



};



int main() {
   fstream  file1;
   char filename1[50]="d:\\c++book\\record.dat";
   ifstream fin(filename1);
   if(fin)    //判断文件是否存在
   {
      fin.close();
   }
   else{
         file1.open(filename1,ios::binary|ios::out);   //首次运行新建文件
         file1.close();
       }
   FileOperation <Student>  files(filename1);
   files.FileRead();      //程序一开始运行,先读文件,将文件内容读出到数组中
   Student s1("zhang",89);
   files.add(s1);
   Student s2("wang",79);
   files.add(s2);
   Student  s3("zhao",86);
   files.add(s3);
   cout<<"添加后数组为"<<endl;
   files.display1();
   cout<<"添加后文件为"<<endl;
   files.display();




   char c;  string nm;
   cout<<"请选择查询方式,按姓名查询,请输入1,学号查询输入2"<<endl;
   cin>>c;
   if(c=='1')
   { cout<<"请输入姓名"<<endl;
         cin>>nm;
       if(files.searchname(nm)==-1)
                cout<<"不存在"<<endl;
       else  cout<<"找到"<<endl;
   }
}

有用到模板

这篇关于媒体库管理系统设计(C++)图书馆资料管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!