作者主页:源码空间站2022
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
本系统分为前后台,包括管理员、病人、挂号人员、收费人员、药房人员、医生人员等角色,其中前台只能由病人角色登录,其它角色可通过后台登录;
管理员角色包含以下功能:
登录页面,增加公告,公告管理,留言管理,增加用户,用户管理,增加科室,科室管理,药品管理,收费统计,挂号统计等功能。
病人角色包含以下功能:
注册账号,用户登录,用户登录后首页,预约挂号,个人信息修改,提交留言等功能。
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目:否;
1.后端技术:Servlet
2.前端技术:JSP+CSS+JavaScript
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中dbconnection.properties配置文件中的数据库配置改为自己的配置;
将项目中src/dao/CommDAO.java中第71行的数据库配置用户名密码改为自己的配置;
4. 运行项目,输入http://localhost:8080/srykzsblmis/ 登录 注:Tomcat中配置路径必须为srykzsblmis
管理员账号/密码:admin/123
病人账号/密码: xm/123
挂号人员账号/密码:gh/123
收费人员账号/密码:sf/123
药房人员账号/密码:yf/123
医生人员账号/密码:doctor1/123
管理员角色
CommDAO
package dao;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletContext;
public class CommDAO {
Connection conn = null;
public CommDAO() {
conn = this.getConn();
}
private static Properties config = null;
static {
try {
config = new Properties();
// InputStream in = config.getClass().getResourceAsStream("dbconnection.properties");
InputStream in = CommDAO.class.getClassLoader().getResourceAsStream("dbconnection.properties");
config.load(in);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public Connection getConn() {
try {
// Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// String dburl = (String)config.get("dburl");
// String user = (String)config.get("username");
// String pwd = (String)config.get("password");
// String dataname=(String)config.get("dataname");
// //dburl = dburl+dataname;
// conn = DriverManager.getConnection(dburl,user,pwd);
String d = new Date().toLocaleString().substring(0, 9);
Class.forName("com.mysql.jdbc.Driver");
String dburl = (String) config.get("dburl");
conn = DriverManager.getConnection(dburl, "root", "hanmeng123");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public int getInt(String sql) {
int i = 0;
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
if (rs.next()) {
i = rs.getInt(1);
}
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return i;
}
public double getDouble(String sql) {
double i = 0;
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
if (rs.next()) {
i = rs.getDouble(1);
}
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return i;
}
public void commOper(String sql) {
try {
Statement st = conn.createStatement();
st.execute(sql);
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void commOperSqls(ArrayList<String> sql) {
try {
conn.setAutoCommit(false);
for (int i = 0; i < sql.size(); i++) {
Statement st = conn.createStatement();
System.out.println(sql.get(i));
st.execute(sql.get(i));
st.close();
}
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public List<HashMap> select(String sql) {
List<HashMap> list = new ArrayList();
try {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
HashMap map = new HashMap();
int i = rsmd.getColumnCount();
for (int j = 1; j <= i; j++) {
if (!rsmd.getColumnName(j).equals("ID"))
map.put(rsmd.getColumnName(j), rs.getString(j));
else
map.put("id", rs.getString(j));
}
list.add(map);
}
rs.close();
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
public void close() {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List select(String sql, int pageno, int rowsize) {
List<HashMap> list = new ArrayList<HashMap>();
List<HashMap> mlist = new ArrayList<HashMap>();
try {
list = this.select(sql);
int min = (pageno - 1) * rowsize;
int max = pageno * rowsize;
for (int i = 0; i < list.size(); i++) {
if (!(i < min || i > (max - 1))) {
mlist.add(list.get(i));
}
}
} catch (RuntimeException re) {
re.printStackTrace();
throw re;
}
return mlist;
}
public String DynamicImage(String categoryid, int cut, int width, int height) {
StringBuffer imgStr = new StringBuffer();
StringBuffer thePics1 = new StringBuffer();
StringBuffer theLinks1 = new StringBuffer();
StringBuffer theTexts1 = new StringBuffer();
imgStr.append("<div id=picViwer1 align=center></div><SCRIPT src='/studysite/js/dynamicImage.js' type=text/javascript></SCRIPT>\n<script language=JavaScript>\n");
thePics1.append("var thePics1=\n'");
theLinks1.append("var theLinks1='");
theTexts1.append("var theTexts1='");
List<HashMap> co = this.select("select * from news where title!='ϵͳ��������γ̹���ϵͳ' and title!='��ҵ�����Ŀ����' order by id desc", 1, 6);
int j = 0;
int i = co.size();
for (HashMap b : co) {
j++;
String id = b.get("id").toString();
String title = b.get("title").toString();
String url = "/studysite/upfile/" + b.get("picurl");
String purl = "";
if (j != i) {
thePics1.append(url.replaceAll("\n", "") + "|");
theLinks1.append(purl + "|");
theTexts1.append(title + "|");
}
if (j == i) {
thePics1.append(url.replaceAll("\n", ""));
theLinks1.append("#");
theTexts1.append(title);
}
}
thePics1.append("';");
theLinks1.append("';");
theTexts1.append("';");
imgStr.append(thePics1 + "\n");
imgStr.append(theLinks1 + "\n");
imgStr.append(theTexts1 + "\n");
imgStr.append("\n setPic(thePics1,theLinks1,theTexts1," + width + "," + height + ",'picViwer1');</script>");
return imgStr.toString();
}
public static void main(String[] args) {
System.out.println(new CommDAO().select("select * from news where title!='ϵͳ��������γ̹���ϵͳ' order by id desc"));
}
}
CheckCode
package util;
/**
* 验证码生成类
*/
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
public class CheckCode {
public String getCheckCode(){
Random random = new Random();
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
}
return sRand;
}
public static void main(String[] args) {
String timeStr="2011-10-18 15:24:25";
DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=null;
long timeLong=0;
long timeAdded=0;
try{
date=df.parse(timeStr);
timeLong=date.getTime();
System.out.println("long:"+timeLong);
Calendar c=Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MINUTE,40);
timeAdded=c.getTimeInMillis();
System.out.println("Added time:"+c.getTime());
System.out.println("Added 40 minutes:"+timeAdded);
}catch(ParseException e){
e.printStackTrace();
}
}
}
Info
package util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class Info {
public static String generalFileName(String srcFileName) {
try{
int index=srcFileName.lastIndexOf(".");
return StrUtil.generalSrid()+srcFileName.substring(index).toLowerCase();
}catch(Exception e){
return StrUtil.generalSrid();
}
}
public synchronized static String getID() {
Random random = new Random();
StringBuffer ret = new StringBuffer(20);
String rand = String.valueOf(Math.abs(random.nextInt()));
ret.append(getDateStr());
ret.append(rand.substring(0,6));
return ret.toString();
}
public synchronized static String subStr(String source,int length) {
if(source.length()>length)
{
source=source.substring(0,length)+"...";
}
return source;
}
public static String getDateStr(){
String dateString="";
try{//yyyyMMddHHmmss
java.text.SimpleDateFormat formatter=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date currentTime_1=new java.util.Date();
dateString=formatter.format(currentTime_1);
}catch(Exception e){
}
return dateString;
}
public static String AutoID(){
String dateString="";
try{//yyyyMMddHHmmss
java.text.SimpleDateFormat formatter=new java.text.SimpleDateFormat("yyyyMMddhhmmss");
java.util.Date currentTime_1=new java.util.Date();
dateString=formatter.format(currentTime_1);
}catch(Exception e){
}
return dateString;
}
public static String getUTFStr(String str) {
if(str==null){
return "";
}
try {
str = new String(str.getBytes("ISO-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
public static String getGBKStr(String str) throws UnsupportedEncodingException{
if(str==null){
return "";
}
return new String(str.getBytes("ISO-8859-1"),"GBK");
}
public static String getGB2312Str(String str) throws UnsupportedEncodingException{
if(str==null){
return "";
}
return new String(str.getBytes("ISO-8859-1"),"gb2312");
}
/**
*得到多少天之后之前的日期��
* @param String date
* @param int day
* @return
*/
public static String getDay(String date,int day) {
String b = date.substring(0,10);
String c = b.substring(0,4);
String d = b.substring(5,7);
String f = b.substring(8,10);
String aa = c+"/"+d+"/"+f;
String a = "";
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
GregorianCalendar grc=new GregorianCalendar();
grc.setTime(new Date(aa));
grc.add(GregorianCalendar.DAY_OF_MONTH,day);
String resu = dateFormat.format(grc.getTime());
String t[]= resu.split("-");
String sesuu = "";
for(int i=0;i<t.length;i++)
{
if(t[i].length()==1)
{
t[i]="0"+t[i];
}
sesuu += t[i]+"-";
}
return sesuu.substring(0,10);
}
/**
* 计算两个时期之间的天数
*
*/
public static int dayToday(String DATE1, String DATE2) {
int i = 0;
DATE1 = DATE1.substring(0,DATE1.indexOf(" "));
DATE2 = DATE2.substring(0,DATE2.indexOf(" "));
String[] d1 = DATE1.split("-");
if(d1[1].length()==1)
{
DATE1 = d1[0]+"-0"+d1[1];
}else{
DATE1 = d1[0]+"-"+d1[1];
}
if(d1[2].length()==1)
{
DATE1 = DATE1+"-0"+d1[2];
}else{
DATE1 = DATE1+"-"+d1[2];
}
String[] d2 = DATE2.split("-");
if(d2[1].length()==1)
{
DATE2 = d2[0]+"-0"+d2[1];
}else{
DATE2 = d2[0]+"-"+d2[1];
}
if(d2[2].length()==1)
{
DATE2 = DATE2+"-0"+d2[2];
}else{
DATE2 = DATE2+"-"+d2[2];
}
for(int j=0;j<10000;j++)
{
i=j;
String gday = Info.getDay(DATE1, j);
if(gday.equals(DATE2))
{
break;
}
}
return i;
}
/**
* 比较时间大小
*
*/
public static String compare_datezq(String DATE1, String DATE2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dt1 = df.parse(DATE1);
Date dt2 = df.parse(DATE2);
if (dt1.getTime() > dt2.getTime()) {
return "big";
} else if (dt1.getTime() < dt2.getTime()) {
return "small";
} else {
return "den";
}
} catch (Exception exception) {
exception.printStackTrace();
}
return "den";
}
/**
* 过滤html代码
*
*/
public static String filterStrIgnoreCase(String source, String from, String to){
String sourceLowcase=source.toLowerCase();
String sub1,sub2,subLowcase1,subLowcase2;
sub1=sub2=subLowcase1=subLowcase2="";
int start=0,end;
boolean done=true;
if(source==null) return null;
if(from==null||from.equals("")||to==null||to.equals(""))
return source;
while(done){
start=sourceLowcase.indexOf(from,start);
if(start==-1) {
break;
}
subLowcase1=sourceLowcase.substring(0,start);
sub1=source.substring(0,start);
end=sourceLowcase.indexOf(to,start);
if(end==-1){
end=sourceLowcase.indexOf("/>",start);
if(end==-1) {
done=false;
}
}
else{
end=end+to.length();
subLowcase2=sourceLowcase.substring(end,source.length());
sub2=source.substring(end,source.length());
sourceLowcase=subLowcase1+subLowcase2;
source=sub1+sub2;
}
//System.out.println(start+" "+end);
}
return source;
}
public static String tform(HashMap map)
{
String jscode = "";
try{
jscode+="<script type=\"text/javascript\">\n";
jscode+="function getPvalue()\n";
jscode+="{\n";
Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext())
{
String pm=((Object)it.next()).toString();
String str1 = "";
String str2 = "";
String[] strs = pm.split("=");
str1 = strs[0];
if(strs.length==1)str2="";
if(strs.length==2)str2=strs[1];
str2 = str2.replaceAll("\r\n", "-----");
jscode+=" if(document.getElementsByName(\""+str1+"\").length>1)\n";
jscode+=" {\n";
jscode+=" var radios = document.getElementsByName(\""+str1+"\");\n";
jscode+=" if(radios[0].type=='radio'){\n";
jscode+=" for(var i=0;i<radios.length;i++)\n";
jscode+=" {\n";
jscode+=" if(radios[i].value==\""+str2+"\")\n";
jscode+=" {\n";
jscode+=" radios[i].checked=\"checked\";\n";
jscode+=" }\n";
jscode+=" }\n";
jscode+=" }\n";
jscode+=" if(radios.type=='select'){\n";
jscode+=" f1."+str1+".value=\""+str2+"\";\n";
jscode+=" }\n";
jscode+=" }else{\n";
jscode+=" if(f1."+str1+")\n";
jscode+="{\n";
jscode+="f1."+str1+".value=\""+str2+"\";\n";
jscode+="}\n";
jscode+="}\n";
}
jscode+="if(document.getElementById(\"txt\"))\n";
jscode+="{\n";
jscode+="document.getElementById(\"txt\").src=\"/xkglsys/upfile/"+map.get("filename")+"\";\n";
jscode+="}\n";
jscode+="}\n";
jscode+=" getPvalue();\n";
jscode+="</script>\n";
}catch (Exception e) {
e.printStackTrace();
}
return jscode;
}
public static void delPic(String path,String img)
{
if(img!=null)
{
if(!img.equals(""))
{
File file1=new File(path + "/" + img);
if(file1.exists() ) {
file1.deleteOnExit();
file1.delete();
}}}
}
public static void writeExcel(String fileName,String[] pros,java.util.List<List> list,HttpServletRequest request, HttpServletResponse response){
WritableWorkbook wwb = null;
try {
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);
ws.setColumnView(0,20);
ws.setColumnView(1,20);
ws.setColumnView(2,20);
ws.setColumnView(3,20);
ws.setColumnView(4,20);
ws.setColumnView(5,20);
try {
for(int i=0;i<pros.length;i++)
{
Label label1 = new Label(i, 0,"");
label1.setString(pros[i]);
ws.addCell(label1);
}
} catch (RowsExceededException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (WriteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//下面开始添加单元格
int i=1;
for(List t:list){
try {
Iterator it = t.iterator();
int jj=0;
while(it.hasNext())
{
Label label1 = new Label(jj, i,"");
String a = it.next().toString();
label1.setString(a);
ws.addCell(label1);
jj++;
}
i++;
} catch (RowsExceededException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (WriteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
try {
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
try {
response.sendRedirect("/srykzsblmis/upload?filename="+fileName.substring(fileName.lastIndexOf("/")+1));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String a = "A020$A004$";
String[] aa = a.split("\\$");
for(int i=0;i<aa.length;i++){
System.out.println(aa[i]);
}
}
}
如果也想学习本系统,下面领取。关注并回复:018jsp
文章浏览阅读481次。php如何替换数组里的字符串2021-03-05 00:20:25php替换数组里的字符串的方法:可以利用str_replace函数来进行替换,如【str_replace("red","pink",$arr,$i)】。如果搜索的字符串是一个数组,那么它将对数组中的每个元素进行查找和替换。本文操作环境:windows10系统、php 7.3、thinkpad t480电脑。如果我们需要替换数组中的字..._php 字符串替换数组里的
文章浏览阅读546次,点赞2次,收藏6次。ubuntu 18.04 安装OpenCV 3.4.8版本1、安装包下载先到官网下载所需要的opencv包点击链接,这里我下载的是3.4.82、安装依赖包sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev pyt_ubuntu安装opencv4.8
文章浏览阅读1.8k次。上一篇文章写了 leaflet,本篇说一下openlayers。第一步,下载:https://github.com/openlayers/openlayers/releases/download/v6.2.1/v6.2.1-dist.zip解压后,我们只需要其中两个文件ol.css,ol.js第二步,下载瓦片,参考上篇文章,https://blog.csdn.net/netying..._openlayer加载离线地图
文章浏览阅读903次。HTTP是一个应用层协议,虽然在2015年已推出HTTP/2版本,并被主要的web浏览器和web服务器支持。它的主要特点可概括如下:支持客户/服务器模式。简单快速:..._除了404notfound还有什么
文章浏览阅读1.7k次,点赞50次,收藏48次。驭风计划课程链接如果需要答案代码可以私聊博主有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~
文章浏览阅读74次。本节书摘来自异步社区出版社《从缺陷中学习C/C++》一书中的第6章,第6.3节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。6.3 数组传参时的sizeof从缺陷中学习C/C++代码示例void copy(int a[], int b[]) { memcpy(b, a, sizeof..._void copy(int a[], int (&b)[]) { memcpy(a, b, sizeof(b)); }
文章浏览阅读1.9k次。@echo offrem 桌面创建删除日志set logpath=%USERPROFILE%\DESKTOP\clearEdgLog.txtrem 设置edge浏览器缓存文件路径set dirpath=%LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\#!001\MicrosoftEdge\Cache\echo.>%logpath%rem 删除不是系统,只读和隐藏的文件for /f "tokens=*" %._批处理 设置edge
文章浏览阅读2k次。目录时间/日期操作符日期/时间函数EXTRACT函数综合示例时间/日期操作符操作符 例子 结果 + date '2011-09-28' + integer '7' date '2011-10-05' + date '2011-09-18' + interval '1 hour' timestamp '2011-09-18 0..._postgresql 获取某天的23:59:59
文章浏览阅读1.9k次。文章目录7.0 防御技术7.1 团队建设7.1.1 人员分工1. 部门负责人2. 合规管理员3. 安全技术负责人4. 渗透/代码审计人员5. 安全设备运维人员6. 安全开发7.1.2 参考链接7.2 红蓝对抗7.2.1 概念7.2.3 网络攻防演习7.2.4 侧重7.2.5 目标7.2.6 前期准备7.2.7 行动流程7.2.8 注意事项7.2.9 参考链接7.3 安全开发7.3.1 简介7.3.2 步骤1) 阶段1:培训2) 阶段2:确定安全需求3) 阶段3:设计4) 阶段4:实现5) 阶段5:验证6) _前端 实现 att&ck matrix for enterprise
文章浏览阅读5.4k次,点赞4次,收藏8次。我们使用 k8s 提供的命令行工具 kubeclt 可以很方便地使用kubectl apply -f xx.yaml从 yaml 文件创建 k8s 的资源对象,但使用 client-go 的时候,通常是使用 clientset 的 list 或 get 接口先获取集群中已有的对象,再通过修改对象的属性之后调用 update 接口去操作集群中的资源对象,若要通过 client-go 使用 yaml 文件创建新的资源对象,则不能使用 clientset 而要使用 dynamicClient,这个用起来就没有 c_client.go解析yaml部署
文章浏览阅读1.4k次。轮播图、是否自动轮播autoplay、修改轮播速度slider部分代码:index.wxml<view class="container" style=""> <!--轮播图--> <swiper class="home-swiper" indicator-dots="true" autoplay="{{autoplay}}" interval="{{..._微信小程序轮播图后端
文章浏览阅读1.4k次,点赞26次,收藏16次。编撰而成,作者是行业专家,在自动控制领域有独特建树,从事过十余个行业的相关项目,因此,你从本书不仅可以学习PLC1200的应用,其中的工作和实践经验尤其难得。参与过智能制造、轨道交通、市政燃气、石油石化、智慧矿山、光伏发电、火力发电、钢铁冶金、医药制造等行业的项目,项目经验丰富。,也可供有一定基础的工程师借鉴和参考,还可作为高等院校自动化和机电专业的教材。用,基础配合实例,循序渐进,通俗易懂,内容详实且丰富,书中还在多个地方使用了。《西门子S7-1200 PLC编程与应用实例》内容由浅入深,由基础到应用,