图书馆管理系统


一个小型图书馆系统的图书管理分系统中,一本图书的信息包括图书的编号(code),书名(title)和借阅人(reader)。图书列表可以用一个链表来实现。请按要求完成相应的函数。
注意:链表头结点的位置为0,第一个数据结点的位置为1 

输入要求

首先输入图书数量n,并输入n本图书的信息,包括书籍编号,书名和借阅人(以id表示),数据之间以空格分隔。
然后,输入命令编码及所需信息。详见代码及样例输入。

输出要求

见样例输出。空表不输出任何信息。

测试数据

输入示例
5
1000 aaa 1002
2000 bbb -1
3000 ccc 0
4000 ddd 4001
5000 eee 5001
2 0 6000 fff -1
2 6 6000 fff -1
3 7
3 1
4 1000 1000
4 2000 2000
4 3000 3000
5 6000
5 5000
1
-1


#include <stdio.h>
#include <stdlib.h>

#define NAMELEN 20    // 名字最长字符数

typedef struct {    // 代表一本书的结构体
    int code;               // 编号
    char title[NAMELEN];    // 书名
    int reader;             // 借阅人,以读者的id表示
}Book;

typedef struct BNode { // 图书结点 
	Book book;
	struct BNode *next;
}BNode, *BookList;                

// 根据用户输入,初始化n个图书的列表readers
// 如果一本没有被借阅,其借阅人以-1表示
// 该函数假设用户输入的数据是正确的 
void init(BookList &blist, int n);

// 依次显示所有图书的信息。 
// 如果某图书的编号为1000,书名为abc,被id为1001的读者借阅,
// 则该图书的输出信息为:1000|abc|1001(分行符)
// 如果某读者的编号为1000,书名为abc,没有被借阅,
// 则该图书的输出信息为:1000|abc|(分行符)
void displayall(BookList &blist);

// 将图书b插入图书列表blist中的第i个位置(从1开始) 
// 成功返回1,失败返回0 
int insert(BookList &blist, int i,  Book b);

// 删除图书列表blist中的第i本书(从1开始) 
// 成功返回1,失败返回0 
int del(BookList &blist, int i);

 // 编号为code的图书被id为 "id" 的读者借阅 
 // 成功返回1,失败返回0 
 int borrow(BookList &blist, int code, int id);
 
// 编号为code的图书被归还 
 // 成功返回1,失败返回0 
 int returnB(BookList &blist, int code);
 
int main()
{
	// 变量声明
	BookList blist;	// 读者列表
	
	// 临时变量 
	int n;				// 初始图书个数 
	int cmd = 0;		// 操作命令,-1表示退出 
	int result = 0;		// 操作结果
	int i = -1;			// 位置(序号)
	int code, id;		 
	Book b;			

	// 初始化读者列表 
	scanf("%d", &n);
	init(blist, n); 
	
	while (scanf("%d", &cmd) && cmd!=-1) { // 选择操作 
		switch (cmd) {
		case 1:				// 显示所有读者 
			displayall(blist);
			break;
		case 2:				// 插入 	
			scanf("%d", &i); // 序号 
			// 图书的编码、书名和借阅人(-1表示没有被借阅)。 
			scanf("%d%s%d", &b.code, b.title, &b.reader); 
			result = insert(blist, i, b); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		case 3:				// 删除 
			scanf("%d", &i); // 序号
			result = del(blist, i); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		case 4:			// 借出 
			scanf("%d%d", &code, &id); // 书籍编码和借阅人id
			result = borrow(blist, code, id); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		case 5:			// 归还 
			scanf("%d", &code);	// 书籍编码 
			result = returnB(blist, code); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		default:
			printf("Unknown Command.\n");
			break;
		}
	}
	return 0;
}

**********************************************************************************************************************

#include <stdio.h>
#include <stdlib.h>

#define NAMELEN 20    // 名字最长字符数

typedef struct {    // 代表一本书的结构体
    int code;               // 编号
    char title[NAMELEN];    // 书名
    int reader;             // 借阅人,以读者的id表示
}Book;

typedef struct BNode { // 图书结点 
	Book book;
	struct BNode *next;
}BNode, *BookList;                

// 根据用户输入,初始化n个图书的列表readers
// 如果一本没有被借阅,其借阅人以-1表示
// 该函数假设用户输入的数据是正确的 
void init(BookList &blist, int n);

// 依次显示所有图书的信息。 
// 如果某图书的编号为1000,书名为abc,被id为1001的读者借阅,
// 则该图书的输出信息为:1000|abc|1001(分行符)
// 如果某读者的编号为1000,书名为abc,没有被借阅,
// 则该图书的输出信息为:1000|abc|(分行符)
void displayall(BookList &blist);

// 将图书b插入图书列表blist中的第i个位置(从1开始) 
// 成功返回1,失败返回0 
int insert(BookList &blist, int i,  Book b);

// 删除图书列表blist中的第i本书(从1开始) 
// 成功返回1,失败返回0 
int del(BookList &blist, int i);

 // 编号为code的图书被id为 "id" 的读者借阅 
 // 成功返回1,失败返回0 
 int borrow(BookList &blist, int code, int id);
 
// 编号为code的图书被归还 
 // 成功返回1,失败返回0 
 int returnB(BookList &blist, int code);
 
int main()
{
	// 变量声明
	BookList blist;	// 读者列表
	
	// 临时变量 
	int n;				// 初始图书个数 
	int cmd = 0;		// 操作命令,-1表示退出 
	int result = 0;		// 操作结果
	int i = -1;			// 位置(序号)
	int code, id;		 
	Book b;			

	// 初始化读者列表 
	scanf("%d", &n);
	init(blist, n); 
	
	while (scanf("%d", &cmd) && cmd!=-1) { // 选择操作 
		switch (cmd) {
		case 1:				// 显示所有读者 
			displayall(blist);
			break;
		case 2:				// 插入 	
			scanf("%d", &i); // 序号 
			// 图书的编码、书名和借阅人(-1表示没有被借阅)。 
			scanf("%d%s%d", &b.code, b.title, &b.reader); 
			result = insert(blist, i, b); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		case 3:				// 删除 
			scanf("%d", &i); // 序号
			result = del(blist, i); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		case 4:			// 借出 
			scanf("%d%d", &code, &id); // 书籍编码和借阅人id
			result = borrow(blist, code, id); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		case 5:			// 归还 
			scanf("%d", &code);	// 书籍编码 
			result = returnB(blist, code); 
			if (result) printf("Succeed\n");
			else printf("Failed\n");
			break;
		default:
			printf("Unknown Command.\n");
			break;
		}
	}
	return 0;
}
void init(BookList &blist, int n){
	blist = new BNode[20];
	blist->next = NULL;
	BNode *r = blist;
	for(int i=0;i<n;i++){
		BNode *p= new BNode;
		scanf("%d %s %d",&p->book.code,&p->book.title,&p->book.reader);
		p->next = NULL;
		r->next = p;
		r = p;
	}	
}

void displayall(BookList &blist){
	BNode *p = blist->next;
	while(p){
		if(p->book.reader == -1)
			printf("%d|%s|\n", p->book.code,p->book.title);
		else
			printf("%d|%s|%d\n", p->book.code,p->book.title,p->book.reader);
		p = p->next;
	}
	printf("\n");
}

int insert(BookList &blist, int i,  Book b){
	BNode *p = blist;
	int j = 0 ;
	while(p && (j<i-1))
	{
		p = p->next;	
		j++;	
	}
	if(!p || j >i -1) 
		return 0;
	BNode *s = new BNode;
	s->book = b;
	s->next = p->next;
	p->next = s;
	return 1;	
}


int del(BookList &blist, int i){
	BNode  *p=blist;
	int j = 0;
	while((p->next) && (j<i - 1)){
		p = p->next;
		j++;
	}
	if(!(p->next)  || (j>i-1))
		return 0;
	BNode *q = new BNode; 
	q = p->next;
	p ->next = q->next;
	delete q;
	return 1;	
}


 int borrow(BookList &blist, int code, int id){
 	BNode *blist1 = blist;
 	blist1 = blist1->next;
 	while(blist1){
 		if(blist1->book.code == code){
	 		if(blist1->book.reader == -1){
	 			blist1->book.reader = id;
	 			return 1;
			 }
			 else 
			 	return 0;						
		 }
		blist1 = blist1->next;
	}
	return 0;
 }
 

 int returnB(BookList &blist, int code){
 	BNode *blist1 = blist;
 	blist1 = blist1->next;
 	while(blist1){
 		if(blist1->book.code == code){
	  		if(blist1->book.reader != -1){
	 			blist1->book.reader = -1;
	 			return 1;
			 }			
		 }
		 blist1 = blist1->next;
	 }
	 return 0;
 }

图书馆管理系统使用说明书 配置源程序 附加MYSQL数据库 将TM\02\ Database\db_librarySys文件夹拷贝到mysql\data文件夹下即可,如图1.1所示。 图1.1 拷贝MYSQL数据库 将程序发布到Tomcat下 (1)将“TM\02”文件夹拷贝到Tomcat安装路径下的webapps文件夹。 (2)选择开始菜单的“所有程序\Apache Tomcat 6.0\Monitor Tomcat”命令,这时在windows的系统托盘会显示标识Tomcat服务器启动状态的图标,如果显示为 ,则说明Tomcat服务器没有启动,这时可以在该图标上单击鼠标右键在弹出的快捷菜单选择“Start Service”菜单项启动Tomcat服务器,启动后将显示为 。 (3)打开IE浏览器,在地址栏输入http://localhost:8080/,进入“Tomcat软件管理”页面。 注意:8080为安装Tomcat时设置的端口。 (4)单击Tomcat Manager超链接,弹出“连接到 localhost”对话框。 (5)在用户名及密码处输入登录Tomcat的用户名和密码,单击【确定】按钮。 (6)进入“Tomcat应用程序管理”页面,在此页面单击“02”,进入本程序主页面,完成Tomcat配置。 导入所应用的包 在运行本程序时,需要将Struts 1.2和MySQL数据库驱动包拷贝到Tomcat安装路径下的webapps文件夹的02\WEB-INF\lib文件夹。 使用说明 系统介绍 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书的信息查询、读者图书借阅情况的查询等功能。项目实施后,能够提高图书馆的图书借阅、归还流程,提高工作效率。整个项目需要在两个月的时间内交付用户使用。 操作注意事项 (1)本系统的用户名为:tsoft,密码为:111 (2)读者类型不同,可借图书的本数也有所区别。 操作流程 (1)用户登录图书馆管理系统后,可看到图书借阅排行榜,通过排行榜可以看出借阅图书的名称、图书类型、借阅次数等相关信息。 (2)单击“系统设置”/“图书馆信息”命令,对图书馆信息进行设置操作。 (3)单击“系统设置”/“管理员设置”命令,对管理员信息进行添加、权限设置、查询及删除操作。 (4)单击“系统设置”/“参数设置”命令,对办证费用及有效期限信息进行添加操作。 (5)单击“系统设置”/“书架设置”命令,对书架信息进行添加、修改及删除操作。 (6)单击“读者管理”/“读者类型管理”命令,对读者类型信息进行添加、修改及删除操作。 (7)单击“读者管理”/“读者档案管理”命令,对读者信息进行添加、修改及删除操作。 (8)单击“图书管理”/“图书类型设置”命令,对图书类型信息进行添加、修改及删除操作。 (9)单击“图书管理”/“图书档案管理”命令,对图书信息进行添加、修改及删除操作。 (10)单击“图书借还”/“图书借阅”命令,对图书借阅信息添加操作。 (11)单击“图书借还”/“图书续借”命令,对图书续借信息进行添加操作。 (12)单击“图书借还”/“图书归还”命令,对图书归还信息进行添加操作。 (13)单击“系统查询”/“图书档案查询”命令,对图书档案信息进行查询操作。 (14)单击“系统查询”/“图书借阅查询”命令,对借阅的图书信息进行查询操作。 (15)单击“系统查询”/“借阅到期提醒”命令,对借阅到期提醒信息进行查询操作。 (16)单击“更改口令”按钮,对当前的用户密码进行修改操作。 (17)单击“退出系统”按钮,退出当前操作系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值