Java Modbus的操作(实例)

Java Modbus的操作(实例)
Java Modbus的操作(实例)

Java ModBus操作实例

实例说明:

主要用于JA V A 对ModBus以及串口的通讯操作

1,Test类用于接收数采仪数据,然后核对其CRC校验是否正确,不正确便丢弃,不作任何操作,正确就查找其设备号对应哪个站点,以及其检测指标。然后到DB中查找实时检测值,若未有实时数据可用本实例中的随机数代替,然后保存发送数据到数据库中。得到值后通过CRC16得到其校验码组成其要发送的字节,发送完毕。

2,主要涉及到的类有3个

DB.java 用户得到实时数据,保存发送数据到数据库中

Test.java 用户接收数采仪值,通过com串口发送到数采仪

ModBus的CRC16校验法

数采仪是参照国际HJ/T212-2005

CRC.javal类代码如下:

public class CRC16 {

static final String HEXES = "0123456789ABCDEF";

byte uchCRCHi = (byte) 0xFF;

byte uchCRCLo = (byte) 0xFF;

private static byte[] auchCRCHi = { 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01,

(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,

(byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01,

(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1,

(byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80,

(byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01,

(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,

(byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1,

(byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80,

(byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,

(byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1,

(byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80,

(byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00, (byte) 0xC1,

(byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80,

(byte) 0x41, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x00, (byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40, (byte) 0x01, (byte) 0xC0,

(byte) 0x80, (byte) 0x41, (byte) 0x00, (byte) 0xC1, (byte) 0x81,

(byte) 0x40, (byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41,

(byte) 0x01, (byte) 0xC0, (byte) 0x80, (byte) 0x41, (byte) 0x00,

(byte) 0xC1, (byte) 0x81, (byte) 0x40 };

private static byte[] auchCRCLo = { (byte) 0x00, (byte) 0xC0, (byte) 0xC1, (byte) 0x01, (byte) 0xC3, (byte) 0x03, (byte) 0x02, (byte) 0xC2,

(byte) 0xC6, (byte) 0x06, (byte) 0x07, (byte) 0xC7, (byte) 0x05,

(byte) 0xC5, (byte) 0xC4, (byte) 0x04, (byte) 0xCC, (byte) 0x0C,

(byte) 0x0D, (byte) 0xCD, (byte) 0x0F, (byte) 0xCF, (byte) 0xCE,

(byte) 0x0E, (byte) 0x0A, (byte) 0xCA, (byte) 0xCB, (byte) 0x0B,

(byte) 0xC9, (byte) 0x09, (byte) 0x08, (byte) 0xC8, (byte) 0xD8,

(byte) 0x18, (byte) 0x19, (byte) 0xD9, (byte) 0x1B, (byte) 0xDB,

(byte) 0xDA, (byte) 0x1A, (byte) 0x1E, (byte) 0xDE, (byte) 0xDF,

(byte) 0x1F, (byte) 0xDD, (byte) 0x1D, (byte) 0x1C, (byte) 0xDC,

(byte) 0x14, (byte) 0xD4, (byte) 0xD5, (byte) 0x15, (byte) 0xD7,

(byte) 0x17, (byte) 0x16, (byte) 0xD6, (byte) 0xD2, (byte) 0x12,

(byte) 0x13, (byte) 0xD3, (byte) 0x11, (byte) 0xD1, (byte) 0xD0,

(byte) 0x10, (byte) 0xF0, (byte) 0x30, (byte) 0x31, (byte) 0xF1,

(byte) 0x33, (byte) 0xF3, (byte) 0xF2, (byte) 0x32, (byte) 0x36,

(byte) 0xF6, (byte) 0xF7, (byte) 0x37, (byte) 0xF5, (byte) 0x35,

(byte) 0x34, (byte) 0xF4, (byte) 0x3C, (byte) 0xFC, (byte) 0xFD,

(byte) 0x3D, (byte) 0xFF, (byte) 0x3F, (byte) 0x3E, (byte) 0xFE,

(byte) 0xFA, (byte) 0x3A, (byte) 0x3B, (byte) 0xFB, (byte) 0x39,

(byte) 0xF9, (byte) 0xF8, (byte) 0x38, (byte) 0x28, (byte) 0xE8,

(byte) 0xE9, (byte) 0x29, (byte) 0xEB, (byte) 0x2B, (byte) 0x2A,

(byte) 0xEA, (byte) 0xEE, (byte) 0x2E, (byte) 0x2F, (byte) 0xEF,

(byte) 0x2D, (byte) 0xED, (byte) 0xEC, (byte) 0x2C, (byte) 0xE4,

(byte) 0x24, (byte) 0x25, (byte) 0xE5, (byte) 0x27, (byte) 0xE7,

(byte) 0xE6, (byte) 0x26, (byte) 0x22, (byte) 0xE2, (byte) 0xE3,

(byte) 0x23, (byte) 0xE1, (byte) 0x21, (byte) 0x20, (byte) 0xE0,

(byte) 0xA0, (byte) 0x60, (byte) 0x61, (byte) 0xA1, (byte) 0x63,

(byte) 0xA3, (byte) 0xA2, (byte) 0x62, (byte) 0x66, (byte) 0xA6,

(byte) 0xA7, (byte) 0x67, (byte) 0xA5, (byte) 0x65, (byte) 0x64,

(byte) 0xA4, (byte) 0x6C, (byte) 0xAC, (byte) 0xAD, (byte) 0x6D,

(byte) 0x6A, (byte) 0x6B, (byte) 0xAB, (byte) 0x69, (byte) 0xA9,

(byte) 0xA8, (byte) 0x68, (byte) 0x78, (byte) 0xB8, (byte) 0xB9,

(byte) 0x79, (byte) 0xBB, (byte) 0x7B, (byte) 0x7A, (byte) 0xBA,

(byte) 0xBE, (byte) 0x7E, (byte) 0x7F, (byte) 0xBF, (byte) 0x7D,

(byte) 0xBD, (byte) 0xBC, (byte) 0x7C, (byte) 0xB4, (byte) 0x74,

(byte) 0x75, (byte) 0xB5, (byte) 0x77, (byte) 0xB7, (byte) 0xB6,

(byte) 0x76, (byte) 0x72, (byte) 0xB2, (byte) 0xB3, (byte) 0x73,

(byte) 0xB1, (byte) 0x71, (byte) 0x70, (byte) 0xB0, (byte) 0x50,

(byte) 0x90, (byte) 0x91, (byte) 0x51, (byte) 0x93, (byte) 0x53,

(byte) 0x52, (byte) 0x92, (byte) 0x96, (byte) 0x56, (byte) 0x57,

(byte) 0x97, (byte) 0x55, (byte) 0x95, (byte) 0x94, (byte) 0x54,

(byte) 0x9C, (byte) 0x5C, (byte) 0x5D, (byte) 0x9D, (byte) 0x5F,

(byte) 0x9F, (byte) 0x9E, (byte) 0x5E, (byte) 0x5A, (byte) 0x9A,

(byte) 0x9B, (byte) 0x5B, (byte) 0x99, (byte) 0x59, (byte) 0x58,

(byte) 0x98, (byte) 0x88, (byte) 0x48, (byte) 0x49, (byte) 0x89,

(byte) 0x4B, (byte) 0x8B, (byte) 0x8A, (byte) 0x4A, (byte) 0x4E,

(byte) 0x8E, (byte) 0x8F, (byte) 0x4F, (byte) 0x8D, (byte) 0x4D,

(byte) 0x4C, (byte) 0x8C, (byte) 0x44, (byte) 0x84, (byte) 0x85,

(byte) 0x45, (byte) 0x87, (byte) 0x47, (byte) 0x46, (byte) 0x86,

(byte) 0x82, (byte) 0x42, (byte) 0x43, (byte) 0x83, (byte) 0x41,

(byte) 0x81, (byte) 0x80, (byte) 0x40 };

public int value;

public CRC16() {

value = 0;

}

public void update(byte[] puchMsg, int usDataLen) {

int uIndex;

// int i = 0;

for (int i = 0; i < usDataLen; i++) {

uIndex = (uchCRCHi ^ puchMsg[i]) & 0xff;

uchCRCHi = (byte) (uchCRCLo ^ auchCRCHi[uIndex]);

uchCRCLo = auchCRCLo[uIndex];

}

value = ((((int) uchCRCHi) << 8 | (((int) uchCRCLo) & 0xff))) & 0xffff;

return;

}

public void reset() {

value = 0;

uchCRCHi = (byte) 0xff;

uchCRCLo = (byte) 0xff;

}

public int getValue() {

return value;

}

private static byte uniteBytes(byte src0, byte src1) {

byte _b0 = Byte.decode("0x" + new String(new byte[] { src0 })) .byteValue();

_b0 = (byte) (_b0 << 4);

byte _b1 = Byte.decode("0x" + new String(new byte[] { src1 })) .byteValue();

byte ret = (byte) (_b0 ^ _b1);

return ret;

}

private static byte[] HexString2Buf(String src) {

int len = src.length();

byte[] ret = new byte[len / 2+2];

byte[] tmp = src.getBytes();

for (int i = 0; i < len; i += 2) {

ret[i / 2] = uniteBytes(tmp[i], tmp[i + 1]);

}

return ret;

}

public static byte[] getSendBuf(String toSend){

byte[] bb = HexString2Buf(toSend);

CRC16 crc16 = new CRC16();

crc16.update(bb, bb.length-2);

int ri = crc16.getValue();

bb[bb.length-1]=(byte) (0xff & ri);

bb[bb.length-2]=(byte) ((0xff00 & ri) >> 8);

return bb;

}

public static boolean checkBuf(byte[] bb){

CRC16 crc16 = new CRC16();

crc16.update(bb, bb.length-2);

int ri = crc16.getValue();

if(bb[bb.length-1]==(byte)(ri&0xff)

&& bb[bb.length-2]==(byte) ((0xff00 & ri) >> 8)) return true;

return false;

}

public static String getBufHexStr(byte[] raw){

if ( raw == null ) {

return null;

}

final StringBuilder hex = new StringBuilder( 2 * raw.length );

for ( final byte b : raw ) {

hex.append(HEXES.charAt((b & 0xF0) >> 4))

.append(HEXES.charAt((b & 0x0F)));

}

return hex.toString().toLowerCase();

}

/****

* 得到CRC验证

* @param tt

* @return

*/

public static String getCrc(String tem){

// String tem="";

// for(int i=0;i

// tem+=tt[i];

// System.out.println("这是传入的值"+tt[i]);

// }

byte[] sbuf = CRC16.getSendBuf(tem);

System.out.println("这是得到的crc"+CRC16.getBufHexStr(sbuf));

return CRC16.getBufHexStr(sbuf).substring(12, 16).toLowerCase();

}

/**得到要发送的数据

* @param args

*/

public static String getSendData(String [] tt) {

String tem="";

for(int i=0;i

tem+=tt[i];

}

byte[] sbuf = CRC16.getSendBuf(tem);

return CRC16.getBufHexStr(sbuf);

}

public static byte[] getSendBuf2(String [] tt){

String tem="";

for(int i=0;i

tem+=tt[i];

}

byte[] bb = HexString2Buf(tem);

CRC16 crc16 = new CRC16();

crc16.update(bb, bb.length-2);

int ri = crc16.getValue();

bb[bb.length-1]=(byte) (0xff & ri);

bb[bb.length-2]=(byte) ((0xff00 & ri) >> 8);

return bb;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

//0103040a3d3fb739a1----sendB

//010304b8523ffeef32----sendB

byte[] sbuf = CRC16.getSendBuf("0103040a3d3fb7");

System.out.println(CRC16.getBufHexStr(sbuf));

}

}

Test代码如下:

package oldTest;

import java.io.Flushable;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Enumeration;

import java.util.Random;

import https://www.360docs.net/doc/2012085659.html,mPortIdentifier;

import https://www.360docs.net/doc/2012085659.html,m.SerialPort;

public class Test {

static Enumeration portList;

static CommPortIdentifier portId;

static SerialPort serialPort;

static OutputStream outputStream;

static InputStream inputStream;

static String nodeIdx="";

static String crc="";

public static StringBuffer open()throws Exception {

CommPortIdentifier commportidentifier = CommPortIdentifier

.getPortIdentifier("COM1");

serialPort = (SerialPort) commportidentifier.open("scy app", 80);

outputStream = serialPort.getOutputStream();

inputStream = serialPort.getInputStream();

InputStream input = serialPort.getInputStream();

while (true) {

StringBuffer content = new StringBuffer();

int i = 0;

String tag = "";

String crcCode1 = "";

String[] inputString = new String[6];

String crcCode2 = "";

String tempString = "";

serialPort.setInputBufferSize(8);

while (i < 8) {

if (i < 6) {

tempString = Integer.toHexString(input.read());

if (tempString.length() < 2) {

tempString = "0" + tempString;

}

inputString[i] = tempString;

// inputString[0];得到站点名称

nodeIdx = inputString[0];

// inputString[2] + inputString[3];得到检测指标

tag = inputString[2] + inputString[3];

content.append(tempString);

System.out.println("==这是数据段"+content);

} else {

if (i == 6) {// 得到Crc值的前两位

crcCode1 = Integer.toHexString(input.read());

if (crcCode1.length() < 2) {

crcCode1 = "0" + crcCode1;

}

}

if (i == 7) {// 得到Crc值的后两位

crcCode2 = Integer.toHexString(input.read());

if (crcCode2.length() < 2) {

crcCode2 = "0" + crcCode2;

}

}

crc=crcCode1+crcCode2;

System.out.println("==这是crc"+crc);

}

i++;

}

if (CRC16.getCrc(content.toString()).equals(crc)) {

// System.out.println(crcCode1 + crcCode2 + "得到的数据段正确"

// + CRC16.getCrc(inputString));

String nodeName = "";

if (nodeIdx.equals("01")) {

nodeName = "监测站点1";

checkNode(tag, nodeName);

} else {

System.out.println("这也许是监测站点2的站点");

nodeName = "监测站点2";

checkNode(tag, nodeName);

}

} else {

System.out.println(crc + "得到的数据段不正确"

+ CRC16.getCrc(content.toString()));

}

}

}

public static void main(String[] args) {

try {

open();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void checkNode(String tag, String nodeName) {

if (tag.equals("012c")) {

// System.out.println("这是说明要查悬浮物");

sendData(nodeName, "悬浮物");

} else if (tag.equals("0064")) {

// System.out.println("这是说明要查PH值");

sendData(nodeName, "PH值");

} else if (tag.equals("0b54")) {

// System.out.println("这是说明要查氨氮");

sendData(nodeName, "氨氮");

} else if (tag.equals("0d48")) {

sendData(nodeName, "污水总量");

} else if (tag.equals("0000")) {

sendData(nodeName, "污水总量");

} else if (tag.equals("01f4")) {

sendData(nodeName, "COD");

} else {

// System.out.println(tag + "这个tag不知道是啥");

}

}

public static int getRandom(int min, int max) {

Random random = new Random();

int s = random.nextInt(max) % (max - min + 1) + min;

return s;

}

public static int getRandomEnd() {

int max = 99;

int min = 01;

Random random = new Random();

int s = random.nextInt(max) % (max - min + 1) + min;

return s;

}

public static float getFloatNum(int min, int max) {

return Float.valueOf(getRandom(min, max) + "." + getRandomEnd()); }

public static void sendData(String nodeName, String tagName) { DB db = new DB();

try {

Float ff = 0f;

// ff = db.onSelect(nodeName, tagName);

ff=getFloatNum(1,99);

java.text.NumberFormat formater = java.text.DecimalFormat

.getInstance();

String[] totalTemp = new String[7];

if (nodeName.equals("检测站点1")) {

totalTemp[0] = "01";

// if(tagName.equals("COD")){

// ff=15f;

// }else{

// ff=11f;

// }

} else {

totalTemp[0] = "02";

}

formater.setMaximumFractionDigits(2);

formater.setMinimumFractionDigits(2);

ff = Float.valueOf(formater.format(ff));

System.out.println("查询完毕," + tagName + "值为:" + ff);

int fi = Float.floatToRawIntBits(ff);

String num = Integer.toHexString(fi).toString();

if (!num.equals("0")) {

totalTemp[1] = "03";

totalTemp[2] = "04";

totalTemp[4] = num.substring(6, 8);

totalTemp[3] = num.substring(4, 6);

totalTemp[6] = num.substring(2, 4);

totalTemp[5] = num.substring(0, 2);

} else {

totalTemp[1] = "03";

totalTemp[2] = "04";

totalTemp[4] = "00";

totalTemp[3] = "00";

totalTemp[6] = "00";

totalTemp[5] = "00";

}

byte[] sendB = CRC16.getSendBuf2(totalTemp);

outputStream.write(sendB);

outputStream.flush();

outputStream.close();

System.out.println("发送完毕");

} catch (Exception e) {

e.printStackTrace();

} finally {

db.close();

}

}

}

DB类如下:

package oldTest;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Calendar;

import java.util.Random;

public class DB {

private Connection con;

private Statement sta;

private ResultSet res;

private String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; // 加载JDBC驱动

private String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=MonitoringSystem"; // 连接服务器和数据库sample

private String userName = "sa"; // 默认用户名

private String userPwd = ""; // 密码

public DB() {

try {

Class.forName(driverName);

con = DriverManager.getConnection(dbURL, userName, userPwd);

// System.out.println("Connection Successful!"); // 如果连接成功

// 控制台输出Connection

// Successful!

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static int getRandom(int min, int max) {

Random random = new Random();

int s = random.nextInt(max) % (max - min + 1) + min;

return s;

}

public static int getRandomEnd() {

int max = 99;

int min = 01;

Random random = new Random();

int s = random.nextInt(max) % (max - min + 1) + min;

return s;

}

public static float getFloatNum(int min, int max) {

return Float.valueOf(getRandom(min, max) + "." + getRandomEnd());

}

public static float getCFZ() {

return getFloatNum(40, 48);

}

public static float getCY() {

return getFloatNum(100, 110);

}

/*************************************************************************** * 得到N条记录

*

* @param tagName

* @return

*/

public Float onSelect(String nodeName, String tagName) {

Float ff = 0f;

String sql = "select * from DQYT_MacamCore.dbo.tpoints where name='"

+ tagName + "' and fullname like '%" + nodeName + "%'";

try {

sta = con.createStatement();

res = sta.executeQuery(sql);

while (res.next()) {

int tagid = res.getInt("tagId");

String name = res.getString("Name");

String sql2 = "select top 1 * from DQYT_MacamHisData.dbo."

+ getTBName() + " where tagid=" + tagid

+ " order by idx desc ";

// System.out.println(sql2);

ResultSet rs2;

Statement sta2 = null;

sta2 = con.createStatement();

rs2 = sta2.executeQuery(sql2);

if (tagName.equals("污水总量")) {

String sql3 = "insert into MonitoringSystem.dbo.UploadInfo values("

+ tagid

+ ",'"

+ name

+ "',"

+ ff

+ ",'"

+ getEndTime() + "')";

System.out.println(sql3);

Statement sta3 = null;

sta3 = con.createStatement();

sta3.executeUpdate(sql3);

return ff;

} else {

if (name.equals(tagName)) {

while (rs2.next()) {

if (nodeName.equals("监测站点1")) {

if (rs2.getFloat(4) >= 50) {

ff = getCFZ();

} else {

ff = rs2.getFloat(4);

}

} else if (nodeName.equals("监测站点2")) {

if (rs2.getFloat(4) >= 120) {

ff = getCY();

} else {

ff = rs2.getFloat(4);

}

}

String sql3 = "insert into MonitoringSystem.dbo.UploadInfo values("

+ tagid

+ ",'"

+ name

+ "',"

+ ff

+ ",'"

+ getEndTime() + "')";

System.out.println(sql3);

Statement sta3 = null;

sta3 = con.createStatement();

sta3.executeUpdate(sql3);

return ff;

}

}

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return 0f;

}

/*************************************************************************** * 根据站点名称,得到其污水总量

*

* @param tagName

* @return

*/

public Float getTagAndTypeLayerId(String nodeName, String tagName) {

String sql = "select * from DQYT_MacamCore.dbo.tpoints where name='"

+ tagName + "' and fullname like '%" + nodeName + "%'";

try {

sta = con.createStatement();

res = sta.executeQuery(sql);

// System.out.println(sql);

while (res.next()) {

int tagid = res.getInt("tagId");

String name = res.getString("Name");

String errorAmount = getErrorAmount(res.getInt("nodeIdx"));

Long tSewage = getTSewage(tagid);

ResultSet rs2;

Statement sta2 = null;

sta2 = con.createStatement();

sql = "insert into MonitoringSystem.dbo.UploadInfo values("

+ tagid

+ ",'"

+ name

+ "',"

+ Float

.valueOf((Long.parseLong(errorAmount) + tSewage))

+ ",'" + getEndTime() + "')";

sta2.executeUpdate(sql);

return Float.valueOf((Long.parseLong(errorAmount) + tSewage));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

/*************************************************************************** * 得到污水总量

*

* @param tagId

* @return

*/

public Long getTSewage(int tagId) {

try {

String sql = "select sum(tSewage) from MonitoringSystem.dbo.TotalSewage where tagId="

+ tagId;

sta = con.createStatement();

res = sta.executeQuery(sql);

if (res.next()) {

Long tSewage = res.getLong(1);

return tSewage;

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return new Long(0);

}

/*************************************************************************** * 得到该站点的误差值

*

* @param typeLayerIdx

* @return

*/

public String getErrorAmount(int typeLayerIdx) {

try {

String sql = "select * from MonitoringSystem.dbo.SiteMessage where typeLayerIdx="

+ typeLayerIdx;

sta = con.createStatement();

res = sta.executeQuery(sql);

while (res.next()) {

String errorAmount = res.getString("errorAmount");

return errorAmount;

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (Exception ee) {

ee.printStackTrace();

}

return "0";

}

public void close() {

try {

if (sta != null) {

sta.close();

}

if (con != null) {

con.close();

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public String getTBName() {

java.util.Date d = new java.util.Date();

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat();

sdf.applyPattern("yyyyMMdd");

String table = "THisData" + sdf.format(d);

table = "THisData20091218";

return table;

}

public String getStartTime() {

java.util.Date d = new java.util.Date();

Calendar cal1 = Calendar.getInstance();

// cal1.set(2010, 04, 21);

d.setMinutes(d.getMinutes() - 1);

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat();

sdf.applyPattern("yyyy-MM-dd HH:mm");

String ttime = sdf.format(d.getTime());

return ttime;

}

public static String getEndTime() {

java.util.Date d = new java.util.Date();

Calendar cal1 = Calendar.getInstance();

// cal1.set(2010, 04, 21);

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat();

sdf.applyPattern("yyyy-MM-dd HH:mm");

String ttime = sdf.format(d.getTime());

return ttime;

}

public static void main(String[] args) {

DB db = new DB();

db.onSelect("监测站点1", "COD");

}

}

JAVA学生信息管理系统实验报告

JA V A程序设计实验报告 学号: 姓名: 班级: 实验、Java课程设计--------学生信息管理系统

一、实验目的 1.掌握Java基本语法 2.理解面向对象编程特点 3.理解Java I/O编程 4.掌握Java图形界面编程 5.掌握Java与不同数据库进行连接 二、预习内容 Java的基本语法知识、类和对象、Java Swing图形界面编程、Java I/O处理以及Java与数据库连接操作 三、实验设备与环境 通过局域网互联,安装Windows 2000/XP操作系统环境的JDK 1.6,my eclipse 或者EditPlus编程工具。并安装MySQL数据库 四、实验内容 编写并调试运行Java程序,进行设计,掌握Java开发的基础。 五、实验任务 设计学生信息管理系统。要求包括 1. 登陆模块:设立超级管理员权限,用户可以根据不同的权限登陆系统,超级管理员可以对学生信息进行增、删、改、查操作。而普通用户只可以查找学生信息。 2. 包括学生添加信息模块、学生信息删除模块、学生信息修改模块和学生信息查询模块 3.对于管理员,可以对管理员进行添加、删除以及修改密码等操作。 六、实验报告(要求独立完成参考程序的代码、编译、调试与运行) 1、程序清单: 1.1程序模块清单 package Pan; import java.awt.event.ItemListener; import javax.swing.*; import https://www.360docs.net/doc/2012085659.html,ponent;

import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.InputEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.*; import java.awt.Color; import java.text.DecimalFormat; import java.sql.*; import java.sql.Date; import java.awt.*; import java.util.Vector; public class Res { /** * @param args */ public static void main(String[] args) {

第四单元计算机网络常见的操作系统

windos 2003 server实用教程 一、单元目标、任务:任课教师:高鹏 本单元课程标题:常见计算机网络的操作系统 授课班级 10中职5、6班 课时 2 时间 2011.11.15 授课地点 阶教 教学目标 能力(技能)目标 知识目标 1.会正确识别windos2003系列的nos及安装目标 2.能正确识别常规的网络操作系统光盘阅读相关参数 1.掌握常规的网络操作系统的类型 2.了解unix,linux,操作系统的发展背景 3.掌握windos2003 server 的四个版本类型 4.了解操作系统与网路操作系统的区别和联系 5.掌握nos的常规网络服务项目. 能力训练任务及案例

案例1:我系机房的os及os的安装选择. 任务1:常规windos2003 server的识别及分析阅读 任务2:能说出windos2003server的四个版本及适用环境. 任务3:条件充许的情况下使用虚拟机模拟安装windos2003server 参考资料 《windos 2003 server教程》新世纪高职高专教材编审委员会组编主编刘宝莲《计算机网络教程实训教程》新世纪高职高专教材编审委员会组编主编刘宝莲《计算机技术网络基础教程》第二版电子工业出版社主编严争 二、教学设计: 步骤 教学内容 教学 方法 教学 手段 学生 活动 时间 分配 内容引入 (问题) 以我院网络中心办公系统平台为列引出服务器操作系统 提问法 课件演示 提问 5 分钟

准备 (问题) 为什么服务器不能安装windos xp 操作系统呢” 告知 (教学内容、目的) 告之学生本次课程要学习的主要内容: 1.网络操作系统unix .linux windos实例的历史 2.常规的网络操作系统有哪些?如何选择。 3.Windos server 2003 操作系统的四个版本 讲授法 老师讲学生听 5 分钟 教学目的: 通过本课的讲解使同学们对常规的网络操作系统有了初步的了解,使同学们对os与nosyoule 正确的了解得区分与应用组成.为后期服务器搭建打下了良好的基础. 项目引入 (任务项目) 教学演示: 1.网络操作系统的发展历史 2.网络操作系统的功能 3.网络操作系统安装 讲授法

操作系统实验报告java

操作系统实验报告 院系: 专业: 班级: 学号: : 指导老师:

进程调度的模拟与存管理 一、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级和时间片轮转调度算法的具体实施方法。帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。 二、实验要求 1、可随机输入若干进程,并按优先权排序; 2、从就绪队首选进程运行:优先权-1/要求运行时间-1 要求运行时间=0时,撤销该进程 3、重新排序,进行下轮调度。 4、可随时增加进程; 5、规定道数,设置后备队列和挂起状态。若存中进程少于规定道数,可自 动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能 用于将指定挂起进程解挂入就绪队列。 6、每次调度后,显示各进程状态。 7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目容:起址、长度、状态(未分/空表目) 8、结合以上实验,PCB增加为: {PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,

PCB指针} 9、采用最先适应算法分配主存空间; 10、进程完成后,回收主存,并与相邻空闲分区合并。 11、采用图形界面; 三、实验容 选择一个调度算法,实现处理机调度。 1、设计一个按优先权调度算法实现处理机调度的程序; 2、设计按时间片轮转实现处理机调度的程序。 3、主存储器空间的分配和回收。在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。 四、实验原理 该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种调度策略:按优先权调度和按时间片轮转调度。每个进程可能有5种状态:新建(new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend)。每个状态都有一个队列用来存放处于该状态的进程,不同的调度策略采用不同的队列实现。当创建进程时,如果存中的进程数还没达到规定道数,则将新建进程插入就绪队列,如果存中进程数已经达到规定道数,则插到后备队列,后备队列中的进程的状态为new。CPU每次调度时都从就绪队列中取进程,在进程执行过程中如果下一个操作时IO操作,则将进程插入到waiting队列。在系统运行过程中可以执行进程挂起操作,但执行的挂起操作时系统自动暂停运行,在弹出窗口选

网络操作系统重点知识

网络操作系统重点知识 1. ①操作系统的定义:操作系统是控制和管理计算机系统的硬件和软件资源、合理地组织工作流程以及方便用户的程序集合。 ②现代操作系统的基本特征:1、并发性2、共享性3、虚拟性4、不确定性 2. 操作系统在计算机系统中处于何种地位:是硬件层的第一次扩充,是计算机系统软件的重要组成部分。计算机系统的层次结构:硬件层—操作系统层—语言处理程序层—应用程序层。操作系统的作用:提高计算机系统的效率,增强系统的处理能力,充分发挥系统资源的利用率,方便用户使用。 3. 多道程序设计的硬件基础:①中断系统②通道技术③CPU与通道的通信 4. ①多道程序设计的基本原理:多道程序设计的主要目的是充分利用系统中所有资源且尽可能地让它们并行操作。采用通道技术后使CPU从繁琐的I/O操作中解放出来,它不仅能实现CPU与通道并行工作,而且也能实现通道与通道之间、各通道与外设之间的并行。 ②多道程序设计的主要特点:①多道②宏观上并行③微观上串行。 5. 实现多道程序设计要解决的几个问题:①存储保护和地址重定位。(几道程序共享同一主存)②处理机的管理和调度。(共享同一处理机)③资源的管理与分配。(共享系统资源) 9. ①系统调用:用户在程序中能用访管指令调用的,由操作系统提供的子功能集合,其中每一个子功能称为一个系统调用命令。②用户程序使用系统调用后,为什么能从算态进入管态,返回用户程序后又从管态回到算态(系统调用的实现原理):系统调用中的访管指令的地址码可作为系统调用的功能号,它对应一个操作系统为用户提供的子功能或函数。当用户程序需要调用系统功能时,就在其程序的适当位置安排一条系统调用命令,当执行到该指令时便产生访管中断,中断的硬件装置开始响应中断,保存原来的PSW到内存的固定单元,再从内存的另一个固定单元中取出新的PSW送入PSW寄存器。由于新PSW中已事先设置了系统状态为管态,从而使处理机进入管态,在管态下执行中断处理程序。由于在管态下可以使用特权指令,所以用户要求操作系统提供的服务就很容易地被完成。中断处理程序结束后,通过恢复旧的PSW到PSW寄存器,于是又可返回到被中断的用户程序,即从管态又回到算态。 10. UNIX的系统调用的两种方式:①直接系统调用②间接系统调用。它们各是怎样处理:①直接系统调用除可使寄存器传递参数外,其它参数都跟在trap指令的后面②间接系统调用跟随trap指令的是一个指向程序数据区的指针。该程序数据区内有一个直接系统调用trap指令,其后跟以除r0外的参数。 11. ①分时:两个或两个以上的事件按时间划分轮流地使用计算机系统中的某一资源。②分时系统(又称交互作用系统):在一个系统中,如果多个用户通过自己的终端分时地使用同一个计算机,这样的系统就称为分时系统,其上的操作系统统称为分时操作系统。UNIX 属分时系统。 ③分时系统的特点:①同时性(可同时操作,共同使用该系统)②独立性(独占感)③及时性(及时响应)④交互性(人机对话)。 调进/调出是实现分时系统的一种主要方式(分时系统实现原理)。(多流调进调出方式) 12. 实时系统分为两类:①实时控制系统(导弹发射)②实时处理系统(预订飞机票)。 设计实时系统要考虑的问题:①实时时钟管理(实时任务、延迟任务)②连续人机对话③过载的防护(任务的随机性)④高可靠性和保证(故障引起的严重后果)。 13. 分布式计算机系统:是一个由多台计算机组成的系统,在用户看来,他所拥有的计算机是一台单独的计算机,而这台计算机是一台功能扩大了的虚拟机。分布式系统的三个基本功能:①通信②资源共享③并行计算。分布式系统最为突出的特点是透明性。 分布式计算机系统具有以下主要特点: ①任意两台计算机之间可以利用通信交换信息。②各计算机具有相对的自主性或自治性。③具有透明性④具有整体性或协同性。⑤具有坚定性。(任一台故障不会使系统瘫痪。) 14. 分布式系统对资源的管理与集中式系统有何不同? 答:分布式系统对资源的管理采用一类资源有多个管理者的分布式管理方式。分布式管理方式又可分为集中分布管理和完全分布管理两种方式。集中式系统对资源的管理采用一个管理者的方式。 17. 紧耦合与松耦合多处理机系统有何区别? 答:主要区别在于有无共享存储器。①紧耦合多处理机系统有共享存储器,所以也称其为共享存储结构多处理机系统。 ②松耦合处理机系统中没有共享存储器,每台处理机都有一个容量较大的局部存储器,所以也称其为分布存储结构多处理机系统。

JAVA运算符和条件结构

运算符和条件结构 3.1 训练的技能点 (1)学会使用关系运算符和逻辑运算符 (2)学会获取键盘输入的数据 (3)学会使用if-else和多重if条件结构 (4)学会使用switch结构 3.2 上机任务 【阶段一】指导:从键盘获取信息并判断是否合法 训练要点 (1)键盘输入 (2)条件运算符 (3)逻辑运算符 需求说明 (1)录入会员信息(会员号、会员生日、会员积分),并打印输出录入的信息; (2)功能1:判断录入的会员号是否合法(必须为4位整数),如果录入合法,显示录入的信息,如果不合法,则显示“录入信息失败”; 实现思路及关键代码 (1)创建文件,命名为AddCust.java。 (2)实现功能1: 使用Scanner获取用户的键盘输入,存储在变量custNo、custBirth、custScore中。Scanner input = new Scanner( System.in ); System.out.println( “请输入会员号<4位整数>:” ); //提示输入4位会员号 int custNo = input.nextInt( ); //从键盘输入会员号,存在变量custNo中 注意 在使用Scanner前,要在AddCust.java文件开头添加如下代码: import java.util.*; (3)在功能1的基础上实现功能2:判断会员号是否合法。 if ( 会员号有效的条件) {

//输出录入的会员信息 } else { //输出信息录入失败 } 参考解决方案 实现功能1: import java.util.*; public class AddCust { public static void main( String[ ] args ) { /* 以下部分是信息输入*/ System.out.println("录入客户信息\n"); //录入客户信息Scanner input = new Scanner( System.in ); System.out.println("请输入会员号(4位数字):"); int custNo = input.nextInt( ); System.out.println("请输入会员生日(月/日<用两位数字表示>):"); String custBirth = input.next(); System.out.print("请输入积分:"); int custScore = input.nextInt(); /* 以下部分是信息输出*/ System.out.println("\n已录入的会员信息是:"); //显示录入的信息System.out.println(custNo+"\t"+custBirth+"\t"+custScore); } } 实现功能2: import java.util.*; public class AddCust { public static void main( String[ ] args ) { /* 以下部分是信息输入*/ System.out.println("录入客户信息\n"); //录入客户信息Scanner input = new Scanner( System.in ); System.out.println("请输入会员号(4位数字):"); int custNo = input.nextInt( ); System.out.println("请输入会员生日(月/日<用两位数字表示>):");

JAVA学生管理系统期末大作业

JA V A学生管理系统大作业 课程名称:JA V A编程基础 题目:学生信息管理系统 专业:计算机软件 班级:计算机软件121班 学号:8000612030 学生姓名:李俊楠 完成人数:1人 起讫日期:第十六周至第十八周 任课教师:龚根华职称:副教授 部分管主任: 完成时间:2015-1-2

目录 ------------------------------2 课题设计内容------------------------------3 程序功能简介 需求分析--------------------------------------------------3 总体设计---------------------------------------------------3 模块详细设计---------------------------------------------------4 数据库设计 ------------------------------5 主体内容 ------------------------------6 心得体会 -----------------------------11 参考书籍 -----------------------------12

一:课题设计内容 学生管理系统 学生信息管理系统是学校管理的重要工具,是学校不可或缺的部分。随着在校大学生人数的不断增加,教务系统的数量也不断的上涨。学校工作繁杂、资料众多,人工管理信息的难度也越来越大,显然是不能满足实际的需要,效率也是很低的。并且这种传统的方式存在着很多的弊端,如:保密性差、查询不便、效率低,很难维护和更新等。然而,本系统针对以上缺点能够极大地提高学生信息管理的效率,也是科学化、正规化的管理,与世界接轨的重要条件。所以如何自动高效地管理信息是这些年来许多人所研究的。 二:程序功能简介 2.1 需求分析 本系统需要实现的功能: (1)、管理员对学生信息和课程信息进行增加、删除、修改、查找等操作,对选课信息进行管理,对成绩信息和用户信息进行修改、查找等操作。 (2)、学生对学生信息和成绩信息进行查看,对个人的密码信息进行修改等。 2.2 总体设计 学生信息管理系统主要包括管理员和学生两大模块。管理员模块包括:学生信息管理、课程信息管理、选课信息管理、成绩信息管理、用户信息管理等。用户模块包括:学生信息查看、成绩信息查看、个人信息管理等。系统总体结构如图所示。 总体结构图 2.3 模块详细设计 1、学生信息管理模块 学生信息管理模块包括增加、删除、修改、查询、显示全部等。具体的结构图如图所

《网络操作系统》习题(DOC)

《网络操作系统》习题 一、填空题 1. Windows Server 2003的标准版本适用于中、小型企业,主要用作服务器,提供各种常见的网络功能,如:文件服务、打印服务、通信服务、Web服务等。 2. 通过查看硬件兼容性列表文件,可以确认Windows Server 2003操作系统是否与一台计算机的硬件设备兼容。 3. 在检测软件兼容性时,需要在winnt32.exe命令后附加的参数为checkupgradeonly 。 4. Windows Server 2003支持的文件系统格式有:FAT、FAT32和NTFS 。 5. 在Windows Server 2003中,NTFS 文件系统格式支持文件加密。 6. 为了能够实现网络通信,管理员需要为计算机上的网卡等网络设备设置TCP/IP参数,包括:IP 地址、子网掩码和默认网关等。 7. 在安装硬件设备时,一般需要同时安装这个设备的驱动程序,该程序一般由硬件设备的开发厂商提供。 8. 对于即插即用的硬件设备,Windows Server 2003能够自动检测并进行安装。 9. 对于非即插即用的硬件设备,只能由用户手工安装。 10. 如果希望重新使用一个被禁用的设备,应该对该设备的执行启用的操作。 11. 在工作组中,每台计算机均把自己的资源信息和安全信息存放在本地的SAM或安全账户管理数据库中。 12. 在工作组中的一台计算机上所创建的用户账户,被称为本地或本机用户账户。 13. 在网络中工作、使用网络资源的人被称为用户。 14. 如果一个员工长时间不工作,那么为安全起见,管理员应该将他的用户帐户禁用。 15. 在一个工作组中,每台Windows计算机的内置管理员或Administrator 帐户能够在本地计算机的SAM数据库中创建并管理本地用户帐户。 16. 在Windows计算机上不能对文件实施共享,而只能对文件夹实施共享。 17. 管理员在对文件夹实施共享之后,必须设置权限,这样才能保证用户访问共享文件夹的安全。 18. 当创建共享文件夹时,如果在它的共享名的后面附加一个

《Java范例开发大全》

下面是377个Java的例子。如果你是牛人,看看你能做出多少? 如果有人不相信这些例子都是Java做的,可以看看清华大学的《Java范例开发大全》实例1开发第一个Java程序 实例2自动提升 实例3自动转换 实例4常用基础类型之强制转换 实例5算术运算符 实例6关系运算符 实例7逻辑运算符 实例8位运算符 实例9移位运算符 实例10转型运算符 实例11常量与变量 实例12各种进制的转换 实例13 Java中的进制与移位运算符 实例14判断输入的年份是否为闰年 实例15抽奖活动 实例16xx乘法表 实例17如何列出素数 实例18 Java中的递归 实例19男生女生各多少人

实例20求xx数 实例21求任意一个正数的阶乘 实例22求n的n次方 实例23利用for循环输出几何图形 实例24xx 实例25求1到100之间的和 实例26存上100元需要多少天 实例27输出100之间的所有偶数 实例28如何判断回文数字 实例29输出100之间的所有奇数 实例30求最大的随机数 实例31判断字母分类 实例32优良及差 实例33打印任意一年日历 实例34一年四季的划分 实例35除0发生的算术异常(ArithmeticException) 实例36数组下标越界异常(ArrayIndexOutOfBoundsException)实例37数组元素类型不匹配异常(ArrayStoreException) 实例38强制类型转换异常(ClassCastException) 实例39索引越界异常(IndexOutOfBoundsException) 实例40空指针异常(NullPointerException)

Java大作业_学生成绩管理

Java大作业_学生成绩管理本科学生综合性实验报告 课程名称:Java开发技术 项目名称:学生成绩治理系统 学生姓名学号 指导教师 开课学期2011 至2012学年第一学期 完成时刻2011 年1 月 3 日

名目 摘要 2 1 项目研究开发的背景及意义2 1.1 本课题设计学术价值、理论意义和实践意义 2 1.2 本课题设计拟研究的要紧咨询题2 1.3重点和难点3 1.4 研究方法、预期效益3 1.5 本项目创新点和特色3 2 需求分析3 2.1 开发背景 3 2.2 项目目标 4 2.3 运行环境 5 2.4任务讲明书5 3 技术路线及关键技术7 3.1系统总体功能图7 3.2学生成绩治理系统的功能模块简介:8 3.3 系统运用的要紧技术: 29 3.4数据库设计29 3.5连接数据库32 4 测试报告及系统评判33 4.1 系统简介:33 4.2 系统特色及缺点:34 5 系统使用讲明34 5.1 用户操作指南: 34 6 个人感受及收成36 7大作业总结 37 感谢37 8 参考文献:38

摘要 人类已进入21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,专门是信息技术和网络技术的讯速进展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻.学生成绩治理系统是一个教育单位不可缺 少的部分,它的内容关于学校的决策者和治理者来讲都至关重要。此次大作业的学生成绩治理系统是用java编程+SQL server 2000数据库+SQL查询语言实现的.重点介绍了学生成绩治理系统的实现过程:包括系统需求分析、功能设计、数据库设计、系统实现、系统测试和调试等。 关键字:成绩治理统计信息治理数据库 1 项目研究开发的背景及意义 1.1 本课题设计学术价值、理论意义和实践意义 现在的社会知识经济在世界经济进展的地位越来越高,国家综合国力和国际竞争能力越来越取决于教育进展,科学技术和知识创新的水平,教育在经济和社会进展过程中将出现出越来越突出的重要作用。学生成绩治理系统是一个教育单位不可缺少的部分,它的内容关于学校的决策者和治理者来讲都至关重要,因此学生成绩治理系统应该能够为用户提供充足的信息和快捷的查询手段。然而有些学校依旧使用传统人工的方式治理学生成绩,填写各种表格,这种治理方式存在着许多缺点,如:效率低,保密性差,另外所用其时刻长,产生大量的文件和数据,这关于查找,更新和爱护都带来了许多的困难。在此次大作业中,我综合java编程、SQL数据库和SQL查询语言来实现一个简单的学生成绩治理系统。 1.2 本课题设计拟研究的要紧咨询题 一个完整的学生治理系统包括四个功能模板: (1)差不多信息治理:包括对学生、教师、课程、成绩信息进行查找、删除、修改和添加。 (2)课表查询:学生和教师都能够对自身的课表进行查询。 (3)统计功能:对学生单科成绩、总成绩、所有学生成绩的平均分进行统计,并作出相应的排名。

java超市管理系统实训报告

1.1 课程设计的目的 通过本次课程设计,使学生能够全面、深刻地掌握数据库系统的设计流程。根据在数据库原理课程中所学到的数据库理论知识,结合某个具体的实际需求,最终开发出一个较为实用的数据库系统。 1.2 课程设计的背景和意义 1.2.1课程设计的背景 20世纪90年代后期特别是近几年,我国的超市产业飞速发展,其经营模式更为复杂,旧的管理体制已经无法适应超市的发展,这就迫切的需要引进新的管理技术。 超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生。依靠现代化的计算机信息处理技术来管理超市,节省了大量的人力、物力,改善了员工的并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。 1.2.2 课程设计的意义 “数据库课程设计”的设计思想旨在强调学生的实际编程能力的培养与创意灵感的发挥。为此,本课程结合学科特点,除了让学生掌握数据库原理的理论知识,还增加了需求功能让学生完成,并鼓励学生的创作出个性的程序,满足客户需求,与市场的实际项目相结合。学生对此热情高,实际收获大,效果好。通过课堂学习和参与相关项目设计,学生对书本支持有了深刻的理解,实践性教学取得了良好效果。 1.3 课程设计环境 操作系统:Windows xp 开发软件:Microsoft Visual Studio 2005 数据库:Microsoft SQL Server 2005 第2章系统需求分析 随着人们生活水平的不断提高,对于物质的需求也越来越高,而超市作为日常生活用品聚集的场所,随着全球各种超市的数目的不断增加,规模不断增大,其管理难度也相应的增加,而为了适应当今信息化发展的时代,一套完整的超市商品管理系统显得尤为重要。

(完整版)Java程序设计实验报告

Java 程序设计实验报告

实验一 JDK开发环境和结构化程序设计 实验学时:2 实验类型:综合性 一、实验目的 1.熟悉JDK开发环境。 2.熟悉UltraEdit/NotePad等编辑器编写、编译、运行Java程序。 3.掌握Java Application的程序结构和开发过程。 4.掌握Eclipse工具的使用。 5.结构化程序设计 二、实验内容 1.JDK开发环境 (1)J2sdk开发环境安装。假设JDK的安装路径为C:\JDK; (2)设置环境变量PATH和CLASSPATH(如果在autoexec.bat中没有进行设置)。如 SET PATH=C:\JDK\BIN;%PATH% SET CLASSPATH=.; %CLASSPATH%;d:\test_java (自己的工作目录) 2.UltraEdit/Notepad编辑器 练习使用Ultraedit/Notepad创建Java源程序的方法。

3.掌握Java Application程序开发过程 (1)编辑源程序,如下程序: import java.io.*; public class HelloWorld1{ public static void main(String arg[]){ System.out.println("Hello World!"); } } (2)保存文件,(注意大小写)。可将文件保存在“D:\test_java\”目录中,注意文件名为HelloWorld1.java。 (3)进入命令行(MS-DOS)方式,设定当前目录为“D:\test_java\”,运行Java 编译器: D:\test_java>javac HelloWorld1.java (4)如果输出错误信息,则根据错误信息提示的错误所在行返回EditPlus编辑器进行修改。常见错误是类名与文件名不一致、当前目录中没有所需源程序、标点符号全角等。 如果没有输出任何信息或者出现“deprecation”警告,则认为编译成功,此时会在当前目录中生成HelloWorld1.class文件。 (5)利用Java解释器运行这个Java Application程序,并查看运行结果。 D:\test_java>java HelloWorld1 4.Eclipse开发环境的使用 练习使用Eclipse实现第3步中Java HelloWorld程序的方法。

JAVA+SQL学生学籍管理系统代码及实验报告

学生学籍管理系统 1课程设计目的、设计内容与需求分析 1.1 课程设计目的 通过本次课程设计的实践操作,能够让学生懂得Java、SQL的各种相关知识的使用,真正的提高学生独立开发设计Java程序,把课堂上的知识运用在实践上,一门编程语言只有在不断实践操作和练习上才会有进步。 1.2软件设计内容 学生学籍管理系统,可用于学校等机构的学生信息管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。该软件用java语言编写,用SQLServer2005数据库作为后台的数据库进行信息的存储,用SQL语句完成添加,查询,修改,删除的操作。用ODBC驱动实现前台Java与后台SQL数据库的连接。Java语言跨平台性强,可以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。 SQLServer2005数据库高效安全,两者结合可相互利用各自的优势。系统可供输入的属性有“学号”,“姓名”,“性别”,“班级”,“学院”,“籍贯”。 该系统实现的大致功能: 1.管理员登陆界面。该界面可以输入管理员号,登陆密码。用户通过验证通过后方可进入管理系统。一定程度上保证了信息安全性,防止他人未经允许篡改学生信息。 2.查询学生信息。可以选择由用户选择“显示系统中当前的所有学生信息”。也可以选择按照“某一个学号查询该学号的学生信息”。查询到的信息会在窗口中依次显示出来。 3.添加学生信息。可以按照图形的界面的显示依次输入新学生的“学号”,“姓名”,“性别”,“班级”,“学院”,“籍贯”。完成新纪录的添加。 4.修改学生信息。可以选择按照“学号”或者“姓名”找到该学生的学生信息并输

java中常见的几种运算符

Java中常见的几种运算符 第一:算术运算符:{+、-、*、/、%取余或是取模、++与--递增和递减。} 需要注意的几个地方:在进行除法运行时当两个整数相除时结果为整数,若除以一个整数除不尽时,这是就会返回整数部分,小数部分则将省略,这时就要涉及到浮点型数据了!递增和递减应注意的是:++或—写在变量前面,则该式子的值等于变量变化以前的值。2)++或—写在变量后面,则该式子的值等于变量变化以后的值。 第二:关系运算符:{==等于若两个值相等,返回一个真值、!=不等于、<小于、>大于、<=小于等于、>=大于等于}主要用于根据某个变量的值来执行特定的操作,并且返回一个布尔值,一般形式为:做操作数关系运算符右操作数! 第三:位运算符:{“&”代表与运算符两个条件都成立才算成立;“︳”代表或运算符,满足其中一个即可成立,对应的二进制位有一个为1 则为1,否则为0;“?”代表异或运算符,对应的二进制位相同为零,不相同为1}

第四:逻辑运算符:{“&&”代表与逻辑运算符两个条件都成立算成立,“︳︳”代表或逻辑运算符,满足其中一个条件即可,他们的结果都是boolean类型的ture或false} 第五:移位运算符:{“<<”代表向左移多少位;“>>”代表向又移多少位;“>>>”又移补零} 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 语法格式:需要移位的数字<<(>>)移位的次数 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2 的1 次方,左移n 位就相当于乘以2 的n 次方;右移n 位相当于除以2 的n 次方。如:b<<8相当于b*16;b>>8相当于b/16. 第六:三元运算符{语法格式:(布尔表达式)?(真值):(假植)}如果布尔表达式的条件为真那么执行的条件位真值,否则反之。【a=a+5等于a+=5】 第七:运算符的优先级: 1 () [] . 从左到右 2 ! +(正) -(负) ~ ++ -- 从右向左 3 * / % 从左向右 4 +(加) -(减) 从左向右 5 << >> >>> 从左向右

JAVA-课程设计(大作业)报告

课程设计(大作业)报告 课程名称:面向对象程序设计课程设计设计题目:设计一个记事本 院系:信息技术学院 班级: 设计者: 学号: 指导教师: 设计时间: 信息技术学院

昆明学院课程设计(大作业)任务书

简单记事本程序的设计 目录 一.题目分析 (5) 1.1需求分析 (5) 1.2功能要求设计 (5) 二.总体设计 (5) 2.1设计思路 (5) 2.2运行界面 (6) 2.3模块说明图 (6) 2.4主流程图 (7) 2.5 UML图 (7) 2.6程序相关说明 (8) 三.运行环境 (8) 四.详细设计与分析 (8) 4.1.初始化组件 (8) 4.2.构建菜单栏及其下拉菜单 (8) 4.3.“文件”菜单的事件监听 (9) 4.5.异常处理 (10) 五.调试分析 (12) 六.总结 (13) 七.参考文献 (14) 附录(源代码) (14)

一.题目分析 1.1需求分析 现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有的能改变字体,有的能改变文字颜色。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的记事本程序。 该报告中的程序是使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切等功能,不同之处是本程序能够对文字的颜色进行设置。该程序主要用到了Java swing和事件监听等。 1.2功能要求设计 设计一个记事本,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切,查找替换等功能,可扩展功能。本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面: 5)菜单中有“文件”,“编辑”,“关于”三个主菜单。 6)“文件”有“新建”“打开”“保存”“退出”四个子菜单:分别用于新建文件,打开文件,保存文 件,退出记事本。 7)“编辑”中有“剪切”“复制”“粘贴”“颜色”四个子菜单:用于剪切文字,复制文字,粘贴文字 增加了“颜色”子菜单来对文字的颜色进行设置。 8)“关于”菜单中有关于记事本程序的制作日期,作者等信息,功能可自行增加。 提示:用图形用户界面实现,使用文件输入输出流。 二.总体设计 2.1设计思路 在本程序中,设计了一个菜单栏和文本内容区。设计过程中用到了JScrollPane,JMenu,JTextPane,JFileChooser等。JMenu用来制作菜单,菜单包括“文件”“编辑”“关于”。JTextPane主要用来输入文本。为了加入颜色的设置,所以加了一个JColorChooser组件。

JAVA语言中常用的运算符

JAVA中常用的运算符有以下几种 我们日常了解到的运算符有有+(加号)、-(减号)、*(乘号)、/(除号)和%(求余),那么在JAVA中有哪些我们不知晓的运算符呢,下面就介绍下JAVA中的运算符。 一、自增和自减运算符 自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算;放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。 二、算术运算符 ava中的算术运算符主要有+(加号)、-(减号)、*(乘号)、/(除号)和%(求余),它们都是二元运算符。 三、比较运算符 比较运算符属于二元运算符,用于程序中的变量和变量之间、变量和常量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型,当运算符对应的关系成立时,运算结果是true,否则结果是false。比较运算符通常用在条件语句中来作为判断的依据。 四、逻辑运算符 逻辑运算符包括&&(&)(逻辑与)、||(|)(逻辑或)和!(逻辑非),返回值为布尔类型的表达式,操作元也必须是boolean型数据。

和比较运算符相比,逻辑运算符可以表示更加复杂的条件,例如连接几个关系表达式进行判断。在逻辑运算符中,除了“!”是一元运算符之外,其余的都是二元运算符。 五、位运算符 位运算符用于处理整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制的形式表示,例如int型变量7的二进制表示是00000000 00000000 00000000 00000111,-8的二进制表示是111111111 111111111 1111111 11111000,最高位是符号位,0表示正数,1表示负数。 六、运算符优先级 七、三元运算符 三元运算符是Java中唯一一个三目运算符,其操作元有三个,第一个是条件表达式,其余的是两个值,条件表达式成立时运算取第一个值,不成立时取第二个值,示例代码如下所示: boolean b = 20 < 45 ? true : false;

java实验报告完整版

实验报告 (计算机与信息工程学院实验中心) 学期:2014-2015 课程名称:《Java程序设计实验》 班级:信息1202 姓名:方逸梅 学号:1212100231 指导老师:费玉莲

《Java程序设计》 独立实验教学安排 一、实验的教学方式、安排及实验环境 (一)教学方式 对照本课程的实验教材,实验一至实验十一,由教师提示实验原理、方法、步骤等内容,在教师的指导下,学生独立完成程序设计及调试工作。实验十二的内容由学生自行设计完成。 (二)教学安排 学时数:30课时 学时安排:每次实验3学时,从学期第五周开始,共十次上机实验。 (三)实验环境 实验环境为JDK 1.6。 (四)具体安排 地点:信息大楼实验室。 辅导:每个班次一名辅导老师,原则上由任课老师担任。 登记:实验完成,由辅导老师登记实验纪录。 学生:实验做完,完成实验报告内容,并在学期末上交实验册。 老师:批改实验,成绩与平时成绩一起占期末的30%。 二、实验的具体内容和要求 见实验报告。

浙江工商大学 计算机与信息工程学院实验报告(1)日期:地点:成绩: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 实验目的、实验原理和内容: 一、实验目的:熟悉Java开发环境及简单程序Java设计。 二、实验原理:SDK 的下载与安装,设置环境变量,安装java 虚拟机,使用Eclipse,编译Java 源程序,运行Java 程序。 三、实验内容及要求: 1.下载、安装并设置Java SDK 软件包。 2.熟悉Eclipse编辑软件。 3.掌握运行Java 程序的步骤。 4.分别编写Application和Applet程序,显示字符串”Hello Java!欢迎使用!”。 要求:请同学把预备知识、步骤、程序框图、调试好的程序及存在的问题写在下面(不够可以附页)。 程序一 public class hello { public static void main(String[] args) { for(int i=0;i<=4;i++) { System.out.println("Hello java! 欢迎使用!"); } } } 结果示意图1

网络操作系统考试试题库

一、选择题(共30分,每小题1分) 1、在操作系统中存在许多同时的或者并行的活动,这种特征称为(C) A、共享性 B、虚拟性 C、并发性 D、不确定性 2、用于连接磁带、磁鼓和磁盘等快速设备,以成组方式工作的是(D) A、字节多路通道 B、数组多路通道 C、控制器 D、选择通道 3、在静态下运行的操作系统程序中,只能在管态下执行而不能在算态下执行的特殊机器指令是(A) A、特权指令 B、系统调用指令 C、陷阱指令 D、访管指令 4、分时系统中,每个用户都有一种独点感,感到该系统好像为我一个用户在服务,这种特征是(B) A、同时性 B、独立性 C、分时性 D、交互性 5、在紧耦合多处理机系统中,处理机间实现相互通信的机制是(B) A、消息传递机制 B、共享主存 C、环形网络 D、总线网络 6、把操作系统分成若干进程,其中每个进程实现单独的一套服务,这种服务模式是(C) A、对象模式 B、对称多处理机模式 C、客户机/服务器模式 D、对等模式 7、进程从运行态进入就绪态的原因可能是(A)

A、时间片用完 B、被选中占有处理器 C、等待的I/O操作已完成 D、等待I/O操作 8、能够按照变化的情况对各种进程的优先级进行适当地调整,这种进程调度算法是(D) A、静态优先级算法 B、时间片轮转算法 C、先来先服务算法 D、动态优先级算法 9、在具有多线程机制的操作系统中,处理机调度的基本单位是(B) A、进程 B、线程 C、字节 D、块 10、为了加快查表速度,在地址变换机构中加入一组高速寄存器,这些寄存器连同管理它们的硬件构成了一个容量较小的存储器,称为(C) A、主存储器 B、辅助存储器 C、联想存储器 D、Cache 11、进程间的互斥是指进程间在逻辑上的相互关系是(D) A、调用 B、联接 C、直接制约 D、间接制约 12、在基于消息传递通信机制中,其核心成分是(A) A、通信原语 B、函数 C、参数 D、程序 13、根据通信协议来控制和管理进程间的通信的软件是(C) A、网络操作系统 B、网络传输软件 C、网络通信软件 D、网络应用软件 14、以虚拟软盘方式实现硬盘共享的软件必须具有四方面的功能,即盘卷管理、安装管理、信号量管理和(B)

相关文档
最新文档