班级信息管理系统《Java面向对象程序设计》.docx
- 文档编号:8830368
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:25
- 大小:605.41KB
班级信息管理系统《Java面向对象程序设计》.docx
《班级信息管理系统《Java面向对象程序设计》.docx》由会员分享,可在线阅读,更多相关《班级信息管理系统《Java面向对象程序设计》.docx(25页珍藏版)》请在冰豆网上搜索。
班级信息管理系统《Java面向对象程序设计》
信息科学与技术学院
2010—2011第二学期
班级信息管理系统《Java面向对象程序设计》
课程报告
课程设计题目:
1、班级信息管理系统
2、画图程序
学号:
姓名:
专业:
教师:
2010-12
报告一:
班级信息管理系统
设计的内容要求
完成后台连接数据库的通信录
可实现添加、删除、查找、浏览等功能。
权限验证
检验用户合法身份;
学生信息管理
学生个人信息的添加、修改、删除;
课程信息管理
课程信息添加、删除、成绩查询、学生选课信息的查询处理
设计思想
主框架和InfoUP、CourseManage、Score
本程序将学生信息管理系统定义为InfoUP所定义的面板类,以此类推,将课程信息管理系统定义为CourseManage面板类,成绩管理系统为Score,Student将三者联系起来,是得三个类在同一个类StudentSystem的框架中定义更加简洁。
连接后台Access数据库,在前台进行数据库访问
程序默认的表是Student表,所有的学生学籍信息都保存在数据库Student中的Student表中,对数据的增删改查询直接影响数据库中数据信息的变化。
删除子系统默认删除全部信息,查询子系统默认查询全部数据信息。
详细设计
功能分析
学生信息录入与更改
程序先从数据库中读取用户数据,然后回显到系统中,第一次使用时,可以选择链接打开数据库中已经存在的表,默认打开的是学生表。
录入学生信息的有效性验证
添加信息中学生学号有唯一性原则,同一个学号只能对应一个学生,可以存在同名学生。
学生学号、学生姓名、出生年月为基本信息属于必须填写内容,其余信息可填写完整也可不填写完整。
其中出生年月的输入格式为:
××××—××—××,例如:
1987-06-08。
只有符合格式的数据才接受否则出错警告。
查询班级学生
1、查询操作中一次可查询一个或多个学生信息,查询操作中所有均为可选项,默认条件下显示数据库中所有学生学籍信息。
查询中性别项可能为空,若查询失败时可尝试选择男女不限选项进行查询。
2、删除操作中全部选项均为可选项,删除条件可不填写完全。
但注意当没有输入任何删除条件的情况下,将执行删除操作将删除数据库中所有信息。
3、更新操作一次只能更新数据库中一个学生信息。
更新操作中学号为更新条件为必填项,其余为更新的可选项。
程序流程图
3.1添加功能子系统3.2删除功能子系统
3.3查询功能子系统3.4更新功能子系统
运行效果图
1、系统登录,如图1
图1登录界面
2、系统主界面
图2系统主界
3
、添加学生信息
图3学生信息添加成功
图4数据库内容
4、添加课程信息
图4选课信息添加成功
5、添加成绩信息
图5管理员登记分数
心得与体会
在学习和实践过程中逐渐对代码习惯、软件思维都有比较进一步的了解。
java语言的纯面向对象、平台无关性确实很方便。
另外,java语言的许多开源工具为我们普通的程序开发者提供许多快速入门和提高开发水平的途径。
在初期的排版中就有很多布局方式难以把握,最后通过翻阅各类Java书籍,查找各类成员方法的使用才逐渐做出了这个框架。
框架后就是功能函数的编写,这是课程设计的主体。
进过长时间的调试才使得程序框架逐渐清晰。
程序设计中,对数据库连接基本是按照课本教案上的演示一步步来深入的,只是为了信息的完整更贴近现实,做了很多变量,增加了后面程序的复杂性。
当然程序中可能还存在很多的问题。
程序中很多变量的声明不明确,表中的字段利于改变。
同时程序不能自己创建数据库,这使得在程序的运行前必须由用户自己新建一个数据库,增加了用户使用的复杂性。
通过这样的课程设计,学会了在设计实验过程时的基本步骤。
基本上能够有条理的解决这些问题。
通过对上述功能的实现,使得我对java和数据库的实现有了很完整的理解,同时在编程的过程中,还把以前课堂上学习的知识得到了灵活的应用,收获很多。
通过课程设计,让我发现了自己的不足。
自己在学习知识上面的漏洞。
附录
classInfoUPextendsJPanelimplementsActionListener,ItemListener
{
……//初始化创建面板类InfoUP等代码
booleanTable_exist()
{
booleanTest=false;
try{Class.forName(JDriver);}//加载JDBC-ODBC桥驱动程序
catch(java.lang.ClassNotFoundExceptione){
JOptionPane.showMessageDialog(null,"SQLException:
"+e.getMessage(),"检查表是否存在时加载驱动错误!
",JOptionPane.PLAIN_MESSAGE);
}
try{
con=DriverManager.getConnection(conURL);//连接数据库URL
DatabaseMetaDatameta=con.getMetaData();
ResultSetset=meta.getTables(null,null,this.table,null);
while(set.next()){Test=true;break;
}
con.close();//关闭与数据库的连线
}
catch(SQLExceptione){Test=false;}
returnTest;
}
……
voidFunAdd()
{
Ls.removeAll();
Studentstu=newStudent();
GetAU(stu);
if(StuIDText.getText().length()==0||StuNameText.getText().length()==0)
{
JOptionPane.showMessageDialog(null,"至少输入学生姓名和学号!
","温馨提示!
",JOptionPane.PLAIN_MESSAGE);
return;
}
try{Class.forName(JDriver);}
catch(java.lang.ClassNotFoundExceptione){
JOptionPane.showMessageDialog(null,"SQLException:
"+e.getMessage(),"数据库加载驱动出错警告!
",JOptionPane.PLAIN_MESSAGE);
}
try{
Connectioncon=DriverManager.getConnection(conURL);
Statements=con.createStatement();
Stringr1="StuID,StuName,EnterYear,StuSex,StuDep,StuGrade,"+
"StuMajor,StuClass,StuFrom,ID,PostNumber,Link,Address";
Stringr2="'"+stu.StuID+"','"+stu.StuName+"','"+stu.EnterYear+"','"+stu.StuSex+"','"+stu.StuDep
+"','"+stu.StuGrade+"','"+stu.StuMajor+"','"+stu.StuClass+"','"+stu.StuFrom+"','"
+stu.ID+"','"+stu.PostNumber+"','"+stu.Link+"','"+stu.Address+"'";
Stringr3="insertinto"+this.table+"("+r1+")values("+r2+")";
s.executeUpdate(r3);
s.close();con.close();
Ls.add("新增学生学籍信息:
");
ShowAU(stu);
Ls.add("");
Ls.add("学生信息已成功存入数据库!
");
}
catch(SQLExceptione)
{JOptionPane.showMessageDialog(null,"SQLException:
"+e.getMessage()+"","导入数据库错误!
",JOptionPane.PLAIN_MESSAGE);
}
…….//其他功能代码
}
classCourseManageextendsJPanelimplementsActionListener,ItemListener
{
……//初始化创建面板类CourseManage等代码
publicvoidlessonshow()
{
Ls.removeAll();//数据库调用
try
{
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
forStudy");
Statements=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringquery="createtablelesson("+"idvarchar,"+"namevarchar,"+"teachervarchar,"+"statevarchar,"+"tivarchar"+")";//数据库格式创建
s.executeUpdate(query);
ResultSetrs=s.executeQuery("select*fromlesson");//输出数据库中的数据
while(rs.next())
{
str=rs.getString
(1);
str=str+""+rs.getString
(2);
str=str+""+rs.getString(3);
str=str+""+rs.getString(4);
str=str+""+rs.getString(5);
Ls.add(str);
}
s.close();
con.close();
}
catch(SQLExceptionf)
{
System.out.println("SQLException:
record数据库显示失败"+f.getMessage());
}
}
//写入数据库
publicvoidchooseshow()
{
Ls.removeAll();//数据库调用
try
{
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
forStudy");
Statements=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
Stringquery="createtablechoose("+"idvarchar,"+"subjectvarchar"+")";//数据库格式创建
System.out.println(query);
s.executeUpdate(query);
System.out.print(cid);
ResultSetrs=s.executeQuery("select*fromchoosewhereid='"+cid+"'");//输出数据库中的数据
while(rs.next())
{
str=rs.getString
(2);
try//数据库调用
{
Class.forName("jdbc:
obdc:
JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundExceptiong)
{
System.out.println("ForName:
"+g.getMessage());
}
try
{
Connectionconl=DriverManager.getConnection("jdbc:
odbc:
forStudy");
Statementsl=conl.createStatement();
System.out.print("...."+str);
String_str="select*fromlessonwhereid='";
_str=_str+str+"'";r=sl.executeQuery(_str);
r.next();System.out.print(_str+"...."+str);
id=r.getString("id").trim();name=r.getString("name").trim();
teacher=r.getString("teacher").trim();state=r.getString("state").trim();
time=r.getString("ti").trim();
str=id+""+name+""+teacher+""+state+""+time;
Ls.add(str);sl.close();conl.close();
}
catch(SQLExceptionf)
{
System.out.println("SQLException:
lessonc数据库访问出错"+f.getMessage());
}
}
s.close();
con.close();
}
catch(SQLExceptionf)
{
System.out.println("SQLException:
choose数据库显示出错"+f.getMessage());
}
}
classScoreextendsJPanelimplementsActionListener
{……//初始化创建面板类Score等代码
….数据库写入与CourseManage相同,代码省略
}
publicclassStudentSystemimplementsActionListener,ItemListener
{……//初始化创建主界面代码
……
JFrameframe=newJFrame("班级信息管理系统");
frame.setLayout(newGridLayout(1,1,1,1));
frame.setLocation(frame.getToolkit().getScreenSize().width/2-frame.getWidth()/2,frame.getToolkit().getScreenSize().height/2-frame.getHeight()/2);//窗口居中显示
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1000,1000);
frame.setLocation(20,20);
frame.setBounds(10,10,10,10);
JTabbedPanetp=newJTabbedPane();
tp.setSize(500,500);
tp.addTab("信息更新",newInfoUP());
tp.addTab("课程管理",newCourseManage());
tp.addTab("成绩管理",newScore());
……
}
报告二:
画图程序
第1部分设计的内容要求
图形绘制
实现直线、矩形、员、椭圆、圆角矩形等图形的绘制
选择颜色
能够自由的选择画笔颜色
填充图形
能够绘制各种形状的填充图形
文件处理
能够打开绘图文件和保存文件,具有清除画板新建画布的功能
具有简单的提示信息
设计思想
IShape和RectBoundedShape
画图程序设计到多种图形的绘制,在这里我把每个图形定义成为若干个内部类,通过外部类对内部类的调用,实现内部类的构造方法,于此同时,在Dr类中还定义了IShape的接口,通过IShape的接口定义了鼠标的释放方式以及实现画图的publicvoiddraw(Graphicsg);方法。
与此同时,抽象类RectBoundedShape继承IShape,将图像的颜色以及鼠标信息,使继承RectBoundedShape的Line、Rect、RoundRect等类覆盖RectBoundedShape的构造方法和继承processCursorEvent的方法,从而实现简化代码、统一定义,使得程序结构更加具有鲜明。
Shapes和currentShape
本画图程序通过importjava.util.ArrayList;引入了一个privateArrayListshapes;来记录曾经画过的图像,一旦产生一个currentShape,程序就立刻将currentShape加入到shapes中,并通过paintComponent来实现重新绘制容器中的每个组件,从而实现所有图形的同时显示。
JApplet和WindowControl
为了使JApplet技能够在浏览器中运行,又能在Application单独运行,本程序使用了,在JApplet中创建main方法,使其能独立运行,在其中创建了一个被雷到呃实例并且通过该实例实现基于WindowControl的构造方法的Dr实例创建,使JApplet在Application平台下运行更加自如。
详细设计
功能分析
图形的绘制:
图形绘制主要是通过常见图形对应的类实例,通过每个类对类实例中的publicvoiddraw(Graphicsg)方法的重写,再在以下的代码中调用draw函数,重画面板中的组件,实现图形绘制。
能够自由的选择画笔颜色
在绘制图形的时候能够调用自带的颜色选择器javax.swing.JColorChooser,选择各种前景颜色,是绘制图形丰富多彩。
程序中有两处可以选择颜色:
按钮面板上的调色板;
菜单栏上的颜色->选择颜色按钮。
能够绘制各种形状的填充图形
填充图形主要是通过一个布尔值来标示,也将其存放在RectBoundedShape这个抽象类中,其默认值为false,当点击过填充图形的按钮后,将其置true,在调用draw方法时,判断filled_or的值,来决定是否绘制填充图形。
能够打开绘图文件和保存文件
打开图形文件,并将其显示在lbl中。
同样可以讲画板上的图形保存起来。
具有清除画板新建画布的功能
菜单栏中的新建和清除其实是一个功能,就是将主画板清空。
具有简单的提示信息
弹出对话框进行简单提示。
程序流程图
图1主程序流程图
图2图形类流程图
运行效果图
1、系统运行主界面
图1画图主界面
图2about信息
1、画图程序绘制的各种图形
该简易的画图程序可绘制各种图形,并填充各种颜色,界面简洁方便操作。
于此同时菜单栏上还提供了其他有关的操作。
图3画板绘制图形
2、颜色选取
javax.swing.JColorChooser提供了三种选择颜色的方法,色彩丰富。
图4颜色选择
5、图像清除,文件保存与打开
如图当点击新建时,画板中的图形清除,如图5。
当点击打开时,可将已经创建好的图再导入到画布中,如图6。
图4即将新建图5一张崭新的画布
图6重新打开文件
心得与体会
本次课程设计加深了我对课本知识的理解,进一步深化了我对Java面向对象(OOP)的思想认识。
学会了简单的面板及控件布局设计,能够按照自己的想象设计出框架布局,能够进行简单的图形的绘制和编辑等,实现了Windows自带画图的部分基本功能,总的说来收益匪浅。
对于这样的课程设计,工作量相对平时作业确实大了许多。
由于开始的不熟练耽误了一些时间,后来在实现连续保存图形的算法上很是纠结了一阵,一直没有想到很好的做法,最后参考了一些其他程序的一些思想,才找到头绪。
整体上看做画图比较简单,但是就做的过程中发现要注意很多的细节性问题。
实验过程中也走了很多的弯路,由于在开始设计的时候思路不时很清晰,对于一些问题不能很好的提出解决问题的方法,在设计过程中,代码总是重复的修改,并且由于不能再以各高度上给自己编写的代码进行一个评价,在很多问题上,代码并不时最优的。
相信在以后的学习中,随着知识的增多,问题会逐渐得到解决。
附录
构建主要窗体代码:
publicclassDrextendsJAppletimplementsActionListener
{
……..
JButtonline,rectangle,round,oval,roundrect,colchooser,filled;
Panelpmain=newPanel();
Panelpbtn=newPanel();
//DrawingBoardpaintb;
MenuBarmb;
Graphicsg;
DrawingBoardpaintb;//重要
Dimensiond;
finalstaticJLabellbl=newJLabel();
publicstaticvoidmain(String[]args)
{
f.add(lbl);
mh.addActionListener(app);
mj.addActionListener(app);
app.init();
app.start();
}
初始化面板部分代码:
publicvoidinit()
{
……
paintb=newDrawingBoard();
pmain=newPanel();
pmain.setLayout(newBorderLayout());
pmain.setSize(10,700);
pmain.add(pbtn,BorderLayout.WEST);
pmain.add(paintb,BorderLayout.CENTER);
add(pmain);
}
画板类部分代码:
构建I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java面向对象程序设计 班级 信息管理 系统 Java 面向 对象 程序设计