已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮 海 工 学 院 计算机科学系课程设计报告设计名称: 数据库原理及应用课程设计 姓 名: 李维清 学 号: 110411314 专业班级: 计算机科学与技术 043 系 (院): 计算机科学系 设计时间: 2007.1.22007.1.12 设计地点: 机房和教室 成绩:指导教师评语: 签名: 年 月 日28数据库原理及应用课程设计报告数据库原理及应用课程设计一、课程设计的目的数据库原理及应用课程设计是计算机科学与技术专业集中实践性环节之一,是学习完数据库原理及应用课程后进行的一次全面的综合练习。本课程设计主要在于加深学生对数据库基础理论和基本知识的理解,掌握数据库应用系统设计开发的基本方法,达到进一步使学生综合运用所学知识和增强实际动手能力的目的。二、课程设计的任务与要求要求学生根据自身对题目的理解情况,从给定的设计题目中选择一个,以MS SQL Server作为后台数据库平台,以PowerBuilder作为前台开发工具,完成一个小型数据库应用系统的系统的分析、设计和开发。三、课程设计说明书报刊订阅管理系统 1系统需求分析现在随着网络、计算机以及数据库的快速发展,报刊的订阅也不再是传统低效的纸笔记录了,已经转向网络。本系统就是面向一个企业的报刊订阅管理系统。此系统是一种比较智能化的管理系统,它面向所有企业部门的职工用户,但具有比较高的安全性能。它能够实现报刊订阅的基本功能,包括新报刊信息的录入、订阅、查询等操作以及后台数据库的备份和恢复。用户合法注册后必须输入有效密码才能成功进入此系统,可以进行订阅报刊,查询信息,统计信息等操作。对于非法操作,系统有识别和防护措施。1.1系统功能需求分析本系统主要面向的用户有系统管理员、读者。下面分角色对该系统的不同操作范围做说明。本系统主要有以下功能模块:l (1)登陆功能:登陆系统为身份验证登录。分为管理员登录和一般用户登录。分别通过不同的用户名和密码进入报刊订阅管理界面。l (2)录入新信息功能:对于管理员,包括新用户信息和新报刊信息的录入功能,信息一旦提交就存入到后台数据库中;普通用户自行注册进行录入个人信息。l (3)订阅功能:用户可以订阅报刊,系统自动计算所需金额,并显示在界面上;管理员不可订阅报刊,必须以用户身份订阅报刊。l (4)查询功能:用户可以查询并显示自己所订阅的信息;管理员可以按人员、报刊、部门分类查询。查询出的信息显示在界面上。l (5)统计功能:管理员可以按用户、部门、报刊统计报刊的销售情况,并对一些重要的订阅信息进行统计;普通用户可以统计出自己的订阅情况。l (6)系统维护功能:管理员可以对用户、报刊、部门、订阅等信息进行添加、删除、更改等维护工作;管理员还要经常备份数据库,以备出现故障后恢复。用户可以更改自己的注册信息,但用户名不能更改。2 系统总体设计2.1系统总体结构设计报刊订阅管理系统主要是由登录、录入、订阅、信息查询、统计、系统维护等主要模块构成。本系统的结构功能图:2.2系统数据模型设计2.2.1 E-R图本系统采用E-R图(实体-关系图)的方法进行数据库概念结构设计。系统E-R图如下所示:部门 1 报刊包含 n 订阅 n 用户 m 各实体E-R图:部门:部 门部门号部门名用户:订阅报刊种类数真实姓名用户名家庭地址联系电话用 户性 别部门号密码 管理员:管理员名字姓名报刊:报刊代号报刊名出版社半年订阅价全年订阅价类型报 刊出版周期关系表E-R图:报刊号用户名金额订 阅订阅年限份数2.2.2 关系模式部门(部门号,部门名)用户(用户名,密码,真实姓名,性别,部门号,联系电话,联系地址,订阅报刊种类数)管理员(管理员名,密码)报刊(报刊代号,报刊名,类型,出版报社,出版周期,半年订约价,全年订约价)订阅(用户名,报刊代号,订阅年限,订阅数量,所需金额)2.2.3 数据表(1).部门表(表department)Dnumber为部门号,Dname为部门名(2).用户表(表consumer)Uname是用户名,Urealname是真实姓名,Upassword是密码,Usex是性别,Dnumber是部门号(与部门表有关系),Uphone是联系电话,Uaddress是联系地址;subscribenum是订阅报刊种类数;(3).管理员表(表administrator)Aname是管理员名,Apassword是密码;(4).报刊表(表magazine)Mnumber是报刊代号,Mname是报刊名,Mkind是类型,Mpress出版报社,Mtime出版周期,Mhalfprice半年订阅价,Mwhole全年订阅价;(5).订阅表(表subscribe)Uname是用户名(与用户表主键有关系),Mnumber是报刊代号(与报刊表主键有关系),Syear是订阅年限,Snumber是订阅份数,Ssum是金额;3系统实施结合PowerBuilder进行数据库应用开发的特点,设计过程可按如下步骤进行:主要开发步骤:(1)打开PowerBuilder,新建一个工作区,取名为magazine;(2)新建一个Application,取名app,连接数据库,并将连接数据库代码复制到app中代码;代码:open(w_welcome)/ Profile magazineSQLCA.DBMS = MSS Microsoft SQL ServerSQLCA.Database = magazineSQLCA.ServerName = 3968391D9B384C0SQLCA.LogId = saSQLCA.AutoCommit = FalseSQLCA.DBParm = connect;if sqlca.sqlcode0 thenmessagebox(错误,数据库连接错误,请检查后重试!,stopsign!)returnend if close(w_welcome) open(w_login)(3)制作等待界面w_welcome;(4)制作登录界面w_login;确定按钮代码:string id,password,getpasswordid=trim(sle_1.text)getpassword=trim(sle_2.text)if id= or id= then MessageBox(系统提示,请输入用户名!) returnelseif getpassword= or getpassword= thenMessageBox(系统提示,请输入密码!) returnend ifif rb_1.checked=true thenselect Aname,Apassword into :gs_operator_id,:gs_passwordfrom administrator where Aname=:id;if sqlca.sqlcode0 then messagebox(系统提示,无此管理员!)sle_2.text= sle_1.text= sle_1.setfocus() returnend ifif getpasswordgs_password thenmessagebox(警告,口令错误!) sle_2.text= sle_2.setfocus() returnend ifopen(w_main) close(w_login)elseif rb_2.checked=true thenselect Uname,Upasswordinto :gs_operator_id,:gs_passwordfrom consumerwhere Uname=:id;if sqlca.sqlcode0 then messagebox(系统提示,无此用户!)sle_2.text=sle_1.text=sle_1.setfocus()returnelseif getpasswordgs_password thenmessagebox(警告,口令错误!)sle_2.text=sle_2.setfocus()returnend ifgs_operator_id=idopen(w_consumermain)close(w_login)elseif rb_1.checked=false and rb_2.checked=false thenmessagebox(系统提示,请选择用户类型!)returnend if(5)制作注册界面w_enroll;代码:注册按钮:string name,realname,password,copypassword,sex,number,phone,address,number1string nname=trim(sle_1.text)password=trim(sle_2.text)copypassword=trim(sle_8.text)realname=trim(sle_4.text)if rb_1.checked=true thensex=男elseif rb_2.checked=true thensex=女end ifnumber=trim(sle_5.text)phone=trim(sle_6.text)address=trim(sle_7.text)if name= or name= thenMessageBox(系统提示,对不起!请输入用户名!否则无法注册!)sle_1.setfocus()returnend ifselect Unameinto :nfrom consumerwhere Uname=:name;if sqlca.sqlcode=0 then MessageBox(系统提示,对不起,此用户名已被注册!请另选一个试试!)sle_1.text=returnend ifif password= or password= thenMessageBox(系统提示,对不起!请输入登录密码!否则无法注册!)sle_2.setfocus()returnend ifif copypassword= or copypassword= thenMessageBox(系统提示,对不起!请再次输入登录密码!否则无法注册!)sle_8.setfocus()returnend ifif passwordcopypassword thenMessageBox(系统提示,对不起!两次输入密码必须一致!否则无法注册!)sle_8.setfocus()returnend ifif realname= or realname= thenMessageBox(系统提示,对不起!请输入真实姓名!否则无法注册!)sle_4.setfocus()returnend ifif number= or number= thenMessageBox(系统提示,对不起!请输入部门号!否则无法注册!)sle_5.setfocus()returnend ifselect Dnumberinto :number1from departmentwhere Dnumber=:number;if sqlca.sqlcode0 then messagebox(警告,您输入的部门号无效!无此部门!)sle_5.text=sle_5.setfocus()returnend ifINSERT INTO consumer(Uname,Upassword,Urealname,Usex,Dnumber,Uphone,Uaddress) VALUES(:name,:password,:realname,:sex,:number,:phone,:address) ;MessageBox(系统提示,恭喜!注册成功!)取消按钮:close(w_enroll)(6)制作管理员主菜单mainmenu,制作管理员主界面w_main,将mainmenu放入w_main中;菜单:主界面:(7)制作管理员主菜单中录入菜单:制作录入数据窗口d_magazien, d_inputconsumer;制作管理员录入报刊界面w_inputmagazine,录入用户界面w_inputconsumer;将d_magazien,d_inputconsumer分别放入w_inputmagazine,d_inputconsumer中;录入报刊代码及界面:(录入用户代码及界面类似,不再列出)窗口代码:dw_1.settransobject(sqlca) dw_1.retrieve()数据窗框控制框代码:int b_select string num,nameif =b_2 thenb_select=messagebox(系统提示,确定删除所选列?,exclamation!,yesno!)if b_select=1 thendw_1.deleterow(0)end ifend ifif =b_3 thendw_1.update()if sqlca.sqlcode0 thenrollback;messagebox(操作非法!,无法保存!);returnelsecommit;messagebox(系统提示,信息保存成功!)returnend ifend ifif =b_4 then close(parent)end if数据窗口:界面:(9)制作管理员主菜单中查询菜单:分别制作制作查询数据窗口d_consumer_ruery, d_dept_query, d_magazine_query,分别制作管理员按用户查询界面w_consumer_ruery,按部门查询界面w_dept_query,按报刊查询界面w _magazine_query;将d_consumer_ruery, d_dept_query, d_magazine_query分别放入w_consumer_query,w_dept_query, w _magazine_query中;以下仅列出按报刊查询代码和界面(按用户、部门查询类似,不再列出);窗口代码:dw_1.settransobject(sqlca) sle_1.setfocus()检索按钮:string number,copynumber,namelong ll_rownumber=trim(sle_1.text)if number= or number= then messagebox(系统提示,请输入报刊号!) returnend ifselect Mnumber,Mname into :copynumber,:name from magazinewhere Mnumber=:number;if sqlca.sqlcode0 thenmessagebox(系统提示,无此报刊!) sle_1.text= returnend ifsle_2.text=namedw_1.setfilter(subscribe_mnumber=+number+)dw_1.filter()ll_row=dw_1.retrieve()if ll_row=0 then messagebox(系统提示,无记录!) returnend if按报刊查询数据窗口:按报刊查询界面:(10) 制作管理员主菜单中统计菜单:制作统计数据窗口d_consumer_stat, d_query_dept, d_stat_magazine;制作管理员按用户统计界面w_stat_consumer,按部门统计界面w_stat_department,按报刊统计界面w_stat_magazine;将d_consumer_stat, d_query_dept, d_stat_magazine分别放入w_stat_consumer, w_stat_department,w_stat_magazine中;以下仅列出按出按部门统计的代码和界面抓图(按用户、报刊统计类似,不再列出);代码:按部门统计代码:窗口代码:long ll_rowdw_1.settransobject(sqlca)dw_1.setfilter()dw_1.filter()ll_row=dw_1.retrieve()if ll_row=0 thenmessagebox(系统提示,无记录!)returnend if按部门统计数据窗口:按部门统计界面:(11)制作管理员主菜单中系统维护菜单中的信息维护菜单:制作信息维护数据窗口d_maintenance_consumer,d_maintenance_dept,d_maintenance_magazine,d_maintenance_subscribe;制作管理员用户信息维护界面w_maintenance_consumer, 部门信息维护界面w _maintenance_dept,报刊信息维护界面 w _maintenance_magazine,订阅信息维护界面w _maintenance_subscribe;将d_maintenance_consumer,d_maintenance_dept,d_maintenance_magazine,d_maintenance_subscribe分别放入w_maintenance_consumer,w _maintenance_dept,w _maintenance_magazine,w _maintenance_subscribe中;以下仅列出订阅信息维护代码和界面抓图(其他信息维护类似,不再列出)订阅信息维护代码:窗口代码:dw_1.settransobject(sqlca) dw_1.retrieve()数据窗口控制框代码:int b_selectif =b_3 thenb_select=messagebox(系统提示,确定删除所选列?,exclamation!,yesno!)if b_select=1 thendw_1.deleterow(0)end ifend ifif =b_4 then messagebox(系统提示,保存成功!) end ifif =b_5 then close(parent) end if数据窗口:界面:(12)制作管理员主菜单中更改登录菜单:代码:int b_select b_select=messagebox(系统提示,确认,exclamation!,yesno!)if b_select=1 then open(w_login) close(w_main) end if(13)制作用户主菜单m_consumer_menu;制作用户主界面w_consumermain,将m_consumer_menu放入其中;用户主菜单:用户主界面:(14)制作用户菜单中更改信息菜单:w_modify_consumer;代码:窗口代码:/定义变量,用于存储用户各字段 string name,realname,pass,sex,dept,phone,address/查询登陆者的相关信息select Uname,Upassword,Urealname,Usex,Dnumber,uphone,Uaddressinto :name,:pass,:realname,:sex,:dept,:phone,:addressfrom consumerwhere Uname=:gs_operator_id;/无信息if sqlca.sqlcode0 then messagebox(,) return end if/在界面上显示信息sle_1.text=namesle_2.text=passsle_3.text=realnamesle_4.text=deptsle_5.text=phonesle_6.text=addressif sex=男 thenrb_1.checked=trueelseif sex=女 thenrb_2.checked=trueend if确定按钮:string name,realname,pass,sex,dept,phone,addressint b_selectb_select=messagebox(系统提示,确认修改?,exclamation!,yesno!)if b_select=1 thenname=trim(sle_1.text)pass=trim(sle_2.text)realname=trim(sle_3.text)dept=trim(sle_4.text)phone=trim(sle_5.text)address=trim(sle_6.text)if rb_1.checked=true then sex=男elseif rb_2.checked=true then sex=女end ifif pass= or pass= thenMessageBox(系统提示,对不起!密码不能为空!) sle_2.setfocus() returnend ifif realname= or realname= thenMessageBox(系统提示,对不起!真实姓名不能为空!)sle_3.setfocus() returnend ifif sex= or sex= thenMessageBox(系统提示,对不起!性别不能为空!) returnend ifif dept= or dept= thenMessageBox(系统提示,对不起!部门号不能为空!) sle_2.setfocus() returnend ifupdate consumerset Upassword=:pass,Urealname=:realname,Usex=:sex,Dnumber=:dept,Uphone=:phone,Uaddress=:addresswhere Uname=:name;if sqlca.sqlcode0 thenmessagebox(系统提示,更改错误!)returnend ifmessagebox(系统提示,更改成功!);end if取消按钮:close(parent)界面:(15)制作用户菜单中订阅菜单:制作数据窗口d_show_magazine,制作订阅报刊界面:w_subscribe,将d_show_magazine加入其中;代码:窗口代码:sle_1.setfocus()dw_1.settransobject(sqlca)dw_1.retrieve()提交按钮代码:string name,password,magazinenum,num,ctime,number,moneydouble yearint numb,kindnumdouble halfprice,wholeprice,summoneystring num1,name1name=trim(sle_1.text)password=trim(sle_5.text)magazinenum=trim(sle_2.text)ctime=trim(sle_3.text)number=trim(sle_4.text)if name= or name= thenmessagebox(系统提示,对不起!请您输入用户名!)returnend ifif password= or password= thenmessagebox(系统提示,对不起!请您输入密码)returnend ifif magazinenum= or magazinenum= thenmessagebox(系统提示,对不起!请您输入报刊号!)returnend ifif ctime= or ctime= thenmessagebox(系统提示,对不起!请您输入订阅年限!)returnend ifif number= or number= thenmessagebox(系统提示,对不起!请您输入数量!)returnend ifif ctime=0 or ctime= or ctime=0.0 or ctime=0.00 thenmessagebox(系统提示,请输入有效数字!)sle_3.text=returnelseif ctime=0.5 thenyear=0.5elseif ctime=1 or ctime=1.0 thenyear=1.0elseif ctime=1.5 thenyear=1.5elseif ctime=2 or ctime=2.0 thenyear=2.0elseif ctime=2.5 thenyear=2.5elseif ctime=3 or ctime=3.0 thenyear=3.0elseif ctime=3.5 thenyear=3.5elseif ctime=4 or ctime=4.0 thenyear=4.0elseif ctime=4.5 thenyear=4.5elseif ctime=5 or ctime=5.0 thenyear=5.0else messagebox(系统提示,订阅年限输入不正确!请按照示例方式输入:1或1.0,并不要超过5.0!)end ifif number=0 then messagebox(系统提示,请输入有效数字!) sle_4.text=returnelseif number=1 thennumb=1elseif number=2 thennumb=2elseif number=3 then numb=3elseif number=4 thennumb=4elseif number=5 thennumb=5else messagebox(系统提示,输入不正确!请按照示例方式输入:1,并不要超过5!)returnend ifselect Uname,Upasswordinto :gs_operator_id,:gs_passwordfrom consumerwhere Uname=:name;if sqlca.sqlcode0 then messagebox(系统提示,无此用户!)sle_1.text=sle_5.text=sle_1.setfocus()returnend ifif passwordgs_password thenmessagebox(警告,口令错误!)sle_5.text=sle_5.setfocus()returnend ifselect Mnumberinto :numfrom magazinewhere Mnumber=:magazinenum;if sqlca.sqlcode0 then messagebox(系统提示,无此报刊!)sle_2.text=returnend ifselect Mhalfprice,Mwholeinto :halfprice,:wholepricefrom magazinewhere Mnumber=:magazinenum;if sqlca.sqlcode0 then messagebox(系统提示,该报刊未输入价格!)returnend ifif year=0.5 or year=1.5 or year=2.5 or year=3.5 or year=4.5 thensummoney=(-0.5+year)*wholeprice+halfpricesummoney=summoney*numbelseif year=1 or year=2 or year=3 or year=4 or year=5 then summoney=year*wholeprice summoney=summoney*numbend ifselect Uname,Mnumberinto :name1,:num1from subscribewhere Uname=:name and Mnumber=:magazinenum;if sqlca.sqlcode=0 then MessageBox(系统提示,对不起,您已经订阅过此报!)sle_1.text= sle_2.text= sle_3.text= sle_4.text=sle_5.text=returnend ifINSERT INTO subscribe(Uname,Mnumber,Syear,Snumber,Ssum) VALUES(:name,:magazinenum,:ctime,:number,:summoney) ;select Ssuminto :moneyfrom subscribewhere Uname=:name and Mnumber=:magazinenum ;MessageBox(系统提示,恭喜!订阅成功!所需金额为+money)/更新用户订阅报刊种类select count(Uname)into :kindnumfrom subscribewhere Uname=:name ;update consumerset subscribenum=:kindnumwhere Uname=:name ;清空按钮代码:sle_1.text= sle_2.text= sle_3.text= sle_4.text=sle_5.text=数据窗口图:订阅图:(16)制作用户菜单中查询菜单:制作用户查询界面:同管理员按用户查询界面;代码:窗口代码:dw_1.settransobject(sqlca) sle_1.setfocus()检索按钮代码同管理员界面检索按钮基本相同,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年三基三严考试题题库(附含答案)
- 2026年高考北京卷文综数学考试真题及答案
- 2026年湖南省怀化中小学教师招聘考试真题及答案
- 高中政治 (道德与法治)人教统编版选择性必修2 法律与生活第一单元 民事权利与义务第一课 在生活中学民法用民法积极维护人身权利教学设计
- 第8课 初识神奇的3D One教学设计小学信息技术青岛版六年级下册-青岛版
- 人教版新课标A选修4-1第一讲 相似三角形的判定及有关性质三 相似三角形的判定及性质教学设计及反思
- 人教版九年级道德与法治下册教学设计:1.2 复杂多变的关系
- 传动机构的装配教学设计中职专业课-钳工加工技术-机械制造技术-装备制造大类
- 2026年执业药师药学综合知识与技能《题库大全》3
- 人教版九年级历史下第三单元第六课 第二次时间大战的爆发教学设计
- 烟台奥威蒸发冷课件
- 军事训练情况登记表
- ISO9001-2026质量管理体系中英文版标准条款全文
- 挖红薯探索课件
- 宝鸡单招考试面试真题及答案
- 训犬基本知识培训课件
- 2025年西安科技大学专职辅导员招聘模拟试卷及答案详解(名校卷)
- 口腔门诊标准化接诊流程
- 感染性心内膜炎患者的护理查房
- 产业集群资金管理办法
- 2025年中国美甲器行业投资前景及策略咨询研究报告
评论
0/150
提交评论