热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

个人小项目——飞聊通讯录V1.0小结

需求描述设计一个简单的通讯录,实现管理员对通讯录的管理,包括添加一条通讯记录,根据id修改对应的记录信息,根据id删除一条记录,根据id显示一条记录的详细信息。每个页面都要有命令提示
需求描述

         设计一个简单的通讯录,实现管理员对通讯录的管理,包括添加一条通讯记录,根据id修改对应的记录信息,根据id删除一条记录,根据id显示一条记录的详细信息。每个页面都要有命令提示信息。

 

具体要求

 

1.      系统启动的时候从数据库读取是否已经存在管理员,如果没有注册管理员则先要求注册一个新的管理员账户。如果管理员已经存在,则要求管理员输入账号和密码登录,登录成功后直接显示所有的通讯记录。

2.      注册管理员的时候以命令行的形式提示输入一个管理员账号和密码(管理员账号长度大于等于6,小于等于16,密码也在这个范围内,并且要求密码必须包含数字和字母,区分大小写),并输入一个确认密码,如果两次输入的密码不一致则将之前输入的秘密跟确认密码置空并提示重新输入。

3.      管理员注册成功后,直接显示通讯录所有记录。

4.      在通讯录显示的最下边显示提示信息:输入 del 表示删除一条记录,并根据输入的id删除相对应的记录。输入 add 表示增加一条通讯记录;输入 update 表示修改某条记录,并根据输入的名字修改对应的数据库记录。

5.      如果用户输入 del 并输入名字回车后,出现一条确认信息“你确认要删除**人的信息?(y或Y代表是,n或N代表不是)”,如果用户输入的是y或Y的话,则执行删除操作,如果是n或N的话,则返回显示所有通讯记录的状态,所有记录的最后一行显示操作提示列表 

6.      修改的时候步骤同5

7.      添加一条通讯记录的时候,要求添加用户的所有信息。添加完之后提示用户是否保存(也就是当用户输入完成某个字段的信息后提示一条操作语句)或是否保存?(y或Y代表是,n或N代表不是)

8.      要求显示通讯所有通讯记录的时候,只显示记录的id、名字、电话、QQ,当管理员输入query 命令的时候,提示管理员输入对应的记录的id,提交后显示相对应的记录详细信息

9.      在8步骤里显示相信信息后,提示管理员可以输入back命令,回退到显示所有记录的界面,并能执行相应的操作。

10.   数据字典:


 


11.   要求设计管理员和联系人这两个类,而这两个类要有一个共同的基类Person。凡是涉及到的跟管理员信息或通讯记录信息相关的操作都要通过这两个类的对象对外提供的方法来使用,new一个管理员或联系人的时候,用父类引用指向子类对象的形式(多态),要求Person类里有一个带参数的构造函数。

12.   数据库可以用Oracle,也可以用Mysql

 

环境

Oracle11g R2 + MyEclipse 6.5 + JDK 1.6.24 +SQL*Plus

 

使用技术

JDBC、Java基础知识、SQL。

 

相关源码

 

1.      使用到的SQL:

 

--建表SQL
create table contactor
(
id number(11) primary key,
name varchar2(20) not null,
admin_id number(4),
phone varchar2(11) default(null),
qq varchar2(10) default(null),
sex char(1) check(sex in('1', '0')),
created_datetime date,
updated_datetime date,
constraint wgb_contactor_adminId_FK foreign key(admin_id) references admin(id)
);

create table admin
(
id number(4) primary key,
name varchar2(20) not null,
password varchar2(20) not null,
created_datetime date not null
);

--自增序列
create sequence seq_wgb_contactor
increment by 1
start with 1
maxvalue 1.0e28
minvalue 1
nocycle
nocache
order;

create sequence seq_wgb_admin
increment by 1
start with 1
maxvalue 1.0e28
minvalue 1
nocycle
nocache
order;

--测试数据
insert into contactor values(seq_wgb_contactor.nextval, '温国兵', 8, '13000000000', '321236545', '1', sysdate, sysdate);
insert into contactor values(seq_wgb_contactor.nextval, '姜国彦', 8, '13999999999', '456781234', '1', sysdate, sysdate);
insert into contactor values(seq_wgb_contactor.nextval, '小霞', 8, '13078906567', '2222222212', '0', sysdate, sysdate);
insert into contactor values(seq_wgb_contactor.nextval, 'test', 8, '13089886745', '1232323232', '1', sysdate, sysdate);

insert into admin values(seq_wgb_admin.nextval, '温国兵', 'wgb', sysdate);
insert into admin values(seq_wgb_admin.nextval, 'Wentasy', 'wgb', sysdate);

--插入数据时自增字段触发器
create or replace trigger trigger_contactor_id_automatic
before insert on contactor
for each row
declare
begin
select seq_wgb_contactor.nextval into:new.id from dual;
end trigger_contactor_id_automatic;

create or replace trigger trigger_admin_id_automatic
before insert on admin
for each row
declare
begin
select seq_wgb_admin.nextval into:new.id from dual;
end trigger_admin_id_automatic;

 

运行效果截图

 


项目小结

1.      没报错,又无结果,考虑数据库里是否有数据。

2.      Oracle中对数据库的更新操作(增、删、改)需要commit才能生效。

3.      写程序严格要求自己,比如这次我让我这个小项目零错误、零警告,还有一些异常情况必须考虑,不要出现异常程序就Down了。

4.      通过这个程序对JDBC有了更深的理解和掌握。

5.      写程序要注意一些小技巧,多积累。

6.      要学会调试,比如经常遇到的空指针异常,通过调试就可以得到很好的解决。

7.      对正则表达式有了更好的理解。

8.      对SQL语句有了更好的掌握,对触发器、Oracle自增序列有了很好的了解。

9.      这种类型的小项目很适合练手,虽然简单,但还是很有必要做。只有真正去做才能发现问题,做的时候就不那么简单了。纸上得来终觉浅,绝知此事要躬行。

 

 

源码下载

无偿分享,猛击此处!





推荐阅读
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • MySQL插入数据的四种方式及安全性分析
    本文介绍了MySQL插入数据的四种方式:插入完整的行、插入行的一部分、插入多行和插入查询结果,并对其安全性进行了分析。在插入行时,应注意字段的定义和赋值,以提高安全性。同时指出了使用insert语句的不安全性,应尽量避免使用。建议在表中定义相关字段,并根据定义的字段赋予相应的值,以增加插入操作的安全性。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
author-avatar
mnuee
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有