C语言:简单实现图书管理系统
细节要求:可实现功能如下:
- 登记书籍
- 浏览书籍
- 借阅书籍
- 归还书籍
- 删除书籍
- 查找书籍
- 退出系统
可理解为常规增删查改。
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct bookInfo
{
char name[20];
float price;
char author[20];
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;
}
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作者\t数量\n");
while(pMove != NULL)
{
printf("%s\t%.1f\t%s\t%d\n",pMove->data.name,pMove->data.price,pMove->data.author,pMove->data.num);
pMove = pMove->next;
}
}
void makeMenu()
{
printf("-----------------------------------------\n");
printf("\tc语言图书管理系统\n");
printf("\t0.退出系统\n");
printf("\t1.登记书籍\n");
printf("\t2.浏览书籍\n");
printf("\t3.借阅书籍\n");
printf("\t4.归还书籍\n");
printf("\t5.删除书籍\n");
printf("\t6.查找书籍\n");
printf("-----------------------------------------\n");
printf("请输入(0~6):");
}
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%s\t%d\n",pMove->data.name,pMove->data.price,pMove->data.author,pMove->data.num);
pMove = pMove->next;
}
fclose(fp);
}
void readInfoFromFile(const char* fileName,struct Node* headNode)
{
struct bookInfo tempData;
FILE *fp = fopen(fileName,"r");
if(fp == NULL)
{
fp = fopen(fileName,"w+");
}
while(fscanf(fp,"%s\t%f\t%s\t%d\n",tempData.name,&tempData.price,tempData.author,&tempData.num)!=EOF)
{
insertNodeByHead(list,tempData);
}
fclose(fp);
}
void keyDown()
{
int usenum = 0;
struct bookInfo tempBook;
struct Node* result = NULL;
scanf("%d",&usenum);
switch(usenum)
{
case 0:
printf("【退出】\n");
printf("退出成功!!!\n");
system("pause");
exit(0);
break;
case 1:
printf("【登记】\n");
printf("输入书籍的信息(书名,价格,作者,数量):\n");
scanf("%s%f%s%d",tempBook.name,&tempBook.price,tempBook.author,&tempBook.num);
insertNodeByHead(list,tempBook);
saveInfoToFile("bookinfo.txt",list);
break;
case 2:
printf("【浏览】\n");
printList(list);
break;
case 3:
printf("【借阅】\n");
printf("请输入要借阅的书名:\n");
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");
}
else
{
printf("当前书籍无库存,借阅失败!!\n");
}
}
break;
case 4:
printf("【归还】\n");
printf("请输入要归还的书名:\n");
scanf("%s",tempBook.name);
result = searchByName(list,tempBook.name);
if(result == NULL)
{
printf("该书来历不明!\n");
}
else
{
result->data.num++;
printf("书籍归还成功!!");
}
break;
case 5:
printf("【删除】\n");
printf("请输入要删除书名:\n");
scanf("%s",tempBook.name);
deleteNodeByName(list,tempBook.name);
saveInfoToFile("bookinfo.txt",list);
break;
case 6:
printf("【查找】\n");
printf("请输入要查询的书名:\n");
scanf("%s",tempBook.name);
result = searchByName(list,tempBook.name);
if(result == NULL)
{
printf("未找到相关信息!\n");
}
else
{
printf("书名\t价格\t作者\t数量\n");
printf("%s\t%.1f\t%s\t%d\n",result->data.name,result->data.price,result->data.author,result->data.num);
}
break;
default:
printf("【error】\n");
break;
}
}
int main()
{
list = createHead();
readInfoFromFile("bookinfo.txt",list);
while(1)
{
makeMenu();
keyDown();
system("pause");
}
system("pause");
return 0;
}
C语言:简单实现图书管理系统相关推荐
- PHP实现一个简单的图书管理系统
刚收到了一个消息,老师竟然布置了一个课设 ,要求做一个后台管理系统.做归做,但是!本着为老师节省时间的心态,我花了大量的时间,消耗了无数脑细胞扫描了一遍老师给的课题,最终掐指一算选了一个最简单的--& ...
- Java—简单的图书管理系统
简单的图书管理系统 通过数据源和DAO对象访问数据库.其中JavaBeans实现模型,访问数据库,Servlet实现控制器,JSP页面实现视图. • 模型包括2个JavaBean:BookBean用于 ...
- 简单编写图书管理系统
首先我们先梳理一下图书管理系统的功能 图书管理系统功能梳理 一.系统简介:能够对图书进行增删改查 二.步骤分析:1.写菜单 - 图书系统的所有功能2.实现每一个功能增加学生:a.将图书的信息加到列表里 ...
- c语言课程设计图书管理系统
数据结构c语言课程设计 图书管理系统 我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug.代码很多地方写的不是很好,请多多包涵. 账号1,密码1,为管理员账号:其他账号2,3,4 ...
- 学校图书管理系统基于c语言源代码,基于C语言的学校图书管理系统参考.doc
基于C语言的学校图书管理系统参考 本科学生毕业论文(设计) 题目(中 文):基于C语言的学校图书管理系统(英 文):School Library Management System Based on ...
- 用C#实现一个简单的图书管理系统(课程设计)
用C#(sharp)实现一个简单的图书管理系统(课程设计) 学校的数据库课程结束了,要求完成一个课程设计,于是我用C#实现了一个简单的图书管理系统(ADO.NET) 源码放在了github上,仅供参考 ...
- 用js实现简单的图书管理系统
利用数组实现简单的图书管理系统 用户输入1是添加图书 用户输入2是查找图书在第几层 用户输入3是显示所有的图书 输入其他的就停止服务 var arr = [];var select = prompt( ...
- 管理c语言程序设计报告,c语言程序设计报告图书管理系统
<c语言程序设计报告图书管理系统>由会员分享,可在线阅读,更多相关<c语言程序设计报告图书管理系统(11页珍藏版)>请在人人文库网上搜索. 1.中国地质大学本科生课程论文封面课 ...
- 2020-07-03:简单的图书管理系统(Python、SQL Server)
简单的图书管理系统 一.课题设计的基本内容 二.设计工具及系统运行环境 三.数据库设计E-R模型 四.软件主要功能设计(附上成品截图) 五.代码 一.课题设计的基本内容 经过对图书管理系统的分析,因图 ...
- php+mysql实现简单的图书管理系统(简单的数据库操作)
php+mysql实现简单的图书管理系统 ps:前端页面设计得有点丑,将就着用,哈哈哈.不具备用户和管理员功能,如要实现只需将首页的功能根据数据库中账号信息选择性使用就可以了.数据库关系设计什么的完全 ...
最新文章
- linux文件管理和 对bash的理解
- 只下载pycharm不安装python可以用吗_pycharm下怎么配置python
- 变频电源的日常检查目录
- angular5项目端口冲突之解决办法
- CentOS7开放端口号
- Qt工作笔记-QTreeWidget顺序查找包含内容的字符串
- C#网络编程----(三)委托和多线程
- 混合式教学模式在课堂中的应用
- 电商后台管理项目的步骤分析
- OSChina 周四乱弹 ——来我数数,你们中间有几只毛毛虫
- 文明与征服萨拉丁怎么搭配阵容?
- 解决VMware虚拟机安装ikuai限速10M
- 大文件前端直接上传至七牛
- 叮!丰巢智能柜那些贴心服务的正确打开方式
- 【论文汇总】人群计数中Transformer的应用,持续更新
- Maya: 菜单Create Subdiv Primitives Sphere
- C语言总结 — 知识点导论图
- 上海星尚传媒主持人刘彦池
- Nginx代理mysql端口
- mysql生成日历脚本(年|年月 格式)
热门文章
- C++11并发之std::mutex
- hdu 5101 n集合选2个不同集合数使和大于k
- weblogic 下载文件问题
- 面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
- nvidia-smi介绍
- 图像处理——alpha融合
- linux 中文交互最好,与linux相交互 - wsdsb的个人空间 - OSCHINA - 中文开源技术交流社区...
- 开发中IDEA常用快捷键
- 使用qt制作License(原理)
- QT tablewidget列名字对应的行与第0行之间的边框线未显示