目录

(一)实验内容

(二)实验目的

(三)实验主要数据类型定义

(四)系统功能概述

(五)实验代码

(六)实验内容展示


(一)实验内容

设计并实现一个图书信息管理系统。根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能。 该系统至少包含以下功能:

  1. 根据指定图书个数,逐个输入图书信息;
  2. 逐个显示图书表中所有图书的相关信息;
  3. 能根据指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置;
  4. 根据指定的待出库的旧图书的位置,将该图书从图书表中删除;
  5. 能统计表中图书个数;
  6. 实现图书信息表的图书去重;
  7. 实现最爱书籍查询,根据书名进行折半查找,要求使用非递归算法实现,成功返回此书籍的书号和价格;
  8. 图书信息表按指定条件进行批量修改;
  9. 利用快速排序按照图书价格降序排序;
  10. 实现最贵图书的查找

(二)实验目的

  1. 了解并掌握数据结构和算法设计的方法,具备初步的独立分析和设计能力
  2. 初步掌握软件开发过程的问题分析分析、系统设计、程序编码和测试等基本方法和技能。
  3. 提高综合运用所学的理论知识和方法,独立分析和解决问题的能力。
  4. 训练用系统的观点和软件开发一般规范进行软件的开发,培养软件工作着所具备的科学工作方法和作风。

(三)实验主要数据类型定义

1.图书信息的定义:

typedef struct {

char no[8];   //8位书号

char name[20]; //书名

int price;     //价格

}Book;

2.顺序表的定义:

typedef  struct {

Book  *elem;     //指向数据元素的基地址

int  length;       //线性表的当前长度       

}SqList;

3.链表的定义:

typedef struct LNode{

Book   data;       //数据域

struct LNode  *next;   //指针域

}LNode,*LinkList;

(四)系统功能概述

1.基于顺序存储/链式存储结构的图书信息表的创建和输出

定义一个包含图书信息(书号、书名、价格)的顺序表。读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。

输入

输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1 行是输入结束标志:0 0 0(空格分隔的三个 0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计 n+1 行,第 1 行是所创建的图书表中的图书个数,后 n 行是 n 本图书的信息(书号、

书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两

位小数。

输入样例:

9787302257646 程序设计基础 25.00

9787302164340 程序设计基础(第 2 版) 20.00

9787302219972 单片机技术及应用 32.00

9787302203513 单片机原理与应用技术 26.00

9787810827430 工业计算机控制技术——原理与应用 29.00

9787811234923 汇编语言程序设计教程 32.00

0 0 0

2.基于顺序存储/链式存储结构的图书信息表的修改

读入图书信息表,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。

输入

输入 n+1 行,其中前 n 行是 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第 n+1 行是输入结束标志:0 0 0(空格分隔的三个 0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计 n+1 行,第 1 行是修改前所有图书的平均价格,后 n 行是价格修改后 n 本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输入样例:

9787302257646 程序设计基础 25.00

9787302164340 程序设计基础(第 2 版) 20.00

9787302219972 数据挖掘与机器学习 32.00

9787302203513 模式识别与智能计算 26.00

9787810827430 工业计算机控制技术——原理与应用 29.00

9787811234923 操作系统教程 32.00

0 0 0

输出样例:

9787302257646 程序设计基础 30.00

9787302164340 程序设计基础(第 2 版) 24.00

9787302219972 数据挖掘与机器学习 35.20

9787302203513 模式识别与智能计算 28.60

9787810827430 工业计算机控制技术——原理与应用 31.90

9787811234923 操作系统教程 35.20

3.基于顺序存储/链式存储结构的图书信息表的最贵图书查找

读入相应的图书信息表,然后查找价格最高的图书,输出相应图书的信息。

输出

总计 m+1 行,其中,第 1 行是最贵的图书数目,(价格最高的图书可能有多本),后m行是最贵图书的信息,每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

输出样例:

2

9787302219972 数据挖掘与机器学习 35.20

9787811234923 操作系统教程 35.20

4.基于顺序存储/链式存储结构的图书信息表的最爱图书的查找

读入相应的图书信息表,然后根据指定的最爱图书的名字,输出相应图书的信息。

输入

输入1行,为每次待查找的最爱图书名字。

输出

若查找成功,输出k+1行,对于每次查找,第一行是最爱图书数目,同一书名的图书可能有多本,后K行是最爱图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。若查找失败:只输出以下提示:抱歉,没有你的最爱!

输出样例

2

9787302257646 程序设计基础 30.00

9787302164340 程序设计基础(第 2 版) 24.00

5.基于顺序存储/链式存储结构的图书信息表的新书入库

读入指定的待入库的新图书的位置和信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后所有图书的信息。

输入

总计n+1行,首先输入第1行,内容仅为一个整数,代表待入库的新图书的位置序号,然后输入n行,内容为新图书的信息,书号、书名、价格用空格分隔。

输出

若插入成功,输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

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

输入样例:

2

9787302265436  计算机导论实验指导 18.00

输出样例:

9787302257646 程序设计基础 30.00

9787302265436 计算机导论实验指导 18.00

9787302164340 程序设计基础(第 2 版) 24.00

9787302219972 数据挖掘与机器学习 35.20

9787302203513 模式识别与智能计算 28.60

9787810827430 工业计算机控制技术——原理与应用 31.90

9787811234923 操作系统教程 35.20

6.基于顺序存储/链式存储结构的图书信息表的旧书出库

读入指定的待出库的旧图书的书号,将该图书从图书表中删除,最后输出旧图书出库后所有图书的信息。

输入

输入待出库的旧图书的书号;

输出

若删除成功,输出旧图书出库后所有图书的信息(书号、书名、价格),每行是一本图书的信息,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

若删除失败,只输出以下提示:出库失败,未找到该图书!

7.基于顺序存储/链式存储结构的图书信息表的图书去重

出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。读入相应的图书信息表(事先加入书号重复的记录),然后进行图书的去重,即删除书号重复的图书(只留第一本),最后输出去重后所有图书的信息。

输出

总计输出m+1行(m<=n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。

(五)实验代码

LinkList.h

#ifndef LINKLIST_H
#define LINKLIST_H#include <iostream>
#include <stdlib.h>
#include"string.h"
#include <string>
using namespace std;typedef struct
{char no[20];   char name[100];double price;
}Book;struct Node
{Node* Next;Book Data;
};class LinkList
{
public:Node* H;LinkList();LinkList(Book* p, int n);LinkList(LinkList& l);int GetLen();Book GetData(int Pos);Node* MoveTo(int Pos);void Insert(Book Data, int Pos);~LinkList();void Cout();void Delete(int Pos);void Input();void duplicateRemoval();int findFavorite();void prisort();int getTheMostExpensive();int findTheBook();
};#endif

LinkList.cpp

#include "LinkList.h"
#include<iostream>
using namespace std;//默认构造函数
LinkList::LinkList()
{H = new Node[1];H->Next = NULL;
}
//带参构造函数
LinkList::LinkList(Book* p, int n)
{H = new Node[1];H->Next = NULL;for (int i = 0; i < n; i++)Insert(p[i], i + 1);
}
//拷贝构造函数
LinkList::LinkList(LinkList& l)
{H = new Node[1];H->Next = NULL;int Len = l.GetLen();for (int i = 0; i < Len; i++){Book Data = l.GetData(i + 1);Insert(Data, i + 1);}
}LinkList::~LinkList()
{while (H->Next != NULL)Delete(1);delete[]H;H = NULL;
}void LinkList::Insert(Book Data, int Pos)
{Node* p = new Node;p->Data= Data;Node* q = MoveTo(Pos - 1);p->Next = q->Next;q->Next = p;
}Node* LinkList::MoveTo(int Pos)
{Node* p = H;for (int i = 0; i < Pos; i++)p = p->Next;return p;
}Book LinkList::GetData(int Pos)
{Node* p = H;for (int i = 0; i < Pos; i++)p = p->Next;return p->Data;
}int LinkList::GetLen()
{Node* p = H->Next;int Len = 0;while (p != NULL){Len++;p = p->Next;}return Len;
}void LinkList::Cout()
{for (Node* p = H->Next; p != NULL; p = p->Next){cout << "书号为:";cout << p->Data.no << endl;cout << "书名为:";cout << p->Data.name << endl;cout << "价格为:";cout << p->Data.price << endl;cout << endl;}
}void LinkList::Delete(int Pos)
{Node* p = MoveTo(Pos - 1);Node* q = p->Next;p->Next = q->Next;delete[]q;
}void LinkList::Input()
{cout << "请按顺序输入图书号、图书名与图书价格(三项均为0时表示输入结束)" << endl;char a[20], b[100];double c;cin >> a >> b >> c;while (a != "0" && b != "0" && c != 0){Book temp;strcpy_s(temp.no,a);strcpy_s(temp.name,b);temp.price = c;Insert(temp, GetLen()+1);cin >> a >> b >> c;}}void LinkList::duplicateRemoval()
{for (int i = 1; i <= GetLen(); i++){for (int j = i+1; j <= GetLen(); j++){double num1 = strtod(MoveTo(i)->Data.no, NULL);double num2 = strtod(MoveTo(j)->Data.no, NULL);if (num1==num2 ){Delete(j);}}}
}void LinkList::findFavorite()
{int number= GetLen() / 2;char Name[100];cout << "请输入喜爱书籍书名" << endl;cin >> Name;int left, right;int mid;left = 1;right = GetLen();while (left <= right){mid = left + (right - left) / 2;for (int i = left; i < mid; i++){if (strcmp(Name, MoveTo(i)->Data.name) == 0){right = mid - 1;}}if (strcmp(Name, MoveTo(mid)->Data.name) == 0){cout << endl;cout << "喜爱书籍书号为" << MoveTo(mid)->Data.no << endl;cout << "喜爱书籍价格为" << MoveTo(mid)->Data.price << endl;return 1;}for (int i=right; i > mid; i--){if (strcmp(Name, MoveTo(i)->Data.name) == 0){left = mid + 1;}}}
}void LinkList::prisort()
{Book key;int i, j;for (i = 1; i <= GetLen(); i++){key = MoveTo(i)->Data;for (j = i - 1; j >= 0; j--){if (MoveTo(j)->Data.price < key.price){MoveTo(j+1)->Data = MoveTo(j)->Data;}elsebreak;}MoveTo(j+1)->Data = key;//直到找到已排序的元素大于或者等于新元素的位置,将新元素插入到该位置后}Cout();cout << "排序完成!" << endl << endl;}int LinkList::getTheMostExpensive()
{Node* p = H->Next;int Price = p->Data.price;while (p != NULL){if (p->Data.price > Price){Price = p->Data.price;}p = p->Next;}return Price;
}int LinkList::findTheBook()
{Node* p = H->Next;int pos=1;while (p != NULL){if (p->Data.price == getTheMostExpensive()){return pos;}p = p->Next;pos++;}
}

DataStructure1.cpp

#include <iostream>
#include"LinkList.h"
#include <stdlib.h>
#include <string>
using namespace std;int main()
{LinkList Libirary;int push_botton = 1;while (push_botton){cout << "                  欢迎来到图书信息管理系统" << endl;cout << "请输入对应的序号来实现功能:" << endl;cout << "1.根据指定图书个数,逐个录入图书信息" << endl;cout << "2.逐个显示图书表中所有图书的相关信息" << endl;cout << "3.将新图书插入到图书表中指定的位置" << endl;cout << "4.按照位置将该图书从图书表中删除" << endl;cout << "5.统计表中图书个数" << endl;cout << "6.图书信息表的图书去重" << endl;cout << "7.最爱书籍查询" << endl;cout << "8.批量修改" << endl;cout << "9.按照图书价格降序排序" << endl;cout << "10.查找最贵图书" << endl;cout << "0.退出程序" << endl;cin >> push_botton;if (push_botton == 1){Libirary.Input();}if (push_botton == 2){Libirary.Cout();}if (push_botton == 3){int a;char b[20], c[100];double d;cout << "请按顺序输入插入位置、图书号、图书名与图书价格" << endl;cin >> a >> b >> c>>d;Book temp;strcpy_s(temp.no, b);strcpy_s(temp.name, c);temp.price = d;Libirary.Insert(temp, a);}if (push_botton == 4){int pos;cout << "请输入删除书籍位置" << endl;cin >> pos;Libirary.Delete(pos);}if (push_botton == 5){cout << "图书馆书籍总数为" << Libirary.GetLen() << endl;}if (push_botton == 6){Libirary.duplicateRemoval();cout << "以下为去重后的图书数据" << endl;Libirary.Cout();}if (push_botton == 7){Libirary.findFavorite();}if (push_botton == 8){int aver=0;for (int i = 1; i <= Libirary.GetLen(); i++){aver = aver + Libirary.MoveTo(i)->Data.price;}aver = aver / Libirary.GetLen();Node* p = Libirary.H->Next;while (p != NULL){if (p->Data.price < aver){p->Data.price = p->Data.price * 1.2;}else{p->Data.price = p->Data.price * 1.1;}p = p->Next;}cout << "修改前平均价格为 " << aver << endl;Libirary.Cout();}if (push_botton == 9){Libirary.prisort();}if (push_botton == 10){cout << "最贵书籍为" << Libirary.MoveTo(Libirary.findTheBook())->Data.name << endl;}}return 0;
}
/*9787302257646 程序设计基础 25.00
9787302164340 程序设计基础(第2版) 20.00
9787302219972 单片机技术及应用 32.00
9787302203513 单片机原理与应用技术 26.00
9787810827430 工业计算机控制技术——原理与应用 29.00
9787811234923 汇编语言程序设计教程 32.00
0 0 0*/

(六)实验内容展示

数据结构课程设计实验一:图书信息管理系统的设计与实现相关推荐

  1. 湖北汽车工业学院c语言程序设计 汽车零部件采购管理程序,湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统).docx...

    湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统) C语言课程设计 商品销售信息管理系统 #include #include #include #include structproduct// ...

  2. 数据结构实验--个人图书信息管理系统

    数据结构实验 第一章 个人图书信息管理系统 第二章 停车场管理 第三章 哈夫曼编码 第一章 个人图书信息管理系统 数据结构实验 前言 一.需求分析 二.概要设计 三.详细设计 1.全局变量.元素类型. ...

  3. 预习:图书信息管理系统的设计与实现

    (一)实验内容 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和交互逻辑,并编码实现增删改查的各项功能. 该系统至少包含以下功能: 根据指定图书个数,逐个输入图书信息: 逐个显示图书表中 ...

  4. 数据结构:实现图书信息管理系统

    数据结构:顺序表实现图书信息管理系统 大一的数据结构实验拖延了相当长一段时间,最近老师终于让我们实验形式完成一次数据结构作业,我把自己的渣程序放在这里,希望能对肝实验的同学提供帮助,也希望各位大神路过 ...

  5. 图书信息管理系统(数据结构顺序表,c语言版)

    图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...

  6. 图书信息管理系统(数据结构链表,c语言版)

    图书信息管理系统 链表 一.实验题目 二.工具环境 三.实验问题 四.实验代码 五.实验总结 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括三部分信息:ISB ...

  7. 修改图书信息c语言,图书信息管理系统c语言.doc

    图书信息管理系统c语言.doc 沈阳航空航天大学理学院 C语言程序设计课程设计报告 题目: 图书信息管理系统 专 业: 信息与计算科学 班 级: 学 号: 学生姓名: 指导教师: 2010年 7月 9 ...

  8. 基于Spring boot的图书馆图书借阅管理系统的设计与实现

    作者主页:编程千纸鹤 作者简介:Java.前端.Python开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 收藏点赞不迷路  关注作者有好处 ...

  9. 用c语言做简单的用户管理系统,简单客户信息管理系统的设计与实现.doc

    简单客户信息管理系统的设计与实现 学 年 设 计 报 告 设计题目 简单客户信息管理系统的设计与实现 作者姓名 林燕.丁楠楠.赵长永.陈勇祥.孙青.张书生 所学专业 网络工程 指导教师 王汇彬 201 ...

最新文章

  1. LeetCode简单题之数组中两元素的最大乘积
  2. 让你分分钟学会Javascript中的闭包
  3. java 异常_Java学习——异常与异常处理
  4. Oracle之SQL分析函数
  5. python绘制散点图、如何选两列作为横坐标_Python利用matplotlib绘制散点图的新手教程...
  6. 三星+android7.0+字体,三星S7升级安卓7.0新技能:新增分辨率调整功能
  7. 【ios】在真实设备上运行
  8. 【运动女神】99年、健身达人、北方女孩、直爽善谈、乐天派、旅行爱好者
  9. 重量级Orchard模块发布 - 模块生成工具RaisingStudio.ModuleGenerator
  10. s2jh mysql_mysql 一对多 查询 出一行数据
  11. 基于FPGA的循迹小车,控制器:Xilinx-Ego1
  12. 《缠中说禅108课》96:无处不在的赌徒心理
  13. Jupyter Notebook打开出现“python.exe无法找到入口 无法定位程序输入点...动态链接库E:\Anaconda3\pythoncom36.dll上”
  14. 不同尺寸证件照混合打印
  15. Vue-html5-editor 编辑器的使用及一些问题解决
  16. Only fullscreen opaque activities can request orientation 最好的解析
  17. 【DeepLearning】【环境配置】Ubuntu 下手动调节 Nvidia 显卡风扇转速
  18. 认识loadrunner及相关性能参数
  19. 成为人生的赢家都有哪些书_那么,我们是否有代码挑战#1的赢家?
  20. 迷你世界箱子里物品无限取

热门文章

  1. java 播放mid_今天编辑了一个播放mid音乐的程序,呵呵,,分享一下我的快乐!...
  2. 《查看Linux系统版本以及VMWARE快照》
  3. php向文件中写一行 换行,如何实现php向文件中写入换行
  4. java堆栈、gc、dump文件在线分析
  5. 公车艳遇_习惯累积沉淀_新浪博客
  6. OpenHarmony3.1适配移远EC20模组4G上网功能
  7. java中rate,Java务实际利率之Excel函数RATE
  8. element-ui中el-input数字和小数输入
  9. 回调函数,回调函数,回调函数,什么是回调函数
  10. C语言中的结构体(struct)详解