精华内容
下载资源
问答
  • 学生信息管理系统架构设计

    千次阅读 2018-06-20 20:31:10
    目的学生信息管理系统架构设计 思考第一步:识别系统复杂度   架构设计的真正目的是为了解决软件复杂度带来的问题,故应首先识别本系统复杂度在何处,后文分析完整个系统见分晓。 思考第二步:基本功能 登录 ...

      近期学习架构设计,首先从最基本的学生信息管理系统进行分析。


    目的:学生信息管理系统架构设计

    思考第一步:识别系统复杂度

      架构设计的真正目的是为了解决软件复杂度带来的问题,故应首先识别本系统复杂度在何处,后文分析完整个系统见分晓。

    思考第二步:基本功能

    • 登录
    • 注册
    • 信息查询
    • 成绩管理
    • 课程管理

    思考第三步:性能

      一般学校学生约1~5万人,学生信息管理系统访问频率不高,平均每天单个学生的访问次数不到1次,因此性能这部分要求并不复杂,存储使用常规的MySQL数据库既能胜任,缓存可以不用,Web服务器使用Nginx绰绰有余。

    思考第四步:可扩展性

      学生信息管理系统功能比较稳定,可扩展空间并不大,因此可扩展性也不复杂。

    思考第五步:高可用

      学生信息管理系统即使宕机2小时,对学生管理工作影响并不大,因此可以不用做负载均衡,更不用考虑异地多活这类复杂的方案。但是,如果学生的数据全部丢失,修复是非常麻烦的,只能靠人工逐条修复,这个很难接受,因此需要考虑存储高可靠,这里就有点复杂了。我们需要考虑多种异常情况:机器故障、机房故障等。针对机器故障,我们需要设计MySQL的同机房主备方案;针对机房故障,我们需要设计MySQL的跨机房同步方案。

    思考第六步:成本

      由于系统很简单,基本上几台服务器就能搞定,对于一所大学来说完全不是问题,故无需关注太多。

    结论

      至此,可以看出本系统设计方案的主要复杂性体现在存储可靠性上,需要保证异常的时候,不要丢失所有数据即可(丢失几个或几十个学生的信息问题不大)。对应的架构如下:

    学生信息管理系统架构设计

    转载于:https://blog.51cto.com/weiyuqingcheng/2131089

    展开全文
  • 基于php学生信息管理系统设计

    千次阅读 2019-04-13 23:42:47
    若干年前,各个学校的学生成绩管理基本上都是靠手工进行,随着学校的规模增大,有关学生信息管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生信息管理。但手工管理具有效率底、易出错、检索...

    获取项目源文件,联系Q:1415736481,可指导毕设,课设

    摘要

    若干年前,各个学校的学生成绩管理基本上都是靠手工进行,随着学校的规模增大,有关学生信息管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生信息管理。但手工管理具有效率底、易出错、检索信息慢、对学校的管理提供决策信息较为困难等缺点。因此,使用效率更高的方式来处理这些数据就更显得重要了。本文就该系统进行分析和整体的介绍,并介绍了使用PHP + MYQSL技术开发该系统的相关模块的整个过程。该系统主要利用了PHP强大的网络数据库访问技术,与MYSQL的强大的数据库功能来实现主要功能。系统设计并实现了学生基本信息管理,以及管理员后台管理的功能。

    论文主要介绍了本课题的开发背景、系统分析、数据库设计和系统的设计与实现。

    关键词  asp;mysql;信息管理;管理员后台管理

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    前言

    PHP是一种跨平台、嵌入式的服务器执行的描述语言。Internet的兴起加速了人与人之间的沟通,环球网(World Wide Web,WWW)的普及是的网络的使用由早期的蚊子、命令控制的模式进而演变到图形、鼠标控制模式,而在网络的软件及硬件的快速发展之下,网络正向多媒体方向发展。目前,网络已经变成现代人们生活中不克或缺的一部分,未来的发展更无可限量。由于网络的快速发展,网络上的各种应用也从单向的服务发展到交互式的服务,使用户可以利用CGI来达到和服务器互动的效果。近年来,动态网页的发展非常迅速,为了达到互动的效果,许多技术应运而生,PHP即是其中一种。从PHP4到PHP5,在面向对象设计概念上有相当大的改变。在PHP5以前,及支持面向对象的概念,几在PHP程序中可以使用面向对象的概念,但是面向对象的功能支持不多。在PHP5中已经可以看到相当完整的面向对象功能,除了面向对象以外PHP5还增加了许多其他功能,包括使用Zend Engine II、更新加强XML、MYSQL extension等。PHP支持的数据库也相当多,它除了跟一般的CGI语言一样可以有网页采集数据,经处理之后响应给用户以外,还支持各种数据库使得用户可以轻松地开发出网络数据库的应用程序。

    PHP可以在UNIX系列及Windows系列的操作系统上运行,且不会因为操作系统的兼容性产生问题。且PHP是开放的源代码,即在GPL下用户可以任意地使用并且不会受到限制,使得许多爱好者都可以加入到研究工作中,进而使得各种技术能过得到蓬勃发展。

    PHP的应用范围相当广,除了可以用于设计一般的网页互动效果以外,还可以在授权认证的范围之下进行存取文件等操作。PHP支持许多数据库,因此可以利用Internet轻易地访问数据内容,而目前最热门的电子商务更缺少不了这样的技术。另外,PHP也支持各种通信协议,还可以轻易地开发出许多客户端的网络应用程序。

    PHP可简单的视为一种程式语言,可以用来设计留言版,讨论区,或聊天室等等的动态网页.而MySQL是资料库的一种,最常用的用途是作为网页程式之资料库,为了因应未来讨论区文章会日渐增多,所以需要有MySQL套件的支援,其目的就是在处理这些由客户端传送来的资料.所以,PHP可以应用的范围可针对其特性进行发挥。常见的PHP应用包括交互式网页、动态网页、留言板、讨论区、电子邮件等。

    第一章  设计理论

    1.1 PHP 程序设计的特点

     PHP是一种很有前景的Web语言,因为它有着诸多方面的优势。

    1.1.1开源性代码

    这就意味着可随意修改和扩展它的功能,还能够得到数百万PHP程序员、数万个PHP开发团队的支持,可与他们一道分享心得,交流经验,这对程序员来说是在美妙不过的事情了。

    1.1.2易于学习

    PHP的语法与C、ASP、JSP类似,对于熟悉上述语言之一的人来说,只需要30分钟就可以将PHP的核心语法全部掌握,如果又对HTML非常了解,就能立即把PHP代码无障碍地添加进站点,使得站点具有动态性和交互性

    1.1.3数据库的连接

    PHP的开发者们为了更适合Web编程,开发了许多外围的基库,这些库包含了更易用的层,这样就可以方便地利用PHP连接包括Oracle、MS-Access、MYSQL在内的大部分数据库。

    还有就是它是面向对象编程的,基于Web的编程工作非常需要面向对象编程,PHP能够满足这些需求,它面向对象,提供类和对象,支持构造器。

    最后还值得特别提出的就是它的可扩展性,随着版本的更新,PHP的功能在一步步扩展,同时由于它是开源项目,只需要熟悉PHP,自己完全能对它的功能进行扩展。基于这些优势,所以,在选择开发学生管理系统的时候我使用了PHP脚本语言。

    1.2 MYSQL 数据库技术

     对于网站开发来说,使用数据库是开发专业站点必不可少的,但是但是数据库类别林林总总,Access、SQL Server和Oracle都不是开源免费软件,需要购买才能使用,而MYSQL是开源软件,选择MYSQL是最节能成本的做法,而且Apache、PHP、MYSQL是绝配,它们的组合有着最佳的性能和最大的用户支持群。

    MYSQL是一个真正的多用户,多线程的结构化查询语言数据服务器,它以客户机/服务器的结构实现,并且还具有以下优势。

    1.2.1速度快

    开发者声称MYSQL数据库可能是目前得到的最快的数据库。

    1.2.2连接性和安全性

    MYSQL是完全网络化的,其数据库可在因特网上访问,因此可以和任何地方的任何人共享数据库,而且MYSQL还能进行访问控制,能够控制特定用户不允许其访问数据库。

    1.2.3可移植性

    MYSQL可运行在各种版本的UNIX系统及其他费NUXI系统上,从家用的PC到高级服务器都可运行MYSQL

    1.2.4它支持SQL语言

    MYSQL支持支持这种现代数据库系统都选用的语言。

    1.2.5容易使用

    MYSQL是一个高性能且相对简单的数据库,易于操作。

    1.2.6成本优势

    MYSQL对于对于大多数个人用户来说是免费的!

    基于以上种种优势,所以,在做学生管理系统的时候我选择使用MYSQL作为Web服务器的数据库。

    第二章  需求分析

    2.1系统需求分析

    随着高学学生的增多,师资力量的扩大,学样课程的增加,对教师与学生、课程管理的要求也越来越高,而如何有效的管理起教师与学生等学绩相关的资源,就成为了各高校考虑的一个重要方面。

        为此,我们设计了本学生管理系统,为师生提供了完善的信息管理功能。

    2.2 学生管理系统的实现目标分析

    学生课绩信息管理系统主要提供了登陆模块,学生模块,教师模块,管理员模块,四部分组成。,其主要功能如下:

    根椐用户登录的类型,自动转向相应的操作模块。

    学生模块中,学生可以查看成绩与及自己的个人信息等操作。

    教师模块中,教师可以有查看学生信息的所有信息。

    管理员模块中,有包括新增,更改,删除、查询学生,信息的功能。

    第三章  学生管理系统的设计

    3.1 学生管理系统开发工具的确定

     基于以上学生管理系统开发语言以及数据库的确定,所以本系统的开发工具就选择了Dreamweaver8.02版本和MYSQL5.0版本以及Photoshop CS版本

    3.2 学生管理系统的开发思想

    尽量采用学校现有的管理思路,及先进的学生管理系统开发方案,从而达到提高系统开发水平和应用效果的目的;

    系统应符合学生管理系统的规定,满足常用的信息管理需求,并达到操作过程的直观、方便、实用、安全等要求;

    系统采用模块化的程序设计方法,既便于系统功能模块的组合,又便于未参与开发的技术人员补充、维护;

    3.3 学生管理系统的功能

    3.3.1 学生管理系统功能分析

    实现功能包括查询学生信息 、添加学生信息、修改学生信息、删除学生信息 打印学生信息等主要用PHP动态代码编写与测试

     

    3.3.2学生管理系统设计

    根据分析得出如下图所示的学生管理系统流程图

     

    查询界面

    退出结束

    查询

    删除

    修改

    插入

    管理员界面

    检验密码

    检验密码

    用户登录

    管理员登陆

    开始

     

     

     

    四、学生管理系统的实现

     4.1 学生管理系统主体窗口的实现

    4.1.1登陆窗口

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    4.1.2主题功能窗口

     

     4.2学生管理系统主题功能的实现

       实现功能包括查询学生信息 、添加学生信息、修改学生信息、删除学生信息 打印学生信息等主要用PHP动态代码编写与测试

    4.2.1、管理员界面与登录连接

    <?php

    session_start();

    $USER=$_GET['textfield3'];

    $APWD=$_GET['textfield4'];

    $db=mysql_connect("localhost","root","root");

    mysql_select_db("b",$db);

    $result=mysql_db_query("b","select * from student where id='".$USER."'",$db);

    $rs=mysql_fetch_array($result,2);

    session_register("a");

    session_register("b");

    $_SESSION['a']=$rs[0];

    $_SESSION['b']=$rs[0];

    if(($USER==$_SESSION['a'])and($APWD==$_SESSION['b']))

    {header("Location: http://127.0.0.1/php/select.html");}

    else

    { $result=mysql_db_query("b","select * from student ");

     $rs=mysql_fetch_array($result,2);

      if($rs[0]!=$USER and $rs[1]!=$APWD)

       echo "不存在";

       else

      echo "cuowu ";}

    mysql_free_result($result);

    mysql_close($db);

    ?>

    4.2.2、普通用户查询连接

    <?php

    $USER=$_GET['user'];

    $APWD=$_GET['apwd'];

    $db=mysql_connect("localhost","root","root");

    mysql_select_db("b",$db);

    $result=mysql_db_query("b","select * from admin ");

    $rs=mysql_fetch_array($result,2);

    session_start();

    session_register("a");

    session_register("b");

    $_SESSION['a']=$rs[0];

    $_SESSION['b']=$rs[1];

    if(($USER==$_SESSION['a']) and  ($APWD==$_SESSION['b']))

    header ("Location: http://127.0.0.1/php/guanli.html");

    else

    header ("Location: http://127.0.0.1/php/denlu.html");

    mysql_free_result($result);

    mysql_close($db);

    ?>

    4.2.3、管理员的插入操作

    <?php

    require_once 'config.php';  //引入配置文件

    $dept_id=$_POST['dept_id'];

    $class_id=$_POST['class_id'];

    $s_id=$_POST['s_id'];

    $name=$_POST['name'];

    $sex=$_POST['sex'];

    $age=$_POST['age'];

    $datetime=$_POST['datetime'];

    $tel=$_POST['tel'];

    $address=$_POST['address'];

    $beizhu=$_POST['beizhu'];

    $db=mysql_connect($db_host,$db_user,$db_password);

    if(!$db)

    echo mysql_error();

    mysql_select_db("message");

    if($beizhu!="")

    {

    $myquery="insert into student values ('$dept_id','$class_id','$s_id','$name','$sex','$age','$datetime','$tel','$address','$beizhu')";

    $result=mysql_query($myquery,$db);

    if($result)

    {

    echo "添加成功";

    }

    else

    {

    echo "失败";

    }

    }

     

    else

    {

    $myquery="insert into student values ('$dept_id','$class_id','$s_id','$name','$sex','$age','$datetime','$tel','$address','null')";

    $result=mysql_query($myquery,$db);

    if($result)

    {

    echo "添加成功";

    }

    else

    {

     echo "失败";

    }

     

    }

    echo mysql_error();

    ?>

    4.2.4、管理员修改界面的连接

    <?php

    $dept_id=$_POST['dept_id'];

    $class_id=$_POST['class_id'];

    $s_id=$_POST['s_id'];

    $name=$_POST['name'];

    $sex=$_POST['sex'];

    $age=$_POST['age'];

    $datetime=$_POST['datetime'];

    $tel=$_POST['tel'];

    $address=$_POST['address'];

    $beizhu=$_POST['beizhu'];

    $borthdy=$_POST['borthdy'];

    require_once 'config.php';  //引入配置文件

    $db=mysql_connect($db_host,$db_user,$db_password);

    mysql_select_db("message");

     

    $myquery="update student set dept_id='".$dept_id."',class_id='".$class_id."',name='".$name."',sex='".$sex."',age='".$age."',borthday='".$borthday."',tel='".$tel."',address='".$address."',beizhu='null'  where '".$s_id."'=s_id ";

     

    $result=mysql_query($myquery,$db);

    echo $result;

    if($result)

    {

    echo "修改成功";

    }

    else

    {

     echo "修改失败";

    }

    ?>

    4.2.5管理员删除操作

    <?php

    $s_id=$_POST['textfield'];

    require_once 'config.php';  //引入配置文件

    $db=mysql_connect($db_host,$db_user,$db_password);

    mysql_select_db("message",$db);

    $result=mysql_query("select * from student where '".$s_id."'=s_id ",$db);

    $rs=mysql_fetch_array($result,2);

    if(!$rs)

    {

       echo "不存在";

    }

    else

    {

    echo $rs[0];

    echo "<center>";

    echo "<br><br><br><br>";

    echo "<h1>你删除的信息是:</h1>";

    echo "<br><br><br><br>";

    echo "<table algin=center border=1><tr algin=center bgcolor=#ffccff>";

     echo "<tr algin=center bgcolor=#CCFFCC><td>系别</td><td>班级</td><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td><td>出生日期</td><td>联系方式</td><td>地址</td><td>备注</td></tr><tr>";

    foreach($rs as $value)

        {

         echo "<td>";

        echo $value;

         echo "</td>";

        }

    echo "</tr></table>";   

    echo "</center>";

    $result=mysql_query("delete from student where '".$s_id."'=s_id ",$db);

    echo $result;

    if($result)

    {

     echo "<center>";

     echo "<br><br><br><br>";

     echo "<h3>删除成功</h3>";

     echo "</center>";

    }

    else

    {

     echo "<center>";

     echo "删除失败";

     echo "</center>";

    }

    }

    ?>

    4.2.6、管理员和普通用户的查询操作

    <?php

      $a=$_GET['id'];

        $db=mysql_connect("localhost","root","root");

      mysql_select_db("b",$db);

       

       $result=mysql_db_query("b","select * from student where id='".$a."' ",$db);

        $rs=mysql_fetch_array($result,2);

      if($rs)

      { 

             if(ereg ("0([0-9]{4})0([0-9]{2}$)",$a))

             {  $c=mysql_connect("127.0.0.1","root","root");

                $q=mysql_db_query("b","select * from student where id='".$a."'",$db);

                echo "<table border=1><tr>";

                echo"<td>id</td><td>name</td><td>English</td>

                     <td>chinese</td><td>math</td><td>TE</td>";

                echo "</tr>";

                while ($f=mysql_fetch_array($q))

                {  

                    echo "<tr>";

                    echo "<td>".$f[0]."</td><td>".$f[1]."</td><td>".$f[2]."</td>

                          <td>".$f[3]."</td><td>".$f[4]."</td><td>".$f[5]."</td>";

                }

                echo "</table>";

       }

       else

       {   echo "你输入的学号不正确,重新输入。";

       }

       }  

          else

        echo "学号不存在";

    ?>

    五、MySQL数据库与PHP连接与创建

    5.1、PHP与MySQL数据库的连接

    把ini文件复制到C盘指定路径system32下并保存。重新启动Apache和Mysql。

    PHP中建立MySQL数据库。

    建立:create database message;

    use message;

    create table student (dept_id varchar(2) ,class_id varchar(5) ,s_id varchar(8) ,name varchar(10) ,sex varchar(4) ,age int ,birthday varchar(8) ,tel varchar(11) ,address varchar(50) ,beizhu varchar(50));

    5.2总体测试

     管理员用户"输入自己的用户名和口令(用户名:root口令:root),点击"登录".登录之后可以:添加学生信息,修改学生信息,查询学生资料,删除学生信息等操作.

    普通用户:输入自己的学号和口令(学号和口令统一为123456),点击"登录".完成登录之后可以:自由查询个人信息.

    六、小结

        使用PHP(Hypertext Preprocessor)最简单的目的是为了要产生「动态」的网页,所谓「动态」,不是指网页上有几个会动的GIF图档,或是有个川流不息的走马登,而是指动态的「内容」,例如:我们想在网页上呈现一些最新的消息,当讯息要更新时,我们得重新编辑该网页(HTML档),在这种情况下,这个网页是「静态」的,因为它的内容不能即时更新.如果要改写这个网页,在其中加入存取资料库撷取最新资讯的话,那0它就是个「动态」的网页了;以后无论视讯息的增加或异动,都只要从资料库中著手,无须再去修改这网页了.

    通过这次课程设计,我们对PHP、Apache、MySQL三套软件更加熟悉,从而我们使用静态代码不能实现的界面可以利用php动态代码来完善实现它的不足,而且对我们以后大型网站的设计、代码程序的编写都做了良好的基础。对PHP我们可以利用其比较成熟的功能优势来设计面向对象的界面,从而使我们的动态页面更加美观、完善而且强大。

    通过系统的开发,我对软件开发过程有了更清晰的了解,首先是问题定义、需求分析,然后是功能设计、详细设计等,并对软件测试的方法、手段有了较深的理解,同时对制造业的流程有了一个系统的认识。在开发过程还认真学习了与系统相关的知识,极大地拓宽了我的知识面,我感到收获不小。

    因为以前没有使用PHP语言设计管理软件的经验,在这次设计的过程中,我遇到专业知识方面的困难非常多,主要困难集中在管理知识、思路设计等方面的不足上。

    还有就是操作界面的方面问题,尽管在设计的过程中,我们时刻考虑到了操作界面的友好性,但实际情况是远远不能满足本系统的要求,我想在今后的发展中,本系统还会有一个更大的提升空间。

    经过这3个月的毕业设计实习,确实学到了不少的东西,同时也深感自己知识的欠缺。虽然即将毕业,但在以后的学习工作中,一定要继续坚持不懈地学习新兴的专业知识及相关的非专业知识,只有这样才能紧跟时代的潮流,符合社会的需要。

    致  谢

    如果没有郭国弟老师的细心指导,以及班主任朱海水老师和同学的帮助,我不可能这么顺利地完成毕业设计。在这段时间里,郭老师总是细心地指出我的设计里的每一处错误,不厌其烦地对我进行指导,使我在完成任务的过程中不断进步,不断成长。虽然不到一年的时间不算长,但这却是我学习生涯中的最关键时刻,使我终身难忘。

    在此,我只想真心地对郭老师和班主任老师说声“谢谢”,并祝他们身体健康,工作顺利,万事如意。同时,我也感谢全体计算机1班的同学对我默默地支持。最后,我还想说一声:“我爱永成职业学院”,现在我又突然想起那句永远藏在心底的话,“今天我以学校为荣,明天学校以我为荣”,我坚信我们学校的同学在离开学校后,回像在学校是一样的积极向上,并在自己的工作岗位上敬业奉献!学校会以我为荣的!

     

    参考文献

    [1]  Vikram Vaswani.MYSQL完全手册.北京:电子工业出版社,2007,4

    [2]  高红霞. 21天学通PHP.北京:电子工业出版社,2009,3

    [3]  刘竹林. 软件工程与项目管理.北京:北京师范大学出版社,2008,7

    [4]  (美)吉尔摩. PHP与MySQL 5程序设计(第二版). 北京:人民邮电出版社,2007,2

    [5]  PHP China . PHP 5项目开发实战详解.北京:电子工业出版社2008,1

    [6]  四维科技 赵斯思 曹衍龙 . PHP网络编程技术与实例.北京:人民邮电出版社,2006,3

    [7] (美) Luke Welling, Laura Thomson. PHP和MySQL Web开发_中文版(SAMS PUBLISHING PHP AND MYSQL WEB DEVELOPMENT)2005大全.北京: 机械工业出版社,2005,333

    展开全文
  • 数据库课程设计——学生宿舍信息管理系统

    万次阅读 多人点赞 2018-09-17 23:33:00
    数据库课程设计——学生宿舍信息管理系统 目录  1.设计目的... 2 2、任务与要求... 2 3、学生宿舍管理系统课程设计... 2 3.1 引言... 2 3.2需求分析... 2 3.2.1....

    数据库课程设计——学生宿舍信息管理系统

    目录                                                                                             

    1.设计目的... 2

    2、任务与要求... 2

    3、学生宿舍管理系统课程设计... 2

    3.1 引言... 2

    3.2需求分析... 2

    3.2.1. 2

    3.2.2. 3

    3.3概念设计... 6

    3.4逻辑设计... 10

    3.5物理结构设计... 12

    3.6数据库实施... 14

    3.6.1数据库表的定义... 14

    3.6.2视图的定义:... 15

    3.6.3索引:... 16

    3.6.4触发器的定义:... 17

    3.6.5用户的定义:... 18

    3.6.6 对数据的管理:... 18

    3.7系统调试和测试... 19

    4.系统评价... 20

    4.1我的系统特色:... 20

    4.2 系统不足及改进... 21

    5.设计心得... 21

     

    1.设计目的

    《数据库系统原理》课程设计是软件工程和计算机科学与技术专业集中实践性环节之一,旨在让我们自身加深对数据库基础理论和基本知识的理解,掌握设计数据库管理系统的基本方法,锻炼运用知识解决实际问题的动手能力。

    2、任务与要求

    要求学生们从给定的设计题目中进行选择,进行需求分析,概念设计、逻辑设计,数据库的设计过程,表结构、表之间的关联,给出视图的定义、触发器的定义、索引,安全性的实现,用SQL语句等在SQL Server 2008系统中实现数据库的数据输入,查询,更新和输出;给出实现效果截图及部分测试结果。

     

    3、学生宿舍管理系统课程设计

    3.1 引言

     

    随着社会的发展以及教育水平的提高,当今社会在校生的数量越来越庞大。与此同时,使用曾经的手工的方式对学生的信息进行管理效率非常低下。在互联网技术高度发达的今天 ,使用数据库技术队对学生的住信息进行管理能够使学校对学生信息的管理更加的高效,检索迅速,查找方便,可靠性高存储量大。使用数据库技术的这些优点可以使得学生信息出错的发生。同时使用数据库技术可以使学生住宿信息长时间稳定地保存,也不容易丢失。开发出这样的一个数据库迫在眉睫。

    3.2需求分析

    3.2.1

     系统需求调查的方法为访谈法,通过对多个学校的宿舍管理人员进行交谈,从而得出系统的主要任务和特定的要求。系统的主要任务是能够对宿舍信息,学生信息,管理员信息,住宿信息进行登记,调整,并能进行各种查询以及信息的备份。

     

    完整性要求:防止不符合语义的数据进入数据库。

    安全性要求:需要防止客户对数据进行未经授权的访问。

    性能要求:最好能够实现并发访问,允许多个用户同时对数据库中的数据进行访问。

    一致性要求:防止数据库进入不一致状态。

    数据库要求:各种各样的故障都可能发生,出现意外时,,尽可能的确保任何数据在任何情况下都不会丢失。

    3.2.2

    系统的业务流程:

    学生入住和退宿时通过管理员进行登记;

    住宿产生的各种费用以及使用的各项物品由管理员进行登记;

    管理员将登记的各项信息上报给教务处;

    教务处将各项住宿信息进行统一管理;

    储存的所有数据供不同权限的客户进行访问;

     

     

    数据字典:

    学生基本信息

    编号

    属性名

    类型

    解释

    备注

    0001

    学号

    Varchar(15)

    0002

    姓名

    Varchar(10)

    0003

    性别

    Varchar(2)

    男、女

    0004

    年龄

    Int

    0……100之间

    0005

    手机号

    Varchar(15)

    手机号码

    0006

    专业

    Varchar(20)

     

    住宿费用信息:

     

     

    编号

    属性名

    类型

    解释

    备注

    0008

    表单编号

    Varchar(15)

    0009

    学号

    Varchar(15)

    0010

    宿舍号

    Varchar(6)

    不是门牌号

    0011

    水费

    Double(6)

    大于0

    0012

    电费

    Double(6)

    大于0

    0013

    维修费

    Double(6)

    大于0

    0014

    住宿费

    Double(6)

    大于0

    0015

    日期

    Date(8)

    0016

    合计

    Double(6)

    大于0

     

     

     

    物品管理信息:

     

    编号

    属性名

    类型

    解释

    备注

    0017

    员工号

    Varchar(15)

    0018

    宿舍号

    Varchar(15)

    0019

    桌子

    Int

    大于0

    0020

    椅子

    Int

    大于0

    0021

    Int

    大于0

    0022

    电扇

    Int

    大于0

    0023

    Int

    大于0

    0024

    窗户

    Int

    大于0

     

     

     

    宿舍信息

     

    编号

    属性名

    类型

    解释

    备注

    0025

    宿舍编号

    Varchar(15)

    0026

    楼号

    Varchar(15)

    0027

    区域

    Varchar(15)

    校园内

    ABCDEFG

    0028

    人数

    Int

    0……8

    0029

    房间类型

    Varchar(15)

    按人数分

    1(四人)2(六人)3(八人)

     

     

    管理员信息

     

    编号

    属性名

    类型

    解释

    备注

    0030

    员工号

    Varchar(15)

    0031

    姓名

    Varchar(10)

    0032

    性别

    Varchar(2)

    男,女

    0033

    年龄

    Int

    0……100

    0034

    手机号

    Varchar(15)

    11位

    0035

    楼号

    int

    0036

    区域

    int

    ABCDEFG

    0037

    职位

    Varchar(2)

    1(高级员工)2(普通员工)

     

     

    3.2.2 系统功能描述:

    对学生的信息进行管理;

    对宿舍信息进行管理;

    对管理员信息进行管理;

    对宿舍物品进行登记和管理;

    对住宿产生的各项费用进行登记和管理;

    对已经更改的学生和管理员信息进行保存

     

    在这幅图中,其中各项从左往右前5部分功能都包括各自信息的增删改查,第六项功能为学生和教师信息的备份,也就是已修改信息储存。

    3.3概念设计

    (说明使用数据库概念设计的基本思想和原理方法,设计出系统E-R图)

    基本思想:将需求分析得到的用户需求抽象为信息结构,分析数据字典中数据字典间内在语义关联,并将其抽象表示为数据的概念模式,从而能真实,充分地反应真实世界,包括事物和事物之间的联系,能满足用户对数据的处理需求,是现实世界的一个真实模型,易于理解,从而可以用它和不熟悉计算机的人交换意见,且易于更改。方法:首先分析整个系统中涉及到的实体,得到局部的ER图。然后分析这些实体之间的关系,进行连接从而得到

     

     

     

     

     

     

    3.4逻辑设计

    基本思想:首先整个系统一共可以划分出三个实体,分别是学生,管理员和宿舍,三者之间构成一个三角关系。同时,学生和宿舍之间的住宿关系衍生出一系列的住宿产生的费用,管理员和宿舍的管理关系衍生出一系列需要管理的物品,因此五张表相互关联生成完整的数据库系统。

    数据库关系图:

    学生的个人信息:学号,姓名,性别,年龄,手机号码,专业,管理员号

    student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,manager_num)

     

    宿舍费用信息:表单编号,水费,电费,维修费,住宿费,总费用,日期

    live(list_num,stu_num,dor_num,water,electric,service,lodge,total,date)

     

    宿舍物品信息:桌子,椅子,床,灯,

    tool(mana_num,dor_num,table,chair,bed,light)

     

    宿舍信息:宿舍编号,人数,房间类型,楼号,区域

    dormitory(dor_num ,prople_total,size, build_num,zone)

     

    宿舍管理人员信息:员工号,姓名,性别,年龄,手机号

    manager(mana_num,mana_name,mana_gender,mana_age,mana_tele)

      

      

    3.5物理结构设计

     

    物理设计的基本思想:根据逻辑设计出的逻辑模式,DBMS及计算机系统所提供的手段和施加的限制,设计数据库的内模式,即文件结构,各种路径,控件分配,记录的存取方式等,为逻辑数据结构选取一个最合适的应用环境的物理结构。

    学生基本信息表:

     

    属性名

    类型

    长度

    备注

    Stu_num

    varchar

    15

    Stu_name

    varchar

    10

    Stu_gender

    varchar

    2

    男、女

    Stu_age

    int

    4

    0……100之间

    Stu_tele

    varchar

    15

    Stu_spe

    varchar

    20

    住宿费用信息表:

     

    属性名

    类型

    长度

    备注

    List_num

    Varchar

    15

       Stu_num

    Varchar

    15

       Dor_num

    Varchar

    15

    water

    double

    6

    大于0

    Elect

    double

    6

    大于0

        Repaire

    double

    6

    大于0

    live

    double

    6

    大于0

    date

    date

    8

    指的是具体一年

    物品管理信息表:

     

    属性名

    类型

    长度

    备注

    Mana_num

    Varchar

    15

        Dor_num

    Varchar

    15

    Desk

    Int

    2

    大于0

    Chair

    Int

    2

    大于0

    Bed

    Int

    2

    大于0

    fan

    Int

    2

    大于0

    lighr

    Int

    2

    大于0

    window

    Int

    2

    大于0

    宿舍信息表:

    属性名

    类型

    长度

    备注

    Dor_num

    Varchar

    15

    Build_num

    Varchar

    2

    Zone

    Varchar

    2

    ABCDEFG

    People_total

    Int

    2

    0……8

    size

    varchar

    2

    1(四人)2(六人)3(八人)

    管理员信息表:

    属性名

    类型

    长度

    备注

       Mana_num

    Varchar

    15

    Mana_name

    Varchar

    10

    Mana_gender

    Varchar

    2

    男,女

    Mana_age

    Int

    4

    0……100

    Mana_tele

    varchar

    15

    11位

    Build_num

    int

    2

    zone

    varchar

    2

    ABCDEFG

    3.6数据库实施

    数据库的实施:数据库设计完成后,设计人员要用DBMS提供的数据定义语言和其他的使用程序将数据库逻辑结构设计和物理结构设计的结构用DDL严格描绘出来,成为DBMS可以接受的源代码,再经过调试产生目标模式。最后将数据装入数据库。

     

    3.6.1数据库表的定义

    创建学生信息表:

     Create table student

    (stu_num  varchar(15),

    Stu_name  varchar(10),

    Stu_gender  varchar(2)  check(stu_gender=’男’ or stu_gender=’女’),

    Stu_age  int  check(stu_age>0 and stu_age<100),

    Stu_tele  varchar(15),

    Stu_spe  varchar(20),

    Primary key (stu_num),

    );

     

    创建费用信息表:

     Create  table  live

    ( list_num  varchar(15),

    Stu_num  varchar(15),

    Dor_num  varchar(15),

    Water  float check(water>=0),

    Elect  float  check(elect>=0),

    Repair  float  check(repair>=0),

    Living  float  check(living>=0),

    statu  int default(1), 

    Date  date,

    Primary key(list_num),

    Foreign key (stu_num ) references  student(stu_num)

    on update cascade,

    Foreign key (dor_num ) references  dormitory(dor_num)

    on update cascade

    );

     

     

    创建物品信息管理表:

    Create  table tool

    ( mana_num  varchar(15),

    Dor_num  varchar(15),

    desk  int  check(desk>=0),

    Chair  int  check(chair>=0),

    Bed  int  check(bed>=0),

    Light  int  check(light>=0),

    Primary key (dor_num),

    Foreign key (mana_num ) references  manager(mana_num)

    on update cascade on delete set null

    );

     

    创建宿舍信息管理表:

     Create table dormitory

    (dor_num varchar(15),

    People_total  int  check(people_total>=0 and people_total<=8),

    Size   int check(size=1 or size=2  or size=3)

    );

     

    创建管理员信息表:

     Create table manager

    (mana_num  varchar(15),

    mana_name  varchar(10),

    mana_gender  varchar(2)  check(stu_gender='男' or stu_gender='女'),

    mana_age  int  check(stu_age>0 and stu_age<100),

    mana_tele  varchar(15),

    Primary key (mana_num)

    );

     

    3.6.2视图的定义:

    所有的信息汇总在一起:

    Create view allmass

    (stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dor_num,water,elect,repair,living,live_status,Date,people_total,size,dor_status,mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu)

    as select student.stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dormitory.dor_num,water,elect,repair,living,live_statu,Date,people_total,size,dor_statu,manager.mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu

    from student,lives,dormitory,tool,manager

    where student.stu_num=lives.stu_num

    and lives.dor_num=dormitory.dor_num

    and dormitory.dor_num=tool.dor_num

    and tool.mana_num= manager.mana_num ;

    学生信息视图:

    Select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,mana_name

    from allmass

    where stu_statu=1;

     

    管理员信息:

    create view manager_view

    as

    select manager.mana_num,mana_name,mana_age,mana_gender,mana_tele

    from manager

    where  mana_statu=1;

    宿舍信息:

    create view dormitory_view

    as

    select tool.dor_num,build_num,zone,people_total,size

    from tool,dormitory

    where tool.dor_num=dormitory.dor_num and dor_statu=1;

    物品信息:

    create view tool_view

    as

    select dor_num,mana_num, desk,chair,bed,light

    from tool

    where tool_statu=1;

    账单信息:

    create view lives_view

    as

    select list_num,stu_name,dor_num,water,elect,date,repair,living

    from lives,student

    where live_statu=1 and lives.stu_num=student.stu_num;

     

    3.6.3索引:

    每一张表通过主键的列产生索引,从而加快查询时的进度。

    拿学生信息表进行举例:

    Create index stu_index on student(stu_num);

    当然可以通过数据库自动生成。

     

    3.6.4触发器的定义:

    在学生表上建立触发器,记录被修改的信息。在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。

    create trigger on_pre_stu

    on student

    for update

    as

    begin

    declare @stu_num varchar(15)

    declare @pre_stu_name varchar(10)

    declare @pre_stu_gender varchar(2)

    declare @pre_stu_age int

    declare @pre_stu_tele varchar(15)

    declare @pre_stu_spe  varchar(20)

    select  @stu_num = stu_num from deleted

    select @pre_stu_name =stu_name from deleted

    select @pre_stu_gender =stu_gender from deleted

    select @pre_stu_age = stu_age from deleted

    select @pre_stu_tele =stu_tele from deleted

    select @pre_stu_spe = stu_spe from deleted

    insert into pre_stu(stu_num,pre_stu_name,pre_stu_gender,pre_stu_age,pre_stu_tele,pre_stu_spe )

    values(@stu_num,@pre_stu_name,@pre_stu_gender,@pre_stu_age,@pre_stu_tele,@pre_stu_spe)

    end

     

    在管理员上建立触发器,记录被修改的信息。在原表中通过一个状态属性标示是否被删除,因此数据并不会真正被删除,只需要记录被修改的信息。

     

    create trigger on_pre_mana

    on manager

    for update

    as

    begin

    declare @mana_num varchar(15)

    declare @pre_mana_name varchar(10)

    declare @pre_mana_gender varchar(2)

    declare @pre_mana_age int

    declare @pre_mana_tele varchar(15)

    select  @mana_num = mana_num from deleted

    select @pre_mana_name =mana_name from deleted

    select @pre_mana_gender =mana_gender from deleted

    select @pre_mana_age = mana_age from deleted

    select @pre_mana_tele =mana_tele from deleted

    insert

    into pre_mana(mana_num,pre_mana_name,pre_mana_gender,pre_mana_age,pre_mana_tele)values(@mana_num,@pre_mana_name,@pre_mana_gender,@pre_mana_age,@pre_mana_tele)

        end

    3.6.5用户的定义:

    create user dba for login dba with default_schema=dbo

    exec sp_addrolemember 'db_owner' ,'dba'

     

    3.6.6 对数据的管理:

    对数据的管理主要是由增删改查组成,以学生信息的管理为例,

    增加:

    insert into

    student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu)

    values('201677H0555','刘飞达','男',19,14646646465,'软工',1);

     

    删除:值得注意的是我删除信息用的是更新信息语句,只需要更改状态值即可标示数据是否被删除,数据不会真的被删除,做好了别分工作。

    update student set stu_status=0 where stu_num=’201677H0522’;

    修改:

    update student set stu_name='刘豪' where stu_num='201677H0522';

     

    查询:值得注意的是查询的条件是数据行的状态值是1,也就是被标示未被删除。

    select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe from student where stu_statu=1;

     

    分别查询每一个宿舍的总费用,并且按照宿舍号进行排序(使用的是分组求和的思想):

    select dor_num , sum(w   ater+elect + repair +living) from lives group by dor_num order by dor_num ;

    在sql代码执行的过程中,会自动生成存储过程,将有价值的存储过程进行储存。

     

    3.7系统调试和测试

     

    在对数据库的备份功能进行测试的过程中,我在原表中对数据进行修改,从而触动触发器将被删除的信息储存在备份表中。执行语句update student set stu_name='刘豪' where stu_num='201677H0522'; 然后查看备份表中的信息,验证之后正确。

     

    把数据库总所有的信息联合起来,形成一张非常大的表,生成一个视图,测试之后,可以成功生成,满足要求。

    在安全性方面,我创建了用户并且进行了授权:

    create login dba with password='123456', default_database=stu_dor_manage;

    create user dba for login dba with default_schema=dbo

    exec sp_addrolemember 'db_owner' ,'dba'

    执行以后,成功生成了一个用户:测试成功!

    4.系统评价

    4.1我的系统特色:
    A、数据结构化 ,数据之间具有联系,面向整个系统。
    B、数据的共享性高,冗余度低,易扩充 。
    C、数据独立性高 。
    D、数据由DBMS统一管理和控制。

    4.2 系统不足及改进

    在对数据库进行设计的过程中,结构比较简单,不能够应对是否能复杂的情况,只能对学生住宿的简单信息进行操作。另外,在安全性方面做得也不够完善,主要原因在于设计的重点是功能的正常执行,而不是在每一个细节做到完美。另外,执行虚度方面没有做出专门的优化。因此,这个数据库系统需要我在以后相信的去完成每一个细节。

    5.设计心得

    在设计数据库的过程中我遇到过非常多的问题:

    首先,在设计阶段有非常多的数据项,当时觉得不好分类和处理,而且有很多的数据项和许多实体都有关系。最后通过查看课本例题,问同学等方式将各个数据项进行归类,对于和多个实体之间都有关系的数据项可以建立一个关系表,从而完成归类。

    接着,在添加数据的过程中,我忽略掉了数据的参照完整性,导致许多数据不能够正常加入。后来经过同学的提示,我将数据进行了统一分析,保持所有的数据一致,最后数据可以正常输入。

    最后,每个表中的数据更改完成之后,更改后的数据会丢失找不到了。对于这个问题就解决办法为加入触发器,记录表中信息的修改前的值,成功解决问题。

    收获:对于一个系统,数据库的设计是非常重要的,数据库设计决定了以后数据好不好维护。后期需求好不好展。同时也决定了系统的性能。一个坏的数据库设计一个功能点的改动可能会设计多张表的改动。一不小心可能就会引起数据的不一致。为了解决这些问题。在数据库设计之初就要考虑这些问题。减少后期系统维护量。

     

     

     

     

    展开全文
  • Java+学生信息管理系统+GUI+文件

    万次阅读 多人点赞 2019-07-05 20:10:03
    系统可实现学生信息的增加,删除,修改,查询,并将学生信息存储在文件中 其中, 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以...

    朋友们啊,请仔细看博客哦,这个项目我完成的时候,确实是可以跑起来的,所有功能和效果基本都写在博客里了,代码资源也给上了(遇到好几个朋友私信问代码,我也是无奈了)。

    如果运行不起来,出现各种问题可能是因为版本,电脑环境等原因,这些可以在评论区讨论(我盲猜我爱莫能助),或者根据报错自行搜索。这个项目对于我来说有点久远了,当时做好后就写了这个博客,很多细节可能不太记得了,另外,我要转前端了哈哈哈(*^▽^*),所以搞Java的同学自己加油吧~遇到问题没什么,多百度,多看教程,你可以的!

    关于这个项目的私信和评论区我可能就不会怎么回了,评论区讨论的朋友如果知道怎么解决可以回一下哈,我呢就爱莫能助了O(∩_∩)O~

    我这简陋的成果只是给有需要的同学参考,希望同学们可以自己多动手,练练实践能力,编码能力是要自己去踩坑才能有提升的呀。

    另外,大部分项目是需要操作数据库的,但我当时做项目的时候,老师要求的是操作文件,需要操作数据库的朋友,自行研究一下吧,附上我的数据库学习博客:Java操作数据库-JDBC数据库

    项目代码资源下载地址:Student_Manage.zip

    因为CSDN的积分是自动调整的,且很多同学都没有积分,补充上了码云的代码仓库地址https://gitee.com/huan2515/student-manage.git

    附上“如何在码云Gitee中部署个人静态网站?git提交网站”地址:https://www.bilibili.com/read/cv6506359?share_medium=android&share_source=qq&bbid=XYA0AA2A7669743DD029D12A5C0A0B24B7524&ts=1608258917421

    我写的时候是用的eclipse,JDK8。

    这个项目只是当初我的一个很简陋的课程设计,还有很多可以提升的空间,很多的重复性源码也可以整理成为工具类,方便调用。参考借鉴的同学可以参考我这个项目,以节省时间和精力,多优化。

    最终项目结构:
    在这里插入图片描述

    1. 要求

    该系统可实现学生信息的增加,删除,修改,查询,筛选的功能。并将学生信息存储在文件txt 中,不会覆盖原数据。
    该系统没有利用数据库,是使用文件来存储学生数据,有基本的 UI 界面,操作友好,项目运行没有问题。

    2. 主函数

    package Student_Manage;
    
    public class Main {
    
    	 public static void main(String[] args) {
    		new Login();
    	    }
    }
    
    

    学生类

    package Student_Manage;
    
    public class student_information {
    	private String stuID;    /*  学生学号  */
    	private String name;     /* 学生姓名 */
    	private String sex;     /* 学生性别  */
        private String age;        /*  学生年龄  */
        private String callnumber;   /* 学生电话号码   */
        private String home_place;   /* 学生家庭住址,籍贯 */
        private String identityID;   /* 学生身份证号码 */
        
        /*无参构造函数*/
        public student_information() {
        
        }
        /*有参构造函数 */
        public student_information(String stuID,String name,String sex,String age,String callnumber,String home_place,String identityID) {
        	super();
        	this.stuID=stuID;
        	this.name=name;
        	this.sex=sex;
        	this.age=age;
        	this.callnumber=callnumber;
        	this.home_place=home_place;
        	this.identityID=identityID;
        }
        public String getStuID() {
        	return this.stuID;
        }
        public void setStuID(String stuID) {
        	this.stuID=stuID;
        }
        
        public String getName() {
        	return name;
        }
        public void setName(String name) {
        	this.name=name;
        }
        
        public String getSex() {
        	return this.sex;
        }
        public void setSex(String sex) {
        	this.sex=sex;
        }
        
        public String getAge() {
        	return this.age;
        }
        public void setAge(String age) {
        	this.age=age;
        }
        
        public String getCallnumber() {
        	return this.callnumber;
        }
        public void setCallnummber(String callnumber) {
        	this.callnumber=callnumber;
        }
        
        public String getHome_place() {
        	return this.home_place;
        }
        public void setHome_place(String home_place) {
        	this.home_place=home_place;
        }
        
        public String getIdentityID() {
        	return this.identityID;
        }
        public void setIdentityID(String identityID) {
        	this.identityID=identityID;
        }
        
        //从文件中录入的数据格式    "学号  姓名  性别  年龄  电话号码  家庭住址  身份证号码"  
        public String fileString()
    	{
    		return stuID+" "+name+" "+sex+" "+age+"  "+callnumber+"  "+home_place+"  "+identityID;
    	}
    
       
    }
    
    

    3. 静态登录界面实现

      登录界面还有完善的空间,可增加密码验证,通过管理员和学生账号的不同验证其身份,还可增加注册功能
    
    package Student_Manage;
    
    /**
     * 功能:学生成绩管理系统
     * 步骤1、登录界面的静态实现
     * author:ywq
     */
    import java.awt.*;
    import javax.swing.*;
    
    import java.awt.event.*;
    
    public  class Login extends JFrame implements  ActionListener{
    	//定义组件
    	JFrame frame=new JFrame();
    	JPanel jp1,jp2,jp3;//面板
    	JLabel jlb1,jlb2;//标签
    	JButton jb1,jb2;//按钮
    	
    	//构造函数
    	public Login(){
    		//创建面板
    		jp1=new JPanel();
    		jp2=new JPanel();
    		jp3=new JPanel();
    		//创建标签
    		jlb1=new JLabel("请按照你的身份选择登陆");
    		
    		//创建按钮
    		jb1=new JButton("信息管理人员");
    		jb2=new JButton("学生");
    				
    		//设置布局管理
    		frame.setLayout(new GridLayout(3, 1));//网格式布局
    		
    		//加入各个组件
    		jp1.add(jlb1);
    			
    		jp3.add(jb1);
    		jp3.add(jb2);
    		
    		//加入到JFrame
    		frame.add(jp2);
    		frame.add(jp1);
    		//this.add(jp2);
    		frame.add(jp3);
    		
    		//设置窗体
    		frame.setTitle("用户登录界面");//窗体标签
    		frame.setSize(400, 300);//窗体大小
    		frame.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
    		frame.setVisible(true);//显示窗体
    		
    		//锁定窗体
    		//this.setResizable(false);
    				
    		jb1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    			   frame.setVisible(false);
    				new ManagerLogin();
    			}
    		});
    		
    		jb2.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    			   frame.setVisible(false);
    				new StudentLogin();
    			}
    		});
    		
    		
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    }
    
    

    效果图
    效果图

    4. 信息管理员登录界面

    该界面的标签,文本框等的位置还可以调整,使其更美观。
    
    package Student_Manage;
    
    //信息管理人员登陆后的界面
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.*;/*ArrayList;
    import java.util.Hashtable;
    */
    public class ManagerLogin extends JFrame implements  ActionListener{
    	
    	Function fun=new Function();
    	
    	//定义组件 
    	JLabel lb1=new JLabel("当前是信息管理人员登录界面" );//JLabel 对象可以显示文本、图像
    	JLabel lb2=new JLabel("提示:录入前请先输入学号,修改、删除根据学号修改信息");
    	
        JTextField 学号,姓名,年龄,电话号码,家庭住址,身份证号码;//输入学生基本信息得文本
        JRadioButton 男,女;//声明单选项对象,性别选择
        ButtonGroup group=null;//声明按钮组
        JButton 录入,查询,删除,修改,显示,返回;//声明相应的操作的按钮
        JPanel p1,p2,p3,p4,p5,p6,p7,pv,ph,pb;//调节布局的通道
        
        public ManagerLogin(){       //负责管理员登录的主窗口
            super("学生信息管理系统");
            学号=new JTextField(10);//创建文本信息的的对象
            姓名=new JTextField(10);
            电话号码=new JTextField(15);
            年龄=new JTextField(5);
            家庭住址=new JTextField(15);
            身份证号码=new JTextField(18);
            
            group=new ButtonGroup();
            男=new JRadioButton("男");//初始化单选框,
            女=new JRadioButton("女");
            group.add(男);//把按钮添加到按钮组
            group.add(女);
            录入=new JButton("增加学生信息");//创建按钮对象
            查询=new JButton("查询符合条件的学生信息");
            删除=new JButton("删除学生信息");
            修改=new JButton("修改学生信息");
            显示=new JButton("显示全部学生信息");
            返回=new JButton("返回登录界面");
        
            pb=new JPanel();
            pb.add(lb1,JLabel.CENTER);
                    
            p1=new JPanel();//创建一个面板     
           
            p1.add(lb2,JLabel.CENTER);
            p1.add(new JLabel("学号:",JLabel.CENTER));//JLabel.CENTER是指JLabel的中心点。CENTER是中心点的坐标
            p1.add(学号);
            
            p2=new JPanel();
            p2.add(new JLabel("姓名:",JLabel.CENTER));
            p2.add(姓名);
            p3=new JPanel();
            p3.add(new JLabel("性别:",JLabel.CENTER));
            p3.add(男);
            p3.add(女);
            p4=new JPanel();
            p4.add(new JLabel("年龄:",JLabel.CENTER));
            p4.add(年龄);
            p5=new JPanel();
            p5.add(new JLabel("电话号码:",JLabel.CENTER));
            p5.add(电话号码);    
            p6=new JPanel();
            p6.add(new JLabel("家庭住址:",JLabel.CENTER));
            p6.add(家庭住址);
            p7=new JPanel();
            p7.add(new JLabel("身份证号码:",JLabel.CENTER));
            p7.add(身份证号码);
           
            pv=new JPanel();//面板
            pv.setLayout(new GridLayout(7,1));   //把pv组件设置成第七行1列的网格布局
                
            pv.add(p1);//把面板放到容器中,add()代表容器
            pv.add(p2);
            pv.add(p3);
            pv.add(p4);
            pv.add(p5);
            pv.add(p6);
            pv.add(p7);
                   
            ph=new JPanel();      
            ph.add(录入);
            ph.add(查询);
            ph.add(修改);
            ph.add(删除);    
            ph.add(显示);
            ph.add(返回);
                   
            Container con=getContentPane();//建立容器对象con,取得容器面板
            con.setLayout(new BorderLayout());//设置布局为边框布局,边框布局分东南西北中5个方位来添加控件。
            //若没有指定方位,将添加到中间,上下左右都可以扩展
            con.add(pb, BorderLayout.NORTH);//Frame对象lb调用方法add(),lb放在最北上方     
            con.add(pv, BorderLayout.CENTER);//pv在中间
            con.add(ph, BorderLayout.SOUTH);//ph在南边
            setDefaultCloseOperation(EXIT_ON_CLOSE);//置一个默认的关闭操作,也就是你的JFrame窗口的关闭按钮,点击它时,退出程序
            setBounds(100,100,900,450);//setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的高度
            setVisible(true);//目的是使控件可以显示出来,如果该控件已经被显示出来
              
            student_information stu=new student_information();
            ArrayList<student_information> arry=new ArrayList<student_information>();
            //添加监听
            //点击录入按钮  学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码"  
            录入.addActionListener(new ActionListener() {
        	   public void actionPerformed(ActionEvent e) {		     		     
        		 String sID = 学号.getText();    //获取文本框中内容
        		 if(fun.find(sID)!=-1)
        		 {
        			 JOptionPane.showMessageDialog(null, "该学号对应的学生已经存在!!!\n\n请重新输入或者修改已经录入的学生");   			 
        			  //清空文本框
        			 学号.setText("");
        			 姓名.setText("");
        			 年龄.setText("");
        			 电话号码.setText("");
        			 家庭住址.setText("");
        			 身份证号码.setText("");
        			 return;
        		 }      		 
        		 String sname = 姓名.getText();  		 
        		 //先判断学号和姓名是否为空,如果为空,直接退出
        		 if(sID.equals("")||sname.equals(""))
        		 {
        			 JOptionPane.showMessageDialog(null, "录入的学生学号或姓名为空!!!\n\n请重新输入");
        			 return;
        		 }  	   		 	 
          		 String sage = 年龄.getText();     		 
          		 if(sage.equals(""))//年龄为空,没有输入
       			    sage="--";  		 
          		 String scall = 电话号码.getText();
          		 if(scall.equals(""))
          			  scall="--";
          		 String shome = 家庭住址.getText();
          		if(shome.equals(""))
          		    shome="--";
          		 String siden = 身份证号码.getText();
          		if(siden.equals(""))
          		   siden="--";
          		 String ssex=null;
                 if(男.isSelected()){//选择男女
                    ssex=男.getText();
                 }
                 else{
                     ssex=女.getText();
                 }   
                
          		 stu.setStuID(sID);
          		 stu.setAge(sage);
          		 stu.setName(sname);
          		 stu.setSex(ssex);
          		 stu.setCallnummber(scall);
          		 stu.setHome_place(shome);
          		 stu.setIdentityID(siden);
          		 
          		 //arry.clear();//	清除原数组列表中的数据	
          		// Input input=new Input(stu);
          		 System.out.println("信息管理员");
          		 System.out.println(stu.fileString());
          		 
          		 fun.add(stu);
          		 fun.writefile();
          		 
          		 JOptionPane.showMessageDialog(null, "录入成功!!!");
          		 //dispose();
          		 setVisible(false); 
          		 new ManagerLogin();
          		 
          		  //清空文本框
          		 /*
    			学号.setText("");
    			姓名.setText("");
    			年龄.setText("");
    			电话号码.setText("");
    		    家庭住址.setText("");
    			身份证号码.setText("");
    			group.clearSelection();   //清空按钮已选状态
    			*/
        	   }   	   
           });
            
                       
           //显示全部学生信息
              显示.addActionListener(new ActionListener() {
         	   public void actionPerformed(ActionEvent e) {     		   
         		   //show_stuall all=new show_stuall();     
         		   new show_stuall();   		     		   
         	    }	     		   
              });
                          
            //查询某个学生信息       
            查询.addActionListener(new ActionListener() {
            	   public void actionPerformed(ActionEvent e) {      		  
            		   String sID = 学号.getText();    //获取文本框中内容 
            		   if(sID.equals(""))
            		     sID="--";       		   
              		  String sname = 姓名.getText();  		 
              		  if(sname.equals(""))
            			   sname="--";      		 	 
                	  String sage = 年龄.getText();     		 
                	  if(sage.equals(""))             //年龄为空,没有输入
             			    sage="--";  		 
                	  String scall = 电话号码.getText();
                	 if(scall.equals(""))
                			  scall="--";
                		 String shome = 家庭住址.getText();
                		if(shome.equals(""))
                		    shome="--";
                		 String siden = 身份证号码.getText();
                		if(siden.equals(""))
                		   siden="--";
                		 String ssex=null;
                       if(男.isSelected()){//选择男女
                          ssex=男.getText();
                       }
                       else {
                    	    if(女.isSelected())
                             ssex=女.getText();
                           else {
    						  ssex="--";
    					   }
                       }          		            
            	 		 //将要查询的符合条件的写入文件
            	 		FileWriter fw=null;
        				BufferedWriter out=null;//学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };
        				try {
        					 fw = new FileWriter("查询时暂时存放的文件.txt");
        					 out = new BufferedWriter(fw);
        					 //姓名学号等中间隔一个空格
        					 out.write(sID+"  ");
        					 out.write(sname+"  ");
        					 out.write(ssex+"  ");
        					 out.write(sage+"  "); 					   					 
        					 out.write(scall+"  ");
        					 out.write(shome+"  ");
        					 out.write(siden+"  "); //每次覆盖写入,无需全部保存
        				   					 
        					out.close();
        					fw.close();
        						
        				} catch (IOException e1) {
        					e1.printStackTrace();
        					
        				}     				
        				//开始查询
        				new showones();  
        				
        				//清空文本框
        				学号.setText("");
        				姓名.setText("");
        				年龄.setText("");
        				电话号码.setText("");
        			    家庭住址.setText("");
        				身份证号码.setText("");
        				group.clearSelection();
        				
            	    }	     		   
                 }); 
           
     
           
           //删除学生信息,按学号删除
              删除.addActionListener(new ActionListener() {
            	   public void actionPerformed(ActionEvent e) {
            		   String sID = 学号.getText();    //获取文本框中内容
            		   int flag=fun.find(sID);
            		   if(flag==-1)
            		   {
            			   JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");       			    
            		   }
            		   else {
    					 fun.delete(sID); 
            		     fun.writefile();
            		     JOptionPane.showMessageDialog(null, "删除成功!!!\n");
    				 }
           		
            		   //清空文本框
           			学号.setText("");
           			姓名.setText("");
           			年龄.setText("");
           			电话号码.setText("");
           		    家庭住址.setText("");
           			身份证号码.setText("");
           			group.clearSelection();
            		   
            	    }	     		   
                 });       
              
              //修改学生信息
              修改.addActionListener(new ActionListener() {
              	   public void actionPerformed(ActionEvent e) {
              		  String sID = 学号.getText();    //获取文本框中内容
              		 int flag=fun.find(sID);    //查找是否存在      		
             		 if (flag==-1)
             		 {
         			   JOptionPane.showMessageDialog(null, "未查找到该学号的学生!!!\n\n请重新输入");
          			   return;  
         		    }    
             		else
          			   JOptionPane.showMessageDialog(null, "该系统中存在该学生数据\n\n,确认返回后请输入需要修改后的数据");
           			 		    		     		 
              		 String sage = 年龄.getText();     		 
              		 if(sage.equals(""))//年龄为空,没有输入
           			    sage="--";  		 
              		 String scall = 电话号码.getText();
              		 if(scall.equals(""))
              			  scall="--";
              		 String shome = 家庭住址.getText();
              		if(shome.equals(""))
              		    shome="--";
              		 String siden = 身份证号码.getText();
              		if(siden.equals(""))
              		   siden="--";
              		 String ssex=null;
                     if(男.isSelected()){//选择男女
                        ssex=男.getText();
                     }
                     else{
                         ssex=女.getText();
                     }   
                     String sname = 姓名.getText();  		 
            		 //先判断学号和姓名是否为空,如果为空,直接退出
            		 if(sname.equals(""))
            		 {
            			 JOptionPane.showMessageDialog(null, "录入的学生姓名为空!!!\n\n请重新输入");
            			 return;
            		 }  	
            		// student_information stu=new student_information();
              		 stu.setStuID(sID);
              		 stu.setAge(sage);
              		 stu.setName(sname);
              		 stu.setSex(ssex);
              		 stu.setCallnummber(scall);
              		 stu.setHome_place(shome);
              		 stu.setIdentityID(siden);
             		 
              		 fun.update(stu);       //修改
              		 fun.writefile();
              		 JOptionPane.showMessageDialog(null, "修改成功!!!");
              		  //清空文本框
         			学号.setText("");
         			姓名.setText("");
         			年龄.setText("");
         			电话号码.setText("");
         		    家庭住址.setText("");
         			身份证号码.setText("");
         			group.clearSelection();	 		 			          		         		 
              	    }	     		             	   
                   });
                            
        返回.addActionListener(new ActionListener() {
    		public void actionPerformed(ActionEvent e) {
    			setVisible(false);      //目的是使控件不可以显示出来
    			new Login();
    		}
    	});
         }
    
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }
    
    

    效果图
    在这里插入图片描述

    5. 学生登录界面

    	package Student_Manage;
    	
    	//学生登陆后的界面
    	import java.awt.*;
    	import javax.swing.*;
    	import java.awt.event.*;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.*;/*ArrayList;
    	import java.util.Hashtable;
    	*/
    public  class StudentLogin extends JFrame implements  ActionListener{
    		
    		Function fun=new Function();		
    		//定义组件 
    		JLabel lb1=new JLabel("当前是学生登录界面" );//JLabel 对象可以显示文本、图像
    		JLabel lb2=new JLabel("提示:录入前请先输入学号,修改、删除根据学号修改信息");
    	    JTextField 学号,姓名,年龄,电话号码,家庭住址,身份证号码;//输入学生基本信息得文本
    	    JRadioButton 男,女;//声明单选项对象,性别选择
    	    ButtonGroup group=null;//声明按钮组
    	    JButton 录入,查询,删除,修改,显示,返回;//声明相应的操作的按钮
    	    JPanel p1,p2,p3,p4,p5,p6,p7,pv,ph,pb;//调节布局的通道
    	    
    	    student_information stu=new student_information();
    	    ArrayList<student_information> arry=new ArrayList<>();
    	    
    	    public StudentLogin(){       //负责管理员登录的主窗口
    	        super("学生信息管理系统");
    	        学号=new JTextField(10);//创建文本信息的的对象
    	        姓名=new JTextField(10);
    	        电话号码=new JTextField(15);
    	        年龄=new JTextField(5);
    	        家庭住址=new JTextField(15);
    	        身份证号码=new JTextField(18);
    	        
    	        group=new ButtonGroup();
    	        男=new JRadioButton("男");//初始化单选框,
    	        女=new JRadioButton("女");
    	        group.add(男);//把按钮添加到按钮组
    	        group.add(女);
    	        //录入=new JButton("增加学生信息");//创建按钮对象
    	        查询=new JButton("查询某个学生信息");
    	        //删除=new JButton("删除学生信息");
    	       // 修改.setEnabled(false);   //设置修改控件不可用
    	        //修改=new JButton("修改学生信息"); 
    	        显示=new JButton("显示全部学生信息");
    	        返回=new JButton("返回登录界面");
    	    
    	        pb=new JPanel();
    	        pb.add(lb1,JLabel.CENTER);
    	                
    	        p1=new JPanel();//创建一个面板     
    	        //p1.setLayout(new GridLayout(3,0));
    	        p1.add(lb2,JLabel.CENTER);
    	        p1.add(new JLabel("学号:",JLabel.CENTER));//JLabel.CENTER是指JLabel的中心点。CENTER是中心点的坐标
    	        p1.add(学号);
    	        
    	        p2=new JPanel();
    	        p2.add(new JLabel("姓名:",JLabel.CENTER));
    	        p2.add(姓名);
    	        p3=new JPanel();
    	        p3.add(new JLabel("性别:",JLabel.CENTER));
    	        p3.add(男);
    	        p3.add(女);
    	        p4=new JPanel();
    	        p4.add(new JLabel("年龄:",JLabel.CENTER));
    	        p4.add(年龄);
    	        p5=new JPanel();
    	        p5.add(new JLabel("电话号码:",JLabel.CENTER));
    	        p5.add(电话号码);    
    	        p6=new JPanel();
    	        p6.add(new JLabel("家庭住址:",JLabel.CENTER));
    	        p6.add(家庭住址);
    	        p7=new JPanel();
    	        p7.add(new JLabel("身份证号码:",JLabel.CENTER));
    	        p7.add(身份证号码);
    	       
    	        pv=new JPanel();//面板
    	        pv.setLayout(new GridLayout(7,1));   //把pv组件设置成第七行1列的网格布局
    	            
    	        pv.add(p1);//把面板放到容器中,add()代表容器
    	        pv.add(p2);
    	        pv.add(p3);
    	        pv.add(p4);
    	        pv.add(p5);
    	        pv.add(p6);
    	        pv.add(p7);
    	               
    	        ph=new JPanel();      
    	       // ph.add(录入);
    	        ph.add(查询);
    	       // ph.add(修改);
    	       // ph.add(删除);    
    	        ph.add(显示);
    	        ph.add(返回);
    	               
    	        Container con=getContentPane();//建立容器对象con,取得容器面板
    	        con.setLayout(new BorderLayout());//设置布局为边框布局,边框布局分东南西北中5个方位来添加控件。
    	        //若没有指定方位,将添加到中间,上下左右都可以扩展
    	        con.add(pb, BorderLayout.NORTH);//Frame对象lb调用方法add(),lb放在最北上方     
    	        con.add(pv, BorderLayout.CENTER);//pv在中间
    	        con.add(ph, BorderLayout.SOUTH);//ph在南边
    	        setDefaultCloseOperation(EXIT_ON_CLOSE);//置一个默认的关闭操作,也就是你的JFrame窗口的关闭按钮,点击它时,退出程序
    	        setBounds(100,100,900,450);//setBounds(x,y,width,height); x:组件在容器X轴上的起点 y:组件在容器Y轴上的起点 width:组件的长度 height:组件的高度
    	        setVisible(true);//目的是使控件可以显示出来,如果该控件已经被显示出来
    	          
    	        //添加监听        
    	       //显示全部学生信息
    	          显示.addActionListener(new ActionListener() {
    	     	   public void actionPerformed(ActionEvent e) {     		   
    	     		  new show_stuall();   	
    	     		   
    	     	    }	     		   
    	          });
    	          
    	          //查询某个学生信息       
    	          查询.addActionListener(new ActionListener() {
    	          	   public void actionPerformed(ActionEvent e) {      		  
    	          		   String sID = 学号.getText();    //获取文本框中内容 
    	          		   if(sID.equals(""))
    	          		     sID="--";       		   
    	            		  String sname = 姓名.getText();  		 
    	            		  if(sname.equals(""))
    	          			   sname="--";      		 	 
    	              	  String sage = 年龄.getText();     		 
    	              	  if(sage.equals(""))             //年龄为空,没有输入
    	           			    sage="--";  		 
    	              	  String scall = 电话号码.getText();
    	              	 if(scall.equals(""))
    	              			  scall="--";
    	              		 String shome = 家庭住址.getText();
    	              		if(shome.equals(""))
    	              		    shome="--";
    	              		 String siden = 身份证号码.getText();
    	              		if(siden.equals(""))
    	              		   siden="--";
    	              		 String ssex=null;
    	              		if(男.isSelected()){//选择男女
    	                        ssex=男.getText();
    	                     }
    	                     else {
    	                  	    if(女.isSelected())
    	                           ssex=女.getText();
    	                         else {
    	  						  ssex="--";
    	  					   }
    	                     }          	
    	              		            
    	          	 		 //将要查询的符合条件的写入文件
    	          	 		FileWriter fw=null;
    	      				BufferedWriter out=null;  //学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };
    	      				try {
    	      					 fw = new FileWriter("查询时暂时存放的文件.txt");
    	      					 out = new BufferedWriter(fw);
    	      					 //姓名学号等中间隔一个空格
    	      					 out.write(sID+"  ");
    	      					 out.write(sname+"  ");
    	      					 out.write(ssex+"  ");
    	      					 out.write(sage+"  "); 					   					 
    	      					 out.write(scall+"  ");
    	      					 out.write(shome+"  ");
    	      					 out.write(siden+"  "); //每次覆盖写入,无需全部保存
    	      				   					 
    	      					out.close();
    	      					fw.close();
    	      						
    	      				} catch (IOException e1) {
    	      					e1.printStackTrace();
    	      					
    	      				}     				
    	      				//开始查询
    	      				new showones();  
    	      				
    	      				//清空文本框
    	      				学号.setText("");
    	      				姓名.setText("");
    	      				年龄.setText("");
    	      				电话号码.setText("");
    	      			    家庭住址.setText("");
    	      				身份证号码.setText("");
    	      				group.clearSelection();
    	      				
    	          	    }	     		   
    	               }); 	   
    
    	    返回.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				setVisible(false);      //目的是使控件不可以显示出来
    				new Login();
    			}
    		});
      }
    
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			
    		}
    }
    
    

    效果图
    在这里插入图片描述

    6. 增加,删除,修改功能

    package Student_Manage;
    
    import java.io.*;
    import java.util.*;
    
    
    //修改,删除,增加某个学生信息
    
    class Function {
    	
    	//本程序学生数量不多,用数组列表ArrayList,  当学生数据多的时候,考虑用链表
        ArrayList<student_information> arry=new ArrayList<student_information>();  			
    	public Function()           //读文件,将文件中的学生信息存放在数组列表
    	{
    		this.readfile();
    	}
    	//根据学号查找学生信息,找到返回学号,找不到返回-1
    	public int find(String str) 
    	{		
    	    for (int i = 0; i<arry.size(); i++)
    	      if (arry.get(i).getStuID().equals(str))
    						return i;//等于在数组列表的位置
    			return -1;
    	}	
    	
    	//修改学生信息
    	public void update(student_information stu) {
    		int flag=find(stu.getStuID());    //查找是否存在
    		arry.set(flag, stu);		   //替换 flag 处的学生信息
    	}	
    	// 读文件,
    	public boolean readfile() {					 
    			String t=null;
    			try{
    				FileReader f1 = new FileReader("student.txt");
    				BufferedReader br=new BufferedReader(f1);				
    				arry.clear();    //	清除原数组列表中的数据				
    				while ((t= br.readLine())!= null)
    					{
    					  String [] s=t.split("\\s+");				 
    					  student_information st=new student_information(s[0],s[1],s[2],s[3],s[4],s[5],s[6]);//注意若该文件每行没有七个字符串,则会出错
    					  arry.add(st);
    					  System.out.println("读取文件:");
    					  System.out.println(s[0]);
    					}
    				     f1.close();
    				     br.close();				     
    				     return true;
    					} catch (IOException e) {
    							// TODO 自动生成的 catch 块
    					e.printStackTrace();
    					return false;
    				}	
    		     }					
    	//添加学生信息	
    	public boolean add(student_information stu)
    	     {		
    		System.out.println();	
    		System.out.println("要添加的学生");	
    		System.out.println(stu.fileString());
    		System.out.println();
    		if (find(stu.getStuID())!=-1)
    			return false;		
    		arry.add(stu); 
    		return true;			
    	}
    	
    	//写注意每行必须有七个元素,否则读取文件并判断是否存在时会出错时会出错,没有输入的用---代替
    	public boolean writefile() {
    				FileWriter fw=null;
    				BufferedWriter out=null;
    				try {
    					 fw = new FileWriter("student.txt");    
    					 out = new BufferedWriter(fw);
    					 //姓名学号等中间隔一个空格
    						for(int i=0;i<arry.size();i++){
    							String s=arry.get(i).fileString();
    							System.out.println("数组列表数据:");
    							System.out.println(arry.get(i).fileString());
    					    	out.write(s);
    					    	out.newLine();
    					    }
    						out.close();
    						fw.close();
    						return true;
    				} catch (IOException e) {
    					e.printStackTrace();
    					return false;
    				}
    		   }
    	
    	//删除学生信息,并且文件中的内容也要修改
    	public boolean delete(String s)	//添加学生记信息
    	{  
    		int pos=find(s);
    		if (pos==-1)
    			return false;
    		
    		arry.remove(pos);    
    		return true;
    	}
    	
    		
    /*
    	//删除学生信息,并且重写文件内容					
    	 public boolean delete(String s) {	
    		        File file =new File("student.txt");
    		        try {
    		            if(!file.exists()) {
    		                file.createNewFile();
    		            }
    		            FileWriter fileWriter =new FileWriter(file);
    		            fileWriter.write("");
    		            fileWriter.flush();
    		            fileWriter.close();		            
    	    			int flag=find(s);		    		
    		    		System.out.print(flag);
    		    		arry.remove(flag);  		    		
    		    		writefile();
    		    		return true;	            
    		        } catch (IOException e) {
    		            e.printStackTrace();
    		            return false;
    		        }				
    		    }
    		    */		
    }			
    

    增加功能的效果图
    在这里插入图片描述
    删除功能的效果图
    在这里插入图片描述
    修改功能的效果图

      修改,输入某个学生的学号及修改之后的信息,按照学号查找该学生并且将修改之后的信息录入系统
      修改功能还可以进一步完善,例如只修改某个条件,而无需输入所有信息
    

    在这里插入图片描述
    在这里插入图片描述
    删除功能的效果图

    删除功能是通过输入学号,按照学号查找,查找到之后在系统中删除该学生
    

    在这里插入图片描述

    7. 查询和筛选功能

    • 显示系统中所有学生的信息
    package Student_Manage;
    
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
    import javax.swing.table.TableRowSorter;
    
    import java.io.*;
    
    import java.util.ArrayList;
    import java.util.Vector;
    
    //读取学生信息,展示在窗口
    
    public class show_stuall {	
    	
    	JTable table = null;
        DefaultTableModel model = null;
    	//显示全部学生信息
       public show_stuall() {
    	    JFrame jf = new JFrame("显示全部学生信息(点击表头可以按照升序降序排序)");	   
    	    // 创建内容面板
    	     JPanel panel = new JPanel();
    	    // 表头(列名)
    	   Vector columnNames=createColumnNames();
    	   Vector data=createTableModelData();	   
    	 // 创建一个默认的表格模型
    	    model = new DefaultTableModel(data, columnNames);
    	   table = new JTable(model);
           table.setPreferredScrollableViewportSize(new Dimension(400, 80));
           JScrollPane tablePanel = new JScrollPane(table);  				        
    	        // 设置表格内容颜色
    	        table.setForeground(Color.BLACK);                   // 字体颜色
    	        table.setFont(new Font(null, Font.PLAIN, 14));      // 字体样式
    	        table.setSelectionForeground(Color.DARK_GRAY);      // 选中后字体颜色
    	        table.setSelectionBackground(Color.LIGHT_GRAY);     // 选中后字体背景
    	        table.setGridColor(Color.GRAY);                     // 网格颜色
    
    	        // 设置表头
    	        table.getTableHeader().setFont(new Font(null, Font.BOLD, 14));  // 设置表头名称字体样式
    	        table.getTableHeader().setForeground(Color.RED);                // 设置表头名称字体颜色
    	        table.getTableHeader().setResizingAllowed(false);               // 设置不允许手动改变列宽
    	        table.getTableHeader().setReorderingAllowed(false);             // 设置不允许拖动重新排序各列
    
    	        // 设置行高
    	        table.setRowHeight(40);
    
    	        // 第一列列宽设置为40
    	        table.getColumnModel().getColumn(0).setPreferredWidth(40);
                 
    	        // 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
    	        table.setPreferredScrollableViewportSize(new Dimension(900, 320));
    	        
    	        //排序器	        
    	        RowSorter sorter = new TableRowSorter(model);
    	        table.setRowSorter(sorter);
    	        JScrollPane pane = new JScrollPane(table);      
    
    	        // 把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)
    	        JScrollPane scrollPane = new JScrollPane(table);
    
    	        // 添加 滚动面板 到 内容面板
    	        panel.add(scrollPane);
    	       // JScrollPane pane = new JScrollPane(table);
    	        // 设置 内容面板 到 窗口
    	        jf.setContentPane(panel);
    	        jf.pack();
    	        jf.setSize(900, 600);
    	        jf.add(scrollPane, BorderLayout.CENTER);
    	        
    	        //数据居中显示
    	        DefaultTableCellRenderer r = new DefaultTableCellRenderer();   
    			r.setHorizontalAlignment(JLabel.CENTER);   
    			table.setDefaultRenderer(Object.class, r);
    			
    	        jf.setLocationRelativeTo(null);
    	        int t=table.getRowCount();
    	        if(t<=0){
    	        	JOptionPane.showMessageDialog(null, "该系统中还没有录入学生信息!!!");
    	        	jf.setVisible(false);
    	        }
    	        else {
    	        	jf.setVisible(true);
    	        }	 
    	    }
        
         private Vector createColumnNames() {
           Vector columnNames = new Vector();
           //columnNames.add("序号");
           columnNames.add("学号");
           columnNames.add("姓名");
           columnNames.add("性别");
           columnNames.add("年龄");
           columnNames.add("电话号码");
           columnNames.add("家庭住址");
           columnNames.add("身份证号码");
           
           return columnNames;
       }
       
         private Vector createTableModelData() {
            
             Vector data = new Vector();
             String t=null;
    			try{
    				FileReader f1 = new FileReader("student.txt");
    				BufferedReader br=new BufferedReader(f1);				
    				//arry.clear();//	清除原数组列表中的数据
    				int i=0;
    				while ((t= br.readLine())!= null)
    					{
    					  String [] s=t.split("\\s+");		//通过空格分割字符串数组					  
    					  Vector rowData = new Vector();
    				
    					  //rowData.add("i");				  
    					  rowData.add(s[0]);					  
    					  rowData.add(s[1]);
    					  rowData.add(s[2]);
    					  rowData.add(s[3]);
    					  rowData.add(s[4]);			  
    					  rowData.add(s[5]);   
    					  rowData.add(s[6]);				  
    					  data.add(rowData);					  
    					 // System.out.print(s[6]);					  
    					  i++;					   
    					}
    				     f1.close();
    				     br.close();			     
    				     
    					} catch (IOException e) {
    							// TODO 自动生成的 catch 块
    					e.printStackTrace();
    					
    				}	  
            return data;
         }   
    }
    	       
    

    效果图

    当前按照学号升序排序,点击表头,可以按照升序,降序排序
    

    在这里插入图片描述

    • 筛选系统中符合条件的学生信息
    package Student_Manage;
    
    import javax.management.modelmbean.ModelMBean;
    import javax.swing.*;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableModel;
    import javax.swing.table.TableRowSorter;
    
    import java.awt.*;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Vector;
    
    
    public class showones {	
    	//读取学生信息,展示在窗口
    		
    		ArrayList<student_information> arry=new ArrayList<student_information>();
    		student_information stu=new student_information();
    		JTable table = null;
    	    DefaultTableModel model = null;
    		//显示全部学生信息
    	   public showones() {
    		    JFrame jf = new JFrame("显示符合条件的学生信息(点击表头可以按照升序降序排序");
    		    //jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    		    // 创建内容面板
    		     JPanel panel = new JPanel();
    		    // 表头(列名)
    		  //  String[] columnNames ={"序号","学号","姓名","性别","年龄","电话号码","家庭住址","身份证号码" };  	
    		    Vector columnNames=createColumnNames();	    
    		    //需要查询的符合条件的,用字符串数组f记录		       
    			 String [] f = new String [7];
    				try{
    					FileReader f1 = new FileReader("查询时暂时存放的文件.txt");
    					BufferedReader br=new BufferedReader(f1);				
    					//arry.clear();//	清除原数组列表中的数据
    					String t=null;
    					while ((t= br.readLine())!= null)
    						{
    						  f=t.split("\\s+");			//要查询的学生信息	 
    						}
    					
    										
    				  f1.close();
    				  br.close();				  				  
    					} catch (IOException e) {
    								// TODO 自动生成的 catch 块
    					e.printStackTrace();						
    					}
    								
    				//记得清空,否则下次查询没有筛选条件时,查询的是上一次的条件
    				 File file =new File("查询时暂时存放的文件.txt");
    			        try {
    			            if(!file.exists()) {
    			                file.createNewFile();
    			            }
    			            FileWriter fileWriter =new FileWriter(file);
    			            fileWriter.write("");
    			            fileWriter.flush();
    			            fileWriter.close();			    		            
    			        } catch (IOException e) {
    			            e.printStackTrace();			         
    			        }		
    			    
    				//判断需要查询的是那些条件				
    				ArrayList List = new ArrayList(); 
    				for(int i=0;i<7;i++) {
    					if(!f[i].equals("--"))     //需要满足的条件
    						List.add(i); 							
    				}
    				//将满足查询条件的学生信息录入系统				 
    				for(int i=0;i<List.size();i++)
    					System.out.println(List.get(i));
    				try{
    						FileReader f1 = new FileReader("student.txt");
    						BufferedReader br=new BufferedReader(f1);
    						String t=null;
    						int flag=0;
    				        int t1=0;
    				        
    						arry.clear();//	清除原数组列表中的数据					
    						while ((t= br.readLine())!= null)
    							{
    							  String [] s=t.split("\\s+");		
    							 for(int i=0;i<List.size();i++)
    							 {
    								 t1=(int) List.get(i);
    								 if(f[t1].equals(s[t1])) {
    									 flag=flag+1;
    								 }
    							 }
    							  if(flag==List.size()) {
    								student_information st=new student_information(s[0],s[1],s[2],s[3],s[4],s[5],s[6]);//注意若该文件每行没有七个字符串,则会出错
    								 arry.add(st);
    							  }							  
    							  flag=0;
    							  
    							}
    						     f1.close();
    						     br.close();						     						     
    							} catch (IOException e) {
    									// TODO 自动生成的 catch 块
    							e.printStackTrace();				
    						}	
    		    	 				
    				Vector data=createTableModelData();
    				
    				// 创建一个默认的表格模型
    			    model = new DefaultTableModel(data, columnNames);
    			   table = new JTable(model);
    		       table.setPreferredScrollableViewportSize(new Dimension(400, 80));
    		       JScrollPane tablePanel = new JScrollPane(table);  
    				
    				
    		        // 设置表格内容颜色
    		        table.setForeground(Color.BLACK);                   // 字体颜色
    		        table.setFont(new Font(null, Font.PLAIN, 14));      // 字体样式
    		        table.setSelectionForeground(Color.DARK_GRAY);      // 选中后字体颜色
    		        table.setSelectionBackground(Color.LIGHT_GRAY);     // 选中后字体背景
    		        table.setGridColor(Color.GRAY);                     // 网格颜色
    
    		        // 设置表头
    		        table.getTableHeader().setFont(new Font(null, Font.BOLD, 14));  // 设置表头名称字体样式
    		        table.getTableHeader().setForeground(Color.RED);                // 设置表头名称字体颜色
    		        table.getTableHeader().setResizingAllowed(false);               // 设置不允许手动改变列宽
    		        table.getTableHeader().setReorderingAllowed(false);             // 设置不允许拖动重新排序各列
    
    		        // 设置行高
    		        table.setRowHeight(40);
    
    		        // 第一列列宽设置为40
    		        table.getColumnModel().getColumn(0).setPreferredWidth(40);
    	             
    		        // 设置滚动面板视口大小(超过该大小的行数据,需要拖动滚动条才能看到)
    		        table.setPreferredScrollableViewportSize(new Dimension(900, 320));
    		        //排序器	        
    		        RowSorter sorter = new TableRowSorter(model);
    		        table.setRowSorter(sorter);
    		        JScrollPane pane = new JScrollPane(table);      
    
    		        // 把 表格 放到 滚动面板 中(表头将自动添加到滚动面板顶部)
    		        JScrollPane scrollPane = new JScrollPane(table);
    
    		        // 添加 滚动面板 到 内容面板
    		        panel.add(scrollPane);
    		       // JScrollPane pane = new JScrollPane(table);
    		        // 设置 内容面板 到 窗口
    		        jf.setContentPane(panel);
    		        jf.pack();
    		        jf.setSize(900, 600);
    		        jf.add(scrollPane, BorderLayout.CENTER);
    		        //数据居中显示
    		        DefaultTableCellRenderer r = new DefaultTableCellRenderer();   
    				r.setHorizontalAlignment(JLabel.CENTER);   
    				table.setDefaultRenderer(Object.class, r);
    				
    				jf.setLocationRelativeTo(null);
    				int t=arry.size();
    				 //int t=table.getRowCount();
    			        if(t<=0){
    			        	JOptionPane.showMessageDialog(null, "该系统中没有符合条件的学生!!!");
    			        	jf.setVisible(false);
    			        }
    			        else {
    			        	jf.setVisible(true);
    			        }
    		    }
         private Vector createColumnNames() {
           Vector columnNames = new Vector();
           //columnNames.add("序号");
           columnNames.add("学号");
           columnNames.add("姓名");
           columnNames.add("性别");
           columnNames.add("年龄");
           columnNames.add("电话号码");
           columnNames.add("家庭住址");
           columnNames.add("身份证号码");
        
           return columnNames;
           }
    
         private Vector createTableModelData() {
        	 Vector data = new Vector();    	     	
             for(int i=0;i<arry.size();i++) {       	 
    	    	 Vector<String> rowData=new Vector<>();	    	
    	    	 rowData.add(arry.get(i).getStuID());
    	    	 rowData.add(arry.get(i).getName());
    	    	 rowData.add(arry.get(i).getSex());
    	    	 rowData.add(arry.get(i).getAge());
    	    	 rowData.add(arry.get(i).getCallnumber());
    	    	 rowData.add(arry.get(i).getHome_place());
    	    	 rowData.add(arry.get(i).getIdentityID());			    	 		    					  
        		 data.add(rowData);
        					  	    							   
    		  }	   
             return data;
    	  }  
        
    }
    
    

    例如查询名字为Q的男生
    效果图

    在这里插入图片描述
    在这里插入图片描述

     当没有输入任何条件时,点击该筛选按钮,即显示所有的学生信息
    

    PS:插件推荐 windowbuilder

    该插件对于GUI设计有很大帮助,具体安装和下载可以查看别的教程

    展开全文
  • C语言学生成绩信息管理系统课程设计报告

    万次阅读 多人点赞 2016-10-07 22:19:22
    学生成绩管理系统 主要功能: (1)能按学期、按班级完成对学生成绩的录入、 修改,删除 (2)能按班级统计学生的成绩,求学生的总分及 平均分,并能根据学生的平均成绩进行排序 (3)能查询学生...
  • 学生成绩管理系统设计》 二、实训目的 (1)掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C++的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C++语言源程序...
  • 这套学生信息管理系统平台,是利用目前比较流行的python语言,具有开发效率快,无需编译即可运行,比Java编译语言快很多。利用的技术是基于web的Django框架,以及sqlite数据库。 本系统主要有以下几个页面设计:管理...
  • Java实训项目:GUI学生信息管理系统(2017)

    万次阅读 多人点赞 2018-02-19 08:39:32
    实训目的:让学生综合运用J2SE有关知识开发【学生信息管理系统】。主要涉及程序控制结构、面向对象编程、图形用户界面、Java数据库应用、MySQL数据库这几个方面的内容。通过本项目的开发,让学生了解系统开发的一般...
  • MFC课程设计 --学生成绩管理系统

    万次阅读 多人点赞 2018-07-26 21:12:55
    MFC课程设计 ,C++课程设计 --学生成绩管理系统 ps:因为课设完成的过程大家都不太一样,以下的代码仅供学习一下在MFC下各个控件的用法,有问题欢迎留言讨论。     实验目的 使用MFC类库编制应用程序:按钮...
  • 课程设计:大学生信息管理系统

    千次阅读 2012-06-28 18:40:24
    一、题目:17大学生信息管理系统 二、目的与要求 1. 目的 培养学生综合利用C++语言进行程序设计的能力,培养学生的编程能力、用计算机解决实际问题的能力,加强对理论知识的理解和实际运用;培养学生对软件工程...
  • 学生作业信息管理系统

    万次阅读 多人点赞 2018-06-23 00:36:18
        其次,答题信息管理系统可以大大提高老师与学生之间的在家庭作业和考核之间交流的效率,同时由于对题目以及学生成绩进行了数字化,可以对学生成绩及老师教学效果进行大数据分析。     最...
  • 基于springboot的学生信息管理系统

    万次阅读 热门讨论 2019-07-10 10:00:56
    技术可行性 (1) MySQL 本系统使用 MySQL作为数据库,MySQL数据库是一款开源的免费的关系型...SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用...
  • Java实现学生信息管理系统

    万次阅读 多人点赞 2021-03-28 11:12:43
    学生信息管理系统,要求完成以下基本任务: 1.有良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散形式...
  • toFile是目的文件 public void write(String fromFile,String toFile){ FileInputStream fis=null; FileOutputStream fos=null; //用try和catch捕获异常 try{ fis=new FileInputStream(fromFile); ...
  • 学生信息管理系统(结构化程序)(C语言)

    千次阅读 多人点赞 2019-04-12 21:52:04
    学生信息管理系统(结构化程序)(C语言) 一、实验目的 明确结构化程序设计的基本结构。 2.通过对问题的分析,设计合理的结构化程序解决问题 二、实验内容 对学生信息管理系统,要求完成以下基本任务: 1.改写...
  • 学生管理系统设计(数据库连接C#版)

    万次阅读 多人点赞 2017-12-02 21:02:52
    目录 一.课程设计说明 1 1.1项目概述 1 1.2设计任务和要求 1 1.3开发环境说明 1 二....2.1项目介绍 2 2.2数据需求分析 2 三.概念结构设计 3 ...3.2数据库设计 5 ...4.1学生信息管理系统 12 4.2学生信息查询 12
  • 学院: 计算机科学与...一、 实验目的 使用MFC类库编程应用程序:控件按钮、静态控件及编辑框的应用。 了解MFC类的层次结构及主要类的方法,掌握使用MFC和向导来编写Windows应用程序。 熟悉Microsoft Visual Stu...
  • 学生信息管理系统总结

    千次阅读 2019-06-25 19:02:14
    综合运用J2SE有关知识开发【学生信息管理系统】。主要涉及程序控制结构、面向对象编程、图形用户界面、Java数据库应用、MySQL数据库这几个方面的内容。通过本项目的开发,了解系统开发的一般流程,初步了解MVC模式与...
  • 学生信息管理系统JavaWeb

    千次阅读 热门讨论 2018-06-18 18:01:10
    前言: 最近期末的Java大作业大部分都是要Gui(Swing技术) 书本教的也是 Swing技术,但是那界面实在是不忍直视,如果真的要做桌面...决定做一个简单的学生管理系统目的无非是为了完成任务还有巩固一下 Eclips...
  • 学生宿舍管理系统设计与分析

    千次阅读 热门讨论 2020-12-27 20:15:12
    1、项目背景 随着科技的发展,智能化管理越来越重要。大学生在宿舍的时间超过了1/3,因此良好...宿舍管理系统是一个现代化软件,他通过集中式的信息数据库将各种档案管理功能结合起来,达到共享数据,降低成本,提高效
  • 学生宿舍信息管理系统

    千次阅读 多人点赞 2020-12-31 15:20:16
    本系统专门针对学校的公寓管理而开发的一个功能齐全、操作简单的学生公寓管理系统。适合学校的宿舍管理人员使用。本系统实现以下基本功能:管理员可以对公寓进行全程管理,不仅可以管理学生,还可以管理寝室人员及...
  • 【J2EE】学生信息管理系统

    千次阅读 2019-12-28 23:49:51
    通过struts 和hibernate 框架技术来实现一个小型学生信息管理系统的JavaEE项目,掌握小型系统程序设计的基本方法,掌握程序设计基本框架的搭建和模块化程序设计的基本思想,能够使用工具进行程序系统的调试,培养...
  • MySQL学生成绩管理系统设计实验报告

    千次阅读 多人点赞 2020-12-01 21:46:15
    主要介绍学生成绩管理系统项目开发的背景、目的、对象以及研究内容。 1.1项目背景 每个学校都需要在期末进行考试成绩的统计分析工作,而这些工作都必须在考试结束后一个星期的时间内完成。大量的成绩数据的统计工作...
  • Python学生信息管理系统 (菜单界面、txt保存文件) 目录 Python学生信息管理系统 (菜单界面、txt保存文件) 系统设计目的 功能要求 代码总体框架 关键代码 效果展示 系统设计目的 利用Python编程语言编写...
  • 学生信息管理系统(读取文件) 1. 设计目的 1.1巩固和加深对C语言课程基本知识的理解和掌握 1.2利用C语言进行基本的软件设计与开发 1.3了解部分管理信息系统的开发流程 1.4加强自己的团队协作和分析问题的能力 1.5...
  • 学生信息管理系统(C语言)

    千次阅读 2019-04-14 19:30:47
    学生信息管理系统,要求完成以下基本任务: 1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散...
  • C++项目(1):学生信息管理系统(简单教学版)

    万次阅读 多人点赞 2017-01-14 18:45:56
    我的第一个C++项目。粗糙的学生信息管理系统。用TXT文件来做数据持久化。
  • 学生管理系统设计与实现 - 顺序表

    万次阅读 多人点赞 2017-05-26 00:05:41
    注:实验用书为 数据结构 C语言版 第2版,人民邮电出版社出版。 实验题目:学生管理系统设计与实现 实验环境:Visual C++ 6.0或其他C++环境...设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成
  • 基于文件的C语言学生信息管理系统

    千次阅读 多人点赞 2019-04-03 20:45:36
    C语言学生信息管理系统 ●题目分析 将文件引入学生信息管理系统,完善学生信息数据的处理,包括信息的读取、保存、刷新。编写与文件有关的程序,需要考虑将对文件以什么方式操作,文件能否被打开,文件在什么位置。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,746
精华内容 15,098
关键字:

学生信息管理系统设计的目的