1、 个人记账管理系统数据库的设计与实现描述:设计一个个人记帐系统。实现下列功能:1家庭人员信息维护2支出和收入项目维护;1家庭人员的支出明细;2家庭人员的收入明细;二、数据库设计内容 3 (一)需求分析.3 (二)数据库概念设计.3 (三)数据库逻辑设计5 (四)数据库与数据表设计 物理结构设计5 1.数据库与数据表设计.5 2.数据完整性设计.6 (一)建数据库家庭管理库.7 (二)建表家庭信息表、支出表、收入表.7 (三)视图.9(四)存储过程.9(五)触发器 10(六)运行和维护12 1. 关系图的建立.12 2. 简单查询.123. 复杂查询.154.数据库的用户与权限管理17四、实验心
2、得 22个人记账数据库管理系统一、需求分析家庭成员(jiating):包括姓名(jtname)、性别(jtsex)、年龄(jtage)、家庭成员关系(jtrelation)、地位(jitstatus) 身份证号码(jtID)、爱好(jthobby)、银行账号(banknum)收入(income):包括姓名(inname)、银行账号(banknum)工资(insal)、岗位津贴(ingang)、偶然获得(inchance)、其他收入(inother)、月份(inmonth)支出(cost):包括银行账号(banknum)、电话费(ctel)、服装费(ccloth)、食物费(cfood)、书费(c
3、book)、医疗费(chospital)、月份(cmonth)各对象之间的联系如下:每个成员有多项收入,每个成员有多项支出。二概念结构设计个人记账管理系统的E-R图如图所示: 三、逻辑数据库结构由实体jiating、income、cost 转换的关系模式如下:jiating(jtname,jtsex,jtage,jtrelation,jtstatus,jtID,jthobby,Banknum)income(jtname,insal,inother,ingang,inchance,inmonth)cost(banknum,ctel,ccloth,cfood,cbook,chospital,cmo
4、nth)四、通过查询分析器实现各个二维表-先建立数据库(zhaozq)create database zhaozqdrop database zhaozq1.建立家庭成员表 use zhaozqcreate table jiating -家庭表(jtname char(10) not null primary key, -姓名,主键,起唯一标识作用 jtsex char(2), -性别 jtage int, -年龄 jtrelation char(10), -关系 jtstatus char(20), -职业 jtID int , -身份证号 jthobby char(20), -兴趣爱好 b
5、anknum int) -银行账号插入数据insert into jiating values ( 赵小山,男,50,父亲司机,360121,踢足球,0013)insert into jiating values(李晓玲女,45,母亲职工,360122,购物,0014)insert into jiating values (赵小刚,20,哥哥教师,360124,唱歌,0016)赵小强,26,我学生,360125,看书,0017)-查看成员表select *from jiating-删除成员表drop table jiating2.建立收入表create table income -收入表(in
6、name char(10) , -收入人姓名 insal int , -工资 infuli int , -福利收入 inchance int, -偶然获得 inother int, -其它收入 inmonth int) -月份insert into income values (,5000,1200,200,500, 1),2500,3500,400,300,3)insert into income values(,2400,4000,400,300,4),3000,3300, 400,399,6),3000,3500,300,500,8),3000,1000,100,300,2),2399,
7、1200,1399,340,3),2345,1234,1459,330,5),2344,1245,1456,329,7),2300,1200,1300,320,9),1200,1300,120,330,12),1280,1900,170,270,6),1200,1300,130,220,12),1200,1400,130,280,11),600,50,100,300,8)-查看收入表from income -删除成员表drop table income3.建立支出表use zhaozqcreate table cost(banknum int , ctel int, -电话费 ccloth i
8、nt, -衣服费 cfood int, -食物费 cbook int, -书费 chospital int ,-医疗费cmonth int) -月份insert into cost values (13,30,400,600,450,1000, 1)insert into cost values (13,32,400,400,430,1900,2)insert into cost values (13,33,300,200,440,1300,5)insert into cost values (13,55,500,230,480,1700,8)insert into cost values (
9、13,57,800,339,770,1000,10)insert into cost values (14,58,800,340,660,2000,2)insert into cost values (14,39,600,440,850,3000,3)insert into cost values (14,60,300,400,880,1000,4)insert into cost values (15,44,400,300,480,1200,5)insert into cost values (15,20,430,500,600,1500,6)insert into cost values
10、(15,30,220,300,400,1200,7)insert into cost values (15,35,625,300,700,2400,10)insert into cost values (16,77,700,533,800,1000,11)insert into cost values (16,30,400,330,500,1000,12)insert into cost values (16,39,300,400,440,1200,9)-查看支出表from costdrop table cost五.根据表进行相关的查询和更新(插入、修改、删除)-1.在jiating表中建立一
11、个check约束 -用来检查字段值所允许的范围alter table jiatingadd constraint jt_age check(jtage between 10 and 60)-2.在jiating表中增加一个字段alter table jiating add jtaaa char(10)-3.将jiating表中姓名为“赵小刚”的职位改为“经理”update jiating set jtstatus=经理where jtname=-查看修改后的家庭表-4.在income表中查询姓名为“赵小山”的一年内其中几个月的收入select insal ,inmonthfrom income
12、 where inname=-5.在jiating和income表中查询爱好、工资、偶然获得和月份select jthobby,insal,inchance,inmonthfrom jiating ,income where jiating.jtname=income.inname -6.在cost表中查询医疗费的总支出select sum(chospital) as total from cost-7.算出cost表中电话费和衣服费的总支出select sum(ctel+ccloth) as total-9.在cost表中查询银行账号为0013的电话费和衣服费的总支出select ctel+
13、ccloth from costwhere banknum=13-10.在cost表中查出2月份的食物费的总支出select sum(cfood) as total,cmonthgroup by cmonthhaving (cmonth =2)-11.从cost表中算出所有的支出select sum(ctel+ccloth+cfood+cbook+chospital) as alltotal-12.从income表中算出所有的收入select sum(insal+infuli+inchance+inother) as 收入总数-13利用income和cost表算出实际收入,用总收入减去总支出s
14、elect (sum(insal+infuli+inchance+inother)-sum(ctel+ccloth+cfood+cbook+chospital) as 实际收入from cost,income-14.从jiating和cost 表中找出姓名为“赵小山”的在2月份的总支出select sum(ctel+ccloth+cfood+cbook+chospital) as totalfrom cost,jiating and cmonth=2-15.在cost表中建立有返回参数的存储过程create procedure costq(banknum int , ctel int , cc
15、loth int , cfood int , cbook int, chospital int, cmonth int )as insert into cost values( banknum,ctel,ccloth,cfood,cbook,chospital,cmonth) -执行存储过程exec costq banknum=16,ctel=40,ccloth=45, cfood=360,cbook=80,chospital=400,cmonth=6-删除存储过程drop procedure costq-16.在jiating和income中建立一个有查询功能的视图create view m
16、_ias select jiating.jtname,jtsex,jtage,insalfrom jiating ,income-查看视图from m_i-17.在jiating中建立一个有查询功能的视图create view m_nas select jtsex,jtage,jthobby-18.在cost表中建立一个有查询功能的视图create view m_s as select ctel,ccloth,cbook-19.利用视图m_s和m_n查询年龄为20的电话费、衣服费和性别select ctel,ccloth,jtsexfrom m_n,m_swhere jtage=20-20.创
17、建用户登录和访问权限exec sp_addlogin user2123zhaozqexec sp_adduser db_owneruser1456-21.将jiating的查询功能授予所有用户grant select on jiating to public-22.将查询和更新功能授予用户user2,并将此功能授予其他用户grant select,update(jtname)on jiatingto user2with grant option七、实验总结和心得:通过这次课程设计的实际调查与操作,我了解了目前记账管理的现状,学习并掌握了记账管理系统的设计思路,以及相应SQL语言的编写,同时,可以熟练运用流程控制语句来完成一些较为复杂的设计,存储过程和触发器也基本掌握,视图和索引的功能也有了相当程度的了解。同时也由于个人知识不全面,所做程序功能不是很齐全。对于用户管理权限的限制做的不够完善,还有对于数据库的安全不能有效保证。 掌握了SQL Server 2000的功能与特点以及相应的SQL语言,让我们可以很好地运用触发器和存储过程等模块,去解决一些生活中的实际问题,而不光是纸上谈兵;同时,可以使我们对一个完整数据库系统的设计过程有了更深入的了解和体会。