Fork me on GitHub

期刊管理系统

 

 

  课程设计(论文)

 

 

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

题    目:       期刊管理        

院 (系):  信息与控制工程学院  

专业班级:        软件1602       

姓    名:        盛康            

学    号:      1606070230        

指导教师:         李智杰         

 

 

 

                    2019年 1 月 6日

 

 

 

西安建筑科技大学课程设计(论文)任务书

专业班级:  软件1602    学生姓名:   盛康      指导教师(签名):           

一、课程设计(论文)题目

期刊管理

说明:对资料室的期刊进行管理。主要包括对期刊的一系列统计和操作。如:汇总期刊清单,包括对期刊各项信息的汇总;对期刊信息的增、删、改、查等功能。

二、本次课程设计(论文)应达到的目的

数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。

本题目要达到目的:熟练掌握线性表的实现与应用。

 

三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)                     

输入数据:期刊基本信息。

实现对期刊的如下操作:

1. 输入:从键盘输入操作类型及资料室的各项数据来对期刊进行管理。

2. 输出:按操作类型输出结果,以适当的方式显示;

3. 优化界面设计。

 

四、应收集的资料及主要参考文献:                

由于本课程没有安排“课内上机”学时,因此,在课程设计之前必须自己已经上机练习了“线性表”的基本操作。

   参考文献:

1. Robert L. Kruse,Data Structures And Program Design in C++,高等教育出版社,2001.5.

2. 严蔚敏等编著,数据结构(C语言版),清华大学出版社,1997.4;

3. 赵文静等编著,数据结构与算法,科学出版社,2005.08;

 

五、审核批准意见

 

教研室主任(签字)              

设计说明

本文档为期刊管理系统的设计说明书,向阅读人员介绍本期刊管理系统的整体框架和详细设计。该系统采用链表实现,能实现对期刊进行增,删,改,查,借还操作。在工作人员具备一定的计算机操作能力的前提下,此期刊管理系统软件力求提高其管理效率。

关键词:期刊管理、链表、增、删、改、查、借、还。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

1.设计目的1

2.问题描述1

3.需求分析1

  3.1数据需求1

  3.2基本功能需求1

4.概要设计2

  4.1系统包含的函数2

  4.3数据结构2

  4.4系统功能模块图3

5.详细设计4

  5.1系统功能模块设计4

  5.2原函数详细设计12

6.调试分析16

7.使用说明20

8.设计总结20

参考文献21

附录21


1.设计目的

数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。开发本系统能巩固在大学随学的知识,增强自己的自学能力及编程能力,了解软件开发的全部过程,有利于自身素质的发展,能为以后的工作做一个良好的铺垫。

由于期刊书社的规模不断扩大,期刊数量急剧增多,随之带来的期刊各种信息就会成倍增加。因此,需要对读者信息,管理员信息,期刊信息进行管理,这就有必要开发期刊管理系统来实现这一功能,来满足期刊书社的日常业务需求,方便读者与管理员。

2.问题描述

随着计算机科技的飞速发展和社会进步,尤其是计算机的大范围普及,传统的手工操作已渐渐被人工智能化的计算机应用所代替,利用智能的系统可以做到信息的规范管理,科学统计和快捷查询,从而减少管理人员的工作。

进入21世纪后,人们的生活质量在不断地提高,人们的生活需要不仅仅局限在物质上面,精神层面也同样得到了重视,这就使得期刊书社的规模不断扩大,期刊数量急剧增多,随之带来的期刊各种信息就会成倍增加。因此,需要对读者信息,管理员信息,期刊信息进行管理,这就有必要开发期刊管理系统来实现这一功能,来满足期刊书社的日常业务需求,方便读者与管理员。

3.需求分析

需求分析在软件开发过程中是至关重要的,关联到软件的整个开发过程,复杂度越高的软件,需求分析就显得越重要。在系统的开发前期,系统分析人员根据对用户的调查及分析可以大致得出系统的需求所在,然后根据需求进行编码。

3.1数据需求

期刊名称,期刊编号,期刊状态(是否在架上),期刊借阅次数,期刊的修改和期刊的删除。

3.2基本功能分析

编写程序系统主要实现系统的增加期刊,查询期刊,借阅期刊,归还期刊,借刊信息等智能化管理过程。

.模块:输入期刊ID

如果存在提示借阅成功,如果没有或已借出提示借阅失败

②.还模块:输入期刊ID

进行还书操作

③.期刊添加新引进的期刊进行添加分类

④.查询模块:对书库中期刊进行查询

            分为根据期刊名称查询和期刊类型查询并显示。

⑤显示模块:显示所有以添加的期刊。

⑥删除模块:输入要删除的期刊ID对其作删除处理。

⑦修改模块:对库中期刊进行修改

           输入要修改的ID,对期刊信息进行修改。

⑧退出系统:退出系统。

4.概要设计

4.1系统包含的函数

菜单主函数,添加函数,显示函数,查找函数,保存信息函数,修改函数,删除函数,读入文件函数,写入文件函数。

4.2数据结构

struct Book

{

int id;

char name[20];

int type;

int   status;  

int   count;       

    struct Book* next;

struct Book* prev;

typedef struct Book Book;

};

定义期刊的结构体 id表示期刊唯一编号,name[20]表示期刊名字,type表示期刊类型,status表示期刊现在状态,count表示期刊借出次数,struct Book* next表示下一本期刊,struct Book* prev表示上一本期刊,期刊类型为 typedef struct Book Book  

*pBooks链表的头指针,每一个代表书的结构体插到最后。

定义图书类型

typedef struct Book Book;

Book data[Max];

int all = 0;

// 添加图书类型,用户信息显示

char BookTypes[][32] =

{

"科学类",

"文学类",

"生活类",

"经济学类",

"社会类",

"政治类",

};

添加图书状态

char BookStatus[][32] =

{

"在架上",

"已借出",

"",

};

图书管理菜单

char BookMenu[][32] =

{

   "添加期刊",

"列出期刊",

"查找期刊",

"删除期刊",

"修改期刊",

"借刊",

"还刊",

"退出",

"",

};

4.3功能模块图

 

4-3功能模块图

 

 

 

 

  1. 详细设计

5.1系统功能模块设计

5.1.1菜单界面

    

 

5-1-1菜单界面流图

打开系统后界面自动显示菜单栏,并提示输入1-8之间的数字进行对应的操作,1添加期刊,2列出期刊,3查找期刊,4删除期刊,5修改期刊,6借刊,7

还刊,8退出。如果没有正确输入这些系统会提示出错并提示重新输入。

 

5.1.2添加期刊

 

5-1-2添加期刊功能流图

在菜单界面通过键盘输入1,开始进行添加期刊操作,输入所要添加的期刊的名称,然后根据显示屏提示输入18之间的数字选择期刊类型(1.科学类2.文学类3.生活类4.经济学类5.社会类6.政治类7.在架上8.已借出)输入完成后自动返回菜单栏,同时对期刊进行编号。完成操作后自动返回菜单界面。

5.1.3列出期刊

 

5-1-3列出期刊功能流图

在菜单界面通过键盘输入2,开始进行列出期刊操作,屏幕上显示所有已添加的期刊信息期刊id,期刊名称,期刊类别,期刊状态,和期刊借出次数。完成操作后自动返回菜单界面。

 

 

 

 

 

 

5.1.4查找期刊

 

5-1-4查找期刊功能流图

在菜单界面通过键盘输入3,开始进行查找操作,系统提示查找方式:1按期刊名查找;2按类型查找。若输入1则需要输入期刊名,找到后系统会显示该期刊的信息,如果系统里没有该期刊,则系统提示未能找到该期刊。如输入2,则系统会提示选择期刊类型,输入1-8选择类型,系统会显示该类型下所有的期刊信息,若该类型里没有期刊则提示没有找到此刊,请重新输入。

 

5.1.5删除期刊

 

5-1-5删除期刊功能流图

在菜单界面通过键盘输入4,开始进行删除操作,此时要输入所要删除期刊的id,删除完成后系统提示成功删除此刊,若id有误,则系统提示不存在该期刊请重新输入。

5.1.6修改期刊

5-1-6修改期刊功能流图

在菜单界面通过键盘输入5,开始执行修改期刊操作,此时系统提示1,按id修改;2,按名字修改。若输入1,则需要输入要修改的期刊的id,然后可以先择修改期刊的名字和期刊的类型。输入2则需要输入要修改期刊的名字,然后可以先择修改期刊的名字和期刊的类型。

5.1.7借刊

 

5-1-7借刊功能流图

在菜单界面通过键盘输入6,开始执行借刊操作,此时系统提示输入要借期刊的id,若输入的id在系统里没有该期刊,则系统提示所借期刊失败,请重新输入;若存在该期刊则提示借刊成功,同时显示该期刊的信息,状态变更为已借出,借出次数加1

5.1.8还刊

 

5-1-8还刊功能流图

在菜单界面通过键盘输入7,开始执行还刊操作,系统提示要还期刊的id若输入为未借出期刊,则提示借刊失败;若输入正确期刊id则提示还刊成功,同时显示期刊信息,状态变更为在架上。

5.1.9退出

在菜单界面通过键盘输入8,开始执行退出操作,输入之后会退出系统无法再进行其他操做。

5.2原函数详细设计

5.2.1添加函数

int addBooks(Book* head,Book* bookAdd

Book* p = head;

if (!p)

return  -1;

while(p->next)

{

p = p->next;

};

p->next = bookAdd;

bookAdd->id = p->id+1;

bookAdd->prev = p;

    bookAdd->next = NULL;

    bookAdd->count = 0;

    bookAdd->status = 0;

return 0;

hand指向链表的头,就是要往里添加期刊信息的链表。bookadd指向要添加的期刊的结构体。如果是空返回失败;若不为空此时P指向链表的最后,然后将P指向bookadd

5.2.2修改函数

Book* changBooks(Book* head, int _id)

{

Book* p = head;

while (p)

{

if (p->id == _id)

break;

p = p->next;

}

return p;

}

逐个检查id是否为要找的id,如果相等则表示找到想要的期刊,然后返回这个期刊的指针

5.2.3删除函数

int deleteBooks(Book* head, int _id)

{

Book* p = head;

Book* p1=NULL;

if (p->id == _id)

 {

p1 = p;

p = p->next;

}

else {

while (p)

{

p1 = p->next;

if (p1->id == _id)

break;

p = p->next;

 

}

if (!p)

{

return 1;//没有查到返回

}

p1 = p->next;

if (!p1)

{

 

}

else

{

p->next =p1->next;

}

}

free (p1);

return 0;

}

先逐个检查id是否为要删除的id,未找到则返回,找到这个期刊就其删除。

5.2.4释放链表

void freeList(Book* book_head)

{

    Book *p, *p1;

    p = book_head;

    while(p)

    {

        p1 = p->next;

        free(p);

        p = p1;

    }

}

有两个指针pP1p指向链表的头,p1指向p的下一个,然后freep)即为删除p,此时P1为第一个,p再变为P1如此循环,将链表删除。

5.2.4借刊函数

Book* borrowBooks( Book* book_head, int _id )

{

Book* p = book_head;

    while (p)

    {

        if (p->id == _id)

            break;

        p = p->next;

    }

if (!p)

{

printf("您所借期刊不存在,请重新输入!!\n");

return NULL;

}

if (p->status != 0)

{

printf("您所借期刊已借出,请重新输入新的期刊!!\n");

return NULL;

}

    p->status = 1;

    p->count++;    

    return p;

}

逐个检查id,如果不存在该id则提示出错,重新输入。若找到该结构体先判断该期刊否借出,status为非0表示已借出,返回空;未借出则将该期刊状态改为借出,同时借出次数+1,返回该期刊的指针。

5.2.5还刊函数

Book* returnBooks(Book* book_head, int _id)

{

    Book* p = book_head;

    while (p)

    {

        if (p->id == _id && p->status != 0)

        {

            p->status = 0;

            break;

        }

        p = p->next;

    }

    return p;

}

逐个对比检查状态为status != 0也就是已借出的id,未找到则返回为空,找到返回该期刊的指针。

5.2.6查找函数

int searchBookByName( Book* book_head, char* _name )

{

int count = 0;

    Book* p = book_head;

    while (p)

    {

        if (strcmp(p->name, _name) == 0)

        {

            print_book(p);

            ++count;

        }

        p = p->next;

    }

    return count;

}

按名字查找,逐个检查名字,若不存在则输出空,找到则调用输出信息函数。

int searchBooksByType(Book* book_head, int _type)

{

    int count = 0;

    Book* p = book_head;

    while (p)

    {

        if (p->type == _type )

        {

            print_book(p);

            ++count;

        }

        p = p->next;

    }

    return count;

}

按类型查找,逐个对比类型,找到则调用输出函数,返回查找数量。

 

 

 

6.调试分析

6.1添加界面

 

6-1添加界面图

输入1选择添加之后只需输期刊入名字,和选择期刊类型。

6.2列出

 

6-2列出界面图

输入2显示所有已添加期刊的信息。

 

 

 

 

6.3查找

 

6-3-1按名字查找就界面图

 

6-3-2按类型查找界面图

输入3进行查找操作,分为两种查找类型。按类型查找会显示该类型下所有的期刊信息。

 

 

 

6.4删除

 

6-4删除界面图

输入4进行删除操作,需要输入要删除的期刊的ID,同时会对ID进行判断是否存在。

6.5修改

 

6-5修改界面图

输入5进行修改操作,可以输入期刊id或者名字进行修改,输入正确后可以选择修改期刊名和期刊类型。

 

 

 

 

 

 

 

 

6.6借出

 

                                6-6借出界面图

输入6进行借刊操作,需要输入库里已有的期刊id才能正确借刊,借刊完成后,显示期刊信息,同时期刊的状态变为已借出,借出次数也会+1

6.7还刊

 

6-7还刊界面图

输入7进行还刊操作,只能输入已借出的期刊的id,还刊完成后显示期刊信息,且状态变为再架上。

 

 

 

 

 

 

6.8退出

 

6-8退出界面图

输入8进行退出操作,此时触发中断退出系统。

7.使用说明

   windows7以上的系统里操作,运行程序后自动显示菜单界面,通过键盘输入1-8进行操作,系统规定第一本期刊未数据结构,新添加的期刊id2开始。每一次操作完成后系统自动返回菜单界面,输入8.退出之后不会在返回。

8.设计总结

本次课程设计所用到的知识完全是上学期的知识,经过这次课程设计,我意识到了我对数据结构这门课的掌握水平,还有一点就是开发一个系统不光是只有把代码写好就行了,报告也同样重要。

(1)在编程中我意识到了本人动手能力的不足,尽管相比于大二而言提高很大,但是我还是不满意,有的在编程中必须看书才能写出来,有的靠百度,还有请教同学。在编程中我还意识到,编程不能停下来,有时候一停下来思路就没了。同时通过这次课设,我对原有的知识有了更加深刻的理解,对程序设计过程也理解了更多,在开发程序时第一步要明白这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每一个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可以确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确认处理过程——算法,通过在编译环境中的编译与调试,可到最后的程序。在我的程序里主要用的是链表,增添新元素时需要遍历万链表放在最后,而且搜索的时候主要用的是按序遍历,效率都太低,效率为ON),运行的开销有点高,如果在增添元素和搜索时可以采用其他效率更高的算法减短时间。如果采用哈希表可以极大提高效率。但是由于能力有限只能做成这样了。编写程序完成后,最难受的是一步步调试程序,有时候一个小小的错误,自己看了好久都看不出来,让别的同学一指点才发现错误在那,看来在编程时交流确实很重要。在第一次答辩时,通过老师的追问,我才发现我的程序有一个很大的漏洞,没有文件,不能将信息存入文件中,每次打开程序都要重新输入信息。后来自己下来改代码虽然写出来读文件和写文件的程序但是还是不能实现文件功能。在程序里因为我使用的是链表,所以将第一个期刊结构体固定为“数据结构”,划分为“科学类”,之所以这样做是为了使指针指向第一个更便于后面的查找,在查找时不用先判断是否为空,这样更好写程序,并且不能对第一个进行删除,可以修改,希望老师能谅解。

(2)通过这次课设我明白了写好报告也是程序设计的重要部分,写报告是对自己程序的一个比较完整的介绍,对自己写文档的能力也有了不少的提高。同时在写报告时才发现自己的程序里也有好多不足。

通过这此课程设计我学到了很多,熟练掌握了线性表的实现与应用,对自己写报告的能力也提高了不少,对自己的编程风格和程序设计素养有较大提高。对自己的不足也有了认识。希望以后能多加练习弥补自己的不足之处。

参考文献

  1. Robert LKruseData Structures And Program Design in C++,高等教育出版社,2001.5
  2. 严蔚敏等编著,数据结构(c语言版),清华大学出版社,1997.4
  3. 赵文静等编著,数据结构与算法,科学出版社,2002.8

附录

///期刊管理系统

//2019-01-06

//盛康

//软件

//1606070230

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

#define BORROWED     1

#define NOBORROW     0

 

//定义期刊结构体

struct Book

{

int id;

//期刊的唯一编号

char name[20];

//期刊名字

int type;

//期刊类型

int   status;

//期刊现在状态

int   count;

// 期刊借出的次数

struct Book* next;

// 下一本书

struct Book* prev;

// 上一本书

};

// 定义期刊类型

typedef struct Book Book;

// 添加期刊类型,用户信息显示

char BookTypes[][32] =

{

"科学类",

"文学类",

"生活类",

"经济学类",

"社会类",

"政治类",

};

// 添加期刊状态

char BookStatus[][32] =

{

"在架上",

"已借出",

"",

};

//期刊管理菜单

char BookMenu[][32] =

{

"添加期刊",

"列出期刊",

"查找期刊",

"删除期刊",

"修改期刊",

"借刊",

"还刊",

"退出",

"",

};

//搜索目录

char bookSearchMenu[][32] =

{

"按书名查找",

"按类型查找",

"",

};

 

char changSearchMenu[][32] =

{

"修改书名",

"修改类型",

"",

};

//增加期刊

int addBooks(Book* head, Book* bookAdd)

{

Book* p = head;

if (!p)

return  -1;

while (p->next)

{

p = p->next;

};

p->next = bookAdd;

bookAdd->id = p->id + 1;

bookAdd->prev = p;

bookAdd->next = NULL;

bookAdd->count = 0;

bookAdd->status = 0;

return 0;

}

 

//修改期刊

Book* changBooks(Book* head, int _id)

{

Book* p = head;

while (p)

{

if (p->id == _id)

break;

p = p->next;

}

return p;

}

//删除期刊

int deleteBooks(Book* head, int _id)

{

Book* p = head;

Book* p1=NULL;

if (p->id == _id) {

p1 = p;

p = p->next;

}

else {

while (p)

{

p1 = p->next;

if (p1->id == _id)

break;

p = p->next;

}

if (!p)

{

return 1;//没有查到返回

}

p1 = p->next;

if (!p1)

{

 

}

else

{

p->next =p1->next;

}

}

free (p1);

return 0;

}

//期刊信息链表

Book* creatList(Book* bookHead)

{

if (bookHead)

{

bookHead->prev = bookHead;

bookHead->next = NULL;

bookHead->id = 1;

bookHead->count = 0;

bookHead->status = 0;

}

return bookHead;

}

// 释放链表

void freeList(Book* book_head)

{

Book *p, *p1;

p = book_head;

while (p)

{

p1 = p->next;

free(p);

p = p1;

}

}

//菜单输出

void print_menu(char menus[][32])

{

int n = 0;

printf("请输入所需选项:\n");

while (strlen(menus[n]))

{

printf("%d   %s\n", n + 1, menus[n]);

++n;

}

printf("请选择(");

while (n)

{

printf("%d|", n--);

}

printf(")");

}

//输出期刊信息

void print_book(Book* book)

{

printf("%2d| %17s|%15s|%12s|%10d| \n",

book->id, book->name, BookTypes[book->type],

BookStatus[book->status], book->count);

printf("---------------------------------------------------------------------\n");

}

//列出全部期刊

void listBooks(Book* bookHead)

{

Book* p = bookHead;

while (p)

{

print_book(p);

p = p->next;

}

}

//借刊,如果期刊存在返回此期刊指针,如果不存在返回空

Book* borrowBooks(Book* book_head, int _id)

{

Book* p = book_head;

while (p)

{

if (p->id == _id)

break;

p = p->next;

}

if (!p) //期刊不存在

{

printf("您所借期刊不存在,请重新输入!!\n");

return NULL;

}

if (p->status != 0) //期刊已借出

{

printf("您所借期刊已借出,请重新输入新的期刊!!\n");

return NULL;

}

p->status = 1;

//期刊是否借出状态

p->count++;

//借出次数+1

return p;

}

//还刊,正常归还就返回该期刊的指针,否则就返回NULL

Book* returnBooks(Book* book_head, int _id)

{

Book* p = book_head;

while (p)

{

if (p->id == _id && p->status != 0)

{

p->status = 0;

//期刊归还时状态改变

break;

}

p = p->next;

}

return p;

}

//按期刊名字查找

int searchBookByName(Book* book_head, char* _name)

{

int count = 0;

Book* p = book_head;

while (p)

{

if (strcmp(p->name, _name) == 0)

{

print_book(p);

++count;

}

p = p->next;

}

return count;

}

//查找期刊类型,返回查找到的数量

int searchBooksByType(Book* book_head, int _type)

{

int count = 0;

Book* p = book_head;

while (p)

{

if (p->type == _type)

{

print_book(p);

++count;

}

p = p->next;

}

 

return count;

}

 

/*void Read()           //读文件

{ Book p;

int i=0;

int j=0;

ifstream in("Libra.txt",ios::out);

in>>i;

all=i;

while(p)

{

 

in>>p->id>>p->name>>p->type>>p->status>>p->count;

addBooks(pBooks,p);

}

}

in.close();

}

 

void Save(Book* bookHead)               //保存到文件

{

int i=0;Book* p = bookHead;

if((fp=fopen("Libra","wb"))==NULL)

{

printf("cannot open file\n");

return;

}

   while

   if(ferite(&stud[p],sizeof (struct Student_type),1,fp)!=1)

   printf("file write error\n");

   fclose(fp);

}*/

 

int main()

{

int temp = 0;

int ch = 0, loop = 1;

char information[20];

char information1[20];

//定义期刊

Book FBooks, *pBooks, *pTemp;

//初始化第一本期刊名字为数据结构

strcpy(FBooks.name, "数据结构");

FBooks.type = 0;

FBooks.status = 0;

pBooks = creatList(&FBooks);

while (loop)

{

print_menu(BookMenu);

scanf("%d", &ch);

if (ch < 1 || ch > 8)

{

printf("\n没有所输选项,请确定所输入选项为-8中的选项!!\n");

printf("\n");

}

switch (ch)

{

case 1://添加期刊信息

pTemp = (Book*)malloc(sizeof(Book));

if (pTemp)

{

printf("请输入期刊的名字:");

scanf("%s", information);

strncpy(pTemp->name, information, 31);

print_menu(BookTypes);

scanf("%d", &ch);

if (ch < 0 || ch >(sizeof(BookTypes) / 32))

ch = 1;

pTemp->type = ch - 1;

addBooks(pBooks, pTemp);

}

break;

case 2://列出全部期刊

printf("--------------------------------------------------------------------\n");

printf("ID|              刊名|       期刊分类|    现在状态|  借出次数|\n");

printf("--------------------------------------------------------------------\n");

listBooks(pBooks);

break;

case 3://

print_menu(bookSearchMenu);

scanf("%d", &ch);

if (ch <1 || ch > 2)

{

printf("输入有误,请重新输入!!\n");

}

else

{

switch (ch)

{

case 1://按期刊名字查找

printf("请输入期刊名字:");

scanf("%s", &information);

ch = searchBookByName(pBooks, information);

if (ch == 0)

{

printf("没有找到此期刊,请重新输入!\n");

}

break;

case 2://按期刊类型查找

print_menu(BookTypes);

scanf("%d", &ch);

ch = searchBooksByType(pBooks, ch - 1);

if (ch == 0)

{

printf("没有找到此类期刊,请重新输入!\n");

}

break;

default:

break;

}

}

break;

case 4://删除

printf("请输入所要删除期刊的ID:");

scanf("%d", &ch);

ch = deleteBooks(pBooks, ch);

if (!ch)

printf("您已成功删除此刊!\n");

else

{

printf("没有查到此刊!\n");

}

break;

 

case 5://

printf("请输入所要修改期刊的ID:");

int chh;

scanf("%d", &chh);

print_menu(changSearchMenu);

scanf("%d", &ch);

while(ch <1 || ch > 2)

{

printf("输入有误,请重新输入!!\n");

}

pTemp=changBooks(pBooks, chh);

      switch (ch)

{

case 1://修改名字

printf("请输入期刊名字:");

scanf("%s", &information);

if (!pTemp)

{

printf("没有找到此期刊!\n");

}

else {

strncpy(pTemp->name,information,31);

}

break;

case 2://修改类型

print_menu(BookTypes);

printf("请输入期刊类型:");

scanf("%d", &ch);

if (!pTemp)

{

printf("没有找到此类期刊\n");

}

else {

pTemp->type = ch;

}

break;

default:

break;

}

  if (pTemp)

  {

printf("修改成功");

  }

break;

case 6://

printf("请输入所要借期刊的ID:");

scanf("%d", &ch);

pTemp = borrowBooks(pBooks, ch);

if (!pTemp)

printf("借刊失败: %d\n", ch);

else

{

printf("您已成功借阅此刊,请记得按时归还!\n");

printf("--------------------------------------------------------------------\n");

printf("ID|              刊名|       期刊分类|    现在状态|  借出次数|\n");

printf("--------------------------------------------------------------------\n");

print_book(pTemp);

}

break;

case 7:

printf("请输入所要还期刊ID:");

scanf("%d", &ch);

pTemp = returnBooks(pBooks, ch);

if (!pTemp)

printf("还刊失败: %d\n", ch);

else

{

printf("您已成功归还此期刊!\n");

printf("--------------------------------------------------------------------\n");

printf("ID|              刊名|       期刊分类|    现在状态|  借出次数|\n");

printf("--------------------------------------------------------------------\n");

print_book(pTemp);

}

break;

case 8:

loop = 0;

break;

default:

break;

}

printf("\n-------------------------------分割线----------------------------------\n\n");

}

freeList(pBooks);

return  0;

}

posted @ 2020-03-23 23:20  建大软件日常  阅读(252)  评论(0)    收藏  举报