20190807——图书管理系统的开发

图书管理系统

1.实现程序框架的搭建
1.1.编写相关的实体类
1.1.1.Book实体类的属性

	private String bookCode;//图书号
	private String bookName;//图书名称
	private String bookPirce;//图书价格
	private String bookPath;//图书路径
	private Integer commCount=0;//评论数
	private boolean isVip=false; //是否VIP

1.1.2.Comment实体类信息

	private String commCode; //编号
	private String userCode; //用户编号
	private String nickname; //昵称
	private String bookCode; //图书编号
	private String content; //评论内容 
	private Integer score; //评分
	private Date commentDate;  //发表时间

1.1.3.User实体类信息

	private String userCode; //编号
	private String loginName; //登录名
	private String loginPwd;  //密码
	private String nickname; //昵称
	private String status="yes";  //状态
	private Integer score =0; //积分
	private String level ="1";  //管理员0或普通用户 1

1.2.编写工具类
1.2.1.CodeUtil用于生成一个独立ID

1.2.2.DataUtil用户保存程序产生所有的数据
1.2.2.1.DataUtil集合的定义

1.2.2.2.数据的初始化(使用静态块)

1.2.2.3.数据的测试(要明白数据之间的关联关系)

注意:图书信息的显示代码并不完整,需要自己补齐(参考用户显示)

2.实现登录功能
2.1.添加UserDao并根据用户名和密码实现查询功能

2.2.添加BookMenu菜单类

2.2.1.在BookMenu中添加公共变量

2.2.2.并添加一个主菜单功能

	public static void main(String[] args) { 
		 mainMenu();
	} 
	// 主菜单功能
	public static void mainMenu() {
		int choose = 0;
		do {
			System.out.println("1:登录");
			System.out.println("2:注册");
			System.out.println("0:退出");
			choose = input.nextInt();
			switch (choose) {
			case 1:
				login();
				break;
			case 2:
				System.out.println("暂无实现");
				break;
			case 0:
				System.out.println("退出");
				break;
			default:
				System.out.println("选项错误");
			}
		} while (choose != 0);

		System.out.println("程序结束");
	}

2.2.3.添加登录菜单功能(login())

	// 登录页面功能
	public static void login() {
		for (int i = 0; i < 3; i++) {
			System.out.println("请输入用户名:");
			String uname = input.next();
			System.out.println("请输入用户密码:");
			String upass = input.next();
			loginUser = userDao.login(uname, upass);
			if (loginUser != null) {
				// 普通用户被冻结
				if (loginUser.getStatus().equals("no")) {
					System.out.println("用户信息已被冻结,请联系管理员");
					break;
				}
				// 保存登录对象
				System.out.println("登录成功");
				if (loginUser.getLevel().equals("0")) {
					// 管理员登录
					System.out.println("欢迎管理员");
					//showAdminMenu();
				} else {
					// 普通用户登录
					System.out.println("欢迎普通用户");
					//showUserMenu();
				}
				return;
			} 
			if (i < 2) {
				System.out.println("用户名密码错误,请重新输入");
			} else {
				System.out.println("三次登录机会已被用完");
			} 
		}
	}

运行程序,测试是否可以登录成功

3.完成管理员登录后显示所有图书和添加图书的功能(添加图书的名称不重复)
3.1.添加BookDao类

3.2.并添加查询所有图书和添加图书的功能,根据图书名称查询图书信息的方法
3.2.1.查询所有图书

3.2.2.根据图书名称查询单个图书

3.2.3.添加图书

3.3.修改BookMenu类,添加管理官登录后的主菜单
在BookMenu类中添加公共的BookDao类

3.3.1.管理员登录的主菜单

	// 管理员主界面
	public static void showAdminMenu() {
		System.out.println("欢迎:" + loginUser.getNickname() + "登录");
		int choose = 0;
		do {
			System.out.println("1:普通用户管理");
			System.out.println("2:图书管理");
			System.out.println("0:退出");
			choose = input.nextInt();
			switch (choose) {
			case 1:
				System.out.println("暂无实现");
				break;
			case 2:
				showBookInfo();
				break;
			case 0:
				System.out.println("退出");
				break;
			default:
				System.out.println("选项错误");
			}
		} while (choose != 0);
	}

3.3.2.定义显示图书的方法(showBookInfo())

	// 显示图书信息功能
	public static void showBookInfo() {
		int choose = 0;
		List<Book> bookList = bookDao.findBooks();
		System.out.println("图书编号\t图书名称\t图书价格\t图书评论\t是否VIP");
		for (int i = 0; i < bookList.size(); i++) {
			Book book = bookList.get(i);
			System.out.println(book.getBookCode() + "\t" + book.getBookName() + "\t" + book.getBookPirce() + "\t"
					+ book.getCommCount() + "\t" + book.isVip());
		}
		// 显示用户的信息完毕后调用处理功能
		System.out.println("1:添加图书");
		System.out.println("2:删除图书");
		choose = input.nextInt();
		switch (choose) {
		case 1:
			addBook();
			break;
		case 2:
			System.out.println("暂无实现");
			break;
		}
	}

3.3.3.实现添加图书的功能

	// 添加图书信息功能
	public static void addBook() {
		String bookname = "";
		boolean isHave = false;
		// 判断图书的名称是否重复
		do {
			isHave = false;
			System.out.println("请输入图书名称:");
			bookname = input.next();
			Book book = bookDao.findBookByName(bookname);
			if (book != null) {
				System.out.println("图书名称重复,请换名称");
				isHave = true;
			}
		} while (isHave);
		System.out.println("请输入图书价格:");
		String price = input.next();
		System.out.println("请输入图书路径:");
		String path = input.next();
		Book book1 = new Book();
		book1.setBookCode(CodeUtil.getCode());
		book1.setBookName(bookname);
		book1.setBookPath(path);
		book1.setBookPirce(price);
		book1.setCommCount(0);
		book1.setVip(false);
		// 设置新的图书信息,并添加 
		bookDao.addBooks(book1); 
	}

编写完代码后运行程序,测试是否能添加图书的功能

4.完成普通用户登录后查询图书列表功能
4.1.修改BookMenu类,添加普通用户登录后的菜单(showUserMenu())

	//普通用户主菜单
	public static void showUserMenu(){
		System.out.println("欢迎:" + loginUser.getNickname() + "当前积分:"+ loginUser.getScore()+"分");
		int choose = 0;
		do {
			System.out.println("1:查询我的评论");
			System.out.println("2:查询图书信息");
			System.out.println("0:退出");
			choose = input.nextInt();
			switch (choose) {
			case 1:
				//showUserCommInfo();
				break;
			case 2:
				showUserBookInfo();
				break;
			case 0:
				System.out.println("退出");
				break;
			default:
				System.out.println("选项错误");
			}
		} while (choose != 0);
	}

4.2.显示普通用户登录后的图书列表信息(showUserBookInfo())

	public static void showUserBookInfo(){ 
		int choose = 0;
		List<Book> bookList = bookDao.findBooks();
		System.out.println("图书编号\t图书名称\t图书价格\t图书评论\t是否VIP");
		for (int i = 0; i < bookList.size(); i++) {
			Book book = bookList.get(i);
			System.out.println(book.getBookCode() + "\t" + book.getBookName() + "\t" + 
			book.getBookPirce() + "\t"+ book.getCommCount() + "\t" + book.isVip());
		}
		// 显示用户的信息完毕后调用处理功能
		System.out.println("1:阅读图书");
		System.out.println("2:下载图书");
		System.out.println("3:发表图书评论");
		System.out.println("4:查看图书的评论");
		choose = input.nextInt();
		switch (choose) {
		case 1:
			System.out.println("暂无实现");
			break;
		case 2:
			System.out.println("暂无实现");
			break;
		case 3:
			System.out.println("添加书评"); 
			break;
		case 4:
			System.out.println("暂无实现");
			break;
		}
	}	

测试:普通用户登录后是否可以查看所有的图书列表信息

5.完成普通用户登录后查询自己发表的评论功能
5.1.添加一个CommentDao实现查询用户自己评论的信息

5.2.修改BookMenu类实现用户评论信息的显示

	//显示用户的评论信息
	public static void showUserCommInfo(){
		//根据登录用户ID,查询用户的评论
		List<Comment> commentList = commentDao.findCommentByUsercode(loginUser.getUserCode());
		System.out.println("评论编号\t\t评论内容\t昵称\t评分\t图书名称");
		for (int i = 0; i < commentList.size(); i++) {
			Comment comment = commentList.get(i);
			//根据图书编号获取图书对应的对象
			Book book = bookDao.findBookByCode(comment.getBookCode());
			System.out.println(comment.getCommCode() + "\t" + comment.getContent() + "\t" + 
			comment.getNickname() + "\t"+ comment.getScore() + "\t" + book.getBookName());
		}
	}
测试:能否查看当前登录用户的评论内容

6.完成普通用户登录后发表图书评论功能
(1 首先需要整体增加一个评论,2:当前登录用户增加一个评论 3:某一本图书增加一个评论 4:修改图书的评论的个数 5:修改当前用户的积分)

6.1.修改UserDao增加一个方法,修改用户信息的方法

6.2.修改BookDao增加一个方法,修改图书信息的方法

6.3.修改CommentDao增加一个方法,添加图书评论的方法

	public void addComment(Comment comment) {
		//整体评论增加
		DataUtil.commentList.add(comment);
		//为对应的用户添加评论列表
		//如果该用户之前已发表评论信息
		if(DataUtil.userCommentMap.containsKey(comment.getUserCode())){
			List<Comment> commentList = DataUtil.userCommentMap.get(comment.getUserCode());
			commentList.add(comment);
		}else{
			//用户第一次发表评论
			List<Comment> commentList = new ArrayList<Comment>();
			commentList.add(comment);
			//为该用户保存评论的列表
			DataUtil.userCommentMap.put(comment.getUserCode(), commentList);
		}
		//为对应的图书添加图书列表
		if(DataUtil.bookCommentMap.containsKey(comment.getUserCode())){
			List<Comment> commentList = DataUtil.bookCommentMap.get(comment.getBookCode());
			commentList.add(comment);
		}else{
			//用户第一次发表评论
			List<Comment> commentList = new ArrayList<Comment>();
			commentList.add(comment);
			//为该用户保存评论的列表
			DataUtil.bookCommentMap.put(comment.getBookCode(), commentList);
		}		
	}

6.4.修改BookMenu类
6.4.1.添加公共变量

6.4.2.增加方法,实现发表评论的功能

	public static void userAddComment(){
		Book book=null;
		//判断图书编号是否正确
		do{
			System.out.println("请输入图书编号:");
			String bcode =input.next();
			book = bookDao.findBookByCode(bcode);
			if(book==null){
				System.out.println("图书编号错误,重新输入");
			}
		}while(book==null);
		System.out.println("请输入评论内容");
		String commstr=input.next();
		System.out.println("请输入分");
		Integer commscore=input.nextInt();
		//创建评论的对象	,并添加评论
	 
		Comment comment = new Comment();
		comment.setBookCode(book.getBookCode()); //当前图书本书的 评论
		comment.setUserCode(loginUser.getUserCode());//当前登录者的评论
		comment.setCommentDate(new Date());
		comment.setContent(commstr);
		comment.setNickname(loginUser.getNickname());
		comment.setScore(commscore);
		comment.setCommCode(CodeUtil.getCode());
		commentDao.addComment(comment);
		//修改用户积分(发表一次评论积分增加1分)
		loginUser.setScore(loginUser.getScore()+1  );
		userDao.updateUser(loginUser);
		//修改图书的评论数(新发表了一个图书,)
		book.setCommCount( book.getCommCount() +1 );
		bookDao.update(book);
	}

测试用户是否可以能够发表评论

7.在退出系统的时候完成系统数据的序列化操作,在启动程序的时候完成数据的反序列化操作
(保证对象能够序列化,用具类实现读取对象和写入对象的功能,在启动和停止程序的时候完成对象的保存和读取)
7.1.修改Book,Comment,User实体类,都要实现Serializale接口

7.2.编写FileUtil工具类,添加保存和写入对象的方法

要自己在项目中创建data文件夹

7.3.在程序结束的时候,保存数据

7.4.在程序加载数据的时候,读取数据对象

7.5.测试功能是否完成
第一次登陆,发表一个评论,然后退出,然后再次启动程序,登录后查询是否存在上一次发表的评论信息

8.添加图书的同时,完成图书文件的上传(上传的文件要保证图书名称不能重复)
8.1.修改FileUtil类,添加上传图书的方法

要保证项目根目录下存在books文件夹

实现图书的上传,同时完成文件名称的修改

//上传图书,返回图书的名称
	public static String uploadBook(String bookpath) throws Exception{
		//获取上传文件的对象
		File file = new File(bookpath);
		if(!file.exists()){
			throw new Exception("上传的文件不存在");
		}
		//获取文件名称
		String bookname = file.getName();
		//只能上传记事本文件
		if(!"txt".equals(bookname.substring(bookname.lastIndexOf(".")+1))){
			throw new Exception("图书只能是记事本文件");
		}
		//获取新的文件名称
		String newbookname = getNewFileName(bookname);
		
		//实现文件上传的功能(可以使用工具类Files.copy, 也可以使用文件流)
 
		InputStream is = new FileInputStream(file);
		OutputStream os = new FileOutputStream(BOOK_PATH+"/"+newbookname );
		byte[] temp = new byte[1024];
		int size = 0;
		//边读边写
		do{
			size = is.read(temp);
			if(size!=-1){
				os.write(temp, 0, size);
			}
		}while(size!=-1);
		//关闭流
		os.flush();
		os.close();
		is.close();
		return newbookname;
	}
	public static String getNewFileName(String filename){
		//abc.txt   --> abc_20190807105712.txt
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
		String[] names= filename.split("\\.");
		Date date = new Date();  //创建一个当前日期对象
		return names[0]+"_"+sdf.format(date)+"."+names[1];
	}

8.2.在管理员添加图书的时候,调用上传的功能
修改BookMenu类的addBook的方法 ,修改后需要在方法中声明异常

8.3.测试功能是否完成(添加图书后,项目中是否存在图书文件)

9.实现在线阅读图书的功能
9.1.在FileUtil工具类中添加方法,根据图书路径读取图书内容

	//根据图书名称读取图书内容
	public static String getFileInfo(String filename) throws Exception{
		File file = new File(BOOK_PATH+"/"+filename);
		if(!file.exists()){
			return "此图书暂无内容";
		}
		//使用StringBuilder实现字符串的累加
		StringBuilder sbstr=new StringBuilder();
		//读取文件的内容
		InputStream is = new FileInputStream(file);
		byte[] temp = new byte[1024];
		int size = 0;
		do{
			size =is.read(temp);
			if(size!=-1){
				sbstr.append(new String(temp,0,size));
			}
		}while(size!=-1);
		is.close();
		
		return sbstr.toString();
	}

9.2.在BookMenu类中添加方法,实现读取图书内容的功能

然后测试,测试是否能够实现在线阅读图书的功能

10.自己完成的一些功能
10.1.自己完成注册功能(要求只能注册普通用户,登录名和密码不能和已有用户重复)
10.2.普通用户可以实现查询图书评论的功能

11.下载(一本图书图书如果是VIP 用户减少 10积分 ,如果非VIP则可以免费下载)
12.管理员可以删除图书(删除图书,删除图书对应文件,删除图书对应的评论内容)

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
图书管理系统使用说明书 配置源程序 附加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)单击“退出系统”按钮,退出当前操作系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值