目录
学生信息管理系统比较常见,功能比较简单基础,适合我这样的初学者进行练习。最简单的学生信息管理系统无非就是“增删改查”四个简单的功能。
在程序设计之初,需要对程序功能进行一个设计,通过理想化功能对程序适用人群进行划分,本程序实现的功能如下:
1.登录系统界面(用户名和密码的识别)
2.班级信息的“增删改查”
3.学生个人基本信息的“增删改查”
本系统基于Java语言,使用了C/S架构和三层体系结构,开发环境使用了eclipse,数据库使用了MySQL5.0和可视化管理工具Navicat for MySQL。
本程序主要采用了Java语言中的GUI(图形用户界面)和AWT(窗口抽象工具包编程)
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口),即人机交互图形用户界面的设计,是指以图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面在视觉上更容易被用户接受。
抽象窗口工具包(Abstract Windowing Toolkit,缩写为AWT)是Java的平台独立的窗口系统图形和用户界面器件工具包。AWT 是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。 AWT提供了JavaApplet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的编程语言,但图形用户界面通常是依赖于平台的,所以Java使用相应的技术使AWT能够为应用程序提供独立于平台的接口,从而确保同一程序的图形用户界面在外观相似的不同机器上运行。
(1)三层架构模式
三层架构模式包括显示层、业务逻辑层和数据层。其工作模式是:显示层通常面向操作者,主要用于接收数据、传输数据和显示数据;业务逻辑层主要用于处理显示层接收的数据和数据库中的数据。数据层主要用于操作数据库,包括添加、删除、修改和检查等常见操作。采用三层架构模式可以大大减少程序间的耦合,符合现代软件的标准。
(2) C/S结构
C/S结构,称为客户机和服务器结构。它是一种软件系统架构,通过它可以充分利用两端硬件环境的优势,合理地将任务分配给客户端和服务器端,从而降低系统的通信开销。目前,大多数应用软件系统以客户机/服务器的形式具有两层结构。随着当前软件应用系统向分布式网络应用发展,网络和客户机/服务器应用都可以执行相同的业务处理,并使用不同的模块来共享逻辑组件;因此,内部和外部用户都可以访问新的和现有的应用系统,并且新的应用系统可以通过现有应用系统中的逻辑来扩展。这是目前应用系统的发展方向。
随着科学技术的飞速发展,计算机科学技术的不断进步,计算机在各个领域的普及,学校规模的不断扩大,学院、专业、班级和学生数量的急剧增加,以及各种学生信息的指数增长,以往的学校学生身份信息管理仍然处于手工管理的复杂阶段,需要手工重复劳动,工作量大,效率极低。因此,迫切需要开发一个基于互联网的学生信息管理系统,以提高学校管理的效率。其最主要的特点就是节省人力资源,使用方便、快捷。以提高学校管理质量为原则,方便快捷的管理学生信息。所以,开发一套学校学生信息管理系统来代替传统的人工管理方式是必然的。本系统要实现学生信息的网络化的查询与管理。那么,学生如何管理个人信息是这个系统需要解决的问题。
该系统的主要任务是管理学生信息。学生可以查询自己的信息或修改相关信息。教师可以添加、删除和修改学生信息。该系统提供了一个非常友好的界面,操作简单,管理方便。一般来说,本次课程设计是为了解决学生信息的管理问题,存储一定的用户信息和学生信息,方便有效地操作和管理相应的用户信息和学生信息,主要包括:用户可以修改自己的信息;添加和修改用户的相关信息;添加、修改、删除学生的相关信息;对学生的相关信息的查询。最终实现学生信息的网络化的查询与管理。
这一阶段设计的基本目标是解决如何实践系统的问题,它主要设计系统架构设计,并将给出系统的总体架构设计。根据系统分析产生的结果,确定系统由哪些系统和模块组成,这些系统和模块是如何有机结合,以及每个模块的功能是如何实现的。系统设计的目标是使系统具有所需的功能,同时努力实现高效率、高可靠性、可修改性以及易于掌握和使用。这一阶段是在仔细研究软件需求之后,划分和设计要开发的软件系统,定义系统层次结构和各层之间应该负责的逻辑功能。模块化的基础是将复杂的问题分解成许多容易解决的小问题。原来的问题变得容易解决。模块化设计是根据某些原则将大型软件分成具有独立和相关功能的较小模块。每个模块完成一个特定的子功能。将这些模块组合成一个整体。完成指定的功能并满足问题的要求。采用模块化原理的优点是软件结构清晰,易于测试和调试。从而提高软件的可靠性和可修改性。它有助于软件开发的组织和管理。大型软件可以分别编写不同的模块。
该系统采用多层架构。视图类用作表示层。除了向客户提供信息之外,它还获得管理员或教师或学生输入的信息。用户输入的简单控制。表单获得用户输入信息后,提交给视图,在这里首先转换获得的数据,然后将相应的数据封装为数据传输对象。视图将封装的数据提交给模型,并使用提交给视图的数据对象来执行复杂的业务逻辑操作。对数据库的访问是在DAO级别。DAO层实现特定的数据库操作方法,服务层调用DAO层方法来实现数据库操作。通过应用这种多层体系结构,提高了系统的可维护性、可扩展性和可移植性。
从功能模块上可以分为如下几大模块:学生信息的导入、导出模块、删除学生信息模块、修改学生信息模块、查询学生信息模块、添加学生信息模块。主要功能模块如图4-2-1所示:

班级信息模块类似有删除班级信息模块、修改班级信息模块、查询班级信息模块、添加班级信息模块。主要模块功能如图所示:

本系统采用MySQL5.0进行数据库设计开发,为了方便后期对数据库的管理,使用了navicta for MySQL对数据库进行可视化管理。
在系统设计之初,我首先考虑了如何使用数据模型,通过使用数据库的结构和语义来抽象现实世界。模型的结构部分指定了如何描述数据。目前广泛使用的数据模型可以分为两种类型,一种是独立于计算机系统的概念数据模型,如实体连接模型;另一种是直接面向数据库逻辑结构的结构化数据模型。在这个系统中,我第一次使用实体关系模型(ER model)来描述数据库的结构和语义,抽象现实世界。ER模型直接从现实世界中抽象出实体类型和关系,然后使用ER图来表示数据模型。它有两个明显的优点:贴近人们的思维,易于理解;它与计算机无关,很容易被用户接受。然而,er模型只能解释实体之间的语义关系,不能进一步解释详细的数据结构。这只是数据库设计的第一步。
E-R图是直观表示概念模型的工具,它有三个基本成分:
矩形框,表示实体类型(考虑问题的对象)。
菱形框,表示联系类型(实体间的联系)。
椭圆形框,表示实体的属性。
根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。本系统包括的实体有管理员实体,教师实体,学生实体。
学生实体的属性有,学号、姓名、性别、年龄、院系、班级、家庭住址和简介。学生实体图如下图5-3-1所示:

教师实体的属性有,教师编号、姓名、性别、年龄、登录帐号和登录密码。教师实体图如下图5-3-2所示:

管理员实体属性有,管理员编号、用户名、密码。管理员实体图如下图5-3-3所示:

由以上的实体图可以得到以下几个关系模式:
学生基本信息(学号,姓名,性别,院系,班级,住址,信息简介)
班级基本信息(班级编号,班级名,班级简介)
用户基本信息(用户编号,登录帐号,登录密码)
学生信息数据表的主要功能在于保存学生的主要信息和相关信息,包括:‘学号’、‘姓名’、‘性别’、‘年龄’、‘院系’、‘班级号’、‘家庭住址’。学生信息数据表如表所示。
| 字段名称 | 字段类型 | 字段大小 | 索引 | 必须填写 |
| stuId | 文本 | 50 |
| 是 |
| stuNo | 文本 | 20 |
| 是 |
| stuName | 文本 | 30 |
| 是 |
| Sex | 文本 | 50 |
| 是 |
| Dept | 文本 | 50 |
| 是 |
| classId | 文本 | 50 |
| 是 |
| Address | 文本 | 50 |
| 是 |
班级信息数据表的主要功能是保存班级的相关信息。它包括:‘班级编号’、‘班级名’、‘班级介绍’。 班级信息数据表如表所示。
| 字段名称 | 字段类型 | 字段大小 | 索引 | 必须填写 |
| Id | 文本 | 20 |
| 是 |
| GradeName | 文本 | 20 |
| 是 |
| gradeDesc | 文本 | 50 |
| 是 |
用户信息数据表的主要功能是保存用户的相关信息。它包括:‘用户编号’、‘登录账号’、‘登录密码’。 用户信息数据表如表所示:
| 字段名称 | 字段类型 | 字段大小 | 索引 | 必须填写 |
| Id | 数字 | 4 | 有(无重复) | 是 |
| Username | 文本 | 30 |
| 是 |
| Password | 文本 | 30 |
| 是 |
数据库设计完成后,就开始进入具体的应用程序的分析与设计阶段。应用程序的分析与设计主要包括了应用程序各个功能模块的总体规划和分析、应用程序界面的选择与设计以及应用程序结构的选择等部分,而系统开发工作主要是集中在逻辑、功能和技术设计上,系统实施阶段要继承此前面各个阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶。
首先新建用户登录所对应的实体user类,一个user对象代表一个用户,此外,用户表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。
用户实体类:
public class User {
private int id; // 编号
private String userName; // 用户名
private String password; // 密码
public User() {
super();
// TODO Auto-generated constructor stub
}
public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
(set和get方法以及同toString方法省略)
第二步就是对登录的逻辑处理,首先是登陆名以及密码的非空校验,两者有一个为空就不继续访问数据库,直接返回给用户错误的信息,提醒用户更正登录信息。

当用户名或者密码为空的时候点击登录就会出现提示信息,如图6.1.2

代码部分的实现是使用了awt框架中的事件处理函数
private void loginActionPerformed(ActionEvent evt) {
String userName=this.userNameTxt.getText();
String password=new String(this.passwordTxt.getPassword());
if(StringUtil.isEmpty(userName)){
JOptionPane.showMessageDialog(null, "用户名不能为空!");
return;
}
if(StringUtil.isEmpty(password)){
JOptionPane.showMessageDialog(null, "密码不能为空!");
return;
}
User user=new User(userName,password);
Connection con=null;
try {
con=dbUtil.getCon();
User currentUser=userDao.login(con, user);
if(currentUser!=null){
dispose();
new MainFrm().setVisible(true);
}else{
JOptionPane.showMessageDialog(null, "用户名或者密码错误!");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
首先新建班级所对应的实体studentClass类,一个studentClass对象代表一个班级,此外,班级表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。
班级实体类:
public class SchoolClass {
private int id; // 编号
private String className; // 班级名称
private String calssDesc; // 备注
public SchoolClass() {
super();
}
public SchoolClass(String className, String calssDesc) {
super();
this.className = className;
this.calssDesc = calssDesc;
}
public SchoolClass(int id, String className, String calssDesc) {
super();
this.id = id;
this.className = className;
this.calssDesc = calssDesc;
}
(set和get方法以及同toString方法省略)
第二步就是对班级信息逻辑部分的实现了,包括增加删除修改查询,其中添加是单独放在了一个界面,而查询、修改以及删除放在了同一个界面,这样便于维护,如图所示

点击添加则会调用添加部分的界面函数,弹出信息添加的界面如图所示,可以输入班级的名称,以及对班级的详细描述进行添加,在输入错误的情况下也可以点击重置,就会清空所有填写的信息,这样便于操作。

点击维护则会调用维护部分的界面函数,弹出信息维护的界面如图所示,可以修改班级的名称,以及对班级的详细描述进行修改。

实现班级信息维护的代码如下,其中也是使用了awt中的事件处理函数,以及swing中的函数实现界面的显示跳转弹框等交互的操作。
private void bookTypeAddActionPerformed(ActionEvent evt) {
String className=this.classNameTxt.getText();
String classDesc=this.classDescTxt.getText();
if(StringUtil.isEmpty(className)){
JOptionPane.showMessageDialog(null, "班级信息名称不能为空!");
return;
}
SchoolClass schoolClass=new SchoolClass(className,classDesc);
Connection con=null;
try{
con=dbUtil.getCon();
int n=schoolClassDao.add(con, schoolClass);
if(n==1){
JOptionPane.showMessageDialog(null, "班级信息添加成功!");
resetValue();
}else{
JOptionPane.showMessageDialog(null, "班级信息添加失败!");
}
}catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "班级信息添加失败!");
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
首先新建学生所对应的实体student类,一个student对象代表一个用户,此外,用户表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。
用户实体类:
public class Student {
private int id; // 编号
private String name; // 姓名
private String sn; // 学号
private String sex; // 性别
private String dept; // 所在院系
private Integer classId; // 班级Id
private String className; // 班级名称
private String address; // 家庭住址
public Student() {
super();
}
public Student(String name, String sn, String sex, String dept, Integer calssId, String address) {
super();
this.name = name;
this.sn = sn;
this.sex = sex;
this.dept = dept;
this.classId = calssId;
this.address = address;
}
(set和get方法以及同toString方法省略)
第二步就是对学生个人信息逻辑部分的实现了,包括增加删除修改查询,其中添加是单独放在了一个界面,而查询、修改以及删除放在了同一个界面,这样便于维护,如图所示

其中手工填写学生的姓名学号、所在院系和家庭住址,性别通过单选框选择,班级通过下拉菜单进行选择。

在学生信息维护的界面可以对学生信息进行检索,可以通过学生的姓名、学生的编号、学生所在的班级进行筛选,点击选择某位学生的信息,就可以对该学生的信息进行操作了,可以修改其名字、性别、所在的学院、学生的学号、所属的班级以及家庭住址。也可以点击删除、删除该学生的信息。

实现个人信息维护的代码如下,其中也是使用了awt中的事件处理函数,以及swing中的函数实现界面的显示跳转弹框等交互的操作,学生信息的字段信息比较多需要注意要对应字段赋值。
private void studentUpdateActionPerformed(ActionEvent evt) {
String id=this.idTxt.getText();
if(StringUtil.isEmpty(id)){
JOptionPane.showMessageDialog(null, "请选择要修改的记录");
return;
}
String sname=this.nameTxt.getText();
String sn=this.snTxt.getText();
String dept=this.deptTxt.getText();
String address=this.addressTxt.getText();
if(StringUtil.isEmpty(sname)){
JOptionPane.showMessageDialog(null, "学生信息名称不能为空!");
return;
}
if(StringUtil.isEmpty(sn)){
JOptionPane.showMessageDialog(null, "学生信息作者不能为空!");
return;
}
if(StringUtil.isEmpty(dept)){
JOptionPane.showMessageDialog(null, "学生信息价格不能为空!");
return;
}
String sex="";
if(manJrb.isSelected()){
sex="男";
}else if(femaleJrb.isSelected()){
sex="女";
}
SchoolClass schoolClassTmp=(SchoolClass) schoolClassJcb.getSelectedItem();
int scId=schoolClassTmp.getId();
Student book=new Student(Integer.parseInt(id), sname, sn, sex, dept, scId, address);
Connection con=null;
try{
con=dbUtil.getCon();
int addNum=studentDao.update(con, book);
if(addNum==1){
JOptionPane.showMessageDialog(null, "学生信息修改成功!");
resetValue();
this.fillTable(new Student());
}else{
JOptionPane.showMessageDialog(null, "学生信息修改失败!");
}
}catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "学生信息修改失败!");
}finally{
try {
dbUtil.closeCon(con);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
本系统主要是基本的学生信息管理系统的基础功能,仅仅实现了最基本的增删改查,但是GUI技术和AWT技术对于初学者来说比较有参考意义。这就是一个简单的课程设计,有哪些不对的地方还请批评指正。
代码和数据库文件链接地址:https://download.csdn.net/download/qq_52974528/87336438
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵