Function:
增add_book()
删delete_book()
改modify_book()
查check_book()


    实现吧!

**************************/
#include<stdio.h>//里面包括标准的输入输出,以及perror(“fail to open”)这样的用法
#include<string.h>
#define COUNT_SIZE 120 //此处为符号常量,注意这里没有分号,也可以用typedef定义,只能为类型的定义;
#define OK 0
#define ERROR 1
typedef char string[20];
//定义一组数据类型
struct book{
int number; //图书编号
int count; //图书数量
int price; //图书价格
string name; //图书名称
};
struct list{
struct book Book[COUNT_SIZE];//定义顺序表要存储的数据,也可以是简单的int类型或者char,float,double等基本数据类型
int length;
};
typedef struct list List;//为结构体struct list 取一个别名List
//定义以下操作名称,为什么有的要加
指针操作符,因为这些操作将要修改数据的结构,所以需要传地址
void init(List *L);//初始化操作
int add_book(List *L);//增加一本书
int delete_book(List *L);//删除一本书,
int modify_book(List *L);//修改书的属性
int is_empty(List L);//判断书的数量是否为空
int is_full(List L);//判断书的数量是否达到了极限
int findbookname(List L,string name);//根据书名查找书籍的位置
int findbooknumber(List L,int num);//根据书的编号查找书籍的位置
int count_book(List L);//计算出总数
void travel(List L);//遍历整个顺序表
//以下为每个函数的实现
void init(List * L)//初始化函数,使顺序表的长度为0
{
L->length=0;
}
int add_book(List *L)//增加一本书
{
if(is_full(*L)){
printf(“对不起,数量已经达到了极限,不能再继续添加”);
return ERROR;
}
printf(“输入要添加书籍的名称:”);
scanf("%s",&(L)->Book[L->length].name);
printf(“输入要添加书籍的编号:”);
scanf("%d",&(L)->Book[L->length].number);
printf(“输入要添加书籍的数量:”);
scanf("%d",&(L)->Book[L->length].count);
printf(“输入要添加书籍的价格:”);
scanf("%d",&(L)->Book[L->length].price);
printf("\n添加结束@-@\n");
L->length++;//长度加1
return OK;
}
int delete_book(List *L)//删除一本书
{
int check,num;
string book_name;
if(is_empty(*L)){
printf(“书籍为空,无法完成删除操作@-@\n”);
return ERROR;
}
set1://标号,goto语句跳转到这里
printf(“你想根据1.书籍名称、还是2.编号删除?请输入如下选项:”);
scanf("%d",&check);
switch(check)
{
case 1:
printf(“根据书名来删除操作”);
scanf("%s",book_name);
strcpy(L->Book[findbookname(*L,book_name)].name,"");//调试了好久好久,其中包括了双引号和单引号以及NULL的区别,
//NULL表示空指针,空指针不能作为拷贝函数的参数
L->Book[findbookname(*L,book_name)].count = 0;
L->Book[findbookname(*L,book_name)].number = 0;

    L->Book[findbookname(*L,book_name)].price = 0;
break;
case 2:printf("根据书的编号来进行操作");scanf("%d",&num);strcpy(L->Book[findbooknumber(*L,num)].name,"");L->Book[findbooknumber(*L,num)].count = 0;L->Book[findbooknumber(*L,num)].number = 0;L->Book[findbooknumber(*L,num)].price = 0;
break;
default:printf("输入数据错误,重新输入:");goto set1;
}
L->length--;
return OK;

}
int modify_book(List *L)//修改书的属性
{
string name;
int count;
int number;
int price;
printf(“请输入需要修改的书名:\n”);
scanf("%s",&name);
printf(“请输入书的数量:\n”);
scanf("%d",&count);
//printf("%d",findbookname(*L,name));测试下标是否正确
L->Book[findbookname(*L,name)].count = count;
printf(“请输入书的编号: \n”);
scanf("%d",&number);
L->Book[findbookname(*L,name)].number = number;
printf(“请输入书的价格: \n”);
scanf("%d",&price);
L->Book[findbookname(*L,name)].price = price;
printf(“请输入新的名称: \n”);
scanf("%s",L->Book[findbookname(*L,name)].name);//此处花费我10分钟时间排错,我此时如果修改了name,那么
//接下来的findbookname()中参数也会变化,所以不对
printf(“修改结束! @-@”);
return OK;
}
int check_book(List L)//查看一本书是否存在
{
string name;
if(is_empty(L)){
printf(“书籍为空,无法查询!@-@\n”);
return ERROR;
}
printf(“请输入书名”);
scanf("%s",&name);
// findbookname(L,name)>0?printf("%s存在\n",name):printf("%s不存在\n",name);//等效的三元运算符
if(findbookname(L,name)<0)//判断根据书名查找书的位置,返回书的位置
{
printf("%s不存在\n",name);
}
else
printf("%s存在\n",name);
return OK;
}
int is_empty(List L)//判断书的数量是否为空
{
if(L.length<0)
{
return ERROR;//返回1
}
else
return OK;//返回0
}
int is_full(List L)//判断书的数量是否达到了极限
{
if(L.length == COUNT_SIZE)
return ERROR;
else
return OK;
}
int findbookname(List L,string name)//根据书名查找书籍的位置
{
int times;//记录查找的位置
if(is_empty(L)){
printf(“书籍为空,无法查询!@-@\n”);
return ERROR;
}
for(times = --L.length; times >= 0;times–)
{
if(strcmp(L.Book[times].name,name)0)
{
return times;
}
}
return ERROR;
}
int findbooknumber(List L,int num)//根据书的编号查找书籍的位置
{
int times;//记录查找的位置
if(is_empty(L)){
printf(“书籍为空,无法查询!@-@\n”);
return ERROR;
}
for(times = L.length-1; times >= 0;times–)
{
if(L.Book[times].numbernum)
{
return times;
}
}
return ERROR;
}
void travel(List L)//遍历整个顺序表
{
int times = L.length;
while(times–>0)
{
printf(“第%d本书:\n”,times+1);
printf(“数量是:%d\n”,L.Book[times].count);
printf(“名称是:%s\n”,L.Book[times].name);
printf(“价格是:%d\n”,L.Book[times].price);
printf(“编号是:%d\n”,L.Book[times].number);
}
return ;
}
int count_book(List L)//计算出总数
{
printf(“一共有%d本\n”,L.length);
return OK;
}
// 以下为测试函数
int main(void)
{
List list; //定义一个顺序表
init(&list);
add_book(&list); //增加操作
travel(list);
modify_book(&list); //修改操作
travel(list);
check_book(list); //查询操作
delete_book(&list); //删除操作
travel(list); //遍历操作
count_book(list); //计算总数
}

用C语言写的一个顺序表实现图书馆书籍管理相关推荐

  1. 约瑟夫环c语言代码顺序存储,顺序表实现约瑟夫环地问题,C语言.doc

    顺序表实现约瑟夫环地问题,C语言 计算机科学与工程学院 PAGE PAGE 2 <算法与数据结构>试验报告 计算机科学与工程学院 <算法与数据结构>试验报告[一] 专业班级 1 ...

  2. C语言实现了一个顺序栈(附完整源码)

    C语言实现了一个顺序栈 顺序栈 顺序栈结构示意图如下 C语言实现了一个顺序栈完整源码 顺序栈 用一段连续的存储空间来存储栈中的数据元素,比较常见的是用数组来实现顺序栈 顺序存储结构:1.元素所占的存储 ...

  3. C语言实现了一个顺序表(附完整源码)

    C语言实现了一个顺序表 顺序表 顺序表的概念 顺序表的存储结构 C语言实现了顺序表完整源码 顺序表 顺序表的概念 顺序表是线性表的顺序存储结构,加按顺序存储方式构造的线性表的存储结构. 说明:对于n个 ...

  4. c语言中怎么暂停一个一个游戏,求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束...

    求助:最近在linux下用c语言写了一个贪吃蛇程序,有几个问题,第一:贪吃蛇怎么实现暂停,第二:有时候同时输入上下左右中的两个键就会直接游戏结束 /* 以下是主要的逻辑代码,还有些.c和.h就没发了 ...

  5. 万年历c语言大作业实验,用C语言写的一个万年历

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. #include #include int input(); void re_year(i ...

  6. 用c语言写出一个金字塔

    如何用c语言写出一个金字塔 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main(){int i;//用户想要的层数int ...

  7. 如何用C语言写出一个微信群聊机器人

    要用 C 语言写出一个微信群聊机器人,您需要先了解微信群聊的相关信息和 C 语言的编程知识. 首先,微信群聊是通过微信服务器进行通信的,因此您需要了解如何通过网络协议与微信服务器进行通信.微信群聊使用 ...

  8. c语言哈希表电子辞典_C语言实现的哈希表实现程序

    下面我们一起来看一个C语言实现的哈希表实现程序了,这个程序没有过多的说明只是一个例子,大家有兴趣可以进入看看或测试一下. 为了巩固一下链表知识,自己实现的一个哈希表,在GCC 4.4.7下编译通过: ...

  9. 用顺序表实现学生信息管理系统

    用顺序表实现学生信息管理系统 问题描述: 定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息: (2) 逐个显示学生表中所有学生的相关信息 ...

最新文章

  1. SQLserver创建与主外键的看法
  2. BI工具升级动态增量新功能,让大数据量入集市更便捷
  3. 用“连接”勾勒角色:《死亡搁浅》亡人的设计及其背后的故事谜题
  4. 桥梁在线计算机监测系统,桥梁在线监测系统
  5. MYSQL描述选课系统的问题与_mysql+php实现选课系统中遇到的问题及解决方法
  6. 14c语言合并两个字符串,C语言编程实现,将给定字符串中连续出现3次的小写字母替换为改小写字母在字母表中的下一个字母...
  7. Busybox是什么?
  8. pthread 立即停止线程_iOS多线程:『pthread、NSThread』详尽总结
  9. 泰山JDK8升级u302,找到了更好的整合mips办法
  10. 【作图】origin制作图中图
  11. 打坐是开发潜能的快速方法
  12. ATFX:非农就业报告来袭,美元指数或再迎剧烈波动
  13. USB转串口芯片CH340G的使用,3.3V或5V供电电路
  14. Windows——卸载MinGW的方法
  15. 35+了,发奋读书改变命运,还有机会吗?
  16. YOLO系列算法原理介绍
  17. 7-14 电话聊天狂人 (25分) 【map】
  18. 一些关于保研夏令营的心得体会!
  19. 《数据清洗》8.3.8 加载电影数据至电影维度表
  20. 安卓android studio传感器编程入门demo读懂就通1分钟跑通掌握最多需要三十分钟

热门文章

  1. C++软件开发工程师笔试题
  2. 天猫淘宝企业服务为中小微企业打造供应链智能协同网络,让采购不再将就!丨爱分析报告
  3. 2022年蓝桥杯模拟:求最小的转化为16进制之后,是原数的倍数
  4. Windows 10 安装FileZilla server 中文版 0.9.46 局域网FTP
  5. 学计算机的一定要看啊(各种计算机学习视频)
  6. 关于未来几年家庭信息通讯的几点遥想
  7. excel多表格数据汇总如何实现
  8. HDU 4997 Biconnected (状态压缩DP)
  9. 服务器ddos压力测试注意事项及常用工具
  10. PB powerbuilder timing类