C语言图书馆管理系统

news2024/9/21 23:28:53

以下是系统部分页面

以下是部分源码,需要源码的私信

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<malloc.h>

typedef struct
{
	char student_name[100];
	char student_number[100];
	char password[100];
	int total_borrow;//学生可借
	int now_borrow;//已借
}student;
student student_List[100];//使用全局循序表--临时
student student_List_file[100];//使用全局循序表//用来更新文件中的数据
typedef struct node
{
	char book_name[100];  //书名
	char book_number[100];//书编号
	char book_author[100];//书的作者
	char book_classify[100];//书的分类
	int book_amount;//总库存
	int book_now_amount;//当前库存
	node* nxet;
}Lnode, * Hnode;//创建链表
Lnode L;    //创建一个链表//定义全局变量
int choose_()//定义选择函数——后期只需要进行调用就行--不需要重复写
{
	while (1)
	{
		printf("请输入你的选择:");
		int c;
		scanf("%d", &c);
		printf("\n");
		if (c == 1)
		{
			return 1;
		}
		else if (c == 2)
		{
			return 2;
		}
		else if (c == 3)
		{
			return 3;
		}
		else if (c == 0)
		{
			return 0;
		}
		else if (c == 4)
		{
			return 4;
		}
		else if (c == 5)
		{
			return 5;
		}
		else if (c == 6)
		{
			return 6;
		}
		else
		{
			printf("输入错误,请重新输入\n");
		}
	}

}

int InitList(Lnode& L)     //初始化链表
{
	Lnode* p = (Lnode*)malloc(sizeof(Lnode));
	if (!p)
	{
		printf("创建链表失败\n");
		return -1;
	}
	L.nxet = NULL;    //创建一个头结点
	return 0;
}
int calculate_file_count()//先遍历一遍得到book中的所有数据得到count
{
	char book_name[100], book_number[100], author[100], book_classify[100];
	int books, now_book;
	FILE* fp = fopen("./book.txt", "r");
	if (!fp)
	{
		printf("打开book.txt失败\n");
		return -1;
	}
	int count = 0;
	while (fscanf(fp, "%s%s%s%s%d%d", book_name, book_number, author, book_classify, &books, &now_book) != EOF)//取出数据
	{
		count++;//计算文件中的书本信息
	}
	fclose(fp);
	return count;
}
int Initdata(Lnode& L)   //初始化数据
{
	FILE* fp = fopen("./book.txt", "r");
	int a = calculate_file_count();//先遍历一遍得到book中的所有数据得到count
	Lnode* p, * q;
	p = &L;  //头结点不存储数据
	for (int i = 0; i < a; i++)
	{
		q = (Lnode*)malloc(sizeof(Lnode));
		if (!q)
		{
			printf("创建链表失败\n");
			return -1;
		}
		fscanf(fp, "%s%s%s%s%d%d", q->book_name, q->book_number, q->book_author, q->book_classify, &q->book_amount, &q->book_now_amount);
		/*book_name, book_number, author, book_classify, &books, &now_book*/
		p->nxet = q;//头结点不存储数据
		p = q;
	}
	p->nxet = NULL;
	fclose(fp);
	return 0;
}
void Lise_combination()//程序开始前需要创建链表将图书信息全部加载--就得先使用该函数
{
	InitList(L);
	Initdata(L);
}
void seek_interface()
{
	printf("**************************\n");
	printf("****你想按哪种查找图书******\n");
	printf("********1:书名查找*********\n");
	printf("********2:分类查找*********\n");
	printf("********3:作者查找********\n");
	printf("********0:退出********\n");
	printf("**************************\n");
}
int Getelem(Lnode& L)   //查找元素
{
	seek_interface();
	int a = choose_();//分为三种查找
	Lnode* p = L.nxet;//头指针不存储数据
	if (a == 1)//书名查找
	{
		printf("请输入你想查找的书名:");
		char bookname[100];
		scanf("%s", bookname);
		while (p != NULL)
		{
			if (strcmp(bookname, p->book_name) == 0)
			{
				printf("找到该图书\n");
				printf("书名:%s\n书的编号:%s\n作者:%s\n分类:%s\n总库存:%d\n现存:%d", p->book_name, p->book_number, p->book_author, p->book_classify, p->book_amount, p->book_now_amount);
				printf("\n");
				return 0;
			}
			p = p->nxet;
		}
		printf("未找到该图书\n");
		return -1;
	}
	else if (a == 2)//可能一个分类有多本书
	{

		printf("有以下分类:教育科学,文学,医药卫生\n");
		printf("请输入你想查找的分类:");
		char bookclassify[100];
		scanf("%s", bookclassify);
		int seek_count_classi = 0;
		while (p != NULL)
		{
			if (strcmp(bookclassify, p->book_classify) == 0)
			{
				printf("找到该图书\n");
				printf("书名:%s\n书的编号:%s\n作者:%s\n分类:%s\n总库存:%d\n现存:%d", p->book_name, p->book_number, p->book_author, p->book_classify, p->book_amount, p->book_now_amount);
				printf("\n");
				seek_count_classi++;
			}
			p = p->nxet;

		}
		if (seek_count_classi==0)
		{
			printf("未找到该图书\n");
		}

		return -1;
	}
	else if (a == 3)//一个作者有多本书
	{
		printf("请输入你想查找作者:");
		char authorname[100];
		scanf("%s", authorname);
		int seek_count_author = 0;
		while (p != NULL)
		{
			if (strcmp(authorname, p->book_author) == 0)
			{
				printf("找到该图书\n");
				printf("书名:%s\n书的编号:%s\n作者:%s\n分类:%s\n总库存:%d\n现存:%d", p->book_name, p->book_number, p->book_author, p->book_classify, p->book_amount, p->book_now_amount);
				printf("\n");
				seek_count_author++;
			}
			p = p->nxet;
		}
		if (seek_count_author==0)
		{
			printf("未找到该图书\n");
		}
		return -1;
	}
	else if (a == 0)
	{
		printf("退出该界面\n");
	}

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【一刷《剑指Offer》】面试题 46:求 1+2+...+n

力扣对应题目链接&#xff1a;LCR 189. 设计机械累加器 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;求123...n_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》对应内容 二、分析题目 通常实现递归的时候我们都会利用条件判断语句来决定递归的出…

计算机体系结构||Cache性能分析(4)

实验4 Cache性能分析 4.1实验目的 &#xff08;1&#xff09;加深对Cache基本概念、基本组织结构以及工作原理的理解。 &#xff08;2&#xff09;掌握Cache容量、相关度、块大小对Cache性能的影响 &#xff08;3&#xff09;掌握降低Cache不命中率的各种方法以及它们对提高…

初识网络基础知识

关于网络的一些核心概念 局域网 局域网&#xff08;Local Area Network&#xff0c;简称LAN&#xff09;是一种计算机网络&#xff0c;覆盖的范围通常是相对较小的地理区域&#xff0c;比如一个办公室、一栋大楼或一个校园。 局域网的组成通常包括以下部分&#xff1a; 网络…

Docker Desktop Windows 目录介绍

D:\docker\DockerDesktopWSL\main\ext4.vhdx 和 D:\docker\DockerDesktopWSL\data\ext4.vhdx 是 Docker Desktop 在 Windows Subsystem for Linux&#xff08;WSL&#xff09;中使用的虚拟硬盘文件&#xff0c;它们有不同的用途和作用。 虚拟硬盘文件&#xff08;VHDX&#xf…

生成式多模态之AE DAE/MAE VAE VQ-VAE/VQ-VAE2

目录 1. AE2. DAE/MAE3. VAE4. VQ-VAE/VQ-VAE2生成式多模态发展主要历程 年份1月2月3月4月5月6月7月8月9月10月11月2020DETRDDPMDDIM、VisionTransformer2021CLIP、DALLESwin Transformer2022BLIPDALLE 2StableDiffusion、BEiT-3、Midjourney V32023BLIP2VisualChatGPT、Midjou…

linux内核中list的基本用法

内核链表 1 list_head 结构 为了使用链表机制&#xff0c;驱动程序需要包含<linux/types.h>头文件&#xff0c;该文件定义了如下结构体实现双向链&#xff1a; struct list_head {struct list_head *next, *prev; };2 链表的初始化 2.1 链表宏定义和初始化 可使用以…

AES算法概述

文章目录 一、AES 概述二、AES 加密算法的特点三、秘钥类型四、填充方式五、加密方式 一、AES 概述 二、AES 加密算法的特点 AES加密的数据块长度为128&#xff08;16字节&#xff09;&#xff0c;长度不足需要填充。密码长度可以为16,24,32字节。 三、秘钥类型 AES加密按秘…

【科大讯飞笔试题汇总】2024-07-20-科大讯飞秋招提前批(算法岗)-三语言题解(Cpp/Java/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 ✨ 本系列打算持续跟新 秋招笔试题 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边最…

基于java+springboot+vue实现的企业OA管理系统(文末源码+Lw)131

基于SpringBootVue的实现的企业OA管理系统&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 企业OA管理系统有管理员和用户。 管理员功能有个人中心&#xff0c;用户管理&#xff0c;公告信息管理&#xff0c;客户关系管理&…

【nnUNet V2系列】nnUNet V2在Ubuntu下安装调试篇

安装之前网上很多教程&#xff0c;很多是nnUNet V1的安装过程&#xff0c;有的V1和V2混在一起讲解&#xff0c;导致V1的转化指令用到V2中&#xff0c;产生不少误解。这篇是针对V2整理出来的安装过程&#xff0c;有什么不妥之处请指出会及时修改。 1. 创建虚拟环境 conda crea…

某4G区域终端有时驻留弱信号小区分析

这些区域其实是长时间处于连接态的电信卡4G终端更容易出现。 出现问题时都是band1 100频点下发了针对弱信号的1650频点的连接态A4测量事件配置&#xff08;其阈值为-106&#xff09;。而这个条件很容易满足&#xff0c;一旦下发就会切到band3 1650频点。 而1650频点虽然下发ban…

Visual Studio 2022美化

说明&#xff1a; VS版本&#xff1a;Visual Studio Community 2022 背景美化 【扩展】【管理扩展】搜索“ClaudiaIDE”&#xff0c;【下载】&#xff0c;安装完扩展要重启VS 在wallhaven下载壁纸图片作为文本编辑器区域背景图片 【工具】【选项】搜索ClaudiaIDE&#xff…

手机数据恢复技巧:适用于 Android 的恢复应用程序

发现自己意外删除了 Android 设备上的照片&#xff0c;这让人很痛苦。这些照片可能是值得纪念的文件&#xff0c;会让您想起一些难忘的回忆。删除它们后&#xff0c;您知道如何恢复它们。在这种情况下&#xff0c;您需要使用 Android 的照片恢复应用程序。 无论您需要直接从 A…

git跨库合并

1、背景 A为开发环境的代码仓库&#xff0c;B为生产环境的代码仓库。A和B之间不能通信。开发人员的本地电脑可以和A、B通信。 目的 上线时&#xff0c;需要将A代码合并B代码。 2、实现 2.1 添加远程仓库 2.1.1 代码方式 在B代码仓库中,将A添加为远程仓库。 git remote …

腾讯会议产品策划的成长之路:从万字文档到功能落地的实战经验

腾讯会议产品策划的成长之路&#xff1a;从万字文档到功能落地的实战经验 在腾讯会议的产品团队中&#xff0c;有这样一位产品策划&#xff0c;他以其出色的逻辑思维、全局观念以及扎实的执行力&#xff0c;在团队中发挥着举足轻重的作用。他就是林陪同&#xff0c;一个自称“会…

抽奖算法的设计与实现

更多内容欢迎访问我的个人博客网站&#xff1a;www.zpf0000.com 在数据库中准备好以下数据表 lottery表 sql代码解读复制代码 DROP TABLE IF EXISTS lottery; CREATE TABLE lottery (id int NOT NULL AUTO_INCREMENT,user_id int NOT NULL DEFAULT 0 COMMENT 发起抽奖用户ID,n…

【MySQL】:对库和表的基本操作方法

数据库使用的介绍 什么是SQL 学习数据库的使用——>基于 SQL编程语言 来对数据库进行操作 重点表述的是“需求”&#xff0c;期望得到什么结果。&#xff08;至于结果是如何得到的&#xff0c;并不关键&#xff0c;都是数据库服务器在背后做好了&#xff09; 重点表述的是…

DEGAS:将临床属性转移到细胞

DEGAS&#xff08;单细胞诊断证据量表&#xff0c;Diagnostic Evidence GAuge of Single cells&#xff09;是一种迁移学习框架&#xff0c;用于将疾病信息从患者转移到细胞。作者将这种可转移信息称为“印象-impressions”&#xff0c;它允许单细胞与疾病属性相关联&#xff0…

【Python】使用库 -- 详解

库就是别人已经写好了的代码&#xff0c;可以让我们直接拿来用。 一个编程语言能不能流行起来&#xff0c;一方面取决于语法是否简单方便容易学习&#xff0c;一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库&#xff0c;来应对各种各样的场景。在…

动态路由协议 —— EIGRP 与 OSPF 的区别

EIGRP&#xff08;增强内部网关路由协议&#xff09;和 OSPF&#xff08;开放式最短路径优先&#xff09;是两种最常见的动态路由协议&#xff0c;主要是用来指定路由器或交换机之间如何通信。将其应用于不同的情况下&#xff0c;可提高速率、延迟等方面的性能。那么它们之间到…