数据结构实验
第一章 个人图书信息管理系统
第二章 停车场管理
第三章 哈夫曼编码
第一章 个人图书信息管理系统
- 数据结构实验
- 前言
- 一、需求分析
- 二、概要设计
- 三、详细设计
- 1.全局变量、元素类型、结点类型和指针类型
- 2.顺序表的基本操作
- 3.主函数
- 总结
前言
线性表的顺序表示又称为顺序存储结构或顺序映像。
顺序存储定义:把逻辑上相邻的数据元素存储在物理上仙林的存储单元中的存储结构。简而言之,逻辑上相邻,物理上也相邻。
顺序存储方法:用一组地址连续的存储单元依次存储线性表的元素,可通过数组V[n]。
一、需求分析
1.利用顺序表建立一个存储并管理个人图书信息的系统,每一本图书至少包括书名、版本、作者、出版社、ISBN编号、出版日期等数据。系统具备表的建立和初始化,图书信息录入,修改,增加,删除的操作。
2.在本演示程序中,图书信息数据可以从键盘录入,已录入的图书信息存储到一个文本文件中。
根据初始输入的操作码,可分别执行一下操作:0-初始化图书信息管理系统,1-录入图书信息,2-修改图书数据,3-增加图书数据,4-删除图书数据,5-统计图书总数,6-根据书名查找图书,7-根据版本查找图书,8-根据作者查找图书,9-根据出版社查找图书,10-根据ISBN编码查找图书,11-根据出版日期查找图书。
3.测试数据:
不少于15本书的信息。
二、概要设计
根据题目要求,该问题的实现可以分为五个模块:
初始化模块——建立和初始化系统具备表
信息录入模块——录入图书信息,并存储到文件
信息处理模块——修改、增加或删除图书信息
信息统计模块——统计图书的总数
查找模块——按照图书的某项数据查找图书
有序表的抽象数据类型定义为:
ADT SqList{
数据对象:D={Book[i]|Book[i]∈CharSet,i=1,2,3…,n, n≥0}
数据关系:R1={<Book[i-1],Book[i]> | Book[i-1],Book[i]∈D,i=2,…,n}
基本操作:
在主函数里
control(SqList *L);
初始条件:有序表L已存在。
操作结果:函数控制器,负责根据输入的操作码不同进行不同的操作。
initLibrary(SqList *L);
初始条件:有序表L已存在。
操作结果:初始化,录入信息,并存储到文件
modifMessage(SqList *L, i); //
初始条件:有序表L已存在。
操作结果:修改指定的第i本书的图书信息,输入“1 ”后开始操作。
addMessage(SqList *L,i);
初始条件:有序表L已存在。
操作结果:增加指定的第i本书的图书信息,输入“2 ”后开始操作。
deleteMessage(SqList *L,i);
初始条件:有序表L已存在。
操作结果:删除指定的第i本书的图书信息,输入“3 ”后开始操作。
outputSum(SqList L);
初始条件:有序表L已存在。
操作结果:统计图书总数,输入“4 ”后开始操作,返回图书的总数。
findBook(SqList L);
初始条件:有序表L已存在。
操作结果:查找图书,返回查找的图书下标。
compareName_book(Book a,Book b);
初始条件:有序表L已存在。
操作结果:比较目标图书a和源图书b的书名是否相同,如果相同返回OK,否则返回ERROR。
compareVersion_book(Book a,Book b);
初始条件:有序表L已存在。
操作结果:比较目标图书a和源图书b的版本是否相同,如果相同返回OK,否则返回ERROR。
compareAuthor_book(Book a,Book b);
初始条件:有序表L已存在。
操作结果:比较目标图书a和源图书b的作者是否相同,如果相同返回OK,否则返回ERROR。
comparePublish_book(Book a,Book b);
初始条件:有序表L已存在。
操作结果:比较目标图书a和源图书b的出版社是否相同,如果相同返回OK,否则返回ERROR。
compareISBN_book(Book a,Book b);
初始条件:有序表L已存在。
操作结果:比较目标图书a和源图书b的ISBN码是否相同,如果相同返回OK,否则返回ERROR。
comparedate_book(Book a,Book b);
初始条件:有序表L已存在。
操作结果:比较目标图书a和源图书b的出版日期是否相同,如果相同返回OK,否则返回ERROR。
void output(Book *e,FILE *fp);
初始条件:有序表L已存在。
操作结果:全部操作完成后,将所有图书信息存入文件中。
三、详细设计
1.全局变量、元素类型、结点类型和指针类型
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>#define SIZE 20
#define bookNUM 10000
#define MODIF 1
#define ADD 2
#define DELETE 3
#define SUM 4
#define findNAME 5
#define findVERSION 6
#define findAUTHOR 7
#define findPUBLISH 8
#define findISBN 9
#define findDATE 10#define OK true
#define ERROR false
#define OVERFLOW 0
#define NOELEM 0
#define Status bool
#define ElemType Booktypedef struct{char name[SIZE]; //书名 char version[SIZE]; //版本char author[SIZE]; //作者char publish[SIZE]; //出版社char ISBN[SIZE]; //ISBN编号char date; //出版日期
}Book;/*定义一个顺序表 */
typedef struct{Book *elem;int listLength;
}SqList;
2.顺序表的基本操作
/*函数总部 */
Status control(SqList *L);
/*初始化,录入信息,并存储到文件 */
Status initLibrary(SqList *L); //系统具备表的建立和初始化
/*对信息的处理 */
Status modifMessage(SqList *L,int i); //图书信息修改,输入“1 ”后开始操作。
Status addMessage(SqList *L,int i); //图书信息增加,输入“2 ”后开始操作。
Status deleteMessage(SqList *L,int i); //图书信息删除,输入“3 ”后开始操作。
/*对信息的统计 */
int outputSum(SqList L); //统计图书总数,输入“4 ”后开始操作。
/*查找图书 */
int findBook(SqList L);
Status compareName_book(Book a,Book b); //根据书名找书,输入“5 ”后开始操作。
Status compareVersion_book(Book a,Book b); //根据版本找书,输入“6 ”后开始操作。
Status compareAuthor_book(Book a,Book b); //根据作者找书,输入“7 ”后开始操作。
Status comparePublish_book(Book a,Book b); //根据出版社找书,输入“8 ”后开始操作。
Status compareISBN_book(Book a,Book b); //根据 ISBN编码找书,输入“9 ”后开始操作。
Status comparedate_book(Book a,Book b); //根据出版日期找书,输入“10 ”后开始操作。
void output(Book *e,FILE *fp); //将所有信息放入文件。
3.主函数
int main()
{printf("Welcome to Hilda's Library Management System !\n");//建立SqList L;control(&L);return 0;
}
总结
线性表
栈和队列
串、数组和广义表
线性结构表达式:(a1,a2,……,an)
线性结构反映节点间的逻辑关系是一对一的。
其他内容请继续关注!
代码:图书管理系统