目录
图书信息管理系统的设计与实现
实验内容:
设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:
- 根据指定图书个数,逐个输入图书信息;
- 逐个显示图书表中所有图书的相关信息;
- 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
- 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
- 能统计表中图书个数;
- 实现图书信息表的图书去重;
- 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
- 图书信息表按指定条件进行批量修改;
- 利用快速排序按照图书价格降序排序;
- 实现最贵图书的查找
预习部分(选用顺序表)
函数申明及用到的部分头文件说明
#include<iostream>//输入输出流
#include <string.h>//针对于字符的各种操作
#define maxsize 100//定义最大值
typedef int status;//定义函数状态(错误,完成,溢出)
#define ERROR 0
#define OVERFLOW -2//溢出
#define OK 1
定义结构体:
typedef struct
{
char no[MAXID];
char name[MAXNAME];
float price;
}book;
typedef struct
{
book *elem;
int length;
}SqList;
相关函数
1).int IntList(SqList &L)//初始化顺序表
创建顺序表并开辟长度为30的空间
if(!L.elem){cout<<"顺序表构造失败!"<<endl;
if(!L.elem)用来判断,如果申请空间失败,则返回错误;
2).int GetList(SqList &L)//输入相关数据
先判断图书信息数是否合理,如果输入图书信息数超过最大值,退出
从键盘输入图书的信息
if (!strcmp(L.elem[i].no,"0")&&!strcmp(L.elem[i].name,"0"),L.elem[i].price==0) break;//输入结束标 志0 0 0则停止输入
3).void ShowList(SqList L)//输出
4).bool DeleteSame(SqList &L)//删除相同的图书
每个图书的书号唯一,所以根据图书的序列号进行去重
5).void PriceJiang(SqList &L) // 价格降序排列
对表中图书的价格进行比较,降序排列
第一个元素即为初始值,然后拿第一个元素去和后面的元素依次比较,最终排列顺序是价格高的 排 在首位,降序排列
输出经过排序后的顺序表
6).void Favorite(SqList &L)//最爱图书查找
输入书名后和表中已有的图书信息依次进行比较
如果找到某个图书的信息和输入的图书信息相同,输出这本书的所有信息
找不到的情况则输出"抱歉,没有你的最爱
7).int InsertList(SqList &L)//图书入库
输入要插入的位置,判断位置是否合理
如果插入的位置合法,则从插入点起所有的元素向后移动一个单位
8).int upprice(SqList &L)//批量提高图书价格
9).int DeleteList(SqList &L) //删除指定图书
输入需要删除的书号
所有元素从删除点前移一位
10).bool Expensive(SqList &L)//最贵图书查找
11).int NumberList(SqList L)//统计图书数量
顺序表的长度即为表中图书的数量
代码部分
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 100
#define ERROR 0
#define OVERFLOW -2//溢出
#define OK 1
using namespace std;
typedef struct
{
char no[20];
char name[20];
double price;
}Book;
typedef struct
{
Book *elem;
int length;
}SqList;
//顺序表的初始化
int IntList(SqList &L)
{
L.elem=new Book[30];
if(!L.elem){cout<<"顺序表构造失败!"<<endl;exit(-1);}
L.length=0;
cout<<"顺序表构造成功!"<<endl;
return 1;
}
//顺序表的取值
int GetList(SqList &L)
{
int i=1;
while(1)
{
if (i>maxsize) exit(OVERFLOW);//输入图书信息数超过最大值,退出
cin>>L.elem[i].no>>L.elem[i].name>>L.elem[i].price;
if (!strcmp(L.elem[i].no,"0")&&!strcmp(L.elem[i].name,"0"),L.elem[i].price==0) break;//输入结束标志0 0 0则停止输入
i++;
}
L.length=i-1;
return OK;
}
void ShowList(SqList L)
{
int i=1;
cout<<"书号\t\t"<<"书名\t\t"<<"图书价格"<<endl;
for(i;i<=L.length;i++){
cout<<L.elem[i].no<<"\t\t"<<L.elem[i].name<<"\t\t"<<L.elem[i].price<<endl;
}
}
//顺序表的查找
int Favorite(SqList L)
{
int i=1;
int x,c;
char a[20];
char b[20];
cout<<"2、按书名查找:"<<endl;
cout<<"请输入你要查询的书名:";
cin>>b;
for(i;i<=L.length;i++)
{
if(!strcmp(L.elem[i].name,b))
{
cout<<"书号\t\t"<&