📄 booklist.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 + -