南邮 软件设计 数据库 实验详细过程及报告.docx
- 文档编号:13571746
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:47
- 大小:1.11MB
南邮 软件设计 数据库 实验详细过程及报告.docx
《南邮 软件设计 数据库 实验详细过程及报告.docx》由会员分享,可在线阅读,更多相关《南邮 软件设计 数据库 实验详细过程及报告.docx(47页珍藏版)》请在冰点文库上搜索。
南邮软件设计数据库实验详细过程及报告
2012/2013学年第二学期
软件设计实验报告
模块名称数据库软件设计
专业
学生班级
学生学号
学生姓名
指导教师
设计题目
1、了解SQLServermySqlaccess
2、编写高级语言访问数据库的程序
3、管理系统设计
任务要求
(填写内容字体为宋体小四)
1、要求:
所建的关系表能够查询某位同学的某门课的成绩,某个专业某门课的平均成绩。
2、要求:
写出高级语言访问数据库的操作步骤。
用高级语言实现简单的数据库表的插入,修改,删除和查询的操作界面。
3、要求:
从需求出发,分析.图书管理系统的数据库模型,画出E-R图,
建立相应关系表。
至少要有3张以上的关系表。
设计图书管理系统的基本功能要求:
后台对图书的增删改,对人员的增删改功能。
前台要有查看、借阅归还等功能。
并用高级语言实现。
图形界面。
美观大方。
实验设备及软件
(填写内容字体为宋体小四)
硬件:
兼容计算机一台
软件:
SQLServer、MySQL、Access数据库;VB、VC、Java、Delphi等高级语言
参考文献
(填写内容字体为宋体小四)
[1]于爱卿等.SQLServer教程.北京:
北京师范大学出版社, 2006
[2]李昆等.SQLServer2000课程设计案例精编.北京:
中国水利水电出版社,2005
[3]钟鸣等.Oracle实用教程从9i到10g.北京:
机械工业出版社.2005
[4]彭超马丁.Jsp网络编程入门与实践.北京:
清华大学出版社,2007
[5]孙佳,刘中兵,李伯华编著.JSP+Oracle动态网站开发案例精选.北京:
清华大学出版社, 2005
[6]李兆锋javaWeb项目开发案例精粹。
北京电子工业出版社
[7]汪孝宜Jsp数据库开发实例精粹。
北京电子工业出版社
报告内容
(正文为宋体小四)
实验一:
内容:
了解SQLserver和MySql的安装及使用;学会对企业管理器、查询分析器的使用;建立一个学生表、课程表及学生选课关联表,并用SQL语句进行相关插入、查询、删除等操作;
步骤:
1、打开企业管理器,建立一个名为10002434的数据库。
2.建立基本表:
学生、课程和选课,写出DDL语句。
学生表:
INSERTINTOStudentVALUES('10001','李勇','男','20','CS');
INSERTINTOStudentVALUES('10002','刘晨','女','19','IS');
INSERTINTOStudentVALUES('10003','王敏','女','18','MA');
INSERTINTOStudentVALUES('10004','张立','男','18','IS');
INSERTINTOStudentVALUES('10005','丁雨','女','19','MA');
课程表
INSERTINTOCourseVALUES('1','数据库','5','4');
INSERTINTOCourseVALUES('2','数学','NULL','2');
INSERTINTOCourseVALUES('3','信息系统','1','4');
INSERTINTOCourseVALUES('4','操作系统','6','3');
INSERTINTOCourseVALUES('5','数据结构','7','4');
INSERTINTOCourseVALUES('6','数据处理','NULL','2');
INSERTINTOCourseVALUES('7','PASCAL语言','6','4');
选课:
INSERTINTOSCVALUES('10001','1','92');
INSERTINTOSCVALUES('10001','2','85');
INSERTINTOSCVALUES('10002','3','88');
INSERTINTOSCVALUES('10003','2','90');
INSERTINTOSCVALUES('10003','5','75');
(3)写出向数据库中插入和修改数据的DML语句
deletefromscwheresno='10001'
insertintoscvalues('10005','4',79)
实验二:
内容:
通过odbc桥访问数据库。
通过各数据库的驱动程序访问数据库。
高级语言可以是Java,c++,basace等。
用高级语言实现简单的对数据库表的插入、修改、删除以及查询操作。
#include
#include
#include
#include
#include
#include
#include
SQLHENVhenv=SQL_NULL_HENV;
SQLHDBChdbc1=SQL_NULL_HDBC;
SQLHSTMThstmt1=SQL_NULL_HSTMT;
//用户名,密码
RETCODEretcode;
UCHARszDSN[SQL_MAX_DSN_LENGTH+1]="yu",
szUID[MAXNAME]="sa",
szAuthStr[MAXNAME]="";
intenvironment(){
//1.连接数据源
//1.环境句柄
retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3,
SQL_IS_INTEGER);
//2.连接句柄
retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1);
retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,0);
//判断连接是否成功
if((retcode!
=SQL_SUCCESS)&&(retcode!
=SQL_SUCCESS_WITH_INFO)){
printf("连接失败!
\n");
return
(1);
}else{
printf("操作成功!
\n");
}
return(0);
}
intinselect(char*a,char*b)
{
printf("%s,%s",a,b);
//SQL语句
//预编译SQL语句
UCHARpre_sql[29]="insertintotestvalues(?
?
)";
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
SQLINTEGERp=SQL_NTS;
//1预编译
SQLPrepare(hstmt1,pre_sql,29);//第三个参数与数组大小相同,而不是数据库列相同
//2绑定参数值
SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,a,0,&p);
SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,b,0,&p);
//3执行
SQLExecute(hstmt1);
printf("插入成功!
\n");
return(0);
}
intsearch(char*a)
{
UCHARsql2[35]="selectbfromtestwherea=?
";
UCHARsql3[19]="selectbfromtest";
//2.创建并执行一条或多条SQL语句
/*
1.分配一个语句句柄(statementhandle)
2.创建SQL语句
3.执行语句
4.销毁语句
*/
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
//绑定参数方式
SQLINTEGERp=SQL_NTS;
//1.预编译
SQLPrepare(hstmt1,sql2,35);//第三个参数与数组大小相同,而不是数据库列相同
//2.绑定参数值
SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,a,0,&p);
//3.执行
SQLExecute(hstmt1);
charlist[10];
SQLBindCol(hstmt1,1,SQL_C_CHAR,list,10,0);
retcode=SQLFetch(hstmt1);
if(retcode==SQL_NO_DATA)
{
printf("NOdata!
!
\n");
return0;
}
printf("%s\n",list);
//3.检查结果记录(如果有的话)
SQLExecDirect(hstmt1,sql3,19);
SQLBindCol(hstmt1,1,SQL_C_CHAR,list,10,0);
do{
retcode=SQLFetch(hstmt1);
if(retcode==SQL_NO_DATA){
break;
}
printf("%s\n",list);
}while
(1);
return(0);
}
intchange1(char*a,char*b)
{
printf("%s,%s",a,b);
//SQL语句
//预编译SQL语句
UCHARpre_sql[40]="updatetestsetb=?
wherea=?
";
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
SQLINTEGERp=SQL_NTS;
//1预编译
SQLPrepare(hstmt1,pre_sql,40);//第三个参数与数组大小相同,而不是数据库列相同
//2绑定参数值
SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,a,0,&p);
SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,b,0,&p);
//3执行
SQLExecute(hstmt1);
printf("修改成功!
\n");
return(0);
}
intinrealese()
{
SQLCloseCursor(hstmt1);
SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);//释放语句句柄
//3.断开数据源
/*
1.断开与数据源的连接.
2.释放连接句柄.
3.释放环境句柄(如果不再需要在这个环境中作更多连接)
*/
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV,henv);
return0;
}
intdelete1(char*a)
{
printf("%s",a);
//SQL语句
//预编译SQL语句
UCHARpre_sql[39]="deletefromtestwherea=?
";
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
SQLINTEGERp=SQL_NTS;
//1预编译
SQLPrepare(hstmt1,pre_sql,39);//第三个参数与数组大小相同,而不是数据库列相同
//2绑定参数值
SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,a,0,&p);
//3执行
SQLExecute(hstmt1);
printf("删除成功!
\n");
return(0);
}
intindicate()
{
UCHARsql1[30]="select*fromtest";
retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);
SQLINTEGERp=SQL_NTS;
SQLExecDirect(hstmt1,sql1,30);
charlist1[15],list2[15];
SQLBindCol(hstmt1,1,SQL_C_CHAR,list1,15,0);
SQLBindCol(hstmt1,2,SQL_C_CHAR,list2,15,0);
do{
retcode=SQLFetch(hstmt1);
if(retcode==SQL_NO_DATA){
break;
}
printf("%s%s\n",list1,list2);
}while
(1);
return0;
}
intmain()
{
inttech=environment();
if(tech>0)return0;
printf("数据修改:
1.显示整个数据库;2.插入数据;3.删除数据;4.查找数据;5.修改数据;6.结束\n");
printf("请输入代号:
");
intc;
scanf("%d",&c);
getchar();
chara[200],b[200];
while(c!
=6)
{switch(c)
{
case1:
printf("显示整个数据信息:
\n");indicate();break;
case2:
printf("请分别输入列a,列b:
");gets(a);gets(b);inselect(a,b);break;
case3:
printf("请输入删除的列a:
");gets(a);delete1(a);break;
case4:
printf("请输入查找的列a:
");gets(a);search(a);break;
case5:
printf("请输入修改的列a,列b的值:
");gets(b);gets(a);change1(a,b);break;
}
printf("请输入代号:
");
scanf("%d",&c);
getchar();
}
inrealese();
return0;
}
实验三:
借书还书管理子系统的具体功能目标如下:
(1)借书操作:
用户借书后在借出图书信息表中添加用户信息及书籍信息等,并将图书信息表中的数量减1。
(2)续借操作:
当用户借阅图书后,如需延长借阅日期则可使用此功能续借图书。
(3)还书操作:
用户归还书籍后在借书表中删除借出信息,同时在图书信息表中将对应书籍的数量加1,便于他人借阅。
并在还书表中增加借书历史的信息。
(4)逾期罚金:
归还书籍时如果超过期限,规定超过一天罚0.1元钱。
(5)查询借书信息:
查询借书表中读者已借的图书信息。
数据库概念设计
系统功能结构图:
描述系统要实现的各个模块的功能
图1图书管理系统功能结构图
图2图书管理系统总体E-R图
图3图书信息表E-R图
图书(图书编号,图书名,价格,类别名,出版社,作者,数量,ISBN)
图4读者信息表E-R图
管理员(用户名,密码,权限)
2.3数据库逻辑设计
用户信息表(users):
表1用户表(users)
字段名
字段名称
数据类型
主键
是否为空
用户名
users
文本
Yes
否
权限
powers
文本
No
否
用户密码
passwd
文本
No
否
读者信息表(reader):
表2读者表(reader)
字段名
字段名称
数据类型
主键
是否为空
借书证号
reader_code
文本
Yes
否
姓名
name
文本
No
否
性别
sex
文本
No
是
学号
sno
文本
No
否
班级
dept
文本
No
是
密码
passwd
文本
No
否
到期日期
limite
日期/时间
No
是
图书信息表(book):
表3图书表(book)
字段名
字段类型
数据类型
主键
是否为空
图书编号
book_code
文本
Yes
否
书名
book_name
文本
No
否
作者
writer
文本
No
是
出版社
press
文本
No
是
定价
price
double
No
是
ISBN
isbn
文本
No
是
数量
num
int
No
是
类别名
type
文本
No
是
借书信息表(jsb):
表4借书表(jsb)
字段名
字段名称
类型
主键
是否为空
借书证号
reader_code
文本
Yes
否
还书日期
return_date
日期/时间
No
是
应还日期
Limite_date
日期/时间
No
否
图书编号
book_code
文本
Yes
否
罚款金额
punish
double
No
是
还书信息表(hsb):
表5还书表(hsb)
字段名
字段名称
数据类型
主键
是否为空
借书证号
reader_code
文本
Yes
否
图书编号
book_code
文本
Yes
否
借书日期
borrow_date
日期/时间
No
否
应还日期
return_date
日期/时间
No
否
3图书管理系统(借书还书管理子系统)详细设计
3.1登陆界面:
图6登陆界面图
功能:
提供用户登录,使用户能操作图书管理系统。
代码:
voidCLoginDlg:
:
OnLoginbr()//登录系统
{
CStringstr1,str2;
intsuc;
if(m_uet.IsOpen())
{//打开数据库
m_uet.Close();
}
else
{
m_uet.Open();
}
if(!
m_uet.CanUpdate())
{
AfxMessageBox(_T("无法登录"));
}
else
{
GetDlgItemText(IDC_EDIT1,str1);//获得编辑框中的内容
GetDlgItemText(IDC_EDIT2,str2);
m_uet.MoveFirst();
while(!
m_uet.IsEOF()){
m_uet.m_users.Replace("","");//去掉空格以便于比较
m_uet.m_passwd.Replace("","");
if(m_uet.m_users==str1&&m_uet.m_passwd==str2)//判断用户名和密码
{
suc=1;
break;
}
else
{
m_uet.MoveNext();
}
}
if(suc==1)
{
OnOK();//用户名和密码正确,登录系统
}
else
{
MessageBox("用户名或密码错误,请重新输入!
");
}
}
m_uet.Close();
}
voidCLoginDlg:
:
OnCancel()//退出系统
{
ExitProcess
(1);
}
3.2主菜单界面:
图7主菜单界面图
功能:
主菜单界面包含图书管理系统的所有功能,具体如下:
1)用户管理模块:
添加用户,删除用户,修改密码,查询用户信息。
2)读者管理模块:
添加读者,删除读者,修改读者信息,查询读者信息。
3)图书管理模块:
添加图书,删除图书,修改图书信息,查询图书信息。
4)借书和还书操作模块:
借书操作,还书操作,续借操作,查询借书信息。
借书还书子系统界面、功能及实现代码如下:
1、借书操作:
借书操作界面:
图8借书操作界面图
借书操作功能:
用户借书后在借出图书信息表中添加用户信息及书籍信息等,并将图书信息表中对应图书的数量减1。
借书操作代码:
voidCLibraryView:
:
OnBorrowsys()//响应借书操作模态对话框
{
CBorrowDlgbordlg;
bordlg.DoModal();
}
voidCBorrowDlg:
:
OnBorrow()//借书操作
{
CTimetime=CTime:
:
GetCurrentTime();//获得系统当前时间
intm=0,suc=0,success=0;//定义变量
CStringstr;
if(m_jet.IsOpen()){//打开数据库
m_jet.Close();
}
else{
m_jet.Open();
}
if(!
m_jet.CanUpdate()){
AfxMessageBox(_T("不能完成借书功能!
"));
}
else{
m_jet.MoveLast();//将记录移到最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南邮 软件设计 数据库 实验详细过程及报告 实验 详细 过程 报告