设计一个简单的通讯录,实现管理员对通讯录的管理,包括添加一条通讯记录,根据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;
--建表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.这种类型的小项目很适合练手,虽然简单,但还是很有必要做。只有真正去做才能发现问题,做的时候就不那么简单了。纸上得来终觉浅,绝知此事要躬行。
源码下载
无偿分享,猛击此处!