ASCII码 ASCII码

C++使用链表实现图书管理系统

发布于:2022-03-14 09:26:23  栏目:技术文档

本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下

一、程序实现功能1.录入书籍:将书籍录入图书管理系统

2.浏览书籍:查看图书管理系统里的所有书籍

3.借阅书籍:书籍存在可以借阅,库存-1,书的库存不足则无法借阅

4.归还书籍:库存+1,如果该书不是图书馆里的书籍,则无法录入

5.删除书籍:以书名为基础从图书管理系统中删除该书籍

6.查找书籍:按书名查找书籍,显示书籍的基本信息

7.排序书籍:按价格将书籍排序(降序)

二、要求使用函数、指针和链表编写。

三、程序功能图四、具体函数五、程序代码`#include<stdio.h>

" class="reference-link">include<stdlib.h>

" class="reference-link">include<string.h>

struct bookinfo{ char name[20]; //书名 char author[10]; //作者 char date[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 printList();void display_menu();void savebookfile();void insertbook();void readbookfile();void deletebook();struct Node* searchbook();void sortbook();void selectkey();

/打印链表/void printList(struct Node headNode){ struct Node Bmove = headNode->next; printf(“书名\t作者\t出版日期\t价格\t库存\n”); while(Bmove != NULL) { printf(“%s\t%s\t%s\t%.1f\t%d\n”,Bmove->data.name,Bmove->data.author,Bmove->data.date,Bmove->data.price,Bmove->data.num); Bmove = Bmove->next; }

}

/菜单登录界面/void display_menu(){ char str[100]; FILE fp; char txt; fp = fopen(“menu.txt”,”r”); txt = fgets(str,100,fp); while(txt != NULL) { printf(“%s”,str); txt = fgets(str,100,fp); } fclose(fp);}

/将信息存到文件中/void savebookfile(const char filename,struct Node headNode){ FILE fp = fopen(filename,”w”); struct Node Bmove = headNode->next; while(Bmove != NULL) { fprintf(fp,”%s\t%s\t%s\t%.1f\t%d\n”,Bmove->data.name,Bmove->data.author,Bmove->data.date,Bmove->data.price,Bmove->data.num); Bmove = Bmove->next; } fclose(fp);}

/录入书籍/void insertbook(struct Node headNode,struct bookinfo data){ struct Node newNode = createNode(data); newNode->next = headNode->next; headNode->next = newNode;

}

/读取文件/void readbookfile(const char filename, struct Node headNode){ FILE* fp = fopen(filename,”r”); if(fp == NULL) { fp = fopen(filename,”w+”); } struct bookinfo tempinfo; while(fscanf(fp, “%s\t%s\t%s\t%.1f\t%d\n”,tempinfo.name,&tempinfo.author,&tempinfo.date,&tempinfo.price,&tempinfo.num ) != EOF) { insertbook(list,tempinfo); } fclose(fp);}

/删除书籍/void deletebook(struct Node headNode,char bookname){ struct Node leftNode = headNode; struct Node rightNode = headNode->next; while(rightNode != NULL && strcmp(rightNode->data.name,bookname)) { leftNode = rightNode; rightNode = leftNode->next; } if(leftNode == NULL) { return; } else { printf(“删除书籍成功!\n”); leftNode->next = rightNode->next; free(rightNode); rightNode = NULL; }}

/查找书籍/struct Node searchbook(struct Node headNode, char bookname){ struct Node rightNode = headNode->next; while (rightNode != NULL && strcmp(rightNode->data.name, bookname)) { rightNode = rightNode->next; } return rightNode;}

/排序书籍/void sortbook(struct Node headNode){ for(struct Node i = headNode->next; i != NULL; i = i->next) { for(struct Node j = headNode->next;j->next != NULL;j = j->next) { /排序书籍(按价格降序)/ if (j->data.price < j->next->data.price) { /交换值/ struct bookinfo tempdata = j->data; j->data = j->next->data; j->next->data = tempdata; } } } /排序后查看效果*/ printList(headNode);}

/交互界面/void selectkey(){ int userkey = 0; struct bookinfo tempbook; //生成一个临时的变量存储书籍信息 struct Node searchname = NULL; //生成一个临时变量存储查找的书名 struct Node borrowbook = NULL; //生成一个临时变量存储要借阅的书名 struct Node returnbook = NULL; //生成一个临时变量存储要归还的书名 scanf(“%d”,&userkey); switch(userkey) { case 1: printf(“[ 录入书籍 ]\n”); printf(“输入书籍的信息(name,author,date,price,num):”); scanf(“%s%s%s%f%d”,tempbook.name,&tempbook.author,&tempbook.date,&tempbook.price,&tempbook.num); insertbook(list,tempbook); /把书籍信息保存到booksinfo文本文件里/ savebookfile(“bookinfo.txt”,list); break; case 2: printf(“[ 浏览书籍 ]\n”); printList(list); break; case 3: printf(“[ 借阅书籍 ]\n”); /书籍存在可以借阅,库存-1,书的库存不足则无法借阅/ printf(“请输入要借阅的书名:”); scanf(“%s”,tempbook.name); borrowbook = searchbook(list,tempbook.name); if(borrowbook == NULL) { printf(“不存在该书,无法借阅!\n”); } else { if(borrowbook->data.num > 0) { borrowbook->data.num—; printf(“借阅成功!\n”); printList(list); } else { printf(“当前书籍库存不足,借阅失败!\n”); } } break; case 4: printf(“[ 归还书籍 ]\n”); //库存+1 printf(“请输入要归还的书名:”); scanf(“%s”,tempbook.name); returnbook = searchbook(list,tempbook.name); if(returnbook == NULL) { printf(“该书不是图书馆里的书籍!\n”); } else { returnbook->data.num++; printf(“书籍归还成功!\n”); printList(list); } break; case 5: printf(“[ 删除书籍 ]\n”); printf(“请输入要删除的书名:”); scanf(“%s”,tempbook.name); deletebook(list,tempbook.name); /按书名删除书籍/ printList(list); break; case 6: printf(“[ 查找书籍 ]\n”); printf(“请输入要查询的书名:”); scanf(“%s”,tempbook.name); searchname = searchbook(list,tempbook.name); if(searchname == NULL) { printf(“不存在该书,请加购录入!\n”); } else { /输出该书的信息/ printf(“书名\t作者\t出版日期\t价格\t库存\n”); printf(“%s\t%s\t%s\t%.1f\t%d\n”,searchname->data.name,searchname->data.author,searchname->data.date,searchname->data.price,searchname->data.num); } break; case 7: printf(“[ 排序书籍 ]\n”); /按价格排序(降序)*/ sortbook(list); break;

  1. case 8:
  2. printf("[ 退出系统 ]\n");
  3. printf("退出成功\n");
  4. system("pause");
  5. exit(0); /*关闭整个程序*/
  6. break;
  7. default:
  8. printf("[ 错误 ]\n");
  9. break;
  10. }

}

/主界面/int main(){ list = createhead(); readbookfile(“bookinfo.txt”,list); while(1) { display_menu(); selectkey(); system(“pause”); system(“cls”); } system(“pause”); return 0;}`六、效果1.录入书籍2.浏览书籍3.借阅书籍

存在该书时,借阅成功,库存-1:不存在该书时,无法借阅:4.归还书籍当图书管理系统里本不存在该书,则归还失败:5.查找书籍不存在该书时,则查找失败:6.排序书籍

再录入书籍:排序(降序):7.删除书籍

相关推荐
阅读 +