E1基于线性表的图书管理系统

news2024/10/6 6:05:54
  1. 需求分析

提示:以无歧义的陈述说明程序设计的任务,主要说明内容是程序要做什么并明确规定:(1) 输入的形式和输入值的范围;(2) 输出的形式;(3) 程序所能达到的功能

图书信息管理:

定义一个包含图书信息(书号、书名、 价格)的顺序表.

  1. 输入图书信息

功能:录入图书信息

【输入】: n+1 行

前 n 行: n 本图书的信息:书号、 书名、价格

第 n+1 行:输入结束标志:0 0 0(空格分隔的三个 0)

每本图书信息占一行,用空格分隔,价格之后没有空格,书号 和书名为字符串类型char[ ],价格float。

【输出】:n+1行

第1行:图书数目

后n行:图书信息(价格保留2位小数

(2)计算平均价格,调整价格。

功能:计算所有图书对的平均价格。将所有低于平均价格的图书价格提高 20%,

所有高于或等于平均价格的图书价格提高 10%

【输入】:同(1)

【输出】:n+1行

第1行:修改前所有图书平均价格

后n行:修改后n本图书信息

每本图书信息占一行,用空格分隔,价格之后没有空格,书号 和书名为字符串类型char[ ],价格float保留2位。

  1. 查找价格最高的图书

【输出】: m+1 行

第1行:最贵图书的数目(可能多本)

后 m行:最贵图书的信息

(4)根据指定的待入库的新图书的位置和信息

【输入】: n+3 行

第 1 行:图书数目 n

后 n 行: n 本图书的信息 (书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔

第 n+2 行:输入一个整数,代表待入库的新图书的位置序号。

第 n+3 行:内容 为新图书的信息,书号、书名、价格用空格分隔。

【输出】:

若插入成功:输出更新后所有图书的信息(书号、书名、价格)总计 n+1 行;

若插入失败:输出“抱歉,入库位置非法!”。

(5)根据指定待出库的旧图书位置,将该图书从图书表中删除

【输入】 n+23 行

第 1 行:图书数目 n

后 n 行: n 本图书的信息(书号、书名、价格)

第 n+2 行:输入一个整数,代表待删除的新图书的位置序号。

【输出】:

若删除成功:输出旧图书出库后所有图书的信息(书 号、书名、价格)

总计 n-1 行,每行是一本图书的信息

若删除失败:只输出以下提示:抱歉, 出库位置非法!

  1. 概要设计

【提示:说明设计中用到的抽象数据类型的定义、主程序的流程图。】

1.基于链表的图书管理系统:

ADT:

typedef struct {

    char id[100];//书号

    char name[100];//书名

    float price;//图书价格

} Book;

typedef struct LNode {

    Book data;//图书

       struct LNode* next;

} LNode, * LinkList;

函数:

void printBooks(LinkList L)

void input(LinkList* L)

float Average(LinkList L)

void changeprice(LinkList L, float aver)

void FM(LinkList L)

void insertBook(LinkList* L, int index, Book b)

void deleteBook(LinkList* L, int i)

  1. 基于顺序表的图书管理系统:

ADT:

//图书结构

typedef struct{

    char id[100];//书号

    char name[100];//书名

    float price;//价格

}BOOK;

//基于顺序表的图书列表

typedef struct{

    BOOK  *book;//图书

    int length;

}BookList;

函数:

int InitList(BookList  *blist)

void   inputBook(BookList *L)

void PrintBookList(BookList blist)

float Average_Modify(BookList *blist)

void  Find(BookList blist)

void InsertList(BookList *L)

void DeleteList(BookList *L)

  1. 详细设计

【提示:实现概要设计中定义的主要数据类型,并实现其中的基本操作和主程序等。】

  1. 基于链表的图书管理系统:

ADT:

typedef struct {

    char id[100];//书号

    char name[100];//书名

    float price;//图书价格

} Book;

typedef struct LNode {

    Book data;//图书

       struct LNode* next;

} LNode, * LinkList;

函数:

void printBooks(LinkList L)

void input(LinkList* L)//输入图书信息          

float Average(LinkList L)//求图书价格平均值     

void changeprice(LinkList L, float aver)//调整图书价格      

void FM(LinkList L)//寻找图书价格最高的图书的信息     

void insertBook(LinkList* L, int index, Book b)//插入图书   

void deleteBook(LinkList* L, int i)//删除图书     

int main(){

    BookList blist;

    int choice;

    float average;

    int status,p=1;

            printf("【1. 输入图书信息\n");

            printf("【2. 计算平均价格并调整价格\n");

            printf("【3. 查找最贵的图书\n");

            printf("【4. 插入新图书\n");

 

            printf("【5. 删除旧图书\n");

            printf("【0. 退出\n");

    while(p==1){

        printf("请输入你的选择:");

        scanf("%d", &choice);

        switch (choice){

            case 1:

                status =InitList(&blist);

                printf("1");

                //录入图书信息

                if(status==OK){

                    inputBook(&blist);

                }

                //输出图书信息

                printf("现有图书馆内图书书目为%d\n图书馆内所有图书信息依次为:\n",blist.length);//图书书目

                PrintBookList(blist);

                printf("\n");

                break;

                

            case 2:

                //输出图书均价

                average=Average_Modify(&blist);

                printf("现图书馆内图书平均价格为%.2f \n调整图书价格后,图书馆内所有图书信息为:\n",average);

                //输出修改价格后图书信息

                PrintBookList(blist);

                printf("\n");

                break;

                

            case 3:

                //查找价格最高图书

                Find(blist);

                break;

                

            case 4:

                //插入

                InsertList(&blist);

                break;

                

            case 5:

                DeleteList(&blist);

                printf("删除成功后,图书馆内所有图书信息为\n");

                PrintBookList(blist);

                break;

            case 0:

                p=0;

                break;

            default:

                printf("无效的选择,请重新输入。\n");

        }

    }

    return 0;

}

2.基于顺序表的图书管理系统:

//图书结构

typedef struct{

    char id[100];//书号

    char name[100];//书名

    float price;//价格

}BOOK;

//基于顺序表的图书列表

typedef struct{

    BOOK  *book;//图书

    int length;

}BookList;

函数:

int InitList(BookList  *blist)//初始化BookList类型变量

void   inputBook(BookList *L)//输入图书信息

void PrintBookList(BookList blist)//打印图书信息

float Average_Modify(BookList *blist)//求图书价格平均值并对价格进行调整

void  Find(BookList blist)//寻找价格最高的图书信息

void InsertList(BookList *L)//插入新图书

void DeleteList(BookList *L)//删除图书

主函数:

int main() {

    LinkList L=0;

    int choice,i;

    float ave;

    Book b;

    do {

        printf("【1. 输入所有图书信息\n");

        printf("【2. 求平均价格并且调整价格\n");

        printf("【3. 查找最贵图书并输出\n");

        printf("【4. 插入新图书\n");

        printf("【5. 删除旧图书\n");

        printf("【0. 退出\n");

        scanf("%d", &choice);

        switch (choice) {

        case 1:

            input(&L);

            printBooks(L);

            break;

        case 2:

            ave = Average(L);

            printf("平均价格:%.2f\n", ave);

            changeprice(L, ave);

            printBooks(L);

            break;

        case 3:

            FM(L);

            break;

        case 4:

            printf("新图书的位置:");

            scanf("%d", &i);

            printf("新图书的信息(书号、书名、价格):");

            scanf("%s %s %f", b.id, b.name, &b.price);

            insertBook(&L, i,b);

            printBooks(L);

            break;

        case 5:

            printf("要删除的图书位置:");

            scanf("%d", &i);

            deleteBook(&L, i);

            printBooks(L);

            break;

        case 0:

            break;

        default:

            printf("NO! please choose again\n");

        }

    } while (choice != 0);

    return 0;

}

  1. 调试分析

【提示:(1) 调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;(2) 算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(3) 经验和体会等。】

  1. 基于链表的图书管理系统算法的时空分析:

1.为时间复杂度:2.为空间复杂度

void printBooks(LinkList L)//打印图书信息       1.0(n)  2.O(1)

void input(LinkList* L)//输入图书信息          1.0(n)  2.O(1)

float Average(LinkList L)//求图书价格平均值     1.0(n)  2.O(1)

void changeprice(LinkList L, float aver)//调整图书价格      1.0(n)  2.O(1)

void FM(LinkList L)//寻找图书价格最高的图书的信息     1.0(n)  2.O(1)

void insertBook(LinkList* L, int index, Book b)//插入图书   1.0(n)  2.O(1)

void deleteBook(LinkList* L, int i)//删除图书     1.0(n)  2.O(1)

(2)基于顺序表的图书管理系统的时空分析:

int InitList(BookList  *blist)//初始化BookList类型变量  : 1.0(1)  2.O(1)

void   inputBook(BookList *L)//输入图书信息     1.0(n) 2.0(1)

void PrintBookList(BookList blist)//打印图书信息     1.0(n) 2.0(1)

float Average_Modify(BookList *blist)//求价格平均值并对调整 1.0(n) 2.0(1)

void  Find(BookList blist)//寻找价格最高的图书信息 1.0(n) 2.0(n)

void InsertList(BookList *L)//插入新图书    1.0(n) 2.0(1)

void DeleteList(BookList *L)//删除图书    1.0(n) 2.0(1)

  1. 遇到的问题:
  1. 在顺序表插入算法中,对于新插入的图书我第一次用Book *e存放相关信息,发现计算机自动将数据放入了原有顺序表BookList L的L->book[0]中,于是乎我重新定义BookList E,用 E->book[0]存放相关信息就不会出现错误赋值的现象 ;
  2. 在链表的主函数中,我原本只用do while语句不能实现选择循环,后添加进while(1)才进入选择循环。
  1. 经验与体会:

项目实验的练习比 平时在oj和力扣上面的算法练习更加具有结构系统的完整,需要考虑到很多数据的衔接与传输。oj的算法练习可以作为项目实验的小模块基础,但是更加完善的项目实验则需要更加缜密的思维和夯实的基础。就像左老师说的作为软件工程的学生,对于大型软件的设计开发才是主线任务。

同时,这次实验也让我更加重视我往后学习的重点和时间安排的合理性。

  1. 测试数据与结果

【提示:列出程序测试结果,包括输入和输出。测试数据应尽可能完整和严格,考虑异常值的处理。】

1.基于链表的图书管理系统:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1150803.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++网络编程基础知识超详细讲解第二部分(系统性学习day12)

懒大王感谢大家的关注和三连支持~ 目录 前言 一、UDP编程 UDP特点: UDP框架: UDP函数学习 发送端代码案例如下: 二、多路复用 前提讲述 select poll 三、图解如下 总结 前言 作者简介: 懒大王敲代码,…

OpenLayers实战,OpenLayers解析渲染TopoJson格式区划边界数据和实现鼠标经过高亮显示区划边界和文字

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers实现从vue项目中加载assets资源目录中的TopoJson格式数据,解析渲染TopoJson格式行政区划边界数据,并且实现鼠标经过区域高亮显示区划边界和文字的功能。 本章是综合应用,为方便大家理解代码,拆分为简单的…

强化学习中的值函数

一、值函数 几乎所有的强化学习算法都涉及到估计值函数——状态(或状态-动作对)的函数,这些函数估计代理处于给定状态(或在给定状态下执行给定动作)的好坏。这里的“好坏”概念是根据可以预期的未来奖励来定义的&#…

动手学深度学习 - 学习环境配置

学习环境配置 1、安装 Miniconda1.1 下载 miniconda31.2 环境变量配置1.3 安装成功测试1.4 配置文件1.5 使用conda创建、使用、删除环境1.6 conda 常用命令 2、使用 miniconda 安装 d2l2.1 下载 d2l 安装包2.2 安装 d2l 1、安装 Miniconda 参考: https://www.jb51.n…

云尘-JIS-CTF-VulnUpload

继续做渗透 一样给了c段 开扫 存在一个站点 去看看 扫一下吧 第一个flag出来了 存在robots.txt 去看看 admin 页面源代码 第二个flag和账号密码 登入 就一个上传点 这不明显死了哈哈哈哈哈哈哈 直接开喽 上传修改后缀一气呵成 发现只有success 但是我们刚刚robots存在uploa…

十五、redis的使用

目录 一、简介1.1 nosql介绍1.2 redis特性1.3 redis优势1.4 redis应用场景 二、安装2.1 Macos下安装2.2 Linux下安装2.4 客户端连接2.5 切换数据库 三、数据库操作3.1 string类型3.2 键的操作3.3 Hash类型3.4 list类型3.5 set类型3.6 zset类型 四、和python交互4.1 安装redis包…

3.2每日一题(定积分求抽水做工问题)

1、画图,把题目的容器画出来:球形容器,半径为R 2、根据容器的形状进行分析: 抽水的实质是不同深度的水抽出去走的位移是不一样的>抽水的过程 : (1)先考虑深度为 x到xdx 的薄层水抽出去做多少…

草料资料库丨2023年全国消防宣传月资料合集,免费下载

2023年11月9日是第32个全国消防日,国务院安委会办公室决定于11月份在全国开展消防宣传月活动,主题是“预防为主,生命至上”。 结合今年消防安全月相关要求,我们特邀 注册安全工程师 邵悦 为大家整理了2023年全国消防宣传月的资料…

2023-在mac下安装Homebrew的国内镜像

mac安装Homebrew的国内镜像 尝试使用其他下载源:GitHub 可能会受到访问限制,尝试使用其他镜像或下载源。您可以使用清华大学、中科大或阿里云的 Homebrew 镜像,以提高下载速度和可靠性。例如,可以使用阿里云的镜像来安装 Homebre…

myCobot 320 APP 控制技术案例

引言 机械臂是现代工业和科研领域中的重要工具,它们在制造业、医疗、农业、教育等多个领域都有广泛的应用。这些机器臂不仅可以进行精密操作,而且能够在人类无法进入的危险环境中工作,大大提高了工作效率和安全性。然而,传统的机械…

UE5 日记(人物连招:蒙太奇动画通知(含视频链接))

教程https://www.youtube.com/watch?vsWpENaVGj2M&listPLiSlOaRBfgkcPAhYpGps16PT_9f28amXi&index10&ppiAQB 相关蓝图 连招逻辑 动画通知类 逻辑分析 1.用户输入 已搭载战斗系统模块,可以收到输入指令 2.连击 第一次攻击: 第一次攻击,…

camtasia studio 2024功能介绍安装教程

Camtasia studio 2024是一款功能强大的屏幕录制和视频编辑软件。它可以帮助用户轻松地记录电脑屏幕上的任何操作,并可以将录制的视频进行编辑和制作成高质量的视频教程、演示文稿、培训课程等。 Camtasia studio 2024具有直观的界面和易于使用的工具,包…

springboot动态数据源【非伪数据源】

说明&#xff1a;本文章的数据源不是在配置文件中配置两个或多个数据源&#xff0c;在业务方面对这些数据源来回切换&#xff0c;本文章中的数据源是可以动态添加&#xff0c;修改&#xff0c;切换的&#xff0c;废话不多说。 先看工程图&#xff1a; 1.pom.xml文件 <?x…

第五章 I/O管理 三、I/O控制方式(程序直接控制、中断驱动方式、DMA方式、通道控制方式)

目录 一、程序直接控制方式 1、以读操作为例 2、CPU的干预 3、数据传送的单位 4、数据的流向 5、优点 6、缺点 二、中断驱动方式 1、定义&#xff1a; 2、CPU干预的频率 3、数据传送的单位 4、数据的流向 5、主要缺点和主要优点 优点: 缺点: 三、DMA方式&#x…

R语言使用surveyCV包对NHANES数据(复杂调查加权数据)进行10折交叉验证

美国国家健康与营养调查&#xff08; NHANES, National Health and Nutrition Examination Survey&#xff09;是一项基于人群的横断面调查&#xff0c;旨在收集有关美国家庭人口健康和营养的信息。 地址为&#xff1a;https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 既往咱们…

世界前沿技术发展报告2023《世界航空技术发展报告》(六)航空动力技术

&#xff08;六&#xff09;航空动力技术 1.军用航空动力技术1.1 美国空军授出下一代自适应推进项目合同1.2 法国完成下一代战斗机发动机原型机地面测试1.3 美国通用电气公司为美国陆军测试首台T901涡轴发动机1.4 美国液体活塞公司研制高功重比重油发动机 2.民用航空动力技术2.…

这样刻《少年强则国强》也行……

孙溟㠭篆刻《少年强则国强 》 这是篆书&#xff0c;隶书&#xff0c;简化字刻法有点意思。 孙溟㠭篆刻《少年强则国强》

信息系统项目管理师教程 第四版【第7章-项目立项管理-思维导图】

信息系统项目管理师教程 第四版【第7章-项目立项管理-思维导图】 课本里章节里所有蓝色字体的思维导图

一文告诉你样机是什么,分享几个常用的样机模板

一个项目的诞生通常需要经历头脑构思、绘制设计和最终着陆。在这个过程中&#xff0c;样机制作往往是在着陆实践之前进行的。俗话说&#xff1a;“样机使用得好&#xff0c;草稿过早”。样机设计是产品或网站最终设计的生动、静态和视觉表现。它为用户提供了一种模拟现实的方式…

大语言模型有什么魅力?和生成式AI是一回事吗?亚马逊云科技可以告诉你

大语言模型和生成式AI有什么关系呢&#xff1f;大语言模型为什么这么火&#xff1f;一提到大语言模型&#xff0c;想必大家第一个想到的就是ChatGPT这样的自然语言处理工具&#xff0c;那么大语言模型是什么&#xff1f;大语言模型和生成式AI是什么关系&#xff1f;就让我以亚马…