陈腾数据库课程设计个人记账管理系统.docx
《陈腾数据库课程设计个人记账管理系统.docx》由会员分享,可在线阅读,更多相关《陈腾数据库课程设计个人记账管理系统.docx(14页珍藏版)》请在冰点文库上搜索。
陈腾数据库课程设计个人记账管理系统
课程设计报告
课程设计题目:
个人记账数据库管理系统
专业:
软件工程
班级:
1221805
*****
学号:
************
********
2014年1月09日
《关系数据库原理及应用》课程设计任务书
一、目的:
通过本次课程设计让学生能够综合运用所学的关系数据库原理知识解决并能设计一个实际问题,进一步掌握数据库原理的相关理论和数据库的设计实现过程,进一步提高学生的分析问题和解决问题的能力以及学生的动手能力。
二、课程设计要求:
1.对各个系统进行系统功能需求分析
2.数据库设计分析阶段,进行详细的数据库需求分析,进行概念数据库的设计,画出数据库的E-R图(局部和整体E-R图)
3.设计出详细的逻辑数据库结构,将各个实体和联系转化为相应的二维表即关系模式,指定各个关系的主关键字和外部关键字,并对各个关系的约束加以限定
4.通过企业管理器或是查询分析器实现各个二维关系(建议最好用SQL代码实现),要求建立相关的索引
5.根据系统功能需求设计相应的查询视图
6.要求根据系统功能需求建立存储过程
7.根据功能需求建立相应的触发器以保证数据的一致性
8.通过建立用户和权限分配实现数据库一定的安全性,考虑数据库的备份与恢复(此内容选作)
三、课程是设计题目:
个人记账管理系统数据库的设计与实现
描述:
设计一个个人记帐系统。
实现下列功能:
1.家庭人员信息维护
2.支出和收入项目维护;
1.家庭人员的支出明细;
2.家庭人员的收入明细;
二、数据库设计内容3
(一)需求分析………………………………………………………………………………….3
(二)数据库概念设计………………………………………………………………………..3
(三)数据库逻辑设计…………………………………………………………………………5
(四)数据库与数据表设计——物理结构设计……………………………………………5
1.数据库与数据表设计…………………………………………………………………...5
2.数据完整性设计………………………………………………………………………...6
(一)建数据库——家庭管理库……………………………………………………………….7
(二)建表——家庭信息表、支出表、收入表…………………………………..7
(三)视图……………………………………………………………………………………..9
(四)存储过程………………………………………………………………………………..9
(五)触发器…………………………………………………………………………………10
(六)运行和维护……………………………………………………………………………12
1.关系图的建立………………………………………………………………………...12
2.简单查询……………………………………………………………………………...12
3.复杂查询……………………………………………………………………………...15
4.数据库的用户与权限管理……………………………………………………………17
四、实验心得22
个人记账数据库管理系统
一、需求分析
·家庭成员(jiating):
包括姓名(jtname)、性别(jtsex)、年龄(jtage)、家庭成员关系(jtrelation)、地位(jitstatus)
身份证号码(jtID)、爱好(jthobby)、银行账号(banknum)
·收入(income):
包括姓名(inname)、银行账号(banknum)工资(insal)、岗位津贴(ingang)、偶然获得(inchance)、其他收入(inother)、
月份(inmonth)
·支出(cost):
包括银行账号(banknum)、电话费(ctel)、服装费(ccloth)、食物费(cfood)、书费(cbook)、医疗费(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,cmonth)
四、通过查询分析器实现各个二维表
--先建立数据库(zhaozq)
createdatabasezhaozq
dropdatabasezhaozq
1.建立家庭成员表
usezhaozq
createtablejiating--家庭表
(jtnamechar(10)notnullprimarykey,--姓名,主键,起唯一标识作用
jtsexchar
(2),--性别
jtageint,--年龄
jtrelationchar(10),--关系
jtstatuschar(20),--职业
jtIDint,--身份证号
jthobbychar(20),--兴趣爱好
banknumint)--银行账号
插入数据
insertintojiatingvalues('赵小山','男',50,'父亲','司机',360121,'踢足球',0013)
insertintojiatingvalues('李晓玲','女',45,'母亲','职工',360122,'购物',0014)
insertintojiatingvalues('赵小刚','男',20,'哥哥','教师',360124,'唱歌',0016)
insertintojiatingvalues('赵小强','男',26,'我','学生',360125,'看书',0017)
-查看成员表
select*
fromjiating
--删除成员表
droptablejiating
2.建立收入表
usezhaozq
createtableincome--收入表
(innamechar(10),--收入人姓名
insalint,--工资
infuliint,--福利收入
inchanceint,--偶然获得
inotherint,--其它收入
inmonthint)--月份
插入数据
insertintoincomevalues('赵小山',5000,1200,200,500,1)
insertintoincomevalues('赵小山',2500,3500,400,300,3)
insertintoincomevalues('赵小山',2400,4000,400,300,4)
insertintoincomevalues('赵小山',3000,3300,400,399,6)
insertintoincomevalues('赵小山',3000,3500,300,500,8)
insertintoincomevalues('李晓玲',3000,1000,100,300,2)
insertintoincomevalues('李晓玲',2399,1200,1399,340,3)
insertintoincomevalues('李晓玲',2345,1234,1459,330,5)
insertintoincomevalues('李晓玲',2344,1245,1456,329,7)
insertintoincomevalues('李晓玲',2300,1200,1300,320,9)
insertintoincomevalues('赵小刚',1200,1300,120,330,12)
insertintoincomevalues('赵小刚',1280,1900,170,270,6)
insertintoincomevalues('赵小刚',1200,1300,130,220,12)
insertintoincomevalues('赵小刚',1200,1400,130,280,11)
insertintoincomevalues('赵小刚',600,50,100,300,8)
--查看收入表
select*
fromincome
--删除成员表
droptableincome
3.建立支出表
usezhaozq
createtablecost
(banknumint,ctelint,--电话费cclothint,--衣服费
cfoodint,--食物费
cbookint,--书费
chospitalint,--医疗费
cmonthint)--月份
插入数据
insertintocostvalues(13,30,400,600,450,1000,1)
insertintocostvalues(13,32,400,400,430,1900,2)
insertintocostvalues(13,33,300,200,440,1300,5)
insertintocostvalues(13,55,500,230,480,1700,8)
insertintocostvalues(13,57,800,339,770,1000,10)
insertintocostvalues(14,58,800,340,660,2000,2)
insertintocostvalues(14,39,600,440,850,3000,3)
insertintocostvalues(14,60,300,400,880,1000,4)
insertintocostvalues(15,44,400,300,480,1200,5)
insertintocostvalues(15,20,430,500,600,1500,6)
insertintocostvalues(15,30,220,300,400,1200,7)
insertintocostvalues(15,35,625,300,700,2400,10)
insertintocostvalues(16,77,700,533,800,1000,11)
insertintocostvalues(16,30,400,330,500,1000,12)
insertintocostvalues(16,39,300,400,440,1200,9)
--查看支出表
select*
fromcost
--删除成员表
droptablecost
五.根据表进行相关的查询和更新(插入、修改、删除)
--1.在jiating表中建立一个check约束--用来检查字段值所允许的范围
altertablejiating
addconstraintjt_agecheck(jtagebetween10and60)
--2.在jiating表中增加一个字段
altertablejiating
addjtaaachar(10)
--3.将jiating表中姓名为“赵小刚”的职位改为“经理”
updatejiating
setjtstatus='经理'
wherejtname='赵小刚'
--查看修改后的家庭表
select*
fromjiating
--4.在income表中查询姓名为“赵小山”的一年内其中几个月的收入
selectinsal,inmonth
fromincome
whereinname='赵小山'
--5.在jiating和income表中查询爱好、工资、偶然获得和月份
selectjthobby,insal,inchance,inmonth
fromjiating,income
wherejiating.jtname=income.inname
--6.在cost表中查询医疗费的总支出
selectsum(chospital)astotalfromcost
--7.算出cost表中电话费和衣服费的总支出
selectsum(ctel+ccloth)astotal
fromcost
--9.在cost表中查询银行账号为0013的电话费和衣服费的总支出
selectctel+cclothfromcost
wherebanknum=13
--10.在cost表中查出2月份的食物费的总支出
selectsum(cfood)astotal,cmonth
fromcost
groupbycmonth
having(cmonth=2)
--11.从cost表中算出所有的支出
selectsum(ctel+ccloth+cfood+cbook+chospital)asalltotal
fromcost
--12.从income表中算出所有的收入
selectsum(insal+infuli+inchance+inother)as收入总数
fromincome
--13利用income和cost表算出实际收入,用总收入减去总支出
select(sum(insal+infuli+inchance+inother)-sum(ctel+ccloth+cfood+cbook+chospital))as实际收入
fromcost,income
--14.从jiating和cost表中找出姓名为“赵小山”的在2月份的总支出
selectsum(ctel+ccloth+cfood+cbook+chospital)astotal
fromcost,jiating
wherejtname='赵小山'andcmonth=2
--15.在cost表中建立有返回参数的存储过程
createprocedurecostq
(@banknumint,
@ctelint,
@cclothint,
@cfoodint,
@cbookint,
@chospitalint,
@cmonthint)
as
insertintocostvalues(@banknum,@ctel,@ccloth,@cfood,@cbook,@chospital,@cmonth)
--执行存储过程
execcostq@banknum=16,@ctel=40,@ccloth=45,@cfood=360,@cbook=80,@chospital=400,@cmonth=6
--删除存储过程
dropprocedurecostq
--16.在jiating和income中建立一个有查询功能的视图
createviewm_i
asselectjiating.jtname,jtsex,jtage,insal
fromjiating,income
wherejiating.jtname=income.inname
--查看视图
select*
fromm_i
--17.在jiating中建立一个有查询功能的视图
createviewm_n
asselectjtsex,jtage,jthobby
fromjiating
--18.在cost表中建立一个有查询功能的视图
createviewm_s
asselectctel,ccloth,cbook
fromcost
--19.利用视图m_s和m_n查询年龄为20的电话费、衣服费和性别
selectctel,ccloth,jtsex
fromm_n,m_s
wherejtage=20
--20.创建用户登录和访问权限
execsp_addlogin'user2','123','zhaozq'
execsp_adduser'user2','user2','db_owner'
execsp_addlogin'user1','456','zhaozq'
execsp_adduser'user1','user1','db_owner'
--21.将jiating的查询功能授予所有用户
grantselectonjiatingtopublic
--22.将查询和更新功能授予用户user2,并将此功能授予其他用户
grantselect,update(jtname)
onjiating
touser2
withgrantoption
七、实验总结和心得:
通过这次课程设计的实际调查与操作,我了解了目前记账管理的现状,学习并掌握了记账管理系统的设计思路,以及相应SQL语言的编写,同时,可以熟练运用流程控制语句来完成一些较为复杂的设计,存储过程和触发器也基本掌握,视图和索引的功能也有了相当程度的了解。
同时也由于个人知识不全面,所做程序功能不是很齐全。
对于用户管理权限的限制做的不够完善,还有对于数据库的安全不能有效保证。
掌握了SQLServer2000的功能与特点以及相应的SQL语言,让我们可以很好地运用触发器和存储过程等模块,去解决一些生活中的实际问题,而不光是纸上谈兵;同时,可以使我们对一个完整数据库系统的设计过程有了更深入的了解和体会。