一、需求分析
为某音像店开发一个迷你DVD管理器,实现DVD碟片的管理,包括如下功能:
新增DVD
查看DVD
删除DVD
借出DVD
归还DVD
二、整体开发思路
系统开发步骤
明确需求,设计对象保存DVD信息 设计技术框架 采用Java技术 编码顺序
1、数据初始化 2、菜单切换 3、完成各种DVD管理操作 测试
三、各个功能模块设计
1.初始化DVD信息
/**
* 初始化
*/
public void init(){
indexs[0]=1;
indexs[1]=2;
indexs[2]=3;
states[0]="已借出";
states[1]="可借";
states[2]="可借";
names[0]="罗马假日";
names[1]="风声鹤唳";
names[2]="浪漫满屋";
dates[0]="2010-7-1";
dates[1]="";
dates[2]="";
}
2.菜单页面设计
/**
* 主菜单
*/
public void menu() {
System.out.println("欢迎使用迷你DVD管理系统");
System.out.println("======================");
System.out.println("1.新增DVD");
System.out.println("2.查看DVD");
System.out.println("3.删除DVD");
System.out.println("4.借出DVD");
System.out.println("5.归还DVD");
System.out.println("6.退 出");
System.out.println("======================");
System.out.println("请选择:");
int index=input.nextInt();
switch (index){
case 1:
case01();
break;
case 2:
case02();
break;
case 3:
case03();
break;
case 4:
case04();
break;
case 5:
try {
case05();
} catch (ParseException e) {
e.printStackTrace();
}
break;
case 6:
System.out.println("感谢使用本系统!");
System.exit(1);
}
}
3.查看DVD信息
设计思想:采用for循环遍历整个系统,要是信息为空直接break跳出,不为空则按照下标元素递增的顺序输出。
/**
* 查看DVD
*/
public void case02(){
System.out.println("---------->查看DVD");
System.out.println("序号\t状态\t 名称\t 借出日期");
for (int i=0;i<names.length;i++ ){
if(names[i]==null){
break;
}
System.out.println(indexs[i]+"\t"+states[i]+"\t"+names[i]+"\t"+dates[i]);
}
System.out.println("=========");
getReturn();
}
4.添加DVD信息
设计思想:采用for循环遍历整个系统,找到第一个信息为空的数组,然后更新其状态、序号、名称和借出日期。
/**
* 新增DVD
*/
private void case01() {
System.out.println("------>添加DVD");
System.out.println("请输入DVD名称:");
String dvdname=input.next();
for (int i=0;i<names.length;i++){
if (names[i]==null){
indexs[i]=i+1;
names[i]=dvdname;
states[i]="可借";
dates[i]="";
System.out.println("新增《"+dvdname+"》成功");
break;
}
}
getReturn();
}
5.删除DVD信息
设计思想:分析:
1.根据用户所输入的dvd名称去数组中查找一遍
2.如果数组中存在要删除的dvd名称,就正常往下操作:
(1)如果dvd的当前状态是借出状态,是不能删除
(2)如果当前状态是可借状态,可以正常删除
3.如果不存在,应该给用户提示信息
4.如果已经删除了,应该将后面的每一个元素都得往前移位
private void case03() {
boolean flag=false;
System.out.println("-------------->删除DVD");
System.out.println("请选择要删除的DVD名称:");
String dvdname=input.next();
int index=-1;
int i=0;
for (;i<names.length;i++){
if (dvdname.equals(names[i])){
index=i;
flag=true;
break;
}
}
if (flag) {//表示找到了
if (states[i] == "已借出") {//已借出不可删除
System.out.println("《" + names[i] + "》为借出状态,不可删除");
}
if (states[i] == "可借") {
int j = index;//未被借出,可以删除
System.out.println("删除《" + names[index] + "》成功");
for (; j < names.length - 1; j++) {
names[j] = names[j + 1];
}
}
}else {//表示不存在要删除的DVD
System.out.println("您要删除的DVD不存在!");
}
getReturn();
}
6.借出DVD
设计思想:
1.根据用户所输入的dvd名称去数组中查找一遍
2.如果数组中存在要借出的dvd名称,就正常往下操作:
(1)如果dvd的当前状态是借出状态,则说明此DVD为借出状态,不可外借
(2)如果当前状态是可借状态,可以正常借出,借出时只需修改状态,更新借出日期即可
3.如果不存在,应该给用户提示信息
/**
* 借出DVD
*/
private void case04() {
boolean flag=false;
System.out.println("---------------->借出DVD");
System.out.println("请输入需要借出的DVD名称:");
String dvdname=input.next();
int i=0;
for (;i<names.length;i++){
if (dvdname.equals(names[i])){
flag=true;
break;
}
}
if (flag){//管理器中存在要借的DVD
if (states[i]=="已借出"){
System.out.println("《"+dvdname+"》"+"为借出状态,不可外借");
}else {//存在的情况下,并且为可借状态
System.out.println("请输入借出日期(年-月-日):");
String times=input.next();
states[i]="已借出";
dates[i]=times;
System.out.println("借出成功!");
}
}else {//管理器中没有要借的DVD
System.out.println("该管理器中没有《"+dvdname+"》这个DVD");
}
getReturn();
}
7.归还DVD
设计思想:
1.根据用户所输入的dvd名称去数组中查找一遍
2.如果数组中存在要归还的dvd名称,就正常往下操作:
(1)如果dvd的当前状态是可借状态,则说明此DVD不是这个店铺的
(2)如果当前状态是已借出状态,则可以正常归还,归还时只需修改状态,更新借出日期即可但是,
我们还要根据要求输出应付租金,但是我们输入的借出日期和归还日期都为字符串形式,无法直接
进行计算,所以,通过调用SimpleDateFormat方法把字符串转化成时间类型来进行计算,进而计
算出租金。
3.如果不存在,应该给用户提示信息
/**
* 归还DVD
*/
private void case05() throws ParseException {
boolean flag=false;
System.out.println("-------------->归还DVD");
System.out.println("请输入要归还的DVD名称:");
String dvdnames=input.next();
int i=0;
for (;i<names.length;i++){
if (dvdnames.equals(names[i])){
flag=true;
break;
}
}
if (flag){//找到了
if (states[i]=="可借"){//归还的DVD不是该店铺的
System.out.println("《"+dvdnames+"》"+"不是该店铺的");
}
if (states[i]=="已借出"){//states[i]=="已借出",所以可以归还
System.out.println("请输入归还日期:");
String date2=input.next();
String date1=dates[i];
states[i]="可借";
dates[i]="";
System.out.println("归还《"+dvdnames+"》成功");
//字符串类型 ----》转换成时间类型;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date parse1 =sdf.parse(date1);
Date parse2 = sdf.parse(date2);
long time1 = parse1.getTime();//毫秒数。距离1900.1.的毫秒数
long time2 = parse2.getTime();
long money= (time2-time1)/(1000*60*60*24);
System.out.println("借出日期为:"+date1);
System.out.println("归还日期为:"+date2);
System.out.println("需要支付"+money+"元");
}
}else {
System.out.println("未查到DVD《"+dvdnames+"》"+"的信息");
}
getReturn();
}
四、测试
1.菜单页面
2.查看页面
3.添加页面
4.删除页面
5.借出页面
6.归还页面
五、源代码
作为小白的我深刻知道在网上美名其曰“参考”别人代码的时候的懵逼状态,所以在此附上源码,拿来就能用
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class DVD1 {
/**
*写项目不要着急!
*
*/
int[] indexs=new int[50];
String[] states=new String[50];
String[] names=new String[50];
String[] dates=new String[50];
Scanner input=new Scanner(System.in);
/**
* 初始化
*/
public void init(){
indexs[0]=1;
indexs[1]=2;
indexs[2]=3;
states[0]="已借出";
states[1]="可借";
states[2]="可借";
names[0]="罗马假日";
names[1]="风声鹤唳";
names[2]="浪漫满屋";
dates[0]="2010-7-1";
dates[1]="";
dates[2]="";
}
public static void main(String[] args) {
DVD1 dvd=new DVD1();//静态调用非静态
dvd.init(); //1.加载初始化数据
dvd.menu(); //2.启动菜单
}
/**
* 主菜单
*/
public void menu() {
System.out.println("欢迎使用迷你DVD管理系统");
System.out.println("======================");
System.out.println("1.新增DVD");
System.out.println("2.查看DVD");
System.out.println("3.删除DVD");
System.out.println("4.借出DVD");
System.out.println("5.归还DVD");
System.out.println("6.退 出");
System.out.println("======================");
System.out.println("请选择:");
int index=input.nextInt();
switch (index){
case 1:
case01();
break;
case 2:
case02();
break;
case 3:
case03();
break;
case 4:
case04();
break;
case 5:
try {
case05();
} catch (ParseException e) {
e.printStackTrace();
}
break;
case 6:
System.out.println("感谢使用本系统!");
System.exit(1);
}
}
/**
* 归还DVD
*/
private void case05() throws ParseException {
boolean flag=false;
System.out.println("-------------->归还DVD");
System.out.println("请输入要归还的DVD名称:");
String dvdnames=input.next();
int i=0;
for (;i<names.length;i++){
if (dvdnames.equals(names[i])){
flag=true;
break;
}
}
if (flag){//找到了
if (states[i]=="可借"){//归还的DVD不是该店铺的
System.out.println("《"+dvdnames+"》"+"不是该店铺的");
}
if (states[i]=="已借出"){//states[i]=="已借出",所以可以归还
System.out.println("请输入归还日期:");
String date2=input.next();
String date1=dates[i];
states[i]="可借";
dates[i]="";
System.out.println("归还《"+dvdnames+"》成功");
//字符串类型 ----》转换成时间类型;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date parse1 =sdf.parse(date1);
Date parse2 = sdf.parse(date2);
long time1 = parse1.getTime();//毫秒数。距离1900.1.的毫秒数
long time2 = parse2.getTime();
long money= (time2-time1)/(1000*60*60*24);
System.out.println("借出日期为:"+date1);
System.out.println("归还日期为:"+date2);
System.out.println("需要支付"+money+"元");
}
}else {
System.out.println("未查到DVD《"+dvdnames+"》"+"的信息");
}
getReturn();
}
/**
* 借出DVD
*/
private void case04() {
boolean flag=false;
System.out.println("---------------->借出DVD");
System.out.println("请输入需要借出的DVD名称:");
String dvdname=input.next();
int i=0;
for (;i<names.length;i++){
if (dvdname.equals(names[i])){
flag=true;
break;
}
}
if (flag){//管理器中存在要借的DVD
if (states[i]=="已借出"){
System.out.println("《"+dvdname+"》"+"为借出状态,不可外借");
}else {//存在的情况下,并且为可借状态
System.out.println("请输入借出日期(年-月-日):");
String times=input.next();
states[i]="已借出";
dates[i]=times;
System.out.println("借出成功!");
}
}else {//管理器中没有要借的DVD
System.out.println("该管理器中没有《"+dvdname+"》这个DVD");
}
getReturn();
}
/**
* 删除DVD信息
* 分析:
* 1.根据用户所输入的dvd名称去数组中查找一遍
* 2.如果数组中存在要删除的dvd名称,就正常往下操作:
* (1)如果dvd的当前状态是借出状态,是不能删除
* (2)如果当前状态是可借状态,可以正常删除
* 3.如果不存在,应该给用户提示信息
* 4.如果已经删除了,应该将后面的每一个元素都得往前移位
*/
private void case03() {
boolean flag=false;
System.out.println("-------------->删除DVD");
System.out.println("请选择要删除的DVD名称:");
String dvdname=input.next();
int index=-1;
int i=0;
for (;i<names.length;i++){
if (dvdname.equals(names[i])){
index=i;
flag=true;
break;
}
}
if (flag) {//表示找到了
if (states[i] == "已借出") {//已借出不可删除
System.out.println("《" + names[i] + "》为借出状态,不可删除");
}
if (states[i] == "可借") {
int j = index;//未被借出,可以删除
System.out.println("删除《" + names[index] + "》成功");
for (; j < names.length - 1; j++) {
names[j] = names[j + 1];
}
}
}else {//表示不存在要删除的DVD
System.out.println("您要删除的DVD不存在!");
}
getReturn();
}
/**
* 新增DVD
*/
private void case01() {
System.out.println("------>添加DVD");
System.out.println("请输入DVD名称:");
String dvdname=input.next();
for (int i=0;i<names.length;i++){
if (names[i]==null){
indexs[i]=i+1;
names[i]=dvdname;
states[i]="可借";
dates[i]="";
System.out.println("新增《"+dvdname+"》成功");
break;
}
}
getReturn();
}
/**
* 查看DVD
*/
public void case02(){
System.out.println("---------->查看DVD");
System.out.println("序号\t状态\t 名称\t 借出日期");
for (int i=0;i<names.length;i++ ){
if(names[i]==null){
break;
}
System.out.println(indexs[i]+"\t"+states[i]+"\t"+names[i]+"\t"+dates[i]);
}
System.out.println("=========");
getReturn();
}
/**
* 返回主菜单
*/
public void getReturn(){
System.out.println("输入0返回");
int i=input.nextInt();
if(i==0){
menu();
}
}
}
六、总结
在经过老师的指导下,纯小白的我做的第一个小项目,刚开始学一周,在写代码的时候老是因为一个符合或者一个字母不对,而导致错误,经过这个项目之后,我深刻的认识到了思想的重要性,只要思想到位,平常最怕的敲代码在学会基础知识的情况下,反而也没有之前恐惧了。最后,希望错误的地方,欢迎各位大佬来批评指正!
七、最后
建了一个群:908722740 ,欢迎小伙伴门的加入,平时可以互相学习交流,不管是学习还是工作上的都可以多多交流