人人范文网 范文大全

数据结构课程设计—西文图书管理系统

发布时间:2020-03-02 23:20:15 来源:范文大全 收藏本文 下载本文 手机版

数据结构课程设计报告

课程名称:数据结构课程设计

课设题目: 西文图书管理系统 教师姓名:

本科生姓名:

王瑞林

本科生学号:

20121002932

号:

191124

期:2014年6月20日

题号:十

题目:西文图书管理

1.需求分析

图书管理系统对象有两个,包括读者和管理员。

读者的需求:借书,还书,续借,查询当前所借书籍还书截至日期,查询借阅历史,修改登陆密码。其中借书可以根据书号和书名两种方式查询借阅。

管理员的需求:采编入库,清除库存,注册读者,删除读者,根据书号查询书籍,修改管理员用户名和密码。

2.设计

2.1设计思想

(1)数据与操作特性:

有搜索,插入,删除操作。而数据有:读者信息,书籍信息,读者借阅书籍历史信息,书籍读者借阅历史信息,读者当前所借书籍信息。 (2)数据结构设计:

数据的逻辑结构有线性结构和树形结构。

根据书号和书名建立两个B-树,便于读者查询借阅,其中关键字设置为书籍指针,便于找到书籍 后直接进行修改书籍信息。

读者和书籍的信息从文件中读取,由于会不断注册和删除读者以及新增删除书籍,因此书籍和读者的信息采用单链表存储。

读者的借阅历史和书籍的读者历史,都采用数组的形式存储,为了节省存储空间,每个借阅历史数组最大空间为15。超过15个借阅历史,则删除最早的借阅历史。 2.2设计表示 (1)数据类型定义

typedef struct //日期结构体类型 { int year;//记录年

int month;//记录月

int day;//记录日 }Date; //记录借阅者所借书籍的信息结构体 typedef struct {

char bookID[15];//书号 char name[15];//书名 char writer[15];//作者 Date bordate;//借阅时间 Date backdate;//还书时间

int flag;//是否续借,续借为1.否则为0

}BookHistory; //记录借阅者当前所借书籍的信息结构体 typedef struct {

char bookID[15];//书号 char name[15];//书名 char writer[15];//作者 Date bordate;//借阅时间 Date lastdate;//最后还书期限

int flag;//是否续借,续借为1.否则为0

}BookRec; //记录书籍被借阅的读者记录 typedef struct { char readerID[15];//记录读者的借阅证号 char readername[15];//读者的名字

Date bor;//记录读者的借书日期

Date back;//记录读者的还书日期 int flag;//借阅者是否有续借迹象(flag取值0或者1) }ReaderHistory; //记录读者信息的结构体类型(允许读者同时借阅五本书,每本书支持续借一次) typedef struct { char readerID[12];//记录读者的借书证号,一般是学号

//记录书的信息的结构体类型 typedef struct { char bookID[15];//书号 char title[15];//记录书名

char writer[15];//记录著者

int currentnum;//书现存量

int totalnum;//书总存量

int bortimes;//被借的历史总次数 //B_LQueue *B_LQH;

ReaderHistory RH[15];//借书者记录,规定链式队列的最大节点个数为15,来节省空间 char name[15];//读者的名字 char paword[16];//读者登陆密码 BookRec rec[5];//读者现在所借书籍 int hn;//总借阅数量 //R_LQueue *R_LQH;

BookHistory bh[15];//记录读者的借阅记录,规定链式队列的最大节点个数为15,来节省空间 int bn;//读者现在所借书籍数量,最大数量为5本

}Reader; }Book; //根据 书名为关键字的B-树的结构体类型

typedef struct Namenode //根据书名为关键字建立的B树 {

typedef struct///根据书名建立的B树的搜索结果 {

//根据书号为关键字的B-树的结构体类型

typedef struct IDnode //根据书号为关键字建立的B树 {

typedef struct///根据书号建立的B树的搜索结果 {

//从文件中读取书籍数据后存储在单链表里 typedef struct BookNode {

//从文件中读取学生数据后存储在单链表里 typedef struct ReaderNode { Book SLbook; struct BookNode *next; BTIDnode *pt;////指向找到的节点指针 int i;//所找关键字在节点里的位置 int tag;//查找成功值为1,查找失败值为0 int n;//记录结点中的关键字(即书号)个数

Book *key[MAXM];//key[0...n-1],Maxsize个关键字(即书号)域 struct IDnode *chd[MAXM];//ptr[0...n],MAXM个指向子结点的指针域 BTNamenode *pt;////指向找到的节点指针 int i;//所找关键字在节点里的位置 int tag;//查找成功值为1,查找失败值为0 int n;//记录结点中的关键字(即书号)个数

Book *key[MAXM];//key[0...n-1],Maxsize个关键字(即书名)域

struct Namenode *chd[MAXM];//ptr[0...n],MAXM个指向子结点的指针域

struct Namenode *par;//指向父结点的指针域

}BTNamenode; }NameResult; struct IDnode *par;//指向父结点的指针域

}BTIDnode; }IDResult; }BookSLNode; Reader SLreader; struct ReaderNode *next; }ReaderSLNode; 2.3详细设计

(1)登陆界面login():有管理员和读者登陆,都必须输入密码和用户名。

(2)管理员登陆adminer_login():管理员需输入登录名和密码,为了安全登录,将输入密码错误次数限制在5次。其中管理员密码和用户名以及初始用户名和密码从管理员文件里读出赋值给全局变量。当输入正确时,管理员功能界面函数admin_menu();当密码输入错误达6次以上,将调用锁定系统函数lock_admin_menu(),将系统锁定,下次进入系统时将不再显示登陆界面,而是初始管理员登陆。

(3)管理员采编入库insert_stock():输入新书的信息,调用SearchBTree_ID()按照书号在B-树搜索书籍,如果没有找到,返回书籍插入的位置,然后调用插入函数InsertBTree_Name(),InsertBTree_ID(),分别将书籍按书名和书号插入到相应的树中,同时将书籍信息插入到书籍链表里调用ListInsert_Book();同时将全局变量书籍总数booknum加1。

(4)管理员清除库存deletestock():根据书号书名搜索到书籍,在B-树中删除书籍,同时在书籍信息链表里删除。并将书籍总数booknum减1。

(5)管理员读者模块adminer_reader():有删除读者和注册读者两个功能,删除读者,按读者的ID查找到,在读者信息链表里删除读者,读者总数readernum减1;注册读者,初始密码为读者ID后6位,同时读者总数readernum加1。

(6)管理员修改用户名和密码adminer_change_paword():连续两次输入新密码,两次结果一样,修改成功。

(7)学生登陆student_login():输入密码成功,调用 stu_menu()功能界面。 (8)学生借书borrow():有两种搜索所借书籍的方式,按书名搜索,按书号搜索,使用相应的B-树搜索功能。借书成功后,将书籍信息写到读者当前所借书籍里面。并将书籍当前存量减1.(9)学生还书back():进入还书界面,将显示出读者当前所借书籍,让读者选择归还书籍。归还后将书籍从读者当前所借书籍里删除,此书当前存量加1,并将书籍信息写到读者借阅历史里面。

(10)学生续借renew():显示当前所借书籍信息,读者选择续借书目,当书籍信息的续借标志为0时可以续借,否则 不能续借,续借成功,将对应的读者当前所借书籍的续借标志置为1.(11)学生查询最后还书期限deadline():进入之后显示当前所借书籍信息,里面包含最后还书期限。

(12)学生查询借阅历史history():显示读者信息里面的借阅历史。

(13)学生修改密码change_reader_paword():两次新密码输入一致,修改成功。 (14)锁定系统admin_lock(),锁定系统后登陆lock_admin_menu():全局变量m_lock,当其值为1时解锁,值为0时锁定。

(15)建立读者书籍链表readreader(),readbook():首先从文件中读取读者总数,采用for循环,将每个读者信息写到链表里,在循环中,读取读者的ID、姓名、密码,然后读取读者当前所借书籍,采用for循环,将所借书籍信息写到数组里面,依次读取所借书籍信息。之后读取读者历史所借书籍数量,当数量大于15时,使用for循环,循环15次,依次读取书籍信息;如果 数量小于等于 15,采用for循环,循环当前借阅历史书籍数量次,将书籍信息写道数组中。然后将每个读者插入到链表里。 书籍链表类似读者链表的建立。

(16)B-树的搜索插入删除功能(以按书名建立的B-树为例); 搜索,SearchBTree_ID(),搜索成功返回搜索到的位置,搜索失败,返回插入的位置。Search_Name()函数将在当前节点搜索到关键字的位置。

插入,InsertBTree_Name(),如果为空,调用NewRoot_name()函数,建立根节点。如果不为空,将调用Insert_Name()将插入到节点里,判断是否大于最大关键字个数,如果大于,调用Split_Name()进行分裂。 删除,并非自己完成,参考网上代码。

(16)建立B-树newBT():按书名建立,使用B树搜索功能,没有找到,将根据返回的位置进行插入。按书号的类似。

(17)打印文件printftxt():分别将书籍和读者 信息写到文件里,同时将管理员信息也写道文件中。在每个退出系统的接口中都进行调用此函数,保证文件不丢失,同时更新文件信息。

3.调试分析

在进行调试时,有很多内存读写错误,问题的根本原因是在进行结构体赋值前,没有将结构体里面包含的结构体或者数组链表进行初始化,导致问题十分严重普遍。

4.用户手册

首先登陆时有两种登陆:读者和管理员。然后管理员登陆功能有采编入库,清除库存,读者模块,书籍查询,修改密码和用户名。读者登陆有借书,还书,续借,修改密码,查询借阅历史,查询截至日期。

管理员登陆用户名:123456,密码:123456 管理员初始用户名:20121002932,初始密码:167350 读者的ID和密码请到reader.txt文件中查询,文件格式见下面说明。 文件的格式: 1.reader.txt:

其中第一行的数字“4”为当前读者总数,第二行为: ID 名字 密码 第三行的数字”0“为当前所借书籍数量,之后为所借书籍信息: 书号 名称 作者 借阅时间年 月 日 最后还书日期年 月 日 是否续借 第三行数字 “0”为历史所借书籍数量,之后为所借书籍信息: 书号 名称 作者 借阅时间年 月 日 还书日期年 月 日 是否续借 2.book.txt:

第一行数字”4“为当前书籍总数 第二行为书籍信息:

书号 书名 作者 现存量 总存量

第三行数字”0“为读者借阅历史,以《飞鸟集》为例:

ID

姓名

借阅时间年 月 日

还书时间年 月 日 是否续借 20121002932 王瑞林

114

5 17

114 5 17 1 3.adminer.txt:

第一行:管理员名称;

第二行:管理员登陆密码; 第三行:管理员初始用户名; 第四行:管理员初始密码;

第五行:锁定系统标志,此时为未锁定状态。

5.测试数据及测试结果

初始登陆界面:

管理员登陆界面:

采编入库:

清除库存: 读者模块:

删除读者:

此时删除读者后,读者文件中应该不存在该读者。 书籍查询:

修改用户名和密码:

修改用户名:

修改密码:

修改用户名和密码后,退出系统后,查看adminer.txt文件,第一行和第二行为用户名和密码,将改变为4567890。 读者登陆:

读者借书:

当读者借书成功之后退出系统,在reader.txt文件中对应读者的ID信息的缩进的第二级为读者当前所借书籍数量和所借书籍信息,在此之后可以看到读者现在所借书籍信息 读者还书:

读者还书后,在reader.txt文件中,缩进的第三级为读者历史借阅书籍数量和书籍信息,此时应该看到刚才还书的信息。

读者续借:

当读者还书成功后,对应的当前所借书籍的flag值为1. 查询借阅历史:

查询截至日期: 修改登录密码:

当修改成功之后,reader.txt文件中对应读者的信息密码修改为当前密码。

6.致谢

感谢郭老师的指导,让我们在实践中提高了合理设计数据结构的能力,巩固了课堂所学。同时感谢王鑫学姐,帮助我们调试程序,并传输经验。

7.参考文献

《数据结构—使用C语言》第四版 朱站立编著 《C程序设计》第四版 谭浩强编著

图书管理系统 数据结构 课程设计

图书管理系统课程设计

数据结构课程设计职工管理系统

数据结构课程设计——成绩管理系统

数据库课程设计 图书管理系统

图书管理系统课程设计摘要

图书管理系统课程设计绪论

Oracle课程设计 图书管理系统

图书管理系统(含源代码)c语言_数据结构课程设计报告

通讯录管理系统数据结构课程设计报告

数据结构课程设计—西文图书管理系统
《数据结构课程设计—西文图书管理系统.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档