Java网络编程课程设计.docx
《Java网络编程课程设计.docx》由会员分享,可在线阅读,更多相关《Java网络编程课程设计.docx(40页珍藏版)》请在冰豆网上搜索。
Java网络编程课程设计
Java网络编程实践
课程设计说明书
课程名称:
Java网络编程课程设计
题目:
基于C/S的学生信息管理
******************
学号:
*********
教学班号:
软件工程1201班
*****************
兰州交通大学软件科学与工程系
二○年月日
Java网络编程实践任务书
题目3:
基于C/S的学生信息管理(1人)
实现应用,可以通过网络在客户端对存放在服务器端的学生信息表(至少包含学号、姓名、性别、年龄、籍贯等字段)学生纪录增、删、改、查,并返回结果。
要能通过菜单选择功能。
基于Socket,多客户端使用多线程,以能同时从多个客户端执行功能。
必须提供友好直观、布局合理的图形界面选择功能、显示信息和填写修改信息。
成员名单:
戴领辉
服务器代码
戴领辉
客户端代码
戴领辉
客户端界面
戴领辉
数据库连接
戴领辉
课程设计报告
戴领辉
一.项目简述和目的
随着学校的规模不断扩大,学生数量急剧增加,学生的各种信息量也成倍增长。
面对庞大的信息量需要有学生管理系统来提高学生管理工作的效率。
通过这样的系统可以做到信息的规范管理、科学统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。
学生信息管理系统是一个教育单位不可缺少的部分。
一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。
所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。
通过此项目实训——JAVA学生信息管理系统,实践、总结、回顾了网络编程思想以及编程方法,并通过编写程序来掌握Java语言编程技巧,将学习到的知识融会贯通,同时提高调试程序的能力,养成良好的编程习惯,并增强对程序设计整体思路的把握,理论与时间相结合。
进一步培养学生面向对象程序设计的思想,针对JAVA语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
二.解题基本思路
本程序分为两部分,服务器端与客户端。
服务器连接数据库存储学生的信息表格。
客户端与服务器建立Socket连接,然后用对象输出流包装Sock的输出流将用户输入客户端的信息与执行的操作发送给服务器端,服务器端接收到客户端发送来的信息后加以分析,然后对数据库内的学生信息相应的处理后,最后将学生信息发送给客户端,用户就能查看并处理学生信息了。
三.分析与设计
本系统主要通过客户端,服务器端来体现聊天系统的基本功能。
(1)服务器端
1.连接数据库获取学生信息
2.处理用户登录
3.处理用户查询学生信息
4.处理用户添加学生信息
5.处理用户删除学生信息
6.处理用户修改学生信息
(2)客户端
1.用户的操作界面
2.向服务器端端发送用户的操作信息
3.接受服务器向客户端的反馈信息
四.主要程序源代码
服务器端代码:
importjava.io.*;
import.*;
importjava.sql.*;
publicclassServer{
publicstaticvoidmain(Stringargs[]){
ThreadServers=newThreadServer();
s.start();
}
}
classThreadServerextendsThread{//多线程类
staticServerSocketserver;
staticSocketssocket;
staticBufferedReaderreader1;
staticBufferedReaderreader2;
staticStringsql,databack;
staticStringStudentID,password,address,myname,class1,age,phone,
sex,school;
staticResultSetrs;
staticStatementstmt;
staticConnectioncon;
publicvoidrun(){
try{
finalStringdb_driver="sun.jdbc.odbc.JdbcOdbcDriver";//加载数据库驱动
finalStringdb_url="jdbc:
odbc:
Driver={MicrosoftAccessDriver(*.mdb,*.accdb)};DBQ=d:
/student.mdb";
try{
}catch(Exceptione){
e.printStackTrace();
}
try{
server=newServerSocket(4838);//创建服务器
System.out.println("服务器已创建");
intflag=0;
intflag1=0;
while(true){
ssocket=server.accept();//连接客户端
System.out.println("客户端已连接服务器");
reader1=newBufferedReader(newInputStreamReader(
ssocket.getInputStream()));
PrintWriterwriter=newPrintWriter(
ssocket.getOutputStream());
Strings1=reader1.readLine();
Stringnetwork[]=s1.split(",");//逗号分隔
sql="select*fromstudent";
Class.forName(db_driver);
con=DriverManager.getConnection(db_url,"","");//连接数据库
if(con!
=null){
System.out.println("数据库连接成功");
}else{
System.out.println("数据库连接失败");
}
stmt=con.createStatement();
rs=stmt.executeQuery(sql);
if(network[0].equals("enter")){//处理登陆功能
while(rs.next()){
StudentID=rs.getString("StudentID");
password=rs.getString("password");
if(network[1].equals(StudentID)
&&network[2].equals(password)){
intnumber1=Integer.parseInt(StudentID);
intnumber2=Integer.parseInt(password);
if(number1==201211044
&&number2==201211044){
flag=1;
break;
}
}
}
if(flag==1){
writer.println("yes");
writer.flush();
flag=0;
}else{
writer.println("no");
writer.flush();
}
stmt.close();
con.close();
}elseif(network[0].equals("Search")){//处理查询功能
while(rs.next()){
school=rs.getString("school");
StudentID=rs.getString("StudentID");
password=rs.getString("password");
sex=rs.getString("sex");
address=rs.getString("address");
class1=rs.getString("class");
myname=rs.getString("myname");
phone=rs.getString("phone");
age=rs.getString("age");
if(network[1].equals(StudentID)
&&network[2].equals(password)){
flag1=1;
break;
}
}
if(flag1==1){
rs.next();
StringA[]={school,StudentID,password,sex,
address,class1,myname,phone,age};
databack="";
for(inti=0;i<=A.length-1;i++){
databack+=A[i];
if(i!
=A.length-1){
databack+=",";
}
}
writer.println(databack);
writer.flush();
flag1=0;
}else{
writer.println("SearchError");
writer.flush();
}
stmt.close();
con.close();
}elseif(network[0].equals("AddStudent")){//处理添加功能
rs.next();
StudentID=rs.getString("StudentID");
if(!
network[1].equals(StudentID)){
Strings="insertintostudent(StudentID,password,sex,address,class,myname,phone,age)values(?
?
?
?
?
?
?
?
)";
PreparedStatementstat1=con.prepareStatement(s);
stat1.setString(1,network[1]);
stat1.setString(2,network[2]);
stat1.setString(3,network[3]);
stat1.setString(4,network[4]);
stat1.setString(5,network[5]);
stat1.setString(6,network[6]);
stat1.setString(7,network[7]);
stat1.setString(8,network[8]);
stat1.executeUpdate();
flag=1;
}
if(flag==1){
writer.println("AddSucceed");
writer.flush();
flag=0;
}else{
writer.println("AddError");
writer.flush();
}
stmt.close();
con.close();
}elseif(network[0].equals("DeleteStudent")){//处理删除功能
while(rs.next()){
StudentID=rs.getString("StudentID");
password=rs.getString("password");
if(network[1].equals(StudentID)
&&network[2].equals(password)){
Strings="deletefromstudentwhereStudentID=?
";
PreparedStatementstat1=con
.prepareStatement(s);
stat1.setString(1,network[1]);
stat1.executeUpdate();
flag=1;
}
}
if(flag==1){
writer.println("DeleteSucceed");
writer.flush();
flag=0;
}else{
writer.println("DeleteError");
writer.flush();
}
stmt.close();
con.close();
}elseif(network[0].equals("Alter")){//处理修改功能
sex=network[3];
address=network[4];
class1=network[5];
myname=network[6];
phone=network[7];
age=network[8];
while(rs.next()){
StudentID=rs.getString("StudentID");
password=rs.getString("password");
if(network[1].equals(StudentID)
&&network[2].equals(password)){
flag=1;
break;
}
}
if(flag==1){
Strings="updatestudentsetpassword=?
sex=?
address=?
class=?
myname=?
phone=?
age=?
StudentID=?
whereStudentID=?
";
PreparedStatementstat1=con.prepareStatement(s);
stat1.setString(1,password);
stat1.setString(2,sex);
stat1.setString(3,address);
stat1.setString(4,class1);
stat1.setString(5,myname);
stat1.setString(6,phone);
stat1.setString(7,age);
stat1.setString(8,StudentID);
stat1.setString(9,StudentID);
stat1.executeUpdate();
writer.println("AlterSucceed");
writer.flush();
flag=0;
}else{
writer.println("AlterError");
writer.flush();
}
stmt.close();
con.close();
}
}
}catch(Exceptione){
}finally{
System.out.println("链接发生错误");
}
try{
if(reader1!
=null){
reader1.close();
}
if(ssocket!
=null){
ssocket.close();
}
}catch(Exceptione1){
}
}catch(Exceptione){
System.out.println("发生错误");
}
}
客户端代码
importjava.io.*;
import.*;
importjava.awt.*;
importjavax.swing.*;
importjavax.swing.border.EmptyBorder;
importjava.awt.event.*;
classClientextendsJFrameimplementsActionListener{
privateJLabelStudentLabel;
privateJLabeltitle;
privateJTextFieldStudentTextField;
privateJLabelpasswordLabel;
privateJPasswordFieldpasswordField;
privateJButtonbutton1;
privateJButtonbutton2;
privateJButtonbutton3;
publicClient(){//客户端登陆界面
super.setTitle("学生管理系统");
Containerc=getContentPane();
c.setLayout(null);
title=newJLabel("欢迎进入学生登入系统!
");
title.setBounds(50,30,300,30);
title.setFont(newFont("宋体",Font.BOLD,25));
StudentLabel=newJLabel("用户名:
");
StudentLabel.setBounds(50,90,170,20);
StudentLabel.setFont(newFont("黑色",Font.PLAIN,20));
StudentTextField=newJTextField();
StudentTextField.setBounds(130,90,170,20);
StudentTextField.setFont(newFont("宋体",Font.PLAIN,20));
passwordLabel=newJLabel("密码:
");
passwordLabel.setBounds(50,120,170,20);
passwordLabel.setFont(newFont("黑色",Font.PLAIN,20));
passwordField=newJPasswordField();
passwordField.setBounds(130,120,170,20);
passwordField.setFont(newFont("黑色",Font.PLAIN,20));
passwordField.setEchoChar('*');
button1=newJButton();
button1.setText("进入");
button1.setFont(newFont("黑色",Font.PLAIN,20));
button1.setBounds(80,170,80,30);
button1.addActionListener(this);
button2=newJButton();
button2.setText("重置");
button2.setFont(newFont("黑色",Font.PLAIN,20));
button2.setBounds(200,170,80,30);
button2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
StudentTextField.setText(null);
passwordField.setText(null);
}
});
button3=newJButton();
button3.setText("!
");
button3.setFont(newFont("黑色",Font.BOLD,15));
button3.se