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

这篇具有很好参考价值的文章主要介绍了E1基于线性表的图书管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  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)

E1基于线性表的图书管理系统,数据结构C,java,数据库,前端

  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.基于链表的图书管理系统:

E1基于线性表的图书管理系统,数据结构C,java,数据库,前端

E1基于线性表的图书管理系统,数据结构C,java,数据库,前端

E1基于线性表的图书管理系统,数据结构C,java,数据库,前端文章来源地址https://www.toymoban.com/news/detail-718076.html

到了这里,关于E1基于线性表的图书管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构课设--图书管理系统(含泪版)

    设计一个计算机管理系统完成图书管理基本业务。 【基本要求】 (1)每种书的登记内容包括书号、书名、著作者、现存量和库存量; (2)对书号建立索引表(线性表)以提高查找效率; (3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只

    2024年02月08日
    浏览(47)
  • 【数据库课设】图书馆资源管理系统 源码+流程图+结构设计(借还图书 逾期罚款 图书管理 读者管理 信息查询)python实现

    一个管理员编号对应一个密码,且需要有管理员注册密匙。 可以在图书信息表中录入、修改、删除图书。 可以在图书信息表中查询书籍。 可以编辑图书借阅、归还信息。 可以编辑欠款信息。 可以编辑读者信息表。 图书馆注册,获得读者编号。 可以在图书信息表中查阅书籍

    2024年02月10日
    浏览(53)
  • 图书管理系统|基于Springboot的图书管理系统设计与实现(源码+数据库+文档)

    图书管理系统目录 目录 基于Springboot的图书管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、个人中心 2、管理员管理 3、用户管理 4、图书出版社管理 四、数据库设计 1、实体ER图 五、核心代码  六、论文参考 七、最新计算机毕设选题推荐 八、源码获取:

    2024年03月26日
    浏览(90)
  • 基于javaweb的图书管理系统

    本项目采用eclipse工具开发,jsp+servlet技术编写,样式采用了layui前端框架,数据库采用的是mysql,navicat开发工具。 系统一共分为2个角色分别是: 管理员,学生 1、登录 2、修改个人信息 3、图书类型管理 4、图书管理 5、图书借阅管理 6、借阅审批管理 7、图书借阅统计 8、学生

    2024年02月04日
    浏览(44)
  • 基于JAVA的图书管理系统

                                                                    摘要         网络技术给生活带来了十分的便利。所以把图书管理与现在网络相结合。在图书馆发展的整个过程中,图书担负着最重要的角色。为满足如今日益复杂的管理需求,各类管理系统程序也

    2024年02月12日
    浏览(37)
  • 基于.net的学校图书管理系统

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85596210 文档+任务书+项目源码 目 录 前 言 1 第一章 绪 论 2 1.1研究背景及意义 2 1.2主要内容 2 1.3学校图书管理系统意义 3 1.4本文的组织结构 3 第二章 系统开发环境与相关技术介绍 4 2.1开发工具以及环境介绍 4 2.1.1 IIS Web服

    2024年02月04日
    浏览(39)
  • 基于Python的图书信息管理系统

    进入21世纪以来,信息技术从根本上推动了图书馆的飞速发展,计算机和计算机管理系统已成为图书馆进行图书管理的主要设备和系统。虽然目前很多大型的图书馆已经有一整套比较完善的管理系统,但是在一些中小型的图书馆中,大部分工作仍需手工完成,工作起来效率比

    2024年02月04日
    浏览(57)
  • 【开源】基于JAVA的图书管理系统

    图书管理系统是一个用于管理图书馆资源的软件系统,该系统包括图书馆模块、图书类型模块、图书模块、图书借阅模块和公告模块。 图书馆模块 是系统的核心模块,用于管理图书馆的基本信息,包括图书馆名称、地址、联系方式等。管理员可以通过该模块进行图书馆信息

    2024年02月21日
    浏览(47)
  • 基于Python+MySQL的图书管理系统

    目录 前言 一、开发环境与开发工具 二、系统需求分析 三、系统功能分析 四、数据库设计 1、数据库概念结构设计 (1)数据流程图  (2)系统ER图 2、数据库逻辑结构设计 3、数据库物理结构设计 五、数据库应用系统各个模块代码设计          1、主界面模块 2、登录界

    2024年02月02日
    浏览(46)
  • 基于JavaWeb的图书馆管理系统

    🍅 作者主页:

    2024年02月05日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包