资源描述
。
个人课程设计报告
院 系 计算机与通信工程学院
专业 计算机(中加)
学号20106098
姓 名
角 色 A
日期2013/6/20
个人课程设计报告
一项目概述
1.1目的
因为现在各个高校内教学设备众多但自动管理水平相比过低,很多高校管理设备都采用在设备购进以后将设备的基本情况和相关信息登记存档。存档以后,档案基本就没人记录与维护,至于以后设备的变迁或损坏都不会记录在设备档案中,即不能体现设备的即时状态。而有些即使有设备管理系统的单位,就算是能把设备的即时信息体现在设备档案上,但设备的缺陷处理及设备缺陷等功能没有实施,设备检修的备品备件情况和检修成本核算没有实现,整个学校教学设备管理信息化 仍处于较低水平。将管理任务分成小块,落实到个人并能随时查询设备当前情况和历史情况,对设备的可靠性分析有直接作用,使管理人员从手工计算、统计工作中解脱出来。同时基于实验室管理者对设备的的使用情况进行统计和更新提供轻松快捷的管理方式,利用计算机管理系统管理我校的实验设备势在必行,也方便广大用户可以随时随地的借用实验设备进行学习和研究。
1.2 任务
对项目进行可行性研究,需求分析,项目开发计划,以及中期的总控模块开发,参与软件的设计和测试。
1.3 开发环境
◆硬件环境:建议硬件配置PII以上256M内存60G硬盘空间。
◆软件环境:需要安装Microsoft Access 4.0以上的版本,基本上Microsoft Windows系统用户都有。
◆数据库:Microsoft Access 4.0以上
1.4 参考资料
《C#数据库精通》作者:王华杰清华大学出版社出版
《C#程序设计教程》作者:李春葆清华大学出版社出版
二项目中本人参与实现的部分
1. 描述所参与阶段的内容
2.1.1概述
我主要参与到分析部分和设计、测试。
开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。这就是需求分析。
在设计时,把各模块详细化设计,初步定义将要使用的基本函数,要使用的变量,全局变量,局部变量,SQL语句的函数执行(传人的语句为参数,然后操作语句),用户登录的验证,权限设置,数据库表的导入与导出,打印输出显示表,通过对表的操作,修改反馈回数据库等。
2.1.2开发目标
系统实现前,人力与费用相对减少;处理速度提高(短时间内显示查询结果);查询的绝对精度,并在限定时间内尽可能完成目标。
系统实现后,能够及时反映实验室的设备情况,能够让实验室管理员及时做好对实验室的布置,从而提高了工作运行效率和效果和资金的节省。
2.1.3 对现有系统的分析
现有系统大多采用SQL作为数据库,而ACCESS数据库相对于SQL来说,更多的用户都安装有,而且速度,效率一点不比SQL慢,而且不需要服务器,缺点是存储大量数据(100M以上)的时候效率下降。本软件采用ACCESS数据库,对于实验室的设备信息存储,一年大约存1KB的大小,所以ACCESS数据库非常适合。
2.1.4 技术可行性分析
顶层数据流图
设备管理员
实验室设备管理系统
上级领导
登录信息
无效登录信息
申请/维修/报废/查询操作
处理结果
审核信息
审核结果
0层数据流图
用户
1
身份验证
2.1
处理要求
2.2
审核
登录信息
无效登录信息
合法信息
合法信息
处理要求
处理结果
审核信息
审核结果
终端显示器
上级领导
1层数据流图
1
身份验证
2.1
统计查询
2.2
维修
2.3
购买
2.4
报废
3
审核
合法信息
查询信息
维修设备
新设备
报废设备
申请设备
批准
批准
申请设备
设备基本信息表
D1
维修记录表
申请表
新设备表
报废记录表
D4
D3
D2
D5
用户
本实验室设备管理系统,要求对实验室设备进行统计查询,对设备维修、报废情况的处理记录,能够申请购买新设备、更像申请表等。本系统还要求用户登入具有一定的权限,能执行相关的操作。当设备需要报废和购买还需要得到上级领导的审核批准。
现有系统大多采用SQL作为数据库,而ACCESS数据库相对于SQL来说,更多的用户都安装有,且不需要服务器。本软件采用ACCESS数据库,对于实验室的设备信息存储,一年大约存1KB的大小,所以ACCESS数据库非常适合。
2.1.5 数据描述——静态数据
1)基础信息
设备信息表结构:
ID
类别
设备名
型号
规格
单价
购置日期
生产厂家
经办人
状态
设备信息表各字段具体描述:
字段名称
类型
长度
是否为NULL
备注
ID
int
2
否
主键,自动添加
类别
varchar
20
是
设备名
varchar
20
是
型号
varchar
20
是
规格
varchar
20
是
单价
double
4
是
购置日期
date
4
是
生产厂家
varchar
30
是
经办人
varchar
10
是
状态
varchar
6
否
设备申请表结构:
ID
类别
设备名
型号
规格
单价
申请日期
数量
经办人
状态
设备申请表各字段具体描述:
字段名称
类型
长度
是否为NULL
备注
ID
int
2
否
主键,自动添加
类别
varchar
20
是
设备名
varchar
20
是
型号
varchar
20
是
规格
varchar
20
是
单价
double
4
是
申请日期
date
4
是
数量
int
2
是
经办人
varchar
10
是
状态
varchar
6
否
设备修理表结构:
修理号
ID
类别
设备名
型号
规格
修理费用
修理日期
修理厂家
经办人
状态
设备修理表各字段具体描述:
字段名称
类型
长度
是否为NULL
备注
修理号
int
2
否
主键,自动添加
ID
int
2
否
参照设备表ID
类别
varchar
20
是
设备名
varchar
20
是
型号
varchar
20
是
规格
varchar
20
是
修理费用
double
4
是
修理日期
date
4
是
修理厂家
varchar
30
是
经办人
varchar
10
是
状态
varchar
6
否
2.1.6 E-R图
用户
管理
实验室
设备
存放
故障
维修报表
密码
登入权限
名称
类别
设备名称
型号
类别
数量
生产厂家
购买人
单价
规格
型号
修理日期
维修费用
维修人或者修理厂家
规格
数量
购买日期
设备编号
2. 描述此部分实现的具体过程。
2.1.1分析部分
需求的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求。
它的另外一种定义认为需求是“用户所需要的并能触发一个程序或系统开发工作的说明”。有些需求分析专家拓展了这个概念:“从系统外部能发现系统所具有的满足于用户的特点、功能及属性等”。这些定义强调的是产品是什么样的,而并非产品是怎样设计、构造的。所以我从它的定义(从用户需要进一步转移到了系统特性)为出发点撰写:
需求是指明必须实现什么的规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。不难发现:并没有一个清晰、毫无二义性的“需求”术语存在,真正的“需求”实际上在人们的脑海中,这个人们主要是指客户,但一般情况下,用户并不能描述自己的需要,只就需要系统分析人员根据用户的自己语言的描述整理出相关的需要再进一步和客户核对。系统分析员和客户需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识。任何文档形式的需求仅是一个模型,一种描述。而这次试验,我们既是客户,又是受委托人,除了题目中一些硬性的要求,其他如语言,环境,界面设计等都是我们主观的去写,这样还是比较简单的。
2.1.2 设计部分
1.软件初运行状态,数据库未链接,用户权限为游客。
2.手动链接数据库后,自动跳转到设备信息页面,打印全部的设备信息,实现了设备信息模块功能,在管理员用户登录后,可以右键对设备进行操作。
3.查看设备申请表信息表,实现了设备申请模块功能,申请过的设备才能进行购买。
4.查看设备修理清单信息表,实现了设备修理模块功能,可以记录设备的修理信息,报废信息。
5.自定义查询,输入相关的信息,可以查找到设备。
6.通过自定义查询搜索出的设备。
7.新建申请表,填好信息将自动插入到设备信息表中。
三个人遇到的困难与获得的成果
3.1需求分析方面
困难:如何去撰写需求报告呢,需求报告要有什么内容呢,如何写才能清楚的交代客户想要的软件呢,才能让下一步的人员的工作正确运作。
成果:
知道了常用的需求
● 现在业务如何运作。
● 希望计算机做何事。
● 每天思考完软件的设计,归纳总结,列出已有和未有的事件,反复调研,直到完善。
如何撰写调研报告
● 明确客户需要作何事情,事情多少,时间限制。
● 客户可提供的软件,硬件,网络和通讯环境等。
● 客户可参加共同开发的人力和素质。
● 分析工作量,确定底价。
● 引导、启发被调查对象。
收集资料
● 根据现有的组织机构,资料(数据样本、文件、凭证等)存档。
● 查找以往该方面软件的资料(运用网络)。
知道了规范的需求分析报告必须的内容。
★ 数据流程图。
★ 数据字典和数据库描述。
★ 功能与性能需求。
★ 只考虑高层次的数据流程图。
★ 根据已有经验,构思数据模型(E-R图)。
★ 软件的接口与环境。
3.2软件设计方面
1. 在ACCESS数据库中,用的命名空间是usingSystem.Data.OleDb;区别于SQL的是usingSystem.Data.SqlClient;
2. 在窗体间传递数据的问题,例如:在FORM1中定义FORM2,form2 = newForm2(this);,需要传递窗体实例,以窗体FORM1为参数,传给其他窗体,这样其他窗体就可以调用FORM1的变量,函数,当然函数要public
3. 在窗体关闭时要检查数据是否保存完成,不然之前的修改都白干了。还有关闭时要断开与数据库的链接,不断数据库将一直被占用。
if(conn.State==ConnectionState.Open)
try
{
save_data(page);
}
finally
{
conn.Close();
}
4. 第一次运行软件时,需要创建数据库文件,创建字符串Provider=Microsoft.ACE.OLEDB.12.0;Data Source='E:\\visualstudio 2012\\Projects\\shebeisys\\shebeidb.accdb';Jet OLEDB:Database Password=admin,由于创建的版本过高,可能导致低版本的数据库不兼容,所以改进了创建字符串,并设置了密码,提高安全度。"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;JetOLEDB:Database Password=nicaibudao;JetOLEDB:Engine Type=5"
5. 在写SQL语句时,如果不加@会出错,如
sqlcmd = "CREATE TABLE 设备信息
(ID autoincrement(1,1) primary key,
类别varchar(20),
设备名varchar(20),
型号varchar(20),
规格varchar(20),
单价double,
购置日期 date,
生产厂家varchar(30),
经办人varchar(10),
状态varchar(6))";
这样写将导致把换行回车符也添加进语句中:修正后
sqlcmd = @"CREATE TABLE 设备信息
(ID autoincrement(1,1) primary key,
类别varchar(20),
设备名varchar(20),
型号varchar(20),
规格varchar(20),
单价 double,
购置日期 date,
生产厂家varchar(30),
经办人varchar(10),
状态varchar(6))";
6. 写完SQL语句要使用OleDbCommand类来处理语句
cmd = newOleDbCommand(sqlcmd, conn);
cmd.ExecuteNonQuery();
7. 接收从数据库里返回的表单信息,填充到内存中的DataSet中,可以更好维护数据库,防止它崩溃。
8. 填充用到OleDbDataAdapter类
sqlcmd = "SELECT * FROM 设备信息";
adapter = newOleDbDataAdapter(sqlcmd, conn);
adapter.Fill(ds, "设备信息");
9. 我们要输出显示表,就要用到dataGridView1控件,该控件可以直接引用DataSet中的数据 ,数据源,数据源,BindingSource类 ,可以将DataSet绑定到dataGridView1中,一旦DataSet发生变化,dataGridView1也会变化,这是个封装好的控件。
bind = newBindingSource();
bind.DataSource = ds.Tables["设备信息"];//dt[0];
this.Text = "实验室设备管理系统 [设备信息]";
this.dataGridView1.DataSource = bind;
this.bindingNavigator1.BindingSource = bind;
10. 身份的权限设置:定义一个全局变量shenfen,0为游客,1为管理员
if (shenfen == 0)dataGridView1.ReadOnly = true;
dataGridView1设置只读,不可增删改写。
可以注销,shenfen = 0
11. 切换查看其它的表,更改数据源就好,顺便换一下窗体的标题。
sqlcmd = "SELECT * FROM 修理清单";
adapter = newOleDbDataAdapter(sqlcmd, conn);
adapter.Fill(ds, "修理清单");
bind.DataSource = ds.Tables["修理清单"];
this.Text = "实验室设备管理系统 [修理清单]";
12. 不写try{}catch(Exception ex),不让编译,不知道该说是VS2012的优点还是缺点,优点是更安全运行程序,缺点是编写时很麻烦。
13. 执行数据库增删改写的命令也是用到OleDbCommand类
cmd = newOleDbCommand(s, conn);
cmd.ExecuteNonQuery();
14. 在更改数据库时要先定义OleDbCommandBuilder类,否则SQL语句不可执行
OleDbCommandBuilderscb = newOleDbCommandBuilder(adapter);
15. 设备状态的改变,例如,购买按钮的单机事件,若设备未被批准,不允许购买操作,否则,弹出购买窗口,填写相关信息,更新设备信息表
if (dataGridView1.Rows[row_xz].Cells["状态"].Value.ToString() != "批准")
MessageBox.Show("申请未被批准,不允许购买!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Question);
else
{
form6.ShowDialog();
}
16. 自定义查询,逐个判断TEXT里的信息,非空则添加进字符串里,如
switch (comboBox1.SelectedIndex)
{
case 0: sql = "select * from 设备信息"; lx = 0; break;
case 1: sql = "select * from 申请表"; lx = 1; break;
case 2: sql = "select * from 修理清单"; lx = 2; break;
}
sql += " where ";
if (textBox1.Text != "") sql += "设备名 like '%" + textBox1.Text + "%' and ";
四对《企划与项目开发》的体会
通过这次的课程,让我体会到了团队项目开发的瀑布式过程,并对数据库应用的软件有了更深一层的了解。
更重要的是知道了需求分析的重要性,若无足够的用户参与,系统人员获得的需求是片面的,不完整的,这样系统在需求之初就埋下风险。在开发中就会不断地补充需求,项目就越变越庞大以致超过其计划或重新编写模块。计划并不总是与项目需求规模与复杂性及需求变更实际情况相一致,这使得问题更难解决。实际上,问题根源在于用户需求的改变和开发者对新需求所作的修改。
要想把需求变更范围控制到最小,必须一开始就对项目视图、范围、目标、约束限制和成功标准给予明确说明,并将此说明作为评价需求变更和新特性的参照框架。说明中包括了对每种变更进行变更影响因素分析的变更控制过程,有助于编写时候更少的重新编写。
而且重新编写容易使模块违背强内聚、松耦合的设计原则,特别是如果项目配置管理工作不完善的话,收回变更和删除特性会带来问题。如果你尽早地区别这些可能带来变更的特性,你就能开发一个更为健壮的结构,并能更好地适应它。这样设计阶段需求变更不会直接导致重新编写,同时也有利于减少因变更导致质量的下降。
THANKS !!!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考
-可编辑修改-
展开阅读全文