/***********************************************************
* 版权所有 (C)
*
* 文件名称: main.cpp
* 文件标识:无
* 内容摘要:函数文件
* 其它说明:各个模块函数
* 当前版本: V5.0
* 作 者:程德泉
* 完成日期: 20161227
*
**********************************************************/
#include "Library.h"
int X[100]; //暂存数组
int xer=0; //暂存标记
RecType R[MaxSize]; //哈希数组
Book *H; //图书链表
int main()
{
FILE *fpb1,*fpb2; //文件指针
Book *p1,*p2,*s1;
H=Init_B();
fpb1=fopen("book.txt","rb"); //读方式打开图书文件
if(fpb1!=NULL)
{
p1=(Book *)malloc(sizeof(Book));
if(!p1) exit(1);
p1->next=NULL;
while(fread(p1,sizeof(Book),1,fpb1)==1)
{
if(H->next==NULL)
{
H->next=p1;
s1=p1;
}
else
{
s1->next=p1;
s1=p1;
}
p1=(Book *)malloc(sizeof(Book));
if(!p1) exit(1);
p1->next=NULL;
}
}
int m,n;
while(m!=0)
{
Face();
cin>>m;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<>n;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<next; p2!=NULL; p2=p2->next)
fwrite(p2,sizeof(Book),1,fpb2);
fclose(fpb2);
exit(0);
}
}
return 0;
}
Library.h
/***********************************************************
* 版权所有 (C)2016
*
* 文件名称: Library.h
* 文件标识:无
* 内容摘要:函数文件
* 其它说明:各个模块函数
* 当前版本: V5.0
* 作 者:程德泉
* 完成日期: 20161227
*
**********************************************************/
#ifndef MY_H_FILE
#define MY_H_FILE
#include
using namespace std;
#include
#include
#include
#include
#include
#include
#define MaxSize 100 //100条记录
typedef char InfoType[10];
typedef struct //记录类型
{
int key; //关键字项
} RecType; //排序的记录类型定义
//书的结构体
typedef struct book
{
float price; //图书单价
char name[80]; //图书名
long num; //图书编号
char writername[20]; //作者姓名
char publish[40]; //出版社名称
struct book *next; //结点指针
} Book,*BookList;
//界面
void Face();
void FaceBook();
void FaceBookSearh();
void FaceDu();
void FaceDuSearh();
//初始化
Book *Init_B(); //初始化图书链表
int BookAdd(BookList &); //建立一个带头结点的链表用来存储图书信息
//查询图书方式
int BookSearch(BookList &); //图书查询菜单
int Search_BookNum(BookList &); //按编号查询
int Search_BookName(BookList &); //按书名查询
int Search_BookWritername(BookList &); //按作者名查询
int Search_Publish(BookList &); //按出版社查询
int Search_AllB(BookList &); //查询所有图书信息
//删除图书
int BookDel(BookList &); //以图书编号作为主键进行删除
//修改图书信息
int BookChange(BookList &);
//排序函数
int BookPai(BookList &);
void ShellSort(RecType [],int);
//全局变量声明
extern RecType R[MaxSize];
extern int xer;
extern int X[100];
#endif
/***********************************************************
* 版权所有 (C)
*
* 文件名称: Library.cpp
* 文件标识:无
* 内容摘要:函数文件
* 其它说明:各个模块函数
* 当前版本: V5.0
* 作 者:程德泉
* 完成日期: 20161227
*
**********************************************************/
#include "Library.h"
/*********************************************************
* 功能描述:初试化图书链表
* 输入参数:无
* 输出参数:无
* 返回值 :图书链表
* 其它说明:无
************************************************************/
Book *Init_B() //初试化图书链表
{
Book *H;
H=(Book *)malloc(sizeof(Book));
if(!H) exit(1);
H->next=NULL;
return H;
}
/*********************************************************
* 功能描述:图书编号排序
* 输入参数:无
* 输出参数:无
* 返回值 :无
* 其它说明:希尔排序算法
************************************************************/
void ShellSort(RecType R[],int n) //希尔排序算法
{
int i,j,gap;
RecType tmp;
gap=n/2; //增量置初值
while (gap>0)
{
for (i=gap; i=0 && tmp.keynext==NULL)
{
cout<<" ○输入图书编号:";
cin>>p->num;
X[xer]=p->num;
if(p->num==0) //退出"增加图书"
{
cout<<" 共计"<>p->name;
cout<<" ○输入图书价格:";
cin>>p->price;
cout<<" ○输入作者姓名:";
cin>>p->writername;
cout<<" ○输入出版社名称:";
cin>>p->publish;
p->next=NULL;
H->next=p;
q=p;
++i;
cout<next!=NULL)
q=q->next;
p->num=1; //进入循环的条件
p->next=NULL;
}
while(p->num!=0) //以图书编号作为判断链表是否结束
{
p=(Book *)malloc(sizeof(Book));
if(!p) exit(1);
cout<<" ○输入图书编号:";
cin>>p->num;
//希尔数组的加入
X[xer]=p->num;
if(p->num==0) //退出"增加图书"
{
cout<<" 共计"<next; s!=NULL; s=s->next)
if(p->num==s->num)
{
cout<<" ≮此编号已被注册!≯ "<>p->name;
cout<<" ○输入图书价格:";
cin>>p->price;
cout<<" ○输入作者姓名:";
cin>>p->writername;
cout<<" ○输入出版社名称:";
cin>>p->publish;
p->next=NULL;
q->next=p;
q=p;
++i;
//希尔数组的加入
cout<next;
long n;
int flag=0;
cout<<" ○输入要查询的书的编号:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(n==p->num)
{
if(flag==0)
cout<name<<" "<num<price<writername<publish<next;
char n[80];
int flag=0;
cout<<" ○输入要查询的书名:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(strcmp(p->name,n)==0)
{
if(flag==0)
cout<name<<" "<num<price<writername<publish<next;
int flag=0;
char n[30];
cout<<" ○输入要查询的书的作者名:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(strcmp(p->writername,n)==0)
{
if(flag==0)
cout<name<<" "<num<price<writername<publish<next;
int flag=0;
char n[50];
cout<<" ○输入要查询的书的出版社名称:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(strcmp(p->publish,n)==0)
{
if(flag==0)
cout<name<<" "<num<price<writername<publish<next;
int i=0,flag=0;
for(; p!=NULL; p=p->next)
{
if(flag==0)
cout<name<<" "<num<price<writername<publish<>m;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<>n;
for(; p!=NULL; p=p->next)
{
if(p->next!=NULL&&p->next->num==n)
{
p->next=p->next->next; //删除语句
cout<<" √成功删除!"<>n;
for(; p!=NULL; p=p->next)
{
if(p->num==n)
{
m=1;
cout<<"以下为要修改的图书:"<name<<" "<num<price<writername<publish<>p->num;
cout<<" ○输入书名:";
cin>>p->name;
cout<<" ○输入图书价格:";
cin>>p->price;
cout<<" ○输入作者姓名:";
cin>>p->writername;
cout<<" ○输入出版社名称:";
cin>>p->publish;
cout<<" √成功修改!"<next;
int i;
for(i=0; inext)
{
cout<name<<" "<num<price<writername<publish<