下载资源后端资源详情
C++数据结构-图书管理系统.zip
大小:4.68KB
价格:17积分
下载量:0
评分:
5.0
上传者:m0_74249600
更新日期:2024-08-09

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

资源文件列表(大概)

文件名
大小
ConsoleApplication1.cpp
16KB

资源内容介绍

内容概要:使用C++编写的数据结构课程大作业:图书管理系统,实际考核优秀案例适用人群:C++数据结构学习者,计算机方向大学生,期末考核焦虑人群使用场景:再不写出来期末就丸辣!!!
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include<iostream>#include<fstream>#include<time.h> #include <ctime>#include <sstream>#include <vector>#include<queue>using namespace std;#pragma warning( disable : 4996 )#define MAXNUM 30#define MAX 100#define OK 1#define ERROR -1typedef 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) {//#构造一个空的顺序栈SSLS = 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);//左左elseUpdateLR(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);//右右 elseUpdateRL(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);//左左elseUpdateLR(rt);//左右}else if (res && GetHeight(rt->lchild) - GetHeight(rt->rchild) < -1) {if (GetHeight(rt->rchild->rchild)>=GetHeight(rt->rchild->lchild))UpdateRR(rt);//右右 elseUpdateRL(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);//左左elseUpdateLR(rt);//左右 }else if (res && GetHeight(rt->lchild) - GetHeight(rt->rchild) < -1) {if (GetHeight(rt->rchild->rchild) >= GetHeight(rt->rchild->lchild))UpdateRR(rt);//右右 elseUpdateRL(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;//创建新的结点qwhile (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

用户评论 (0)

发表评论

captcha

相关资源

解压缩软件 winrar-64位

WinRAR是一款广泛使用的文件压缩和解压缩软件,专为Windows操作系统设计,支持64位系统架构。它由RarLab公司开发,以其强大的压缩能力、广泛的文件格式支持和用户友好的界面而闻名。WinRAR的主要功能是压缩和解压缩文件,支持创建RAR和ZIP格式的压缩文件,同时也能解压多种其他格式,如7Z、ARJ、CAB、GZIP、TAR、ACE等。这使得WinRAR成为处理不同压缩文件格式的理想工具,无论是在日常使用还是专业领域。软件的界面直观易用,用户可以轻松地通过图形界面进行压缩、解压缩、添加文件到压缩包、删除压缩包中的文件等操作。WinRAR还提供了命令行界面,方便高级用户通过脚本或批处理文件自动化处理压缩任务。在压缩方面,WinRAR提供了多种压缩级别选项,用户可以根据需要选择不同的压缩级别来平衡压缩速度和压缩率。高级压缩功能包括固实压缩、多卷压缩和恢复记录,这些功能在需要高效压缩大量数据或确保数据传输的完整性时特别有用。WinRAR还具备密码保护功能,允许用户为压缩文件设置密码,以保护敏感数据不被未授权访问。此外,它还支持创建自解压文件(.exe格式),方便在没

3.04MB28积分

JSON格式化和查看器(客户端工具)-C#-winform-.net4.8

1、对于大文件和复杂结构的JSON,一般的文本编辑器不便于查看JSON结构。本工具独创层级结构可以快速定位大JSON的每个子级,子级的位置一目了然。2、对JSON字符串格式化和压缩。

273.68KB11积分

小巧屏幕画笔 ZoomIt64.exe

ZoomIt是一款由微软公司旗下的Sysinternals开发的屏幕放大、注释和演示辅助工具。它以其小巧的体积、强大的功能和易用性而受到广泛欢迎。ZoomIt64.exe是该软件的64位版本,专为64位Windows操作系统设计,能够充分利用现代硬件的性能,提供更流畅的使用体验。ZoomIt的主要功能包括屏幕放大、屏幕注释和定时提醒。通过简单的快捷键操作,用户可以轻松地在演示或教学过程中放大屏幕上的任何区域,以便更清晰地展示细节。此外,它还允许用户在放大模式下进行屏幕注释,使用不同颜色的笔迹在屏幕上直接勾画和标注,非常适合教师在讲课时使用,或者在进行技术演示时突出显示特定内容。ZoomIt的定时提醒功能为用户提供了在演示或会议中设置倒计时的便利,帮助控制演示的节奏和时间管理。此外,它还支持屏幕截图和录制功能,用户可以将当前屏幕内容截图保存到剪贴板或文件中,甚至可以录制屏幕操作过程,非常适合制作教程或记录演示过程。ZoomIt64.exe的界面简洁直观,用户无需安装即可使用,只需下载后直接运行即可。它支持自定义快捷键,用户可以根据个人习惯设置快捷键,提高操作效率。该软件体积小

139.01KB32积分

截图工具 存储 snipaste

截图工具 自用 存储

27.23MB47积分