⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booklist.cpp

📁 数据结构源程序
💻 CPP
字号:
// sqlist.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "process.h"

#define MAXSIZE 100

struct book{
   char sBookName[50];
   char sWriter[20];
   char sPress[100];
   float fPrice;
   int iTotalNum;    //总数
   int iLendNum;     //借出
   int iInventNum;   //剩余
};

typedef struct book ElemType;

struct sqlist{
	ElemType *elem;
	int length;
};

typedef int status;

status Init(sqlist &sl)
{
	sl.elem = new ElemType[MAXSIZE+1];
	sl.length = 0;

	if(!sl.elem) return 0;
	else return 1;
}

status Creat(sqlist &sl)
{

	if(!sl.elem) return 0;
	
	printf("\n\n输入表的长度:");
	scanf("%d",&sl.length);
	
	if(sl.length > MAXSIZE)
	{
		printf("\n\n表需要空间太大,发生溢出!");
		return 0;
	}

	for(int i=1;i<sl.length+1; i++)
	{
        printf("\n\n输入书名 作者 出版社 价格 总数\n");
		scanf("%s%s%s%f%d",sl.elem[i].sBookName,sl.elem[i].sWriter,sl.elem[i].sPress,&sl.elem[i].fPrice,&sl.elem[i].iTotalNum);
	}

	for(i=1;i<sl.length+1; i++)
	{
		sl.elem[i].iLendNum = 0;
		sl.elem[i].iInventNum = sl.elem[i].iTotalNum;
	}

	return 1;
}

status OutPut(sqlist sl)
{
	if(!sl.length)
	{
		printf("\n\n表为空!");
		return 0;
	}

	printf("\n\n表如下(包含%d个记录):",sl.length);
	printf("\n\n书名\t作者\t出版社\t价格\t总数\t借出\t剩余\n ");
	for(int i=1;i<sl.length+1;i++)
	{
		printf("\n%s\t%s\t%s\t%f\t%d\t%d\t%d\n",sl.elem[i].sBookName,sl.elem[i].sWriter,sl.elem[i].sPress,sl.elem[i].fPrice,sl.elem[i].iTotalNum,sl.elem[i].iLendNum,sl.elem[i].iInventNum);
		
	}
	return 1;
}

status Insert(sqlist &sl,int iPos,ElemType elem)
{
	if(sl.length == MAXSIZE) 
	{
		printf("\n\n表满,不能插入");
		return 0;
	}
    
	if(iPos >sl.length+1)
	{
		printf("\n\n插入位置不正确!");
		return 0;
	}

	if(iPos == sl.length+1 )
	{
		sl.elem[sl.length+1] = elem;
		sl.length++;
		return 1;
	}
	
	for(int i=sl.length;i>=iPos;i--)
	{
		sl.elem[i+1] = sl.elem[i];
	}

	sl.elem[iPos] = elem;
	sl.length++;
	return 1;
}

status Delete(sqlist &sl,int iPos,ElemType &elem)
{
	if(!sl.length) 
	{
		printf("\n\n表空,不能删除");
		return 0;
	}
	
	if(iPos > sl.length)
	{
		printf("\n\n删除位置不正确!");
		return 0;
	}
	if(iPos == sl.length)
	{
		elem = sl.elem[sl.length];
		sl.length--;
		return 1;
	}

	elem = sl.elem[iPos];

	for(int i=iPos+1;i<=sl.length;i++)
	{
		sl.elem[i-1] = sl.elem[i];
	}

	sl.length--;
	return 1;
}

status FindBook(sqlist sl,char *bname)
{
	for(int i=1;i<=sl.length;i++)
		if(strcmp(sl.elem[i].sBookName,bname)==0)
		{
			printf("\n\n找到的书目信息\n%s\t%s\t%s\t%f\t%d\t%d\t%d\n",sl.elem[i].sBookName,sl.elem[i].sWriter,
				        sl.elem[i].sPress,sl.elem[i].fPrice,sl.elem[i].iTotalNum,sl.elem[i].iLendNum,sl.elem[i].iInventNum);
		return 1;
		}

	if(i>sl.length)
	{
		printf("\n\n没有该记录!");
		return 0;
	}
}

status FindWriter(sqlist sl,char *wname)
{
	int flag=0;

	for(int i=1;i<=sl.length;i++)
	{
		if(strcmp(sl.elem[i].sWriter,wname)==0)
		{
			if(flag == 0)
			{
				printf("\n\n找到该作者的书目信息\n%s\t%s\t%s\t%f\t%d\t%d\t%d\n",sl.elem[i].sBookName,sl.elem[i].sWriter,
				        sl.elem[i].sPress,sl.elem[i].fPrice,sl.elem[i].iTotalNum,sl.elem[i].iLendNum,sl.elem[i].iInventNum);
				flag=1;
			}
			else 
				printf("\n\n%s\t%s\t%s\t%f\t%d\t%d\t%d\n",sl.elem[i].sBookName,sl.elem[i].sWriter,
				        sl.elem[i].sPress,sl.elem[i].fPrice,sl.elem[i].iTotalNum,sl.elem[i].iLendNum,sl.elem[i].iInventNum);
		}
		
	}


	if(i>sl.length)
	{
		printf("\n\n没有该记录!");
		return 0;
	}
	else return 1;
}

status LendBook(sqlist &sl,char *bname)
{
	for(int i=1;i<=sl.length;i++)
	{
		if(strcmp(sl.elem[i].sBookName,bname) == 0)
		{
			if(sl.elem[i].iInventNum)
			{
				sl.elem[i].iInventNum--;
				sl.elem[i].iLendNum++;
				return 1;
			}
			else 
			{
				printf("\n\n这本书没有库存!");
				return 0;
			}
		}
	}

	printf("\n\n对不起,没有这本书!");
	return 0;

}

status ReturnBook(sqlist &sl,char *bname)
{
	for(int i=1;i<=sl.length;i++)
	{
		if(strcmp(sl.elem[i].sBookName,bname) == 0)
		{
			sl.elem[i].iInventNum++;
			sl.elem[i].iLendNum--;
			return 1;
		}
	}

	printf("\n\n对不起,没有这本书!");
	return 0;

}

main()
{
	char ch;
	int flag;
	sqlist sl;
	int iPos;
	ElemType elem;
	char *bname = new char[50];
	char *wname = new char[10];
	char *pname = new char[100];

	printf("\n/******书目管理系统*****/\n");
	printf("\n/******本系统基本操作如下:\n\t0:退出\n\t1:初始化\n\t2:创建\n\t3:输出\n");
	printf("\t4:插入\n\t5:删除\n\t6:按作者查找\n\t7:按书名查找\n\t8:借书\n\t9:还书\n");

	printf("\n请输入操作提示:(0~9)");

	while(1)
	{
		ch = getchar();
		switch(ch)
		{
		case '0':break;
		case '1':
			flag = Init(sl);
			if(flag) printf("\n初始化成功!");
			else printf("\n初始化失败!");
			break;
		case '2':
			flag = Creat(sl);
			if(flag) printf("\n创建成功!");
			else printf("\n创建失败!");
			break;
		case '3':
			OutPut(sl);
			break;
		case '4':
			printf("\n输入插入位置:");
			scanf("%d",&iPos);
			printf("\n输入插入元素:书名\t作者\t出版社\t价格\t总数\n ");
			scanf("%s%s%s%f%d",elem.sBookName,elem.sWriter,elem.sPress,&elem.fPrice,&elem.iTotalNum);
			elem.iLendNum = 0;
			elem.iInventNum = elem.iTotalNum;
			flag = Insert(sl,iPos,elem);
			if(flag) printf("\n插入成功!");
			else printf("\n插入失败!");
			break;
		case '5':
			printf("\n输入删除位置:");
			scanf("%d",&iPos);
			flag = Delete(sl,iPos,elem);
			if(flag) printf("\n删除成功!");
			else printf("\n删除失败!");
			break;
		case '6':
			printf("\n输入书名:");
			scanf("%s",bname);
			flag = FindBook(sl,bname);

			break;
		case '7':
			printf("\n输入作者姓名:");
			scanf("%s",wname);
			FindWriter(sl,wname);
			break;

		case '8':
			printf("\n输入借阅书名");
			scanf("%s",bname);
			LendBook(sl,bname);
			break;

		case '9':
			printf("\n输入归还书名");
			scanf("%s",bname);
			ReturnBook(sl,bname);
			break;

		default:
			continue;
		}

	    printf("\n请输入操作提示:(0~9)");
		
		if(ch == '0')
		{
			delete []sl.elem;
			delete []bname;
			delete []wname;
			delete []pname;
	        exit(1);
		}
	}


}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -