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

这是一个关于数据结构实验的项目,通过顺序存储结构设计一个个人图书信息管理系统。系统支持图书信息的录入、修改、增加、删除以及查找操作,采用C#语言实现。详细设计包括初始化、信息录入、信息处理、信息统计和查找等模块。

数据结构实验

第一章 个人图书信息管理系统
第二章 停车场管理
第三章 哈夫曼编码



前言

线性表的顺序表示又称为顺序存储结构顺序映像
顺序存储定义:把逻辑上相邻的数据元素存储在物理上仙林的存储单元中的存储结构。简而言之,逻辑上相邻,物理上也相邻。
顺序存储方法:用一组地址连续的存储单元依次存储线性表的元素,可通过数组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 Book

typedef 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)
线性结构反映节点间的逻辑关系是一对一的。

其他内容请继续关注!
代码:图书管理系统

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUPT_bo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值