C语言:顺序表简单的图书馆管理系统

目录

1、创建表结构

2、 线性表的初始化

3、输入方法

4、输出方法

5、插入元素

6、删除元素

7、修改元素

8、按序号查询

9、按内容查询

10、项目的执行


1、创建表结构

#include <stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100	
typedef int status;

typedef struct {
	int bookID;//图书标号
	char bookName[20];//图书名称
	double bookPrice;//图书价格
}Book;

typedef Book DataType;//Book下面的各个图书
typedef struct {
	DataType* elem;//类型
	int length;//数量
}BookList;

2、 线性表的初始化

status InitList(BookList* L)//线性表初始化
{
	L->elem = (DataType*)malloc(sizeof(DataType) * MAXSIZE);
	if (!L->length) exit(OVERFLOW);
	L->length = 0;//空表长度为0
	return OK;
}

3、输入方法

void InputList(DataType* e) {//输入方法
	printf("请输入图书编号:\n");
	scanf_s("%d", &e->bookID);
	printf("请输入图书名称:\n");
	scanf_s("%s", &e->bookName);
	printf("请输入图书价格:\n");
	scanf_s("%lf", &e->bookPrice);
}

4、输出方法

void OutputList(DataType* e){//输出方法
	printf("      %d        %s       %.2lf\n", e->bookID, e->bookName, e->bookPrice);
}

5、插入元素

int ListInsert_sq(BookList* L, int i, DataType e) {//插入元素
	if (i<1 || i>L->length + 1)
	{
		printf("插入位置不合法\n");
		return ERROR;
	}
	if (L->length == MAXSIZE)
	{
		printf("顺序表已满,不能插入元素\n");
		return ERROR;
	}
	for (int j = L->length - 1; j >= i - 1; j--) {
		L->elem[j + 1] = L->elem[j];
	}
	L->elem[i - 1] = e;
	L->length++;
	return 1;
}

6、删除元素

int DeleteList(BookList* L, int i, DataType* e) {//删除节点
	int j;
	if (L->length <= 0) {
		printf("顺序表已空不能进行删除\n");
		return 0;
	}
	else if (i<1 || i>L->length) {
		printf("顺序表删除位置不合适\n");
		return -1;
	}
	else {
		*e = L->elem[i - 1];
		for (j = i; j < L->length; j++) {
			L->elem[j - 1] = L->elem[j];
		}
		L->length = L->length - 1;
		printf("删除数据:\n");
		printf("      %d        %s       %.2lf\n", e->bookID, e->bookName, e->bookPrice);
	}
	return 1;
}

7、修改元素

int UpdateList(BookList* L, int i, DataType e) {//修改元素
	int j;
	if (L->length <= 0) {
		printf("顺序表已空不能进行修改\n");
		return 0;
	}
	else if (i<1 || i>L->length) {
		printf("顺序表修改位置不合适\n");
		return -1;
	}
	else {
		L->elem[i - 1] = e;
	}
	return 1;
}

8、按序号查询

int GetList(BookList* L, int i, DataType* e) {//按序号查询数据
	if (i<1 || i>L->length) {
		return -1;
	}
	*e = L->elem[i - 1];
	printf("按序号查询数据:\n");
	printf("      %d        %s       %.2lf\n", e->bookID, e->bookName, e->bookPrice);
	return 1;
}

9、按内容查询

int LocationList(BookList* L, DataType e) {//按内容查询数据
	int i;
	for (i = 0; i < L->length; i++) {
		//!strcmp(bl->elem[i].name,e.name)
		if (!strcmp(L->elem[i].bookName, e.bookName))
		{
			printf("按内容查询数据 :\n");
			printf("      %d        %s       %.2lf\n", L->elem[i].bookID, L->elem[i].bookName, L->elem[i].bookPrice);
			return 1;
		}
	}
	return 0;
}

10、项目的执行

int main() {
	BookList L;
	int n, num, i, flag = 0, nums;
	DataType e;
	do {
		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("请根据提示操作!\n");
		scanf_s("%d", &n);
		switch (n) {
		case 1:
			if (InitList(&L))
				printf("成功建立顺序表\n\n");
			else
				printf("顺序表建立失败\n\n");
			break;
		case 2:
			printf("请输入图书的数量<100: \n");
			scanf_s("%d", &num);
			if (num > 100) {
				printf("===============请按照要求输入=============\n\n\n");
			}
			else {
				for (int i = 0; i < num; i++) {
					printf("第%d种数据:\n", i + 1);
					InputList(&L.elem[i]);//L.elem[i]是DataType 
				}
				L.length = num;
			}
			break;
		case 3:
			printf("当前图书总数为:%d\n", L.length);
			printf("当前顺序表为:\n");
			printf("图书编号  图书名称  图书价格\n");
			for (i = 0; i < L.length; i++) {
				OutputList(&L.elem[i]);
			}
			printf("\n");
			break;
		case 4:
			printf("请输入新增图书的位置:\n");
			scanf_s("%d", &num);
			printf("请输入要新增的图书信息:\n");
			printf("请输入图书编号:\n");
			scanf_s("%d", &e.bookID);
			printf("请输入图书名称:\n");
			scanf_s("%s", &e.bookName);
			printf("请输入图书价格:\n");
			scanf_s("%lf", &e.bookPrice);
			if (InsertList(&L, num, e)) {
				printf("新增数据成功\n");
			}
			else {
				printf("新增数据失败\n");
			}
			break;
		case 5:
			printf("请输入删除图书的位置:\n");
			scanf_s("%d", &num);
			if (DeleteList(&L, num, &e)) {
				printf("删除数据成功\n");
			}
			else {
				printf("删除数据失败\n");
			}
			break;
		case 6:
			printf("请输入修改图书的位置:\n");
			scanf_s("%d", &num);
			printf("请输入要修改的图书信息:\n");
			printf("请输入图书编号:\n");
			scanf_s("%d", &e.bookID);
			scanf_s("请输入图书名称:\n");
			scscanf_sanf("%s", &e.bookName);
			printf("请输入图书价格:\n");
			scanf_s("%lf", &e.bookPrice);
			if (UpdateList(&L, num, e)) {
				printf("修改数据成功\n");
			}
			else {
				printf("修改数据失败\n");
			}
			break;
		case 7:
			printf("==========请输入查询图书信息的类型==========\n");
			printf("1.按位置编号查找\n");
			printf("2.按图书名称查找\n");
			scanf_s("%d", &num);
			if (num == 1) {
				printf("输入查询位置编号:\n");
				scanf_s("%d", &nums);
				if (GetList(&L, nums, &e)) {
					printf("查询数据成功\n");
				}
				else {
					printf("查询数据失败\n");
				}
			}
			else if (num == 2) {
				printf("输入查询图书名称:\n");
				scanf_s("%s", &e.bookName);
				if (LocationList(&L, e)) {
					printf("查询数据成功\n");
				}
				else {
					printf("查询数据失败\n");
				}
			}
			else {
				printf("请输入正确的编号\n");
			}
			break;
		case 0:
			flag = 1;
			printf("你已退出了此系统\n");
			break;
		default:
			printf("请输入正确的数字\n");
			break;
		}
	} while (flag != 1);
	return 0;
}

  • 8
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小郭同学忒骚了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值