精华内容
下载资源
问答
  • 1.2.1项目规划 ...学校成绩管理工作是检验学生学习情况的一个主要手段,本模块包括考试类型设置,共有冬季期未考试和夏季期未考试两种类型,还设置了成绩添加、成绩修改、成绩查询、成绩的删除等功能模块。
  • 程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能: (1)主菜单 (2)各菜单项功能 ① 成绩录入:输入学生的学号、...
  • 数据库原理与应用学生成绩管理系统设计实训报告
  • c#下学生成绩管理系统设计(源代码+数据库+PPT+报告
  • 系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改 、增加、删除,另外还考虑到用户登录的权限,针对学生信息和...
  • 基于Android学生成绩管理系统设计与实现 摘要 作为学生我们首要面对的就是各种各样的考试随着查成绩的方式也逐渐转向快速 化和便捷化Android的引入无疑使得信息技术在原有的基础上又有了更新的拓展 把网络延伸至...
  • MySQL学生成绩管理系统设计实验报告

    千次阅读 多人点赞 2020-12-01 21:46:15
    一、概述 主要介绍学生成绩管理系统项目开发...因此需要开发出一个满足学校进行成绩的录入、查询、修改等需求的功能完善,安全可靠,迅速便捷的成绩管理系统。 1.2编写目的 开发出一个操作简便、界面友好、灵活实用、

    一、概述

    主要介绍学生成绩管理系统项目开发的背景、目的、对象以及研究内容。

    1.1项目背景

    每个学校都需要在期末进行考试成绩的统计分析工作,而这些工作都必须在考试结束后一个星期的时间内完成。大量的成绩数据的统计工作如果只靠人工完成,费时费力,还容易出错。随机计算机技术的快速发展,计算机在日常管理应用中迅速普及,利用计算机进行学生成绩管理势在必行。因此需要开发出一个满足学校进行成绩的录入、查询、修改等需求的功能完善,安全可靠,迅速便捷的成绩管理系统。
    

    1.2编写目的

    开发出一个操作简便、界面友好、灵活实用、安全可靠的学生成绩管理系统。该系统的开发以任课教师和学生服务为对象,能够提高学校对学生成绩的统计分析效率,减轻教务管理人员对学生成绩管理和统计的负担,能提高学校对学生成绩的规范化管理。
    该成绩系统能够及时对学生成绩进行收集整理,使学校相关部门及时获取可靠的学生成绩信息,便于管理。方便各任课教师记录,统计所带班级学生成绩,提高工作效率,减轻负担,提高教学质量。实现快速方便地处理大量成绩数据信息,完成成绩的录入、修改、删除、查询等处理要求。方便学生查询自己各科目成绩。

    1.3软件定义

    学生成绩管理系统是记录了学生成绩的系统,可以实现查询、更新、插入、删除等功能。根据不同用户设置不同的权限,来确保学生成绩信息的安全行和完整性。

    1.4开发环境

    windows10操作系统,mysql5.6.17数据库服务器,Eclipse4.12.0,Navicat。

    二、可行性分析

    由于本系统管理的对象单一,且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。因此,比较适合于采用数据库管理。在技术难度方面,由于有指导老师的指导和相关参考文献,特别是网上资料,特别是参考其它程序的功能,因此完全可以实现。

    2.1经济可行性分析

    随着科学技术的不断发展与创新,计算机作用的日益突显,计算机软件成为人们解决问题的一个有效手段,当然,它的作用也越来越重要。在当今信息时代,国民经济和国防建设、社会发展、人民生活都离不开软件,软件也无处不在。软件产业也是一个新兴产业,尽管起步晚,但是发展迅速,已经成为增长最快的产业,是具有高投入/高产出、无污染、低能耗的绿色产业。学生成绩管理系统是一个基于教务处数据库的一个管理系统,对已经使用的类似的系统进行调查分析、类比,本课题具有的特点:开发工作量小,可以有两个人合作开发或一个人独立开发,开发周期短,有熟练的开发人员一个月就可以完成系统的开发与测试。

    2.2技术可行性分析

    从技术方面来说,Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。可以利用所学的Java知识进行编程,再与数据库连接,通过SQL语句即可轻松查询和更新后台数据库中的数据。

    三、需求分析

    3.1功能要求

    根据用户需求,系统需向用户提供以下功能:
    1、系统登录功能:根据教师、学生两种身份设计不同用户的操作权限和登录方式。
    2、班级管理功能:班级的添加、修改、删除功能。
    3、成绩管理功能:录入、修改、删除、查询、统计学生成绩,能一次性录入某班全部学生成绩。
    4、信息管理功能:添加、修改、删除、查询学生基本信息,能一次性导入某班全部学生信息。
    5、成绩查询功能:每个学生可以查询自己所有课程的成绩。教师可以查询所带班级的成绩,可以对成绩进行排序和统计。
    在这里插入图片描述
    图3-1-1 学生成绩管理系统功能结构图

    3.2性能要求

    1、易操作性:所开发的系统应做到操作简单,尽量使系统操作不受用户对电脑知识水平的限制。
    2、可维护性:系统应易于修改、易于扩充、易于维护,能够适应业务不断发展变化的需要。
    3、可靠性:系统在运行中要不发生或极少发生故障,在偶然事故及操作失误时,系统应具有较强的出理能力,而不应造成信息的丢失或破坏。
    4、安全性:保证系统的物理安全、数据存储和获取的安全与保密,做好使用人员的授权管理。
    5、实用性:系统的设计应最大限度发挥计算机的高速处理、海量存储能力。
    6、开放性:系统能够在开放的硬件体系结构中运行,并且能与其他系统顺利连接,不会因外部系统的不同面要做在量的修改工作。

    四、数据库设计

    4.1 数据库需求分析

    数据库对系统操作和处理的数据具有综合管理的作用,在具有信息管理的系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的执行效率以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性。
    数据库需求分析就是分析用户的需求,根据用户的需求,分析确定该系统会操作处理那些数据,对确定好的数据根据它们之间的关联关系进行结构设计。需求分析结果直接反映客户的要求,需求分析结果是否准确将直接影响到后面各个阶段的设计结果是否合理和正确。因此做好数据库的需求分析是非常重要的环节。
    数据库需求分析的任务就是通过详细调查现实中要处理的对象,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
    针对该系统的要求,对该系统的数据库需求做了详细的分析。基于学生成绩管理系统的数据库功能主要体现在多用户登录信息、学生基本信息、教师基本信息、学生成绩信息的管理上。

    4.2用户对系统的要求

    4.2.1信息要求

    老师能查询所有成绩相关信息,包括某一学生的学号、成绩等详细信息,学生能查到关于自己具体的信息,包括每门课的成绩,学院,专业,班级等

    4.2.2处理要求

    1、需查询学生相关信息时能进行查询;
    2、学生成绩信息发生变更时,能进行修改、插入、删除等;
    3、学生的信息发生变更时,能进行更新、删除。

    4.2.3安全性与完整性要求

    安全性要求:
    1、系统应设置访问用户的标识以鉴别是否为合法用户,并设置密码,保证用户身份不被盗用;
    2、对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
    3、对不同用户设置不同的权限,区分不同用户,如学生、成绩管理员。

    4.3数据需求描述

    数据流图:

    在这里插入图片描述

    图4-3-1 顶层数据流图

    数据字典:
    ①学生Student(学号Sno、姓名Sname、性别Sex、专业号Mno、班号Cnum)
    属性名 字段类型 长度 主键或外键 说明
    SNO INT 5 主键 学号
    SNAME CHAR 20 姓名
    SEX CHAR 2 性别
    MNO INT 5 外键 专业号
    CNUM INT 5 外键 班号

    ②教师Teacher(职工号Tno、姓名Tname、职称Title)
    属性名 字段类型 长度 主键或外键 说明
    TNO INT 5 主键 职工号
    TNAME CHAR 20 姓名
    TITLE CHAR 5 职称

    ③课程Course(课程号Cno、课程名Cname、学分Credit)
    属性名 字段类型 长度 主键或外键 说明
    CNO INT 5 主键 课程号
    CNAME CHAR 30 课程名
    CREDIT CHAR 2 学分

    ④班级Class(班号Cnum、人数Num)
    属性名 字段类型 长度 主键或外键 说明
    CNUM INT 5 主键 班号
    NUM INT 5 人数

    ⑤系Depart(系号Dno、系名Dname)
    属性名 字段类型 长度 主键或外键 说明
    DNO INT 5 主键 系号
    DNAME CHAR 30 系名

    ⑥专业Major(专业号Mno、专业名Mname、系号Dno)
    属性名 字段类型 长度 主键或外键 说明
    MNO INT 5 主键 专业号
    MNAME CHAR 20 专业名
    DNO INT 5 外键 系号
    ⑦选课CV(学号Sno、课程号Cno、成绩Result)
    属性名 字段类型 长度 主键或外键 说明
    SNO INT 5 学号
    CNO INT 5 课程号
    RESULT CHAR 5 成绩

    ⑧学生—教师ST(学号Sno、职工号Tno、课程号Cno)
    属性名 字段类型 长度 主键或外键 说明
    SNO INT 5 学号
    TNO INT 5 职工号
    CNO INT 5 课程号

    4.4逻辑结构设计

    一个系有若干个专业,一个专业有若干个班级,一个学生可以选修多门课程。
    

    关系模式表:
    ①学生Student(学号Sno、姓名Sname、性别Sex、专业号Mno、班号Classno)
    学号->姓名,学号->性别,学号->专业号,班号->专业号;
    ②教师Teacher(职工号Tno、姓名Tname、职称Title)
    职工号->姓名,职工号->职称;
    ③课程Course(课程号Cno、课程名Cname、学分Credit)
    课程号->课程名,课程号->学分;
    ④班级Class(班号Cnum、人数Num)
    班号->人数;
    ⑤系Depart(系号Dno、系名Dname)
    系号->系名;
    ⑥专业Major(专业号Mno、专业名Mname、系号Dno)
    专业号->专业名,专业号->系号;
    ⑦选课CV(学号Sno、课程号Cno、成绩Result)
    学号、课程号->成绩;
    ⑧学生—教师ST(学号Sno、职工号Tno、课程号Cno)
    学号、职工号->课程号

    其中①为第三范式,②③④⑤⑥⑦⑧均为BCNF范式

    4.5 物理设计

    4.5.1索引设计:

    CREATE TABLE Student1 (
    Sname CHAR(20),
    Sno INT(5),
    Sex CHAR(2),
    Mno INT(5),
    Classno INT(5),
    PRIMARY KEY (Sno),
    Index Student1(Sno)
    );
    CREATE TABLE Teacher1 (
    Tno INT(5),
    Tname CHAR(20),
    Title CHAR(5),
    Index Teacher1(Tno)
    );
    CREATE TABLE Course1 (
    Cname CHAR(20),
    Cno INT(5),
    Credit CHAR(2),
    Index Course1(Cno)
    );
    CREATE TABLE Class1 (
    Cnum INT(5),
    Num INT(5),
    Index Class1(Cnum)
    );
    CREATE TABLE Depart1 (
    Dname CHAR(20),
    Dno INT(5),
    Index Depart1(Dno)
    );
    CREATE TABLE Major1 (
    Mname CHAR(20),
    Mno INT(5),
    Dno INT(5),
    Index Major1(Mno)
    );
    CREATE TABLE CV1 (
    Sno INT(5),
    Cno INT(5),
    Result CHAR(5),
    Index CV1(Sno,Cno)
    );
    CREATE TABLE ST1 (
    Sno INT(5),
    Tno INT(5),
    Cno INT(5),
    Index ST1(Sno,Tno)
    );

    4.5.2触发器设计:

    1、删除课程表中的课程号,相应删除选课表和学生-教师表中的课程号:
    DELIMITER %%
    Create trigger deletorder
    after delete on Course
    for each row
    begin
    delete from CV where Cno=old.Cno;
    delete from ST where Cno=old.Cno;
    end %%
    DELIMITER %%

    4.6数据库实施

    4.6.1用户模式设计

    视图设计:
    1、成绩查询
    Create view Rselect
    As
    Select cnum,CV.sno,sname,cno,result
    From Student,CV
    Where Student.sno=CV.sno;
    2、学生所学课程及学分统计
    Create view Total
    As
    Select Sno,CV.Cno,Cname,Credit
    From Course,CV
    Where Course.Cno=CV.Cno;
    3、学生总成绩、平均成绩
    Create view sum
    As
    Select CV.Sno 学号,sname 姓名,sum(result) 总成绩,avg(result) 平均成绩
    From Student,CV
    Where Student.Sno=CV.Sno;

    存储过程设计:
    1、修改成绩
    DELIMITER C R E A T E P R O C E D U R E X i u g a i ( I N S n o 1 I N T ( 5 ) , I N C n o 1 I N T ( 5 ) , I N R e s u l t 1 C H A R ( 5 ) ) B E G I N u p d a t e C V s e t R e s u l t = R e s u l t 1 w h e r e S n o = S n o 1 a n d C n o = C n o 1 ; E N D CREATE PROCEDURE Xiugai (IN Sno1 INT(5), IN Cno1 INT(5),IN Result1 CHAR(5)) BEGIN update CV set Result=Result1 where Sno=Sno1 and Cno=Cno1; END CREATEPROCEDUREXiugai(INSno1INT(5),INCno1INT(5),INResult1CHAR(5))BEGINupdateCVsetResult=Result1whereSno=Sno1andCno=Cno1;END
    DELIMITER ;
    2、查询总学分
    DELIMITER C R E A T E P R O C E D U R E X u e f e n ( I N S n o 1 I N T ( 5 ) , I N S n a m e C H A R ( 20 ) ) B E G I N S e l e c t S n o , S n a m e , S u m ( C r e d i t ) a s 总 学 分 F r o m s t u d e n t , C V W h e r e S t u d e n t . s n o = C V . s n o G r o u p b y S n o ; E N D CREATE PROCEDURE Xuefen (IN Sno1 INT(5),IN Sname CHAR(20)) BEGIN Select Sno,Sname,Sum(Credit) as 总学分 From student,CV Where Student.sno=CV.sno Group by Sno; END CREATEPROCEDUREXuefen(INSno1INT(5),INSnameCHAR(20))BEGINSelectSno,Sname,Sum(Credit)asFromstudent,CVWhereStudent.sno=CV.snoGroupbySno;END
    DELIMITER ;

    4.6.2安全性设计

    新建表
    create table user(username varchar(10),passw1 varchar(40),passw2 varchar(40));
    insert into user values (‘user1’,MD5(‘110’),SHA1(‘110’));
    insert into user values (‘user2’,MD5(‘120’),SHA1(‘120’));
    insert into user values (‘user3’,MD5(‘112’),SHA1(‘112’));

    Create user ‘cu1’@‘localhost’ identified by ‘110’;
    Create user ‘cu2’@‘localhost’ identified by ‘120’;
    Create user ‘cu3’@‘localhost’ identified by ‘112’;

    cus1@ localhost授权,即管理员的权限
    Grant all on Stu.Student to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Teacher to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Course to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Depart to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.Major to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.CV to ‘cu1’@‘localhost’ with grant option;
    Grant all on Stu.ST to ‘cu1’@‘localhost’ with grant option;

    cus2@ localhost授权,即学生的权限
    Grant select on Stu.CV to ‘cu2’@‘localhost’ with grant option;

    cus3@ localhost授权,即教师的权限
    Grant select,update on Stu.CV to ‘cu3’@‘localhost’ with grant option;

    4.6.3事务设计

    1、修改某一门课程的学分:
    Delimiter //
    Create Procedure BB(IN Cno1 INT(5),IN Cname1 CHAR(20),IN Credit1 CHAR(2))
    Begin
    declare t_err int default 0;
    declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_err = 1;

    Start Transaction;
    Select Cno修改前的课程号 from Course where Cno=Cno1;
    Select Cname修改前的课程名 from Course where Cname=Cname1;
    Select Credit修改前的学分 from Course where Cno=Cno1;
    do sleep(20);/暂停20秒/
    Update Course set Credit = Credit1 where Cno=Cno1;
    Select Credit 修改后的学分 from Course where Cno=Cno1;
    if t_err =1 then
    Rollback; /* 有sql 错误 回滚 /
    else
    commit; /
    无 sql 错误 提交 */
    end if;
    end //

    Delimiter ;

    2、修改成绩:
    Delimiter //
    Create Procedure BC(IN Sno1 INT(5),IN Cno1 INT(5),IN Result1 CHAR(5))
    Begin
    declare t_err int default 0;
    declare CONTINUE HANDLER FOR SQLEXCEPTION SET t_err = 1;

    Start Transaction;
    Select sum(Result)修改成绩前的总分 from CV where Sno=Sno1;
    Select avg(Result)修改成绩前的平均分 from CV where Sno=Sno1;
    Select Result查询需要修改的课程号的成绩 from CV where Sno=Sno1 and Cno=Cno1;
    do sleep(20);/暂停20秒/
    Update CV set Result = Result1 where Sno=Sno1 and Cno=Cno1;
    Select Result查询修改后的课程号的成绩 from CV where Sno=Sno1 and Cno=Cno1;
    Select sum(Result)修改成绩后的总分 from CV where Sno=Sno1;
    Select avg(Result)修改成绩后的平均分 from CV where Sno=Sno1;

       if t_err =1 then
          Rollback; /* 有sql 错误 回滚 */
       else
          commit; /* 无 sql 错误 提交 */
       end if;
    

    end //

    Delimiter ;

    五、软件设计

    5.1登陆界面

    在这里插入图片描述

    图5-1-1 登陆界面
    在这里插入图片描述

    图5-1-2 登陆成功界面

    5.2学生成绩查询界面

    在这里插入图片描述

    图5-2-1 学生成绩查询界面图

    5.3教师界面

    在这里插入图片描述

    图5-3-1 教师界面图
    在这里插入图片描述

    图5-3-2 新增学生信息界面图
    在这里插入图片描述

    图5-3-3 更新学生信息界面图
    在这里插入图片描述

    图5-3-4 删除学生信息界面图

    六、项目设计总结

    通过学生成绩管理系统项目设计,加深了对数据库设计的理解,对于设计一个数据库项目的流程有了一定的概念。在这次项目设计中,回顾了以前很多的知识点,但是也发现了很多问题,最终解决了,所以也收获了很多。
    此次项目的设计让我们对Mysql数据库的了解更加深入,了解到了更多的知识点,也对Navicat软件有了一定的了解。在整个设计过程中,通过把各个管理信息连接起来的分析,锻炼了我们对事情的分析能力,通过怎么解决过程中遇到的问题,提高了我们查找文献的能力,对网络资源利用的能力与同学交流的能力。 项目最终开发出来的程序实现的功能比较简单,但也基本达到了项目设计的要求,可以看出设计程序的组员是花了不少心思的。
    最重要的是,这次数据库项目的设计,为我们以后程序开发的道路打下了扎实的基础。

    需要源代码的小伙伴点击以下链接下载
    https://download.csdn.net/download/weixin_43372169/19481547?spm=1001.2014.3001.5503

    展开全文
  • 第三章 学生成绩管理系统概要设计 3.1系统设计图例说明 13 3.2 系统设计业务目标(业务逻辑层) 13 3.2.1系统设计目标概述 13 3.2.2 用户(角色) 13 3.2.3 假定 14 3.3 技术总体目标 15 3.3.1系统技术性能要求 15 ...
  • 学生成绩管理系统,可以运行,有源码!!!适合论文模板 本系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。开发本系统可使学院教职员工减轻工作压力,比较系统地对教务、...
  • 为了将体育教师从繁杂的数据管理工作中解放出来,专注于提高教学质量,提出了一种基于数据挖掘的体育成绩管理系统。该体育成绩管理系统采用ASP.NET技术开发,选用SQL Sever2005作为数据库平台,采用三层体系架构,...
  • 课程成绩管理系统,可以用集中的数据库将与人力资源管理相关的信息全面、有机地联系起来,有效地减少了信息更新和查找中的重复劳动,保证了信息的相容性,从而大大地提高了工作效率,还能使原来不可能提供的分析报告...
  • 设计任务:一个运动会成绩管理系统是根据学校的实际运动会工作专门设计的一个管理信息系统。该系统能够对项目、运动员、成绩进行有效管理。对以上信息管理主要包括:登记各项比赛成绩、根据预赛成绩产生预(决)赛...
  • 4.1系统设计思想 13 4.2总体框架 13 4.3数据库设计 13 4.3.1概念模型设计 13 4.3.2数据库表设计 14 4.3.3数据库连接计 16 4.4本章小结 17 第5章 系统的实现 18 5.1主页面的实现 18 5.2登录模块的实现 19 5.3学生成绩...
  • 1.1 编写目的:本学生成绩管理系统模块是为了实现学校人力资源的优化和学生成绩管理的科学管理而设计的,通过试用本系统,可以更加有效的管理学生成绩信息,其中包括学生的基本信息,成绩信息并且具有信息的增加,...
  • 而学生成绩管理系统的应用也为今天的民办教育在未来市场的竞争力有所提高。 (4)学生成绩管理是一个非常繁琐与复杂的一项工作,一个原因就是工作量大,不好管。对于一个学校而言,管理好学生的成绩,是非常重要的...
  • 想拿高分的请自行增强成绩按多条件的排序功能。
  • 主要给大家介绍了关于C#实现简单成绩管理系统的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 本次毕业设计根据学生在校的基本情况,分析现状各个学校的基本需求情况,进行设计的一款学生成绩管理系统,通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等,基本情况的管理。本次设计包括...

    摘 要

    本次毕业设计根据学生在校的基本情况,分析现状各个学校的基本需求情况,进行设计的一款学生成绩管理系统,通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等,基本情况的管理。本次设计包括 3 个角色,一个是系统的管理员,还有就是系统的教师以及学生,不同的角色具有不同的权限,管理员对整个系统进行维护,教师进行整个教务系统的维护,学生进行个人信息以及成绩等相关问题的维护。
    本次毕业设计采用 SpringBoot 技术,MySql 数据库,设计一款学生成绩管理系统, 目的是为了解决学生的管理以及学生考试和成绩管理的问题。通过本系统教务管理人员可以更方便的进行学生的管理。
    关键词:学生成绩管理系统;SpringBoot;MySql

    Abstract

    This graduation design analyzes the basic needs of each school based on the basic situation of the school, analyzes the basic needs of each school, and designs a basic information management system for students. Through this system, you can easily manage the basic situation of the school, including department management , Exam score management, etc., basic situation management. This design includes 3 roles, one is the system administrator, and the system is the teacher and the student. Different roles have different permissions. The administrator maintains the entire system, the teacher maintains the entire educational system, and the student performs Maintenance of personal information and related issues.
    This graduation design uses JavaWeb technology, MySql database, design a student information management system, the purpose is to solve the problems of student management and student examination and score management. Through this system, the teaching management personnel can conveniently manage the students.

    Key Words:Score entry form entry system; JavaWeb; MySql

    目 录

    第 1 章 绪论 1
    1.1开发背景 1
    1.2系统描述 1
    1.3开发环境和使用工具 1
    1.3.1开发语言 Java 简介 2
    1.3.2数据库 MySql 简介 2
    1.3.3开发工具 IDEA 简介 2
    1.3.4服务器 Tomcat 简介 2
    第 2 章 系统分析 4
    2.1可行性分析 4
    2.1.1经济可行性分析 4
    2.1.2技术可行性分析 4
    2.1.3成本收益可行性分析 4
    2.1.4后期开发及维护可行性分析 4
    2.2需求分析 4
    2.2.1业务需求 4
    2.2.2用户需求 5
    第 3 章 概要设计 7
    3.1系统功能模块设计 7
    3.2数据库设计 7
    3.2.1数据库概念模型设计 7
    3.2.2数据库表结构设计 10
    第 4 章 系统的设计与实现 14
    4.1管理员端实现 14
    4.1.1登录页面 14
    4.1.2学生信息维护 14
    4.1.3教师信息维护 15
    4.1.4基础信息维护 15
    4.2教师端实现 16
    4.2.1考试信息维护 16
    4.2.2成绩登记 16
    4.2.3教师通讯录 17
    4.2.4个人信息维护 17
    4.3学生端实现 18
    4.3.1成绩查看 18
    4.3.2班级通讯录 18
    4.3.3个人信息维护 19
    第 5 章 系统测试 20
    5.1测试介绍 20
    5.2代码测试 20
    5.3测试概述 20
    5.4单元测试 20
    5.4.1注册测试 21
    5.4.2登录测试 22
    5.5集成测试 23
    结论 24
    参考文献 25
    致谢 26

    第 1 章 绪论

    1.1开发背景
    随着科技的发展,基本上所有的具有一定数据的机构都开始使用计算机数据库来做管理,几乎所有的学校也都已经在使用计算机管理数据的机制,大大的减小了学校学生成绩管理的工作量。通过本次设计,应该达到理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
    开发学生成绩管理系统可以使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。目前,学校工作繁杂、资料重多,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。

    1.2系统描述
    本次开发也具有很重要的实际意义,它能有效的帮助学校解决现有教学教务中存在的对学生成绩信息进行录入、修改、删除、查询操作问题。使得教师、学生可以在自己的权限内对信息进行访问,修改及查询。简化现有系统的流程是指更加便捷合理易操作。尽可能实现无纸化管理,以解决手工耗时巨大、效率很低的问题。
    通过本系统可以方便的管理学校的基本情况,包括院系管理,考试成绩管理等等, 基本情况的管理。本次设计包括 3 个角色,一个是系统的管理员,还有就是系统的教师以及学生,不同的角色具有不同的权限,管理员对整个系统进行维护,教师进行整个教务系统的维护,学生进行个人信息以及成绩等相关问题的维护。

    1.3开发环境和使用工具
    页面使用超文本语言 JSP 结合 CSS 层叠样式表与脚本语言 JavaScript 设计完成。后台主要使用 Java 语言并结合 SQL 语句。使用框架为 SSM,即 Spring,SpringMVC, MyBatis。
    JavaScript 是一个脚本语言,是在浏览器中解释执行的一个语言,依赖浏览器而运行,现在的 JavaScript 最新的版本已经是 ESCM6 版本,js 是一个很灵活的语言,前端页面的一些校验,提醒等等都可以通过 js 来完成,同时 js 是一个基于对象的脚本语言,

    它的安全性同时也是非常的好,不能访问本地的文件,同时也不允许将数据直接写入到数据库,还有就是 js 是一个可跨平台的语言,现在无论是 pc 端还是移动端的开发都已经离不开 js 语言。
    1.3.1开发语言 Java 简介
    Java 编程语言是一种全新的开发语言,它是由 Sun Microsystems 发布的,具有面向对象的特点,而且运行需要.framework(类库)提供支持,Java 编程语言和 Java 语言有很多的类似特点,如在使用,编译语句及在接口继承上等。Java 语言同时结合了 C 和C++语言的优点,回避了他们的不足,具有高效稳定的特点,如:Java 没有有关宏的使用概念,而且 Java 还结合了 VB 等语言的面向对象和 C++高效运行等特点,由此 Java 已成为网站开发的首选。

    1.3.2数据库 MySql 简介
    MySql 是一个小型的数据库,安装包只有几十兆,相比 oracle 等大型数据库体积要小的多。MySql 数据库是 Microsoft 发布的一个新的数据存储平台,它管理的数据量超出了时间和位置的限制。 数据库还可以存储在半结构化或结构化数据中。 MySql 提供了多种用于查找,查询和分析数据的集成服务,但由于数据存储在服务器上,因此无法控制特定于数据存储库的地址。MySql 支持使用 Eclipse 开发的程序处理数据,MySql 提供了一组高效可靠的数据存储平台,满足几乎所有格式的数据存储要求。

    1.3.3开发工具 IDEA 简介
    IDEA 全称 IntellJ IDEA,和 eclipse 相似,是 java 编程中公认最好的 IDE,提供了大量的智能工具,例如语法提示、代码分析、格式化等。
    IDEA 最核心的特色是它的快捷键,利用快捷键可以极大提高开发效率。
    IDEA 的特点:沉浸式的开发体验(根本停不下来),超强快捷键体系,智能的代码助手,全栈开发环境,丰富的模板支持。

    1.3.4服务器 Tomcat 简介
    Tomcat 是 Apache Software Foundation 项目的中心项目,由 Apache,Sun 以及其他公司和个人开发。在 Sun 的帮助和支持下,Tomcat 始终反映最新的 Servlet 和 JSP 规范。 Tomcat 技术具有先进,稳定的性能,而且免费,因此受到 Java 爱好者的喜爱,得到一部分软件开发者的认可,成为现在比较流行的 Web 应用服务器。许多程序员都喜欢Tomcat。Tomcat 在运行时使用的系统资源更少,可扩展性更高,并且支持开发应用程序系统中常用的功能。

    1.4研究意义
    在学校建设校园网的环境下,学生成绩管理系统是作为学校校园网的重要组成部分。一个功能齐全的学生成绩管理系统不但能够让高层管理者能够更加方便快捷的对所需要的工作进行管理,降低了工作难度,提高了工作效率,同时还为学生和教师提供了极大的方便。学生成绩系统主要是为了提供给学校管理者和学校老师来对学校的工作管理和安排、学生进行查询等方面的操作,能够对学生的成绩进行更加系统高效的管理。根据学生成绩管理系统把学校中各个班级的学生的成绩进行汇总和分析,能够为学校工作人员和教师对学生成绩的分析、管理和查询提供一个平台基础,使学校对学生的成绩信息能够更加全面的了解分析,从而达到提高学生成绩管理统计高效率和提高学校教育教学成绩的目的。

    第 2 章 系统分析

    2.1可行性分析

    2.1.1经济可行性分析
    本次的开发,无需要购买一些额外的器材。只需要一台笔记本电脑即可,所有需要用到的软件都可以到网络上下载,另外需要的参考资料可以到学校的图书馆以及网络上查找,所以本次开发在经济上是可行的。

    2.1.2技术可行性分析
    本网站是基于 JavaWeb,采用现在流行的 SSM 框架实现的,使用的语言、技术等在现在比较流行。数据库使用的是 MySql 数据库,在企业或个人应用中比较常见,由于其体积小、优化了 SQL 查询算法、有效地提高了查询速度,因此方便使用。页面主体框架搭建使用 bootstrap,实现响应式页面,设计的界面简洁大方。总体难度不大,技术有可行性。

    2.1.3成本收益可行性分析
    本系统开发成本不高,花费一个多月在空闲时间完成。开发环境,使用的工具都是免费的。前期投入较少,项目投入运行后开始或许收支不平衡,但随着网站的运营,后期收益是可观的。

    2.1.4后期开发及维护可行性分析
    本次毕业设计的代码的耦合性非常的低,可以方便后期的维护。后期还可以添加个人中心模块。采用的技术是目前的主流技术,如开发语言 Java,框架 SSM,大多数开发人员对此比较熟悉,并且系统设计较合理,便于后期添加功能与维护。

    2.2需求分析

    2.2.1业务需求
    当信息在软件中移动时,将被一系列“变换”所修改。数据流图是一种图形化技术, 它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何的具体物理元素,它只是描绘信息在软件中流动和被处理的情况。数据流图只需要考虑系统必须完成的基本逻辑功能,完全不考虑怎样具体的实现这些功能。
    根据系统功能描述,对系统画数据流图如下:在这里插入图片描述
    图 2-1 系统数据流图

    2.2.2用户需求
    1、学生基本情况录入模块:
    主要功能用来对学生的成绩进行收集和录入。在学生信息保存在系统中的前提下, 成绩录入需要输入学生资料,比如班级,学号,姓名。在准确录入学生资料后,就可以对该学生的各科成绩进行录入。该学生各科成绩录入成功后,系统会提示是否继续进行操作,如果想继续录入学生成绩就输入 y,不想再输入学生成绩的话就输入 n,再输入 n 之后,系统返回到主菜单。
    2、按学生学号查找并显示学生资料模块:
    主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息 。
    3、按学生学号计算基点成绩,计算规则参考长春工业大学学分基点计算规则。
    4、按照某门课程学生成绩进行排列模块:
    主要功能是用来对学生的某门课程成绩进行排序。在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料按成绩进行排序,这样方便对学生成绩进行排序, 对某一分数段的学生有多少、有谁一目了然。
    5、按姓名查找,删除该学生资料模块:
    主要功能是用来删除学生资料,在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化
    6、储存学生资料并退出系统模块:

    主要功能是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次第 3 章 概要设计

    3.1系统功能模块设计
    本次毕业设计一共有 3 个角色,分别是管理员,教师,以及学生,3 个角色,下面分表从 3 个角色进行分析本次毕业设计的结构,见下图 3-1.在这里插入图片描述
    论文下载地址:请点击

    展开全文
  • 学生成绩管理系统 摘 要 随着互联网的飞速发展,越来越多的信息通过网络服务的承载和共享,在促进人类社会大跨步向未来迈进的同时, 也为教育事业带来了蓬勃而持久的春天,而我们也赶上了一个好时代,使得学校与社会...
  • 设计任务:一个运动会成绩管理系统是根据学校的实际运动会工作专门设计的一个管理信息系统。该系统能够对项目、运动员、成绩进行有效管理。对以上信息管理主要包括:登记各项比赛成绩、根据预赛成绩产生预(决)赛...
  • 学生成绩管理系统——课程设计报告

    万次阅读 多人点赞 2018-07-10 19:47:16
    学期末课程设计的作业,利用链表和文件的操作。...*******程序名称:学生成绩管理系统 *******作 者: *******开发环境:Dev-C++5.11 *******创建日期:2018.06.28 *******完成日期:2018.07.02 ***************...

    学期末课程设计的作业,利用链表和文件的操作。日后再完善一些功能介绍。

    /*************************************
    *******程序名称:学生成绩管理系统 
    *******作    者:
    *******开发环境:Dev-C++5.11 
    *******创建日期:2018.06.28
    *******完成日期:2018.07.02 
    **************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #include <windows.h>
    #include <ctype.h>
    
    #define YES 1
    #define NO 0
    
    typedef struct
    {
    	int num;
    	float prob_score;
    	float disc_score;
    	float cpp_score;
    	double aver_score;
    	double sum_score;
    	char sex;
    }StudentDate;                                            //学生基本信息
    typedef struct student
    {
    	char name[20];                                       //学生姓名
    	StudentDate one;                                     //学生其他信息
    	int rank;                                            //成绩排名
    	struct student *next;
    }Student, *List;
    
    Student *startCheck();                                   //登录系统
    Student *createListHead();                               //创建链表的头
    void menu();                                             //主菜单
    void sortList(Student *pHead);                           //排序链表
    void readListWithFile(Student *pHead, char *file_name);  //从文件中读取数据,并保存在链表中
    int  userChioce(Student *pHead);                         //用户选择
    int  sortMenu();                                         //打印选择菜单
    void passwordCheck();                                    //密码检测
    void correctWord();                                      //修改密码
    void addStudentInfo(Student *pHead);                     //向链表的末尾添加数据
    int  scanMenu();                                         //浏览菜单
    void findStudentInfo(Student *pHead);                    //查找学生信息
    void delStudentInfo(Student *pHead);                     //删除某一个学生信息
    void alterStudentInfo(Student *pHead);                   //修改学生信息
    void saveList(Student *pHead);                           //将链表保存在文件里
    void printList(Student *pHead);                          //打印链表
    void statisStudentInfo(Student *pHead);                  //查看学生信息
    int  statisMenu();                                       //查看菜单
    void gotoxy(int x, int y);                               //改变光标位置函数
    void inputData(Student *pHead, Student *node);           //输入信息,并检测是否合法
    
    int main()
    {
    	Student *pHead;
    
    	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//得到窗口句柄
    	SMALL_RECT rc = { 0, 0, 94 - 1, 30 - 1 };   //{Y位置,X位置,宽,高}
    	SetConsoleWindowInfo(hOut, true, &rc);// 重置窗口位置和大小
    
    	system("color F1");//设置控制台颜色
    	pHead = startCheck();//读取信息
    	while (1)
    	{
    		if (9 == userChioce(pHead)) //按9时退出系统
    		{
    			break;
    		}
    	}
    
    	return 0;
    }
    /*================================================
    == 函数名:Student *startCheck()
    == 功  能:登陆系统 
    == 参  数:无 
    == 返回值:链表的头指针 
    =================================================*/
    Student *startCheck()
    {
    	Student *pHead;
    	FILE  *fp1;
    	char password[20] = "77137714";
    	int i;
    
    	if ((fp1 = fopen("password.dat", "rb")) == NULL)//若密码文件不存在,新建密码文件
    	{
    		fp1 = fopen("password.dat", "wb");
    		fwrite(password, 20, 1, fp1);
    		fclose(fp1);
    		printf("密码初始化完成!(默认密码为:77137714)");
    		passwordCheck();
    	}
    	else
    	{
    		passwordCheck();
    	}
    	//读条
    	system("CLS");
    	system("title 学生成绩统计系统-载入中");//将标题栏命名为“学生成绩统计系统”
    	printf("\n\n\t\t\t欢迎进入本系统!正在载入.....");
    	printf("\n\n\n\n\t\t\t┏━━━━━━━━━━━━━━━━━━━━┓\n");
    	printf("\t\t\t┃                    ┃\n");
    	printf("\t\t\t┗━━━━━━━━━━━━━━━━━━━━┛\n");
    	gotoxy(26, 7);
    	for (i = 0; i < 10; i++)
    	{
    		printf("█");
    		Sleep(100);
    	}
    
    	pHead = createListHead();
    	readListWithFile(pHead, "stud.dat");
    
    	return pHead;
    }
    /*================================================
    == 函数名:Student *createListHead()
    == 功  能:创建一个单链表 
    == 参  数:无 
    == 返回值:返回链表的头指针 
    =================================================*/
    Student *createListHead()
    {
    	Student *pHead;
    
    	pHead = (List)malloc(sizeof(Student));
    	pHead->next = NULL;
    
    	return pHead;
    }
    /*================================================
    == 函数名:void passwordCheck()
    == 功  能:密码输入及判定 
    == 参  数:无 
    == 返回值:无 
    =================================================*/
    void passwordCheck()
    {
    	char password[20], inputword[20];
    	int i = 0, j = 0;
    	char c = 0;
    	FILE *fp = fopen("password.dat", "rb");
    
    	system("title 学生成绩统计系统-密码输入");//将标题栏命名为“学生成绩统计系统”
    	fread(password, 20, 1, fp);
    	for (i = 0; i < 3; i++)
    	{
    		j = 0;
    		printf("\n\n\n\t\t你还有%d次机会输入正确密码: ", 3 - i);
    		printf("\n\n\n\n\t\t\t┏━━━━━━━━━━━━━━━━┓\n");
    		printf("\t\t\t┃                ┃\n");
    		printf("\t\t\t┗━━━━━━━━━━━━━━━━┛\n");
    		gotoxy(26, 8);
    		while ((c = getch()) != 13 && j < 20)
    		{
    			if (c == '\b' && j >0)
    			{
    				putchar('\b');
    				putchar(' ');
    				putchar('\b');
    				j--;
    			}
    			else
    			{
    				if (isprint(c))//isprint为检测C是否为可打印的函数 
    				{
    					putchar('*');
    					inputword[j] = c;
    					j++;
    				}
    			}
    		}
    		inputword[j] = '\0';
    		if (strcmp(inputword, password) == 0)
    		{
    			return;
    		}
    		else
    		{
    			system("CLS");
    			printf("\t\t\t密码输入错误");
    		}
    	}
    	if (3 == i)
    	{
    		system("CLS");
    		printf("\n\n\n\t\t你已浪费所有机会!程序即将退出!");
    		Sleep(2000);
    		exit(0);
    	}
    	fclose(fp);
    	system("CLS");
    
    	return;
    }
    /*================================================
    == 函数名:void readListWithFile(Student *pHead, char *file_name)
    == 功  能:将文件内的信息读取到链表中 
    == 参  数:Student *pHead:链表头指针 
               char *file_name:文件指针 
    == 返回值:无 
    =================================================*/
    void readListWithFile(Student *pHead, char *file_name)
    {
    	FILE *fp;
    	Student *p1, *p2;
    	int count, rank = 0;
    	StudentDate dat;
    	char stu_name[20];
    
    	fp = fopen(file_name, "r");
    	if (fp == NULL)
    	{
    		fp = fopen(file_name, "w");
    		fclose(fp);
    		return;
    	}
    	fseek(fp, 0L, 2);
    	count = ftell(fp);
    	p1 = pHead;
    	fp = fopen(file_name, "r");
    	while (!feof(fp))
    	{
    		p2 = (List)malloc(sizeof(Student));
    		fscanf(fp, "%d %s %c %f %f %f\n", &p2->one.num, p2->name, &p2->one.sex, &p2->one.prob_score,
    			&p2->one.disc_score, &p2->one.cpp_score);
    		p2->one.sum_score = (double)(p2->one.prob_score + p2->one.disc_score + p2->one.cpp_score);
    		p2->one.aver_score = p2->one.sum_score / 3;
    		p2->next = NULL;
    		p1->next = p2;
    		p1 = p2;
    		if (ftell(fp) == count)
    		{
    			break;
    		}
    	}
    	//将链表排序,并初始化排名
    	for (p1 = pHead->next; p1 != NULL; p1 = p1->next)
    	{
    		for (p2 = p1->next; p2 != NULL; p2 = p2->next)
    		{
    			if (p2->one.aver_score > p1->one.aver_score)
    			{
    				dat = p2->one;
    				strcpy(stu_name, p2->name);
    				p2->one = p1->one;
    				strcpy(p2->name, p1->name);
    				p1->one = dat;
    				strcpy(p1->name, stu_name);
    			}
    		}
    		p1->rank = ++rank;
    	}
    	fclose(fp);
    }
    /*================================================
    == 函数名:int userChioce(Student *pHead)
    == 功  能:用户功能选择 
    == 参  数:链表头指针 
    == 返回值:功能对应整型数 
    =================================================*/
    int userChioce(Student *pHead)
    {
    	int bum;
    
    	system("title 学生成绩统计系统-主菜单");//将标题栏命名为“学生成绩统计系统”
    	menu();
    	printf("请按键选择: ");
    	bum = (int)(getch() - '0');
    	switch (bum)
    	{
    	case 1:
    		addStudentInfo(pHead);
    		break;
    	case 2:
    		delStudentInfo(pHead);
    		break;
    	case 3:
    		alterStudentInfo(pHead);
    		break;
    	case 4:
    		findStudentInfo(pHead);
    		break;
    	case 5:
    		statisStudentInfo(pHead);
    		break;
    	case 9:
    		break;
    	case 6:
    		sortList(pHead);
    		break;
    	case 7:
    		correctWord();
    		break;
    	case 8:
    		MessageBox(NULL, TEXT("名称:学生成绩管理系统\n学校:西安邮电大学\n作者:计科1705 杨晓麟"), TEXT("关于"), MB_OK);
    		break;
    	default:
    		break;
    	}
    
    	return bum;
    }
    /*================================================
    == 函数名:void addStudentInfo(Student *pHead)
    == 功  能:向链表末尾添加数据 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void addStudentInfo(Student *pHead)
    {
    	FILE *fp;
    	Student *p1, *p2, *p3 = pHead;
    	StudentDate dat;
    	int judge = YES, rank = 0;
    	char bum, stu_name[20];
    
    	system("title 学生成绩统计系统-添加");//将标题栏命名为“学生成绩统计系统”
    	fp = fopen("stud.dat", "a");
    	while (pHead->next)
    	{
    		pHead = pHead->next;
    	}
    	while (judge)
    	{
    		p1 = (List)malloc(sizeof(Student));
    		inputData(p3, p1);
    		p1->next = NULL;
    		pHead->next = p1;
    		pHead = p1;
    		fprintf(fp, "%d %s %c %.1f %.1f %.1f\n", p1->one.num, p1->name, p1->one.sex, p1->one.prob_score,
    			p1->one.disc_score, p1->one.cpp_score);
    		printf("是否继续添加?(Y/N)");
    		bum = getch();
    		if (bum == 'n' || bum == 'N')
    		{
    			break;
    		}
    
    	}
    	//并交换排名
    	for (p1 = p3->next; p1 != NULL; p1 = p1->next)
    	{
    		for (p2 = p1->next; p2 != NULL; p2 = p2->next)
    		{
    			if (p2->one.aver_score > p1->one.aver_score)
    			{
    				dat = p2->one;
    				strcpy(stu_name, p2->name);
    				p2->one = p1->one;
    				strcpy(p2->name, p1->name);
    				p1->one = dat;
    				strcpy(p1->name, stu_name);
    			}
    		}
    		p1->rank = ++rank;
    	}
    	fclose(fp);
    }
    /*================================================
    == 函数名:void inputData(Student *pHead, Student *node)
    == 功  能:输入信息并检测是否合法 
    == 参  数:Student *pHead:链表头指针 
               Student *node:链表工作指针 
    == 返回值:无 
    =================================================*/
    void inputData(Student *pHead, Student *node)
    {
    	Student *p1 = node, *p2, *p3 = pHead;
    
    	system("CLS");
    	printf("\n\n\t请依次输入学生的学号、姓名、性别、概率、离散、c++成绩\n");
    	printf("\t注意:姓名不能有空格,性别男用M表示,女用W表示,\n\t各科成绩应该大于0小于100,输入数据时请用空格隔开\n");
    	scanf("%d %s %c %f %f %f", &p1->one.num, p1->name, &p1->one.sex, &p1->one.prob_score, &p1->one.disc_score, &p1->one.cpp_score);
    	// 判断输入的学号是否已经存在
    	p2 = p3->next;
    	while (1)
    	{
    		if (p2 == NULL)
    		{
    			break;
    		}
    		if (p2->one.num == p1->one.num && p2 != node)
    		{
    			printf("该学号已存在,请重新输入学号:");
    			scanf("%d", &p1->one.num);
    			p2 = p3->next;
    		}
    		else
    		{
    			p2 = p2->next;
    		}
    	}
    	//性别是否合法
    	while (1)
    	{
    		if (p1->one.sex != 'W'&& p1->one.sex != 'M')
    		{
    			p1->one.sex = getchar();
    			printf("性别输入不合法,请重新输入: ");
    			p1->one.sex = getchar();
    
    		}
    		else
    		{
    			break;
    		}
    	}
    	//成绩是否合法
    	while (1)
    	{
    		if (p1->one.prob_score < 0 || p1->one.prob_score > 100)
    		{
    			printf("概率成绩输入不合法,请重新输入:");
    			scanf("%f", &p1->one.prob_score);
    		}
    		if (p1->one.disc_score < 0 || p1->one.disc_score > 100)
    		{
    			printf("离散成绩输入不合法,请重新输入:");
    			scanf("%f", &p1->one.disc_score);
    		}
    		if (p1->one.cpp_score < 0 || p1->one.cpp_score > 100)
    		{
    			printf("c++成绩输入不合法,请重新输入:");
    			scanf("%f", &p1->one.cpp_score);
    		}
    		if (p1->one.prob_score >= 0 && p1->one.prob_score <= 100 && p1->one.disc_score >= 0
    			&& p1->one.disc_score <= 100 && p1->one.cpp_score >= 0 && p1->one.cpp_score <= 100)
    		{
    			break;
    		} 
    	}
    	p1->one.sum_score = (double)(p1->one.prob_score + p1->one.disc_score + p1->one.cpp_score);
    	p1->one.aver_score = p1->one.sum_score / 3;
    }
    /*================================================
    == 函数名:void alterStudentInfo(Student *pHead)
    == 功  能:修改学生信息 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void alterStudentInfo(Student *pHead)
    {
    	int bum, count = 0, j = 0;
    	int num;
    	char student_name[20];
    	Student *p1 = pHead->next;
    
    	system("title 学生成绩统计系统-修改");//将标题栏命名为“学生成绩统计系统”
    	bum = scanMenu();
    	if (bum == 1)
    	{
    		printf("\n\t\t\t请输入要修改学生的学号:");
    		scanf("%d", &num);
    		while (p1)
    		{
    			j++;
    			if (p1->one.num == num)
    			{
    				inputData(pHead, p1);
    				break;
    			}
    			p1 = p1->next;
    		}
    		if (p1 == NULL)
    		{
    			getch();
    			printf("没有该学生信息!");
    		}
    	}
    	else
    	{
    		if (bum == 2)
    		{
    			printf("\n\t\t\t请输入要修改学生的姓名:");
    			scanf("%s", student_name);
    			while (p1)
    			{
    				j++;
    				if (strcmp(p1->name, student_name) == 0)
    				{
    					inputData(pHead, p1);
    					count = 1;
    				}
    				p1 = p1->next;
    			}
    			if (count == 0)
    			{
    				printf("\n\t\t\t没有该学生信息!");
    				getch();
    			}
    		}
    		else
    		{
    			if (3 == bum)
    			{
    				return;
    			}
    			else
    			{
    				alterStudentInfo(pHead);
    			}
    		}
    	}
    	saveList(pHead);
    }
    /*================================================
    == 函数名:int scanMenu()
    == 功  能:查询菜单显示和选择 
    == 参  数:无 
    == 返回值:功能对应整型数 
    =================================================*/
    int scanMenu()
    {
    	int bum;
    
    	system("CLS");
    	printf("\n\n\n");
    	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    	printf("\t\t┃                       以什么方式查询 ?                  ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                    1   按学生的学号                      ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                    2   按学生的姓名                      ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                    3   返回主菜单                        ┃\n");
    	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    	printf("请按键选择:");
    	bum = (int)(getch() - '0');
    	system("CLS");
    
    	return bum;
    }
    /*================================================
    == 函数名:void saveList(Student *pHead)
    == 功  能:将链表保存在文件 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void saveList(Student *pHead)
    {
    	FILE *fp;
    
    	fp = fopen("stud.dat", "w+");
    	pHead = pHead->next;
    	while (pHead)
    	{
    		fprintf(fp, "%d %s %c %.1f %.1f %.1f\n", pHead->one.num, pHead->name, pHead->one.sex, pHead->one.prob_score,
    			pHead->one.disc_score, pHead->one.cpp_score);
    		pHead = pHead->next;
    	}
    	fclose(fp);
    }
    /*================================================
    == 函数名:void correctWord()
    == 功  能:修改密码 
    == 参  数:无 
    == 返回值:无 
    =================================================*/
    void correctWord()
    {
    	char password[20];
    	FILE *fp;
    	int i = 0;
    	char c;
    
    	system("title 学生成绩统计系统-修改密码");//将标题栏命名为“学生成绩统计系统”
    	system("CLS");
    	printf("\n\n\n\n\t\t\t请输入新的密码:");
    
    	while ((c = getch()) != 13 && i < 20)
    	{
    		if (c == '\b'&&i > 0)
    		{
    			putchar('\b');
    			putchar(' ');
    			putchar('\b');
    			i--;
    		}
    		else
    		{
    			if (isprint(c))//isprint为检测C是否为可打印的函数 
    			{
    				putchar('*');
    				password[i] = c;
    				i++;
    			}
    		}
    	}
    	password[i] = '\0';
    	printf("\n\t\t\t是否将密码修改为<%s>? Y or N:", password);
    	c = getch();
    	if (c == 'Y' || c == 'y')
    	{
    		fp = fopen("password.dat", "wb");
    		fwrite(password, 20, 1, fp);
    		fclose(fp);
    		printf("\n\t\t\t修改成功!\n");
    	}
    	else
    	{
    		return;
    	}
    	getch();
    }
    /*================================================
    == 函数名:void delStudentInfo(Student *pHead)
    == 功  能:删除数据 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void delStudentInfo(Student *pHead)
    {
    	Student *p1, *p2 = pHead;
    	int bum;
    	int num, count = 0;
    	char student_name[20], c;
    
    	system("title 学生成绩统计系统-删除");//将标题栏命名为“学生成绩统计系统”
    	bum = scanMenu();
    	if (bum == 1)
    	{
    		p1 = pHead->next;
    		printf("\n\t\t\t请输入要删除学生的学号:");
    		scanf("%d", &num);
    		while (p1)
    		{
    			if (p1->one.num == num)
    			{
    				count = 1;
    				printf("\n\t\t\t删除成功,删除的学生学号为:%d", num);
    				if (p1->next == NULL)
    				{
    					pHead->next = NULL;
    					break;
    				}
    				else
    				{
    					pHead->next = p1->next;
    					free(p1);
    					p1 = pHead->next;
    				}
    			}
    			else
    			{
    				pHead = pHead->next;
    				p1 = pHead->next;
    			}
    		}
    	}
    	else
    	{
    		if (bum == 2)
    		{
    			p1 = pHead->next;
    			printf("\n\t\t\t请输入要删除的学生姓名:");
    			scanf("%s", student_name);
    			//统计一共有多少个学生
    			while (p1)
    			{
    				if (strcmp(p1->name, student_name) == 0)
    				{
    					count++;
    				}
    				p1 = p1->next;
    			}
    			if (count > 0)
    			{
    				printf("'\n\n\n\t\t\t一共有%d个人的信息 全部删除(Y) or 逐一删除(N)?", count);//选择全部删除,还是逐一删除
    				c = getch();
    				//全部删除
    				if (c == 'y' || c == 'Y')
    				{
    					p1 = pHead->next;
    					while (p1)
    					{
    						if (strcmp(p1->name, student_name) == 0)
    						{
    							printf("\n\t\t\t删除成功,姓名为: %s", student_name);
    							if (p1->next == NULL)
    							{
    								pHead->next = NULL;
    								break;
    							}
    							else
    							{
    								pHead->next = p1->next;
    								free(p1);
    								p1 = pHead->next;
    							}
    						}
    						else
    						{
    							pHead = pHead->next;
    							p1 = pHead->next;
    						}
    					}
    
    				}
    				else
    				{
    					//逐一删除
    					p1 = pHead->next;
    					while (p1)
    					{
    						if (strcmp(p1->name, student_name) == 0)
    						{
    							printf("\n姓名:%s,学号:%d,性别:%c  是否删除(y or n)?", p1->name, p1->one.num, p1->one.sex);
    							c = getch();
    							if (c == 'y' || c == 'Y')
    							{
    								if (p1->next == NULL)
    								{
    									pHead->next = NULL;
    									break;
    								}
    								else
    								{
    									pHead->next = p1->next;
    									free(p1);
    									p1 = pHead->next;
    								}
    								printf("成功!");
    							}
    							else
    							{
    								pHead = pHead->next;
    								p1 = pHead->next;
    							}
    						}
    						else
    						{
    							pHead = pHead->next;
    							p1 = pHead->next;
    						}
    					}
    				}
    
    			}
    		}
    		else
    		{
    			if (bum == 3)
    			{
    				return;
    			}
    			else
    			{
    				delStudentInfo(pHead);
    			}
    		}
    	}
    	if (count == 0)
    	{
    		printf("\n\t\t\t没有该学生信息!");
    	}
    	else
    	{
    		saveList(p2);
    	}
    	getch();
    }
    /*================================================
    == 函数名:void findStudentInfo(Student *pHead)
    == 功  能:数据查找 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void findStudentInfo(Student *pHead)
    {
    	int bum, count = 0;
    	int num;
    	char student_name[20];
    
    	pHead = pHead->next;
    	system("title 学生成绩统计系统-查找");//4-将标题栏命名为“学生成绩统计系统”
    	bum = scanMenu();
    	if (bum == 1)
    	{
    		printf("请输入学生的学号:");
    		scanf("%d", &num);
    		while (pHead)
    		{
    			if (pHead->one.num == num)
    			{
    				if (count == 0)
    				{
    					printf("\n\t\t\t已经查到!\n");
    					printf("\n\  ┏━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┓");
    					printf("\n  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃c  ++ ┃平均分┃总  分┃名次┃\n");
    					count = 1;
    				}
    				printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    				printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", pHead->one.num,
    					pHead->name, pHead->one.sex, pHead->one.prob_score, pHead->one.disc_score,
    					pHead->one.cpp_score, pHead->one.aver_score, pHead->one.sum_score, pHead->rank);
    				break;
    			}
    			pHead = pHead->next;
    		}
    		if (pHead == NULL)
    		{
    			printf("\n\t\t\t没有该学生记录!\n");
    		}
    		else
    		{
    			printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");
    		}
    	}
    	else
    	{
    		if (bum == 2)
    		{
    			printf("请输入学生姓名:");
    			scanf("%s", student_name);
    			while (pHead)
    			{
    				if (strcmp(student_name, pHead->name) == 0)
    				{
    					if (count == 0)
    					{
    						printf("\n\t\t\t已经查到!\n");
    						printf("\n\  ┏━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┓");
    						printf("\n  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃c  ++ ┃平均分┃总  分┃名次┃\n");
    						count = 1;
    					}
    					printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", pHead->one.num,
    						pHead->name, pHead->one.sex, pHead->one.prob_score, pHead->one.disc_score,
    						pHead->one.cpp_score, pHead->one.aver_score, pHead->one.sum_score, pHead->rank);
    				}
    				pHead = pHead->next;
    			}
    			if (count == 0)
    			{
    				printf("\n\t\t\t没有该学生记录!");
    			}
    			else
    			{
    				printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");
    			}
    		}
    		else
    		{
    			if (bum == 3)
    			{
    				return;
    			}
    			else
    			{
    				findStudentInfo(pHead);
    			}
    		}
    
    	}
    	getch();
    }
    /*================================================
    == 函数名:void menu()
    == 功  能:菜单显示 
    == 参  数:无 
    == 返回值:无 
    =================================================*/
    void menu()
    {
    	system("CLS");//清屏
    	printf("\n\n\n\t\t\t\t┌──────────────────────────────────┐\n");
    	printf("\t\t\t\t│         学生成绩统计系统         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         1   增加学生记录         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         2   删除学生记录         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         3   修改学生记录         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         4   查找学生信息         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         5   统计学生成绩         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         6   查看学生成绩         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         7   修改登陆密码         │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         8      关于              │\n");
    	printf("\t\t\t\t├──────────────────────────────────┤\n");
    	printf("\t\t\t\t│         9    退出系统            │\n");
    	printf("\t\t\t\t└──────────────────────────────────┘\n");
    }
    /*================================================
    == 函数名:void sortList(Student *pHead)
    == 功  能:数据排序 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void sortList(Student *pHead)
    {
    	Student *p1, *p2;
    	StudentDate dat;
    	char stu_name[20];
    	int bum, count = 0, rank;
    
    	system("title 学生成绩统计系统-查看");//6-将标题栏命名为“学生成绩统计系统”
    	bum = sortMenu();
    	if (bum == 1)//按平均分高低排序
    	{
    		for (p1 = pHead->next; p1 != NULL; p1 = p1->next)
    		{
    			for (p2 = p1->next; p2 != NULL; p2 = p2->next)
    			{
    				if (p2->one.aver_score > p1->one.aver_score)
    				{
    					dat = p2->one;
    					rank = p2->rank;
    					strcpy(stu_name, p2->name);
    					p2->one = p1->one;
    					p2->rank = p1->rank;
    					strcpy(p2->name, p1->name);
    					p1->one = dat;
    					p1->rank = rank;
    					strcpy(p1->name, stu_name);
    				}
    			}
    		}
    	}
    	else
    	{
    		if (bum == 2)//按学号高低排序
    		{
    			for (p1 = pHead->next; p1 != NULL; p1 = p1->next)
    			{
    				for (p2 = p1->next; p2 != NULL; p2 = p2->next)
    				{
    					if (p2->one.num < p1->one.num)
    					{
    						dat = p2->one;
    						rank = p2->rank;
    						strcpy(stu_name, p2->name);
    						p2->one = p1->one;
    						p2->rank = p1->rank;
    						strcpy(p2->name, p1->name);
    						p1->one = dat;
    						p1->rank = rank;
    						strcpy(p1->name, stu_name);
    					}
    				}
    			}
    		}
    		else
    		{
    			if (bum == 3)
    			{
    				return;
    			}
    			else
    			{
    				sortList(pHead);
    			}
    		}
    	}
    	printList(pHead);
    }
    /*================================================
    == 函数名:int sortMenu()
    == 功  能:排序方式菜单显示和选择 
    == 参  数:无 
    == 返回值:排序方式对应整型数 
    =================================================*/
    int sortMenu()
    {
    	int bum;
    
    	system("CLS");
    	printf("\n\n\n");
    	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    	printf("\t\t┃                       以什么方式查询 ?                  ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                    1   按成绩的高低                      ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                    2   按学号的升次                      ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                    3   返回主菜单                        ┃\n");
    	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    	printf("请按键选择:");
    	bum = (int)(getch() - '0');
    	system("CLS");
    
    	return bum;
    }
    /*================================================
    == 函数名:void printList(Student *pHead)
    == 功  能:链表数据打印 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void printList(Student *pHead)
    {
    	int count = 0;
    	pHead = pHead->next;
    	system("CLS");
    	printf("\n\  ┏━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┓");
    	printf("\n  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃c  ++ ┃平均分┃总  分┃名次┃\n");
    	while (pHead)
    	{
    		printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    		printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", pHead->one.num,
    			pHead->name, pHead->one.sex, pHead->one.prob_score, pHead->one.disc_score,
    			pHead->one.cpp_score, pHead->one.aver_score, pHead->one.sum_score, pHead->rank);
    		pHead = pHead->next;
    		count++;
    	}
    	printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");
    	printf("\t\t\t该班一共%d个人!", count);
    	getch();
    }
    /*================================================
    == 函数名:void statisStudentInfo(Student *pHead)
    == 功  能:查看学生信息 
    == 参  数:链表头指针 
    == 返回值:无 
    =================================================*/
    void statisStudentInfo(Student *pHead)
    {
    	double aver_score[5] = { 0,0,0,0,0 };
    	Student *p1 = pHead->next;
    	int count = 0;
    	int bad = 0, bum;
    
    	system("title 学生成绩统计系统-统计");//将标题栏命名为“学生成绩统计系统”
    	bum = statisMenu();
    	if (bum == 1)
    	{
    		while (p1)
    		{
    			aver_score[0] = aver_score[0] + p1->one.prob_score;
    			aver_score[1] = aver_score[1] + p1->one.disc_score;
    			aver_score[4] = aver_score[4] + p1->one.cpp_score;
    			p1 = p1->next;
    			count++;
    		}
    		aver_score[0] = aver_score[0] / count;
    		aver_score[1] = aver_score[1] / count;
    		aver_score[4] = aver_score[4] / count;
    		p1 = pHead->next;
    		printf("\n\n  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    		printf("  ┃\t概率的平均分为:%.1f,没有达到达到平均分的学生有        ┃\n", aver_score[0]);
    		printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");
    		printf("  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃  c++ ┃平均分┃总  分┃名次┃\n");
    		printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    		while (p1)
    		{
    			if (p1->one.prob_score < aver_score[0])
    			{
    				if (bad == 0)
    				{
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    						p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    						p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    				}
    				else
    				{
    					printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    						p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    						p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    				}
    				bad = 1;
    			}
    			p1 = p1->next;
    		}
    		bad = 0;
    		p1 = pHead->next;
    		printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");
    		printf("  ┃\t离散的平均分为:%.1f,没有达到达到平均分的学生有        ┃\n", aver_score[1]);
    		printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");
    		printf("  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃  c++ ┃平均分┃总  分┃名次┃\n");
    		printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    		while (p1)
    		{
    			if (p1->one.disc_score < aver_score[1])
    			{
    				if (bad == 0)
    				{
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    						p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    						p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    				}
    				else
    				{
    					printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    						p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    						p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    				}
    				bad = 1;
    			}
    			p1 = p1->next;
    		}
    
    		bad = 0;
    		p1 = pHead->next;
    		printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");
    		printf("  ┃\tc++的平均分为:%.1f,没有达到达到平均分的学生有         ┃\n", aver_score[4]);
    		printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");
    		printf("  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃  c++ ┃平均分┃总  分┃名次┃\n");
    		printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    		while (p1)
    		{
    			if (p1->one.cpp_score < aver_score[4])
    			{
    				if (bad == 0)
    				{
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    						p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    						p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    				}
    				else
    				{
    					printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    					printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    						p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    						p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    				}
    				bad = 1;
    			}
    			p1 = p1->next;
    		}
    		printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");
    		printf("\t\t\t\t\t\t该班一共%d个人!", count);
    	}
    	else
    	{
    		if (bum == 2)
    		{
    			bad = 0;
    			printf("\n\n  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    			printf("  ┃\t概率成绩大于90分或小于60的学生有                       ┃\n");
    			printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");
    			printf("  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃  c++ ┃平均分┃总  分┃名次┃\n");
    			printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    			p1 = pHead->next;
    			while (p1)
    			{
    				if (p1->one.prob_score < 60 || p1->one.prob_score >= 90)
    				{
    					if (bad == 0)
    					{
    						printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    							p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    							p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    					}
    					else
    					{
    						printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    						printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    							p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    							p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    					}
    					bad = 1;
    				}
    				p1 = p1->next;
    			}
    			bad = 0;
    			printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");
    			printf("  ┃\t离散成绩大于90分或小于60的学生有                       ┃\n");
    			printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");
    			printf("  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃  c++ ┃平均分┃总  分┃名次┃\n");
    			printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    			p1 = pHead->next;
    			while (p1)
    			{
    				if (p1->one.disc_score < 60 || p1->one.disc_score >= 90)
    				{
    					if (bad == 0)
    					{
    						printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    							p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    							p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    					}
    					else
    					{
    						printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    						printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    							p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    							p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    					}
    					bad = 1;
    				}
    				p1 = p1->next;
    			}
    			bad = 0;
    			printf("  ┣━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┫\n");
    			printf("  ┃\tc++成绩大于90分或小于60的学生有                        ┃\n");
    			printf("  ┣━━━━━━┳━━━━━━━━┳━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━┫\n");
    			printf("  ┃ 学号 ┃ 姓 名  ┃性别┃概  率┃离  散┃  c++ ┃平均分┃总  分┃名次┃\n");
    			printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    			p1 = pHead->next;
    			while (p1)
    			{
    				if (p1->one.cpp_score < 60 || p1->one.cpp_score >= 90)
    				{
    					if (bad == 0)
    					{
    						printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    							p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    							p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    					}
    					else
    					{
    						printf("  ┣━━━━━━╋━━━━━━━━╋━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━┫\n");
    						printf("  ┃ %-5d┃ %-6s ┃  %c ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃%5.1f ┃ %-3d┃\n", p1->one.num,
    							p1->name, p1->one.sex, p1->one.prob_score, p1->one.disc_score,
    							p1->one.cpp_score, p1->one.aver_score, p1->one.sum_score, p1->rank);
    					}
    					bad = 1;
    				}
    				p1 = p1->next;
    			}
    			printf("  ┗━━━━━━┻━━━━━━━━┻━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━┛\n");
    		}
    		else
    		{
    			if (bum == 3)
    			{
    				return;
    			}
    			else
    			{
    				statisStudentInfo(pHead);
    			}
    		}
    	}
    	getch();
    }
    /*================================================
    == 函数名:int statisMenu()
    == 功  能:查看方式菜单和选择 
    == 参  数:无 
    == 返回值:方式对应整型数 
    =================================================*/
    int statisMenu()
    {
    	int bum;
    
    	system("CLS");
    	printf("\n\n\n");
    	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    	printf("\t\t┃                   以什么方式统计学生信息?               ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                      1   按平均分                        ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                      2   按是否合格                      ┃\n");
    	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
    	printf("\t\t┃                      3   返回主菜单                      ┃\n");
    	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    	printf("请按键选择:");
    	bum = (int)(getch() - '0');
    	system("CLS");
    
    	return bum;
    }
    /*================================================
    == 函数名:void gotoxy(int x, int y)
    == 功  能:光标移动到指定位置 
    == 参  数:int x:列坐标 
               int y:行坐标 
    == 返回值:无 
    =================================================*/
    void gotoxy(int x, int y)//x为列坐标,y为行坐标
    {
    	COORD pos = { x, y };
    	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    	SetConsoleCursorPosition(hOut, pos);
    }
    

     

    展开全文
  • 学评估系统”是一个实用性非常高且能广泛应用的系统,只要学校能联网你 就可以通过这个系统来达到评教的目的 [3] 。我认为,电脑的作用是帮助人们实 现“偷懒”这一目的的重要工具,他把人们从累人的各种工作中无论...
  • 学生实习信息管理系统,可以用集中的数据库将与人力资源管理相关的信息全面、有机地联系起来,有效地减少了信息更新和查找中的重复劳动,保证了信息的相容性,从而大大地提高了工作效率,还能使原来不可能提供的分析...
  • 程序开发软件: Visual Studio 2010 数据库: sqlserver2005以上版本 开发语言: C# 可做毕业设计或课程设计源码 学院信息:学院编号,学院名称,成立日期,院长姓名,联系电话,附加信息 专业信息:专业编号,专业...
  • 该系统用于管理某高校的本科生、研究生2类人员信息: 本科生信息:学号、姓名、性别、专业、年级、班级、高数成绩、英语成绩、C语言、总成绩、班级排名、年级排名 ...有需求分析,系统设计、编码、运行结果等
  • WEB课设之学生成绩管理系统

    千次阅读 多人点赞 2019-07-18 17:40:44
    如何有效地管理这些学生的基本信息和成绩,帮助学校和老师掌握学生的基本情况,这就是学生成绩管理系统需要完成的功能。学生成绩管理系统主要是用来管理学生基本信息数据与学生成绩的系统。需要提供如录入、删除、...

    WEB课设之学生成绩管理系统

    一、设计内容

    学校每年都会有学生基本信息变动,也会举行期中期末考试。如何有效地管理这些学生的基本信息和成绩,帮助学校和老师掌握学生的基本情况,这就是学生成绩管理系统需要完成的功能。学生成绩管理系统主要是用来管理学生基本信息数据与学生成绩的系统。需要提供如录入、删除、修改、查找学生基本信息以及成绩,甚至个别学生或者全体学生成绩报表的导出和学生成绩柱状图的生成。

    1、 系统需求分析
    1.1 系统功能分析
    本系统主要的功能是向学校提供学生的基本信息和考试成绩。
    本系统主要有以下几项功能:
    a、用户登录相应账号并且输入对应密码才能进入系统进行相应操作
    b、添加学生功能:姓名、学号、性别、出生年月日。(学号系统会自动生成且唯一)
    c、根据学生学号或者姓名查找学生信息功能:在界面上显示姓名、学号和成绩
    d、学生信息的修改与删除功能:不能修改学号。
    e、根据学生学号查找学生成绩功能:在界面上显示姓名、学号和成绩。
    f、根据学生姓名(支持模糊匹配)查找学生成绩功能:并在界面上显示姓名、学号和成绩,如果有多个相同姓名学生存在,一起显示出来。
    g、修改添加学生成绩功能:每个人都有数学、Java、英语、体育四门课,可分课程输入成绩。
    h、生成学生学习情况报表功能:报表包含学号、姓名、各科目成绩及对应的该科目班级平均值,总成绩以及班级总成绩平均值,用户可选择分成个人或者全班学习情况导出至excel文件。
    i、支持对单个学生各科成绩生出柱状分布图。

    1.2 系统功能模块设计(划分)
    根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面,如图 1-1所示。
    在这里插入图片描述
    图1-1 学生成绩管理系统功能模块图

    1.3 与其它系统的关系
    学生成绩管理系统是校园信息管理系统的一个组成部分。它为其它系统如班级信息管理系统、教学管理系统、宿舍分配系统等提供学生的基本情况。同时需要其他系统提供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用所需的数据。

    1.4 数据流程图
    学生成绩管理系统的数据流程如图1-2所示。
    在这里插入图片描述
    图1-2 学生成绩管理系统数据流程图

    2、数据库设计
    2.1 数据库需求分析
    根据上一节图1-2学生成绩管理系统数据流程图,可以列出以下数据项、数据结构以及外部数据支持。
    记录学生信息所需的数据项和数据结构:
    A、学生信息表:学号、姓名、性别、生日。
    B、学生成绩表:学号、姓名、数学成绩、Java成绩、英语成绩、体育成绩。
    C、学生成绩导出表:学号、姓名、数学成绩、Java成绩、英语成绩、体育和四门科目成绩总分数。
    外部数据支持:
    A、 用户登录表:用户名、密码、用户身份证号码。

    2.2 数据库概念结构设计
    下图2-1是本系统所需数据的 E-R 模型图。
    在这里插入图片描述
    图2-1 学生成绩管理系统所需数据的 E-R 模型图

    2.3 数据库逻辑结构设计
    根据系统E-R图,需要设计3个数据表来存放学生的基本信息和成绩信息。为了系统的完整,系统中包括了应用程序设计中所需的1个外部数据表。这4个数据表如表1到表4所示。
    在这里插入图片描述
    表1 student学生信息表
    在这里插入图片描述
    表2 score学生成绩表
    在这里插入图片描述
    表3 report学生成绩导出表
    在这里插入图片描述
    表4 dlb用户登录表

    二、实现方法

    1、功能说明
    1.1 学生成绩管理系统用户注册登录和登录密码的修改
    1.2 学生个人基本信息输入
    1.3 学生个人基本信息查询、修改和删除
    1.4 学生成绩查询和修改
    1.5 学生个人或者全班成绩导出文件
    1.6 学生个人成绩生成柱状图

    2、系统界面设计
    完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。我们的系统主要有以下几个界面:
    2.1 用户账号密码信息注册界面
    2.2 用户账号密码登录界面
    2.3 用户登录失败界面
    2.4 用户密码修改界面
    2.5 学生个人基本信息录入界面
    2.6 学生个人基本信息查找界面
    2.7 查找学号失败界面
    2.8 查找姓名失败界面
    2.9 学生个人基本信息修改界面
    2.10 学生个人基本信息删除界面
    2.11 学生个人成绩查询界面
    2.12 学生个人成绩修改界面
    2.13 学生个人或者全部学生成绩导出文件界面
    2.14 学生个人成绩柱状图生成界面
    2.15 学生个人成绩柱状图显示界面
    2.16 用户操作失败界面
    2.17 用户登录主界面

    3、各功能模块的实现
    在这里插入图片描述
    图3-1用户账号密码信息注册界面

    在这里插入图片描述
    图3-2用户账号密码登录界面

    在这里插入图片描述
    图3-3学生个人基本信息录入界面

    在这里插入图片描述
    图3-4学生个人基本信息查找界面

    在这里插入图片描述
    图3-5学生个人基本信息修改界面

    在这里插入图片描述
    图3-6学生个人或者全部学生成绩导出文件界面

    以上只是WEB课设之学生成绩管理系统部分设计内容,如果想要WEB课设之学生成绩管理系统资源请点击下面资源链接进行下载,希望能帮助到你!

    独家资源:点击资源下载链接
    在这里插入图片描述

    各位大佬如有更好的建议或者不清楚的地方让各位产生了疑问,各位可以在评论中提出!

    展开全文
  • 系统主要分网站管理员、班主任、任课老师、学生这几个角色 网站管理学校设置 学校概要:设置学校简介、学校机构、学校领导、校园风景、联系我们 分院设置:录入分院信息、分院列表、分院信息修改和删除  ...
  • 第4章 系统设计 11 4.1系统网络架构设计 11 4.2系统总体设计 11 4.3系统功能模块设计 12 4.4数据库设计 13 4.5本章小结 16 第5章 系统的实现 17 5.1主页面的实现 17 5.2登录模块的实现 18 5.3学生成绩录入模块的实现...
  • 系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改 、增加、删除,另外还考虑到用户登录的权限,针对学生信息和...
  • 运动会成绩管理系统设计与实现 一、问题描述 参加运动会的一共有n个学校学校编号分别为1, 2, …, n。比赛共分成m个男子项目,和w个女子项目。项目编号规则如下:男子项目编号为1, 2, …, m,女子项目编号为m+1, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,035
精华内容 6,014
关键字:

学校成绩管理系统设计报告