📄 新建 文本文档.cpp
字号:
#include<fstream>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
enum query_form {BookName,press,author,ISBN};
template <class T>bool from_string(T& t, const string& s, ios_base& (*f)(ios_base&))//字符串类型转换
{
istringstream iss(s);
return !(iss >> f >> t).fail();
}
/*类型定义*/
struct LNode
{
int sequenceNum; //图书序号
string ISBN; //ISBN编号
string BookName; //书名
string press; //出版社
string author; //作者
string date_of_in; //入库时间
string date_of_out; //出库时间
int store_number; //库存数
double price; //单价
LNode * next; //指向下一个图书
};
/*链表基本操作*/
LNode * CreateLink(LNode *L) //创建一个链表
{
L=new(LNode);
L->next=NULL;
return L;
}
LNode * CreateDefaultLink( )//创建以默认数据建立的链表
{
ifstream book("Bookmanagement.txt");
if(!book)
{
cerr<<"打开文件失败!"<<endl;
char * s="Bookmanagement.txt";
cout<<"请重新输入完整文件路径及文件名(盘符:\\路径\\文件名.txt):"<<endl;
cin>>s;
ifstream book(s);
}
LNode *p1,*p2,*head=NULL;
p1=p2=new LNode;
p1->next =NULL;
int i=0,j=1;
char ch;
string read,r[10]; //s用来保存当前正要提取的关键字,r[1]-r[9]依次用来保存每个结点的关键字
getline(book,read);
while(j<10)
{
string temp;
while(read[i++]!='\t')
{
temp.append(1,read[i-1]);
}
r[j++]=temp;
cout<<r[j-1];
}
from_string<int>(p1->sequenceNum, r[1], dec);
from_string<int>(p1->sequenceNum, r[2], dec);
p1->BookName=r[3];
p1->author=r[4];
p1->press=r[5];
from_string<int>(p1->store_number, r[6], dec);
from_string<double>(p1->price, r[7], dec);
p1->date_of_in=r[8];
p1->date_of_out=r[9];
book.get(ch);
while(book.eof())
{
if(head==NULL)head=p1;
else p2->next=p1;
p2=p1;
p1=new LNode;
p1->next=NULL;
getline(book,read);
while(j<10)
{
string temp;
while(read[i++]!='\t')
{
temp.append(1,read[i-1]);
}
r[j++]=temp;
cout<<r[j-1];
}
/* while(ch !='\n') //分离每行的关键字
{
while( ch !='\t')
{
s[i++]=ch;
book.get(ch); //分离关键字
}
s[i]='\0';
r[j++]=s;
}
*/
from_string<int>(p1->sequenceNum, r[1], dec);
from_string<int>(p1->sequenceNum, r[2], dec);
p1->BookName=r[3];
p1->author=r[4];
p1->press=r[5];
from_string<int>(p1->store_number, r[6], dec);
from_string<double>(p1->price, r[7], dec);
p1->date_of_in=r[8];
p1->date_of_out=r[9];
}
return head;
}
/*函数声明*/
void menu(); //主 菜单
void sub_menu_ADD(); //增加记录 菜单
void sub_menu_Modify(); //修改记录 菜单
void sub_menu_Delete(); //删除记录 菜单
void sub_menu_Query(); //查询记录 菜单
void ADD(); //增加记录
void Modify(); //修改记录
void Delete(); //删除记录
LNode * query(int choice_of_query,string query_keyword); //查询记录
void main()
{
menu();
}
/*函数实现*/
void menu()
{
cout<<"********************************************************************************"<<endl;
cout<<"* "<<endl;
cout<<"* 图书库存管理系统"<<endl;
cout<<"* 选择一个操作:"<<endl;
cout<<"* <1>增加一条图书记录 *"<<endl;
cout<<"* <2>修改一条图书记录 *"<<endl;
cout<<"* <3>删除一条图书记录 *"<<endl;
cout<<"* <4>查询一条图书记录 *"<<endl;
cout<<"* <5>保存到文件 *"<<endl;
cout<<"* <6>退出系统 *"<<endl;
cout<<"********************************************************************************"<<endl;
cout<<endl;
char choice='6';
cout<<" 请输入您的选择(1-6):"<<endl;
cin>>choice;
if (int(choice)<49 || int(choice)>54)
{
cout<<" 输入不正确!请重新再输入一个1至6之间的整数:"<<endl;
cin>>choice;
}
else switch(choice)
{
case '1':sub_menu_ADD();break;
case '2':sub_menu_Modify();break;
case '3':sub_menu_Delete();break;
case '4':sub_menu_Query();break;
case '5':
case '6':exit(0);
}
}
void sub_menu_ADD()
{
}
void sub_menu_Modify()
{
}
void sub_menu_Delete()
{
}
void sub_menu_Query()
{
cout<<"* 选择一个查询方式:"<<endl;
cout<<"* <1>按 书名 查询 *"<<endl;
cout<<"* <2>按 ISBN 序列号查询 *"<<endl;
cout<<"* <3>按 作者 查询 *"<<endl;
cout<<"* <4>按 出版社 查询 *"<<endl;
cout<<"* <5>返回上级菜单 *"<<endl;
cout<<"********************************************************************************"<<endl;
cout<<endl;
char choice='5';
cout<<" 请输入您的选择(1-5):"<<endl;
cin>>choice;
if (int(choice)<49 || int(choice)>53)
{
cout<<" 输入不正确!请重新再输入一个1至5之间的整数:"<<endl;
cin>>choice;
}
else switch(choice)
{
case '1':
{
cout<<"请输入要查询的 书名 :"<<endl;
string name;
cin>>name;
query (1,name);
}
case '2':
{
cout<<" 请输入要查询的 ISBN 编号:"<<endl;
string ISBN;
cin>>ISBN;
query (2,ISBN);
}
case '3':
{
cout<<" 请输入要查询的 作者:"<<endl;
string author;
cin>>author;
query (3,author);
}
case '4':
{
cout<<" 请输入要查询的 出版社:"<<endl;
string press;
cin>>press;
query (4,press);
}
case '5':menu();
}
}
void ADD()
{
}
void Modify()
{
}
void Delete()
{
}
LNode * query(int choice_of_query,string query_keyword)
{
/*
ifstream book("Bookmanagement.txt");
if(!book)
{
cerr<<"打开文件失败!"<<endl;
char * s;
cout<<"请重新输入完整文件路径及文件名(盘符:\\路径\\文件名.txt):"<<endl;
cin>>s;
ifstream book(s);
}
*/
LNode * x=CreateDefaultLink();
LNode *t=x;
switch(choice_of_query)
{
case 1:
{
t=t->next;
while(t && t->store_number)
{
if(!query_keyword.compare(t->ISBN)) t=t->next;
return t;
}
break;
}
case 2:
{
t=t->next;
while(t && t->store_number)
{
if(!query_keyword.compare(t->author)) t=t->next;
return t;
}
break;
}
case 3:
{
t=t->next;
while(t && t->store_number)
{
if(!query_keyword.compare(t->press)) t=t->next;
return t;
}
break;
}
case 4:
{
t=t->next;
while(t && t->store_number)
{
if(!query_keyword.compare(t->BookName)) t=t->next;
return t;
}
break;
}
}
if(t)cout<<"您所查找的书目存在:"<<endl;
cout<<t->BookName<<" "<<t->author<<" "<<t->press<<t->ISBN<<" "<<endl;
}
/*
LNode * query_by_BookName(LNode *x,string keyword_BookName)
{
x=x->next;
while(x)
{
if(!keyword_BookName.compare(x->BookName)) x=x->next;
return x;
}
}
/*
LNode * query_by_press(LNode *x,string keyword_press)
{
x=x->next;
while(x)
{
if(!keyword_press.compare(x->press)) x=x->next;
return x;
}
}
LNode * query_by_author(LNode *x,string keyword_author)
{
x=x->next;
while(x)
{
if(!keyword_author.compare(x->author)) x=x->next;
return x;
}
}
LNode * query_by_ISBN(LNode *x,string keyword_ISBN)
{
x=x->next;
while(x)
{
if(!keyword_ISBN.compare(x->ISBN)) x=x->next;
return x;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -