精华内容
下载资源
问答
  • 图书信息管理系统流程图 PPT 里面有图书馆系统和流程图
  • 4.主要功能模块设计实现流程 14 4.1. 总体结构划分 14 4.2. 数据结构算法设计系统实现 14 4.3. 界面现实控制台 17 4.4. 角色划分 20 4.5. 登陆窗口计 21 4.6. 操作流程 21 5.结论 27 参考文献 28
  • 图书管理系统:以管理员身份登录到图书管理系统中,查询、修改、图书的书名、ISBN、库存量等信息和添加新书和删除旧书等。这些信息都会被记录到相应的数据库中。 1. 图书基本信息包括书名,作者,出版日期,简介,...
  • 图书管理系统是典型的管理信息系统(M工S),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性、完整性强和数据安全性好的库,而对于后者则要求应用程序功能完备、...
  • 需求分析 图书管理系统是一个高度集成的图书信息处理系统 通过将图书管理的各种功 能进行整合从而打到高速检阅信息提高工作效率降低管理成本等目的一 个典型的图书馆管理系统应该能够管理所有的图书种类图书信息以及...
  • UML图书信息管理系统

    2009-07-06 12:33:56
    系统主要实现对图书馆信息的管理,主要功能为管理有关读者、图书、借阅、查询、删除和...图书管理可以浏览图书的信息,可以对图书信息进行维护。借阅管理可以显示当前数据库中书籍借阅情况,可以对借阅信息进行维护。
  • 图书管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书信息查询、读者图书借阅情况的查询等功能。项目...
  • 图书信息管理系统

    2012-11-30 19:36:56
    一个成功的图书馆管理系统应提供快速的图书信息检索功能、快捷的图书借阅、归还流程。从读者与图书馆管理员的角度出发,本着以读者借书、还书快捷、方便的原则本系统具有以下特点:  确保系统具有良好的系统性能,...
  • 图书馆管理系统是图书馆管理工作中不可缺少的部分,它对于图书馆的管理者和使用者都非常重要,所以图书馆管理系统应该为管理者与...一个成功的图书馆管理系统应提供快速的图书信息检索功能、快捷的图书借阅、归还流程
  • 图书管理系统

    2017-12-27 13:27:50
    图书馆管理系统是图书馆管理工作中不可缺少的部分,它...一个成功的图书馆管理系统应提供快速的图书信息检索功能、快捷的图书借阅、归还流程。从读者与图书馆管理员的角度出发,本着以读者借书、还书快捷、方便的原则,
  • 图书管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书信息查询、读者图书借阅情况的查询等功能。项目...
  • 老师布置的管理信息系统作业,包括组织结构图,业务流程图,数据流程图,er图,及各种分析及说明
  • Word Word专业资料 图书信息管理系统设计 一要求 图书信息包括登录号书名作者名分类号出版单位出版时间价格等设计一图书信息 管理系统使之能提供以下功能: (1) 系统以菜单方式工作 (2) 图书信息录入功能 (3) 图书...
  • 设计图书管理系统,针对某一图书管理流程为基础,进行必要的系统分析与设计,完成一个功能完善、界面美观的系统
  • 首页 包含登录、注册、最新图书展示功能 登录页面 登录功能 ... 用户信息页面 登录成功后,所显示的用户基本信息 ... 用户信息修改页面 登录成功后,用户信息修改功能 ...新增图书页面 系统管理员,新增...

    首页 包含登录、注册、最新图书展示功能

    登录页面 登录功能

    注册页面 注册功能

    用户信息页面 登录成功后,所显示的用户基本信息

    密码修改页面 登录成功后,密码修改功能

    用户信息修改页面 登录成功后,用户信息修改功能

    图书列表页面 用户登录所显示的具体书籍页面

    图书查询页面 用户根据查询条件,查询书籍

    图书借、还图书列表页面 用户所借图书的历史记录

    新增图书页面 系统管理员,新增图书页面

    验收图书页面 系统管理员,验收实际的书籍情况

    修改图书页面 系统管理员,修改数据数据

    借阅图书页面 系统管理员,书籍借阅处理页面

    归还图书页面 系统管理员,书籍归还处理页面,

    图书销毁页面 系统管理员,修改销毁书籍状态。

     

    手稿:window画图工具

     

    初稿:使用Axure RP 8软件

     

     


     


     

    展开全文
  • 论文设计以这三个方面展开,形成一套完整的图书信息管理系统。系统功能包括书库管理、书库查询、图书类别、借书、还书等。 关键词:管理信息系统;图书借阅;Visual Basic 目 录 摘要 Ⅰ Abstract Ⅱ 1概述 1 1.1...
  • 语言课程设计报告C 目图书信息管理系统设计 题 河南理工大学计算机学院 录目 题目与要求 第一章1.1 问题提出1 1.2 本系统涉及地知识点1 1.3 功能要求1 功能设计第二章 2.1 算法设计1 2.2 部分模块流程图4 第三章 ...
  • java图书管理系统

    千次下载 热门讨论 2009-07-17 19:35:44
    一个成功的图书馆管理系统应提供快速的图书信息检索功能、快捷的图书借阅、归还流程。从读者与图书馆管理员的角度出发,本着以读者借书、还书快捷、方便的原则,本系统具有以下特点:  确保系统具有良好的系统性能...
  • 此毕业设计是图书信息管理系统,开发平台是微软公司的visual studio 2008平台,所用的计算机语言为c#,数据库为SqlServer2005.功能包括以下:  系统登录 此模块是设置用户的使用权限,只有经过授权的用户才能登陆...
  • 图书信息管理系统c/c++

    千次阅读 2019-03-29 11:16:25
    图书信息管理系统: 程序流程图 源代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define N 100 struct type{ char...

    图书信息管理系统:
    程序流程图
    程序的构架图
    源代码

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <windows.h>
    #define N 100
    
    struct type{
    	char ISBN[N];//ISBN编号(一般为13位) 
    	char bookName[N]; //书名 
    	char subject[N];//科目 
    	char editor[N];//主编 
    	float price;//价格 
    	char publish[N];//出版社
    	char date[N];//日期 
    	int num;//数量 
    	struct type *next;	
    }Book;
    typedef struct type * BooksManage;
    
    void color(short x);//字体颜色 
    int password();//管理员密码
    void AdministratorMenu();//管理员菜单 
    void VisitorMenu();//游客菜单
    void SaveBooksdata(BooksManage head);//将数据保存到文件中
    void AddBooks(BooksManage *head);//添加图书信息
    void ReadBooksdata(BooksManage *head);//将数据从文件中读取 
    void DelBooks_Subject(BooksManage head);//按所属学科删除图书信息
    void DelBooks_ISBN(BooksManage head);//按ISBN删除图书信息 
    void ModifyBooks(BooksManage head);//修改图书信息
    void FindBooks(BooksManage head);//查询图书信息
    void PrintBooks(BooksManage head);//显示所有图书信息 
    void SumBooks(BooksManage head);//求全部图书价值 
    int main()
    {
    	color(10); printf("\t\t\t\t\t* * * * * * * * * * * * * *\n");
    	color(14); printf("\t\t\t\t\t* 题目:图书信息管理系统  *\n");
    	color(11); printf("\t\t\t\t\t* 班级:                  *\n");
    	color(12); printf("\t\t\t\t\t* 组员                    *\n");
    	color(11); printf("\t\t\t\t\t* 姓名  学号              *\n");
    	color(10); printf("\t\t\t\t\t* 张三   100001           *\n");
    	color(11); printf("\t\t\t\t\t* 李四   100002           *\n");
    	color(14); printf("\t\t\t\t\t* 王五   100003           *\n");
    	color(12); printf("\t\t\t\t\t* 日期 : 2019.03.19      *\n");
    	color(10); printf("\t\t\t\t\t* * * * * * * * * * * * * *\n");
    	system("title 图书信息管理系统");
    	color(10);
    	BooksManage head = NULL;
    	ReadBooksdata(&head);
    	int choice,z,c;
    	printf("\n\n\n");
    	printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    	printf("\t\t\t\t\t\t欢迎光临图书信息管理系统\n");
    	printf("\t\t\t--------------------------------------------------------\n");
    	printf("\t\t\t\t\t\t【1】游客\n");
    	printf("\t\t\t\t\t\t【2】管理员\n");
    	printf("\t\t\t\t\t\t【3】退出系统\n");
    	printf("\t\t\t--------------------------------------------------------\n");
    	while(printf("\t\t\t\t\t\t请选择身份:")&&scanf("%d",&c)!=EOF)
    	{
    		if(c==1)
    		{
    			VisitorMenu();
    			while (printf("\t\t\t\t\t\t请输入选择项(1-3):")&&scanf("%d",&choice)!=EOF)
        		{
    		    	switch (choice)
        			{
        				case 1:                                                /*查询图书信息*/
    				    	FindBooks(head);
    			    		break;
    					case 2:                                                /*显示所有图书信息*/
        	            	PrintBooks(head);
    			    		break; 
    					case 3:                                                /*返回登录界面*/
    						main();
    						break;
    					case 4:
    						exit(0); 
    			    	default:
    				    	printf("\t\t\t\t\t输入错误!!!\n");
    				    	system("pause");
    				    	break;
    				}
    				VisitorMenu();
    			}
    		}
    		else if(c==2)
    		{
    			z = password();
    			AdministratorMenu();
    			while (printf("\t请输入选择项(1-8):") && z == 1 && scanf("%d",&choice) != EOF)
        		{
    	    		switch (choice)
        			{
    		    		case 1:                                                /*录入图书信息*/
    				    	AddBooks(&head);
    			    		break;  
    		    		case 2:                                                /*删除图书信息*/
    			    		int sign;
    			    		system("cls");
    			    		color(10);printf("\t\t\t* * * * * * * * * * * * * * *\n");
    			    		color(11);printf("\t\t\t*---------------------------*\n");
    			    		color(12);printf("\t\t\t*  输入选择删除图书的方式   *\n");
    			    		color(14);printf("\t\t\t*---------------------------*\n");
    			    		color(11);printf("\t\t\t*【 1】按所属学科删除图书   *\n");
    			    		color(12);printf("\t\t\t*---------------------------*\n");
    			    		color(14);printf("\t\t\t*【 2】按图书ISBN号删除图书 *\n");
    			    		color(11);printf("\t\t\t*---------------------------*\n");
    			    		color(10);printf("\t\t\t* * * * * * * * * * * * * * *\n");
    			    		scanf("\t\t\t%d",&sign);
    			    		if(sign == 1)
    			    			DelBooks_Subject(head);
    			    		else if(sign == 2)
    							DelBooks_ISBN(head);
    			    		break;
    		    		case 3:                                               
    			    		ModifyBooks(head);
    			   		 	break;
    		    		case 4:                                                
    				    	FindBooks(head);
    			    		break;
    					case 5:                                                
                	    	PrintBooks(head);
    		    			break;
    		    		case 6:                                                
                	    	SumBooks(head);
    		    			break;	
    		    		case 7:                                                
    						main();
    						break; 
    					case 8:                                                
    				    	SaveBooksdata(head);
    						exit(0);
    		    		default:
    				    	printf("\t输入错误!!!\n");
    				    	system("pause");
    				    	break;
    				}
    				AdministratorMenu();
    			}
    		}
    		else if(c==3)
    			exit(0);
    		else
    		{
    			printf("\t\t\t输入错误!!!\n\n");
    		}
    	}
    	return 0;
    }
     
    /**管理员密码*/ 
    int password()
    {
    	int i=0;
    	char user[10]="admin";
    	char Code[10]="admin";
    	char getuser[10];
    	char Getskey[10];
     
    	while(1)
    	{
    		printf("\t\t\t请输入账号:");
    		scanf("%s",getuser);
    		printf("\t\t\t请输入密码:");
    		while(1)
    		{
    			Getskey[i]=getch();       /*getch()函数在头文件conio.h中,函数作用为输入的内容不会在屏幕上显示*/
    			if(Getskey[i]=='\r')        /* \b = 退格键(backspace)*/
    				break;					/* \r = 回车键(carrige return)*/
    			else if(Getskey[i]=='\b')
    			{
    				if(i==0)
    					continue;
    				printf("\b");
    				printf(" ");
    				printf("\b");
    				i--;
    			}
    			else
    			{
    				printf("*");
    				i++;
    			}
    		}
    		Getskey[i]='\0';
    		if(strcmp(user, getuser) == 0 && strcmp(Code, Getskey) == 0){
    			printf("\n\n\n\t\t\t密码正确,请稍等");
    			printf(".");
    			Sleep(300);
    			printf(".");
    			Sleep(300);
    			printf(".");
    			Sleep(300);
    			printf(".");
    			Sleep(300);
    			printf(".");
    			Sleep(300);
    			printf(".");
    			Sleep(300);
    			return 1;
    		}
    			
    		else
    		{
    			printf("\n\n\t\t\t账号不存在或密码输入错误,请重新输入\n");
    			i = 0;
    		}
    	}
    }
    
    /**管理员菜单*/ 
    void AdministratorMenu()                                                
    {
    	system("cls");//清屏 
    	printf("\n\n\n\n\n");
    	printf("\t************************************************************\n");
        printf("\t*                                                          *\n");
        printf("\t*                 欢迎来到图书信息管理系统                 *\n");
        printf("\t*                                                          *\n");
        printf("\t*                                                          *\n");
    	printf("\t*                          主菜单                          *\n");
    	printf("\t*                                                          *\n");
    	printf("\t*                     1.录入图书信息                       *\n");
        printf("\t*                                                          *\n");
    	printf("\t*                     2.删除图书信息                       *\n");          
    	printf("\t*                                                          *\n");
    	printf("\t*                     3.修改图书信息                       *\n");
    	printf("\t*                                                          *\n");
    	printf("\t*                     4.查询图书信息                       *\n");
    	printf("\t*                                                          *\n");
    	printf("\t*                     5.显示所有图书信息                   *\n");        
        printf("\t*                                                          *\n");
        printf("\t*                     6.全部图书的总价值                   *\n");
        printf("\t*                                                          *\n");
        printf("\t*                     7.返回登录界面                       *\n");
        printf("\t*                                                          *\n");
    	printf("\t*                     8.保存数据并退出系统                 *\n"); 
        printf("\t*                                                          *\n");
        printf("\t************************************************************\n\n");
    }
    
    
    /**游客菜单*/ 
    void VisitorMenu()                                                 
    {
    	system("cls");
    	printf("\n\n\n\n\n");
    	printf("\t************************************************************\n");
       	printf("\t*                                                          *\n");
       	printf("\t*                 欢迎来到图书信息管理系统                 *\n");
       	printf("\t*                                                          *\n");
       	printf("\t*                                                          *\n");
    	printf("\t*                          主菜单                          *\n");
    	printf("\t*                                                          *\n");
    	printf("\t*                     1.查询图书信息                       *\n");
    	printf("\t*                                                          *\n");
    	printf("\t*                     2.显示所有图书信息                   *\n");        
       	printf("\t*                                                          *\n");
       	printf("\t*                     3.返回登录界面                       *\n");
       	printf("\t*                                                          *\n");
    	printf("\t*                     4.退出系统                           *\n"); 
       	printf("\t*                                                          *\n");
       	printf("\t************************************************************\n\n");
    }
    
    /*将数据保存到文件中*/ 
    void SaveBooksdata(BooksManage head)                                    
    {
    	BooksManage p;
    	FILE *fp;
    	fp = fopen("BooksDatabase.txt","w");
    	p = head->next;
    	while(p->next != NULL){
    		fprintf(fp,"%s\t",p->ISBN);
    		fprintf(fp,"%s\t",p->bookName);         
    		fprintf(fp,"%s\t",p->subject);          
    		fprintf(fp,"%s\t",p->editor);
    		fprintf(fp,"%.2f\t",p->price);
    		fprintf(fp,"%s\t",p->publish);
    		fprintf(fp,"%s\t",p->date);
    		fprintf(fp,"%d\n",p->num);
    	    p=p->next;                
    	}
    	if(p->next == NULL){
    		fprintf(fp,"%s\t",p->ISBN);
    		fprintf(fp,"%s\t",p->bookName);         
    		fprintf(fp,"%s\t",p->subject);          
    		fprintf(fp,"%s\t",p->editor);
    		fprintf(fp,"%.2f\t",p->price);
    		fprintf(fp,"%s\t",p->publish);
    		fprintf(fp,"%s\t",p->date);
    		fprintf(fp,"%d",p->num);
    	}	
    	fclose(fp);
    	return ;
    }
    
    
    /**将数据从文件中读取*/  
    void ReadBooksdata(BooksManage *head)                                   
    {
            int n;
        BooksManage s, p;
        FILE *fp;
        
        fp=fopen("BooksDatabase.txt","r");
    
        if(NULL == fp) { 
            head = NULL; 
            return ;
        } 
         
        *head = (BooksManage)calloc(1, sizeof(Book));
        p = *head; 
         
     	 while (!feof(fp))
    	{
            s = (BooksManage)calloc(1, sizeof(Book));
    		fscanf(fp,"%s",s->ISBN);	            	/*为下个结点分配内存空间 */
    		fscanf(fp,"%s",s->bookName);
    		fscanf(fp,"%s",s->subject);
    		fscanf(fp,"%s",s->editor);
    		fscanf(fp,"%f",&s->price);
    		fscanf(fp,"%s",s->publish);
    		fscanf(fp,"%s",s->date);
    		fscanf(fp,"%d",&s->num);
    		p->next=s;   /*保存该结点*/
    		p=p->next;   /*切换到下一个结点*/
    		p->next=NULL; /*保证最后一个结点为NULL*/
    	}
         
        fclose(fp);/*关闭文件 */
        return ; 
    }
    
    /**字体颜色*/ 
    void color(short x)
    {
        if(x>=0 && x<=15)
        	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
        else
        	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    }
    
    /**添加图书信息*/ 
    void AddBooks(BooksManage *head)                                   
    {
    	int i;
    	BooksManage p, s;
    	system("cls");
    	if(*head == NULL) {
            *head = (BooksManage)calloc(1,sizeof(Book));
            p = *head;
        } else {                            
            p = *head;
            while(p->next) 
            p = p->next; 
        }
        printf("\n\n\n");
    	printf("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
        printf("\t\t\t请问添加几本书:"); 
        scanf("%d",&i);
        printf("\t--------------------------------------------------------\n");
        while(i)
        {
        	s = (BooksManage)calloc(1,sizeof(Book));
        	printf("\t\t\t请输入ISBN号:");
    		scanf("%s",s->ISBN);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入书名:");
    		scanf("%s",s->bookName);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入书本的所属学科:");
    		scanf("%s",s->subject);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入主编:");
    		scanf("%s",s->editor);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入价格:");
    		scanf("%f",&s->price);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入出版社:");
    		scanf("%s",s->publish);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入出版日期:");
    		scanf("%s",s->date);
    		printf("\t--------------------------------------------------------\n");
    		printf("\t\t\t请输入数量:");
    		scanf("%d",&s->num);
    		printf("\t--------------------------------------------------------\n");
    		printf("\n");
    		printf("\t--------------------------------------------------------\n");
    		i--;
    			
    		p->next = s;    /*保存输进去的这个结点*/
    		p = p->next;    /*切换到下一个结点*/ 
    		p->next = NULL; /*最后一个结点为NULL*/
    	}
    	        
        printf("\t\t\t图书添加成功!!!\n");
    	system("pause");
    }
    
    /*按所属学科删除图书信息*/ 
    void DelBooks_Subject(BooksManage head)                                     
    {
    	system("cls");
    	int flag=0;
    	char name[100],ch[10];
    	BooksManage p, t;
    	
    	/**如果表头为空 */
        if(head == NULL || head->next == NULL) {
            printf("没有记录图书信息!\n");
            system("pause");
            return;
        }
    	
    	p = head;
    	printf("\n\n\n");
        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    	printf("请输入要删除的学科名字;");
    	scanf("%s",&name);
    	printf("------------------------------------------------------------------------------------\n");
    	printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
    	printf("------------------------------------------------------------------------------------\n");                                                                                                                                    
    	while(p->next)
    	{
    		t=p;
    		p=p->next;                                               /*转换到下一个结点*/
    	    if(strcmp(name,p->subject)==0)
    	    {
    	    	flag=1;
    	        printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
    	        break;
    		}
    	}
    	 
    	if(flag==1)
    	{
    		printf("是否删除该本图书信息(y/n)");
    		scanf("%s",ch);
    		printf("----------------------------------------------------------------------\n");
    		if(strcmp(ch,"Y") == 0 || strcmp(ch,"y") == 0)
    		{
    			t->next = p->next;
    			free(p);
    			printf("该书已删除!\n");
    		}
    		else
    		    return;
    	}
    	else if(flag == 0)
    	    printf("没找到那本书!\n");
    	
    	system("pause");
    }
    
    /*按ISBN删除图书信息*/ 
    void DelBooks_ISBN(BooksManage head)                                     
    {
    	system("cls");
    	int flag=0;
    	char ch[10];
    	char ISBN[N];
    	BooksManage p, t;
    	
    	/**如果表头为空 */
        if(head == NULL || head->next == NULL) {
            printf("没有记录图书信息!\n");
            system("pause");
            return;
        }
    	
    	p = head;
    	printf("\n\n\n");
        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    	printf("请输入要删除图书的ISBN号;");
    	scanf("%s",ISBN);
    	printf("------------------------------------------------------------------------------------\n");
    	printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
    	printf("------------------------------------------------------------------------------------\n");                                                                                                                                   
    	while(p->next)
    	{
    		t=p;
    		p=p->next;                                               /*转换到下一个结点*/
    	    if(strcmp(ISBN,p->ISBN)==0)
    	    {
    	    	flag=1;
    	        printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
    	        break;
    		}
    	}
    	 
    	if(flag==1)
    	{
    		printf("是否删除该本图书信息(y/n)");
    		scanf("%s",ch);
    		printf("----------------------------------------------------------------------\n");
    		if(strcmp(ch,"Y") == 0 || strcmp(ch,"y") == 0)
    		{
    			t->next = p->next;
    			free(p); 
    			printf("该书已删除!\n");
    		}
    		else
    		    return;
    	}
    	else if(flag == 0)
    	    printf("没找到那本书!\n");
    	
    	system("pause");
    }
    
    /*修改图书信息*/ 
    void ModifyBooks(BooksManage head)                                     
    {
    	system("cls");
    	int flag=0;
    	char name[100],ch[5];
    	BooksManage p, t;
    	
    	/* 如果表头为空 */
        if(head == NULL || head->next == NULL) {
            printf("没有记录图书信息!\n");
            system("pause");
            return ;
        }
    	
    	p = head;
    	
    	printf("\n\n\n");
    	printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    	printf("请输入要修改的书名:");
    	scanf("%s",name);
    	printf("--------------------------------------------------------------------\n");
     
    	while(p->next)
    	{
    		p=p->next;                 /*切换到下一个结点*/
    	    if(strcmp(name,p->bookName)==0)
    	    {
    	    	flag = 1;
    	    	t = p;
    			printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
    			printf("------------------------------------------------------------------------------------\n");
    	    	printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
    		}
    	}
    	
    	if(flag==1)
    	{
    		printf("--------------------------------------------------------------------\n");
    		printf("\t\t是否修改该本图书信息(y/n):");
    		scanf("%s",ch);
    		printf("\t--------------------------------------------------------------------\n");
    		if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
    		{
    			int c;
    			printf("\t\t【1】ISBN号\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【2】书名\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【3】所属学科\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【4】主编\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【5】价格\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【6】出版社\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【7】出版日期\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t\t【8】数量\n");
    			printf("--------------------------------------------------------------------\n");
    			printf("\t请输入你要修改的内容;");
    			scanf("%d",&c);
    			printf("--------------------------------------------------------------------\n");
    			p = t;
    			switch(c)
    			{
    				case 1:
    				    printf("\t请输入ISBN号:");
    			        scanf("%s",p->ISBN);
    			        break;
    			    case 2:
    			        printf("\t请输入书名:");
    			        scanf("%s",p->bookName);
    			        break;
    			    case 3:
    			        printf("\t请输入所属学科:");
    			        scanf("%s",p->subject);
    			        break;
    			    case 4:
    			        printf("\t请输入主编:");
    			        scanf("%s",p->editor);
    			        break;
    			    case 5:
    			        printf("\t请输入价格:");
    			        scanf("%f",&p->price);
    			        break;
    			    case 6:
    			        printf("\t请输入出版社:");
    			        scanf("%s",p->publish);
    			        break;
    			    case 7:
    			        printf("\t请输入出版日期:");
    			        scanf("%s",p->date);
    			        break;
    			    case 8:
    			        printf("\t请输入数量:");
    			        scanf("%d",&p->num);
    			        break;
    			}
    			printf("--------------------------------------------------------------------\n");
    		    printf("\t修改成功!!!\n");
    		}
    	}
    	
    	else if(flag == 0)
    	    printf("对不起,该书库没有该书\n");
    	    system("pause");
    }
    
    /**显示所有图书信息*/ 
    void PrintBooks(BooksManage head)                                               
    {
    	BooksManage p;
    	system("cls");
    	
    	/**如果表头为空 */
        if(head == NULL || head->next == NULL) {
            printf("没有记录图书信息!\n");
            system("pause");//提示任意键继续 
            return ;
        }
    	
        p = head->next;
        printf("\n\n\n");
        printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
        printf("                                  图书列表\n");
        printf("------------------------------------------------------------------------------------\n");
    	printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");   
    	printf("------------------------------------------------------------------------------------\n");
        
    	do
    	{
    	    printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
    	    p = p->next;                           
    	}while(p!=NULL);
    	
    	system("pause");
    }
    
    /**求全部图书价值*/
    void SumBooks(BooksManage head){
    	float sum = 0;
    	system("cls");
    	BooksManage p;
    	/* 如果表头为空 */
        if(head == NULL || head->next == NULL) {
            printf("\t\t\t\t没有图书信息!\n");
            return;
        }
            for(p = head;p != NULL; p = p->next){
            	sum += p->price * p->num;
    		}
    	printf("\n\n\n\n\n\n");	
       printf("\t\t\t***********************************\n");
       color(12);printf("\t\t\t*    全部图书的总价值为:%.2f     *\n",sum);
       color(10);printf("\t\t\t***********************************\n");
    	system("pause");
    } 
    
    /*查询图书信息*/ 
    void FindBooks(BooksManage head)                                     
    {
    	system("cls");
    	int choose,flag = 0;
    	BooksManage p;
    	char b[100];
    	char ISBN[N];
    	
    	/* 如果表头为空 */
        if(head == NULL || head->next == NULL) {
            printf("没有记录图书信息!\n");
            system("pause");
            return ;
        }
        
        do
    	{
    		system("cls");
    		printf("\n\n\n");
    		printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    		printf("\t\t1.按书名查找\n");
    		printf("----------------------------------------------------------------------\n");
    		printf("\t\t2.按ISBN号查找\n");
    		printf("----------------------------------------------------------------------\n");
    		printf("\t\t返回主菜单(其他数字)\n");
    		printf("----------------------------------------------------------------------\n");
    		printf("\t\t请输入您的选择:");
    		scanf("%d",&choose);
    		printf("----------------------------------------------------------------------\n");
    		p=head;
    		
    		if(choose == 1)
    		{
    			printf("输入所查书名:");
    			scanf("%s",b);
    			printf("----------------------------------------------------------------------\n\n");
    			while(p->next)
    			{
    				p=p->next;                           /*转换到下一个结点*/
    				if(strcmp(b,p->bookName)==0)         /*判断是否找到并输出*/
    			    {
    				     flag=1;
    				     printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    					 printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");
          			  	 printf("------------------------------------------------------------------------------------\n");
    				     printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
    			    }
    			}
    			if(flag==0)
    			         printf("不存在该信息\n");
    		}
    		
    		else if(choose==2)
    		{
    			printf("输入所查ISBN号:");
    			scanf("%s",ISBN);
    			printf("----------------------------------------------------------------------\n\n");
    			while(p->next)
    			{
    				p=p->next;                         /*转换到下一个结点*/
    				if(strcmp(p->ISBN,ISBN) == 0)         /*判断是否找到并输出*/
    				{
    					flag=1;
    				   printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
    	                printf("ISBN\t书名\t所属学科\t主编\t价格\t出版单位\t出版时间\t数量\n");
    	               printf("------------------------------------------------------------------------------------\n");
    				    printf("%s\t%s\t%s\t\t%s\t%.2f\t%s\t\t%s\t%d\n",p->ISBN,p->bookName,p->subject,p->editor,p->price,p->publish,p->date,p->num);
    				}
    			}
    			if(flag == 0)
    			        printf("不存在该信息\n");
    		}
    		else
    		    return;
    		system("pause");
    	}while(1);
    }
    
    展开全文
  • 图书管理数据库系统

    万次阅读 多人点赞 2020-01-29 19:22:44
    发本文的原因:本文是一个很经典的图书管理系统设计,大学本科实验,用例图,流程图真香!包含全部设计架构和源代码 ,可直接使用。 链接:https://pan.baidu.com/s/16Wda96TQ_4MWHj5cXNhZaA 提取码:ug6z 1 系统...

    发本文的原因:本文是一个很经典的图书管理系统设计,大学本科实验,用例图,流程图真香!包含全部设计架构和源代码 ,可直接使用。

    链接:https://pan.baidu.com/s/16Wda96TQ_4MWHj5cXNhZaA 
    提取码:ug6z

    1  系统简介

    该实验设计开发一个简单的图书管理数据库系统,包括图书馆内书籍的信息、学校在校师生的信息以及师生的借阅信息。此系统用户面向图书管理员和借阅读者,图书馆管理员可以完成图书、读者、图书类型、学科类型、读者类型等基本信息的增加、删除和修改,可以制定借阅规则;读者可以进行图书的借阅、续借、归还、预约的确认等操作。

    系统开发技术及工具:Java JSP HTML Oracle数据库 tomcat服务器 Windows10系统  PC机

    2  系统分析

    2.1 功能模块简介

     

    2.2 功能需求描述

    • 借阅功能:

    图书出借时考虑三个问题:

    1. 读者是否因为超期、罚款等情况被关闭了借阅权限;
    2. 读者是否已经借满其限额。
    3. 该书是否不在库中;

    如果不存在以上情况,则可以出借。

    • 预约功能:

    读者想借的书如果不在库中(已经被出借),读者可以预约该图书,当该图书被归还时系统给读者发送邮件,提醒他来借阅,此时其他读者也可以借阅该书。

    • 续借功能:

    读者还书的时候可以续借该图书,续借的过程包括先执行还书操作,再执行借阅操作。

    • 发送催还邮件:

    管理员可以发送邮件提醒读者到期还书。

    • 读者管理功能:

    对读者信息进行查看、添加、修改、删除。将读者分为不同类别,赋以不同权限。

    • 系统管理功能:

    对管理员的登录账号、密码进行添加、修改、删除。

    • 借阅规则管理功能:

    对图书借阅规则进行查看、添加、修改、删除。

    2.3 系统用例图

     

    3 系统数据库设计

    3.1 系统概念模型设计

    数据库需要描述的数据信息包括以下几种:

    (1)读者信息

    (2)书籍信息

    (3)管理员信息

    (4)藏书分类信息

    (5)图书学科分类信息

    (6)读者分类信息

    (7)读者与书籍之间的关系(借阅关系E-R图)

    (8) 读者类型与书籍类型之间的关系(规则关系E-R图)

    这些数据项之间的关系可以用下列E-R图表示:

     

    3.2 数据库详细设计

    本系统共设计9个表、6个序列、4个存储过程、3个函数、4个触发器。

    针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的9个数据表

    1. 读者信息

    属性:读者编号,读者姓名,联系电话,邮箱地址,所在系,权限状况,读者类型,备注

    主键:读者编号

    2.书籍信息

    属性:图书编号,ISBN,书名,作者,出版社,出版日期,简介,封面图片,价格,学科类型,藏书类型

    主键:图书编号

    3.管理员信息

    属性:编号,账号,密码

    主键:编号

    4)读者类型

    属性:编号,类型,说明

    主键:编号

    5)藏书类型

    属性:编号,类型,说明

    主键:编号

    6)学科类型

    属性:编号,类型,说明

    主键:编号

    7)借阅信息

    属性:图书编号,读者编号,借阅日期,应还日期

    主键:图书编号,读者编号

    8)预约信息

    属性:图书编号,读者编号,预约日期

    主键:图书编号,读者编号

    9)借阅规则

    属性:图书类型,读者类型,期限,册数,续借次数,逾期罚款

    主键:图书类型,读者类型

    6个序列:

    读者编号、图书编号、读者类型编号、藏书类型编号、学科编号、管理员编号

    4个存储过程:

      • 检查借阅是否超期的存储过程;
      • 判断读者可否进行借阅的存储过程;
      • 计算超期罚款的存储过程;
      • 将超期未还的读者借阅权限关闭的存储过程;

    4个函数:

      • 计算图书应归还日期的函数;
      • 计算读者可借阅图书册书的函数;
      • 计算读者已经借阅某类型图书的册数的函数;
      • 计算读者应交欠费的函数。

    4个触发器:

      • 删除藏书类型的触发器;
      • 删除读者类型的触发器;
      • 删除图书的触发器;
      • 删除读者的触发器。

     

    3.3 表设计

    1、数据库表逻辑结构设计。

    表1 读者表(reader)

     

    列名

    类型

    长度

    约束

    备注

    readerid

    number

    11

    主键

    读者编号

    name

    varchar2

    10

    非空

    读者姓名

    telephone

    varchar2

    15

     

    联系电话

    email

    varchar2

    30

     

    邮箱地址

    dept

    varchar2

    20

     

    所在院系

    right

    number

    1

    取值为0或1

    借阅权限

    readertype

    number

    11

    外键

    读者类型

    demo

    varchar2

    1000

     

    说明

    2 图书表(book)

     

    列名

    类型

    长度

    约束

    备注

    bookid

    number

    11

    主键

    书籍编号

    bookname

    varchar2

    20

    非空

    书籍名称

    author1

    varchar2

    20

    非空

    书籍作者

    author2

    varchar2

    20

     

    书籍作者

    author3

    varchar2

    20

     

    书籍作者

    pubdate

    date

     

     

    出版日期

    publish

    varchar2

    30

     

    出版社

    photo

    varchar2

    100

     

    图片地址

    abstract

    varchar2

    4000

     

    内容简介

    Price

    number

    7,2

    非空

    价格

    ISBN

    varchar2

    17

    非空

    书籍ISBN码

    bookclass

    number

    11

    外键

    学科类型

    booktype

    number

    11

    外键

    藏书类型

     

    表3 管理员用户表(admin)

    列名

    类型

    长度

    约束

    备注

    Id

    number

    11

    主键

    管理员编号

    username

    varchar2

    10

    非空

    管理员帐号

    password

    varchar2

    11

    非空

    帐号密码

    4 读者类型(reader_type)

    列名

    类型

    长度

    约束

    备注

    typeid

    number

    11

    主键

    类型编号

    typename

    varchar2

    20

    非空

    类型名称

    demo

    varchar2

    100

     

    说明

    5 藏书类型表(book_type)

    列名

    类型

    长度

    约束

    备注

    typeid

    number

    11

    主键

    类型编号

    typename

    varchar2

    20

    非空

    类型名称

    demo

     varchar2

    100

     

    说明

    6 学科类型表(book_class)

    列名

    类型

    长度

    约束

    备注

    classid

    number

    11

    主键

    类型编号

    classname

    varchar2

    20

    非空

    类型名称

    demo

     varchar2

    100

     

    说明

     

    表7 借阅表(borrow)

    列名

    类型

    长度

    约束

    备注

    readerid

    number

    11

    联合主键,外键

    读者编号

    bookid

    number

    11

    联合主键,外键

    图书编号

    borrowdate

    date

     

     

    出借日期

    due

    date

     

     

    应还日期

    8 预约表(preconcert)

    列名

    类型

    长度

    约束

    备注

    readerid

    number

    11

    联合主键,外键

    读者编号

    bookid

    number

    11

    联合主键,外键

    图书编号

    predate

    date

     

     

    预约日期

    9 规则表(rule)

    列名

    类型

    长度

    约束

    备注

    booktype

    number

    11

    联合主键,外键

    藏书类型号

    readertype

    number

    11

    联合主键,外键

    读者类型号

    days

    number

    5

    非空

    期限(天)

    num

    number

    5

    非空

    册数(本)

    renew

    number

    5

    非空

    续借次数(次)

    overtime

    number

    5,2

    非空

    逾期处罚(元/册/天)

     

     

    2、创建数据库表的脚本。

    (1)创建BOOK_ClASS

    create table book_class(

    classid number(11) primary key,

    classname varchar2(20) not null,

    demo varchar2(100) 

    );

    (2)创建admin

    create table admin(

    id number(11) primary key,

    username varchar2(10) not null,

    password varchar2(11) not null

    );

    (3)创建reader_type

    create table reader_type(

    typeid number(11) primary key,

    typename varchar2(20) not null,

    demo varchar2(100)

    );

    (4)创建reader

    create table reader(

    readerid number(11) primary key,

    name varchar2(10) not null,

    telephone varchar2(15),

    email varchar2(30),

    dept varchar2(20),

    right number(1) check(right=0 or right=1),

    readertype number(11) references reader_type(typeid),

    demo varchar2(1000)

    );

    (5)创建book_type

    create table book_type(

    typeid number(11) primary key,

    typename varchar2(20) not null,

    demo varchar2(100)

    );

    (6)创建book

    create table book(

    bookid number(11) primary key,

    bookname varchar2(20) not null,

    author1 varchar2(20) not null,

    author2 varchar2(20),

    author3 varchar2(20),

    pubdate date,

    publish varchar2(30),

    photo varchar2(100),

    abstract varchar2(4000),

    price number(7,2) not null,

    isbn varchar2(17) not null,

    bookclass number(11) references book_class(classid),

    booktype number(11) references book_type(typeid)

    );

    (7)创建borrow

    create table borrow(

    readerid number(11),

    bookid number(11),

    borrowdate date,

    due date,

    primary key(readerid,bookid),

    foreign key (readerid) references reader(readerid),

    foreign key (bookid) references book(bookid)

    );

    (8)创建preconcert

    create table preconcert(

    readerid number(11),

    bookid number(11),

    predate date,

    primary key(readerid,bookid),

    foreign key (readerid) references reader(readerid),

    foreign key (bookid) references book(bookid)

    );

    (9)创建rule

    create table rule(

    booktype number(11),

    readertype number(11),

    days number(5) not null,

    num number(5) not null,

    renew number(5) not null,

    overtime number(5,2) not null,

    primary key(booktype,readertype),

    foreign key (booktype) references book_type(typeid),

    foreign key (readertype) references reader_type(typeid)

    );

     

    3.4 序列设计

    为了方便自动产生连续的读者编号、图书编号、读者类型编号、藏书类型编号、学科编号、管理员编号等字段,在数据库中分别用下列序列产生相应的编号。

    (1)create sequence seq_reader start with 1 increment by 1;

    (2)create sequence seq_book start with 1 increment by 1;

    (3)create sequence seq_reader_type start with 1 increment by 1;

    (4)create sequence seq_book_type start with 1 increment by 1;

    (5)create sequence seq_book_class start with 1 increment by 1;

    (6)create sequence seq_admin start with 1 increment by 1;

    3.5 视图设计

    为了方便查询读者借阅图书的情况及图书的借阅统计,创建下列视图。

    1. 创建名为“READER_BOOK_VIEW”的视图,包括读者信息、所借图书信息及借阅信息。

    CREATE OR REPLACE VIEW reader_book_view

    AS

    SELECT name,bookname,borrowdate,due,last_due  FROM readet,book,borrow

    WHWER reader.teadid=borrow.readid AND borrow.bookid=book.bookid;

    1. 创建名为“BOOK_TYPE_STAT_VIEW”的视图,包括各类图书的借阅统计信息。

    CREATE OR REPLACE VIEW book_type_stat_view

    AS

    SELECT booktype,COUNT(booktype)  FROM (

    SELECT readerid,borrow.booktype,booktype,borrowdate,due,last_due

    FROW borrow,book WHWER book.bookid=borrow.bookid)

    1. 存储过程设计

      1. 检查借阅是否超期的存储过程

    Create or replace procedure p_days_from_due(v_readerid number,v_bookid number,v_days out number)

    As

    Begin

    Select due –sysdate into v_days from borrow where readerid=v_readerid and bookid=v_bookid;

    Exception

    When others then

    v_days:=0;

    End;

    2.判断读者可否进行借阅的存储过程

    Create or replace procedure p_can_borrow(v_readerid in number, v_bookid in number, v_num out number)

    As

    V_right number;

    V_borrowed_num number;

    V_rule_num number;

    Begin

    Select right into v_right from reader where readerid=v_readerid;

    v_borrowed_num:=f_borrowed_num(v_readerid,v_bookid);

    v_rule_num:=f_rule_num(v_readerid,v_bookid);

    If v_right=1 then v_num:=0;

    Else

    v_num:=v_rule_num-v_borrowed_num;

    End if;

    Exception

     When others then

       v_num:=0;

    End;

    3.计算超期罚款的存储过程;

    Create or replace procedure p_timeover_money(v_readerid number,v_bookid number ,v_money out number)

    As

    V_days number;

    V_readertype number;

    V_booktype number;

    Begin

    p_days_from_due(v_readerid,v_bookid,v_days);

    Select booktype into v_booktype from book where bookid=v_bookid;

    Select readertype into v_readertype from reader where readerid=v_readerid;

    Select overtime*floor(abs(v_days)) into v_money from rule where readertype=v_readertype and booktype=v_booktype;

    Exception

    When others then

    v_money:=0;

    End;

    4.将超期未还的读者借阅权限关闭的存储过程

    Create or replace procedure p_cant_borrow(v_readerid in number, v_bookid in number, v_right out number)

    As

    V_right number;

    V_due date;

    V_next_date num;

    Begin

    Select right into v_right from reader where readerid=v_readerid;

    v_due:=f_borrowed_num(v_readerid,v_bookid);

    v_next_date:= to_date(sysdate,'yyyymmdd')-to_date(v_due,'yyyymmdd');

    If v_next_date >=0 then v_right=0;

    Else

    v_right=1;

    End if;

    Exception

    When others then

    v_right=0;

     

    3.7函数设计

    (1)计算图书应归还日期的函数。

    Create or replace function f_date_is_due(v_readerid number,v_bookid number)

    Return varchar2 as

    V_booktype number;

    V_readertype number;

    V_date varchar2(10);

    Begin

    Select booktype into v_booktype from book where bookid=v_bookid;

    Select readertype into v_readertype from reader where readerid=v_readerid;

    Select to_char(sysdate+days, 'yyyy-mm-dd') into v_date from rule where readertype=v_readertype and booktype=v_booktype;

    Return v_date;

    Exception

    /*尚未制定该类图书借阅规则*/

    When no_data_found then

    Select to_char(sysdate+30,’yyyy-mm-dd’) into v_date from dual;

    Return v_date;

    End;

     

    (2)计算读者可借阅图书册数的函数

    Create or replace function f_rule_num(v_readerid in number,v_bookid in number) return number

    As

    V_booktype number;

    V_readertype number;

    V_num number;

    Begin

    Select booktype into v_booktype from book where bookid=v_bookid;

    Select readertype into v_readertype from reader where readerid=v_readerid;

    Select num into v_num from rule where readertype=v_readertype and booktype=v_booktype;

    Return v_num;

    Exception

    /*尚未制定该类图书借阅规则*/

    When no_data_found then

    select max(num) into v_num from rule;

    return v_num;

    End;

     

    (3)计算读者已经借阅某类型图书的册数的函数

    Create or replace function f_borrowed_num(v_readerid number,v_bookid number)return number as

    V_num number;

    V_type number;

    Begin

    Select booktype into v_type from book where bookid=v_bookid;

    Select count(*) into v_num from book,borrow where book.bookid=borrow.bookid and readerid=v_readerid and booktype=v_type;

    Return v_num;

    End;

     

    (4)计算读者应交欠费的函数。

    create or replace function f_owned_money(v_readerid number)return number

    As

    v_fine number:=0.0;

    v_money number:=0.0;

    v_days number;

    v_borrow borrow%ROWTYPE;

    cursor c_borrow is select * from borrow where readerid=v_readerid;

    Begin

      for v_borrow in c_borrow loop

         p_days_from_due(v_borrow.readerid,v_borrow.bookid,v_days);

         if (v_days<0) then

            p_timeover_money(v_borrow.readerid,v_borrow.bookid,v_money);

            v_fine:=v_fine+v_money;

         end if;

      end loop;

      Return v_fine;

    End;

     

    3.8触发器设计

    (1)删除藏书类型的触发器。

    Create or replace trigger tr_delete_booktype

    Before delete on book_type for each row

    begin

    delete from book where booktype=:old.typeid;

    delete from rule where booktype=:old.typeid;

    End;

     

    (2)删除读者类型的触发器。

    Create or replace trigger tr_delete_readerype

    Before delete on reader_type for each row

    begin

    delete from reader where readertype=:old.typeid;

    delete from rule where readertype=:old.typeid;

    End;

     

    (3)删除图书的触发器。

    Create or replace trigger tr_delete_book

    Before delete on book for each row

    begin

    delete from borrow where bookid=:old.bookid;

    delete from preconcert where bookid=:old.bookid;

    End;

     

    (4)删除读者的触发器。

    Create or replace trigger tr_delete_reader

    Before delete on reader for each row

    begin

    delete from borrow where readerid=:old.readerid;

    delete from preconcert where readerid=:old.readerid;

    End;

     

    4.系统主要功能模块设计与实现

    4.1数据库的连接与访问

    1.注册驱动通过Class.forName()获取Oracle数据库驱动

    2.获取连接DriverManager.getConnection()

    3.获取数据库操作对象

    4.执行sql   executeQuery(sql); executeUpdate(sql); executeDelete(sql);

    5.处理查询结果集

    关键代码:

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //通过Class.forName()获取Oracle数据库驱动

    String url="jdbc:oracle:thin:@localhost:1521:orcl"; //数据库名,端口号

    String user="scott";        //用户名

    String password="tiger";     //密码

    conn=DriverManager.getConnection(url, user, password);  //建立连接

    5.1借书管理

    (1)功能页面列表

    (2)业务流程图 

    (3)核心代码

    String sql1="select * from borrow where bookid="+bookid;

    ResultSet rs1=dbCon.executeQuery(sql1);

    rs1.next();

    int y=rs1.getRow();

    if(y>0)

    {

    //该书未还

    out.print("<center>该书未还!<a href=javascript:history.go(-1)>后退</a></center>");

    out.print("<br><center><a href=..\\main.jsp>〈〈返回首页</a></center>");

    }

    else

    {

    //判断该读者还能借几本书

    CallableStatement a=con.prepareCall("{call p_can_borrow(?,?,?)}");

    a.setInt(1,readerid.intValue()); 

    a.setInt(2, bookid.intValue());   

    a.registerOutParameter(3, Types.INTEGER);//输出

    a.execute(); 

    int  num=a.getInt(3);

     if(num>0)

     {

     

     //计算到期日期

     

    // 调用有一个in参数的函数; the function returns a VARCHAR

    CallableStatement cs = con.prepareCall("{? = call f_date_is_due(?,?)}");

    cs.registerOutParameter(1, Types.VARCHAR);

     

    cs.setInt(2, readerid.intValue());

    cs.setInt(3, bookid.intValue());

     

    cs.execute();

    String due = cs.getString(1);

     

    String sql="insert into borrow(readerid,bookid,borrowdate,due) values("+

    readerid+","+bookid+",sysdate,to_date('"+due+"','yyyy-mm-dd'))";

    System.out.println(sql);

     

    dbCon.executeUpdate(sql);

     

    out.print("<center>出借成功!<a href=javascript:history.go(-1)>继续借书</a></center>");

    out.print("<br><center><a href=..\\main.jsp>〈〈返回首页</a></center>");

    }

     else

    {

    //该书不能出借

    out.print("<center>出借限额已满或读者无权限!<a href=javascript:history.go(-1)>后退</a></center>");

    out.print("<br><center><a href=..\\main.jsp>〈〈返回首页</a></center>");}}
    (4)界面实现

    5.2还书管理

    1. 功能页面列表

    (2) 业务流程图 

    3)核心代码

    //还书入库

    String sql1="delete from borrow where bookid="+bookid+" and readerid="+readerid;

            dbCon.executeUpdate(sql1);

    //判断该书是否超期

    CallableStatement  a=con.prepareCall("{call p_days_from_due(?,?,?)}");

    a.setInt(1,readerid.intValue()); 

    a.setInt(2, bookid.intValue());   

    a.registerOutParameter(3, Types.INTEGER);//输出

    a.execute(); 

    int  num=a.getInt(3);

     if(num>=0)

     {

     //还书未超期

    dbCon.executeUpdate(sql);

    out.print("<center>还书成功!<a href=javascript:history.go(-1)>后退</a></center>");

    out.print("<br><center><a href=..\\main.jsp>〈〈返回首页</a></center>");

    }

     else

    {

     

    //计算超期罚款金额

    // 调用有一个OUT参数的存储过程; the procedure returns a NUMBER

    CallableStatement cs = con.prepareCall("{ call p_timeover_money(?,?,?)}");

    cs.setInt(1, readerid.intValue());

    cs.setInt(2, bookid.intValue());

    cs.registerOutParameter(3, Types.INTEGER);

    cs.execute();

    int m = cs.getInt(3);

    dbCon.executeUpdate(sql);

    out.print("<center>出借已超期!需缴纳罚款"+m+"元<a href=javascript:history.go(-1)>后退</a></center>");

    out.print("<br><center><a href=..\\main.jsp>〈〈返回首页</a></center>");

    }


     
    6.总结 

      本次综合实验让我深刻的体会到 Oracle 的魅力所在,加深了我对 Oracle 数 据库的理解,提升了我对 Oracle 数据库的综合运用能力。例如,我是在本次实 验中才理解了序列的用法,并真正用到实践中来。Oracle 的索引、视图等提高 了 orale 的访问速度,序列提高了数据插入的速度。函数和存储过程简化了后端 代码的量同时提高了稳定性和安全性,触发器的设计保证了数据的一致性。一个 完整的开发流程让我看到了 Oracle 数据库在实际开发过程中相比 MySQL 的优势 所在。 本次实验同样用到了 tomcat 服务器、JSP 技术。作为一个轻量级的服务器 tomcat 较为适合小型项目部署。JSP 技术对于小型项目也挺适用,虽然没有实现 前后端分离,但是可以让功能的实现变得易于完成代码的编写,也易于理解。本 次实验所用图书管理系统数据库模型数据库表设计等很经典,其价值值得深入挖 掘探索,完全可以称为我们今后数据库设计的入门案例。 

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 614
精华内容 245
关键字:

图书信息管理系统流程图