当前位置:文档之家› pb设计报告-学生选课系统

pb设计报告-学生选课系统

课程设计报告课程名称:pb进阶与实践设计题目学生选课系统专业:信息与计算科学班级:信122姓名:韩云凤魏德康学号:2012314225 2012314108指导教师:孙宏凯河北建筑工程学院数理系2015 年 1 月课程设计题目(问题)描述当今时代是飞速发展的信息时代。

在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。

计算机的最到好处在于利用它能够进行信息管理。

使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。

计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。

本系统就是为了管理好学生选课信息而设计的。

学生选课作为一种信息资源的集散地,包含很多的信息数据的管理。

由于数据繁多,容易丢失,且不易查找。

总的来说,缺乏系统,规范的信息管理手段。

尽管有的学校有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发基本环境。

数据处理手工操作,工作量大,出错率高,出错后不易更改。

造成了时间上的浪费基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况本组成员情况姓名学号承担的任务成绩韩云凤2012314225 程序设计与调试魏德康2012314108 数据库的构建与连接教师评语签名:注:本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明本组设计的成果和特色,能够反应小组中每个人的工作。

报告中应该叙述设计中的每个模块。

设计报告将是评定每个人成绩的一个重要组成部分。

一、本组设计的功能描述●教师1.学生信息的录入2.系统用户的增加3.课程的导入4.学生信息的查看5.课程信息的管理●学生1.个人信息查看2.选课3.退课4.密码修改二、本组设计的主要特色学生选课作为一种信息资源的集散地,包含很多的信息数据的管理。

由于数据繁多,容易丢失,且不易查找。

总的来说,缺乏系统,规范的信息管理手段。

数据处理手工操作,工作量大,出错率高,出错后不易更改。

造成了时间上的浪费。

基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。

本系统就是为了管理好学生选课信息而设计的。

该系统可以实现学生选课的一些重要功能,如:课程的添加、删除,信息查询、选课、生成课表,以及学生选课管理人员、用户个人信息的维护等。

我主要是应用PowerBuilder为前端开发工具,利用SQL语言实现数据查询。

设计系统时,先从系统的数据流程开始分析,设计系统的业务流程图、系统的数据流程图、系统的E-R图。

接着制定系统的设计思想,分析系统的功能并设计系统的功能模块,系统数据库的建立,主要有各个功能窗口的设计,将设计好的窗口集中到主菜单上,通过用户的用户名和密码的登录可以进入到主窗口,这样就完成系统的制作。

三、系统分析与设计3.1可行性分析本系统的开发利用PowerBuilder作为开发工具。

PowerBuilder是一个图形化的应用程序开发环境,使用PowerBuilder可以很容易地开发和数据库打交道的商业化应用软件。

系统采用SQL Server 2005作为开发数据库。

SQL Server 2005是一种客户机/服务器结构的关系数据库管理系统。

SQL Server 2005提供了许多易于使用的图形化工具和向导,其中最常用的是服务管理器、企业管理器和查询分析器。

它们为创建和管理数据库带来了很大的方便。

在技术难度方面,有周围同学的热心帮助,加上对很多相关资料的参考,能够解决开发过程中所遇到的困难。

由于本系统管理对象简单,主要是对数据库的操作,且每个数据库内容具有较强的关联性,设计过程不复杂。

因此,整个软件的使用非常简便,对于计算机用户的要求也不高,且本系统所耗费的资源非常小,只需要在一般的电脑上面就能够使用这个软件,简单、方便、快捷的实现对保险信息进行管理。

3.2必要性分析学生选课数据处理手工操作,工作量大,出错率高,出错后不易更改。

造成了时间上的浪费。

基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。

3.3系统需求分析系统可以实现学生选课的一些重要功能,如:课程的添加、删除,信息查询、选课、生成课表,以及学生选课管理人员、用户个人信息的维护等。

3.4 系统总体结构设计系统主要有以下几个模块组成,如图所示:图3-1学生选课流程3.5 E-R图经过上述系统功能分析和需求总结,设计如下所示的实体和属性的定义:课程信息(课程代号,课程名称,授课教师,教室,剩余名额,上课时间,学分)学生信息(学号,姓名,性别,班级,出生年月日,是否已选课)学生登录信息(学号,用户名,密码,权限代号)学生选课信息(学号,课程代号,学期,课程成绩)用户权限(权限名称,权限代号)。

本系统根据上面的设计规划出的实体有:课程信息实体,学生信息实体,学生登录信息实体,学生选课信息实体,用户权限实体。

实体之间关系的E-R图如图3-2所示。

图3-2系统E-R图课程信息实体E-R图,如图3-3所示:图3-3课程信息实体E-R图学生选课实体E-R图,如图3-4所示:图3-4 学生选课实体图学生信息实体E-R图,如图3-5所示:图3-5 学生信息实体图登录信息实体E-R图,如图3-6所示:图3-6 登录信息实体图用户权限实体E-R图,如图3-7所示:图3-7 用户权限实体图3.6创建数据库表为了保存学生信息、课程信息、学生选课信息、登录信息、用户权限信息,数据库设计了学生信息表,课程信息表,学生选课信息表,登录信息表和用户权限信息表。

这些表使得用户对数据的增删改变得非常方便,数据的冗余不是十分明显。

数据库中的学生信息表结构如表3-1所示:表3-1 学生信息表(stu_inform)字段名数据类型长度范围是否为空字段说明学号Char 8 否姓名Nvarchar 是性别Char 2 是班级Nvarchar 是出生年月日datetime 是是否已选课char 是数据库中的课程信息表结构如表3-2所示:表3-2 课程信息表(course_inform)字段名数据类型长度范围是否为空字段说明课程代号Char 10 否课程名称Nvarchar 是授课教师Nvarchar 是教师Nvarchar 是剩余名额Char 3 是上课时间Char 20 是学分Int 是数据库中的学生选课信息表如表3-3所示:表3-3学生选课信息表(stu_select)字段名数据类型长度范围是否为空字段说明学号Char 8 否课程代号Char 10 否学期Char 6 是课程成绩Int 是数据库中的登录信息如表3-4所示:表3-4登录信息表(stu_login)字段名数据类型长度范围是否为空字段说明学号Char 8 否用户名Nvarchar 是密码Nvarchar 是权限代号Char 3 是数据库中的权限信息如表3-5所示:表3-5权限信息表(user_gl)字段名数据类型长度范围是否为空字段说明权限名称Char 10 是权限代号Char 3 否四、系统调试出现的问题及解决情况课程查询不成功改正后代码://dw_1.setfilter("")if sle_1.text= "" or sle_1.text ="请在此输入查询内容" then messagebox("错误!","请输入查询内容!")sle_1.event getfocus( )elseif rb_1.checked=true then//精确查找choose case ddlb_1.textcase "课程代号"dw_1.setfilter("kcdh='"+sle_1.text+"'")//dw_1.setfilter("kcdh='+sle_1.text+'")case "课程名称"dw_1.setfilter("kcmc='"+sle_1.text+"'")case "授课教师"dw_1.setfilter("skjs='"+sle_1.text+"'")case "上课时间"dw_1.setfilter("sksj='"+sle_1.text+"'")end chooseelse//模糊查询choose case ddlb_1.textcase "课程代号"dw_1.setfilter("kcdh like"+"'%"+sle_1.text+"%'") case "课程名称"dw_1.setfilter("kcmc like"+"'%"+sle_1.text+"%'") case "授课教师"dw_1.setfilter("skjs like"+"'%"+sle_1.text+"%'") case "上课时间"dw_1.setfilter("sksj like"+"'%"+sle_1.text+"%'") end chooseend ifend if//检索数据dw_1.retrieve()错误原因:Setfilter语句中少加了个引号五、系统运行报告(测试的结果)登录窗口按钮代码:string username,password//检索用户名和密码记录SELECT stu_login.xh,stu_login.yhm,stu_login.mm,stu_login.qxdhINTO :stu_no,:username,:password,:gl_noFROM stu_loginWHERE stu_login.yhm = :sle_1.text ;//判断用户输入的用户名是否正确if sle_1.text="" or sle_2.text="" thenmessagebox("错误!","用户名或密码不能为空!",exclamation!,ok!,2)elseif username=sle_1.text and password=sle_2.text thenopen(w_main_1)close(w_login)elsemessagebox("错误!","用户名或密码错误,请重新输入!",exclamation!,ok!,2)end ifend if查询窗口按钮代码:if sle_1.text= "" or sle_1.text ="请在此输入查询内容" then messagebox("错误!","请输入查询内容!")sle_1.event getfocus( )elseif rb_1.checked=true then//精确查找choose case ddlb_1.textcase "课程代号"dw_1.setfilter("kcdh='"+sle_1.text+"'")//dw_1.setfilter("kcdh='+sle_1.text+'")case "课程名称"dw_1.setfilter("kcmc='"+sle_1.text+"'")case "授课教师"dw_1.setfilter("skjs='"+sle_1.text+"'")case "上课时间"dw_1.setfilter("sksj='"+sle_1.text+"'")end chooseelse//模糊查询choose case ddlb_1.textcase "课程代号"dw_1.setfilter("kcdh like"+"'%"+sle_1.text+"%'") case "课程名称"dw_1.setfilter("kcmc like"+"'%"+sle_1.text+"%'") case "授课教师"dw_1.setfilter("skjs like"+"'%"+sle_1.text+"%'") case "上课时间"dw_1.setfilter("sksj like"+"'%"+sle_1.text+"%'") end chooseend ifend if//检索数据dw_1.retrieve()选课与退课按钮代码:1.选课long l_xkhh,l_symeint i,j,t,g,k,p,s,h,l_s_2string l_kcdh,l_kcmc,l_stab_1.tabpage_1.dw_2.settransobject(sqlca) tab_1.tabpage_1.dw_2.retrieve()g=0s=0j=dw_1.rowcount()p=dw_2.rowcount()l_kcdh=" "//for循环提取打对号的行for i=1 to jk=0//得打对号的值h=dw_1.GetItemNumber(i,8)//t记录打对号的个数t=h+t//检测课程是否已选if h<>0 then//获得打对号的行的课程代号l_kcdh = dw_1.getitemstring(i,1)//查找选择的课程是否是数据库中已选的课程k=0没有冲突,k=1有k=dw_2.find("kcdh='"+l_kcdh+"' and xh='"+stu_no+"'",1,p)//插入到数据库中insert into stu_select(xh,kcdh)values (:stu_no,:l_kcdh);//sqlca.sqlcode判定是否提交成功成功为0失败-1没有数据100,最后为0总的全部提交g=g+sqlca.sqlcodeelseend ifif k>0 thenselect kcmcinto :l_kcmcfrom course_informwhere kcdh=:l_kcdh;g=g+sqlca.sqlcodes=s+1messagebox("",l_kcmc+"已选请去掉重新选课") end ifnextif g =0 and s=0 and k=0 and t<>0 then//**************commit;tab_1.tabpage_2.dw_3.settransobject(sqlca)tab_1.tabpage_2.dw_3.retrieve()messagebox("","选课提交成功")elseif t=0 and k=0 and s=0 and h =0 thenrollback;messagebox("","未选课")elserollback;messagebox("","提交失败")end if2.退课dw_3.DeleteRow(l_lastrow)Int li_retli_ret = dw_3.Update( )IF li_ret = 1 THENCOMMIT;messagebox("","退选成功")ELSEROLLBACK;END IF动态数据窗口按钮代码://使用数据存储对象的一般步骤,并举例说明String ls_err , sql_syntax , ls_mysql,ls_xh,ls_xm,ls_xb,ls_bj,ls_csnyr,ls_sfyxksql_syntax = "SELECT Table_1.学号,Table_1.姓名,Table_1.性别,Table_1.班级,Table_1.出生年月,Table_1.是否选课FROM Table_1 "&//+"WHERE stu_inform.xh=:stu_no"//sql_syntax = "SELECT stu_inform.xh FROM stu_inform " //& // + " WHERE stu_inform.xh=:stu_no"//生成数据窗口对象的源代码ls_mysql = SQLCA.SyntaxFromSQL(sql_syntax, "Style (Type = Grid)", ls_err)If Len(ls_err)<>0 ThenMessageBox("提示信息","有错误"+ls_err)RETURNEnd IfDataStore mydatmydat = CREATE DataStoremydat.Create (ls_mysql)mydat.SettransObject(SQLCA)mydat.retrieve ()//数据处理........ls_xh=mydat.getitemstring(2,1)ls_xm=mydat.getitemstring(1,2)ls_xb=mydat.getitemstring(1,3)ls_bj=mydat.getitemstring(1,4)ls_csnyr=mydat.getitemstring(1,5)ls_sfyxk=mydat.getitemstring(1,2)messagebox("学生个人信息","学号为:"+ls_xh+ " " +"~r~n"+&+"姓名:"+ls_xm +" "+"~r~n"+&+"性别:"+ls_xb+" "+"~r~n"+ &+"班级:"+ls_bj+" "+"~r~n"+ &+"出生日期"+ls_csnyr)Destroy mydat重要代码://使用OLE 自动化服务,将Excel 表的内容导入到数据窗口中。

相关主题