数据库课程设计 C++实现实验设备管理系统 课程设计论文+源程序+数据库+使用说明
Posted CSDN专家-小兔子编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库课程设计 C++实现实验设备管理系统 课程设计论文+源程序+数据库+使用说明相关的知识,希望对你有一定的参考价值。
一、C++实现实验设备管理系统 课程设计
包含完整的论文(字数4400+)+源程序+数据库+使用说明,可作为数据库、软件开发等相关课程的课程设计或者大作业。
二、目录
1 背景及意义
1.1目的与要求
1.2 开发环境
2 需求分析
2.1信息要求
2.2 处理要求
2.3 安全性和完整性要求
2.4 数据流图
2.5 数据字典
3 概念结构设计
3.1 E-R图
4 逻辑结构设计
4.1 关系模式
5 物理结构设计
5.1 运行环境
5.2 创建索引
6 数据库实施和维护
6.1 数据库设计概况
6.2 系统运行情况及用户界面
7 课程设计的过程、存在的问题、体会及建议
8 参考文献
—————————————————————————————————
此处省略几千字
—————————————————————————————————
三、需求分析
1、信息需求
设备在系统中录入后,会自动保存,后台数据库会自动更新设备编号、名称、价格等数据。系统将为管理员提供这段时间内的设备使用情况、设备报废情况、设备租借情况。
使用人员登录,系统需要使用人员提供设备号以及设备名,以便使用者查询设备信息。使用者可根据该系统查询设备使用年限,价格,并对设备状况进行查询。
管理员可设置设备名称、总数量、剩余数量的信息,在设备入库确定后,系统内设备数量会自动加一,若有设备移出管理区域,数量减一。使用者可在系统内或者图书馆的电子显示屏中得知库内设备情况。
(1)一名使用者可以租借多个设备
(2)一个设备对应一个设备号
(3)一个设备在同一时间内只能被一人租借
(4)一台设备可以被多个厂家生产,一个厂家可以生产多种设备
一个设备可以被多个管理者管理,一个管理者可以管理多个设备
2、处理要求
(1) 设备管理
设备入库,由管理者自动输入实验设备信息:设备编号,设备名、使用年限、设备价格,并若在设备最新信息里面有该设备信息,则最新设备表内的最新id将会更新。
(2)搜索可用设备
管理员和使用者可在主页面上输入查询设备的设备号、设备名,系统将根据设备信息表以及故障报废表反馈最新设备状况信息。
(3)维修报废登记
管理员在该页面进行设备的报废登记,在填入设备编号,设备名、故障原因、报废状况、报废处理信息后,点击修改,设备信息自动录入后台数据库。
(4)租借设备
使用者在租借设备时要输入使用者编号、姓名、学院、电话以及使用设备,后台设备库会根据设备信息表以及故障报废表的联系向使用者展现可用设备信息。
3、安全性和完整性要求
安全性要求
系统应对用户进行检测是否为合法账户。对不同的用户设置不同的权限,来访问数据库的数据,已达到对数据库的安全性要求。如本次系统对数据库的访问需求,对权限级进行了划分,分为管理员和使用人员。管理员除了不能更改用户名,拥有对所有信息增删改查的权限。用户可以查看并修改部分用户信息以及与用户相对应的设备信息等。但用户无法对数据库的某些数据进行增删改,只能查看用户信息,以及自己所选设备的最新设备状况信息。
防止恶意攻击和病毒直接使用现有的成熟产品,本系统不涉及。
角色权限分类:
(1)管理员的业务操作
a)管理员拥有对所有用户、管理员赋予权限的操作。
b)能够对设备记录进行修改、查询、删除等操作。
c)能够查看设备库情况、租借情况信息。
(2)用户权限
a)可以查看设备库当前情况(空闲设备信息),也可以对已选设备信息进行修改、新增、删除等操作。
b)可以向管理员申请权限升级。
B、完整性要求
用户信息:我们对用户的一些基本信息进行了完整性的要求。用户的用户名为唯一标识,不允许用户名为空,也不允许用户名的值相同。
设备信息:我们对设备的一些基本信息进行了完整性的要求。设备的编号是唯一标识,不能允许其为空值,也不允许编号相同。即参照完整性。
4、数据流图
顶层图
四、概念设计
数据库的设计是指对一个给定的应用环境,构造数据库模式,建立数据库及其应用系统,满足各种用户需求。作为信息资源开发、管理和服务的一种有效的手段,数据库技术的应用已越来越广泛,从小型的单项事务处理系统到大型的信息系统大都用先进的数据库技术来保持系统数据的安全性、完整性和共享性。对一个实际的系统来说,数据库表的设计在遵循数据库理论的同时,必须能用开发工具来实现用户在各方面提出的功能要求。
1、全局ER图
在系统的数据库设计中,先要对系统分析得到的数据字典中的数据存储进行分析,分析各数据存储之间的关系,然后才能得出系统的关系模式。可以采用E-R图的方法来进行数据结构分析,E-R设计方法是一种通过E-R图来描述现实世界信息结构的DB设计方法。E-R图由实体、属性、联系三部分组成。各分E-R图说明如下:
实体属性定义:
管理员(管理员账号,密码,姓名,编号)
用户信息(用户ID,用户姓名,职务,学院,电话,设备)
设备(设备ID,设备名,价格,厂家,使用年限)
2、局部E-R图(部分)
用户模块
设备模块
管理员模块
五、逻辑结构设计
逻辑结构是独立于任何一种数据模型的,在实际应用中,一般所用的数据库环境已经给定(如SQL Server或Oracle或mysql)。由于目前使用的数据库基本上都是关系数据库,因此首先需要将E-R图转换为关系模型。
1、关系模式
将上述的E-R图转化为选用DBMS产品支持的数据模型相符的逻辑结构:
设备信息:(设备编号,设备名称,生产厂家,使用年限,设备数量,设备价格,借出数量)
设备情况:(设备编号,设备名称,生产厂家,使用年限,设备价格,设备状况,故障原因,报废状况,报废处理)
使用者信息:(使用者编号,使用者姓名,使用者职务,使用者学院,使用者电话,使用者使用设备登计日期)
2、关系模式分析
在上述关系模式中,每一个分量都是不可分割的数据项所以都符合第一范式;而且所以关系模式都是单个属性作为码,没有任何非主属性对码部分函数依赖,不存在非主性对码的部分函数依赖,所以上都符合第二范式;而且上述各个关系模式中个关系模式中都不存在非主属性对码的传递函数依赖,都属于第三范式。
六、数据库设计(部分)
1、设备报废表
2、使用者表
3、设备信息表
4、新增设备
5、修改设备
6、查询设备
七、代码实现(部分)
1、添加设备代码
void workertianjiashuju(int num, char *name,int jiage, char *cj, char *nianxian)
SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt
ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄
ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);//设置环境属性
ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄
ret=SQLConnect(hdbc,(SQLCHAR*)"sy",SQL_NTS,(SQLCHAR*)"",SQL_NTS,(SQLCHAR*)"",SQL_NTS);//连接数据库
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄
SQLCHAR sql[]="EXEC [dbo].[shebei charu] ?,?,?,?,?;";
SQLINTEGER P = SQL_NTS;
ret=SQLPrepare(hstmt,sql,SQL_NTS);
ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&num,0,&P);//绑定参数
ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,name,10,&P);//绑定参数
ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&jiage,0,&P);//绑定参数
ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,cj,10,&P);//绑定参数
ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,nianxian,10,&P);//绑定参数
ret=SQLExecute(hstmt);//直接执行SQL语句
int i=0;
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
/*****************测试结构体数组********************/
printf("添加第%d条信息成功!\\n",i+1);
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放语句句柄
else printf("添加数据库操作失败!\\n");
SQLDisconnect(hdbc);//断开与数据库的连接
else printf("连接数据库失败!\\n");
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
2、查询设备代码
void sbchaxun(char *name)
SQLINTEGER num1,jiage1;
SQLCHAR name1[10],cj1[10],synx1[10],sbzk1[10];
SQLINTEGER len_num1,len_name1,len_jiage1,len_cj1,len_synx1,len_sbzk1;
SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt
ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄
ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);//设置环境属性
ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄
ret=SQLConnect(hdbc,(SQLCHAR*)"sy",SQL_NTS,(SQLCHAR*)"",SQL_NTS,(SQLCHAR*)"",SQL_NTS);//连接数据库
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄
SQLCHAR sql[]="EXEC [dbo].[jieyong chaxun] ?;";
SQLINTEGER P = SQL_NTS;
ret=SQLPrepare(hstmt,sql,SQL_NTS);
ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,name,10,&P);//绑定参数
ret=SQLExecute(hstmt);//直接执行SQL语句
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
int i=0;
while(SQLFetch(hstmt)!=SQL_NO_DATA)
//遍历结果集
/*****************************************数据库整型赋值*******************************/
SQLGetData(hstmt,1,SQL_C_ULONG,&num1,0,&len_num1);
/************************************************************************************/
SQLGetData(hstmt,2,SQL_C_ULONG,&jiage1,0,&len_jiage1);
SQLGetData(hstmt,3,SQL_C_CHAR,cj1,20,&len_cj1);
SQLGetData(hstmt,4,SQL_C_CHAR,synx1,20,&len_synx1);
SQLGetData(hstmt,5,SQL_C_CHAR,sbzk1,20,&len_sbzk1);
sb[i].num=num1;
sb[i].jiage=jiage1;
strcpy((char *)sb[i].name,(char *)name1);
strcpy((char *)sb[i].cj,(char *)cj1);
strcpy((char *)sb[i].synx,(char *)synx1);
strcpy((char *)sb[i].sbzk,(char *)sbzk1);
i++;
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
/*****************测试结构体数组********************/
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放语句句柄
else printf("添加数据库操作失败!\\n");
SQLDisconnect(hdbc);//断开与数据库的连接
else printf("连接数据库失败!\\n");
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
3、修改设备代码
void sbxiugaishuju(int num, char *name,char *jiage, char *cj, char *nianxian)
SQLRETURN ret;
SQLHENV henv;//SQLHANDLE henv
SQLHDBC hdbc;//SQLHANDLE hdbc
SQLHSTMT hstmt;//SQLHANDLE hstmt
ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄
ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);//设置环境属性
ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄
ret=SQLConnect(hdbc,(SQLCHAR*)"sy",SQL_NTS,(SQLCHAR*)"",SQL_NTS,(SQLCHAR*)"",SQL_NTS);//连接数据库
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//申请SQL语句句柄
SQLCHAR sql[]="EXEC [dbo].[xiugai] ?,?,?,?,?;";
SQLINTEGER P = SQL_NTS;
ret=SQLPrepare(hstmt,sql,SQL_NTS);
ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&num,0,&P);//绑定参数
ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,name,10,&P);//绑定参数
ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,jiage,10,&P);//绑定参数
ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,cj,10,&P);//绑定参数
ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,nianxian,10,&P);//绑定参数
ret=SQLExecute(hstmt);//直接执行SQL语句
int i=0;
if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)
/*****************测试结构体数组********************/
printf("添加第%d条信息成功!\\n",i+1);
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放语句句柄
else printf("添加数据库操作失败!\\n");
SQLDisconnect(hdbc);//断开与数据库的连接
else printf("连接数据库失败!\\n");
SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄
SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄
—————————————————————————————————
此处省略几千字
—————————————————————————————————
八、资源下载
对应完整的论文+源程序+数据库下载:https://download.csdn.net/download/frank2102/66720376
以上是关于数据库课程设计 C++实现实验设备管理系统 课程设计论文+源程序+数据库+使用说明的主要内容,如果未能解决你的问题,请参考以下文章
数据库课程设计SQLServer数据库课程设计(学生宿舍管理),课设报告+源码+数据库关系图