首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

C++数据结构-图书管理系统

后端 4.68KB 8 需要积分: 1
立即下载

资源介绍:

内容概要:使用C++编写的数据结构课程大作业:图书管理系统,实际考核优秀案例 适用人群:C++数据结构学习者,计算机方向大学生,期末考核焦虑人群 使用场景:再不写出来期末就丸辣!!!
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include #include #include #include #include #include #include using namespace std; #pragma warning( disable : 4996 ) #define MAXNUM 30 #define MAX 100 #define OK 1 #define ERROR -1 typedef string ElementType; typedef struct node* PNODE; typedef int Status; int num = 0;//解决输入现存量和库存量的错误 struct book { string bid, bname, writer; int standingnum; int totalnum; }; //------------------------------------ //------------------------------------------------------- //栈//重写变量类型 typedef struct Mode//栈 { PNODE data; Mode* next; }Mode; typedef Mode* QNode; typedef Mode* LinkStack; Status InitStack_Link(LinkStack& LS) { //#构造一个空的顺序栈SS LS = NULL; return OK; } Status Push_Link(LinkStack& LS, PNODE x) { //#把元素x压入栈,编写此函数 QNode p = new Mode; p->data = x; p->next = LS; LS = p; return OK; } Status Pop_Link(LinkStack& LS, PNODE& x) { //#弹出栈顶元素,用x保存,编写此函数 if (LS == NULL)return ERROR; QNode p = new Mode; x = LS->data; p = LS; LS = LS->next; delete p; return OK; } void GetTop(LinkStack& LS, PNODE& x) { x = LS->data;//获取队头元素,用x记录 } //平衡二叉树------------------------------------------------------------ typedef struct node { book data; int height; struct node* lchild, * rchild; node() = default; node(book k) :data(k), height(1),lchild(NULL), rchild(NULL) {} }node, * AVLTree; int GetHeight(AVLTree rt) { //得到高度 if (rt == NULL) return 0; return rt->height; } void UpdateHeight(AVLTree rt) { //更新高度 if (rt == NULL) return; rt->height = max(GetHeight(rt->lchild), GetHeight(rt->rchild)) + 1; } //左左调整(bf=2),右旋,左子节点变成父节点,其多余的右子节点变成降级节点的左子节点 void UpdateLL(AVLTree& rt) { AVLTree pl = rt->lchild; rt->lchild = pl->rchild; pl->rchild = rt; rt = pl; UpdateHeight(rt->lchild); UpdateHeight(rt->rchild); UpdateHeight(rt); } //右右调整(bf=-2),左旋,右子节点变成父节点,其多余的左子节点变成降级节点的右子节点 void UpdateRR(AVLTree& rt) { AVLTree pr = rt->rchild; rt->rchild = pr->lchild; pr->lchild = rt; rt = pr; UpdateHeight(rt->lchild); UpdateHeight(rt->rchild); UpdateHeight(rt); } //左右调整(bf=2),先对左子节点左旋调整为左左型,再进行左左调整 void UpdateLR(AVLTree rt) { UpdateRR(rt->lchild); UpdateHeight(rt->lchild->lchild); UpdateHeight(rt->lchild->rchild); UpdateHeight(rt->lchild); UpdateLL(rt); UpdateHeight(rt->lchild); UpdateHeight(rt->rchild); UpdateHeight(rt); } //右左调整(bf=-2),先对右子节点右旋调整为右右型,再进行右右调整 void UpdateRL(AVLTree& rt) { UpdateLL(rt->rchild); UpdateHeight(rt->rchild->lchild); UpdateHeight(rt->rchild->rchild); UpdateHeight(rt->rchild); UpdateRR(rt); UpdateHeight(rt->lchild); UpdateHeight(rt->rchild); UpdateHeight(rt); } bool InsertAVL(AVLTree& T, book data) { //插入 if (T == NULL) { T = new node(data); return true; } if (data.bid == T->data.bid) { T->data.standingnum += data.standingnum;//书号相同意味着增加库存量->更新data值 T->data.totalnum += data.totalnum; return 1; } bool res = true; if (data.bid < T->data.bid) { res = InsertAVL(T->lchild, data); if (res && GetHeight(T->lchild) - GetHeight(T->rchild) > 1) { if (data.bid < T->lchild->data.bid) UpdateLL(T); //左左 else UpdateLR(T); //左右 } } else { res = InsertAVL(T->rchild, data); if (res && GetHeight(T->lchild) - GetHeight(T->rchild) < -1) { if (data.bid > T->rchild->data.bid) UpdateRR(T); //右右 else UpdateRL(T); //右左 } } if (res) UpdateHeight(T); return res; } void Delete(AVLTree& rt, AVLTree pt) { //删除节点有左右子树时处理 if (rt->rchild== NULL) { AVLTree p = rt; pt->data.bid = rt->data.bid; rt = rt->lchild; delete p; } else { Delete(rt->rchild, pt); if (GetHeight(rt->lchild) - GetHeight(rt->rchild) > 1) { UpdateLL(rt); //左左 } } UpdateHeight(rt); } bool Delete_AVL(AVLTree& rt, book data) {//删除 if (rt == NULL) return false; bool res = true; if (rt->data.bid == data.bid) { if (rt->lchild == NULL) { rt = rt->rchild; } else if (rt->rchild == NULL) { rt = rt->lchild; } else { Delete(rt->lchild, rt); } } else if (data.bid < rt->data.bid) { res = Delete_AVL(rt->lchild, data); if (res && GetHeight(rt->lchild) - GetHeight(rt->rchild) > 1) { if (GetHeight(rt->lchild->lchild) >= GetHeight(rt->lchild->rchild)) UpdateLL(rt); //左左 else UpdateLR(rt); //左右 } else if (res && GetHeight(rt->lchild) - GetHeight(rt->rchild) < -1) { if (GetHeight(rt->rchild->rchild)>=GetHeight(rt->rchild->lchild)) UpdateRR(rt); //右右 else UpdateRL(rt); //右左 } } else { res = Delete_AVL(rt->rchild, data); if (res && GetHeight(rt->lchild) - GetHeight(rt->rchild) > 1) { if (GetHeight(rt->lchild->lchild) >= GetHeight(rt->lchild->rchild)) UpdateLL(rt); //左左 else UpdateLR(rt); //左右 } else if (res && GetHeight(rt->lchild) - GetHeight(rt->rchild) < -1) { if (GetHeight(rt->rchild->rchild) >= GetHeight(rt->rchild->lchild)) UpdateRR(rt); //右右 else UpdateRL(rt); //右左 } } if (res) UpdateHeight(rt); return res; } AVLTree research(AVLTree& T, book data) {//递归查找结点 if (T == NULL)return 0; if (T->data.bid == data.bid)return T; if (T->data.bid > data.bid) { return research(T->lchild, data); } if (T->data.bid < data.bid) { return research(T->rchild, data); } } void Outfile(AVLTree& T) {//读取图书管理系统文件赋予二叉树 ifstream fin; fin.open("C:/Users/lenovo/Desktop/图书管理系统.txt"); string line; book p; int i = 0; while (getline(fin, line)) { istringstream line3(line);//检查 getline(line3, line, ' '); p.bid = line; getline(line3, line, ' '); p.bname = line; getline(line3, line, ' '); p.writer = line; getline(line3, line, ' '); p.standingnum = stoi(line); getline(line3, line, ' '); p.totalnum = stoi(line); InsertAVL(T, p); AVLTree MinRoot; MinRoot = NULL; } fin.close(); } void Infile(AVLTree T) { //非递归中序遍历二叉树写入文件 //覆盖,但每次都会先读出 ofstream fout; fout.open("C:/Users/lenovo/Desktop/图书管理系统.txt", ios::out); LinkStack LS; InitStack_Link(LS);//初始化创建栈 PNODE p = T;//创建新的结点p指向根结点 PNODE q = new node;//创建新的结点q while (p || LS != NULL)//树与栈不空 { if (p) { Push_Link(LS, p); p = p->lchild; }//若树存在则将结点p压入栈并使其走向左孩子 else { Pop_Link(LS, q); fout << q->data.bid << " "; fout << q->data.bname << " "; fout << q->data.writer << " "; fout << q->data.standingnum << " "; fout << q->data.totalnum << " "; fout << endl; p = q->rchild; }//否则出栈输出并使其走向右孩子 } fout.close(); } void print(AVLTree T, int n) {//打印凹入表 int i; if (T) { print(T->rchild, n + 1); for (i = 0; i < n; i++) { cout<<"\t"; } cout << T->data.bid << endl; print(T->lchild, n + 1); } } int putinstorage(AVLTree& T) {//入库 book data; cout << "请输入需要入库的书号:"; cin >> data.bid;//cin.get()输入包含回车键,需要ignore() cout << endl; cout << "请输入需要入库的书名:"; cin >> data.bname; cout << endl; cou

资源文件列表:

C++数据结构-图书管理系统.zip 大约有1个文件
  1. ConsoleApplication1.cpp 16KB
0评论
提交 加载更多评论
其他资源 解压缩软件 winrar-64位
WinRAR是一款广泛使用的文件压缩和解压缩软件,专为Windows操作系统设计,支持64位系统架构。它由RarLab公司开发,以其强大的压缩能力、广泛的文件格式支持和用户友好的界面而闻名。 WinRAR的主要功能是压缩和解压缩文件,支持创建RAR和ZIP格式的压缩文件,同时也能解压多种其他格式,如7Z、ARJ、CAB、GZIP、TAR、ACE等。这使得WinRAR成为处理不同压缩文件格式的理想工具,无论是在日常使用还是专业领域。 软件的界面直观易用,用户可以轻松地通过图形界面进行压缩、解压缩、添加文件到压缩包、删除压缩包中的文件等操作。WinRAR还提供了命令行界面,方便高级用户通过脚本或批处理文件自动化处理压缩任务。 在压缩方面,WinRAR提供了多种压缩级别选项,用户可以根据需要选择不同的压缩级别来平衡压缩速度和压缩率。高级压缩功能包括固实压缩、多卷压缩和恢复记录,这些功能在需要高效压缩大量数据或确保数据传输的完整性时特别有用。 WinRAR还具备密码保护功能,允许用户为压缩文件设置密码,以保护敏感数据不被未授权访问。此外,它还支持创建自解压文件(.exe格式),方便在没
JSON格式化和查看器(客户端工具)-C#-winform-.net4.8
1、对于大文件和复杂结构的JSON,一般的文本编辑器不便于查看JSON结构。本工具独创层级结构可以快速定位大JSON的每个子级,子级的位置一目了然。 2、对JSON字符串格式化和压缩。
小巧屏幕画笔 ZoomIt64.exe
ZoomIt是一款由微软公司旗下的Sysinternals开发的屏幕放大、注释和演示辅助工具。它以其小巧的体积、强大的功能和易用性而受到广泛欢迎。ZoomIt64.exe是该软件的64位版本,专为64位Windows操作系统设计,能够充分利用现代硬件的性能,提供更流畅的使用体验。 ZoomIt的主要功能包括屏幕放大、屏幕注释和定时提醒。通过简单的快捷键操作,用户可以轻松地在演示或教学过程中放大屏幕上的任何区域,以便更清晰地展示细节。此外,它还允许用户在放大模式下进行屏幕注释,使用不同颜色的笔迹在屏幕上直接勾画和标注,非常适合教师在讲课时使用,或者在进行技术演示时突出显示特定内容。 ZoomIt的定时提醒功能为用户提供了在演示或会议中设置倒计时的便利,帮助控制演示的节奏和时间管理。此外,它还支持屏幕截图和录制功能,用户可以将当前屏幕内容截图保存到剪贴板或文件中,甚至可以录制屏幕操作过程,非常适合制作教程或记录演示过程。 ZoomIt64.exe的界面简洁直观,用户无需安装即可使用,只需下载后直接运行即可。它支持自定义快捷键,用户可以根据个人习惯设置快捷键,提高操作效率。该软件体积小
截图工具 存储 snipaste
截图工具 自用 存储
打字练习神器之金山打字通
金山打字通是一款由金山软件公司推出的电脑打字练习软件,旨在帮助用户提高打字速度和准确性,适用于从初学者到专业打字员的广泛用户群体。该软件以其友好的用户界面、多样化的练习模式和实用的功能,成为提升打字技能的有效工具。 软件的主要功能包括标准的打字练习、文章练习和游戏化学习等。在标准打字练习模式中,用户可以输入随机出现的字母、数字和符号,通过这种方式来练习和提高基本的打字技能。文章练习模式则提供各种文章段落,用户可以在模拟真实打字场景中练习,这不仅有助于提高打字速度,还能增强用户在实际工作中的应用能力。 金山打字通还特别设计了多种游戏模式,如打字游戏和打字比赛,这些游戏化元素极大地增加了学习的乐趣,使用户在轻松愉快的环境中提高打字技能。此外,软件支持自定义练习,用户可以导入自己的文本文件进行练习,这使得练习更加个性化和实用。 为了帮助用户更好地了解自己的进步,金山打字通提供了实时反馈功能,包括打字速度和准确率的统计。用户可以清晰地看到自己的进步和需要改进的地方,从而有针对性地进行练习。软件还支持多种键盘布局,包括标准的QWERTY键盘和其他语言的键盘布局,满足不同用户的需求。 总体
PxCook-像素大厨
PxCook(像素大厨)是一款专为UI设计师和前端开发者设计的高效设计协作工具,它集成了设计稿测量、标注、切图、导出和设计规范管理等功能,极大地提升了设计到开发的协作效率。 首先,PxCook提供了精确的设计稿测量工具,设计师可以通过它轻松获取设计元素的尺寸、间距和颜色值等信息,确保设计的精确性。其次,它支持一键标注,自动识别设计稿中的元素并生成清晰的标注信息,包括文字、间距、尺寸等,这大大减少了手动标注的工作量,提高了标注的准确性和效率。 PxCook还具备智能切图功能,能够自动识别并切分设计稿中的图片资源,一键导出为开发所需的格式,如PNG、SVG等,同时支持导出CSS样式代码,方便前端开发者快速实现设计还原。此外,它还允许用户创建和管理设计规范,确保设计的一致性和复用性。 通过PxCook,设计师和开发团队可以实现无缝协作,设计师可以快速响应开发中的问题,而开发者也能高效地将设计还原为实际的网页或应用界面。整体而言,PxCook不仅提高了设计和开发的效率,还确保了最终产品的质量,是现代UI设计和开发流程中不可或缺的工具。
typora直接安装中文版.exe
Typora是一款功能强大的Markdown编辑器,它将写作和预览无缝结合,为用户提供了一个简洁而高效的写作环境。与传统的Markdown编辑器不同,Typora允许用户直接在文档中看到格式化后的文本,省去了在编辑和预览模式之间切换的麻烦。这种即时预览功能极大地提高了写作效率,使得用户可以专注于内容创作,而不是格式调整。 Typora支持丰富的Markdown语法,包括但不限于标题、列表、引用、代码块、表格、数学公式等。这意味着用户可以轻松地创建结构化和格式化的文档,非常适合撰写技术文档、博客文章、学术论文等。此外,Typora还提供了多种主题和自定义选项,用户可以根据个人喜好调整界面风格,以获得最佳的写作体验。 除了Markdown编辑,Typora还支持导出功能,可以将编辑好的文档导出为PDF、HTML、Word等多种格式,方便用户分享或打印。这一功能使得Typora不仅是一个写作工具,也是一个强大的文档转换工具。 总体而言,Typora以其简洁的界面、强大的功能和出色的用户体验,成为了许多Markdown爱好者和专业写作者的首选编辑器。无论是日常笔记、项目文档还是公开发布的
基于JAVA的常用文件转换器(word 转 html,word 转 pdf,word 转 jpeg,word 转 png等等)
用JAVA语言写的一个小工具,用来做各种文件的相互装换 目前支持: 1:word 转 html 2:word 转 pdf 3:word 转 jpeg 4:word 转 png 5:html 转 word 6:html 转 pdf 7:html 转 png 8:doc 转 docx 9:excel 转 pdf 10:markdown 转 html 11:pdf 转 word 12:pdf 转 png 调用FileConvertUtil中的各种转换方法即可,支持自定义修改源码