数据库系统课程设计报告VC+SQLSERVER.docx
《数据库系统课程设计报告VC+SQLSERVER.docx》由会员分享,可在线阅读,更多相关《数据库系统课程设计报告VC+SQLSERVER.docx(30页珍藏版)》请在冰豆网上搜索。
![数据库系统课程设计报告VC+SQLSERVER.docx](https://file1.bdocx.com/fileroot1/2023-7/3/e2690f92-6350-4dd3-a452-f8132ffbd7cc/e2690f92-6350-4dd3-a452-f8132ffbd7cc1.gif)
数据库系统课程设计报告VC+SQLSERVER
计算机科学与技术学院课程设计成绩单
课程名称:
数据库系统原理指导教师:
蒋旻
姓名
王云飞
性别
男
学号
200813137102
班级
计科0804
综合成绩
成绩等级
程序运行情况
(占总成绩20%)
□能正确运行□基本能正确运行□能运行但结果不完善
(20分)(15分)(10分)
程序功能的完善程度
(占总成绩10%)
□完善□基本完善□不完善
(10分)(8分)(5分)
程序结构的合理性
(占总成绩10%)
□合理□基本合理□不太合理
(10分)(8分)(5分)
对问题的答辩情况
(占总成绩40%)
□概念正确有创新□能正确回答所有问题□基本能正确回答
(40分)(35分)(30分)
□部分问题回答概念不清晰
(20分)
学生的工作态度与独立工作能力
(占总成绩10%)
□工作态度认真能独立完成任务□工作态度认真但独立性较差
(10分)(8分)
□工作态度基本认真但缺乏独立性
(5分)
设计报告的规范性
(占总成绩10%)
□符合规范□基本符合规范□规范性较差
(10分)(8分)(5分)
优秀:
90分~100分良好:
80分~89分中等:
70~79分及格:
60~69分不及格0分~59分
武汉科技大学计算机科学与技术学院制表
计算机科学与技术学院
课程设计报告
课程名称:
数据库系统原理
专业:
计算机科学与技术
班级:
级班
学号:
200813137102
姓名:
王云飞
指导老师:
蒋旻
工厂零件进销存及工程管理系统
一、需求分析
背景分析:
根据工厂规模日益扩增,负责的工程项目也越多且越大,与零件供应商的的交易也越来越繁琐,行业竞争也日益激烈。
面对诸多问题,拥有一款优秀的工厂物资及工程的管理系统会大大提高工作的效率;从长期利益来看,一套好的管理系统还可以减少经费开支,增加工厂的利润;此外,还方便了工厂的人员了解和管理相关的业务,使工厂的管理水平跟得上工厂的快速发展,实现工厂管理的高效化。
功能需求:
1、用户在登录应用程序界面时,检查用户的合法性,并在用户连续3次登录失败后自动关闭程序。
2、只有管理员可以通过该程序对工厂相关的全部信息进行管理
3、系统管理员可以通过应用程序对用户信息进行统一管理,修改或删除用户的信息。
4、普通用户只可以修改自己的账号和密码,但是不能更改自己的用户类型。
5、普通客户和系统管理员可以通过应用程序查询与工厂零件相关的信息。
用户可以根据查询对象的不同属性查询到想要的信息,而且部分数据能够支持模糊查询
6、应用程序内部要可以通过SQL语句对数据库内的数据进行插入、修改和删除等操作。
7、当系统管理员对相关信息进行操作时,系统要自动检测输入的数据是否合理,并弹出相应的提示信息。
8、存储的各种物资的数量要随零件的供应量或使用量的变化而动态变化,出现不合理数据时通知操作员。
9、应用程序中要有该程序的相关简介和使用说明,帮助系统管理员和用户更好地使用该程序。
二、概念结构设计(E-R图)
三、逻辑结构设计
表Employees的结构
编号
字段名称
数据类型
说明
1
Employee_No
Varchar(5)
员工编号,主键
2
Employee_Name
Varchar(20)
姓名
3
Project_No
Varchar(5)
负责的工程项目编号
4
Title
Varchar(20)
头衔
5
Age
Decimal(3)
年龄
Employee_No(Employee_Name,Project_No,Title,Age),该关系模式满足BCNF
表Providers的结构
编号
字段名称
数据类型
说明
1
Provider_No
Varchar(5)
供应商编号,主键
2
Provider_Name
Varchar(20)
供应商名称
3
Provider_Phone
Varchar(20)
联系方式
4
Provider_Address
Varchar(40)
所在地址
5
Provider_Account
Varchar(20)
银行账号
Provider_No(Provider_Name,Provider_Phone,Provider_Address,Provider_Account)该关心模式满足BCNF
表Parts的结构
编号
字段名称
数据类型
说明
1
Part_No
Varchar(5)
零件编号,主键
2
Part_Name
Varchar(10)
零件名称
3
Color
Vachar(10)
零件颜色
4
Weight
Decimal(5,1)
重量
5
Price
Decimal(10,1)
零件价格
6
Number
Decimal(9)
零件数目
7
Description
Varchar(300)
相关描述
Part_No(Part_Name,Color,Weight,Price,Number,Description),该关系模式满足BCNF
表Projects的结构
编号
字段名称
数据类型
说明
1
Project_No
Varchar(5)
工程编号,主键
2
Project_Name
Varchar(20)
工程名称
3
Start_Time
Date
开工日期
4
Budget
Decimal(10,1)
预算资金
Project_No(Project_Name,Start_Time,Budget),该关系模式满足BCNF
表Deal的结构
编号
字段名称
数据类型
说明
1
Deal_No
Varchar(5)
供应编号,主键
2
Provider_No
Varchar(5)
供应商编号
3
Part_No
Varchar(5)
零件编号
4
Deal_Date
Date
供应日期
5
Deal_Number
Decimal(7)
供应数量
Deal_No(provider_No,Part_No,Deal_Date,Deal_Number),该关系模式满足BCNF
表Used的结构
编号
字段名称
数据类型
说明
1
Used_No
Varchar(5)
零件使用编号,主键
2
Project_No
Varchar(5)
使用零件的过程编号
3
Part_No
Varchar(5)
被使用的零件编号
4
Used_Date
Date
使用日期
5
Used_Number
Decimal(8)
使用的零件数量
Used_No(Project_No,Part_No,Used_Date,Used_Number),该关系模式满足BCNF
外键定义
关系名
主键表
主键字段
外键表
外键字段
FK_Deal_to_Providers
Providers
Provider_No
Deal
Provider_No
FK_Deal_to_Parts
Parts
Part_No
Deal
Part_No
FK_Used_to_Parts
Parts
Part_No
Used
Part_No
FK_Used_to_Projects
Projects
Project_No
Used
Project_No
FK_Employees_to_Projects
Projects
Project_No
Employees
Project_No
四、物理设计
创建Users(系统的用户)表
createTABLEUsers
(
User_Novarchar(10)notnull,
PassWordvarchar(10),
User_Typevarchar
(1),
ConstraintPK_UsersPrimaryKey(User_No)
);
创建Providers(零件供应商)表
CREATETABLEProviders
(
Provider_NoVarchar(5)notnull,
Provider_Namevarchar(20),
Provider_Phonevarchar(20),
Provider_Addressvarchar(40),
Provider_Accountvarchar(30),
ConstraintPK_ProvidersPrimaryKey(Provider_No)
);
Provider_No是常用于查询且更新较少的列,故建一个唯一索引
CREATEUNIQUEINDEXProvidersNOONProviders(Provider_No);
创建Projects(工程项目)表
CREATETABLEProjects
(
Project_Novarchar(5)notnull,
Project_Namevarchar(20),
Start_Timevarchar(20),
Budgetdecimal(10,1),
ConstraintPK_ProjectsPrimaryKey(Project_No)
);
Project_No是常用于查询且更新较少的列,故建一个唯一索引
CREATEUNIQUEINDEXProjectNOONProjects(Project_No);
创建Employees(工程负责人)表
CREATETABLEEmployees
(
Employee_Novarchar(5)notnull,
Employee_Namevarchar(20),
Agedecimal(3),
Titlevarchar(20),
Project_Novarchar(5),
ConstraintPK_Employees
PrimaryKey(Employee_No),
ConstraintFK_Employees_to_Projects
ForeignKey(Project_No)ReferencesProjects(Project_No)
);
Employee_No是常用于查询且更新较少的列,故建一个唯一索引
CREATEUNIQUEINDEXEmployeeNOONEmployees(Employee_No);
创建Parts(零件)表
CREATETABLEParts
(
Part_Novarchar(5)notnull,
Part_Namevarchar(30),
Colorvarchar(10),
Weightdecimal(5,1),
Pricedecimal(10,1),
Descriptionvarchar(300),
Numberdecimal(9),
ConstraintPK_PartsPrimaryKey(Part_No)
);
Part_No是常用于查询且更新较少的列,故建一个唯一索引
CREATEUNIQUEINDEXPartNOONParts(Part_No);
创建Deal(供应信息)表
CREATETABLEDeal
(
Deal_Novarchar(5)notnull,
Provider_Novarchar(5),
Part_Novarchar(5),
Deal_Datevarchar(20),
Deal_Numberdecimal(7),
ConstraintPK_ProviderPrimaryKey(Deal_No),
ConstraintFK_Provide_to_ProvidersForeignKey(Provider_No)ReferencesProviders(Provider_No),
ConstraintFK_Provide_to_PartsForeignKey(Part_No)ReferencesParts(Part_No)
);
创建Used(零件使用信息表)
CREATETABLEUsed
(
Used_Novarchar(5)notnull,
Project_Novarchar(5),
Part_Novarchar(5),
Used_Numberdecimal(8),
Used_Datevarchar(20),
ConstraintPK_UsedPrimaryKey(Used_No),
ConstraintFK_Used_to_ProjectsForeignKey(Project_No)ReferencesProjects(Project_No),
ConstraintFK_Used_to_PartsForeignKey(Part_No)ReferencesParts(Part_No)
);
五、数据库的实施和维护
本系统的运行环境为VisualC++6.0,
1程序执行后弹出系统的登录界面,如下图所示:
用数据库中存储的用户信息登录系统,如图所示
若用户输入的用户信息错误,会弹出警告,登录3次失败后系统自动退出
2登录成功后进入系统的主界面,入下图
点击菜单栏上的“数据操作”、“查询信息”、“系统用户管理”、“帮助”可进行相应的操作。
如下图所示。
如果使用本系统的是系统管理员,则该用户可以参与数据的相关操作,如插入、修改、和删除;如果只是普通用户,系统会设置权限,使得普通用户只有查看相关信息和修改自己的用户信息的权力,确保了数据库中信息的安全性。
3检索相关信息
如果要查询零件信息,则点击“查询信息”——“零件信息”,弹出零件信息列表,如下图
若要根据零件的某些特定属性查询信息,可在“零件查询条件”的组合框中选中相应的条件并输入相关的信息。
例如查询有高强度性质的零件,选中“描述”,输入“高强度”,点击“查询”按钮,如图:
出现相应的查询结果,如下图:
其余的查询操作与上述的操作类似,这里不再赘述。
4数据操作
如果想要修改零件供应的信息,点击“数据操作”——“零件供应情况”,弹出当前的零件供应信息,如下图所示:
如果要添加零件供应信息,点击“添加”按钮,弹出零件供应信息的编辑框,输入相应的数据;如果输入的供应商编号或者零件编号还未存进数据库,系统会弹出供应商或零件信息的编辑框,要求操作员先完善数据库中供应商或零件的信息;如果要删除某一行记录,选中相应的元组,点击“删除”(若表中的某些数据项被其他对象引用,系统会弹出警告,告知用户删除该项记录后,其他引用该数据项的记录也会被删除);若要修改每个元组的信息,则选中该元组后点击“修改”,弹出相应的编辑框,如下图:
(供应编号为00007的零件供应量减少了200)
修改成功后数据自动刷新,如下图
(供应编号00007的205号零件变成了2000)
然后来看看零件信息中的数据吧,如下图
(与上面的零件信息截图比较,发现205号零件数量减少
了200,说明零件信息随供应信息变化自动修改数据成功)
其余的数据操作也与上面说讲的类似,这里就不再多说了
5用户管理与信息的修改
点击“系统用户管理”——“用户管理”(只有管理员有此权限),弹出系统用户的信息列表,如下图
管理员可以查询到所有用户的信息,并能够修改用户的账户、密码和用户类型,添加新用户,删除用户信息
点击"修改",出现用户信息的编辑框,如下图:
(普通用户没有权限修改自己的用户类型,只能修改账号和密码)
6系统帮助
用户点击菜单栏上的"帮助",可以查询到系统的简介和使用说明
六、总结
系统优缺点的分析:
这个系统相对于某个工厂的信息管理系统来说,真的只能算是一辆卡车上的一颗螺丝。
系统可以完成的功能还远远不能满足实际生活中的需要,而且系统的操作界面很呆板,风格也比较单一。
不能导出图片、音频或视频文件。
不过我相信如果有更多的时间,我会把这个系统做得更好!
该系统使用比较简单,操作人员只需要有基本的计算机知识即可。
系统中对各种可能出现的错误操作(如重复输入具有唯一性的数据项、将零件的数目变成负数等)考虑得比较全面,在操作过程中系统会自动弹出相应的提示,比较人性化。
个人感想:
这是我第一次将编程语言和数据库结合起来使用,刚开始做一点把握都没有。
本次课程设计使我真正的学到了不少知识,由于之前对MFC的知识积累不够,尤其是在数据库与VC++连接上存在很大漏洞,使得本次课程设计遇到了许多困难。
但正是伴随着这些困难得一个个的被解决,我学到了许多知识,每次解决一个问题都会收获不少的知识,第一次感受到数据库与编程语言的结合实在是太完美了。
本次课程设计让我有机会能把之前学的数据库知识系统的串联起来。
尤其是对数据库的建立与操作都上了一个台阶,包括怎么建立更简洁且没有冗余又很完备的数据库系统,怎样对数据库结构模型的进行设计,更重要的是前期对概念模型也就是E-R图的规划。
深刻的体会到前期工作的重要性,只有正确详尽的对系统进行分析以后,才能更高效率的完成系统的开发。
做课程设计的过程中,没有老师辅导我,向老师发邮件求助也没有得到回应。
我就买了好几本书,自己慢慢看,然后试着自己做,在引用书中的部分方法的同时也融入自己的思考,灵活地应用多种方法,遇到难题就上网查看解决的方法,真的收获不少。
我相信只要是自己做了就一定会有收获的!
细节决定一个程序的好坏与成败!
七、附录
程序中用于操作数据库的接口ADOConn类代码
//初始化—连接数据库
voidADOConn:
:
OnInitADOConn()
{
:
:
CoInitialize(NULL);//初始化OLE/COM库环境
try
{
//m_pConnection为指向Connection对象的指针:
//创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串,必须是BSTR型或者_bstr_t类型
//该系统使用的是文件数据源
m_pConnection->Open("FILEDSN=D:
\\工厂物资管理\\工厂物资管理ODBC文件数据源.dsn;PageTimeout=5","uid=飞鱼","pwd=19900127",adModeUnknown);
}
//捕捉异常
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
}
//执行查询
_RecordsetPtr&ADOConn:
:
GetRecordSet(_bstr_tbstrSQL)
{
try
{
//连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
//捕捉异常
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
//返回记录集
returnm_pRecordset;
}
//执行SQL语句,Insert,Update,Delete
BOOLADOConn:
:
ExecuteSQL(_bstr_tbstrSQL)
{
try
{
//是否已经连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//Connection对象的Execute方法:
(_bstr_tCommandText,VARIANT*RecordsAffected,longOptions)
//其中CommandText是命令字串,通常是SQL命令。
//参数RecordsAffected是操作完成后所影响的行数,
//参数Options表示CommandText的类型:
adCmdText-文本命令;adCmdTable-表名adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
returntrue;
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
}
voidADOConn:
:
ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!
=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
:
:
CoUninitialize();
}
CDeal类面向Deal表,下面的函数用于向Deal表插入数据
voidCDeal:
:
sql_insert()
{
//声明一个ADOConn类,并连接数据库
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
//设置SQL语句,由CString向_bstr_t类型转换
CStringstr;
str.Format("INSERTINTODeal(Deal_No,Provider_No,Part_No,Deal_Date,Deal_Number)\VALUES('%s','%s','%s','%s',%f)",Deal_No,Provider_No,Part_No,Deal_Date,Deal_Number);
_bstr_tvSQL;
vSQL=_bstr_t(str);
m_AdoConn.ExecuteSQL(vSQL);//执行SQL语句
m_AdoConn.ExitConnect();//断开与数据库的连接
}
注:
用于其它表的插入、删除、和修改的函数大体相同,只是SQ