姚明java实验课程设计.docx
- 文档编号:26553734
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:30
- 大小:504.09KB
姚明java实验课程设计.docx
《姚明java实验课程设计.docx》由会员分享,可在线阅读,更多相关《姚明java实验课程设计.docx(30页珍藏版)》请在冰豆网上搜索。
姚明java实验课程设计
Java实践课程设计
网上选课系统的设计与实现
姓名:
林浩强
班级:
网络14-2
学号:
14034460220
成绩:
一、系统需求分析
根据前期的调查与日常接触学校的选课系统的情况,确定了此次课程设计的需求分析,具体情况如下:
(1)按角色功能划分为三个模块,管理员模块,学生模块,教师模块。
(2)管理员模块,系统管理员有管理用户,学生,教师,课程等权限。
可以对他们进行增、删、改、查操作。
(3)学生模块,学生主要的功能是查询课程,进行选课,修改自己的密码,或者期末的时候查成绩。
(4)教师模块,教师进行的操作主要有成绩的录入,以及自己密码的修改。
二、系统设计
2.1数据库设计
在设计一个数据库之前,首先要确定的是我们需要创建的表,数据库则是表的集合,通常一个系统需要一个数据库,却需要很多联系在一起的表。
本次实验使用SQLserver数据库管理软件。
为了便于管理,我在数据库student里创建了四个表,分别是unpw(用户表)、s(学生表)、c(课程信息表)、sc(选课信息表)。
(1)unpw(用户表)
un
char(10)
用户名(关键字)
pw
char(10)
密码
qx
char(10)
角色
(2)s(学生表)
sno
char(10)
学号(关键字)
sn
char(10)
姓名
sa
char(10)
年龄
ss
char(10)
性别
sd
char(10)
院系
(3)c(课程表)
cno
char(10)
课程号(关键字)
cn
char(10)
课程名
pcno
char(10)
先行课程号
(4)sc(选课表)
sno
char(10)
学号(关键字)
cno
char(10)
课程号(关键字)
g
char(10)
成绩
在unpw表中,初始化一个管理员账号manage,密码为123,初始化一个学生角色,登录名为001,密码001,初始化一个教师角色,登录名为teacher,密码为123。
其中,我们可通过管理员添加更多的用户。
2.2模块设计
按照模块进行分析,将系统分为三个模块:
管理员模块,学生模块,教师模块。
(1)管理员模块下有五个小模块,分别有:
学生信息管理,课程信息管理,选课信息管理,成绩信息管理,用户信息管理。
(2)学生模块下有四个小模块,分别有:
学生信息查看,此小模块连接的是s表;成绩信息查看,此次连接的是sc表;个人信息管理,此模块主要是修改登陆密码;选课信息,此模块主要是实现选课功能。
(3)教师模块,教师的实现功能比较简单,只有给学生添加成绩和修改自己的登陆密码。
模块设计图如下所示:
学生选课系统
2.3流程图
身份验证
通过登陆界面的验证,进入相应的角色视图,角色不一样,拥有的权限与功能也不一样。
在相应的角色视图下,点击进入选择的功能是视图,功能不同,视图也有所差异,在功能视图下进行的各种操作,实则是对数据库的操作,信息的管理实则是数据库中各种数据的管理。
三、系统关键代码
3.1登陆界面的代码,能实现根据用户进入相应的界面:
packagexuanke;
importjavax.swing.*;
importcn.itcast.util.MyLookAndFeel;
importcn.itcast.util.UiUtil;
importjava.awt.*;
importjava.awt.event.*;
importjava.sql.*;
classDLFrameextendsJFrameimplementsActionListener,ItemListener{//登录界面
JPanelp1=null;
JPanelp2=null;
JPanelp3=null;
JLabeluserName=newJLabel("用户:
");
JTextFieldtxtUser=newJTextField();
JLabelpassword=newJLabel("密码:
");
JPasswordFieldtxtPwd=newJPasswordField(6);
JLabelrole=newJLabel("角色:
");
JComboBoxcbrole=newJComboBox();
JButtonbtnLogin=newJButton("登录");
JButtonbtncz=newJButton("重置");
JButtonbtnCancel=newJButton("取消");
JLabelimageLabel;
Iconimage;
staticintOK=1;
staticintCANCEL=0;
intactionCode=0;
Connectioncon=null;
Statementstmt=null;
ResultSetrs=null;
intqxian=0;
publicDLFrame(){//构造方法
super("登录界面");
p1=newJPanel();
p2=newJPanel();
p3=newJPanel();
cbrole.addItem("管理员");
cbrole.addItem("学生");
cbrole.addItem("教师");
image=newImageIcon("F:
\\u=2413616937,3815272857&fm=15&gp=0.jpg");
imageLabel=newJLabel(image);
p1.add(imageLabel);
this.setLayout(newFlowLayout());
this.setBounds(200,200,246,345);
p2.setLayout(newGridLayout(4,2));
p2.add(userName);
p2.add(txtUser);
p2.add(password);
p2.add(txtPwd);
p2.add(role);
p2.add(cbrole);
p3.add(btnLogin);
p3.add(btncz);
p3.add(btnCancel);
this.add(p1);
this.add(p2);
this.add(p3);
this.setResizable(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.show();
btnLogin.addActionListener(this);
cbrole.addItemListener(this);
btncz.addActionListener(this);
btnCancel.addActionListener(this);
init();
try{
UIManager.setLookAndFeel(MyLookAndFeel.SYS_NIMBUS);
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(InstantiationExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IllegalAccessExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(UnsupportedLookAndFeelExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
privatevoidinit(){
this.setTitle("登录界面");
this.setResizable(false);
UiUtil.setFrameCenter(this);
UiUtil.setFrameImage(this,"user.jpg");
}
publicvoidconnDB(){//连接数据库
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
try{
con=DriverManager.getConnection(
"jdbc:
mysql:
//localhost:
3306/student","root","root");
stmt=con.createStatement();
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicvoidcloseDB()//关闭连接
{
try{
stmt.close();
con.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicvoiditemStateChanged(ItemEvente){
if(e.getStateChange()==ItemEvent.SELECTED){
JComboBoxjcb=(JComboBox)e.getSource();
qxian=jcb.getSelectedIndex();
}
}
publicvoidactionPerformed(ActionEvente){
Objectsource=e.getSource();
Stringun=null;
Stringpw=null;
booleansuccess=false;//用于判断是否登录成功
if(source==btnLogin){
if(txtUser.getText().equals("")||txtPwd.getText().equals("")){//判断是否输入了用户名和密码
JOptionPane.showMessageDialog(null,"登录名和密码不能为空!
");
}else{
this.connDB();
try{
rs=stmt.executeQuery("select*fromunpwwhereqx="
+qxian);
while(rs.next()){
un=rs.getString("un").trim();
pw=rs.getString("pw").trim();
if(txtUser.getText().equals(un)){
if(txtPwd.getText().equals(pw)){
actionCode=OK;
this.setVisible(false);
if(qxian==0){
newManagerFrame();//进入管理员界面
break;
}
if(qxian==1){
newStudentFrame();//进入学生界面
success=true;
break;
}
if(qxian==2){
newTeacherFrame();//进入教师界面
success=true;
break;
}else{
JOptionPane
.showMessageDialog(null,"密码错误!
");
txtPwd.setText("");
success=true;
break;
}
}
}
if(!
success){
JOptionPane.showMessageDialog(null,"登录名错误!
");
txtUser.setText("");
txtPwd.setText("");
}
}
}catch(SQLExceptione1){
e1.printStackTrace();
}
}
}elseif(source==btncz){
txtUser.setText("");
txtPwd.setText("");
}elseif(source==btnCancel){
System.exit(0);
}
}
}
3.2实现数据库连接的代码,所有涉及数据的操作,都要先连接数据库,基本操作都一样,我们可以把他抽取为一个工具类里面的静态方法封装起来,都是由于操作的代码量有点繁琐,我就不去做了:
publicvoidconnDB(){//连接数据库
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
try{
con=DriverManager.getConnection("jdbc:
sqlserver:
//localhost:
1433;DatabaseName=student","sa","sa321");
stmt=con.createStatement();
}catch(SQLExceptione){
e.printStackTrace();
}
}
publicvoidcloseDB()//关闭连接
{
try{
stmt.close();
con.close();
}catch(SQLExceptione){
e.printStackTrace();
}
}
3.3实现增、删、改、查的代码,这段代码是学生管理界面对学生信息录入实现增删改查的实例,关于管理员界面中对用户的增删改查以及教师界面中的对学生成绩的增删改查几乎大同小异,所以不做粘代码的贴,以免重复和繁琐:
1)、增:
publicvoidinsertst(){//插入记录
Stringxh=null;
Stringxm=null;
intnl=0;
xh=tsno.getText();
xm=tsname.getText();
try{
nl=Integer.parseInt((String)tsage.getText());
if(this.getTitle()=="修改"){//如果是修改记录,先删除再增加
try{
this.connDB();
intrs1=stmt.executeUpdate("deletefromswheresno='"
+xh+"'");
}catch(SQLExceptione){
e.printStackTrace();
}
}
Stringstr="insertintosvalues('"+xh+"','"+xm+"',"+nl
+",'"+xb+"','"+yx+"')";
this.connDB();//连接数据库
try{
stmt.executeUpdate(str);
JOptionPane.showMessageDialog(null,this.getTitle()+"成功!
",
"提示",JOptionPane.INFORMATION_MESSAGE,newImageIcon(
"menu4.gif"));
this.setVisible(false);
}catch(SQLExceptione){
JOptionPane.showMessageDialog(null,"学号已存在!
");
tsno.setText("");
}
}catch(NumberFormatExceptione){//判断年龄是否为数字
JOptionPane.showMessageDialog(null,"年龄必须是整数!
");
tsage.setText("");
isNewsm=false;
}
if(this.getTitle()=="增加"){//如果是增加记录,对应的用户表中也增加一条记录
try{
stmt.executeUpdate("insertintounpwvalues('"+xh+"','"
+xh+"',"+1+")");
}catch(NullPointerExceptione){
}catch(SQLExceptione){
//e.printStackTrace();
}
}
}
2)、删
publicvoiddelete(){//删除某个学生的基本信息
Stringxh=null;
Stringxm=null;
intnl=0;
Stringxb=null;
Stringyx=null;
introw=-1;
row=sTable.getSelectedRow();
if(row==-1){//判断要删除的信息是否被选中
JOptionPane.showMessageDialog(null,"请选择要删除的记录!
");
}else{
if(!
bstd){//判断选择的是不是查询后的结果
intj1=0;
try{
rs=stmt.executeQuery("select*froms");
while(rs.next()&&j1<=row){//找出当前被选中的记录在数据库中的对应
xh=rs.getString("sno");
xm=rs.getString("sn");
nl=rs.getInt("sa");
xb=rs.getString("ss");
yx=rs.getString("sd");
j1++;
}
}catch(SQLExceptione){
e.printStackTrace();
}
inti1=0;
try{
intrs1=stmt.executeUpdate("deletefromswheresno='"
+xh+"'");//删除数据库中当前被选中的记录
stmt.executeUpdate("deletefromunpwwhereun='"+xh+"'");//删除对应的用户表中的记录
JOptionPane.showMessageDialog(null,"记录删除成功!
");
this.dispose();
newSM().display();
}catch(SQLExceptione){
e.printStackTrace();
}
}else{
try{
intrs1=stmt.executeUpdate("deletefromswheresno='"
+mxh+"'");
stmt.executeUpdate("deletefromunpwwhereun='"+mxh
+"'");
JOptionPane.showMessageDialog(null,"记录删除成功!
");
this.dispose();
newSM().display();
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
}
3)、改
publicvoidupdate(){//修改某个学生的基本信息
Stringxh=null;
Stringxm=null;
intnl=0;
Stringxb=null;
Stringyx=null;
introw=-1;
row=sTable.getSelectedRow();
if(row==-1){
JOptionPane.showMessageDialog(null,"请选择要修改的记录!
");
}else{
intj1=0;
try{
if(!
bstd){//判断选择的是不是查询后的结果
rs=stmt.executeQuery("select*froms");
}else{
rs=stmt.executeQuery("select*fromswheresno='"+mxh
+"'");
}
while(r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 姚明 java 实验 课程设计