学生成绩管理系统详细设计说明书.docx
《学生成绩管理系统详细设计说明书.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统详细设计说明书.docx(19页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统详细设计说明书
南京航空航天大学自动化学院
学生成绩管理系统详细设计说明书
课程名称:
软件工程大作业
专业:
自动化
班级:
0311103
学号:
031110334
姓名:
王欢
2013年11月
目录
1引言3
1.1编写目的3
1.2背景3
1.3定义3
1.4参考资料3
2总体设计3
2.1软件结构4
2.2学生成绩管理系统函数调用说明5
3程序描述6
3.1各模块介绍6
3.1.1功能6
3.1.2性能6
3.1.3输人项6
3.1.4输出项6
3.1.5算法6
3.1.6程序逻辑6
3.1.7局部数据结构6
3.1.8接口6
3.1.9存储分配6
3.1.10限制条件6
3.1.11测试要点6
详细设计说明书
1引言
1.1编写目的
在完成软件开发前期工作,结合之前的该系统的需求分析报告,并与程序使用者进行深入地探讨和分析的基础上,项目小组提出了这份详细设计说明书,此设计说明书对《学生成绩管理系统》软件的功能分配,模块划分,程序的总体结构,输入输出和接口设计,运行设计,数据结构设计及出错设计等方面做了全面的概括性的说明,为软件详细设计奠定了一定的基础,同时作为系统分析员工作的阶段性总结和程序员进行开发和未来测试开发的重要文档资料。
1.2背景
说明:
1)待开发系统软件名称:
学生成绩管理系统;
2)本项目的任务提出者是计算机软件技术基础老师,由王欢、李阳阳、黄志鹏组成的项目小组负责开发。
由于本次为课程设计,故无用户。
运行该程序系统的计算机中心为南京航空航天大学将军路校区计算中心。
1.3定义
学生成绩管理:
对课程名和课程数目初始化,对学生的基本信息、课程选择、成绩的录入、修改、查询等一系列的操作。
1.4参考资料
[1]张志航等,《程序设计语言—C》,清华大学出版社,2008
[2]万晓冬等,《软件技术基础教程》,南京航空航天大学内部讲义,2009
2总体设计
2.1软件结构图(数据流向:
自顶向下)
学生成绩管理
密码文件
教师登录界面
学生登录界面
帮助信息
退出
修改模块
输出模块
查询模块
输入模块
初始化课程信息
删除记录
修改记录
从键盘输入
从文件导入
增加记录
排
序
统计
查
找
导出到文件
输出到屏幕
统计分数段
名次排序
班级排序
查找学生学号
密码文件
导出到文件
修改密码
导出到文件
课程名称和数目
班级平均分
输出模块
2.2学生成绩管理系统函数调用说明
初始化课程名changecourse()
创建链表,完成数据录入功能create()
计算每个学生的总成绩和平均成绩TotalScore()
交换两个整型数IntegerSwap()
交换两个实型数FloatSwap()
交换两个字符串CharSwap()
对学生成绩排序.并确定名次SortScore()
调用函数:
FloatSwap、CharSwap()
函数功能是对班级排序SortClass()
调用函数:
FloatSwap、CharSwap()
班级平均分报表ClassAver()
调用函数:
SortClass()、
按学号插入一个结点数据InsertStudent()
调用函数:
TotalScore(p)
显示所有已经建立好的节点的节点号和该节点中数据项内容PrintScore()
按学号查找并显示找到的结点数据SearchStudent()
按学号查找并修改一个结点数据ModifyStudent()
调用函数:
TotalScore();
按学号查找并删除一个结点数据DeleteStudent()
保存数据到文件模块SaveToFile()
加载存储在外部介质的文件到内存或导入信息模块LoadFromFile()
显示帮助信息和系统信息help()、help_student()
登录密码验证PassWord()、PassWord_student()
函数功能:
得出不及格学生的信息以及人数fail()
得出及格学生的信息以及人数pass()
得出中等学生的信息以及人数medium()
得出良好学生的信息以及人数good()
得出优秀学生的信息以及人数excellent()
显示分数段的菜单grade()
调用函数:
fail();pass();medium();good();excellent();
显示科目的菜单subjects()
调用函数:
grade();
显示输出项的菜单select_print()
调用函数:
SortScore()、PrintScore();ClassAver();subjects();
显示菜单并获得用户键盘输入的选项menu_select()、menu_select_student()
显示Hellowelcome()
3程序描述
登录模块
(1)功能:
实现用户进入操作界面必须输入正确密码方能进入;
(2)性能:
该模块性能良好,能够较准确的实现输入密码的功能
(3)输入项:
输入密码
(4)输出项:
密码正确;密码错误,请重新输入;输入密码超过三次,自动退出;
(5)算法:
循环算法
(6)
程序逻辑:
其流程图的表现形式如下:
F
修改课程信息模块
(1)功能:
为了通用客户使用,使本学生成绩管理系统适用于其它课程的学生成绩管理。
该模块在程序首次打开时,更改课程名。
默认情况下课程名依次为:
“自控"”,“软件”,“电机”,“数电”,“模电”。
(2)性能:
该模块通用性较好,内部函数简单。
(3)输入项:
输入的数据是用户修改的课程名。
(4)输出项:
输出的数据是用户修改的课程名
开始
(5)算法:
循环输入
(6)程序逻辑:
输入课程数目:
NUM
i=1
N
iY
输入课程名
存入磁盘
结束
(7)局部数据结构:
一个全局变量的字符串数组
(8)接口:
subject[i]
(9)存储分配:
本模块采用一个全局变量的字符串数组来存储课程名。
其他模块需要调用时,可直接调用,不用再定义。
(10)限制条件:
输入课程数目是固定的,为5门。
如若想实现较少课目的管理,只需其他课程名输入OOOO作为标记,并且输入成绩时记其课程分数为0.00。
如若想增加统计课程的数目,很难实现,需要修改源程序。
(11)测试要点:
打开该系统后,选择菜单:
“9.修改课程名称”。
分别输入需要的课程名后者课程号后,再创建学生数据。
创建学生数据模块
功能:
创建链表,输入学生学号,姓名,班级,成绩。
计算学生成绩总分和平均分。
输入项:
学生学号,姓名,班级,各科成绩。
输出项:
学生学号,姓名,班级,各科成绩,以及总分和平均分。
算法:
顺序,循环
程序逻辑:
T
局部数据结构:
单链表
接口:
学生学号
存储分配:
静态
限制条件:
学号格式正确
测试要点:
输入不同学生信息
查询学生数据模块
功能:
根据学生学号查询学生成绩
输入项:
学号
输出项:
学生学号,姓名,班级,各科成绩,总分,平均分,排名
算法:
顺序查找
程序逻辑
T
局部数据结构:
单链表
接口:
学生学号
存储分配:
静态
限制条件:
学号格式正确
测试要点:
输入链表中存在和不存在的学号
修改学生数据模块
功能:
输入学生学号,修改此学生的信息
输入项:
学号
输出项:
学生学号,姓名,班级,各科成绩,总分,平均分,排名
算法:
顺序查找
程序逻辑
T
局部数据结构:
接口:
学生学号
存储分配:
静态
限制条件:
学号格式正确
测试要点:
输入学号,修改信息,输出信息。
删除学生数据模块
功能:
输入学生学号,并删除该学生
输入项:
学号输出项:
无
算法:
顺序查找
程序逻辑:
F
局部数据结构:
单链表
接口:
学号
存储分配:
静态
限制条件:
学号格式正确
测试要点:
输入要删除的学生学号,并输出所有学生信息。
插入学生数据模块
(1)功能:
按学号插入一个结点数据
(2)性能:
该模块可以使用户插入一条数据,然后返回到主菜单。
当用户输入的学号和班级格式不正确时,程序会报错。
(3)输入项:
输入的数据是用户插入的学生数据。
(4)输出项:
下一步的输入提示信息
(5)算法:
先查找到插入位置,再插入
(6)程序逻辑:
开始
定义1个插入结点、1个指向前一个结点指针、1个指向插入位置的结点,1个用于排序的结点指针
N
!
p
Y
返回到空指针
p->next=NULL
输入学号
学号正确
N
重新输入
Y
输入班级
循环输入成绩
调用TotalScore函数计算总成绩和平均分
N
降序,byp1寻插入位置
Y
将p1作为p的后一个结点
p作为尾结点,p->next=NULL
N
head==p1
Y
p2->next=p,p插入到p2,p1之间
head=p,k=head
N
k!
=NULL
Y
n++;k->order=n;k=k->next;
结束
return(head)
(7)局部数据结构:
结构体
(8)接口:
数据链表的头指针。
(9)存储分配:
本模块采用需要在内存中申请一个结构体结点地址,来存储学生数据。
(10)限制条件:
每次只能插入一条数据,如若再想插入,需再选择菜单里面的插入功能。
(11)测试要点:
打开该系统后,选择菜单:
“2.插入学生数据。
输入错误的学号和错误的班级检查是否有报错提醒,输入正确的数据,查看是否插入到链表。
存取学生数据模块
(1)功能:
保存数据到文件模块
(2)性能:
该模块可以将用户创建的链表信息输出到磁盘文件
(3)输入项:
输入的数据是保存的文件名。
(4)输出项:
下一步的输入提示信息。
开始
(5)算法:
利用文件指针和函数
(6)程序逻辑:
FILE*fp,移动指针
N
打开
Y
return
等待信息
p=head
N
打开
Y
fprintf(........)
return
结束
(7)局部数据结构:
单链表
(8)接口:
数据链表的头指针。
(9)存储分配:
本模块采用需要在磁盘中建立一个文本文件,来存储学生数据。
(10)限制条件:
路径只能是执行程序的文件夹,路径是固定的。
(11)测试要点:
打开该系统后,选择菜单:
“7.存取学生数据”看是否能够创建一个txt文档,并且没有乱码,每行一条数据。
读取学生数据模块
(1)功能:
读取磁盘中文档中的信息,并输出到屏幕。
(2)性能:
该模块可以将用户保存在磁盘的文档读取出来。
只能读取对应格式的文档。
(3)输入项:
输入的数据是读取的文件名。
(4)输出项:
下一步的输入提示信息和文件中的信息。
开始
(5)算法:
利用文件指针和函数。
(6)程序逻辑:
FILE*fp,移动指针
输入文件名
N
打开
打开
Y
return
等待信息
申请空间
Y
!
p
N
h=p
内存溢出
N
!
feof(fp)
return
Y
N
读到数据
结束
q->next=NULL,fclose(fp),returnh
保存当前节点,指针后移
Y
break
(7)局部数据结构:
单链表
(8)接口:
数据链表的头指针。
(9)存储分配:
本模块需要在磁盘中读取一个文本文件,在内存中来存储学生数据。
(10)限制条件:
只能是指定的文档和固定的格式。
(11)测试要点:
打开该系统后,选择菜单:
“8.加载学生数据”看是否能够加载一个txt文档,并且能正常显示数据。
输出学生数据模块
(1)功能:
显示1.名次排序报表2.班级排序报表3.班级平均分报表4.统计分数段。
(2)性能:
该模块可以将各种数据输出到屏幕,但是。
(3)输入项:
输入的数据是菜单选项。
(4)输出项:
用户执行的相关操作的结果输出到屏幕上。
(5)算法:
冒泡法排序,if、while、for、switch语句。
(6)程序逻辑:
开始
输入菜单选项
N
1--4
Y
SortScore();
Subjects()
ClassAver();
SortClass();
PrintScore();
SortScore();
PrintScore();
存入磁盘
存入磁盘
存入磁盘
存入磁盘
结束
(7)局部数据结构:
单链表
(8)接口:
数据链表的头指针和标记字符,字符为0,执行学生成绩及排名;字符为1,执行班级排序报表。
(9)存储分配:
本模块采用需要在内存中申请一个结构体结点地址,来存储学生数据。
(10)限制条件:
1、若系统内含有相同学号的学生记录,系统不会报错。
2、报表只能显示在屏幕上,并不能输出成文本文件到磁盘。
(11)测试要点:
打开该系统后,选择菜单:
“3.输出学生数据”输入数据,然后测试输入错误的学号或者班级格式是否报错。
包含的子函数:
1:
成绩求和
(1)功能:
实现将各科成绩求和的功能;
(2)性能:
该模块性能良好,能够较准确的实现各科的成绩求和;
(3)输入项:
各科成绩
(4)输出项:
各科成绩总和
(5)算法:
循环算法
(6)程序逻辑:
i=i+1
(7)局部数据结构:
单链表
(8)接口:
(9)存储分配:
(10)限制条件:
各科成绩
(11)测试要点:
分别给各科成绩辅助,查看输出结果是否为成绩之和。
2:
按总成绩排序
功能:
对学生的总成绩进行排序操作;
性能:
该模块性能良好,能够较准确的实现学生成绩的排序;
F
输入项:
各同学成绩
输出项:
按成绩降序排序
算法:
程序逻辑:
如图
备注:
CharSwap()
FlotSwap()IntegerSwap()
分别表示交换两个字符型
、两个实数型和两个整型。
局部数据结构:
单链表;
接口:
存储分配
限制条件:
各同学班级;
测试要点:
输入若干学生
信息,查看输出结果是否
按班级班号升序排列。
3:
班级平均分报表
功能:
计算各班级所有
同学的平均总成绩;
性能:
该模块性能良好,能够较准确的实现学生平均分计算;
T
输入项:
输出项:
算法:
程序逻辑:
局部数据结构:
单链表;
接口:
存储分配
限制条件:
各同学分数;
测试要点:
输入不同班级不同学生各科成绩,查看输出结果是否为学生各科成绩。
3.12测试计划
白盒测试
1)数据库连接正常时:
输入合理合法参数、输入参数不合理、输入参数不合法
2)数据库连接异常;数据库数据异常