应用软件程序设计实验报告.docx
- 文档编号:28237969
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:134
- 大小:624.97KB
应用软件程序设计实验报告.docx
《应用软件程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《应用软件程序设计实验报告.docx(134页珍藏版)》请在冰豆网上搜索。
应用软件程序设计实验报告
福建工程学院计算机与信息科学系
实验报告
2016–2017学年第2学期任课老师:
课程名称
应用软件开发
班级
网工
座号
姓名
实验题目
人员档案的管理、物料档案管理、简单物料进仓/出仓信息管理、多物料进出仓信息管理、用户登录与权限设计、统计程序设计与报表打印
实验时间
2017-02至2017-06
实验目的、要求
实验课题一、人员档案的管理、物料档案管理
设计实现对企业人员基本情况的档案的输入、删除与修改,企业人员基本情况主要包括:
人员代码、姓名、性别、出生日期、身份证号、籍贯、家庭住址、联系电话、其它情况等。
1.程序须包括主界面程序,程序名用“班级名+座号+main”,主界面可以通过菜单调用到其它所有子程序。
2.人员档案的增加、修改、删除的程序,其中人员档案表在数据库中必须以“班级+座号+(表示人员的中英文信息)”来命名,人员档案的信息管理程序也必须以“班级+座号+(表示程序名的中英文信息)”来命名。
其中人员代码不能为空,性别必须用“男”、“女”选择方式,出生日期必须用日期控件来控制。
修改、删除程序在执行修改删除操作前,都必须进行记录定位操作,所以必须有相应的查询程序,可以借用查询程序来完成记录定位。
人员档案的增加、修改、删除程序也可以用三个程序名,分别编程。
3.人员档案查询程序,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,可以在查询框中输入人员姓名中的任何一个单字,查询出含该字的所有人员。
物料档案包括物料代码、物料名称、规格型号、计量单位、库存数量、备注等字段。
1.物料档案的增加、修改、删除程序,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,具体内容参考人员档案管理程序。
物料表在数据库中以“班级+座号+(表示程序名的中英文信息)”来命名表,客户端输入时要求物料代码不为空,计量单位可以选择“件、套、公斤、吨、升、米、毫米、个”等,计量单位并可以输入其它单位名,库存数量默认为0。
2.物料查询程序可以在通过输入框的文字进行模糊查询(物料代码、名称、规格中是否含有输入框的文字),程序名用“班级+座号+(表示程序名的中英文信息)”来命名。
实验课题二、简单物料进仓/出仓信息管理
企业物料进出仓的信息管理,物料进出仓的信息主要包括进出仓单号、进出仓日期、操作人员代码、备注、物料代码、进仓数量、出仓数量等
1.企业仓库进出仓信息表以“班级+座号+(表示程序名的中英文信息)”来命名,可以用一个表,也可以用二个表(一对多关系),具体表设计的思路须在报告中描述。
2.进仓程序与出仓程序可以合并,也可以分开做,名称以“班级+座号+(表示程序名的中英文信息)”来命名。
其中操作人员必须用下拉框来选择;单号要自己编规则自动生成,单号产生规则在报告中说明;进出仓日期用日期控件;物料代码必须下拉框做选择;当物料出仓时必须判断出仓数量时候超过物料的库存数量,物料的库存数量在物料表中可以获得该物料的库存数量。
进行进仓或出仓操作时必须通过调用存储过程来实现,存储过程将操作结果返回调用者,显示成功或失败的信息。
3.进仓、出仓的存储过程可以合并或分开做,存储过程名称以“班级+座号+(表示程序名的中英文信息)”来命名,存储过程要判断物料是否存在,操作后物料库存数量是否不为负数;如果不满足条件显示,失败提示;如果满足条件,增加进出仓表记录一条,并根据进出仓物料的数量对物料表中库存数量进行修改,提交数据库操作,否则回滚。
4.进出仓单查询程序,以“班级+座号+(表示程序名的中英文信息)”来命名,可以用进出仓日期起止条件,物料代码、操作人员、备注(用子串查询)来完成。
实验课题三、多物料进出仓信息管理
一般企业进行物料进出仓时,多在一个进出仓单号上同时对多种物料做同进或同出操作,通过程序实现多个物料在一个界面一个单号上同时实现进仓或出仓操作,如果不成功,必须全部回滚。
1.多物料进仓出仓,可以在一个程序中完成,也可以分开编程,程序名以“班级+座号+(表示程序名的中英文信息)”来命名,同一单号中进出仓单号、进出仓日期、操作人员必须完全相同,同一单号中不能进仓与出仓同时存在,通过调用存储过程完成进出仓操作。
2.多物料进出仓存储过程,过程名以“班级+座号+(表示程序名的中英文信息)”来命名,多物料进出仓单增加到表中,并修改多个物料的库存数量,失败就显示提示内容。
实验课题四、用户登录与权限设计
用户在这里就指操作人员,已经在人员档案中进行管理,通过设计用户登录和用户权限的管理,实现用户按权限访问资源,管理员按要求授予用户权限,登录程序安全稳定,设计用户菜单及程序调用。
人员表中需要新增字段口令、用户权限。
系统中每个操作人员都可以作为用户,当一个用户权限修改时,不会影响其他用户;可以对每个用户单独授予某个程序的执行权,也可以收回其执行权,而不影响其他用户的权限;
1.用户登录程序,名称用以“班级+座号+(表示程序名的中英文信息)”来命名,输入用户名和口令,判断正确后,按用户的权限,显示有权的菜单项,无权菜单项必须不可见或不可操作。
2.用户授权程序,名称用以“班级+座号+(表示程序名的中英文信息)”来命名。
有授权权限的用户,可以指定某个用户获取某个程序执行权,或被禁止某个程序的执行权。
实验课题五、统计程序设计与报表打印
按物料统计进出仓流量,计算分析流动量最小的物料。
按月份打印进出仓单表,打印进出仓单,按物料打印仓库账本。
1.物料统计程序,统计各物料在指定时间内的进出仓数量总数,用图形显示,程序名以“班级+座号+(表示程序名的中英文信息)”来命名。
2.打印进出仓单程序,给定月份,将该月进出仓单全部按单号顺序打印出来,程序名以“班级+座号+(表示程序名的中英文信息)”来命名。
打印仓库账本程序,给定年份和物料,打印物料代码、名称、规格、计量单位、各日期的进仓、出仓和库存量;程序名以“班级+座号+(表示程序名的中英文信息)”来命名。
实验设计内容
MSSQLServer数据库、表及存储过程
VS2010界面效果:
登录界面:
主菜单界面:
人员档案
查询界面:
添加界面:
修改界面:
点击是按钮后
删除界面:
点击是按钮后:
物料档案
查询界面:
添加界面:
修改界面:
点击是按钮后:
删除界面:
点击是按钮后:
库存量查询:
简单物料进出仓
进仓:
出仓:
进仓记录查询:
出仓记录查询:
多物料进出仓:
出仓:
进仓记录查询:
出仓记录查询:
用户权限管理:
查询权限
收回权限:
授予权限:
打印报表:
物料统计报表打印
进出仓单打印
仓库账本打印
调试过程记录
出现的主要问题及如何解决
一、登录LoginForm
【1】判断用户是否存在(与人员表有关)
思路:
将输入的用户名作与密码为条件在数据库用户表中查找是否存在匹配项
【2】与Main窗体传参问题(Main显示相应用户的权限结果;登录用户在主界面显示欢迎信息)
思路:
在Login中定义一个属性并在呼出Main时将其传到Main中(构造方法),在Main中访问数据库得到该用户权限字段,并将其显示在Main中(有权限显示高亮即可用,无权限显示灰色即不可用)
二、主菜单MainForm
【1】权限的显示(与权限管理有关)
思路:
取出权限字段并将相应的子菜单状态处理
【2】子菜单都是灰色,父菜单不显示高亮
思路:
判断所有的子菜单是否可用,至少有一个可用父菜单高亮显示,都不可用则Enable属性为false。
三、人员管理StaffManagementForm
【1】增删改查操作
用户在执行其中一个可能会使用另一个,为避免重返主菜单再呼出相应的窗体的麻烦和多窗体的冗余,添加tabControl控件实现在同一Form之间的切换。
【2】异常处理
(1)判断空输入
(2)查询不到显示异常提示信息(3)添加已有的人员代码(primarykey)
(4)修改删除操作定位查找失败
思路:
增加if判断语句处理捕获的异常并显示相应提示信息
四、物料管理GoodsManagement
与人员管理类似
五、物料库存量查询GoodsCountSearch(与物料表有关)
【1】解决实现单物料查询与多物料库存量的查询
思路:
添加dataGridView控件并将物料代码,物料名称及库存量显示出来,其余不相干信息不显示
六、单物料进出仓SimpleInout
【1】单号的生成
生成规则:
进出仓日期+序号(某天第几单,递增)+进出仓状态标记+操作人员代码
【2】进出仓的切换
思路:
为避免类似操作带来窗体及控件的冗余,使用radioButton实现进出仓的切换
【3】操作人员代码与物料代码与数据库的同步绑定(与人员表和物料表有关)
从数据库emp、goods表中的相应字段内容填充到comboBox控件items属性
七、多物料进出仓MultiInout
【1】同一单号的日期及人员代码相同实现
思路:
在确定进出仓并将第一条记录添加完成后将日期和人员的输入显示隐藏,避免用户更改以确保相同
【2】操作失败的信息提示
(1)进出仓时物料不存在
(2)出仓时库存量不足
思路:
增加if判断
【3】单条数据的存放
思路:
在VS前端创建DataTable对象作为临时表存放,在点击确定按钮后将多条记录作为事物提交到数据库。
八、权限管理AuthorizeManagement
[与人员表有关(默认密码:
000000默认权限:
所有查询,权限管理及打印报表)]
【1】选或反选、子项展开与隐藏
实现功能如下:
1.父节点勾选,则子节点全部勾选;
2.父节点不勾选,则子节点全部不勾选;
3.子节点部分勾选,则父节点不勾选;
4.子节点全部勾选,则父节点被勾选。
思路:
以treeView控件代替checkBox控件(树状遍历树节点,子节点与父节点的关系)
【2】查询权限
思路:
取出该用户的权限字段并还原对应结果
【3】授予权限
思路:
以不同字母标识各个节点,选中则添加相应字母,更新emp表的permission(权限)字段
【4】收回权限
思路:
将欲收回权限选中并作记录,然后将其逐一截取一个(Substring方法),在数据库取回的权限字段的字符串中查找(IndexOf方法),若找到将其移除(Remove方法),若找不到提示该用户无此权限,无法收回。
最后将其更新到数据库
九、报表打印
【1】链接数据库时正在被使用
思路:
连接时不选SQLServer数据库文件而选SQLServer数据库
【2】将进出仓总数合并在一个条形统计图中只有进出仓同时存在的物料才会显示
思路:
修改sql语句使得在某一时间段只有进仓或者出仓的物料也显示
实验结果记录以及与预期结果比较以及分析
一、实验达到了预期的效果。
二、比较与分析:
1、日期的内容用Substring将其组合与Value属性
使用Value属性使得程序更加简洁,可读性更好
2、单号的递增查找当天最大并递增
访问数据库查找单号的最大(max关键字),截取(Substring方法)得到count(序号)的部分并在其基础上加一,避免单号的重复导致主键的冲突
3、物料进出仓进出仓记录在同一张表,以状态(进仓或出仓)字段区别,存储过程也是同一个。
是程序更加精简,不过可能会降低程序的可读性,带来维护的麻烦。
总结以及心得体会
起初每个实验我都当成小实验来做,也基本实现了题目所要求的功能,但是没有集成而导致没有关联。
后期把所有的实验整合后并修复了部分BUG,感觉比较像在做一个小项目。
实验一刚开始对于增删改查使用四个Form实现,后来觉得这些操作可以放在一起,改用一个Form和tabControl来实现;
在做实验三多物料进出仓时用dataGridView与数据库表的数据绑定,但是没有使用存储过程,后来改用临时表的思路,
实验四权限管理起初只是简单地使用checkBox实现,后来觉得不能全选反选,扩展隐藏改用treeView,但是treeView的点击事件实现全选反选功能时碰了壁,最后在网上查找相关资料才解决,但是还没有解决子节点部分选中父节点为灰色的功能。
实验五做报表时按照老师给的教学视频连接数据库出现正在使用报错提示,通过自己的摸索不使用老师给出的连接SQlServer数据库文件的方法而改用连接SQLServer数据库最终成功连接到数据库;在做第一题条形统计图时发现无法显示某段时期只有进出或出仓的物料统计信息,修改sql查询语句终于实现了预期的结果。
总之,这次的应用软件设计不但自学了C#语言,还自行开发了一个小项目,感觉挺有成就感的。
当然,还有很多的设计思想和控件的使用没有尝试过,希望再接再厉!
指导老师评阅意见
指导老师:
年月日
填写内容时,可把表格扩大。
实验的源程序代码(要有注释)附在表后。
附
源代码:
MSSQLServer
createdatabasesamon
(
name=samdata,
filename='e:
\database\sam.mdf',
size=50MB,
MAXSIZE=200MB,
filegrowth=15%
)
logon
(
name='samlog',
filename='e:
\database\sam.ldf',
size=20mb,
filegrowth=1mb
)
usesam;
dropdatabasesam;
--实验一
--人员表
createtablewg212_emp
(
enovarchar(15)primarykey,
enamevarchar(15),
sexvarchar(6)check(sexin('男','女')),
birthdaydatetime,
idvarchar(20),
nationvarchar(20),
addrvarchar(30),
telint,
othersvarchar(30),
)
insertintowg212_emp(eno,ename,sex,birthday,id,nation,addr,tel,others)
values(01,'张飞','男','1995-06-01',001,'河南','beijing',111,'nothing');
insertintowg212_emp(eno,ename,sex,birthday,id,nation,addr,tel,others)
values(02,'黄月英','女','1993-05-01',002,'江西','fuzhou',222,null);
insertintowg212_emp(eno,ename,sex,birthday,id,nation,addr,tel,others)
values(03,'贾宝玉','男','1992-02-01',003,'福建','shanghai',333,'nothing');
/*
truncatetablewg212_emp;
droptablewg212_emp;
deletefromwg212_emp;
select*fromwg212_emp;
*/
--物料表
createtablewg212_goods
(
goodsNovarchar(15)primarykey,
goodsNamevarchar(15),
specsvarchar(15),
unitsvarchar(10),
saveCountfloatdefault0,
remarksvarchar(30),
)
insertintowg212_goodsvalues(01,'大米','包','斤',100,null);
insertintowg212_goodsvalues(02,'小麦','袋','吨',100,null);
insertintowg212_goodsvalues(03,'加多宝','箱','吨',100,null);
insertintowg212_goods(goodsNo)values(04);
select*fromwg212_goods;
droptablewg212_goods;
truncatetablewg212_goods;
--实验二
--简单物料进出仓记录表
createtablewg212_simple
(
orderIDvarchar(50)primarykey,
inoutDatedatetime,
enovarchar(20),
remarksvarchar(20),
goodsNovarchar(15),
inoutCountfloat,
operateStatevarchar(10)
)
truncatetablewg212_simple;
droptablewg212_simple;
--存储过程
if(exists(select*fromsys.objectswherename='wg212_simplePro'))
dropprocwg212_simplePro
go
createprocwg212_simplePro(
@orderIDvarchar(50),
@inoutDatedatetime,
@enovarchar(15),
@remarksvarchar(20),
@goodsNovarchar(15),
@inoutCountfloat,
@operateStatevarchar(10))
as
begin
begintransaction
if(notexists(select*fromwg212_goodswheregoodsNo=@goodsNo))begin
raiserror('不存在该物料',16,1)
end
elsebegin
if(@operateState='进仓')begin
insertintowg212_simplevalues(@orderID,@inoutDate,@eno,@remarks,@goodsNo,@inoutCount,@operateState)
updatewg212_goodssetsaveCount+=@inoutCountwheregoodsNo=@goodsNo
end
if(@operateState='出仓')
if((selectsaveCountfromwg212_goodswheregoodsNo=@goodsNo)>=@inoutCount)begin
updatewg212_goodssetsaveCount-=@inoutCountwheregoodsNo=@goodsNo
insertintowg212_simplevalues(@orderID,@inoutDate,@eno,@remarks,@goodsNo,@inoutCount,@operateState)
end
elsebegin
raiserror('库存量不足',16,1)
end
end
commit
end
go
--------
execwg212_simplePro's1','2017-05-12','01','ok','1',100,'进仓'
select*fromwg212_goods;
select*fromwg212_simple;
truncatetablewg212_simple;
selectmax(orderID)fromwg212_simplewhereorderIDlike'20170614%';
deletefromwg212_simplewhereinoutDatebetween'2017-06-13'and'2017-06-15'orderID='20170614000801'
--实验三
createtablewg212_multiSame
(
orderIDvarchar(50)primarykey,
inoutDatedatetime,
enovarchar(15)
)
createtablewg212_multi
(
orderIDvarchar(50),
remarksvarchar(20),
goodsNovarchar(15)notnull,
inoutCountfloat,
operateStatevarchar(10),
--foreignkey(orderID)referenceswg212_multiSame(orderID),
)
select*fromwg212_multi;
select*fromwg212_multiSame;
selectwg212_multiSame.orderID,inoutDate,eno,remarks,goodsNo,inoutCount,operateStatefromwg212_multiSamerightouterjoinwg212_multionwg212_multi.orderID=wg212_multiSame.orderIDwheregoodsNo='2';
truncatetablewg212_multiSame;
truncatetablewg212_multi;
droptablewg212_multi;
droptablewg212_multiSame;
--存储过程
if(exists(select*fromsys.objectswherename='wg212_multiPro'))
dropprocwg212_multiPro
go
createprocwg212_multiPro(
@orderIDvarchar(50),
@inoutDatedatetime,
@enovarchar(15),
@remarksvarchar(20),
@goodsNovarchar(15),
@inoutCountfloat,
@operateStatevarchar(10))
as
begin
begintransaction
if(exists(select*fromwg212_goodswheregoodsNo=@goodsNo))begin
if(@operateState='进仓')begin
updatewg212_goodssetsaveCount+=@inoutCountwheregoodsNo=@goodsNo
insertintowg212_multiva
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用软件 程序设计 实验 报告