




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华北电力大学软件工程实验报告一、实验目的本次实验旨在通过实际操作和实践项目,加深对软件工程概念、方法和流程的理解,提高软件开发过程中的需求分析、设计、编码、测试等各项能力,培养团队协作精神和解决实际问题的能力。二、实验环境操作系统:Windows10开发工具:VisualStudio2019编程语言:C三、实验内容与步骤(一)需求分析1.确定项目背景以一个简单的学生信息管理系统为例,该系统主要用于学校对学生的基本信息、课程成绩、考勤记录等进行管理,方便教师和管理人员进行查询、修改、添加等操作。2.收集需求通过与教师、学生和管理人员进行交流,获取以下需求:学生信息包括学号、姓名、性别、出生日期、专业等。课程成绩记录学生的课程编号、课程名称、成绩。考勤记录包括考勤日期、课程编号、学生学号、考勤状态(出勤/缺勤)。系统应具备学生信息的添加、修改、删除功能。能够根据学生学号或姓名查询学生的详细信息。可以按课程编号查询该课程的所有学生成绩。能够统计学生的总成绩和平均成绩。支持考勤记录的录入和查询。(二)系统设计1.总体架构设计采用分层架构,分为表示层、业务逻辑层和数据访问层。表示层:负责与用户交互,显示系统界面,接收用户输入并传递给业务逻辑层。业务逻辑层:处理业务规则和逻辑,对数据进行验证和处理,调用数据访问层进行数据操作。数据访问层:负责与数据库进行交互,实现数据的增删改查等操作。2.数据库设计使用SQLServer2019创建数据库,设计以下表:Students:存储学生基本信息,字段包括StudentID(学号)、Name(姓名)、Gender(性别)、BirthDate(出生日期)、Major(专业)。Courses:存储课程信息,字段包括CourseID(课程编号)、CourseName(课程名称)。Scores:存储学生课程成绩,字段包括StudentID(学号)、CourseID(课程编号)、Score(成绩)。Attendances:存储考勤记录,字段包括AttendanceID(考勤记录编号)、AttendanceDate(考勤日期)、CourseID(课程编号)、StudentID(学号)、AttendanceStatus(考勤状态)。通过设置主键和外键建立表之间的关系,确保数据的完整性和一致性。(三)编码实现1.数据访问层(DAL)使用ADO.NET技术实现数据访问层。创建类库项目,定义数据访问接口和实现类。例如,对于Students表的操作,定义接口IStudentDAL:```csharppublicinterfaceIStudentDAL{List<Student>GetAllStudents();StudentGetStudentByID(intstudentID);voidAddStudent(Studentstudent);voidUpdateStudent(Studentstudent);voidDeleteStudent(intstudentID);}```实现类StudentDAL:```csharppublicclassStudentDAL:IStudentDAL{privatestringconnectionString="your_connection_string";publicList<Student>GetAllStudents(){List<Student>students=newList<Student>();using(SqlConnectionconnection=newSqlConnection(connectionString)){stringquery="SELECT*FROMStudents";SqlCommandmand=newSqlCommand(query,connection);connection.Open();SqlDataReaderreader=mand.ExecuteReader();while(reader.Read()){Studentstudent=newStudent{StudentID=(int)reader["StudentID"],Name=(string)reader["Name"],Gender=(string)reader["Gender"],BirthDate=(DateTime)reader["BirthDate"],Major=(string)reader["Major"]};students.Add(student);}}returnstudents;}//其他方法实现类似}```2.业务逻辑层(BLL)创建业务逻辑层项目,调用数据访问层实现业务逻辑。例如,对于学生信息管理的业务逻辑类StudentBLL:```csharppublicclassStudentBLL{privateIStudentDALstudentDAL;publicStudentBLL(IStudentDALstudentDAL){this.studentDAL=studentDAL;}publicList<Student>GetAllStudents(){returnstudentDAL.GetAllStudents();}publicStudentGetStudentByID(intstudentID){returnstudentDAL.GetStudentByID(studentID);}publicvoidAddStudent(Studentstudent){//可以添加数据验证逻辑studentDAL.AddStudent(student);}publicvoidUpdateStudent(Studentstudent){studentDAL.UpdateStudent(student);}publicvoidDeleteStudent(intstudentID){studentDAL.DeleteStudent(studentID);}}```3.表示层(UI)使用WindowsForms创建用户界面。设计主窗体,包含菜单和各个功能模块的子窗体,如学生信息管理窗体、成绩查询窗体等。在主窗体加载时,初始化业务逻辑层对象:```csharpprivatevoidMainForm_Load(objectsender,EventArgse){IStudentDALstudentDAL=newStudentDAL();StudentBLLstudentBLL=newStudentBLL(studentDAL);//可以进行一些数据初始化操作,如加载所有学生信息到列表框}```在学生信息管理子窗体中,实现添加、修改、删除学生信息的功能按钮点击事件:```csharpprivatevoidbtnAddStudent_Click(objectsender,EventArgse){Studentstudent=newStudent{Name=txtName.Text,Gender=cmbGender.SelectedItem.ToString(),BirthDate=Convert.ToDateTime(dtpBirthDate.Value),Major=txtMajor.Text};StudentBLLstudentBLL=newStudentBLL(newStudentDAL());studentBLL.AddStudent(student);//刷新学生信息列表}privatevoidbtnUpdateStudent_Click(objectsender,EventArgse){Studentstudent=newStudent{StudentID=Convert.ToInt32(txtStudentID.Text),Name=txtName.Text,Gender=cmbGender.SelectedItem.ToString(),BirthDate=Convert.ToDateTime(dtpBirthDate.Value),Major=txtMajor.Text};StudentBLLstudentBLL=newStudentBLL(newStudentDAL());studentBLL.UpdateStudent(student);//刷新学生信息列表}privatevoidbtnDeleteStudent_Click(objectsender,EventArgse){intstudentID=Convert.ToInt32(txtStudentID.Text);StudentBLLstudentBLL=newStudentBLL(newStudentDAL());studentBLL.DeleteStudent(studentID);//刷新学生信息列表}```(四)测试1.单元测试使用NUnit框架对数据访问层和业务逻辑层进行单元测试。例如,对StudentDAL的GetAllStudents方法进行测试:```csharp[TestFixture]publicclassStudentDALTest{privateStudentDALstudentDAL;[SetUp]publicvoidSetup(){studentDAL=newStudentDAL();}[Test]publicvoidTestGetAllStudents(){List<Student>students=studentDAL.GetAllStudents();Assert.Greater(students.Count,0);}}```对StudentBLL的GetStudentByID方法进行测试:```csharp[TestFixture]publicclassStudentBLLTest{privateStudentBLLstudentBLL;[SetUp]publicvoidSetup(){studentBLL=newStudentBLL(newStudentDAL());}[Test]publicvoidTestGetStudentByID(){intstudentID=1;Studentstudent=studentBLL.GetStudentByID(studentID);Assert.NotNull(student);}}```2.集成测试对表示层、业务逻辑层和数据访问层进行集成测试。通过操作界面,检查各个功能模块是否能够正常协同工作。例如,在学生信息管理界面添加一条学生信息后,检查数据库中是否正确插入数据,以及能否通过其他功能模块查询到该学生信息。3.系统测试进行系统测试,模拟实际使用场景,对整个系统的功能、性能、兼容性等方面进行全面测试。检查系统在多用户并发操作下的稳定性,以及在不同操作系统和浏览器环境下的运行情况。四、实验结果与分析(一)功能实现情况1.通过开发,系统基本实现了需求分析阶段确定的各项功能,包括学生信息的增删改查、课程成绩查询、考勤记录录入和查询、学生总成绩和平均成绩统计等。2.在界面设计上,各个功能模块布局合理,操作方便,用户体验较好。(二)测试结果1.单元测试通过,数据访问层和业务逻辑层的各个方法在测试环境下能够正确运行,返回预期结果。2.集成测试表明,表示层与业务逻辑层、数据访问层之间能够有效协作,功能模块之间的数据传递和交互正常。3.系统测试过程中发现了一些小问题,如在多用户并发操作时,偶尔会出现数据冲突的情况。经过排查,发现是数据库事务处理不够完善导致的。通过增加事务控制,问题得到解决,系统在并发环境下的稳定性得到提高。(三)性能分析1.在数据量较小的情况下,系统响应速度较快,各项操作能够及时完成。2.随着数据量的增加,查询操作的性能有所下降。通过对数据库查询语句进行优化,建立合适的索引,性能得到了一定程度的提升。五、总结与体会(一)总结本次
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冠状动脉造影及支架植入术
- 2-6逻辑运算的公式
- 原发性肝癌患者护理查房 2
- 上海市浦东新区浦东2025年招生伯乐马模拟考试(三)生物试题含解析
- 山西财经大学华商学院《中外设计史》2023-2024学年第二学期期末试卷
- 上海海关学院《数理统计理论与方法》2023-2024学年第一学期期末试卷
- 新疆伊宁市第七中学重点达标名校2025年高中毕业班零诊模拟考试英语试题含答案
- 山西警官职业学院《药物分离工程》2023-2024学年第一学期期末试卷
- 九江理工职业学院《影视专业英语》2023-2024学年第一学期期末试卷
- 南京师范大学泰州学院《电气安全》2023-2024学年第二学期期末试卷
- IEEE-30节点全套数据2
- 施工现场安全隐患检查表
- 数学-山东省名校考试联盟2023-2024学年高一下学期5月期中检测试题和答案
- 敦煌的艺术-知到答案、智慧树答案
- 2024糖尿病酮症酸中毒诊断和治疗课件
- 妊娠期糖尿病产后护理
- 老挝万象钾矿百万吨级规模氯化钾开发项目可行性分析研究的开题报告
- 编辑打印新课标高考英语词汇表3500词
- 2023年湖南省烟草专卖局(公司)真题
- 22G101基础平法识图与钢筋计算
- 2024年专升本考试-专升本考试(机械设计基础)笔试历年真题荟萃含答案
评论
0/150
提交评论