您的位置:首页 > 理论基础 > 数据结构算法

数据结构实训——图书管理系统

2016-12-30 14:31 316 查看
/***********************************************************
* 版权所有 (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<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
if(m==1)
{
FaceBook();
cin>>n;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
switch(n)
{
case 1:
BookAdd(H);
break;           //增加图书
case 2:
BookSearch(H);
break;        //查询图书
case 3:
BookDel(H);
break;           //删除图书
case 4:
BookPai(H);
break;           //排序图书

case 5:
BookChange(H);
break;			//修改图书信息
case 0:
break;                       //退出图书管理,返回上一层菜单
}
}

else if(m==0)
{
cout<<endl<<"┅┅┅┅┅┅┅┅┅┅┅┅┅感谢使用本系统,再见!┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;
fpb2=fopen("book.txt","wb");
for(p2=H->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 <iostream>
using namespace std;
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <iomanip>
#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

Library.cpp
/***********************************************************
* 版权所有 (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<n; i++) //对所有相隔gap位置的所有元素组进行排序
{
tmp=R[i];
j=i-gap;
while (j>=0 && tmp.key<R[j].key)//对相隔gap位置的元素组进行排序
{
R[j+gap]=R[j];
j=j-gap;
}
R[j+gap]=tmp;
j=j-gap;
}
gap=gap/2; //减小增量
}
}

/*********************************************************
* 功能描述:新建图书
* 输入参数:X[xer]-图书编号
* 输出参数:是否成功增加
* 返回值 :(1)
* 其它说明:无
************************************************************/
int BookAdd(BookList &H) //建立一个带头结点的链表用来存储图书信息
{
int i=0; //统计要增加的图书量
Book *p,*q,*s;
p=(Book *)malloc(sizeof(Book));
if(!p) exit(1);
if(H->next==NULL)
{
cout<<" ○输入图书编号:";
cin>>p->num;
X[xer]=p->num;
if(p->num==0) //退出"增加图书"
{
cout<<" 共计"<<i<<"本图书入库!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}

cout<<" ○输入书名:";
cin>>p->name;
cout<<" ○输入图书价格:";
cin>>p->price;
cout<<" ○输入作者姓名:";
cin>>p->writername;
cout<<" ○输入出版社名称:";
cin>>p->publish;
p->next=NULL;
H->next=p;
q=p;
++i;
cout<<endl<< X[xer];
xer++;
}

else
{
q=H;
while(q->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;
//希尔数组的
4000
加入
X[xer]=p->num;
if(p->num==0) //退出"增加图书"
{
cout<<" 共计"<<i<<"本图书入库!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
break;
}
for(s=H->next; s!=NULL; s=s->next)
if(p->num==s->num)
{
cout<<" ≮此编号已被注册!≯ "<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}
cout<<" ○输入书名:";
cin>>p->name;
cout<<" ○输入图书价格:";
cin>>p->price;
cout<<" ○输入作者姓名:";
cin>>p->writername;
cout<<" ○输入出版社名称:";
cin>>p->publish;
p->next=NULL;
q->next=p;
q=p;
++i;
//希尔数组的加入

cout<<endl<< X[xer];
xer++;
}
return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-书的编号
* 输出参数:查询的相应信息
* 返回值 :(1)
* 其它说明:按编号查询
************************************************************/
//查询图书方式
int Search_BookNum(BookList &H) //按编号查询
{
Book *p;
p=H->next;
long n;
int flag=0;
cout<<" ○输入要查询的书的编号:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(n==p->num)
{
if(flag==0)
cout<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

flag=1;
continue;
}
}
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
if(p==NULL&&flag==0)
{
cout<<" ※没有相关信息※!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}
return 1;
}

/*********************************************************
* 功能描述:查询图书
* 输入参数:n-要查询的书名
* 输出参数:要查询书的信息
* 返回值 :(1)
* 其它说明:按书名查询
************************************************************/
int Search_BookName(BookList &H) //按书名查询
{
Book *p;
p=H->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<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

flag=1;
continue;
}
}
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
if(p==NULL&&flag==0)
{
cout<<" ※没有相关信息!※"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}
return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-书的作者名
* 输出参数:查询的相应信息
* 返回值 :(1)
* 其它说明:按作者名查询
************************************************************/
int Search_BookWritername(BookList &H) //按作者名查询
{
Book *p;
p=H->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<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

flag=1;
continue;
}
}
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
if(p==NULL&&flag==0)
{
cout<<" ※没有相关信息!※"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}
return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:n-书的出版社
* 输出参数:查询的相应信息
* 返回值 :(1)
* 其它说明:按出版社查询
************************************************************/
int Search_Publish(BookList &H) //按出版社查询
{
Book *p;
p=H->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<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

flag=1;
continue;
}
}
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
if(p==NULL&&flag==0)
{
cout<<" ※没有相关信息!※"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}
return 1;
}
/*********************************************************
* 功能描述:查询图书
* 输入参数:无
* 输出参数:图书信息
* 返回值 :(1)
* 其它说明:显示所有信息
************************************************************/
int Search_AllB(BookList &H) //查询所有图书信息
{
Book *p;
p=H->next;
int i=0,flag=0;
for(; p!=NULL; p=p->next)
{
if(flag==0)
cout<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

flag=1;
i++;
}
cout<<" 共计"<<i<<"本书。"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
return 1;
}
/*********************************************************
* 功能描述:查询图书选择模块
* 输入参数:0-4
* 输出参数:相应界面
* 返回值 :(1)
* 其它说明:0是退出
************************************************************/
int BookSearch(BookList &H)
{
int m;
while(m!=0)
{
FaceBookSearh();
cin>>m;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
switch(m)
{
case 1:
Search_BookName(H);
break; //按书名查询
case 2:
Search_BookNum(H);
break; //按编号查询
case 3:
Search_BookWritername(H);
break; //按作者名查询
case 4:
Search_Publish(H);
break; //按出版社查询
case 5:
Search_AllB(H);
break; //查询所有图书信息
case 0:
break; //退出
}
}
return 1;
}
/*********************************************************
* 功能描述:删除图书
* 输入参数:n-删除的书的编号
* 输出参数:是否删除
* 返回值 :(1)
* 其它说明:按图书编号删除
**********************************************************/
//删除图书
int BookDel(BookList &H) //图书编号
{
Book *p;
long n;
int flag=0;
p=H;
cout<<" ○输入要删除的书的编号:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(p->next!=NULL&&p->next->num==n)
{
p->next=p->next->next; //删除语句
cout<<" √成功删除!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
flag=1;
break;
}
}
if(p==NULL&&flag==0)
{
cout<<" 不存在此书!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}
return 1;
}
/*********************************************************
* 功能描述:修改图书
* 输入参数:修改的书的编号
* 输出参数:是否修改成功
* 返回值 :(1)
* 其它说明:按图书编号修改
************************************************************/
//修改图书信息
int BookChange(BookList &H) //以图书编号进行修改
{
Book *p;
long n;
int m=0;
p=H;
cout<<" ○输入要修改的书的编号:";
cin>>n;
for(; p!=NULL; p=p->next)
{
if(p->num==n)
{
m=1;

cout<<"以下为要修改的图书:"<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

cout<<" 请输入相应修改数据"<<endl;
cout<<" ○输入编号:";
cin>>p->num;
cout<<" ○输入书名:";
cin>>p->name;
cout<<" ○输入图书价格:";
cin>>p->price;
cout<<" ○输入作者姓名:";
cin>>p->writername;
cout<<" ○输入出版社名称:";
cin>>p->publish;
cout<<" √成功修改!"<<endl;
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;

break;
}
}
if(p==NULL&&m==0)
{
cout<<" 修改失败,没有这本书!"<<endl; //没有这本书
cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;
}

return 1;
}
\
/*********************************************************
* 功能描述:实现编号排序
* 输入参数:无
* 输出参数:排序后的编号
* 返回值 :(1)
* 其它说明:希尔排序
************************************************************/
int BookPai(BookList &H)
{
Book *p;
p=H->next;
int i;

for(i=0; i<xer; i++)
R[i].key=X[i];
cout<<"排序前:"<<endl;

for(; p!=NULL; p=p->next)
{
cout<<endl<<"书名 编号 单价 作者 出版社 "<<endl;
cout<<" "<<p->name<<" "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;

}

ShellSort(R,xer);

cout<<"排序后编号:"<<endl;

for(i=0; i<xer; i++)

cout<<R[i].key<<endl;

return 1;
}
/*********************************************************
* 功能描述:欢迎界面
* 输入参数:无
* 输出参数:无
* 返回值 :无
* 其它说明:界面1
************************************************************/
void Face()
{
system("color 74");
cout<<endl<<" ——————————— 欢迎进入图书管理系统 —————————"<<endl;
cout<<endl<<" ◥◤~~~~◥◤   ┏━━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃     ┃ ┃ ◆1◆ 管理图书 ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ≡━ ﹏ ━≡   ┃ ┃"<<endl;
cout<<" ┃ ◆0◆ 退出系统 ┃"<<endl;
cout<<" ┗━━┳∞┳━━┛ ┃ ┃"<<endl;
cout<<" ┏┫ ┣┓ ┗━━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<" →请输入您的选择:";
}

/*********************************************************
* 功能描述:图书查询界面
* 输入参数:无
* 输出参数:无
* 返回值 :无
* 其它说明:界面2
************************************************************/
void FaceBookSearh()
{
cout<<" ◢━━━━━━━━━━━◣"<<endl;
cout<<" ┃#欢迎进入图书查询系统#┃"<<endl;
cout<<" ◥━━━━━━━━━━━◤"<<endl;
cout<<" ┌──────────────┐ "<<endl;
cout<<" │ ① 按书名查询 ----- (NA
a62a
M) #│ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ② 按编号查询 ----- (NUM) #│ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ③ 按作者名查询 --- (SEX) #│ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ④ 按出版社查询 --- (ALL) #│ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ⑤ 查询所有信息 --- (TIME)#│ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ 0. 退 出 ------- (ESC) #│ "<<endl;
cout<<" └──────────────┘ "<<endl;
cout<<" →请在此输入您的选择:";
}

/*********************************************************
* 功能描述:图书管理界面
* 输入参数:无
* 输出参数:无
* 返回值 :无
* 其它说明:界面1
************************************************************/
void FaceBook()
{

cout<<" ◢━━━━━━━━━━━◣"<<endl;
cout<<" ┃#欢迎进入图书管理系统#┃"<<endl;
cout<<" ◥━━━━━━━━━━━◤"<<endl;
cout<<" ┌──────────────┐ "<<endl;
cout<<" │ ① 增加图书 ----- (ADD) # │ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ② 查询图书 ----- (SEA) # │ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ③ 删除图书 ----- (DEL) # │ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ④ 排序图书 ----- (SORT)# │ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ ⑤ 修改图书 ----- (CHAB)# │ "<<endl;
cout<<" ├──────────────┤ "<<endl;
cout<<" │ 0. 退 出 ----- (ESC) # │ "<<endl;
cout<<" └──────────────┘ "<<endl;
cout<<" →请在此输入您的选择:";
}


运行结果:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: