软件工程课程设计报告
题 目:_____学生成绩管理系统____ 专业班级:___计算机系计科102班___ 姓 名:____________________
学 号:_____________ 同组姓名:______ ___________________ 成绩评定 指导教师: 目 录 年 月 日 第1章绪论 ........................................................................... 2 第2章系统分析 ....................................................................... 3 2.1系统目标 ........................................................................ 3 2.2功能要求 ........................................................................ 3 2.3可行性研究方法 .................................................................. 3 2.4系统可行性分析 .................................................................. 3 第3章需求分析 ....................................................................... 4 3.1引言 ............................................................................ 4 3.2任务概述 ........................................................................ 4 3.2.1编写目的 .................................................................... 4 3.2.2背景 ........................................................................ 4 3.3功能需求 ........................................................................ 4 3.3.1管理功能部分 ................................................................ 4 管理员功能 ..................................................................... 4 学生功能 ....................................................................... 4 3.4数据流图 ........................................................................ 5 3.5学生成绩管理系统逻辑结构图 ...................................................... 5 3.6用例 ............................................................................ 6 第4章概要设计 ....................................................................... 8 4.1设计目标 ........................................................................ 8 4.2编写目的 ........................................................................ 8 4.3任务概述 ........................................................................ 8 4.4总体设计 ........................................................................ 9
4.4.1系统设计思想 ................................................................ 9 4.4.2学生成绩管理系统顺序图 ..................................................... 10 4.5接口设计 ....................................................................... 11 第5章详细设计 ...................................................................... 12 5.1根本任务 ....................................................................... 12 5.2程序流程图 ..................................................................... 12 5.3详细设计说明 ................................................................... 14 第六章软件测试 ...................................................................... 16 第七章实验结果截图显示 .............................................................. 18 第八章程序源代码 .................................................................... 20 第九章实验总结 ...................................................................... 28 第十章参考文献 ...................................................................... 28
第1章绪论
随着互联网的发展,利用INTERNET技术来实现“无纸办公”这个概念已经深入人心,校园网作为学校信息化建设的一个平台在完成资源共享、互联网访问、教务管理、电子备课等方面发挥了重要作用。服务教学、提高教学水平和教学结果查询是校园网建设的核心目标和核心价值,本系统立足于校园实际,争取做出一个方便快捷的成绩管理系统,实现成绩信息的管理。该项目主要是服务于学生成绩管理方面,进一步方便教师的工作和学生的成绩查询,从而从侧面达到提高学校的管理质量。它具有使用范围广,实用性强,使用简单,所花经费少等优点。 主要功能有两个方面: 管理员,登陆,进入系统,可以进行管理员操作,进行学生信息及成绩信息的编辑、查询、删除、修改、添加、排序等操作。 学生,登陆,进入系统,可以进行查询等操作。 软件系统目标: (1)本系统具有很强的可靠行,可以对录入的学生信息进行效验,对数据进行修改、删除,规定各种权限。 (2)本系统中的模块具有很强的可续性,可以方便管理人员的修改与维护。 (3)本系统操作方便、灵活、简单。 (4)本系统可高效、快速的查询到学生的基本信息。
第2章系统分析
2.1系统目标
学生用户和管理员用户可以进入不同的管理模块,并且只有密码输入正确才能进入功能模块,学生用户只能查询学生信息,管理员用户可以对学生成绩实行各种操作。 2.2功能要求
1. 性能:学生成绩的增加、删除、修改,排序及查询 2. 输入:学生管理员密码 3. 输出:学生成绩信息 4. 基本的数据流程和处理流程: 管理员 事务 学生成绩管理系统 事务 学生 图2-1基本数据和处理流程 5. 安全与保密要求:登录系统时,需验证密码;不同身份的登录者,具有不同的使用权限。 2.3可行性研究方法 主要为对现有成绩管理系统的分析和研究比较的方法。 2.4系统可行性分析 可行性分析是为了清除的了解系统开发是否能够实际进行,是否能够带来一定效益,是否值得实现。因而进行可行性分析是非常必要的,从下面几个方面来进行分析。 1. 技术可行性:设置不同权限,提高了数据的安全性。 2. 运行可行性:本系统作为一个小型的学生成绩管理系统,所耗费的资源非常的小。已有软件和硬件配置均能满足需要。 3. 经济可行性:服务端及客户端的支出使用原有设备即可。但是对软件有一次性软件费用支出和定期性软件维护支出。软件使用后,能够减少人力的支出和维护。 4. 法律可行性:本软件属项目组开发,符合法律的各项规定。
5. 使用可行性:软件针对学校以及学院,对使用人员没有特殊限制,管理老师、学生等均可使用。
界面友好,操作简单,能够保证大多数用户使用该系统的要求。 2.5结论
通过可行性的一系列分析可得出结论,在现有的条件下,系统的开发方案是可行的。开发条件具备,可以开始进行实际开发。
第3章需求分析
3.1引言
随着互联网的发展,利用INTERNET技术来实现“无纸办公”这个概念已经深入人心,校园网作为学校信息化建设的一个平台在完成资源共享、互联网访问、教务管理、电子设备等方面发挥了重要作用。服务教学、提高教学水平和效果是校园网将设的核心目标和核心价值,本系统立足于校园实际,着眼于未来发展,实现信息资源的共享。该项目主要是服务于教学方面,进一步方便教师的工作和学生的学习,从而从侧面达到提高学校的教学方面的“软件”质量。
3.2任务概述 3.2.1编写目的 解决学校对学生信息进行处理时,对各种数据的需求,并且能够有助于学校方面对学生的管理。主要解决学生系你想查询困难等问题。确定学生信息管理系统功能的需求,数据需求及软、硬件需求。确定学生成绩管理系统所能实现的功能,本系统中主要是对数据进行操作,如学生信息及成绩的增加,删除,修改,查看,排序等功能。 3.2.2背景 这次待开发的系统名称为:学生成绩管理系统 本次项目任务的完成者:刘瑶、李纳、谢千玲、周石花 用户:管理老师,学生 3.3功能需求 3.3.1管理功能部分 从业务流程图可以看出,学生成绩挂历系统分为大的两个方面:管理员模块,学生模块,其主要管理功能有: 3.3.1.1管理员功能 管理员进入学生成绩管理的主要功能是:实现对学生信息及成绩的添加,删除,修改,查询和
排序等基本功能。
3.3.1.2学生功能
学生进入学生成绩管理系统的主要功能是:每个学生登录系统后可以查询自己的个人信息以及成绩信息,查询的时候可以通过姓名也可以通过学号查询,同时学生登录时需要密码。
3.4数据流图
图3-1数据流顶层图 图3-2数据流细化图
3.5学生成绩管理系统逻辑结构图
图3-3逻辑结构图
业务逻辑 数据存储 用户操作 学生成绩管理系统 3.6用例
主要参与者及用例表3-1 表3-1学生成绩管理系统用例表 参与者 管理员 学生 用例图
图3-4学生成绩系统用例图 3.7类图 图3-5类图的初步设计 用例编号 1 2 3 4 5 1 2 3 用例 登录 浏览信息 按成绩排序 查询 对学生成绩增、删、改 登录 浏览信息 查找成绩
第4章概要设计
4.1设计目标
概要设计师软件开发过程中的一个阶段就,在这个阶段需要完成一些明确的事情。概要设计阶段的基本目的是回答“概括的说,系统应该如何实现?”。通过这个阶段,确定系统的组成模块。本学生成绩管理系统由管理员、学生两个大模块组成。每个模块又由自己的子模块组成。
4.2编写目的 基于现在的学生越来越多,老师的工作量越来越大。伴随着网络信息化,学生成绩管理也必须迈进一个更加进步的时代。那就是用网络来管理学生成绩,实现一个电子管理学生成绩的平台,减轻老师的负担,也便利教务处的管理工作。在本系统中,学生可以选课,退课,查询成绩;老师在期中期末的时候给学生打分,并按百分比计算,提交之前可以修改学生的成绩;管理员可以对教师、学生、课程的信息进行增、删、查、改,并且可以发布公告,新闻。如果学生,教师,管理员想进入这个系统,必须先进行登录,新用户要注册,可以进行个人信息的维护,如密码的修改等。
4.3任务概述 4.3.1目标 (1)本系统具有很强的可靠行,可以对录入的学生的成绩,对学生成绩进行修改、删除,并且可以对学生成绩进行排序。 (2)本系统中的模块具有很强的可续性,可以方便管理人员的修改与维护。 (3)本系统操作方便、灵活、简单。 (4)本系统可高效、快速的查询到学生的基本信息。 4.3.2需求概述
学生成绩管理系统是为方便教师学生实时掌握成绩、课程等相关信息,学生可以方便快捷的查询自己的成绩而研发的系统,旨在大幅度节约教师和学生们时间,提升教务系统办事效率。
4.4总体设计
4.4.1系统设计思想 总模块软件结构
图4-1学生成绩管理系统主模块 学生成根据上面的需求分析,可以将这个系统分为以下模块:学生子模块和管理员子模块 绩管理 学生子模管理员子模删修学浏图4-2学生成绩管理系统层次图 除改生览学学成学生生绩生学生可以在该模块中查询自己的成绩成信排 成绩 息 序 绩 管理员可以再此模块中浏览学生的成绩,对学生的成绩信息进行管理,并且可以对学生的成绩进行排序。 4.4.2学生成绩管理系统顺序图 图4-3学生成绩信息顺序图 查询个表4-1模块功能 人学生子模块成 绩 管理员子模块 4.4.3学生成绩管理系统协作图 图4-4学生成绩信息协作图 4.4.4学生成绩管理系统状态图 图4-5学生成绩信息状态图 4.5接口设计 4.5.1外部接口与用户界面 在用户界面部分,根据需求分析的结果,用户需要一个用户友善界面。在界面设计上,应做到简单明了,易于操作,并且要注意到界面的布局,应突出的显示重要以及出错信息。外观上也要做到合理化,考虑到用户多对WINDOW风格较熟悉,应尽量向这一方向靠拢。在设计语言上,已决定使用VisualC++进行编程。总的来说,系统的用户界面应作到可靠性、简单性、易学习和使用。 4.5.2内部接口
内部接口方面,各模块之间采用函数调用、参数传递、返回值的方式进行信息传递。具体参数的结构将在下面数据结构设计的内容中说明。接口传递的信息将是以数据结构封装了的数据,以参数传递或返回值的形式在各模块间传输。
第5章详细设计
5.1根本任务
依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,具体来说就是把经过总体设计得到的各个模块详细的加以描述。
5.2程序流程图
1. 系统主程序流程图 图5-1主程序流程图 2. 学生登录模块 图5-2学生用户流程图 3. 管理员管理流程图 图5-3管理员管理流程图 4. 系统类图 图5-4成绩管理系统类图 5.3详细设计说明 管理模块包括以下内容: 界面设计 用户登陆:该系统根据用户的身份实现了不同的功能,用户登陆时需要选择一种登陆方式(默认情况下是学生),系统再根据用户选择的登陆方式到相应的表中去搜索。例如,登陆时选择了教师登陆方式,系统将会在教师信息表中搜索是否存在与该用户的输入相符的信息,如果存在则进入教师主页,否则提示用户输入有误,请重新输入。 学生用户界面 1.按照学号查找
学生可以查询自己指定的学号查询成绩,方便学生了解成绩情况。 2.按照学生姓名查找
学生可以查询自己指定姓名查询成绩,方便学生了解自身情况。
管理员界面 1.增加学生成绩
管理员可以增加某个学生的某门科目的成绩。 2.显示学生成绩
管理员可以显示所有学生所有科目的成绩。 3.排序统计成绩
管理员可以根据学生成绩进行排序和统计。 4.查找学生成绩 管理员可以查询某个学生的成绩。 5.删除学生成绩 管理员可以删除某个学生的成绩。 6.修改学生成绩 管理员可以修改学生的成绩。
第六章软件测试
测试用例设计
表6-1
用例编号 C001 测试对象 “学生登录”功能 用例目的 测试学生登录系统的功能是否正确实现 输入/动作 选择学生登录,输入错误密码 选择学生登录,输入密码,输入错误名字 选择学生登录,输入账号,输入密码,单击登录 表6-2 用例编号 C002 测试对象 “管理员登录”子系统界面 用例目的 测试管理员登录子系统界面的功能是否正确实现 输入/动作 选择管理员登录,输入错误密码 选择管理员登录,输入密码 预期输出/结果 提示“输入错误密码,请重新输入” 实际结果 提示“输入错误密码,请重新输入” 预期输出/结果 提示“输入错误密码,请重新输入” 提示“无法找到该学生” 进入学生登录子系统 实际结果 提示“输入错误密码,请重新输入” 提示“无法找到该学生” 进入学生登录子系统 进入管理员登录子系统 进入管理员登录子系统 观察界面是否正确显示显示“增加学生成绩”,显示“增加学生成绩”,操作按钮 “显示学生成绩”,“排“显示学生成绩”,“排序统计成绩”,“查找学序统计成绩”,“查找学生成绩,“删除学生成生成绩,“删除学生成绩”,“修改学生信息” 绩”,“修改学生信息” 表6-3
用例编号 C003 测试对象 “管理员登录”子系统增加学生成绩功能 用例目的 测试“管理员登录”子系统增加学生成绩功能是否正确实现 输入/动作 在“教师登录”子系统中选择增加学生成绩功能 表6-4 用例编号 C004 测试对象 “管理员登录”子系统排序统计学生成绩功能 用例目的 测试“管理员登录”子系统排序统计学生成绩功能是否正确实现 输入/动作 在“管理员登录”子系统中选择排序查询功能 表6-5 用例编号 C005 测试对象 “管理员登录”子系统显示学生成绩功能 用例目的 测试“管理员登录”子系统显示学生成绩功能是否正确实现 输入/动作 在“教师登录”子系统中选择显示学生成绩功能 预期输出/结果 显示所有学生的姓名和学号和各科成绩 实际结果 显示所有学生的姓名和学号和各科成绩 预期输出/结果 显示排序成功 实际结果 显示排序成功 预期输出/结果 显示要增加的学生的姓名和学号和各科成绩 实际结果 显示要增加的学生的姓名和学号和各科成绩
第七章实验结果截图显示
7.1代码运行之后的主界面 图7-1
7.2学生模块显示 图7-2 图7-3
7.3管理员模块显示 图7-4
第八章程序源代码
#include #include //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ classStudent { public: charname[20]; charId[20]; intCnum;//C++课程得分 intMnum;//汇编课程得分 intEnum;//嵌入式操作系统课程得分 intsum;//总分 Student*Next; voidInput() { cout<<\"\\请输入学生的姓名:\";cin>>name; cout<<\"\\请输入学生的学号:\";cin>>Id; cout<<\"\\请输入C++课程的成绩:\";cin>>Cnum; cout<<\"\\请输入汇编课程的成绩:\";cin>>Mnum; cout<<\"\\请输入嵌入式操作系统课程的成绩:\";cin>>Enum; sum=Cnum+Mnum+Enum; } voidReadFile(istream&in) {in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;} voidShow() { cout<<\"姓名:\"< public: Studentmassage(); ~Studentmassage(); voidShowMenu(); voidFind(); voidSave(); voidModifyItem(); voidRemoveItem(); voidSwap(Student*,Student*); voidSort(); intListCount(); voidDisplay() { for(Student*p=Head->Next;p!=End;p=p->Next) p->Show();cout<<\"输入任意字符!继续……\";getch(); } voidAddItem() { End->Input(); End->Next=newStudent; End=End->Next; cout<<\"添加成功!\"< if(!strcmp(p->Next->name,name))returnp; returnNULL; } Student*FindID(char*Id) { for(Student*p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空 if(!strcmp(p->Next->Id,Id))returnp; returnNULL; } }; //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ Studentmassage::Studentmassage() { Head=newStudent; Head->Next=newStudent; End=Head->Next; in.open(\"sort.txt\"); if(!in) cout<<\"这是一个新系统,无学生信息。请先输入。\"< while(!in.eof()) { End->ReadFile(in); if(End->name[0]=='\\0')break; End->Next=newStudent; End=End->Next; } in.close(); } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ Studentmassage::~Studentmassage() { Save(); for(Student*temp;Head->Next!=End;) { temp=Head->Next; Head->Next=Head->Next->Next; deletetemp; } deleteHead,End; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage::ShowMenu() { cout<<\"********************************************************************************\"< charname[20],Id[10]; intx; Student*p=NULL; cout<<\"\\n\\*********************************\\n\"; cout<<\"\\※1.按学生的姓名查找\\n\\※2.按学生学号查找\"; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage::ModifyItem()//修改信息 { charname[20]; Student*p=NULL; cout<<\"\\请输入要修改的人的姓名:\";cin>>name; if(p=FindItem(name)) { cout<<\"\\已找到学生的信息,请输入新的信息!\"< cout<<\"修改成功!\"< case1:{cout<<\"\\请输入要查找的学生的姓名:\";cin>>name; if(p=FindItem(name)) { p->Next->Show(); cout<<\"输入任意字符!继续……\"; getch(); } else { cout<<\"\\没有找到该姓名的学生!\"<<'\\n'< cout<<\"\\没有找到!\"< charname[20]; Student*p=NULL,*temp=NULL; cout<<\"\\请输入要删除的学生的姓名:\"< temp=p->Next; p->Next=p->Next->Next; deletetemp; cout<<\"\\删除成功!\"< Student*temp=newStudent; strcpy(temp->name,p1->name); strcpy(temp->Id,p1->Id); temp->Cnum=p1->Cnum; temp->Mnum=p1->Mnum; temp->Enum=p1->Enum; temp->sum=p1->sum; strcpy(p1->name,p2->name); strcpy(p1->Id,p2->Id); p1->Cnum=p2->Cnum; p1->Mnum=p2->Mnum; p1->Enum=p2->Enum; p1->sum=p2->sum; strcpy(p2->name,temp->name); strcpy(p2->Id,temp->Id); p2->Cnum=temp->Cnum; p2->Mnum=temp->Mnum; p2->Enum=temp->Enum; p2->sum=temp->sum; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌学生登录模块﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidstudent() { intk;cout<<\"请输入你的密码:\";cin>>k; if(k!=1) { do {cout<<\输入错误,请重新输入密码\";cin>>k; }while(k!=1); } } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌管理员登录模块﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidmanager() { intk; cout<<\"请输入你的密码:\"; cin>>k; if(k!=2) { do {cout<<\"输入错误,请重新输入密码\";cin>>k; }while(k!=2); } cout<<\"登录成功!\"; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ intStudentmassage::ListCount()//统计当前链表的记录总数,返回一个整数 { if(!Head)return0; intn=0; for(Student*p=Head->Next;p!=End;p=p->Next) {n++;}returnn; } //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ voidStudentmassage::Sort()//对当前链表进行排序 { cout<<\"Sorting...\"< if(n<2) return; for(p=Head->Next;p!=End;p=p->Next) for(k=p->Next;k!=End;k=k->Next) { if(p->sum>k->sum) {Studentmassage::Swap(p,k);} } cout<<\"排序完成!\"< out.open(\"sort.txt\"); for(Student*p=Head->Next;p!=End;p=p->Next) out< //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌ intmain() { intx,i,j; boolquit=false; StudentmassageGrade; cout<<\"\\§§§§§§§§§§§§§§§§§§§§§§§§§§\"< case0:{ student(); Grade.Find(); }break; case1: manager(); while(!quit) { system(\"cls\"); } Grade.ShowMenu(); cin>>x; switch(x) { case0:quit=true;break; case1:Grade.AddItem();break; case2:Grade.Display();break; case3:Grade.Sort();break; case4:Grade.Find();break; case5:Grade.RemoveItem();break; case6:Grade.ModifyItem();break; } }break; }return0; 第九章实验总结 此次课程设计,我们小组根据老师所给的选题,我们选择的是学生成绩管理系统。小组根据讨论然后分工进行系统分析、需求分析、概要设计和详细设计。之后总结各自的分析设计,进行代码的编写,修正。第一次的代码运行结果就只是对成绩的添加、删除、修改和查询,之后再根据选题的要求将学生、管理员模块添加进去,再添加密码和在管理远程序中按照学生的成绩进行了排序。 通过这次的课程设计对系统的分析,我对软件工程有了进一步层次的了解,也让我意识到只有通过实践,才能真正理解计算机很多课程所叙述的内容,才能真正的去把握这门课程,操作是计算机这门学科必不可少的一门环节。同时我也认识到了团结的重要性,一个人的力量是有限的,一个人的精力也是有限的,只有通过合作才能更快更好的完成任务。 第十章参考文献 1、《软件工程导论》——张海藩编着清华大学出版社 2、《uml基础与Rose建模》——谢星星编着清华大学出版社 3、《数据结构》——严蔚敏吴伟民编着清华大学出版社 因篇幅问题不能全部显示,请点此查看更多更全内容