数据结构实训——图书管理系统
来源:互联网 发布:rpc动态端口 编辑:程序博客网 时间:2024/05/01 23:38
/************************************************************ 版权所有 (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; //希尔数组的加入 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<<" │ ① 按书名查询 ----- (NAM) #│ "<<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<<" →请在此输入您的选择:";}
0 0
- 数据结构实训——图书管理系统
- 数据结构实训——图书管理系统
- 数据结构课程设计——图书管理系统
- 数据结构课程设计—图书管理系统
- 数据结构课程设计—图书管理系统
- 【数据结构实训——图书信息管理系统】
- 数据结构课程设计 图书管理系统
- 数据结构记录--图书管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计--图书管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计--图书管理系统
- 数据结构课程设计-图书管理系统
- 数据结构课程设计图书管理系统
- 数据结构课程设计—图书信息管理系统
- 数据结构课程设计(图书管理系统)
- 基于数据结构的个人图书管理系统
- 数据结构课程设计-图书管理系统 作者:彭子竹
- Centos6.5安装zabbix2.4
- 强大的SpannableStringBuilder
- 关于ShareSdk分享新浪微博停止工作问题
- mkfs.ext4 大于2T 的目录
- iOS 怎么删除项目中的多余分支
- 数据结构实训——图书管理系统
- IOS GCD使用求助
- svn使用教程(Mac、Linux)
- select、poll、epoll之间的区别总结[整理]
- windows10 使用sublime text3 编程
- python笔记
- iOS-直播中粒子效果
- Android的so注入( inject)和函数Hook(基于got表) - 支持arm和x86
- MainActivity中为什么不能在自己创建的线程中调用控件的方法?