首页 > 其他分享 >图书馆管理系统

图书馆管理系统

时间:2023-07-26 16:45:42浏览次数:34  
标签:Node struct temp 管理系统 move 图书馆 printf data

图书馆管理系统,实现的功能有:图书的的增删改查、根据图书的名字,数量(价格)进行排序。

排序方法说明:

  1. 首先定义两个指针find1find2,分别用于遍历链表。
  2. 使用冒泡排序算法,外层循环控制比较轮数,内层循环控制每一轮的比较次数。
  3. 在内层循环中,通过比较当前节点find1和后续节点find2的数据域(假设为num)的大小,如果前者大于后者,则交换它们的数据域。
  4. 内层循环结束后,将find2指向下一个节点,以便进行下一轮的比较。
  5. 外层循环结束后,将find1指向下一个节点,以便进行下一轮的比较。
  6. 最后输出"排序完成"的提示信息。   

当使用冒泡排序算法时,需要两层循环来控制比较轮数和比较次数。

外层循环用于控制比较轮数,每一轮都会将当前最大(或最小)的元素移动到正确的位置。在这个代码中,外层循环是通过遍历链表中的节点实现的,即find1 = find1->next。这样可以确保每一轮都能够遍历整个链表。

内层循环用于控制每一轮的比较次数,它从当前节点开始,依次与后续节点进行比较。在这个代码中,内层循环也是通过遍历链表中的节点实现的,即find2 = find2->next。这样可以确保每一轮都能够比较当前节点与后续节点的大小关系。

因此,外层循环和内层循环的嵌套就可以实现对链表中所有节点的比较操作。具体流程如下:

  1. 外层循环:遍历链表中的每一个节点,直到最后一个节点。

    • 内层循环:从当前节点开始,遍历其后续节点,直到最后一个节点。
      • 比较当前节点与后续节点的数据域大小。
      • 如果当前节点的数据域大于后续节点的数据域,则交换它们的数据域。
    • 结束内层循环。
  2. 结束外层循环,排序完成。

通过这样的嵌套循环结构,可以确保每个节点都与其他节点进行了比较,并根据需要进行了交换操作。最终实现了对链表中节点的升序排序。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
struct bookInfo
{
	char name[100];
	float price;
	int num;
};

struct Node
{
	struct bookInfo data;
	struct  Node* next;

};

struct Node* list = NULL;

struct Node* creatHead() {
	struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
	if (headNode == NULL) return;
	
	headNode->next = NULL;

	return headNode;
}
struct Node* creatNode(struct  bookInfo data) {
	struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
	if (newNode == NULL) return;
	newNode->data = data;
	newNode->next = NULL;
	return newNode;
}
void insertBook(struct Node* headNode, struct bookInfo data) {
	//根据传来的data,创建一个新的Node结构体,newNode
	struct Node* newNode = creatNode(data);
	newNode->next = headNode->next;
	headNode->next = newNode;
}
void saveInfo(char *filename,struct Node *headNode) {
	//打开文件
	FILE* fp = fopen(filename, "w");
	//写入文件 fwritr fprintf
	struct Node* move = headNode->next;
	while (move != NULL) {
		fprintf(fp, "%s %.1f %d\n", move->data.name, move->data.price, move->data.num);
		move = move->next;
	}
	//关闭文件
	fclose(fp);
}
void readInfo(char* filename, struct Node* headNode) {
	FILE* fp = fopen(filename, "r");
	if (fp == NULL) {
		fp = fopen(filename, "w");
		fclose(fp);
		return;
	}
	struct bookInfo temp;
	while (fscanf(fp, "%s %f %d\n", temp.name, &temp.price, &temp.num) != EOF) {
		insertBook(list, temp);
	}
	fclose(fp);
}
void sort(struct Node* headNode) {
	struct Node* find1 = headNode;
	struct Node* find2 = headNode;
	struct bookInfo temp;
	for (find1 = headNode->next;find1 != NULL;) {
		for (find2 = find1->next;find2 != NULL;) {
			//if (find1->data.num > find2->data.num) {
			//	temp = find1->data;
			//	find1->data = find2->data;
			//	find2->data = temp;
			//}
			if (strcmp(find1->data.name, find2->data.name)>0) {
					temp = find1->data;
					find1->data = find2->data;
					find2->data = temp;
			}
			else {
				break;
			}
			find2 = find2->next;
		}
		find1 = find1->next;
	}
	printf("排序完成\n");
}


void showlist(struct Node* headNode) {
	sort(list);
	struct Node* move = headNode->next;
	while (move != NULL) {
		printf("%s, %.1f, %d\n", move->data.name, move->data.price, move->data.num);
		move = move->next;
	}
}
struct Node* searchByname(struct Node *headNode,char *name)
{
	struct Node* move = headNode->next;
	while (move!=NULL && strcmp(move->data.name,name))
	{
		move = move->next;
	}
	return move;
};

void deletbyName(struct Node* headNode,char * name) {
	struct Node* move = headNode->next;
	struct Node* prev = headNode;
	while (move != NULL && strcmp(move->data.name, name))
	{
		prev = move;
		move = move->next;
	}
	if (move == NULL) {
		return;
	}
	else {
		printf("删除成功\n");
		prev->next = move->next;
		free(move);
		move = NULL;
	}
}
void keyvent() {
	int key = 0;
	scanf("%d", &key);
	struct bookInfo temp;
	struct Node* result;
	switch (key)
	{
	case 0:
		printf("[录入]\n");
		printf("录入的书籍信息,名字,价格,数量\n");
		scanf("%s%f%d", temp.name, &temp.price, &temp.num);
		//printf("%s,%.2f,%d", temp.name, temp.price, temp.num);
		//同步到链表
		insertBook(list, temp);
		//同步到文件
		saveInfo(".//gaohui.txt", list);
		break;
	case 1:
		printf("[速览]\n");
		showlist(list);
		break;
	case 2:
		printf("[借阅]\n");
		printf("借阅的书名是:\n");
		scanf("%s", temp.name);
		result = searchByname(list, temp.name);
		if (result == NULL) {
			printf("未找到相关书籍,无法借阅");
		}
		else {
			if (result->data.num > 0) {
				result->data.num--;
				printf("借阅成功\n");
				saveInfo(".//gaohui.txt", list);
				}
			else {
				printf("没有库存,无法借阅\n");
			}
		}
		break;
	case 3:
		printf("[归还]\n");
		printf("归还的书名是:\n");
		scanf("%s", temp.name);
		result = searchByname(list, temp.name);
		if (result == NULL) {
			printf("该书籍无法归还,请检查是否为图书馆书籍");
		}
		else {
				result->data.num++;
				printf("归还成功\n");
				saveInfo(".//gaohui.txt", list);
		}
		break;
	case 4:
		printf("[查找]\n");
		printf("查询的书名是:\n");
		scanf("%s", temp.name);
		result=searchByname(list, temp.name);
		if (result == NULL) {
			printf("未找到相关书籍");
		}
		else {
			printf("书名 价格 数量\n");
			printf("%s, %.1f, % d\n", result->data.name, result->data.price, result->data.num);
		}
		break;
	case 5:
		printf("[删除]\n");
		scanf("%s", temp.name);
		deletbyName(list, temp.name);
		break;
	case 6:
		printf("[退出系统]\n");
		exit(0);
		break;
	default:
		break;


	}
}
void menu() {
	printf("--------------------------\n");
	printf("图书管理借阅系统\n");
	printf("0.录入书籍\n");
	printf("1.速览书籍\n");
	printf("2.借阅书籍\n");
	printf("3.归还书籍\n");
	printf("4.查找书籍\n");
	printf("5.删除书籍\n");
	printf("6.退出系统\n");
	printf("--------------------------\n");
	printf("请输入(0-6):\n");
	keyvent();
}
int main() {
	//初始化头部指针
	list = creatHead();
	readInfo(".//gaohui.txt", list);
	while (1) {
		menu();
		system("pause");
		system("cls");
	}
	
} 

标签:Node,struct,temp,管理系统,move,图书馆,printf,data
From: https://www.cnblogs.com/hannahui/p/17582892.html

相关文章

  • Scrum工具,敏捷管理系统-免费
    结合对工具的了解和使用心得,介绍在管理scrum中常见的一些工具基础的scrum工具:1、物理白板物理白板是实施scrum最简单直接的方式。之前我也说过,一些利弊。数据不能够沉淀等等。2、Excel表格表格的形式就是如果多人编辑时,不能实时同步,这个就足够头疼。同时它也没有一些统计。专业......
  • Node.js低代码管理系统:只需点击鼠标,搭建属于你的企业应用
    低代码管理系统是一种通过可视化界面和简化的开发工具,使非专业开发人员能够快速构建和管理应用程序的系统。它提供了一套预先定义的组件和模块,使用户可以通过拖放操作来设计应用程序的界面和逻辑。低代码管理系统还提供了自动化的工作流程、数据管理和集成功能,使用户能够快速创建和......
  • 基于Java的日程管理系统开发
    完整资料进入【数字空间】查看——baidu搜索"writebug"摘要日程管理在日常生活中是十分普通的一件事情,人们无论在生活中还是工作中都会有大大小小、各种各样的事情安排,如果仅仅靠纸张或者自己记录这些事情,往往会遗忘。针对这样的痛点,本文提供了日程管理系统开发的一整套流程,从需求......
  • 如何让连锁店持续做大做强?巧用伙伴云零代码巡店管理系统
    在门店全面复苏的时期,如何抓住红利,让巡店管理移动化,数字化,标准化,智能化,形成运营闭环流程,帮助企业实现快速扩张呢?一起来看看伙伴云零代码巡店管理系统吧!01经济全面迎来复苏,店铺如何抓住红利?疫情时期,大量门店倒下。疫情结束之后,消费逐渐恢复到了疫情前的水平,甚至开始出现报复性消费,各......
  • 学生实习信息管理系统-计算机毕业设计源码+LW文档
    摘 要随着信息技术的发展,管理系统越来越成熟,各种企事业单位使用各种类型的管理系统来提高工作效率,从而降低手工劳动的弊端。传统模式的学生实习管理满足不了现代学生的实习需求,服务质量、服务速度。随着互联网+的理念的发展,为了提供用户方便快捷的学生实习渠道,打造高质量的学生......
  • 基于Java Web的物流快递管理系统的设计与实现-计算机毕业设计源码+LW文档
    选题的背景、意义及研究现状:研究背景随着中国物流业的高速发展,物流管理的重要性不言而喻。而物流管理的效率更是各个物流企业最看重的地方。近些年来,很多公司和企业都实现了自动化办公及信息管理,工作人员只需要在电脑前动动手指,就可完成繁琐的管理操作,极大程度上减轻了工作人员的......
  • C/C++商品信息管理系统[2023-07-22]
    C/C++商品信息管理系统[2023-07-22]选题4商品信息管理系统的设计与实现一、设计要求本课题要求同学们完成一个信息管理类的课题---《商品信息管理系统》,能够对商品信息进行有效的管理,实现商品信息查询、商品销售、商品进货、商品销售信息统计等方面的基本操作。管理内容(商品......
  • C/C++运动会成绩管理系统[2023-07-22]
    C/C++运动会成绩管理系统[2023-07-22]题目37:运动会成绩管理系统该系统可以记录校运动会全部运动项目的成绩、得分和排名情况,系统功能项以菜单形式显示。项目包括50米、100米、200米、400米、1500米、各接力项目、跳高、立定跳远、三级跳远、铅球等。系统可以实现以下......
  • C/C++教室管理系统[2023-07-22]
    C/C++教室管理系统[2023-07-22]课程题目:教室管理系统内容要求:(1)学生通过这个功能,可以查询相关院系相关教师的个人信息以及开课信息,以便能更好地了解教师及其开课情况。(2)学生通过这个功能,可以查询相关教学楼相关教室的信息以及该教室在每天任一时段的使用情况,或者有课,或者有讲座......
  • Oracle - 关系数据库管理系统
    常见语法1、withas短语,抽取公用数据withA_tableas(select'feiqs'name,18ageFROMdual),B_tableas(select'feiqs'name,29ageFROMdual)select*fromA_table,B_table2、rowid数据唯一标识,该值表明了该行在数据库中的物理具体位置selectrowidfromst_......