C/C++项目开发:图书管理系统,数据结构全源码分享

C/C++项目开发:图书管理系统,数据结构全源码分享管理系统一直是我们计算机专业同学都要经历的项目设计,而管理系统的核心知识点其实都是一样的,无法就是换了个马甲,今天我们就来看看很多同学都会遇到的管理项目之一:图书管理系统!

大家好,欢迎来到IT知识分享网。

hello,各位小伙伴们大家好!你们今天有敲代码嘛?

管理系统一直是我们计算机专业同学都要经历的项目设计,而管理系统的核心知识点其实都是一样的,无法就是换了个马甲,今天我们就来看看很多同学都会遇到的管理项目之一:图书管理系统!

C/C++项目开发:图书管理系统,数据结构全源码分享

用于图书信息的管理。包括图书信息的创建、图书信息的打印、图书信息的查询、图书信息的修改、图书信息的删除。方便用户整理图书,查询图书。

这个图书管理系统是由单链表这一数据结构实现的,板块包括图书信息的创建、打印、查询、修改、删除、以及图书价格的排序等组成。

代码后面也有注释的,基本很好理解的。

C/C++项目开发:图书管理系统,数据结构全源码分享

下面为源代码:

#include <stdio.h> #include <stdlib.h> #include <string.h> //3.数据的设计 //3.1程序的数据存储--->容器 //3.2数据的结构 --->图书的信息 struct bookInfo { char name[20]; //书名 float price; //书籍的价格 int num; //书籍的数量 }; //定义链表 struct Node { struct bookInfo data; struct Node* next; }; struct Node* list = NULL; //将链表声明成全局变量 //创建表头:表头就是结构体变量 struct Node* createHead() { //动态内存申请 struct Node* headNode = (struct Node*)malloc(sizeof(struct Node)); //变量初始化 headNode->next = NULL; return headNode; } //创建节点:为插入做准备 // 把用户的数据变成结构体变量 struct Node* createNode(struct bookInfo data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->next = NULL; return newNode; } //数据插入(头插法) void insertNodeByHead(struct Node* headNode, struct bookInfo data) { struct Node* newNode = createNode(data); newNode->next = headNode->next; headNode->next = newNode; } //尾插法 /*struct insertNodeByTall(struct Node* headNode, int data) { struct Node* pMove = headNode; while (pMove != NULL) { pMove = pMove->next; } struct Node* newNode = createHead(data); pMove->next = newNode; }*/ //指定删除(删除链表中元素) //posLeftNode->next=posNode->next; //free(posNode); void deleteNodeByName(struct Node* headNode, char* bookname) { struct Node* posLeftNode = headNode; struct Node* posNode = headNode->next; //书籍名字是字符串,字符串比较函数 while (posNode != NULL && strcmp(posNode->data.name, bookname)) { posLeftNode = posNode; posNode = posLeftNode->next; } //讨论查找的结果 if (posNode == NULL) return; else { printf("删除成功!\n"); posLeftNode->next = posNode->next; free(posNode); posNode = NULL; } } //查找 struct Node* searchByName(struct Node* headNode, char* bookName) { struct Node* posNode = headNode->next; while (posNode != NULL && strcmp(posNode->data.name, bookName)) { posNode = posNode->next; } return posNode; } //打印链表 void printList(struct Node* headNode) { struct Node* pMove = headNode->next; printf("书名\t价格\t数量\n"); while (pMove != NULL) { printf("%s\t%.1f\t%d\n", pMove->data.name, pMove->data.price, pMove->data.num); pMove = pMove->next; } } //直接文件操作 //文件写操作 void saveInfoToFile(const char* filename, struct Node* headNode) { FILE* fp = fopen(filename, "w"); struct Node* pMove = headNode->next; while (pMove != NULL) { fprintf(fp, "%s\t%.1f\t%d\n", pMove->data.name, pMove->data.price, pMove->data.num); pMove = pMove->next; } fclose(fp); } //文件读操作 void readInfoFromFile(const char* fileName, struct Node* headNode) { FILE* fp = fopen(fileName, "r"); if (fp == NULL) { //不存在就创建出来这个文件 fp = fopen(fileName, "w+"); } struct bookInfo tempData; while (fscanf(fp, "%s\t%f\t%d\n", tempData.name, &tempData.price, &tempData.num) != EOF) { insertNodeByHead(list, tempData); } fclose(fp); } //冒泡排序(链表) void bubbleSortList(struct Node* headNode) { for (struct Node* p = headNode->next; p != NULL; p = p->next) { for (struct Node* q = headNode->next; q->next != NULL; q = q->next) { if (q->data.price > q->next->data.price) { //交换值 struct bookInfo tempData = q->data; q->data = q->next->data; q->next->data = tempData; } } } printList(headNode); } //2.交互 void keyDown() { int userkey = 0; struct bookInfo tempBook; //产生一个临时的变量存储书籍信息 struct Node* result = NULL; scanf("%d", &userkey); switch (userkey) { case 0: printf(" 【 登记 】 \n"); printf("输入书籍的信息(name,price,num):"); scanf("%s%f%d", tempBook.name, &tempBook.price, &tempBook.num); insertNodeByHead(list, tempBook); saveInfoToFile("bookinfo.txt", list); break; case 1: printf(" 【 浏览 】 \n"); printList(list); break; case 2: printf(" 【 借阅 】 \n"); printf("请输入你要借阅的书籍:"); scanf("%s", tempBook.name); result = searchByName(list,tempBook.name); if (result == NULL) printf("没有相关书籍无法借阅!\n"); else { if (result->data.num > 0) { result->data.num--; printf("借阅成功\n"); saveInfoToFile("bookinfo.txt", list); } else { printf("当前书籍无库存,借阅失败!\n"); } } break; case 3: printf(" 【 归还 】 \n"); printf("请输入你要归还的书籍:"); scanf("%s", tempBook.name); result = searchByName(list, tempBook.name); if (result == NULL) printf("书籍来源非法!\n"); else { result->data.num++; printf("书籍归还成功!\n"); saveInfoToFile("bookinfo.txt", list); } break; case 4: printf(" 【 查找 】 \n"); printf("你要查询的书名:"); scanf("%s", tempBook.name); result = searchByName(list, tempBook.name); if (result == NULL) { printf("未找到相关结果!\n"); } else { printf("书名\t价格\t数量\n"); printf("%s\t%.1f\t%d\n", result->data.name, result->data.price, result->data.num); } break; case 5: printf(" 【 排序 】 \n"); bubbleSortList(list); break; case 6: printf(" 【 删除 】 \n"); printf("输入想要删除的书名:"); scanf("%s", tempBook.name); deleteNodeByName(list, tempBook.name); saveInfoToFile("bookinfo.txt", list); break; case 7: printf(" 【 退出 】 \n"); printf(" 退出成功 \n"); system("pause"); exit(0); //关掉整个程序 break; default: printf(" 【 error 】 \n"); break; } } //1.界面--->菜单--->模块 void makeMenu() { printf("----------------------------------\n"); printf(" 图书管理借阅系统\n"); printf("t0.登记书籍\n"); printf("t1.浏览书籍\n"); printf("t2.借阅书籍\n"); printf("t3.归还书籍\n"); printf("t4.查找书籍\n"); printf("t5.排序书籍\n"); printf("t6.删除书籍\n"); printf("t7.退出系统\n"); printf("----------------------------------\n"); printf("请输入(0~7):"); } int main() { list = createHead(); //链表初始化 readInfoFromFile("bookinfo.txt", list); while (1) { makeMenu(); keyDown(); system("pause"); system("cls"); } }

图书管理系统分享就到此结束啦,大家赶紧试试吧!

更多项目源码获取通道:

关注私信【编程交流】可到我学习粉丝群领取!

而且你可以在群里面交流提问C语言/C++的相关编程问题哦!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/88734.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信