图书馆管理系统

2023-11-10

图书馆管理系统实验
1.新建project
点击OK后工程如下:
项目的组织方式:需要被多个文件用到的变量声明,类的声明和函数声明放在头文件里,声明可以存放在多个不同的文件里,这些文件使用#include"*.h"来包含这些头文件。而这些变量的定义和函数定义和类的实现(可以理解为定义)在某个.cpp里实现,定义只需要定义一次。
2.项目文件的创建:
按链存储结构存储的线性表称为链表。链表的基本操作包括链表的初始化、取值、查找、插入元素、删除元素等。下面以图书管理系统的链表结构为对象,进行对应算法的实验。

一般编程使用3步骤:
第1步:数据类型及线性表的链式存储结构定义;
第2步:实现基本操作;
第3步:在main()中调用基本操作。
2.1链表的初始化
1、在struch.h文件中进行数据类型及线性表的链式存储结构定义

#ifndef __STRUCH_H__
#define __STRUCH_H__
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型

struct Book {
    char id[15];//ISBN
    char name[15];//书名
    double price;//定价
};
typedef struct LNode {
    Book data; //结点的数据域
    struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
#endif


说明:需要在main.cpp中  #include "struch.h"

2.2实现基本操作
新建一个books_operation.cpp文件用来存放对表的所有操作
2.2.1第一个操作,链表的初始化
链表的初始化操作就是构造一个空的链表。
算法2.1 链表的初始化
【算法步骤】


【算法描述】
#include<iostream>
#include<cstring>
#include "struch.h"
using namespace std;


//初始化
Status InitList_L(LinkList &L) { //算法2.6 单链表的初始化
    //构造一个空的单链表L
    L = new LNode; //生成新结点作为头结点,用头指针L指向头结点
    L->next = NULL; //头结点的指针域置空
    return OK;
}
void ShowBooks(LinkList L){
    LNode *p = L->next;
    cout << "ISBN" << "\t" << "书名" << "\t" << "价格";
    cout << "\n";
    while(p != NULL){
        cout << p->data.id << "\t" << p->data.name << "\t" << p->data.price << "\n";
        p = p->next;
    }
}

说明:要在头文件function_declare.h里声明函数
2.3 函数的声明写在头文件function_declare.h中

#ifndef __FUNCTION_H__
#define __FUNCTION_H__

Status InitList_L(LinkList &L);
#endif
说明:
#ifndef __FUNCTION_H__
#define __FUNCTION_H__//一般是文件名的大写
头文件结尾写上一行:
#endif
这样一个工程文件里同时包含两个function.h时,就不会出现重定义的错误了。
2.4.book信息的读取写到file_operation.cpp文件中

#include<stdio.h>
#include<string>
#include "struch.h"

Status read_books(LinkList &L){
    
    LNode *r;
    r = L;
    FILE *fp;
    if((fp = fopen("book.txt","r")) == NULL){
        puts("Fail to open file");
        return ERROR;
    }
    
    while(!feof(fp)){
        LNode *p = new LNode;
        fscanf(fp,"%s%s%lf\n", p->data.id,p->data.name,&p->data.price);
        p->next = NULL;
        r->next = p;
        r = p;
    }
    r->next = NULL;
    fclose(fp);
    return OK;
}
说明:要在头文件function_declare.h里声明函数
2.5设计主函数main()
#include <iostream>
#include <iostream>
#include <stdlib.h>
#include <stdbool.h>
#include <conio.h>
#include "struch.h"
#include "function_declare.h"
using namespace std;

int main(int argc, char** argv) {

    LinkList L, L_p;
    char id[15], name[15];
    LNode *p;
    double min_p, max_p, price;
    int init, result_DE, result_UP, ch;
    cout << "--按任意键进入主菜单--";
    getch();
    while(1){
        system("cls");
        cout << "============主菜单=========" << "\n";
        cout << "1、建立链表" << "\n";
        cout << "2、图书信息显示" << "\n";
        cout << "3、添加图书" << "\n";
        cout << "4、删除图书" << "\n";
        cout << "5、查找图书(By id)" << "\n";
        
        cout << "0、退出" << "\n";

        cout << "请输入需要的功能序号:" << "\n";
        ch = getch()-48;
         switch(ch){
             case 1:
                 init = InitList_L(L);
                 read_books(L);
                if(init){
                    cout << "初始化成功!" << "\n";
                }else{
                    cout << "初始化失败!" << "\n";
                }
                system("pause");
                 break;
             case 2:
                 ShowBooks(L);
                 system("pause");
                 break;
            /*
             case 3:
                 cout << "请输入书籍编号" << "\n";
                cin >> id;
                cout << "请输入书籍名称" << "\n";
                cin >> name;
                cout << "请输入书籍价格" << "\n";
                cin >> price;
                if(AddBook(L,id,name,price))
                   cout << "添加完成!" << "\n";
                else
                   cout << "此书已被添加!" << "\n";
                system("pause");
                 break;
             case 4:
                 cout << "请输入要删除的书籍编号" << "\n";
                cin >> id;
                result_DE = DeleteBook(L,id);
                if(result_DE){
                    cout << "删除成功!" << "\n";
                }else{
                    cout << "删除失败!" << "\n";
                }
                system("pause");
                 break;
            case 5:
                 cout << "请输入ID号!" << "\n";
                cin >> id;
                p = FindBookById(L,id);
                if (p){
                    cout << "ISBN" << "\t" << "书名" << "\t" << "价格";
                    cout << "\n";
                    cout << p->next->data.id << "\t" << p->next->data.name << "\t" << p->next->data.price << "\n";
                }else{
                    cout << "未找到该书籍" << "\n";
                }
                system("pause");
                 break;
             */
            case 0:
                system("cls");
                cout << "===已退出!===" << "\n";
                system("pause");
                return 0;
            default :
            printf("输入错误,请重新输入!\n");
            system("pause");
            break;

         }
    }
    return 0;
}
3.编译运行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图书馆管理系统 的相关文章

  • 具有相同参数类型但具有不同常量限定符的 std::vector 的转换

    问题很简单 静态转换 或其他一些转换 通常是安全的 std vector lt Foo gt to std vector lt const Foo gt 就二进制而言 我不明白为什么本机类型会有所不同 毕竟const是一种语言约束 不应影响
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • 为什么我会收到未找到分析器的警告?

    我创建了一个玩具项目来检查最新的 NET 7 预览版 5 和正则表达式代码生成 它效果很好 所以我对现有项目应用了相同的更改 不是为了生产 而是为了个人生产力 由于某种原因 我收到这些警告 CS8032 An instance of ana
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • C# 无法捕获 SerializationException

    我的程序在加载序列化文件的部分遇到问题 如果文件无法反序列化 我希望很好地失败 但由于某种原因 我的程序将中断而不是进入 catch 子句 这是我的代码 using FileStream fs new FileStream openFile
  • ContentDialog 未与 UWP 中心对齐

    据我所知 ContentDialog的默认行为应该是使其在 PC 上居中并在移动设备上与顶部对齐 但就我而言 即使在 PC 上我也将其与顶部对齐 但我不明白发生了什么 我正在使用代码隐藏来创建它 这是我正在使用的代码片段 Creates t
  • 在c#中获取没有时间的日期

    我的表上有一列 缺勤日期时间 日期 当我想要获取包含日期的行时 它返回 0 行 这是我的 C 代码 DateTime ClassDate DateTime Parse lblDate Content ToString var Abs dbs
  • 调用异步方法在视图模型的构造函数中加载数据有警告

    我的视图包含一个 ListView 它显示来自互联网的一些数据 我创建一个异步方法来加载数据并在我的视图模型的构造函数中调用该方法 它有一个警告提示我现在使用await关键字 还有其他解决方案可以在构造函数中异步加载数据吗 有几种可以应用的
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • 您对“大规模 C++ 软件设计”的看法 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 正在阅读亚马逊评论 https rads stackoverflow com amzn click com 0201633620 and ACC
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 使用 CodeDOM 将程序集添加到 BuildManager 会导致间歇性错误

    我正在使用 CodeDOM 在运行时创建内存中程序集 如下所示 public Assembly Compile CodeCompileUnit targetUnit string path Path GetDirectoryName new
  • 将一个 IEnumerable 拆分为多个 IEnumerable

    我是 linq 新手 我需要根据指示器将 Couple string text bool Indicator 类型的 IEnumerable 拆分为多个 IEnumerable 我尝试使用skipWhile 和 TakeWhile 但没有找

随机推荐

  • 华为oj初级 在字符串中找出连续最长的数字串

    描述 样例输出 输出123058789 函数返回值9 输出54761 函数返回值5 接口说明 函数原型 unsignedint Continumax char pOutputstr char intputstr 输入参数 char intp
  • 使用DataX和sqoop将数据从MySQL导入Hive

    使用DataX和sqoop将数据从MySQL导入Hive 一 DataX简述 二 sqoop简述 三 需求背景 四 实现方式 3 1 使用DataX将数据从MySQL导入Hive 3 2 通过sqoop将数据从MySQL导入Hive 四 总
  • 解决重启Linux服务器后数据消失问题(重新挂载)

    目录 一 挂载 1 重新挂载 2 数据消失的原因 二 重启服务器 1 shutdown 2 其它关机重启指令 参考自 一 挂载 1 重新挂载 使用 reboot 命令重启服务器后 服务器内挂载的文件全部丢失 那应该如何重新挂载呢 我们想将1
  • 【满分】【华为OD机试真题2023 JS】任务总执行时长

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 任务总执行时长 知识点数组循环递归 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 任务编排服务负责对任务进行组合调度 参与编排的任务有两种类型 其中一种执行时长
  • SDL2.0渲染图像

    SDL封装了opengl和directx包含图像显示和音频播放 SDL的API文档 https wiki libsdl org SDL渲染图像的步骤 1 初始化接口 int SDLCALL SDL Init Uint32 flags 2 创
  • mmdetection目标检测训练过程参数解读

    关于训练过程中日志记录的的map 包含很多map 如下 mode train epoch 100 iter 400 lr 0 0002 memory 5010 data time 0 01552 loss rpn cls 0 00029 l
  • 雾化

    https www cnblogs com kenkao archive 2011 08 14 2137726 html 风动和雾化都是相对而言比较简单的游戏特效 实现起来甚至比我们前一节提到的晴天光晕还要简单 大家还记得上上节中我们为陆地
  • C语言怎么才能学好

    多做题 多上机练习
  • 什么!网络安全工程师就是网管?这是他们被黑的最惨的一次!

    什么 网络安全工程师就是网管 这是他们被黑的最惨的一次 经常会有人问我 小伙子你是做什么工作的 我 网络安全工程师 接下来就会有一大堆疑问 A 网管 网吧管理员 B 就是修电脑的 给电脑装杀毒软件的 C 是不是开发游戏 开发操作系统的 首先
  • 【Java】基本类型之int(五)

    int 数据类型是32位 有符号的以二进制补码表示的整数 最小值是 2 147 483 648 2 31 最大值是 2 147 483 647 2 31 1 一般地整型变量默认为 int 类型 默认值是 0 例子 int a 100000
  • web和servlet一样的用法但是有区别

    转载于 https www cnblogs com Koma vv p 10220260 html
  • 使用ServerSocket和Thread写一个简单的web服务器小程序,山寨版Tomcat

    需求 写一个模拟服务器小程序 当服务器开启后 多个浏览器客户端可以并发访问 服务器获取浏览器的请求信息 并反馈信息给浏览器 效果如下 编译并开启 运行 服务器 服务器处于阻塞状态 等待浏览器的访问 谷歌浏览器访问成功 服务端的访问信息 一个
  • Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

    转载请注明出处 http blog csdn net guolin blog article details 9255575 最近项目中需要用到ListView下拉刷新的功能 一开始想图省事 在网上直接找一个现成的 可是尝试了网上多个版本的
  • Java基础——常量、进制、变量、数据类型及运算符

    今天呢阿Q就带大家了解一下java的常量 变量 数据类型以及运算符的相关知识 常量 1 在程序的运行过程中 其值是不可以发生改变的量 2 常量的分类 字面值常量 自定义常量 将在后边的讲解中给出 字面值常量又分为 整数常量 12 23 实数
  • 设计模式之工厂模式

    目录 使用场景 简单工厂模式 工厂方法模式 抽象工厂模式 参考 Java设计模式 工厂模式 IT longlong 博客一 简单工厂模式 简单工厂模式就是把对类的创建初始化全都交给一个工厂来执行 而用户不需要去关心创建的过程是什么样的 只用
  • wheel安装+使用wheel安装第三方库+临时换源安装和永久换源安装

    上一篇文章 Python要点及其环境搭建 Pycharm简单使用教程 wheel安装 使用wheel安装第三方库 临时换源安装和永久换源安装 wheel安装 使用wheel安装第三方库 临时换源安装 永久换源安装 python的三种不同编辑
  • Layui的 checkbox 全选/单选 示例

    转自 http www xiaoshu168 com jquery 118 html layui 的checkbox 居然不能用jq上常用的方法控制全选 如下代码不适用 allChecked change function box chil
  • 【微信小程序】关于页面中引入背景的两种方式

    布局设计思路
  • Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意

    原标题 Adobe全新AI工具引关注 Adobe firefly 萤火虫 助力创作更高效 更有创意 以ChatGPT为首的生成式AI AIGC等工具的战局正如火如荼的进行中 除了微软 百度的聊天机器人和一些初创公司的AI画图工具令人惊艳 全
  • 图书馆管理系统

    图书馆管理系统实验 1 新建project 点击OK后工程如下 项目的组织方式 需要被多个文件用到的变量声明 类的声明和函数声明放在头文件里 声明可以存放在多个不同的文件里 这些文件使用 include h 来包含这些头文件 而这些变量的定