IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> c语言课设 图书管理系统 链表动态 开辟内存 -> 正文阅读

[数据结构与算法]c语言课设 图书管理系统 链表动态 开辟内存

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define LEN sizeof(struct book)
struct book {
	char book_name[20];
	int number;
	int count;
	struct book* next;
};  
int n;                                                       
struct book* creat()
{
	struct book* head;
	struct book* p1, * p2;
	n = 0;
	p1 = p2 = (struct book*)malloc(LEN);
	printf("*****书的编号*****书名*****剩余数量*****\n");
	scanf("%d%s%d", &p1->number, &p1->book_name, &p1->count);
	head = NULL;
	while (p1->number != 0)
	{
		n++;
		printf("*****书的编号*****书名*****剩余数量*****\n");
		if (n == 1)head = p1;
		else p2->next = p1;
		p2 = p1;
		p1 = (struct book*)malloc(LEN);
		scanf("%d%s%d", &p1->number, &p1->book_name, &p1->count);
	}
	p2->next = NULL;
	printf("录入成功!\n");
	return(head);
}
void print(struct book* head)
{
	struct book* p;
	p = head;
	if (head != NULL)
	{	printf("*****书的编号*****书名*****剩余数量*****\n");
		do
		{
			printf("      %d          %s          %d\n", p->number, p->book_name, p->count);
			p = p->next;
		}while (p != NULL);
	}
	else printf("没有这本书!\n");
}
struct book* del(int num, int count, struct book* head)
{
	int flag = 0;
	struct book* p1, * p2;
	p2 = NULL;
	do
	{
		p1 = head;
		if (head == NULL)
		{
			printf("没有这本书 !\n");
			goto end;
		}
		while (p1->number != num && p1->next != NULL)    //当编号不相等(没找到)且下一个链表不是空的时
		{
			p2 = p1;
			p1 = p1->next;                                        //转到下一个链表(p2还在上一个链表)
		}
		if (p1->number == num && p1->count > count)
		{

			printf("借阅编号为N0.%d  本数为:%d\n", num, count);  //删除完成
			p1->count -= count; 
			flag++;
			break;//标记,如果为0表示不执行删除操作
		}
		else if (p1->number == num && p1->count == count) {
			if (p1 == head) 
				head = p1->next;//如果第一个链表就是要找的将头指针指向下一个链表(删除本链表)
			else 
				p2->next = p1->next;//第N个是要找的链表,将p2所指的链表与p1后的链表相连(删除p1的链表)
		}
	} while (p1->next != NULL); 
	if (flag != 0)
		printf("删除完成 !\n");
end:
	return(head);
}
struct book* add(int num, struct book* head) {
	int flag = 0;
	struct book* p;
	p = head; 

	if (num != 0)
		printf("*****书的编号*****书名*****剩余数量*****\n");
	while (p != NULL)
	{
		if (p->number == num)
		{
			printf("      %d          %s          %d\n", p->number, p->book_name,p->count);
			printf("请输入要还书个数:");
			int new_count = 0;
			scanf("%d", &new_count);
			p->count += new_count;
			flag = 1;
			goto end;
		}
		p = p->next;
	}
		if (flag == 0) {
		printf("没有这本书!\n");
	}
	system("cls");
	end:
	return(p);
}
void number(struct book* head)
{
	int num, a = 0;
	struct book* p;
	printf("*****请输入 \"0\" 结束输入*****\n");
	do
	{
		p = head;
		printf("请输入要查找的书的编号:");
		scanf("%d", &num);
		if (num != 0)
			printf("*****书的编号*****书名*****作者*****剩余数量*****\n");
		while (p != NULL)
		{
			if (p->number == num)
			{
				printf("      %d          %s          %d\n", p->number, p->book_name,p->count);
				a++;
			}
			p = p->next;
		}
		if (a == 0 && num != 0)
			printf("没有这个书!\n");
		a = 0;
	} while (num != 0);
	system("cls");
}
void search(struct book* head)
{
	int a;
	struct book* p;
	p = head;
	do
	{
		printf("1.按书编号查找\n2.退出\n");
		scanf("%d", &a);
		system("cls");
		switch (a) {
		case 1:number(p); break;
		case 2:break;
		}
	} while (a != 2);
}
struct book* sort(struct book* head)
{
	struct book* p1, * p2;
	int i, j;
	char string[20];
	for (i = 0; i < n - 1; i++)
	{
		p1 = head;
		int temp2, temp1;
		for (j = n - 1; j > 0; j--)
			while (p1->next != NULL)
			{
				p2 = p1; 
				p1 = p1->next;
				if (p2->number > p1->number)
				{
					temp1 = p1->number;
					p1->number = p2->number;
					p2->number = temp1;
					strcpy(string, p1->book_name);
					strcpy(p1->book_name, p2->book_name);
					strcpy(p2->book_name, string);
					temp2 = p1->count;
					p1->count = p2->count;
					p2->count = temp2;
				}
			}
	}
	return(head);
}
int main() {
	struct book* head = NULL;
	int num;
	int a;
	int count;
	while (1) {

		printf(" _______________________________________________\n");
		printf("|              欢迎您使用图书管理系统           |\n");
		printf("|                1.录入图书信息                 |\n");
		printf("|                2.删除图书信息                 |\n");
		printf("|                    3.借书                     |\n");
		printf("|                    4.还书                     |\n");
		printf("|                5.查找图书信息                 |\n");
		printf("|                6.排序图书信息                 |\n");
		printf("|               7.退出图书管理系统              |\n");
		printf("|_______________________________________________|\n");
		printf("     ********请您选择需要使用的功能********      \n");
		int choice = 0;
		scanf("%d", &choice);
		system("cls");
		//1.录入图书信息
		if (choice == 1) {
			printf("*****请输入 \"0 0 0 \" 结束输入*****\n");
			head = creat();
			print(head);
		}
		//2.删除图书信息
		else if (choice == 2) {
			printf("*****请输入 \"0\" 结束输入*****\n");
			 do{
				printf("请输入要删除书本编号和本数:");
				scanf("%d%d", &num, &count);
				head = del(num, count, head);
				print(head);
			 } while (num != 0);
			printf("\n\n\n\n\n\n");
		}
		//3.借书 
		else if (choice == 3) {
			printf("*****请输入 \"0\" 结束输入*****\n");
			while (number != 0) {
				printf("请输入要借出书本编号和本数:");
				scanf("%d%d", &num, &count);
				head = del(num, count, head);
				print(head);
			} 
			printf("\n\n\n\n\n\n");
		}
		//4.还书
		else if (choice == 4) {
				printf("请输入书编号:");
				scanf("%d", &num);
				head = add(num, head);
				print(head);
		}
		//5.查找图书信息
		else if (choice == 5) {
			search(head); 
			printf("\n\n\n\n\n\n");
		}
		//排序
		else if (choice == 6) {
			head = sort(head); 
			print(head);
			getchar();
			printf("\n\n\n\n\n\n");
		}
		//7.退出系统
		else if (choice == 7)
		{
			break;
		}
		else {
			printf("   ********您输入的数据非法请重新输入********     \n");
		}
	}
	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 14:04:31  更:2021-10-07 14:05:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 11:27:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码