学生学籍管理系统设计毕设_第1页
学生学籍管理系统设计毕设_第2页
学生学籍管理系统设计毕设_第3页
学生学籍管理系统设计毕设_第4页
学生学籍管理系统设计毕设_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

PAGEi软件工程课程设计报告系统名称___学生学籍管理系统___学号_____姓名___XXX__批次___XXX_PAGEII摘要当今社会中,计算机的使用已经深入到日常工作和生活的方方面面。Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了多如牛毛的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。我们都知道,对于学生的学籍管理是一个教育单位不可缺少的部分,它的内容对学校的管理者来说至关重要,所以学生学籍管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。而使用计算机对学生学籍信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、存储量大、保密性好等。这些优点能够极大地提高学生管理的效率,也是学校科学化、正规化管理的重要途径。关键词:学生学籍管理系统;SQLSERVER2000;数据库;软件工程

序言学生学籍管理系统是常见的一种管理系统,包括学生信息、家庭信息、奖惩信息、毕业信息,学生社会关系,学生成绩管理和学生课程信息管理等内容的设计。由于目前的学生学籍管理系统并不十分完善,在高等学校的教务管理工作中,学生信息的网上查询都是十分复杂、棘手的工作。遵从以往的工作方式,该工作的工作量大,管理繁琐,既耗人力,又耗物力;如今面对大量的学生数据、报表,手工处理方式已经很难跟上现代化的步伐。随着计算机技术及网络通讯技术的飞速发展,许多学校已经有了较好的计算机应用甚至网络硬件建设基础。因此为提高学校管理工作的现代化、科学化水平,保证信息处理的即时化、准确化,开发一套对学生学籍进行管理的软件是极其重要的,而且是必需的。

本系统正是为解决这一问题而设计的,大大减少了以往学生管理工作的工作量,提高了工作效率,适应时代的步伐。。PAGE511、可行性分析1.1问题描述随着高校规模的不断增加,学生人数的增加,学校对学生管理的难度也越来越大,而学校对学生的管理,其实主要是对学生信息的管理,所以,学生信息管理是高校管理中很重要的一部分,它关系到整个高校的现代化程度。现代科技的发展,尤其是软件行业的发展使得很多的管理工作都由计算机来完成,这样不仅能节省人力和物力,而且能够得到一些对决策起重要作用的信息。而高校作为一个人数比较多的单位,也需要开发出相应的软件对学生学籍进行适当的管理。只有管好学生才能更进一步的做强教育。现在很多高校都在使用计算机对学生学籍进行管理,运用计算机来管理学生学籍,从而取代了人工管理模式下由于各种原因出现管理漏洞的可能性,因而减少了工作人员的难度性,提高了工作效率。我们在现行系统初步调查的基础上提出了新系统目标,即新系统建立后所要求达到的运行指标,这是系统开发和评价的依据。1.2可行性分析研究1.2.1技术可行性技术上的可行性分析主要分析现有技术条件能否顺利完成开发工作,硬、软件配置能否满足开发者需要等。根据客户提出的系统功能、性能及实现系统的各项约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。1.2.2经济可行性主要是对开发学籍管理系统的高校资金进行评价,一方面是估算开发它的支出费用,其中包括设备购置费、软件开发费、管理和维护费、人员工资和培训费等。另一方面是估算学籍管理系统这个软件可能取得的收益中可以用钱来衡量的那部分。并对目前的软件市场进行调查,所做软件是否有很大的销售市场和相当规模的用户群。所做软件的开发成本与客户提出的要求是否可达到双方都满意。并且,分析系统开发是否会对其它产品或利润带来一定影响。经过调查我们了解到,现在很多高校都在寻找功能更加齐全的管理系统来取代旧系统,而且这个软件带来的收益远远超过它的开发所花费的代价。经过对上述几个方面的调查研究和分析,我们得出高校这个软件的市场前景是相当客观的,在经济角度来说,开发学生学籍管理是可行的。1.2.3操作可行性主要是了解高校学籍管理的相关人员对开发信息系统是否支持,现有高校学籍管理制度和方法是否科学,规章制度是否齐全,原始数据是否正确等。高校学籍管理人员积极支持该系统开发,使新系统能够充分的发挥作用;系统界面友好美观,操作简单易行,易于理解,功能更加齐全。由于管理人员已经在使用旧系统,对计算机的简单操作已经非常熟悉,所以操作者经过短时间的培训就可以使用高校学籍管理系统。1.3结论意见经过认真地全面地可行性研究,系统基本上做到了在技术、经济、运行、法律上的可行。因此,相信在按照计划上实施的前提下,全系统的设计将会按时、高质量完成。所以,系统研制和开发是可以马上进行的。2、项目开发计划2.1编写目的经过项目的可行性分析,得出项目可进一步进行下去的结论,结合现有的软件开发技术,在软件继续进一步的开发之前首先给出此软件项目计划。2.2项目背景项目分析单位在接到项目分析员给出的项目可行性分析报告后,在本系统,即仓库管理系统开发主管部门的统一下制定用于软件实质开发的软件项目计划,以使软件开发单位理解软件开发要求,进行开发。2.3项目概述1、工作内容让计算机对学生信息进行自动管理,管理员可以直接在计算机上实现学生信息管理,并能在一定程度上实现自动化。2、条件与限制开发该软件的条件比较简单,以开发单位目前的经济与技术条件已完全具备开发的条件。该系统可在用户要求的期限内完成。3、产品1)程序具体程序和源代码在文件夹源代码中。2)文档文档内容包括:(1)封面

(2)目录

(3)中文摘要100字左右;关键词3-5个

(4)序言

(5)可行性分析

(6)项目开发计划

(7)需求规格说明(包含需要的系统流程图、数据流程图、数据字典、E-R图)

(8)概要设计(包含总体软件结构图、总体数据结构)

(9)详细设计(对概要设计内容进行详细设计)

(10)设计总结、参考文献、致谢等4、验收标准软件的验收标准完全由用户提出的软件需求制定,能保证软件的基本符合用户的要求。2.4项目开发计划1、任务分解分三个大的阶段进行开发第一阶段完成本系统的数据流图跟E-R图。第二阶段完成概要设计跟详细设计。第三阶段书写文档。

2、预算软件资金投入较少,具体预算分配简略。3、关键问题各模块之间的联系和后台数据库的完成。使用目前的设备与现有开发技术完全可以开发出该系统,总的来说该项目没有较大的技术难点与其他的一些风险因素。对于出现的一些小难点总都能得到解决。3、需求分析3.1任务需求分析经需求分析,所得本系统所实现的基本功能,如图3.1思维图所示:图3.1学生学籍管理系统上图为本系统所完成功能的一个基本信息图。用户可通过本软件,对学生的在校情况信息有一个清晰的了解,帮助用户查询和修改学生的相关信息,从而对学生实现信息化的管理。经分析先给出该系统的系统流程图,如图3.2所示:学生课程信息学生课程信息学生成绩管理学生成绩管理用户用户登录读取用户类型管理自己的信息管理普通用户信息学生基本信息学生社会关系学生奖惩信息学生毕业信息帮助用户管理模块开始图3.2系统流程图重新输入失败成功普通用户管理员该系统主要包括学生基本信息模块,家长信息模块,奖惩信息模块和毕业信息模块,系统要实现基本信息录入、修改、删除、保存和查询等功能:信息的输入,包括学生基本信息、家长信息、奖惩信息、毕业信息等。信息的修改、删除。根据要求,查询符合条件的各类信息。依据实际需要,对重要新信息进行统计。3.2数据流图、数据字典及实体联系图3.2.1数据流图数据流图由四种基本的元素构成:数据流(DataFlow),处理(Process),数据存储和数据源(数据终点)。数据流(DataFlow):为具有名称且有流向的数据,用标有名称的箭头表示,一个数据可以是记录、组合项或基本项。处理(Process):表示对数据所进行的加工和变换,在图中用矩形框表示。指向处理数据流为该处理的输入数据,离开处理的数据为处理的输出数据。数据存储:表示用文件方式或数据库形式所存储的数据,堆砌进行的存取分别以指向或离开数据存储的箭头表示。数据源及数据终点:表示数据的来源或数据的去向,可以是一个组织或人员,它处于系统范围之外,所以又称它为外部实体,它是为了帮助理解系统界面而引入的,一般只出现在数据流图的起点和终点。该系统数据流图如图3.3所示:管理员接受信息更新系统信息1学生信息处理事务用户管理员接受信息更新系统信息1学生信息处理事务用户信息信息信息查询图3.3系统数据流程图数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。由于本次设计是小型软件系统的开发,所以采用卡片形式书写数据字典。每张卡片上保存描述一个数据的信息这样做更新和修改起来比较方便,而且能单独处理描述每个数据的信息。下面将列出若干数据元素的数据卡片信息。数据字典卡片:名称:学生家长信息别名:名称:学生家长信息别名:描述:对学生家长信息的描述定义:学号+姓名+家长姓名+工作单位+职务+电话+年龄+文化程度位置:输出到打印机保存到磁盘名字:学号别名:Sno.描述:惟一地标识一个特定学生的关键域定义:学号=10{字符}位置:学生基本信息表家长信息表学生毕业信息表名字:普通用户别名:学生用户名字:普通用户别名:学生用户描述学生自己的信息,查看自己的奖惩信息名称:学生奖惩信息别名:描述:学生奖惩信息的描述定义:学号+姓名+奖惩名称+奖惩日期+奖惩原因+评价位置:输出到打印机保存到磁盘名字:普通用户别名:普通用户名字:普通用户别名:普通用户描述:输入学生自己的信息,查看其他的信息定义:用户名+密码位置:普通用户表名字:学生毕业信息别名:描述:学生毕业后的信息描述定义:学号+姓名+学历+学位+工作单位+职务+单位+政治面貌+电话位置:输出到打印机保存到磁盘名字:普通用户别名:学生信息名字:普通用户别名:学生信息描述:学生在校期间所修课程信息名字:学生课程信息别名:描述:学生在校期间所修课程信息定义:学号+姓名+课程名称+代课老师+所修时间+备注位置:普通用户表名称:系统帮助信息描述:为用户提供系统帮助名称:系统帮助信息描述:为用户提供系统帮助定义:版本信息+使用说明+帮助信息+其他信息位置:普通用户表名称:学生基本信息别名:Sinfom描述:对学生基本情况的描述定义:学号+姓名+性别+民族+出生日期+家庭住址+通信地址+考生来源+家庭背景+入学分数+入学政治面貌+所在院系+专业+邮政编码位置:输出到打印机保存到磁盘3.2.3实体联系E-R图根据对数据流图和数据字典的分析,我们可以确定该应用中的实体,属性和实体之间的关系,并画出如下所示的E-R图。学生学生所在院系家庭住址学号姓名是否为系统原有信息是否提示:需要在保存后退出是否保存?否是保存成功否是RollbackCommit关闭窗体性别年龄出生日期邮政编码图3.4学生实体图图3.4学生实体图家长家长姓名工作单位职称电话号码文化程度年龄图3.5家长实体图毕业去向信息毕业去向信息考研就业出国其他图3.6毕业去向信息表毕业信息毕业信息学历学位工作单位职称工作经历政治面貌电话图3.7毕业工作信息图所选课程所选课程课程名称学号课程名称学号授课老师备注所修时间姓名授课老师备注所修时间姓名图3.8所选课程信息图系统实体联系图,如图3.8所示:学生成绩信息家长信息学生成绩信息家长信息学生查看奖惩信息查看毕业信息查看学生信息查看维护维护管理员11111111MMM11M图3.9实体联系图学生课程信息学生课程信息查看查看4、系统概要设计4.1总体设计通过这个阶段的工作将划分出组成系统的物理元素。系统概要设计的基本目的是用比较抽象的概括方式确定系统如何完成预定的任务,也就是要确定系统的配置物理方案。软件结构设计时应该遵循的最主要的原理是模块独立,让模块彼此间的接口关系应该尽量简单。4.2系统功能模块图可以根据模块独立原理对软件结构进行精化。为了合理的分解,得到尽可能高的内聚、尽可能松散的耦合,最终要的是,为了得到一个易于实现、易于测试和易于维护的软件结构,应该对模块进行再分解或合并。系统功能模块图如图4-1所示:图4-1系统功能模块图图4-1系统功能模块图学生学籍管理系统学生信息模块录入删除功能修改保存功能查询维护功能录入删除功能社会关系模块修改保存功能查询维护功能奖惩信息模块查询维护功能修改保存功能录入删除功能录入删除功能毕业信息模块查询维护功能修改保存功能4.3数据库概念设计数据库一般分为三级模式:外模式、概念模式和内模式。外模式也就是不同用户所对的数据视图,它将数据库内部抽象的数据及其互相之间的关系表示为简单、直观的应用界面。概念模式是数据库中全部数据的逻辑结构和特征描述,通常以某种数据模型为基础。内模式是对数据的物理结构和存储方式的描述。在这里我们将要设计的是数据库的概念模式,数据库概念结构设计,是在需求分析的基础上,设计出能够满足用户需求的各种实体,以及他们之间的关系,为后面的逻辑结构设计打下基础。4.4数据库逻辑结构设计在数据库设计中相当重要的一步就是将概念模型转化为计算机上DBMS所支持的数据模型,例如,将E-R图模型转化为关系模型,道理很简单,我们设计概念模型基本上都是一些抽象的关系,在数据库设计的实现过程中,能在计算机上有效地表示出这些关系就成了数据库设计的关键。根据学生档案管理系统的功能要求,选取ODBODBC作为后台数据库。在上面的实体和实体之间的E-R图设计基础上,形成数据库中的表格及表格之间的关系。该数据库由5个表组成,学生基本信息表,学生家长信息表,学生奖惩信息表,学生毕业信息表,用户信息表。主表的结构设计:1.学生基本信息表学生基本信息表是对学生的基本信息进行统计,学号、姓名、性别、民族出生年月、家庭背景、考生来源、入学分数、入学政治面貌、家庭住址、通讯地址、邮政编码、所在院系、专业等信息。学生基本信息表的结构表如表4.1。表4.1学生基本信息结构表字段名称数据类型主键非空学号charYesYes姓名charNoNo性别charNoNo民族charNoNo出生年月dateNoNo家庭背景charNoNo考生来源charNONO入学分数smallintNONO入学政治面貌charNONO家庭住址charNoNo通讯地址charNoNo邮政编码charNoNo院系charNoNo专业charNoNo2.学生家长信息表学生家长信息表是对学生家长信息的统计,包括父亲姓名、父亲工作单位、父亲电话、父亲职务、父亲年龄、父亲文化程度、母亲姓名、母亲工作单位、母亲电话、母亲职务、母亲年龄、母亲文化程度等。学生家长信息表的结构如表4.2所示。表4.2学生家长信息字段名称数据类型主键非空学号charyesYes姓名charNoNo父亲姓名charNoNo父亲工作单位charNoNo父亲电话号码charNoNo父亲职位charNoNo父亲年龄smallintNoNo母亲姓名charNoNo母亲工作单位charNoNo母亲电话号码charNoNo母亲职位charNoNo母亲年龄smallintNoNo3.学生奖惩信息学生奖惩信息是对学生在校期间的奖惩信息的统计,包括学号、姓名、奖惩名称、奖惩日期、奖惩原因、各种评价等。学生奖惩信息表结构如表4.3。表4.3学生奖惩信息表字段名称数据类型主键非空编号charNoYes学号charYesYes姓名charNoYes奖惩名称charYesYes奖惩日期dateYesYes奖惩原因charNoNo评价charNoNo4.学生毕业信息学生毕业信息有两部分组成学生毕业去向信息和学生毕业信息。学生毕业去向信息是对学生毕业以后的去向进行的统计,包括学生毕业后某些学生选择考研,某些选择就业,还有一些选择培训等。学生毕业去向信息结构表如表4.4所示:表4.4学生毕业去向信息表张虎考研所考学校(兰州大学)李海考研所考学校(兰州大学)张伟就业就业单位(兰州石化)赵刚就业就业单位(兰州石化)张玉就业公务员学生毕业信息是对学生毕业是的信息进行的统计,例如,某个学生的学历,所修的的学位,工作单位,职称,工作经历,政治面貌,电话等信息。学生毕业信息表如下所示:表4.5学生毕业信息表姓名学历工作单位职称工作经历政治面貌电话张三本科兰州石化质检员无党员223344李四专科兰州石化质检员无党员545556张俐本科兰大老师无党员68767杨虎本科白银厂工程师无群众43654姓名学历工作单位职称工作经历政治面貌电话张三本科兰州石化质检员无党员223344李四专科兰州石化质检员无党员545556张俐本科兰大老师无党员68767杨虎本科白银厂工程师无群众436545.学生成绩管理信息学生成绩信息管理是对学生在校期间所修课程成绩的统计。包括学生姓名、学号、院系、专业、所修课程的各科成绩、是否通过(包括补考和重修)、总学分绩。学生成绩管理信息表结构如表4.4。、表4.4学生成绩管理信息表字段名称数据类型主键非空学号charyesYes姓名charNoNo院系charNoNo专业charNoNo课程charNoNo成绩charNoNo是否通过boolenNoNo学分绩charNoNo6.学生课程管理信息学生课程信息管理模块可以帮助学生在使用本系统的同时,方便的查询自己曾学习的课程科目信息,从而及时的给用户反馈信息,让用户尽快的调整自己的学习计划。表4.6学生课程信息表字段名称数据类型主键非空编号charNoYes学号intYesNo姓名charNoYes课程名称charNoYes代课老师charNoYes所修时间timeNoYes备注charNoYes4.5连接数据库的特点当开发环境通过连接到数据库上之后,在设计中使用数据库画笔可实现对该数据库中表格,视图等的操作,如创建表、修改表、删除表、增加/删除记录。设计中设计数据窗口的时候,通过对话框实现与数据的连接。在应用程序中则一般是在应用程序对象中书写连接数据库的程序代码,使得应用程序开始运行并实现与数据库的连接。5、详细设计5.1系统的主要功能及实现根据上面的需求分析,设计好数据库系统,然后开发前台应用程序。所开发的前台界面要求用户可方便操作,同时很好的完成每一个窗口所实现的功能。学生毕业信息模块的设计应包括以下几点功能:首先学生毕业信息模块由两部分组成:学生毕业去向信息和学生毕业信息。学生毕业去向信息模块主要是统计了学生毕业后的去向信息,在这个模块中包括了:例如,某个学生毕业后选择考研,在该模块中就可以查询到该学生的所有考研信息,所考学校,所修专业等信息;某个学生毕业后选择就业,在该模块中就可以查询到该学生的就业单位信息,工作单位名称,工作时间等信息;某个学生选择出国留学,在该模块中就可以查询到该学生的留学信息,留学的国家,所学专业等。学生毕业信息模块主要是统计了学生毕业是自己的毕业信息。在这个模块中包括了学生的所有毕业信息,例如,某个学生的学历,所修的的学位,工作单位,职称,工作经历,政治面貌,电话等信息。5.2程序流程图程序流程图的优点是对控制流程的描绘很直观,易于掌握。1、学生各种信息的查询功能流程图用户用户输入查询信息否是是否存在该信息数据否是提示没有输出该信息所要查询的信息确认信息关闭窗体查询相应信息是否存在确定信息结束否图5.4登录界面图图5.1查询功能流程图否是否输入查询条件是2、录入功能程序流程图管理员管理员输入信息保存保存是否成功结束是否图5.2录入功能程序流程图3、修改功能流程图用户用户修改保存保存是否成功结束图5.3修改流程图是否5.3用户界面设计5.3.1一般交互设计一般交互涉及信息显示、数据输入和系统整体控制等方面。1)、一致性为客户交互界面中的菜单选择、命令输入、数据显示以及众多的其他功能,使用一致的格式。在设计的过程中,基本上保持了系统的格式一致。2)、信息的反馈向用户及时提供视觉和听觉的信息反馈,以保证在用户和系统之间及时地建立双向通信。在本系统设计过程中,基本做到了信息的及时反馈,在信息显示的大部分窗体中包括了保存按钮,会对数据库中的数据进行及时地刷新显示。3)、执行有较大影响的操作前提示用户确认在设计过程中,如果用户要执行删除操作,以及对数据库的读写操作时,都会有窗体弹出询问继续操作或者予以提示。4)、减少两次操作间需要记忆的内容为了避免用户为下一步操作而记忆大量数据,所以在设计过程中在需要数据传递的窗体中设置全局变量,来传递数据。例如在入账和入库的模块的操作中都用到了这样的方法。5)、对话、移动和思考的效率尽量减少用户击键的次数,在设计时考虑到了用户屏幕的布局以减少用户鼠标移动的距离,尽量避免用户在操作中发生疑问的情况。6)、允许错误允许用户的误操作尽量不对系统造成伤害。7)、按功能对动作分类,并据此设计屏幕布局屏幕布局尽量将软件所具有的所有功能在主页面展示,界面一目了然。5.3.2信息显示设计应当尽量为用户提供的界面显示时完整的、明确的和容易理解的,这样才能满足用户的需求。1)、只显示与当前工作有关的信息在用户操作有关系统的特定功能的信息时,不必看到与之无关的数据、菜单和图形。2)、使用便于用户迅速吸收数据的方式来表示数据在系统设计的过程中,较多地使用了表结构的形式表示数据。这样,用户可以直观的体会到图表所表示的含义。3)、使用一致的标记、标准的缩写和可预知的颜色为了使系统所表达的含义准确、无误,就必须适用一致的标记、标准的缩写和可以预知的缩写,这样用户就无需参照其他信息源就能理解,而正确地适用软件。4)、产生有意义的错误信息对于系统在运行过程中产生的错误尽量给用户返回一个容易理解的错误信息,以使用户保持对系统的信任,和系统的可用性。5)、使用窗口分隔不同类型的信息使用不同的窗口显示、保存不同类型的信息。6)、高效率的使用显示屏当使用多窗口时,应该有足够的空间使得每个窗口至少都能显示出一部分。此外,屏幕的大小应该选得和应用系统的类型相配套。在各个显示数据的窗口中,由于数据窗体项目较多,所以在数据窗体空间中较多的是用了垂直和水平滚动条,以保证信息的全面正确显示。5.3.3输入界面设计用户的大部分时间用在选择菜单命令、键入数据和向系统提供输入。在系统中,键盘是主要的输入介质,但是鼠标等设备的也是重要的输入手段,所以,对于他们的数据输入操作有如下约定:1、保持信息显示和数据输入间的一致性为了方便用户的使用,鼠标应当尽量减少操作的幅度。2、保持显示信息和输入信息之间的一致性对于用户来说,要保证其输入的数据在显示上与其他显示的视觉特征(例如:文字大小、颜色、位置等)要一致。对于不同类型的用户在登录到系统后,由于有不同的权限,所以在主界面中会有一些项目受到限制而无法使用,所以要使这些项目不发生作用,以保证系统安全。5.4软件测试5.4.1测试的方法和步骤软件的测试方法有两种,一种是黑盒测试(功能测试),另外一种是白盒测试(结构测试)。黑盒测试把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当的接受输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息的完整性。白盒测试的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定的要求正确工作。在本次软件的测试工作中,由于水平的限制,仅仅对软件的各个功能模块进行了测试,并对各个模块之间的接口进行了详细的测试(用黑盒测试法)。测试的步骤由于该系统是一个小系统,可以把整个系统作为一个单独的实体来测试。当然,在测试的过程中可以分模块、分阶段来进行。5.4.2测试用例1、登录测试当用户文本框中不输入信息的时候,提示“用户名不能为空”。当用户文本框中输入的信息不存在时,提示“输入有误”。2、学生信息查询模块的窗体应显示某货物的所有信息,学号、姓名、性别、民族、出生年月、户口类别、家庭住址、通讯地址、邮政编码、所在院系、专业等。测试如下图:当在学号中输入"07240521"按查询按钮,将显示出查询的结果如下表5.1:表5.1查询信息结果学号姓名性别民族出生日期家庭背景户口类型所在院系专业00240521李伟男汉1987-11-20农民农村计通学院计算机籍贯身份证号码入学时间担任职务备注甘肃622222000012012007学习委员\当查询文本框中输入的信息不存在时,提示“没有找到”。当查询文本框中不输入信息时,提示“输入完整信息”。3、保存功能测试将信息输入完整后,按保存按钮,提示“保存成功”。4、删除功能的测试选所要删除的行,按删除按钮提示是否确定要删除。选择是后,将所要删除的行删除。按保存按钮,保存此次操作。5、学生信息排序功能测试当点击排序(默认升序)按钮时显示信息如下表5.2:表5.2排序信息结果学号姓名性别民族出生日期家庭背景户口类型所在院系专业07240508兰瑞男汉1985-6-7工人城市计通学院计算机07240521李伟男汉1984-3-5农民农村计通学院通信07140121王丽女汉1986-7-3教师城市材料学院材料07240522杨勉男汉1987-3-3农民农村计通学院计算机07240524艾可昕女汉1988-10-15医生城市计通学院计算机08240227郑睿男汉1987-1-12工人城市计通学院通信08190130李琰男汉1987-7-21农民农村生命学院制药08110533欧晓倩女汉1989-9-6教师城市经管学院工管6、软件使用说明书1、用户登录

用户使用本系统时,首先要通过本系统的身份认证,此过程叫做登录。登录过程需要完成以下步骤:根据用户名和密码判断是否为合法用户;根据用户类型判断进入哪一个界面。登录窗体的界面如下:图6.1登录界面管理员登陆界面如下图所示:图6.2管理员登陆界面系统主界面如下图所示:图6.3系统主界面2、为方便起见,此系统中的管理员系统主界面的下拉菜单和学生管理主界面的下拉菜单一样,包括:学生基本信息学生基本信息查看学生家庭信息查看学生奖惩信息查看学生毕业信息查询退出系统退出4、信息录入方法录入界面如图6.3示单击录入按钮,在光标处添写所要添入的信息。图6.3信息录入界面5、查询功能实现方法在使用“学生社会关系”功能模块时,在输入相应查询条件时便可进行查询,同时显示查询结果。如图6.4所示。图6.4学生社会关系查询结果6.学生成绩查询本系统所实现的学生成绩查询,运行如图6.5,图6.6所示:图6.5学生成绩查询模块图6.6学生成绩信息7.学生课程信息查询学生课程信息查询,如图6.7所示:图6.7学生课程信息7、源程序#include<stdio.h>#include<stdlib.h>#include"string.h"#include"conio.h"#defineHEADER1"STUDENT\n"#defineHEADER2"|number|name|Comp|Math|Eng|sum|ave|mici|\n"#defineHEADER3"|||||||||"#defineFORMAT"|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|%4d|\n"#defineDATAp->data.num,p->,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci#defineEND"\n"intsaveflag=0;/*是否需要存盘的标志变量*/typedefstructstudent/*标记为student*/{charnum[10];/*学号*/charname[15];/*姓名*/intcgrade;/*C语言成绩*/intmgrade;/*数学成绩*/integrade;/*英语成绩*/inttotal;/*总分*/floatave;/*平均分*/intmingci;/*名次*/};typedefstructnode/*定义每条记录或结点的数据结构,标记为node*/{structstudentdata;structnode*next;}Node,*Link;voidmenuchoice(){system("cls");/*清屏.与clrscr()功能相同*/textcolor(10);/*在文本模式中选择新的字符颜色*/gotoxy(7,5);cprintf("TheStudents'GradeManagementSystem\n");gotoxy(7,8);printf("\nPleaseEnteryourchoice;0enterstudents'system\n\t\t\t");printf("");printf("1enterteachers'system\n");}voidmenu()/*菜单函数*/{system("cls");/*清屏.与clrscr()功能相同*/textcolor(10);/*在文本模式中选择新的字符颜色*/gotoxy(7,5);/*在文本窗口中设置光标,下同*/cprintf("TheStudents'GradeManagementSystem\n");gotoxy(7,8);cprintf("*************************Menu********************************\n");gotoxy(7,9);cprintf("*1inputrecord2deleterecord*\n");gotoxy(7,10);cprintf("*3searchrecord4modifyrecord*\n");gotoxy(7,11);cprintf("*5insertrecord6countrecord*\n");gotoxy(7,12);cprintf("*7sortreord8saverecord*\n");gotoxy(7,13);cprintf("*9displayrecord0quitsystem*\n");gotoxy(7,14);cprintf("*************************************************************\n");/*cprintf()送格式化输出至文本窗口屏幕中*/}voidmenustudent(){system("cls");/*清屏.与clrscr()功能相同*/textcolor(10);/*在文本模式中选择新的字符颜色*/gotoxy(7,5);/*在文本窗口中设置光标,下同*/cprintf("TheStudents'GradeManagementSystem\n");gotoxy(7,8);cprintf("*************************Menu********************************\n");gotoxy(7,9);cprintf("*3searchrecord0quitsystem*\n");gotoxy(7,10);cprintf("*************************************************************\n");/*cprintf()送格式化输出至文本窗口屏幕中*/}voidprintheader()/*格式化输出表头*/{printf(HEADER1);printf(HEADER2);printf(HEADER3);}voidprintdata(Node*pp)/*格式化输出表中数据*/{Node*p;p=pp;printf(FORMAT,DATA);}voidWrong()/*输出按键错误信息*/{printf("\n\n\n\n\n***********Error:inputhaswrong!pressanykeytocontinue**********\n");getchar();}voidNofind()/*输出未查找此学生的信息*/{printf("\n=====>Notfindthisstudent!\n");}voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的数据项*/{Node*p;p=l->next;/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p){printf("\n=====>Notstudentrecord!\n");getchar();return;}printf("\n\n");printheader();/*输出表格头部*/while(p)/*逐条输出链表中存储的学生信息*/{printdata(p);p=p->next;/*移动至下一个结点*/printf(HEADER3);}getchar();}Node*Locate(Linkl,charfindmess[],charnameornum[])/*用于定位链表中符合要求的节点,并返回指向该节点的指针,findmess[]保存要查找的具体内容;nameornum[]保存按什么查找;在单链表l中查找;*/{Node*r;if(strcmp(nameornum,"num")==0)/*按学号查询*/{r=l->next;while(r){if(strcmp(r->data.num,findmess)==0)/*若找到findmess值的学号*/returnr;r=r->next;}}elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/{r=l->next;while(r){if(strcmp(r->,findmess)==0)/*若找到findmess值的学生姓名*/returnr;r=r->next;}}return0;}voidstringinput(char*t,intlens,char*notice)/*输入字符串,并进行长度验证(长度<lens)*/{charn[255];do{printf(notice);/*显示提示信息*/scanf("%s",n);/*输入字符串*/if(strlen(n)>lens)printf("\nExceedtherequiredlength!\n");/*进行长度校验,超过lens值重新输入*/}while(strlen(n)>lens);strcpy(t,n);/*将输入的字符串拷贝到字符串t中*/}intnumberinput(char*notice)/*输入分数,0<=分数<=100)*/{intt=0;do{printf(notice);/*显示提示信息*/scanf("%d",&t);/*输入分数*/if(t>100||t<0)printf("\nScoremustin[0,100]!\n");/*进行分数校验*/}while(t>100||t<0);returnt;}voidAdd(Linkl)/*增加学生记录*/{Node*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/charch,flag=0,num[10];r=l;s=l->next;system("cls");Disp(l);/*先打印出已有的学生信息*/while(r->next!=NULL)r=r->next;/*将指针移至于链表最末尾,准备添加记录*/while(1)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/{while(1)/*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/{stringinput(num,10,"Inputnumber(press'0'returnmenu):");/*格式化输入学号并检验*/flag=0;if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/{return;}s=l->next;while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/{if(strcmp(s->data.num,num)==0){flag=1;break;}s=s->next;}if(flag==1)/*提示用户是否重新输入*/{getchar();printf("=====>Thenumber%sisnotexisting,tryagain?(y/n):",num);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}else{break;}}p=(Node*)malloc(sizeof(Node));if(!p){printf("\nAllocatememoryfailure");/*如没有申请到,打印提示信息*/return;}strcpy(p->data.num,num);/*将字符串num拷贝到p->data.num中*/stringinput(p->,15,"Name:");p->data.cgrade=numberinput("ClanguageScore[0-100]:");/*输入并检验分数,分数必须在0-100之间*/p->data.mgrade=numberinput("MathScore[0-100]:");p->data.egrade=numberinput("EnglishScore[0-100]:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;/*计算总分*/p->data.ave=(float)(p->data.total/3);/*计算平均分*/p->data.mingci=0;p->next=NULL;/*表明这是链表的尾部结点*/r->next=p;/*将新建的结点加入链表尾部中*/r=p;saveflag=1;/*在main()有对该全局变量的判断,若为1,则进行存盘操作*/}return;}voidQur(Linkl)/*按学号或姓名,查询学生记录*/{intselect;/*1:按学号查,2:按姓名查,其他:返回主界面(菜单)*/charsearchinput[20];/*保存用户输入的查询内容*/Node*p;if(!l->next)/*若链表为空*/{system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");printf("\n=====>1Searchbynumber=====>2Searchbyname\n");printf("pleasechoice[1,2]:");scanf("%d",&select);if(select==1)/*按学号查询*/{stringinput(searchinput,10,"Inputtheexistingstudentnumber:");p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/if(p)/*若p!=NULL*/{printheader();printdata(p);printf(END);printf("pressanykeytoreturn");getchar();}elseNofind();getchar();}elseif(select==2)/*按姓名查询*/{stringinput(searchinput,15,"inputtheexistingstudentname:");p=Locate(l,searchinput,"name");if(p){printheader();printdata(p);printf(END);printf("pressanykeytoreturn");getchar();}elseNofind();getchar();}elseWrong();getchar();}voidDel(Linkl)/*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/{intsel;Node*p,*r;charfindmess[20];if(!l->next){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");Disp(l);printf("\n=====>1Deletebynumber=====>2Deletebyname\n");printf("pleasechoice[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,10,"inputtheexistingstudentnumber:");p=Locate(l,findmess,"num");if(p)/*p!=NULL*/{r=l;while(r->next!=p)r=r->next;r->next=p->next;/*将p所指节点从链表中去除*/free(p);/*释放内存空间*/printf("\n=====>Deletesuccess!\n");getchar();saveflag=1;}elseNofind();getchar();}elseif(sel==2){stringinput(findmess,15,"inputtheexistingstudentname");p=Locate(l,findmess,"name");/*先按姓名查询到该记录所在的节点*/if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>Deletesuccess!\n");getchar();saveflag=1;}elseNofind();getchar();}elseWrong();getchar();}voidModify(Linkl)/*修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/{Node*p;charfindmess[20];if(!l->next){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");printf("Modifystudentrecorder:");Disp(l);stringinput(findmess,10,"\nInputtheexistingstudentnumber:");/*输入并检验该学号*/p=Locate(l,findmess,"num");/*查询到该节点*/if(p)/*若p!=NULL,表明已经找到该节点*/{printf("Number:%s,\n",p->data.num);printf("Name:%s,",p->);stringinput(p->,15,"inputnewname:");printf("Clanguagescore:%d,",p->data.cgrade);p->data.cgrade=numberinput("ClanguageScore[0-100]:");printf("Mathscore:%d,",p->data.mgrade);p->data.mgrade=numberinput("MathScore[0-100]:");printf("Englishscore:%d,",p->data.egrade);p->data.egrade=numberinput("EnglishScore[0-100]:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=(float)(p->data.total/3);p->data.mingci=0;printf("\n=====>Modifysuccess!\n");Disp(l);saveflag=1;}elseNofind();getchar();}voidInsert(Linkl)/*插入记录,按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点*/{Linkp,v,newinfo;/*p指向插入位置,newinfo指新插入记录*/charch,num[10],s[10];/*s[]保存插入点位置之前的学号,num[]保存输入的新记录的学号*/intflag=0;v=l->next;system("cls");Disp(l);while(1){stringinput(s,10,"\nPleaseinputInsertlocationaftertheNumber:");flag=0;v=l->next;while(v)/*查询该学号是否存在,flag=1表示该学号存在*/{if(strcmp(v->data.num,s)==0){flag=1;break;}v=v->next;}if(flag==1)break;/*若学号存在,则进行插入之前的新记录的输入操作*/else{getchar();printf("\n=====>Thenumber%sisnotexisting,tryagain?(y/n):",s);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}}stringinput(num,10,"InputnewstudentNumber:");/*以新记录的输入操作与Add()相同*/v=l->next;while(v){if(strcmp(v->data.num,num)==0){printf("=====>Sorry,thenewnumber:'%s'isexisting!\n",num);printheader();printdata(v);printf("\n");getchar();return;}v=v->next;}newinfo=(Node*)malloc(sizeof(Node));if(!newinfo){printf("\nAllocatememoryfailure");/*如没有申请到,打印提示信息*/return;/*返回主界面*/}strcpy(newinfo->data.num,num);stringinput(newinfo->,15,"Name:");newinfo->data.cgrade=numberinput("ClanguageScore[0-100]:");newinfo->data.mgrade=numberinput("MathScore[0-100]:");newinfo->data.egrade=numberinput("EnglishScore[0-100]:");newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade;newinfo->data.ave=(float)(newinfo->data.total/3);newinfo->data.mingci=0;newinfo->next=NULL;saveflag=1;p=l->next;/*将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*/while(1){if(strcmp(p->data.num,s)==0)/*在链表中插入一个节点*/{newinfo->next=p->next;p->next=newinfo;break;}p=p->next;}Disp(l);printf("\n\n");getchar();}voidTongji(Linkl)/*统计总分,单科第一和各科不及格人数*/{Node*pm,*pe,*pc,*pt;/*用于指向分数最高的节点*/Node*r=l->next;intcountc=0,countm=0,counte=0;/*保存三门成绩中不及格的人数*/if(!r){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");Disp(l);pm=pe=pc=pt=r;while(r){if(r->data.cgrade<60)countc++;if(r->data.mgrade<60)countm++;if(r->data.egrade<60)counte++;if(r->data.cgrade>=pc->data.cgrade)pc=r;if(r->data.mgrade>=pm->data.mgrade)pm=r;if(r->data.egrade>=pe->data.egrade)pe=r;if(r->data.total>=pt->data.total)pt=r;r=r->next;}printf("\ntheTongJiresult\n");printf("CLanguage<60:%d(ren)\n",countc);printf("Math<60:%d(ren)\n",countm);printf("English<60:%d(ren)\n",counte);printf("\n");printf("Thehigheststudentbytotalscroename:%stotoalscore:%d\n",pt->,pt->data.total);printf("ThehigheststudentbyEnglishscorename:%stotoalscore:%d\n",pe->,pe->data.egrade);printf("ThehigheststudentbyMathscorename:%stotoalscore:%d\n",pm->,pm->data.mgrade);printf("ThehigheststudentbyCscorename:%stotoalscore:%d\n",pc->,pc->data.cgrade);printf("\n\npressanykeytoreturn");getchar();}voidSort(Linkl)/*利用插入法排序实现单链表的按总分字段的降序排序,从高到低*/{Linkll;Node*p,*rr,*s;inti=0;if(l->next==NULL){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}ll=(Node*)malloc(sizeof(Node));if(!ll){printf("\nAllocatememoryfa

温馨提示

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

评论

0/150

提交评论