图书管理系统(跑路人笔记)C实现

前言

我也不知道为啥我学食品的也要学C语言,甚至下学期还要学大物绝了。
写这篇文章的原因也很简单,我见了太多来问我的同学了所以我干脆将我的代码给大家,如果你会一些C语言的话这篇文章的东西你可以的代码可以改改交上去给你省一些事情,如果你不会C语言的话,我估计也没办法了,建议改改我的菜单然后就交吧,混个及格分应该还是够的(如果要求差别不大的话)
不多说了我直接把代码贴上来也不分文件啥的了。

我实现的要求

在这里插入图片描述
注:博主也偷懒了比如我们的时间是直接用字符串的比较实现的虽然知道不对但是我实在懒得改了,因为我感觉我的老师也不会看有这时间不如看看C++的知识🤦‍♂️。

代码(直接复制到你的VS内即可)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>

#define NAMEAUTHOR_MAX 30//作者名
#define NAMEBOOK_MAX 30//书名
#define PRESS_MAX 20//出版社名
#define TIME_MAX 30
#define PEOPLE_MAX 5
#define CAPACITY_SZ 5
#define ADD_SZ 3
#define CODE_MAX 30//条形码
//姓名、性别、年龄、电话、住址
typedef struct Book
{
   
	char name_book[NAMEBOOK_MAX];//书名
	char name_author[NAMEAUTHOR_MAX];//作者名
	char barcode[CODE_MAX];//条形码
	char press[PRESS_MAX];//出版社
	char time[TIME_MAX];//出版日期
	int price;//价格
	int inventory;//库存
}Book;//存放一个人的结构体
typedef struct contact
{
   
	Book* date;//动态管理需要使用指针
	int capacity;//用于存放容量
	int sz;//个数
}contact;
void InitContact(contact* pc);//初始化
void AddContact(contact* pc);//增加图书功能
void ShowContact(contact* pc);//展示所有图书功能
void SortContact(contact* pc);//排序功能的实现--包含所有排序
void DelContact(contact* pc);//删除图书功能的实现
void Clear_Every(contact* pc);//清除所有图书的实现
void DestoryContact(contact* pc);//对开辟空间进行销毁
void SearchContact(contact* pc);//查找图书
void ModifyContact(contact* pc);//改变图书信息
void SaveContact(contact* pc);//保存数据到文件中
void CheckContact(contact* pc);//内部函数用于扩容时的内存检查
void Statistics(contact* pc);//用于检索特殊情况图书
void menu()
{
   
	printf("*********************************\n");
	printf("*****1.ADD    2.DEL  3.SEARCH ***\n");
	printf("*****4.MODIFY 5.SHOW 6.SORT *****\n");
	printf("**  7.CLEAR_EVERY 8.Statistical *\n");
	printf("************  0.EXit  ***********\n");
	printf("*********************************\n");
	printf("*********************************\n");
}
enum Opinion
{
   
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT,
	CLEAR_EVERY,
	Statistical,
};
int main()
{
   
	contact con = {
    0 };
	//结构体初始化
	InitContact(&con);
	//功能实现
	int input = 0;

	do
	{
   
		menu();
		printf("请输入想要的功能:>");
		scanf("%d", &input);
		switch (input)//通讯录功能
		{
   
		case CLEAR_EVERY:
			Clear_Every(&con);
		case ADD:
			AddContact(&con);
			break;
		case SORT:
			SortContact(&con);
			break;
		case DEL:
			DelContact(&con);
			break;
		case SHOW:
			ShowContact(&con);
			break;
		case MODIFY:
			ModifyContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case Statistical:
			Statistics(&con);
			break;
		case EXIT:
			SaveContact(&con);//将信息保存到文件中,关闭文件并将文件指针NULL化
			DestoryContact(&con);//动态指针NULL化free动态内存
			printf("退出成功");
			break;

		default:
			printf("输入错误\n");
			break;
		}
	} while (input);
	return 0;
}
void LoadContact(contact* pc)
{
   
	FILE* p = fopen("book.dat", "r");
	if (p == NULL)
	{
   
		perror("LoadContact");
		return;
	}
	Book tmp = {
    0 };
	while (fread(&(pc->date[pc->sz]), sizeof(Book), 1, p))
	{
   
		pc->sz++;
		CheckContact(pc);
	}
	fclose(p);
	p = NULL;
}
void InitContact(contact* pc)
{
   
	assert(pc);
	pc->date = (Book*)calloc(CAPACITY_SZ, sizeof(Book)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

就一个挺垃圾的跑路人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值