中易网

C++:图书管理系统设计

答案:2  悬赏:0  
解决时间 2021-11-24 16:51
1、问题描述
定义图书类,属性有:书名、出版社、ISBN号、作者、库存量、价格等信息和相关的对属性做操作的行为。
主要完成对图书的销售、统计和图书的简单管理。
2、功能要求
(1)销售功能。购买书籍时,输入相应的ISBN号,并在书库中查找该书的相关信息。如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示信息,结束购买。
(2)图书简单管理功能。
添加功能:主要完成图书信息的添加,要求ISBN号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加。
查询功能:可按书名、ISBN号、作者、出版社进行查询。若存在相应信息,输出所查询的信息,若不存在该记录,则提示“该标题不存在!”。
修改功能:可根据查询结果对相应的记录进行修改,修改时注意ISBN号的唯一性。
删除功能:主要完成图书信息的删除。输入要删除的ISBN号,根据编号删除该物品的记录,如果该编号不在物品库中,则提示“该编号不存在”。
(3)统计功能。
输出当前书库中所有图书的总数及详细信息;可按书的价格、库存量、作者、出版社进行统计,输出统计信息时,要按从大到小进行排序。
(7)图书存盘:将当前程序中的图书信息存入文件中。
(8)读出信息:从文件中将图书信息读入程序。
最佳答案
以前做的,可以参考一下

//***********************
//图书馆管理系统
//***********************
#include
#include
#include
#define null 0
#define max 65536
static int n;
//*********************
// 图书结构体
//*********************
typedef struct
{
char num[10]; //书号
char name[9]; //书名
char addr[31]; //作者
int Nowcounter; //现存量
int Allcounter; //总库存量
}datatype;
datatype *x[max]; //定义两个指针数组
datatype *p;

//*****************************
//图书功能函数列表
//*****************************
void redo(); //主递归函数
void creatlist(datatype *x[]); //图书建立函数
int menu_select(); //功能菜单函数
void find(datatype *x[],int n); //查找函数
void delnode(datatype *x[]); //插入函数
void printlist(datatype *x[]); //显示函数
void jieyue(datatype *x[],int n); //借阅函数
void guihuan(datatype *x[],int n); //归还函数
//*****************************
//主递归函数程序
//*****************************
void redo()
{
int i=0,j,n1,k=0,flage;
for( ; ;)
{
switch( menu_select())
{
case 1: //选项1的实现
printf("***********************\n");
printf("* 图书的建立 *\n");
printf("***********************\n");
creatlist(x);
break;
case 2: //选项2的实现
printf("***********************\n");
printf("* 新图书信息的添加 *\n");
printf("***********************\n");
printf(" 插入的个数:");
scanf("%d",&n1); //输入插入新图书的个数
for(i=0;iname); //输入插入书的书名
if(flage==0)
{
for(j=0;jname,p->name) == 0 )//调用比较函数查看书名是否已知
{
x[j]->Allcounter++;
x[j]->Nowcounter++;
flage=1;
}

}

if(flage==0)
{
n++;
printf(" 第 %d 个图书数据:\n",n); //插入新的图书
p=(datatype *)malloc(sizeof(datatype));
x[n-1]=p;
printf(" 书名:");
scanf("%s",x[n-1]->name); //输入书名
printf(" 编号:");
scanf(" %s",x[n-1]->num); //输入书号
printf(" 作者:");
scanf(" %s",x[n-1]->addr); // 输入作者名
printf(" 总库存量: ");
scanf("%d",&x[n-1]->Allcounter); //输入总库存量
x[n-1]->Nowcounter=x[n-1]->Allcounter;
}
}
}
break;
case 3:
printf("***********************\n");
printf("* 图书信息的查询 *\n");
printf("***********************\n");
find(x,n);
break;
case 4:
printf("************************\n");
printf("* 图书信息的删除 *\n");
printf("************************\n");
delnode(x);
break;
case 5:
printf("************************\n");
printf("* 图书信息的显示 *\n");
printf("************************\n");
printlist(x);
break;
case 6:
printf("************************\n");
printf(" 图书的借阅\n");
printf("************************\n");
jieyue(x,n);
break;
case 7:
printf("************************\n");
printf(" 图书的归还\n");
printf("************************\n");
guihuan(x,n);
break;
case 0:
printf("\t 谢谢使用,再见! \n");
return;
}
}
}
//*************************
//主函数程序
//*************************
void main ()
{
redo(); //调用主递归函数
}
//*************************
//功能菜单函数
//*************************
int menu_select()
{
int i;
printf(" 欢迎进入图书管理系统!\n");
printf("===========================\n");
printf(" 1. 图书信息的采集\n");
printf(" 2. 新图书的插入\n");
printf(" 3. 图书信息的查询\n");
printf(" 4. 图书的删除\n");
printf(" 5. 图书的显示\n");
printf(" 6. 图书的借阅\n");
printf(" 7. 图书的归还\n");
printf(" 0. 退出管理系统\n");
printf("===========================\n");
printf(" 请选择0-7: ");
scanf("%d",&i);
while(i<0||i>7)
{
printf("\n\t输入出错,重选0-7: ");
scanf("%d",&i);
}
return i;
}
//********************************
// 建立链表图书建造函数
//********************************
void creatlist(datatype *x[])
{
int i;
printf(" 请输入要建立图书的个数:");
scanf("%d",&n);
for(i=0;iname);
printf(" 编号:");
scanf(" %s",x[i]->num);
printf(" 作者:");
scanf(" %s",x[i]->addr);
printf(" 总库存量: ");
scanf("%d",&x[i]->Allcounter);
x[i]->Nowcounter=x[i]->Allcounter;
}
}

//**********************************
// 查找函数程序
//*********************************
void find(datatype *x[],int n)
{

char num[10];
char name[9];
int t,i;
printf("=================\n"); //输出查找方式
printf(" 1.按编号查询 \n");
printf(" 2.按书名查询 \n");
printf("=================\n");
printf(" 请选择 : ");
scanf("%d",&t); //输入选择信息
if(t==1)
{
printf(" 请输入要查找者的编号: ");
scanf("%s",num); //输入书号
for(i=0;inum,num)==0) //调用strcmp函数
{
printf(" 编号 书名 作者 现库存量 总库存量\n"); //输出要查询书的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
else
{
printf(" 请输入要查询的书名: ");
scanf("%s",name); // 输入书名
for(i=0;iname,name)==0)
{
printf("编号 书名 作者 现库存量 总库存量\n"); //输出要查询书的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
}
//******************************
//删除函数程序
//******************************
void delnode(datatype *x[])
{
char num1[10],name1[10]; //定义两个字符数组
int i,j,m=1,p;
printf(" 1.按编号删除\n"); //输出选择方式
printf(" 2.按书名删除\n");
printf(" 3.返回\n");
printf(" 请选择:\n");
scanf("%d",&p); //输入选择信息
if(p>3||p<1)
{
printf(" 您的输入有误,请重新输入!\n");
scanf("%d",&p); //重新输入选择信息
}
switch(p) //实现删除程序
{
case 1:
printf(" 输入要删除书的编号:\n");
scanf(" %s",num1);
for(i=0;inum,num1)==0) //调用strcmp函数
{
m=0;
n--;
for(j=i;jname,name1)==0) //调用strcmp函数
{
m=0;
n--;
for(j=i;j3||p<1)
{
printf(" 您的输入有误!\n");
scanf("%d",&p); //重新输入选择信息
}
switch(p) //实现查询程序
{
case 1:
printf(" 请输入你要的书的名字!\n");
scanf("%s",&name1); // 输入书名
for(i=0;iname,name1)==0) //调用strcmp函数
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--;
printf(" 借书成功!\n");
if(x[i]->Nowcounter==0)
printf(" 这本书已经没有了 \n");
}
}
if(m==1)
printf(" 您要的书不存在!\n");
break;
case 2:
printf(" 请输入你要的书的编号!\n");
scanf("%s",&num1); // 输入书号
for(i=0;inum,num1)==0) //调用strcmp函数
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--; //现存书数量减1
printf(" 借书成功!\n");
if(x[i]->Nowcounter==0)
printf(" 这本书已经没有了 \n");
}
}
if(m==1)
printf(" 您要的书不存在!\n");
break;
case 3:
break;
}
}
///////////////////////
/////归还程序
//////////////////////
void guihuan(datatype *x[],int n)
{
int i,q,m=1;
char name1[10],num1[10]; //定义两个字符数组
printf(" 1.按书名归还\n"); //输出可选择方式
printf(" 2.按书号归还\n");
printf(" 3.返回\n");
printf(" 请选择\n");
scanf("%d",&q); //输入选择信息
if(q>3||q<1)
{
printf(" 您的输入有误!\n");
scanf("%d",&q); //重新输入选择信息
}
switch(q) //实现归还程序
{
case 1:
printf(" 输入归还书的书名: ");
scanf("%s",&name1); // 输入书名
for(i=0;iname,name1)==0)
{
m=0;
x[i]->Nowcounter++;
printf("此书归还成功!\n");
printf("此书的存储情况\n");
printf("编号 书名 作者 现存量 总存量\n");
printf("===============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("===============================================\n");
}
if(strcmp(x[i]->name,name1)==0)
continue;
}
if(m==1)
printf("此书不是图书馆的!\n");
break;
case 2:
printf("输入归还书的书号\n");
scanf("%s",&num1); // 输入书号
for(i=0;inum,num1)==0)
{
m=0;
x[i]->Nowcounter++; //显存书增加1
printf("此书归还成功!\n");
printf("此书的存储情况\n");
printf("编号 书名 作者 现存量 总存量\n");
printf("==============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("==============================================\n");
}
if(strcmp(x[i]->num,num1)==0) //调用strcmp函数
continue;
}
if(m==1)
printf("此书不是图书馆的!\n");
break;
case 3:
break;
}
}
//**************************************
// 输出程序
//**************************************
void printlist(datatype *x[])
{
int i;
printf("编号 书名 作者 现存量 总存量\n"); //输出图书各项信息
for(i=0;inum,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
printf("===============================================\n");
}
求采纳为满意回答。
全部回答
我暂时保留我的看法!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
请问容声冰箱问题不制冷怎么处理?
如何把折扇扇面取下来
崆嵌的意思是什么?崆嵌的释义是什么啊?
侧注的意思是什么啊?请解释下!
人陳的意思是什么?人陳的释义是什么啊?
成人顺尔宁是否属于医保
在水溶液中,若知道醋酸钠浓度,知道其kb,求
七星彩是几选几?
梦100万里日月觉醒是怎样
管多的意思是什么啊?请解释下!
望江社区居委会地址在哪,我要去那里办事
早上6点多一块鸟屎掉在头上,有什么不好的兆
不以规矩不成方圆是谁说的
冯家湾社区居委会地址有知道的么?有点事想过
福州有定制班车吗
推荐资讯
电工测量中广泛应用_ ____ _方法扩大电表测量
名士的意思是什么啊?请解释下!
手机内存是两个G的,可是QQ就1.7G,其他应用
跪求逆鳞大大的《海蓝蔷薇》1、2的完整版及番
离婚后想接孩子星期来住两天,他没回答怎么办?
南巢的意思是什么啊?请解释下!
莎拉齐潘安门广场的建筑是多少年
六安供电公司光明路供电营业厅办公地址在什么
双流县烟草专卖局华阳烟草专卖监督管理所地址
鸳鸿的意思是什么啊?请解释下!
丰县公安局孙楼派出所地址在什么地方,想过去
云起雪飞的意思是什么啊?请解释下!
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?