2020-06-07更新:
新增SysSearch类源码


2020-5-25更新:
GitHub地址: https://github.com/0x886c/System.git


2019-12-26 更新客户端签到成功后的UI显示,更新程序步骤完成后数据库的信息界面


宿舍一起完成了一个课程设计,发出来分享下,完成这个题目后,自己对线程的理解深入了许多,也更加了解了Java的封装性

效果图
数据库中的初始测试数据

Client文件夹

Serve文件夹

打开这四个exe文件后,我们输入测试数据

如果输入的数据和数据库中数据一致

如果输入信息与数据库中学生信息不一致

只有签到成功服务端UI才会显示

文件传输客户端

服务端在D:\FiletransferTest收到文件

学生完成签到,提交作业后的数据库信息

程序源码排布

ClientLogin类

此类实现客户端的UI显示,输入信息监听,客户端线程的启动

package Client;import UI.UI1;
import UI.UI2;
import UI.UI4;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class LoginClient extends Thread{static Socket socket = null;//静态socket对象可以在LoginClient整个类中使用public static void main(String[] args){new UI1();//客户端登陆界面显示}public void run(){//获取来自服务端的输入流try {String string = new String();InputStream inputStream = socket.getInputStream();//获得输入流int len = 0;byte[] buf = new byte[1024];//将字节流转化成字符串,获得服务端发送的信息if ((len=inputStream.read(buf))!=-1){string = new String(buf,0,len);}//System.out.println(string);if (string.equals("已成功签到")){//服务端确定学生输入信息与数据库中内容一致new UI4();//弹出签到成功界面}else {new UI2();//弹出信息输入错误界面}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static class LoginListener implements ActionListener{TextField textFieldId,textFieldName,textFieldClass;String Stuid,Stuname,Stuclass;Frame loginframe = null;//通过外部类的方法完成UI1中的参数传递//一下定义的方法分别获得监听的Id,Name,Class,Framepublic void SetTextId(TextField textField){textFieldId = textField;}public void SetTextName(TextField textField){textFieldName = textField;}public void SetTextClass(TextField textField){textFieldClass = textField;}public void SetTextFrame(Frame frame){loginframe = frame ;}//监听界面输入并以字节流的形式将数据发送至服务端@Overridepublic void actionPerformed(ActionEvent e) {//获得字符串类型的数据Stuid = textFieldId.getText();Stuname = textFieldName.getText();Stuclass = textFieldClass.getText();//测试是否获得数据System.out.println(Stuid+'\n'+Stuname+'\n'+Stuclass);try {//这里的host是我局域网中当作服务端的主机的静态IP,根据自己情况输入服务端IPsocket = new Socket("192.168.1.100",7777);OutputStream outputStream = socket.getOutputStream();//这里字节流中加入了本机IP以边签到时间的录入outputStream.write((Stuid+" "+Stuname+" "+Stuclass+" "+socket.getInetAddress().getHostAddress()).getBytes());} catch (UnknownHostException ex) {ex.printStackTrace();} catch (IOException ex) {ex.printStackTrace();}//监听时启动线程LoginClient loginClient = new LoginClient();loginClient.start();}}
}

SysServe类

此类实现服务端UI显示,学生成功登录信息监听,服务端线程的启动

package Serve;import Datebase.SysInsertSignoutTime;
import Datebase.SysInsertTime;
import Datebase.SysSearch;
import Filetransfer.FiletransferClient;
import UI.ServeUi;
import UI.UI1;
import UI.UI2;
import UI.UI4;import javax.swing.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class SysServe  extends Thread{static ServerSocket serverSocket;//服务端会收到多个客户端的请求,所以这里用了socket类型集合static List<Socket> list = new ArrayList<>();ServeUi serveUi = new ServeUi();//跨类传值public static void main(String[] args) {SysServe sysServe = new SysServe();sysServe.run();}public void run(){try {System.out.println("正在等待用户连接");//交互程序间端口要一致serverSocket = new ServerSocket(7777);while (true){Socket socket = serverSocket.accept();//等待服务端对象连接System.out.println("成功连接");list.add(socket);//启动线程new ReadThreadFromClient(socket).start();}} catch (IOException e) {e.printStackTrace();}}public class ReadThreadFromClient extends Thread{InputStream inputStream = null;public ReadThreadFromClient(Socket socket){try {//获取服务端的IP地址String ipstring = socket.getInetAddress().getHostAddress();inputStream = socket.getInputStream();byte[] buf = new byte[1024];int len = 0;//获得字节流if ((len=inputStream.read(buf))!=-1){System.out.println("服务器监听:"+'\t'+new String(buf,0,len));}if (new SysSearch().main(buf)){//判断监听的信息是否与数据库中的数据一致//插入签到时间new SysInsertTime().main(ipstring,buf);//将获得的学生签到信息传到服务端UI中的AreaText中serveUi.AddAreaText(new String(buf,0,len)+"已签到");//向客户端发送成功签到信息SendMessClient("已成功签到",socket);} else {//向客户端发送输入信息有误SendMessClient("Login端信息输入有误",socket);new UI2();//登录信息输入错误提示页面弹出}} catch (IOException | SQLException e) {e.printStackTrace();}}}public void SendMessClient(String message,Socket socket){//向其他客户发送数据if(socket!=null&&socket.isConnected()){//确保客户端没有掉线try {OutputStream outputStream=socket.getOutputStream();//输入与输出均要以流的方式进行outputStream.write(message.getBytes());//输出字节流outputStream.flush();//刷新}catch (IOException e){e.printStackTrace();}}}
}

FiletransferClient类

文件传输UI显示,文件路径的监听,文件传输线程的启动

package Filetransfer;import UI.UI3;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;public class FiletransferClient extends Thread{static Socket socket = null;public static void main(String[] args){new UI3();}public static class SendFile implements ActionListener {TextField textFileName;Frame frame;String filelocal = new String();String string = new String();DataOutputStream dataOutputStream = null;//从本机获得文件-文件输入流FileInputStream fileInputStream = null;//将数据传送至客户端-数据输出流public void SetFileLocal(TextField textField){textFileName = textField;}public void SetFrame(Frame f){frame = f;}@Overridepublic void actionPerformed(ActionEvent e) {filelocal = textFileName.getText();//System.out.println(filelocal);try{socket = new Socket(InetAddress.getLocalHost(),8888);string = filelocal.replaceAll("\\\\","\\\\\\\\");System.out.println(string);File file = new File(string);//本机文件路径**注意转义符号**if(file.exists()){//先读取传入数据的文件流再以数据流的形式发送fileInputStream= new FileInputStream(file);dataOutputStream = new DataOutputStream(socket.getOutputStream());dataOutputStream.writeUTF(file.getName());dataOutputStream.flush();dataOutputStream.writeLong(file.length());dataOutputStream.flush();byte[] bytes = new byte[1024];int length = 0;long progress = 0;while ((length = fileInputStream.read(bytes,0,bytes.length))!=-1){dataOutputStream.write(bytes,0,length);dataOutputStream.flush();progress+=length;System.out.println("| " + (100*progress/file.length()) + "% |");}}} catch (IOException ex) {ex.printStackTrace();} finally {if (fileInputStream!=null){try {fileInputStream.close();} catch (IOException ex) {ex.printStackTrace();}}if (dataOutputStream!=null){try {dataOutputStream.close();} catch (IOException ex) {ex.printStackTrace();}}}FiletransferClient filetransferClient1 = new FiletransferClient();filetransferClient1.start();}}}

FiletransferServe类

实现文件传输服务端的线程启动
PS:为什么没有UI?
我的想法是exe文件被打开后一直存在于后台中,可以一直接受客户端的文件

package Filetransfer;import Datebase.SysInsertSignoutTime;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;//文件传输线程服务端
public class FiletransferServe extends Thread {List<Socket> list = new ArrayList<>();ServerSocket serverSocket = null;public FiletransferServe(){//服务端对象的创建和指定端口的设置try {serverSocket = new ServerSocket(8888);} catch (IOException e){e.printStackTrace();}}public void run(){super.run();try {System.out.println("用户正在连接");while (true){Socket socket=serverSocket.accept();//利用accept方法阻塞线程,线程会等待socket的输入流System.out.println("成功连接");//服务器显示已上线,即线程成功运行list.add(socket);//增加线程数量并记录new ReadFile(socket).run();}}catch (IOException e){e.printStackTrace();}}public static class ReadFile extends Thread{DataInputStream dataInputStream = null;FileOutputStream fileOutputStream = null;String ipstring = null;public ReadFile(Socket socket){try {ipstring = socket.getInetAddress().getHostAddress();dataInputStream = new DataInputStream(socket.getInputStream());} catch (IOException e){e.printStackTrace();}}public void run(){try {String fileName = dataInputStream.readUTF();//获得数据输入流File directory = new File("D:\\FiletransferTest");//文件保存路径if(!directory.exists()) {directory.mkdir();}//创建文件File file = new File(directory.getAbsolutePath() + File.separatorChar +fileName);fileOutputStream = new FileOutputStream(file);byte[] bytes = new byte[1024];int length = 0;//字节流获得文件信息while((length = dataInputStream.read(bytes, 0, bytes.length)) != -1) {fileOutputStream.write(bytes, 0, length);//将收到的字节流写入文件fileOutputStream.flush();}System.out.println("文件接收成功 [File Name:" + fileName + "]");System.out.println("ipstring:"+ipstring);//检测获得的客户端IP地址new SysInsertSignoutTime().main(ipstring);//根据IP地址更新签退时间} catch (Exception e) {e.printStackTrace();} finally {//关闭流try {if(fileOutputStream != null)fileOutputStream.close();if(dataInputStream != null)dataInputStream.close();} catch (Exception e) {}}}}public static void main(String[] args) {try {FiletransferServe filetransferServe =new FiletransferServe(); // 启动客户端filetransferServe.run();} catch (Exception e) {e.printStackTrace();}}}

SysInsertTime类

完成服务端学生数据库签到时间的更新

package Datebase;import java.sql.*;
import java.util.Date;public class SysInsertTime {public void main(String ipstring,byte[] byets) throws SQLException {Connection con = null;//声明Connection对象String url = "jdbc:mysql://localhost:3306/test";//URL指向要访问的数据库名testString user = "root";//MySQL配置时的用户名String password = "123456";//MySQL配置时的密码String driver = "com.mysql.jdbc.Driver";try {Class.forName(driver);con = DriverManager.getConnection(url,user,password);//判断是否连接至数据库if (!con.isClosed()){System.out.println("已成功连接至本机数据库");}Statement statement = con.createStatement();//创建statement类对象,用来执行SQL语句//获取当前时间Date date=new Date();Timestamp timeStamp = new Timestamp(date.getTime());System.out.println(timeStamp);//捕捉字节数组并转化为字符串组,有助于数据处理String[] strings = new String(byets).split(" ");//转换SQL语句//String sql = "update studenttable set "+string+'='+timeStamp+" where id = "+strings[0]+' ';//更新登入学生的签到时间String sql = "update studenttable set signintime ='"+timeStamp+"' where id ="+strings[0]+"";//执行SQLstatement.executeUpdate(sql);//更新登入学生的IPsql = "update studenttable set ip = '"+ipstring+"' where id = "+strings[0]+"";statement.executeUpdate(sql);}  catch (SQLException | ClassNotFoundException e) {e.printStackTrace();} finally { System.out.println("数据库已完成签到时间的更新操作");}}
}

SysInsertSignoutTime

记录文件提交时间,将此时间戳作为签退时间

package Datebase;import java.sql.*;
import java.util.Date;public class SysInsertTime {public void main(String ipstring,byte[] byets) throws SQLException {Connection con = null;//声明Connection对象String url = "jdbc:mysql://localhost:3306/test";//URL指向要访问的数据库名testString user = "root";//MySQL配置时的用户名String password = "123456";//MySQL配置时的密码String driver = "com.mysql.jdbc.Driver";try {Class.forName(driver);con = DriverManager.getConnection(url,user,password);//判断是否连接至数据库if (!con.isClosed()){System.out.println("已成功连接至本机数据库");}Statement statement = con.createStatement();//创建statement类对象,用来执行SQL语句//获取当前时间Date date=new Date();Timestamp timeStamp = new Timestamp(date.getTime());System.out.println(timeStamp);//捕捉字节数组并转化为字符串组,有助于数据处理String[] strings = new String(byets).split(" ");//转换SQL语句//String sql = "update studenttable set "+string+'='+timeStamp+" where id = "+strings[0]+' ';//更新登入学生的签到时间String sql = "update studenttable set signintime ='"+timeStamp+"' where id ="+strings[0]+"";//执行SQLstatement.executeUpdate(sql);//更新登入学生的IPsql = "update studenttable set ip = '"+ipstring+"' where id = "+strings[0]+"";statement.executeUpdate(sql);}  catch (SQLException | ClassNotFoundException e) {e.printStackTrace();} finally { System.out.println("数据库已完成签到时间的更新操作");}}
}

SysSearch类

判断用户输入的信息是否与数据库中信息一致

package Datebase;import java.nio.charset.StandardCharsets;
import java.sql.*;public class SysSearch {public boolean main(byte[] bytes) {//声明Connection对象Connection con;//驱动程序名String driver = "com.mysql.jdbc.Driver";//URL指向要访问的数据库名loginString url = "jdbc:mysql://localhost:3306/test";//MySQL配置时的用户名String user = "root";//MySQL配置时的密码String password = "123456";try{//加载驱动程序Class.forName(driver);//连接MySQL数据库con = DriverManager.getConnection(url,user,password);//判断是否成功连接至数据库if(!con.isClosed())System.out.println("已成功连接至本机数据库");//创建statement类对象,用来执行SQL语句Statement statement = con.createStatement();//截取学号为有效信息,作为查询依据String s = new String(bytes);//防止有人乱输学号姓名班级if (s.length()<=13){return false;}//用空格分开学号姓名班级String[] strings = s.split(" ");//测试语句//System.out.println(strings[2]);String sql;//sql = "select * from studenttable";sql = "select * from studenttable where id ='"+strings[0]+"'";//ResultSet类,用来存放获取的结果集ResultSet rs = statement.executeQuery(sql);String Person_id = null;String Person_name = null;String Person_class = null;while (rs.next()) {//获取id这列数据Person_id = rs.getString("id").trim();//获取name这列数据Person_name = rs.getString("name").trim();//获取class这列数据Person_class = rs.getString("class").trim();}//判断是否学生姓名与学号一一对应,返回方法的布尔型值if (Person_name.equals(strings[1])){//若信息正确则在服务端弹出签到成功信息System.out.println("学号:"+Person_id+'\n'+"姓名:"+Person_name+'\n'+"班级:"+Person_class+'\n'+"已签到");return true ;} else {return false;}//待解决问题,此处class属性的比较返回值总是false,大概率是因为字符串转化为字节后再转化为字符串导致数据不一致/*if (Person_class.equals(strings[2])) {System.out.println("2");}*/}  catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e){e.printStackTrace();}finally {System.out.println("数据库已完成查找操作");}return false;}
}

ServeUi类

服务端UI

package UI;import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class ServeUi {public ServeUi(){dispaly();}//在文本域中增加监听内容public void AddAreaText(String string){textArea.append(string+'\n');}Frame frame = new Frame("服务端");TextArea textArea = new TextArea("服务端监听"+'\n',5,4,TextArea.SCROLLBARS_VERTICAL_ONLY);public void dispaly(){frame.setSize(750,500);frame.setLayout(null);frame.setBackground(Color.lightGray);frame.setVisible(true);textArea.setSize(375,250);textArea.setBackground(Color.lightGray);textArea.setBounds(10,50,700,400);frame.add(textArea);textArea.setVisible(true);frame.addWindowListener(new WinClose());}class WinClose extends WindowAdapter{public void windowClosing(WindowEvent e){System.exit(0);}}
}

UI1

客户端签到界面UI

package UI;import Client.LoginClient;import java.awt.*;
import java.awt.event.*;
public class UI1{public UI1(){dispaly();}//学生登录界面Button b = new Button();Frame f = new Frame();TextField ID,Name,Class = new TextField();Label id,name,cl,waring = new Label();LoginClient.LoginListener loginlistener = new LoginClient.LoginListener();//创建类进行参数监听public void dispaly(){f=new Frame("Java签到系统");f.setSize(700,500);f.setLayout(null);f.setBackground(Color.lightGray);f.setVisible(true); b=new Button("登录");Font fo = new Font("宋体",Font.BOLD,13);b.setFont(fo);ID=new TextField();Name=new TextField();Class=new TextField();id=new Label("学号:");waring=new Label("请按照:201XXXXXXXXXX,张三,计科XXXX  形式填写");name=new Label("姓名:");cl=new Label("班级:");b.setBounds((f.getWidth()+300)/2,(f.getHeight()-100)/2,100,50);b.addActionListener(loginlistener);waring.setBounds((f.getWidth()-300)/2,(f.getHeight()+300)/2,2000,50);ID.setBounds((f.getWidth()-200)/2,(f.getHeight()-200)/2,200,30);id.setBounds((f.getWidth()-300)/2,(f.getHeight()-200-10)/2,200,50);Name.setBounds((f.getWidth()-200)/2,(f.getHeight()-100)/2,200,30);name.setBounds((f.getWidth()-300)/2,(f.getHeight()-120)/2,200,50);Class.setBounds((f.getWidth()-200)/2,(f.getHeight()-0)/2,200,30);cl.setBounds((f.getWidth()-300)/2,(f.getHeight()-0)/2,200,30);f.add(ID);f.add(Name);f.add(Class);f.add(id);f.add(name);f.add(cl);f.add(b);f.add(waring);f.addWindowListener(new WinClose());//跨类传值loginlistener.SetTextId(ID);loginlistener.SetTextName(Name);loginlistener.SetTextClass(Class);loginlistener.SetTextFrame(f);}
}
class WinClose extends WindowAdapter{public void windowClosing(WindowEvent e) {System.exit(0);}
}

UI2

签到失败弹出提示界面

package UI;import java.awt.*;
import java.awt.event.*;public class UI2 implements ActionListener {      //登录信息不准确问题弹出界面Button b;Frame f;Label waring;public UI2(){display();}public void display(){f=new Frame("error");f.setSize(750,400);f.setLayout(null);f.setBackground(Color.lightGray);f.setVisible(true);b=new Button("确认并返回");Font fo = new Font("宋体",Font.BOLD,13);b.setFont(fo);waring=new Label("请输入正确的,13位学号,姓名,专业加班级号(不加汉字班)形式输入");waring.setBounds((f.getWidth()-670)/2,(f.getHeight()-200)/2,2000,50);Font fon = new Font("宋体",Font.BOLD,20);waring.setFont(fon);b.setBounds((f.getWidth()-100)/2,(f.getHeight()+100)/2,100,50);b.addActionListener(this);f.add(b);f.add(waring);f.addWindowListener(new WinClose());}public void actionPerformed(ActionEvent e) {f.dispose();//界面关闭但是其他窗口保留}
}

UI3类

文件提交界面

package UI;import Filetransfer.FiletransferClient;import java.awt.*;
public class UI3{     //提交文件退出界面Button b = new Button("提交并退出");Frame f;TextField Way;Label way,waring;public UI3(){display();}//外部类实现跨类监听FiletransferClient.SendFile sendFile = new FiletransferClient.SendFile();public void display(){f=new Frame("Java签到系统");f.setSize(700,500);f.setLayout(null);f.setBackground(Color.lightGray);f.setVisible(true); b=new Button("提交并退出");Font fo = new Font("宋体",Font.BOLD,13);b.setFont(fo);way=new Label("文件路径:");Way=new TextField();way.setBounds((f.getWidth()-500)/2,(f.getHeight()-200-10)/2,200,50);Way.setBounds((f.getWidth()-380)/2,(f.getHeight()-200)/2,400,30);waring=new Label("例如:           D:\\\\Java\\\\workspace\\\\文件名");waring.setBounds((f.getWidth()-300)/2,(f.getHeight()+300)/2,2000,50);b.setBounds((f.getWidth()-100)/2,(f.getHeight()+100)/2,100,50);f.add(b);f.add(Way);f.add(way);f.add(waring);f.addWindowListener(new WinClose());//跨类传递参数sendFile.SetFileLocal(Way);sendFile.SetFrame(f);b.addActionListener(sendFile);}
}

UI4

签到成功界面

package UI;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;//签到成功界面
public class UI4{Button button = new Button("确定");Frame frame = new Frame("签到成功");Label label = new Label("签到成功");Font fo = new Font("宋体",Font.BOLD,26);public UI4(){display();}public void display(){frame.setSize(600,400);frame.setLayout(null);frame.setVisible(true);frame.add(button);frame.add(label);frame.setBackground(Color.lightGray);button.setBounds(300,200,200,150);button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});label.setBounds(100,50,600,200);label.setBackground(Color.lightGray);label.setFont(fo);}
}

将程序分开后打包成jar包
PS:注意服务端程序文件记得加上jdbc驱动的jar包

选择主类

需要打包jdbc的类需要先在这里增加驱动jar包

在这里完成设置,但是程序还没有被打包成jar包

先点这里

再点这里

在这里就能看到jar包了

在路径下可以测试一下jar包是否能够使用

如果可以的话,我们利用一个名字叫exe4j小软件将jar包封装成exe文件
在这里可以下载
https://www.ej-technologies.com/download/exe4j/files
具体使用过程就不多说了,网上有很多教程,这里只说一下我自己认为的要点


这里这样写的原因是
我们封装后的exe文件是需要jre环境才能运行的,如果在没有jdk的主机上我们的exe文件时无法运行的,如果我们把jre路径写成这样的话,exe文件和jre在同目录下就可以正常使用,我们就可以将两个文件打包成压缩包发送给其他文件以达到其他主机也能正常运行我们的小桌面应用程序

这里也要根据实际情况选择是客户端和服务端

2019-12-21

java课程设计-简单学生签到系统-桌面小程序的实现相关推荐

  1. java课程设计数字日历,java课程设计简单日历.doc

    java课程设计简单日历.doc java课程设计报告题目:JAVA简易时间日历程序学生姓名:董兆军学号:2010314120专业班级:信101指导教师:李红强Java课程设计报告信101董兆军201 ...

  2. java学生课程设计报告,Java课程设计报告学生管理系统

    Java课程设计报告学生管理系统 JAVAJAVA 程序设计程序设计 课程设计报告课程设计报告 课课 题题 学生信息管理系统学生信息管理系统 姓姓 名名 学学 号号 设计时间设计时间 2014.6.2 ...

  3. java中国象棋网络对弈,java课程设计---中国象棋对弈系统

    java课程设计---中国象棋对弈系统 1 目目 录录 摘要 1 关键字 1 正文 2 1.程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1 ...

  4. Java 课程设计_学生选课管理系统(控制台)

    Java 课程设计_学生选课管理系统 需求分析 本数据库的用户主要是学生,通过对用户需求的收集和分析,获得用户对数据库的如下要求. 1.信息需求 学生信息:学号,姓名,性别,专业 登陆信息:账号,密码 ...

  5. 大学java课程设计-简单五子棋

    大学java课程设计-简单五子棋 前言 效果图 课设要求 五子棋介绍 五子棋介绍 游戏玩法 系统需求分析 系统的设计与实现 项目工程结构 运行环境 代码设计 前言 第一次写博客,不知道写些什么,就打算 ...

  6. ## 大一java课程设计_航班查询系统(我是小白)

    大一java课程设计_航班查询系统(我是小白) 备注:第一个java程序有借鉴别人的成分,因为忘了在哪个大佬上面借鉴的,所以在此备注,如有侵权,请联系删除,(仅用于学习使用,并未想盈利) 框体介绍 一 ...

  7. 大学生数据库课程设计之学生选课系统(一个超级简单的系统)

    大学数据库课程设计–一个简单的学生选课系统 一.系统简介 一个超级简单的学生选课系统,使用Windows窗体设计界面,使用C#语言实现各种功能,数据库使用的是SQL.由于时间原因,做的非常仓促,系统中 ...

  8. Java课程设计【学生信息管理系统】

    课程设计目录 一.问题描述 二.基本要求 三.需求分析 四.概要设计 1.类之间的调用关系 2.学生信息模块 3.系统管理模块 4.详细设计 ①主程序LoginGUI的代码 ②程序View的代码 ③程 ...

  9. java课程大作业——学生教务系统(IDEA+SqlServer 2008)

    写在前面: 这学期学了java面向对象程序设计这门课(非计算机专业),这是本人的结课大作业,学的都是一些很基础很基础的东西,在网上找了一些资料,然后扩展了一下,最终做出来了一个最简单的学生教务管理系统 ...

  10. JAVA 控制台式简单学生选课系统

    学校要求做个小作业,查了好多资料都找不到能参考的,只好自己写了一套,供给需要的同学进行参考. 仅供参考 编写一个基于命令行的选课系统,系统包含一个主菜单 //1.录入课程信息(可以反复多次录入多个课程 ...

最新文章

  1. 盛夏海边,用Python分析青岛哪些景点性价比高
  2. ssm上传文件进度条_ssm学习笔记-三种文件上传方式
  3. Python 获取md5值(hashlib)
  4. python自制语音识别_今天的语音识别,我们就用Python来做,从基础的知识到实践的运用...
  5. 一起谈.NET技术,Visual Studio对程序集签名时一个很不好用的地方
  6. 全面剖析Ajax的XMLHttpRequest对象(学习Ajax必须知道的东西)
  7. oracle学用命令大全 笔记
  8. codeforces 966c//Big Secret// Codeforces Round #477 (Div. 1)
  9. read()/write()的生命旅程之五——第五章:从bio到media
  10. 写的函数符号表里没有_DATEDIF函数,看看你的Excel里有没有?
  11. php 打印系统变量值,php – Twig:打印变量名为String的变量的值
  12. android开发用什么字体,移动端web app和页面开发使用什么字体?微软雅黑?
  13. 1.1 经典车间生产调度问题模型及其算法
  14. Python编程实现后剪枝的CART决策树
  15. 身份证阅读器在人事管理中的運用
  16. word应用:快速删除页眉横线
  17. Allegro模块镜像详细操作教程
  18. NC如何在打印模板中添加打印审批流记录
  19. EasyDemo*CSS尺寸与框模型(六七)
  20. 对接熊迈SDK工作记录之集成准备

热门文章

  1. 简易旋转倒立摆设计报告
  2. 阿江ASP探针 V 1.92
  3. VC6.0+番茄助手安装教程
  4. php pager,fleaphp常用方法分页之Pager使用方法
  5. 怎样打开.jar格式文件,怎样运行.jar格式文件
  6. 数据挖掘概念与技术(第三版)课后答案——第二章
  7. Install deepin-wine QQ inside a docker image in Ubuntu 20.04
  8. SogouLabDic搜狗词库
  9. Android仿微信源码下载
  10. uboot开机logo