1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 设计一图书信息管理系统 实现以下功能:系统以菜单方式工作 图书信息录入功能(图书

设计一图书信息管理系统 实现以下功能:系统以菜单方式工作 图书信息录入功能(图书

时间:2022-07-23 15:59:14

相关推荐

设计一图书信息管理系统 实现以下功能:系统以菜单方式工作 图书信息录入功能(图书

问题描述

设计一图书信息管理系统,实现以下功能:系统以菜单方式工作,图书信息录入功能(图书信息用文件保存) ;图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等;图书信息浏览功能(输出所有图书信息);查询和排序功能:按书名查询(显示所有同名的书),按作者名查询(所有该作者的书); 图书信息的删除与修改。

基本要求

(1)使用面向对象编程思想编写开发过程中需要用到的类,比如:图书类(图书信息)、日期类 、管理类(实现对图书信息的管理)。

(2)输入和输出可以使用文本文件重定向输入(保存数据为磁盘文件);也可以使用标准输入输出进行(提交时需要提交TXT格式输入数据)。应包含 20条以上记录,且有同姓名不同作者的书和同一作者的多部著作,包含数据信息即图书信息。在运行程序时自动载入,若文件不存则创建一个空文件。

(3)基本功能要求具有增、删、改、查。

三.需求分析

系统目的:本图书信息管理系统菜单方式工作,用户可以通过此管理系统对书籍进行管理,它具有(1)登录号、书名、作者名、分类号、出版单位、出版时间、价格等图书信息的录入功能。(2)图书信息的浏览功能(3)对书籍的查询和排序功能,按书名查询与按作者名查询(4)对图书信息的删除与修改。

用户需求:此系统采用文本文件重定向输入已保存数据为磁盘文件,输入值已按登录号整齐排列,用户可以在此基础上进行书籍信息的增删改查,可以按书籍价格增序与降序进行重新排列。可以在退出时保存数据方便下次使用,可通过主菜单方式按书名或作者名进行查询,便于准确找到图书。可通过菜单方式显示书籍信息,一目了然。已实现多条书籍信息对齐排列,使页面更加简洁明了。

功能需求:系统已实现对书籍信息的增删改查。

测试数据:数据已经过测试,测试结果(包括正确的输入及其输出结果和含有错误的输入及其输出结果)将会在下文中展示。

#include"iostream"

#include"windows.h"//与 system("cls");连用实现清屏操作

#include "fstream"//对文件进行操作所包含的头文件

#include"stdio.h"//使用Sleep(3000)需包含的头文件

#include "cstring"

#include"iomanip"

using namespace std;

#define long 11

class book

{public:

book *next;//构建链表

string book_Entry_number;//书籍登录号

string book_name;//书籍名称

string author_name;//作者姓名

string book_number;// 书籍分类号

string publish_address;//书籍出版单位

string publish_time;//书籍出版时间

string book_price;//书籍价格

string getbook_Entry_number()//get函数实现private数据在类外调用

{return book_Entry_number;}

string getbook_name()

{return book_name;}

string getauthor_name()

{return author_name;}

string getbook_number()

{return book_number;}

string getpublish_address()

{return publish_address;}

string getpublish_time()

{return publish_time;}

string getbook_price()

{return book_price;}

friend istream&operator>>(istream& in,book &p);//重载输入

friend ostream&operator<<(ostream& out,book &p);//重载输出

void m_book_Entry_number()//输入图书数据 book_Entry_number

{cin>>book_Entry_number;}

void m_book_name()// 输入图书数据book_name

{cin>>book_name;}

void m_author_name()// 输入图书数据author_name

{cin>>author_name;}

void m_book_number()// 输入图书数据book_number

{cin>>book_number;}

void m_publish_address()// 输入图书数据publish_address

{cin>>publish_address;}

void m_publish_time()// 输入图书数据publish_time

{cin>>publish_time;}

void m_book_price()// 输入图书数据book_price

{cin>>book_price;}

void Exchange_book(book *q);//进行图书信息交换

};

istream&operator>>(istream&in,book &p)//实现重载输入

{in>>p.book_Entry_number>>p.book_name>>p.author_name>>p.book_number>>p.publish_address>>p.publish_time>>p.book_price;

return in;

}

ostream&operator<<(ostream&out,book &p)//实现重载输出 (固定输出数据宽度为Long,左对齐,

{out<<setw(long)<<setiosflags(ios::left)<<p.book_Entry_number<<"\t\t";

out<<setw(long)<<setiosflags(ios::left)<<p.book_name<<"\t\t";

out<<setw(long)<<setiosflags(ios::left)<<p.author_name<<"\t\t";

out<<setw(long)<<setiosflags(ios::left)<<p.book_number<<"\t\t";

out<<setw(long)<<setiosflags(ios::left)<<p.publish_address<<"\t\t";

out<<setw(long)<<setiosflags(ios::left)<<p.publish_time<<"\t\t";

out<<setw(long)<<setiosflags(ios::left)<<p.book_price<<endl;

return out;

}

class LibraryManager//图书馆管理类

{public:

LibraryManager();//图书管理类的构造函数

void Menu();//图书管理系统菜单

void ExitManager();//退出系统

void Add_book(book **q);//增加图书信息

void show_book(book *q) ;//显示图书信息

void Delete_book(book **q);//删除图书信息

void amend_book(book *q);//修改图书信息

void FIND_book(book *q);//查找图书信息

void sort_book(book *q);//按照图书价格排序

void Exchange_book(book *q);//排序时用来信息交换

void SaveData(book *q);//将图书数据保存在新文件中

int init_book(book **q);//从文件中读出图书信息

private:

book *abook;//book类指针指向链表头top

book *zbook;};//book类指针指向链表尾

LibraryManager::LibraryManager()//图书管理类的构造函数

{

abook=NULL;

init_book(&abook);//将链表头部地址传给 init_book

Menu();//调用菜单

}//链表生成

void LibraryManager::Menu()

{

cout<<"######欢迎使用图书信息管理系统#######"<<endl;

cout<< "######输入1 增加图书信息####################"<<endl;

cout<< "######输入2显示图书信息####################"<<endl;

cout<< "######输入3 删除图书信息####################"<<endl;

cout<< "######输入4 修改图书信息####################"<<endl;

cout<< "######输入5查找图书信息####################"<<endl;

cout<< "######输入6按照价格排序####################"<<endl;

cout<< "######输入7 图书数据保存在新文件中并退出系统####################"<<endl;

char m;//定义为int类型输入符号或汉字会刷屏,故定义为char类型

cin>>m;

while(m<'1'||m>'8')//判断用户是否正确输入

{cout<<"输入有误,请重新输入"<<endl;

cin>>m;

}

switch(m)//根据用户的选择进行功能实现

{case '1': Add_book(&abook );break;//增加图书信息

case '2': show_book(abook) ;break;//显示图书信息

case '3': Delete_book(&abook);break;//删除图书信息

case '4': amend_book(abook);break;//修改图书信息

case '5': FIND_book(abook);break;//查找图书信息

case '6': sort_book(abook);break;//按照登录号排序

case '7': SaveData(abook);cout<<"欢迎下次使用"<<endl;exit (0); break;//将图书数据保存在新文件中

case '8': init_book(&abook);break;}}//从文件中读出图书信息

void LibraryManager::Add_book(book **q)//增加图书信息

{ char m;

cout<<"请输入图书信息"<<endl;

book *p;//定义book类指针

p=new book;//申请存储空尾间

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cin >>*p;

if (*q==NULL)//检查链表是否为空链表

{p->next=NULL;

*q=p;}//如果链表为空则把链表头指向p

else

{p->next=NULL;//p是倒数第二个节点,next指针中保存这尾节点的地址值,p指向尾节点

(zbook)->next=p;//如果链表不为空则把链表尾指向p

}

zbook=p;

cout<<"添加成功,是否继续添加:是c,否d:"<<endl;

cin>>m;

while(m!='c'&&m!='d')

{

cout<<"输入错误,请重新输入:"<<endl;

cin>>m;

}

if(m=='c')

{Add_book(&abook);

exit(0);}

else

{cout<<"正在返回到菜单,请勿操作"<<endl;

Sleep(3000);//停滞3s再继续

system("cls");//清屏

Menu();

exit(0);

}}

void LibraryManager::show_book(book *q)//显示图书信息

{book *m=q;//定义book类指针指向链表地址

int k=0,j=0;//k控制换行,j记录书籍本书

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

while(m!=NULL)

{cout<<*m<<endl;

k++;j++;

if(k>10)//每 11个数据换行

{cout<<endl<<endl;k=k-11;}

m=m->next;}

cout<<"一共展示"<<j<<"本图书"<<endl;

system("pause");

cout<<"正在返回到菜单,请勿操作"<<endl;

Sleep(3000);

system("cls");

Menu();

exit (0);}

void LibraryManager:: amend_book(book *q)//修改图书信息

{ string mp;

char h;

book *p,ctemp;

p=q;

cout<<"请输入要修改的图书的登录号:输入NO返回菜单"<<endl;

cin>>mp;

if(mp=="NO"){system("cls");Menu();exit(0);}//返回菜单

while(p!=NULL)

{if(p->getbook_Entry_number()==mp)break;//已查找到

else{p=p->next;}

}

if(p==NULL)//未查找到

{cout<<"无此图书"<<endl;cout<<"正在返回到菜单,请勿操作"<<endl;

Sleep(3000);

amend_book(q);

exit(0);

}

else

{system("cls");

ctemp=*p;

cout<<"以下为图书信息:"<<endl;

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*p<<endl;

cout<<"********************************"<<endl;

cout<<"本书登录号0"<<endl;

cout<<"本书书籍名称1"<<endl;

cout<<"本书作者姓名2"<<endl;

cout<<"本书分类号3"<<endl;

cout<<"本书出版单位4"<<endl;

cout<<"本书出版时间5"<<endl;

cout<<"本书书籍价格6"<<endl;

cout<<"********************************"<<endl;

cout<<"7返回菜单"<<endl;

cout<<"请选择要修改的信息:0,1,2,3,4,5,6对应相应信息";

cin>>h;

while(h<'0'||h>'7')

{cout<<"输入错误,请重新输入"<<endl;

cin>>h; }

cout<<"输入修改后的信息"<<endl;

switch(h)

{case '0':p->m_book_Entry_number();break;

case '1':p->m_book_name();break;

case '2':p->m_author_name();break;

case '3':p->m_book_number();break;

case '4':p->m_publish_address();break;

case '5':p->m_publish_time();break;

case '6':p->m_book_price();break;

case '7':Sleep(3000);

system("cls");

Menu();

exit(0);break;

}

cout<<"修改后图书信息为" <<endl;

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*p<<endl;

system("pause");

cout<<"无此图书"<<endl;cout<<"正在返回到菜单,请勿操作"<<endl;

Sleep(3000);

system("cls");

Menu();

exit(0);

}

};

int LibraryManager:: init_book(book **q)//从文件中读出图书信息,返回值用来中断函数

{int j=0;//用来计录读取信息数

ifstream infile("shuji.txt",ios::in);//从shuji.txt文件中读取数据

if(!infile)

{cout<<"书籍文件不存在"<<endl; //书籍文件不存在

Sleep(3000);

system("cls");

return 0;

}

while(!infile.eof())

{book *atemp;

atemp=new book;

infile>>(*atemp);

if(infile.eof()){break;}//读取到文件尾,结束

j++;

if(*q==NULL)//检查链表是否为空链表

{atemp->next=NULL;

*q=atemp;

}

else

{atemp->next=NULL;

(zbook)->next=atemp;

}

zbook=atemp;

}

if(j==0){cout<<"书籍文件为空"<<endl;

Sleep(3000);

system("cls");}

else {cout<<"从文件中读取数据"<<endl;

Sleep(3000);

system("cls");

}

infile.close();

return 1;

}

void LibraryManager:: SaveData(book *q)//将图书数据保存在新文件中( (若文件不存在则新建)

{book *m=q;book *btemp;

fstream outfile("shuji.txt",ios::out);// shuji.txt

if(!outfile)

{cout<<"书籍文件保存失败"<<endl;

exit (0);

}

while (m!=NULL)//链表不为空

{outfile<<*m;//把链表中数据输入文件保存,每保存一个释放一个

btemp=m;

m=m->next;

delete btemp;//释放链表空间

}

outfile.close();//关闭文件

}

void LibraryManager::FIND_book(book *q)//查找图书信息

{char p;

cout<<"请按(s)书名(n)作者名"<<endl;

cin>>p;

if(p=='n')

{string j;

book *z;

z=q;

int i=0;

cout<<"请输入需查找书籍的作者名"<<endl;

cin>>j;

while(z!=NULL)

{if(z->getauthor_name()==j)//已找到此书籍

{cout<<"该图书信息如下"<<endl;

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*z;

z=z->next;

i++;

}

else{z=z->next;}//未找到,继续寻找

}

if(z=NULL)//最终未找到

{cout<<"无此图书"<<endl;

Sleep(3000);

FIND_book(q);

exit(0);

}

else

{system("pause");

system("cls");

Menu();

exit(0);

}

}

else// 按书名搜索

{string j;

book *z;

z=q;

int i=0;

cout<<"请输入需查找书籍的书名"<<endl;

cin>>j;

while(z!=NULL)

{if(z->getbook_name()==j)//已找到此书籍

{cout<<"该图书信息如下"<<endl;

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*z;

z=z->next;

i++;

}

else{z=z->next;}//未找到,继续寻找

}

if(z=NULL)//最终未找到

{cout<<"无此图书"<<endl;

Sleep(3000);

FIND_book(q);

exit(0);

}

else

{system("pause");

system("cls");

Menu();

exit(0);

}

}

}

void LibraryManager::Delete_book(book **q)//删除图书信息

{string m;//需输入的图书的登录号

book *w;book *ww;

w=*q;

char j;

cout<<"请输入需删除图书的登录号"<<endl;

cin>>m;

if(w->getbook_Entry_number()==m)//若在链表头找到该图书

{cout<<"该图书原本信息如下"<<endl;

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*w;

(*q)=(*q)->next;//移动链表头到下一位置

delete w;//释放原链表头地址

cout<<"该图书信息已删除"<<endl;

Sleep(3000);

system("cls");

Menu();

exit(0);

if(w=NULL)//最终未找到

{cout<<"无此图书"<<endl;

Sleep(3000);

Delete_book(q);

exit(0);}

else {cout<<"该图书原本信息如下"<<endl;//已找到该图书

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*w;

ww->next= w->next;

delete w;//删除信息

cout<<"该图书信息已删除"<<endl;

Sleep(3000);

system("cls");

Menu();

exit(0);}}

while(w!=NULL)

{

if(w->getbook_Entry_number()==m)break;

else{

ww=w;//锁定目标图书的下一地址

w=w->next;}}

if(w==NULL)

{

cout<<"查询不到该图书"<<endl<<"正在返回"<<endl;

Sleep(3000);

Delete_book(q);

exit(0);

}

else {cout<<"该图书原本信息如下"<<endl;//已找到该图书

cout<<"本书登录号 本书书籍名称 本书作者姓名 本书分类号 本书出版单位 本书出版时间 本书书籍价格"<<endl;

cout<<*w;

ww->next= w->next;

delete w;//删除信息

cout<<"该图书信息已删除"<<endl;

Sleep(3000);

system("cls");

Menu();

exit(0);}

Sleep(3000);

system("cls");

Menu();

exit(0);

}

void LibraryManager::sort_book(book *q)//按照价格排序(对整个链表进行排序 )

{book *p=q,*m=q;

int Long=0,i,j;

char k;

cout<<"1.按价格增长排序2.按价格降序排序"<<endl;

cin>> k;

while(k<'1'||k>'2'){cout<<"输入错误,请重新输入"<<endl;

cin>>k;}

while(m!=NULL)//链表是否为空

{Long ++;//对链表长度进行计算

m=m->next;

}

m=q;

for(i=0;i<Long-1;i++)

{p=m;

for(j=0;j<Long-1;j++)

{if(k=='1'){if(p->getbook_price()>p->next->getbook_price())//按价格增长排序

{p->Exchange_book(p->next);}}

if(k=='2'){if(p->getbook_price()<p->next->getbook_price())//按价格降序排序

{p->Exchange_book(p->next);}}

p = p->next;

}

}

cout<<"图书正在排序中,请稍候"<<endl;

Sleep(3000);

system("cls");

Menu();

exit(0);

}

void book::Exchange_book(book *q)

{string book_Entry_number=this->getbook_Entry_number();

string book_name=this->getbook_name();

string author_name=this->getauthor_name();

string book_number=this->getbook_number();

string publish_address=this->getpublish_address();

string publish_time=this->getpublish_time();

string book_price=this->getbook_price();

this->book_Entry_number=q->getbook_Entry_number();

this->book_name=q->getbook_name();

this->author_name=q->getauthor_name();

this->book_number=q->getbook_number();

this->publish_address=q->getpublish_address();

this->publish_time=q->getpublish_time();

this->book_price=q->getbook_price();

q->book_Entry_number=book_Entry_number;

q->book_name=book_name;

q->author_name=author_name;

q->book_number=book_number;

q->publish_address=publish_address;

q->publish_time=publish_time;

q->book_price=book_price;}

int main()

{LibraryManager staff;

return 0;}

设计一图书信息管理系统 实现以下功能:系统以菜单方式工作 图书信息录入功能(图书信息用文件保存) ;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。