数据结构:顺序表实现图书信息管理系统

大一的数据结构实验拖延了相当长一段时间,最近老师终于让我们实验形式完成一次数据结构作业,我把自己的渣程序放在这里,希望能对肝实验的同学提供帮助,也希望各位大神路过的时候能指出我的不足

实验要求

一、基本要求

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

2、将图书按照价格降序排序,逐行输出排序后每本图书的信息。

3、将所有低于平均价格的图书价格提高 20%,所有高于或等于平均价格的图书价格提高 10%,最后逐行输出价格修改后的图书信息。

4、输出逆序存储后每本图书的信息。

5、查找价格最高的图书,输出相应图书的信息。

6、根据指定的最爱图书的名字,查找最爱的图书,输出相应图书的信息。

7、根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。

8、将新图书插入到图书表中指定的位置上。

9、根据指定的待出库的旧图书的位置,将该图书从图书表中删除,最后输出
该图书出库后的所有图书的信息。

二、老师要求

1、尽量用同一个表实现上述功能

2、可自行增加该系统功能

三、个人附加功能

1、以彩色界面呈现该系统

2、可一键清空所有数据

3、可按作者查找书籍(作者名需完整)

4、读取文件中的书籍信息并存入系统

5、可临时输入数据

6、以保留两位小数形式显示价格(怎么感觉这么多余。。。)

实现代码

头文件以及定义顺序表和书籍结构

#include<iostream>
#include<string.h>
#include <cassert>
#include <iomanip>
#include<fstream>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
#define maxsize 30
using namespace std;
typedef struct {                                //定义结构体:bookint num;                                    //序号char name[maxsize];                         //书名float price;                                //价格char writer[maxsize];                       //作者char time[11];                              //出版时间
}book;
typedef struct{book *data;                                 //数据存储域int length;                                 //长度域
}linklist;

创建空表

void init(linklist &L)
{L.data=(book*)malloc(maxsize*sizeof(book));L.length=0;               //开创空间后再设置长度为0
}

输出信息

void printflist(linklist &L)
{int i;for(i=0;i<L.length;i++){cout<<L.data[i].num<<" 《"<<L.data[i].name<<"》 ¥"<<setiosflags(ios::fixed)<<setprecision(2)<<L.data[i].price;cout<<" 作者:"<<L.data[i].writer<<" 出版时间:"<<L.data[i].time;cout<<"\n";}
}

删除指定信息

bool deletelist(linklist &L,int i)
{      int k;if(i<1||i>L.length+1)                   //指定元素位置过于奇特return false;for(k=i;k<=L.length;k++) {L.data[k-1]=L.data[k];              //将后面元素依次前移 }L.length--;return true;
}

根据价格降序排列

void pricejiang(linklist &L)         //把*位置的‘<’改一下就是换一种顺序排列
{int i,j;int n=L.length; linklist t; for(i=0;i<n-1;i++)                                                  {for(j=i+1;j<n;j++){if(L.data[i].price<L.data[j].price)//*{t.data[0]=L.data[i];L.data[i]=L.data[j];L.data[j]=t.data[0];}}}cout<<"已完成排序:";printflist(L);
}

批量更改价钱(这功能。。。)

void moneychange(linklist &L)
{double sum=0;int i;for(i=0;i<L.length;i++){sum+=L.data[i].price;}sum/=L.length;i=0;while(i<L.length){if(L.data[i].price<sum){L.data[i].price=L.data[i].price*6/5;}else{L.data[i].price=L.data[i].price*11/10;}}cout<<"已完成价格改动\n";printflist(L);
}

逆转排序

void blacktowhite(linklist &L)
{linklist S;init(S);int i,n=L.length;for(i=0;i<n;i++){S.data[i]=L.data[i];}for(i=0;i<n;i++){L.data[i]=S.data[n-i-1];deletelist(S,n-i);L.length++;}cout<<"逆置成功\n";
}

根据书名查找信息

void chaname(linklist &L)        //根据书名查找信息
{int i,n=0; char bookname[20];cout<<"请输入需要查找图书的书名:";cin>>bookname;int num=L.length;for(i=0;i<num;i++){if(strcmp(L.data[i].name,bookname)==0){n++;cout<<"查找成功! 该图书的信息为:\n"<<endl;cout<<L.data[i].num<<" ";cout<<" 《"<<L.data[i].name<<"》  "<<setiosflags(ios::fixed)<<setprecision(2)<<L.data[i].price<<"  "<<L.data[i].writer<<"  "<<L.data[i].time; }}    if(n==0)cout<<"查找失败!"<<endl;
}

根据作者查找信息

void chawriter(linklist &L)      //根据作者查找信息
{int i,n=0; char bookname[20];int num=L.length;cout<<"请输入需要查找图书的作者:";cin>>bookname;cout<<"查找结果"; for(i=0;i<num;i++){if(strcmp(L.data[i].writer,bookname)==0){n++;cout<<L.data[i].num<<" ";cout<<L.data[i].name<<" "<<L.data[i].name<<"  价格:"<<L.data[i].price<<"  "<<L.data[i].time<<"出版  作者:"<<L.data[i].writer; }}    if(n==0)cout<<"查找失败!"<<endl;
}

插入元素

bool insert(linklist &L,int i,book &e)
{int j;if(i<1||i<L.length+1)//位置不合法,返回失败 {return false;}i--;//对应下标状态;for(j=L.length;j>i;j--){L.data[j]=L.data[j-1];}//i后所有元素在顺序表上向后移动一位 strcpy(L.data[i].name,e.name);L.data[i].price=e.price;strcpy(L.data[i].writer,e.writer);//将e放入第i位 strcpy(L.data[i].time,e.time);L.length=L.length+1;return true;
}

查找最贵的书

bool findmax(linklist &L)
{if(L.length=0){return false;}int i=1,index=0;float exp=L.data[0].price;while(i<L.length){if(L.data[i].price>exp){exp=L.data[i].price;index=i;}}cout<<"最贵的图书信息如下:";cout<<L.data[index].num<<" 《"<<L.data[index].name;cout<<"》 ¥"<<L.data[index].price<<" 作者:"<<L.data[index].writer<<" 出版时间:"<<L.data[index].time;
}

输入信息

 bool input(linklist &L)
{cout<<"输入信息"; char i;int y;int j,k;if(L.length>maxsize){cout<<"库存已满";return false;}    else{for(;;y++){L.data[L.length].num=L.length+1;cout<<L.data[L.length].num<<"\n";cout<<"输入书籍名称:";cin>>L.data[L.length].name;cout<<"输入价格:";cin>>L.data[L.length].price;cout<<"输入作者:";cin>>L.data[L.length].writer;cout<<"输入出版时间:";cin>>L.data[L.length].time; L.length++;cout<<"结束输入?\n 是(Y)   否(other)\n选择:";cin>>i;if(i=='y'||i=='Y') {break;}if(L.length>maxsize){cout<<"库存已达上限!";return false;}}}return true;
}

菜单函数与主函数

void meau()
{cout<<"                    *图书管理系统*                   \n";cout<<"-----------------------------------------------------\n";cout<<"                    1.创建记录表格                   \n";cout<<"                     -2.插入数据-                    \n";cout<<"                     -3.删除数据-                    \n";cout<<"                   -4.删除所有记录-                  \n";cout<<"                     -5.读取文件-                    \n"; cout<<"                   -6.查看记录列表-                  \n";cout<<"                     -7.价格调整-                    \n";cout<<"                    -8.按书名查找-                   \n";cout<<"                   -9.按作者查找-                    \n";cout<<"                     -10.逆转排序-                    \n";cout<<"                   -11.按价格排序-                   \n"; cout<<"                    -12.输入数据-                    \n";cout<<"                       -0.退出-                      \n";cout<<"                  |请输入选择:";
}
int main()
{linklist L;book e;init(L);int choice;do{char a;system("cls");                  //刷屏函数,用于返回主菜单,保持页面整洁system("color E0");             //页面颜色为黄底黑字meau();cin>>choice;switch(choice){case 1:init(L); input(L); break;case 2:cout<<"分别输入书名、价格、作者、出版时间:"; cin>>e.name>>e.price>>e.writer>>e.time;cout<<"想插入到第几个位置?"; cin>>e.num; insert(L,e.num,e); break;case 3:printflist(L);cout<<"输入需要删除数据的编号:";int z; cin>>z;if(deletelist(L,z)==1)cout<<"删除成功!";else cout<<"数据非法!!!";cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 4:for(int i1=1;i1<=L.length;i1++){deletelist(L,i1);}cout<<"已删除所有数据";cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 5:break;case 6:printflist(L); cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 7:moneychange(L); cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 8:chaname(L); cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 9:chawriter(L); cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 10:blacktowhite(L); cout<<"按b键退出\n"; cin>>a;if(a=='b'||a=='B'){break;}case 11:pricejiang(L);  cout<<"按b键退出"; cin>>a;if(a=='b'||a=='B'){break;}case 12:input(L);   cout<<"按b键退出"; cin>>a;if(a=='b'||a=='B'){break;}}}while(choice!=0);    return 0;
}

运行结果

上述界面按Y之后

实验结果与分析

该程序历时3小时完成,其中我遇到了较多困难,如文件无法读入、程序运行时崩溃、显示信息时只显示了乱码等情况,程序前期运行过程中有很多的失误,导致了效率低下;但最终我还是通过询问老师,查阅书籍等方式改正了错误,实验结果的正确性也得到了验证。虽说可能仍存在一些不足之处,我也会虚心接受,在过程中力求做到尽可能的完善

数据结构:实现图书信息管理系统相关推荐

  1. 图书信息管理系统 数据结构 C语言版

    图书信息管理系统 原文链接 本代码是为了实现数据结构书上的案例2.3.由于书中对于代码功能的描述太过简单,很难理解他到底具体的要求是什么,所以我只能根据自己的理解来实现查找,插入,删除,修改,排序和计 ...

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

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

  3. 数据结构——图书信息管理系统的顺序表实现

    大部分代码来自严蔚敏老师的<数据结构>教材,但对于书上的伪代码,有编译运行不了的地方,我进行了修改,使得程序可以正常运行,功能正常使用. 代码利用顺序表制作了一个图书信息管理系统,可以进行 ...

  4. 数据结构实验--基于线性表的图书信息管理系统

    本文是依据数据结构习题解析与实验指导(李冬梅)一书中的第一个实验–基于线性表的图书信息管理系统所写的. 之所以写这个,是因为这个实验不仅涉及到线性表的结构设计,还包括一些线性表的基本操作,个人认为,做 ...

  5. 数据结构课程设计实验一:图书信息管理系统的设计与实现

    目录 (一)实验内容 (二)实验目的 (三)实验主要数据类型定义 (四)系统功能概述 (五)实验代码 (六)实验内容展示 (一)实验内容 设计并实现一个图书信息管理系统.根据实验要求设计该系统的菜单和 ...

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

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

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

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

  8. 数据结构课设实验一:图书信息管理系统

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

  9. 初识数据结构:链表实现图书信息管理系统(C语言,仅供参考)

    目录 1.创建表结构 2.创建表 3.打印链表 4.查找功能的实现 5.插入功能的实现 6.删除功能的实现 7.修改功能的实现 8.计数功能的实现 9.排序功能的实现 10.封装图书信息管理系统 1. ...

最新文章

  1. [转]ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()的简单说明
  2. 帕斯卡命名法 pascal命名法
  3. 为什么说Java 程序员必须掌握 Spring Boot?
  4. Python图像处理库:Pillow 初级教程
  5. clickhouse 同步mysql_ClickHouse和他的朋友们(11)MySQL实时复制之GTID模式
  6. Failed to execute goal org.apache.maven.plugins:ma
  7. 为什么企业越来越重视数据分析与挖掘?
  8. Hyper snap
  9. Android自适应国际化语言
  10. 显色指数(CRI)计算软件-升级版可视化界面这个人大家自己斟酌人品
  11. 怎么评估计算机的执行速度,Win10在CMD下使用WinSAT进行评估电脑性能解决方法
  12. 通用技术机械图尺寸标注高考必看知识点
  13. shell检测连接数最多的IP
  14. pandas计算年化收益波动率
  15. 解决华硕电脑Ubuntu16.04连接不上wifi的问题
  16. 基于笔画序列的中文字向量模型设计与研究
  17. IIS部署Thinkphp网站
  18. 最新kali之cadaver
  19. checkBox 选中 移除
  20. 渗透之——asp图片木马的制作和使用

热门文章

  1. 0x800700E1: 无法成功完成操作,因为文件包含病毒 解决方法
  2. 万人「变阵冲刺」,京东数科没有终点
  3. 网络技术基础测试(一)
  4. 职称计算机考试 ps太难,2012年职称计算机考试photoshop常用技巧(3)
  5. React的Render的简单实现
  6. 矩阵篇(四)-- 实随机向量的相关矩阵、协方差矩阵、相关系数
  7. python 日历热力图_Python绘制日历图和热力图
  8. 儿童编程培训都学什么
  9. 没有免费午餐定理(No Free Lunch Theorem)
  10. 利用集合进行数组的排序