软件开发技术开发实例_第1页
软件开发技术开发实例_第2页
软件开发技术开发实例_第3页
软件开发技术开发实例_第4页
软件开发技术开发实例_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

开发实例第五章软件开发特点脑力劳动—容易失败需要有方法需要工具需要情商开发系统的步骤确定需求---用例(usecase)根据用例图,建立对象关系模型、设计数据库划分模块为每个用例,确定实体类、边界类、控制类抽象归纳共同的部分按软件的层次构架原则,设计软件构架选课系统功能需求教务员可以输入一个新学生;更新、查询学生的信息。教务员可以输入一门新课程;更新、查询课程的信息。教务员指定教师开设一门课程。教务员可以查询一门课程的所有的选课学生名单,总人数。教务员可以为某个指定的学生选课;输入学生成绩。为操作方便,输入学生的成绩时,可以是指定一门课程的课程号,把学生的名单按学号从小到大次序罗列,逐个输入学生成绩。学生可以查询自己所有的选课信息,自己的已选课列表和待选课列表,实现选课。可以输入自己对某门课程任课教师的评价。需求的组织—类分析实体类:实体类是指在系统运行过程中,其生成的对象是持久的,它的存在会超过一个会话的生命期,它持有系统应用的大部分数据。通常与数据库存储有对应关系边界类:边界类负责系统与用户的交互

控制类:控制类是为了增加系统的适应性而设计的类,负责主要的应用逻辑,将实体类和频繁变更的业务逻辑隔离开。

实体类、边界类、控制类软件的多层构架多层体系结构的演变多层体系结构的分层数据层表示层逻辑层数据访问层层与类的对应关系边界类---表达层实体类—与存储对应控制类—逻辑层—管理数据流的携带,如维护实体类进出数据库控制类继承数据链路层(实验9中DbConnection类),维护数据库中的数据数据库—存储层系统用例图学生管理a学生信息输入b查询学生信息c更新学生信息系统用例图课程管理a课程信息输入b课程信息查询c更新课程信息系统用例图开课及成绩管理a开课b开课查询c成绩更新系统用例图学生选课系统用例图登录管理系统的概念数据学生教师课程部门StudentTeacherCourseDepartment<<PK>>studentNo<<PK>>teacherNo<<PK>>courseNo<<PK>>deptIdstudentNameteacherNamecourseNamedeptNamesexsexdeptIddeptId学生和部门教师和部门关系的重数都是1..n---1系统的概念数据角色权限系统用户RoleRightAccount<<PK>>roleId<<PK>>rightId<<PK>>accountIdroleNamerightNamepassword用户可以有多种角色一个角色可以有多个权限一个权限可以分配给多个角色系统中存在的对象间的关联教师开课系统中存在的对象间的关联学生选课系统中存在的对象间的关联学生对开课评价系统中存在的对象间的关联角色和权限权限的组合构成角色系统中存在的对象间的关联用户帐号和权限数据库设计字段名称物理意义数据类型备注studentNo学号char(6)PK,数字组成birthday出生日期datetime非空studentName学生姓名Varchar(20)非空sex性别Varchar(2)男或女deptId所在院系的IDchar(4)4位数字组成,非空学生Student数据库设计教师Teacher字段名称物理意义数据类型备注workerNo工号char(5)PK,数字组成workerName职工姓名Varchar(20)非空sex性别Varchar(2)男或女deptId所在院系的IDchar(4)4位数字组成,非空数据库设计课程Course字段名称物理意义数据类型备注courseNo课程号char(8)PK,数字组成courseName课程名varchar(50)非空数据库设计部门Department字段名称物理意义数据类型备注deptId部门编号char(4)PK,数字组成deptName部门名称Varchar(30)数据库设计角色Role字段名称物理意义数据类型备注roleId角色编号IntPK,标识种子roleName角色名称Varchar(30)非空数据库设计开课关系(TeachCourse)字段名称物理意义数据类型备注teachCourseNo开课编号char(10)PKcourseNo课程号char(8)对应于Course关系的同名字段,非空workerNo教师工号char(5)对应于Teacher关系的同名字段amount容纳人数int课程容纳的总人数数据库设计选课关系(SelectCourse)字段名称物理意义数据类型备注studentNo学号char(6)非空teachCourseNo开课号char(10)非空,与studentNo一起作为主键grade成绩Int可空数据库设计课程评价关系(DebateCourse)字段名称物理意义数据类型备注studentNo学号char(6)非空teachCourseNo开课号char(10)非空,与studentNo一起作为主键debate评价Varchar(200)可空数据库设计角色权限关系(RoleRight)字段名称物理意义数据类型备注roleId角色Idint非空,同Role关系同名字段,PKrightId权限Idint非空,同Rights关系同名字段,PK数据库设计帐号角色关系(AccountRole)字段名称物理意义数据类型备注accountId帐号Varchar(6)非空,同Account关系同名字段,PKroleId角色Idint非空,同Role关系同名字段,PK数据库设计权限Right字段名称物理意义数据类型备注rightId权限编号IntPK,标识种子rightName权限名称Varchar(30)非空数据库设计帐号Account字段名称物理意义数据类型备注accountId权限编号Varchar(6)PKpassword帐号密码Varchar(30)可空系统模块角色和权限管理:角色和权限的输入、角色的权限分配;参与者角色分配;登陆系统的验证。学生管理:包括输入、修改、查询,帮助学生选课。课程管理:包括课程的输入、修改、查询,开设课程、开设课程的查询、学生选课。教师管理:教师信息的输入、修改、查询,为教师开设课程。成绩管理:成绩输入、修改、查询、统计。系统主界面菜单menuStrip系统菜单创建应用将主窗体的名字修改为mainForm在主窗体上放置MainMenu(2003)或MenuStrip(2005以后)设置每个菜单项的内容基础调用其他窗体先增加一个窗体类,如AddStudentForm双击某个菜单,在其点击方法中,按如下格式:AddStudentFormasf=newAddStudentForm();asf.ShowDialog();窗体也是一个类:按用类生成对象,调用对象的方法方式

其他基础准备工作数据库连接类protectedstaticOleDbConnectionconn=newOleDbConnection();//创建的连接publicstaticvoidexecNonQuery(stringsql){}//执行非查询语句publicstaticOleDbConnectiongetConn(){}//返回连接publicList<object[]>execQuery(stringsql)//select语句返回结果集实用类Utils类publicstaticvoiddbReaderFillListView(ListViewlv,ColumnHeader[]ch,stringsql,OleDbConnectionconn)对查询语句,列表显示查询结果集合变成DLL引用时:”引用”目录右击,“添加引用”,选中DLL文件Usingxxxx;

insertstudent(studentNo,studentName,sex,birthday,deptId)values('0000012','lk','男','1967-4-2','数学')命名原则实体类物理意义Student边界类….Form例子InputStudentForm控制类…ManagerActionStudentManagerAction工程目录管理分析几个用例的类登记学生信息实体类:学生;边界类:采集学生信息的窗体;控制类:保存学生信息到数据库登记课程信息实体类:课程;边界类:采集课程信息的窗体;控制类:保存课程信息到数据库共同特性:与数据库的连接,对应于数据链路层类图设计数据链路类+conn:OleDbConn+sql执行语句控制类1控制类2数据库的初始化roleIdroleName1管理员2教务员3学生Role表数据库的初始化Rights表rightIdrightNamerightIdrightName1角色管理9查询课程2权限管理10输入教师3角色分配11修改教师4增加学生12查询教师5删除学生13输入成绩6查询学生14修改成绩7输入课程15查询成绩8修改课程16统计成绩17开课查询数据库的初始化RoleRight表roleIdrightIdroleIdrightId11211122121321324214252152621627217283929315210316317数据库的初始化系统现有帐户角色AccountRoleaccountIdroleId备注570121作为管理员0612873作为学生850122做为教务员数据库的初始化系统现有帐户AccountaccountIdpassword57012570120612870612878501285012学生输入用例的实现目录名:StudentManager实体类Student边界类InputStudentForm控制类StudentManagerAction,继承OleDbConn类学生管理publicclassStudent{publicstringno,name,sex,birthday,deptId;publicStudent(stringno,stringname,stringsex,stringbirthday,stringdeptId){this.no=no;=name;this.sex=sex;this.birthday=birthday;this.deptId=deptId;}}学生实体类输入学生的界面表达目的:信息采集窗体命名InputStudentForm所属院系comboBox,先将所有院系都加进去

数学系、物理系、化学系、电信学院、生命学院有什么漏洞?学生表中记录的是院系的代码,不是院系本身!!!软件的适应变更的能力如何?问题:如果学校的院系变更了?正确的处理方法:从数据库中得到院系/代码,初始化ComboBox控件的值这正好符合Hashtable数据结构数据结构Hashtable在System.Collections中存放键/值对,即一个键对应一个值Hashtableht=newHashtable();ht.Add("数学系","1360");ht.Add("物理系","1370");取值StringdeptId=(String)ht[(“物理系”];//得到”1370”//所有键/值对的遍历foreach(DictionaryEntrydeinht){StringdeptName=(string)de.Key;StringdeptId=(String)de.Value;}增加程序的适应性--提取院系代码列表publicstaticHashtablegetDeptList(){Hashtableht=newHashtable();stringsql="selectdeptId,deptNamefromDepartmentorderbydeptId";//读院系信息

OleDbCommandcmd=newOleDbCommand(sql,conn);try{conn.Open();OleDbDataReaderdbReader=cmd.ExecuteReader();while(dbReader.Read()){stringdeptId=dbReader["deptId"].ToString();stringdeptName=dbReader["deptName"].ToString();ht.Add(deptName,deptId);//以院系名字为键,院系代码为值,形成键/值对

}}…..Catchfinally….returnht;}窗体的Load方法—初始化院系下拉列表privatevoidInputStudentForm_Load(objectsender,EventArgse)//窗体的load事件{htDept=StudentManagerAction.getDeptList();//获得院系代码名称哈希表

//htDept是窗体类中定义的一个Hashtable对象cbDept.Items.Clear();foreach(DictionaryEntrydeinhtDept){cbDept.Items.Add((string)de.Key);//将院系名称追加到下拉列表中

}}“增加”按钮逻辑privatevoidbtnAdd_Click(objectsender,EventArgse){stringdeptId=(string)htDept[cbDept.Text];//以给定院系名称为键,得到其院系代码//根据下拉列表框cbDept的选择,从哈希表中找到院系的Id,htDept在窗体的Load事件中已经被初始化

Studentstudent=newStudent(tbNo.Text,tbName.Text,cbSex.Text,tbBirthday.Text,deptId);StudentManagerActionsma=newStudentManagerAction();sma.setStudent(student);//设定sma的学生属性

if(sma.save())//学生被保存成功了{//在保存成功的情况下,将学生信息写入列表中

ListViewItemli=newListViewItem();//生成一个表项

li.SubItems.Clear();li.SubItems[0].Text=tbNo.Text;//以下语句填充表项的内容

li.SubItems.Add(tbName.Text);li.SubItems.Add(cbSex.Text);li.SubItems.Add(tbBirthday.Text);li.SubItems.Add(cdDept.Text);lvStudentList.Items.Add(li);//将新表项追加到列表中

}}学生管理的控制类usingSystem.Data.OleDb;publicclassStudentManagerAction:DbConnection{privateStudentstudent;publicvoidsetStudent(Studentst){this.student=st;}publicboolsave()//把被管理的学生保存到数据库中。{stringsql="insertintotblStudent(studentNo,studentName,birthday,sex,deptId)values('"+student.no;//sql+="','"++"','"+student.birthday+"','"+student.sex;sql+="','"+student.deptId+"')";returnexecNonQuery(sql);}}学生控制类—负责保存学生信息如何形成嵌入式SQL语句设输入的数据为"王好","女","059012","1987-1-2",则sql语句的值为insertintotblStudent(studentName,studentNo,sex,birthday)Val

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论