当前位置: 首页 > news >正文

数据库网站建设公司做服装网站设计书

数据库网站建设公司,做服装网站设计书,wordpress改投票系统,上海建站模板网站这个玩意我做了两个#xff0c;一个是安卓app#xff0c;一个是Windows程序。代码并非全部都是由我从无到有实现#xff0c;只是实现了我想要的功能。多亏了巨人的肩膀#xff0c;开源万岁#xff01;#xff01;#xff01; 我把程序放到GitHub上#xff0c;需要的可…这个玩意我做了两个一个是安卓app一个是Windows程序。代码并非全部都是由我从无到有实现只是实现了我想要的功能。多亏了巨人的肩膀开源万岁 我把程序放到GitHub上需要的可自取。 下面我分别对安卓app版本和Windows程序版本进行简要技术整理 安卓app: 首先需要对安卓环境进行配置这个不同的QT版本对应不同的SDK,NDK那些玩意在这里不做详细解析。 配置环境完成以后就可以使用工程了烧入手机以后呈现出来的效果是这样的。 整个工程的框架是 1、ui页面绘制 ui页面有两个 还有一个就是上面的效果图 主要是一些PushButton、Lable、CharView控件 2、控件槽函数的设计 2.1、第二张图的“全国大学生电子设计大赛上位机”的PushButton void Widget2::on_MenuBt1_clicked() {if(Widget::flag 0)//通过判断静态成员变量flag来判断是否创建了Widget{Widget *first new Widget;//创建一个新的 Widgetfirst-setGeometry(this-geometry());返回当前 Widget2 对象的位置和大小信息用于Widget的呈现first-show();//将新创建的 Widget 对象显示在屏幕上}this-close();//关闭Widget2 } 这段代码的功能就是按下按钮以后创建一个Widget并关闭Widget2实现简单的跳转功能。 2.2、按下开启服务器按钮之后的槽函数 void Widget::on_pushButton_Open_clicked() {if(net_flag 0)//检查是否连接网络{if(ui-lineEdit_IP-currentText() ! )//如果IP地址栏不为空{QString str ui-lineEdit_IP-currentText();//收集当前IP地址栏的IP地址if(isIpAddr(str))//判断IP地址是否有效{address.setAddress(str);//设置收集的IP地址为当前IP地址if(ui-lineEdit_Port-text() ! )//判断端口栏是否为空{port ui-lineEdit_Port-text().toUInt();//设置当前端口栏的数字为端口号并且转为uint16_t格式net_flag 1;//网络连接标志tcpServer-listen(address,port);//传入IP地址和端口号开始监听connect(tcpServer,SIGNAL(newConnection()),this,SLOT(TCPnewconnect_slot()));//当连接成功后将 newConnection 信号连接到 this即 Widget 对象的 TCPnewconnect_slot() 槽函数ui-label_show-setText(正在连接...);//ui页面上的label_show发送字符串正在连接...}else//与上面对应如果端口栏为空{QMessageBox::warning(NULL, QStringLiteral(警告), QStringLiteral(端口号不能为空),QMessageBox::Ok | QMessageBox::Ok);}}else//与上面对应如果IP地址无效{QMessageBox::warning(NULL, QStringLiteral(警告), QStringLiteral(IP不合法),QMessageBox::Ok | QMessageBox::Ok);//弹窗警告}}else//与上面对应如果为IP地址栏为空{QMessageBox::warning(NULL, QStringLiteral(警告), QStringLiteral(IP不能为空),QMessageBox::Ok | QMessageBox::Ok);//弹窗警告}} } 这个槽函数的作用是根据IP地址栏和端口号栏的输入信息判断是否有效以后根据提供的IP地址和端口号开启监听并通过connect函数开启一个TCP server如果连接客户端成功则转到另外一个槽函数TCPnewconnect_slot()并且输出“连接成功”的信息。 TCPnewconnect_slot() void Widget::TCPnewconnect_slot() {tcpSocket tcpServer-nextPendingConnection();//获取新的客户端连接并将返回的 QTcpSocket 对象赋值给 tcpSocket 成员变量connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(TCPreadyread_slot()));//当有TcpSocket的readyRead()信号也就是客户端有数据发送上来的时候连接当前Wiget的槽函数TCPreadyread_slot()ui-label_show-setText(网络已连接);//标签显示 } 这个槽函数收到客户端发送的数据以后再跳转到TCPreadyread_slot()槽函数这个槽函数是数据处理这块的我到第四大点的时候再详细讲。 2.3、按下关闭服务器按钮以后的槽函数 void Widget::on_pushButton_Close_clicked() {if(net_flag 1)//判断网络是否连接如果是往下{tcpSocket-close();//关闭tcpSocket断开与当前客户端的连接tcpServer-close();//关闭tcpServer停止监听新的客户端连接disconnect(tcpServer,SIGNAL(newConnection()),this,SLOT(TCPnewconnect_slot()));//将tcpServer的newConnection()信号与槽函数TCPnewconnect_slot()断开连接disconnect(tcpSocket,SIGNAL(readyRead()),this,SLOT(TCPreadyread_slot()));//将tcpSocket的readyRead()信号与槽函数TCPreadyread_slot()断开连接net_flag 0;//将flag置为0表示网络断开}ui-label_show-setText(连接已关闭);//输出标签信息 } 这个槽函数是断开对客户端的监听和连接断开各种信号与相应槽函数的连接关闭服务器。 3.4、按下扫描按键以后的槽函数 void Widget::on_Scan_clicked() {ui-lineEdit_IP-clear();//IP地址栏全部清空QListQString strIpAddress;QListQHostAddress ipAddressesList QNetworkInterface::allAddresses();//获取主机所有IP地址并存放在ipAddressesList这个列表里// 获取第一个本主机的IPv4地址int nListSize ipAddressesList.size();for (int i 0; i nListSize; i){if (ipAddressesList.at(i) ! QHostAddress::LocalHost ipAddressesList.at(i).toIPv4Address())//排除主机IP地址并且保证IP地址是IPV4格式{strIpAddress.append(ipAddressesList.at(i).toString());//将满足条件的IP地址放入strIpAddress里面// break;}}// 如果没有找到则以本地IP地址为IPif (strIpAddress.isEmpty())strIpAddress.append(QHostAddress(QHostAddress::LocalHost).toString());ui-lineEdit_IP-addItems(strIpAddress);//把IP地址显示到IP地址栏} 这个槽函数是用于查找设备当中的IP地址并且将它显示到IP地址栏。 3、绘图板块的设计 //设置坐标轴chart2-addSeries(line2);// 添加数据线 line2 到图表 chart2 中chart2-setTheme(QChart::ChartThemeQt);//设置图表 chart2 的主题为 Qt 默认的主题line2-setName(时域波形);//数据线名称line2-setColor(Qt::red);//数据线的颜色//创建两个 QValueAxis 对象 axisX2 和 axisY2用于设置 X 轴和 Y 轴的显示样式和属性QValueAxis *axisX2 new QValueAxis;QValueAxis *axisY2 new QValueAxis;axisX2-setLabelFormat(%.0f);//显示格式为 %.0f即只显示整数部分axisX2-setLabelsAngle(45);//标签角度为 45 度x轴或者y轴的刻度标签axisX2-setLabelsColor(Qt::blue);//标签颜色axisY2-setLabelFormat(%.0f);axisY2-setLabelsAngle(45);axisY2-setLabelsColor(Qt::blue);axisX2-setRange(0,200);//x轴的范围axisY2-setRange(0,255);//y轴的范围axisX2-setGridLineVisible(true);//设置网格线是否可见axisX2-setGridLineColor(Qt::black);//网格线的颜色axisX2-setMinorTickCount(1);//精度设置为1axisX2-setMinorGridLineColor(Qt::black);//设置小网格为黑色axisX2-setMinorGridLineVisible(true);//设置小网格可见axisX2-setLabelsVisible(false); //设置刻度是否显示axisY2-setGridLineVisible(true);axisY2-setGridLineColor(Qt::black);axisY2-setMinorTickCount(1);axisY2-setMinorGridLineColor(Qt::black);axisY2-setMinorGridLineVisible(true);axisY2-setLabelsVisible(false); //设置刻度是否显示//将 X 轴和 Y 轴添加到图表 chart2 中chart2-addAxis(axisX2,Qt::AlignBottom);chart2-addAxis(axisY2,Qt::AlignLeft);chart2-layout()-setContentsMargins(0, 0, 0, 0);//设置外边界全部为0chart2-setMargins(QMargins(0, 0, 0, 0));//设置内边界全部为0chart2-setBackgroundRoundness(0);//设置背景区域无圆角line2-attachAxis(axisX2);//将数据线 line2 附加到 X 轴 axisX2line2-attachAxis(axisY2);//将数据线 line2 附加到 Y 轴 axisY2ui-widget_2-setChart(chart2);//显示图表 chart24、数据处理板块设计 根据第二大点所遗留下来的问题TCPnewconnect_slot()槽函数收到客户端发送的数据以后再跳转到TCPreadyread_slot()槽函数。数据处理就在TCPreadyread_slot()里面进行。 extern uint8_t cmd_buffer[A_CMD_MAX_SIZE]; static uint16_t size 0; void Widget::TCPreadyread_slot() {uint16_t size 0;//定义两个数组QByteArray temp1;QByteArray temp2;int iterationCount 0; // 用于计数循环迭代次数do {temp2 temp1;//先将temp1中的数传递给temp2temp1 tcpSocket-readAll();//temp1读客户端发送的数据iterationCount;//次数加一qDebug() Iteration: iterationCount;打印次数qDebug() Data read in this iteration: temp2;//打印temp2里面的值} while (!temp1.isEmpty());//当temp1里面没有数据时退出循环qDebug() temp2 len is: temp2.length();//打印数据的长度// 将QByteArray转换为QStringQString dataStr QString::fromUtf8(temp2);//把数组里面的数据转化为字符串// 使用split函数按逗号拆分字符串得到QStringListQStringList strList dataStr.split(,);// 创建一个整型数组用于存储拆分后的数字QListint dataArray;// 遍历QStringList将每个字符串转换为整数并存储到dataArray中//注意这里和C语言的用法不太一样它的初始化部分和执行条件以及迭代部分会自动检测更新for (const QString str : strList) {bool ok;//布尔变量用于存储ture和false两个值int number str.toInt(ok);//如果成功则布尔变量返回ture并且把值存放在number中否则布尔变量为falseif (ok) {//如果布尔变量为turedataArray.append(number);//将number里面的值放入dataArray数组里面}}// 输出拆分后的整数数组for (int number : dataArray) {//输出dataArray里面的数qDebug() number;}qDebug() dataArray len is: dataArray.length();//长度for(int i 0;idataArray.length();i){A_queue_push(dataArray[i]); //添加指令里面的数据size A_queue_find_cmd(cmd_buffer,A_CMD_MAX_SIZE); //从缓冲区中获取一条指令 这里会有个返回值size,如果size0代表没有一条完整的指令自然叶无法进入指令处理函数里面去一条完整的指令包括帧头和帧尾以及数据体 if(size0) //接收到指令{qDebug() Contents of cmd_buffer:;for (uint16_t i 0; i size; i) {qDebug() static_castint(cmd_buffer[i]);}qDebug() size: size;A_ProcessMessage(cmd_buffer, size,ui); //指令处理}}} 经过上面的分析我们知道数据处理主要是对指令的处理。而指令处理主要包括以下三个函数 A_queue_push(dataArray[i]); A_queue_find_cmd(cmd_buffer,A_CMD_MAX_SIZE); A_ProcessMessage(cmd_buffer, size,ui); 下面逐个来分析 A_queue_push(dataArray[i]); #define A_CMD_HEAD 0XEE //帧头 #define A_CMD_TAIL 0xFFFCFFFF //帧尾这里需要注意以下不是一个数喔不然数据溢出没法判断是不是帧尾咯typedef struct A_QUEUE {uint16_t _head; //队列头uint16_t _tail; //队列尾uint8_t _data[A_QUEUE_MAX_SIZE]; //队列数据缓存区 } A_QUEUE;static A_QUEUE A_que {0,0,0}; //指令队列 static uint32_t A_cmd_state 0; //队列帧尾检测状态 static uint16_t A_cmd_pos 0; //当前指令指针位置/*! * \brief 清空指令数据 */ void A_queue_reset() {A_que._head A_que._tail 0;A_cmd_pos A_cmd_state 0; } /*! * \brief 添加指令数据 * \detial 串口接收的数据通过此函数放入指令队列 * \param _data 指令数据 */ void A_queue_push(uint32_t _data) {uint16_t pos (A_que._head1)%A_QUEUE_MAX_SIZE; //每来一个数据队列头就会1if(pos!A_que._tail) //非满状态{A_que._data[A_que._head] _data; //数据依次进入依次存放在队列里面A_que._head pos; //队列头每来一个数据1的基础// 添加调试信息qDebug() A_queue_push: Data added to queue: static_castint(_data);qDebug() A_queue_push: Queue head: A_que._head Queue tail: A_que._tail;}} A_queue_push(dataArray[i]);的作用是在dataArray数组遍历的条件下将数组里面的数据依次放入队列中。 A_queue_find_cmd(cmd_buffer,A_CMD_MAX_SIZE); //从队列中取一个数据 static void queue_pop(uint8_t* _data) {if(A_que._tail!A_que._head) //非空状态{*_data A_que._data[A_que._tail];A_que._tail (A_que._tail1)%A_QUEUE_MAX_SIZE;} }//获取队列中有效数据个数 uint16_t A_queue_size() {return ((A_que._headA_QUEUE_MAX_SIZE-A_que._tail)%A_QUEUE_MAX_SIZE); } /*! * \brief 从指令队列中取出一条完整的指令 * \param cmd 指令接收缓存区 * \param buf_len 指令接收缓存区大小 * \return 指令长度0表示队列中无完整指令 */ uint16_t A_queue_find_cmd(uint8_t *buffer,uint16_t buf_len)//qdata uint8_t qsize uint16_t {uint16_t cmd_size 0;uint8_t _data 0;while(A_queue_size()0)//当队列的长度有效数字个数大于0时往下{//取一个数据queue_pop(_data);if(A_cmd_pos0_data!A_CMD_HEAD) //指令第一个字节必须是帧头否则跳过{qDebug() Skipping data: static_castint(_data);continue;}// 输出当前取出的数据和指令指针位置qDebug() A_queue_find_cmd: Current data: _data A_cmd_pos: A_cmd_pos;if(A_cmd_posbuf_len) //防止缓冲区溢出这里传入的形参是A_CMD_MAX_SIZE一条指令最大的大小也就是2048buffer[A_cmd_pos] _data;//每进入一次while循环数据会依次更新到buffer里面A_cmd_state ((A_cmd_state8)|_data); //拼接最后4个字节组成一个32位整数如果不是最后四个字节那自然无法进入下面的if语句qDebug() A_cmd_state: A_cmd_state;//最后4个字节与帧尾匹配得到完整帧if(A_cmd_stateA_CMD_TAIL){cmd_size A_cmd_pos; //指令字节长度A_cmd_state 0; //重新检测帧尾巴A_cmd_pos 0; //复位指令指针#if(CRC16_ENABLE)//去掉指令头尾EE尾FFFCFFFF共计5个字节只计算数据部分CRCif(!CheckCRC16(buffer1,cmd_size-5)) //CRC校验return 0;cmd_size - 2; //去掉CRC162字节 #endifqDebug() Found complete command! Command size: cmd_size;return cmd_size; //返回指令的大小}}return 0; //没有形成完整的一帧 } 这个函数是寻找一条完整的指令如果寻找成功则返回指令的字节大小。解析里面有说一条完整的指令需要帧头和帧尾如果不满足则无法获取cmd_size的值也就无法进入数据处理函数A_ProcessMessage(cmd_buffer, size,ui);所以发送指令的时候一定要按照标准的格式来发送。我的数据格式如下 int touAndCmd[] {0XEE,0x03,0,1};//帧头以及以下id号这篇代码下面就讲int dataBuffer[] {10,20,30,40,50,60,70,80,90,100,110,100,90,80,70,60,50,40,30,20,10};int zhenwei[] {0xFF,0xFC,0xFF,0xFF};//真尾别傻傻的0xFFFCFFFF了手动狗头int len sizeof(touAndCmd)/sizeof(touAndCmd[0]);int len1 sizeof(dataBuffer)/sizeof(dataBuffer[0]);int len2 sizeof(zhenwei)/sizeof(zhenwei[0]);//下面自己看了就是发送一串数据然后以逗号隔开就完了for(int i 0;ilen;i){printf(%d,,touAndCmd[i]);}for(int k 0;k5;k){for(int i 0;ilen1;i){printf(%d,,dataBuffer[i]);}}for(int m 0;mlen2;m){if(m (len2-1)){printf(%d,zhenwei[m]);}else{printf(%d,,zhenwei[m]);}} 好了最后一步 A_ProcessMessage(cmd_buffer, size,ui);怎么处理我们发送上来的数据 #include qglobal.h #include cmd_queue.h #include process_fun.h #include widget.h uint8_t cmd_buffer[A_CMD_MAX_SIZE]; void A_ProcessMessage(/*A_PCTRL_MSG */uint8_t msg[2048], uint16_t size,Ui::Widget *dis) {/*这是cmd_type的宏定义其实用不上这么多 enum A_CtrlType {A_kCtrlUnknown0x00,A_kCtrlButton0x01, //按钮A_kCtrlText 0x02, //文本A_kCtrlGraph 0x03, //曲线图控件A_kCtrlTable 0x04, //表格控件A_kCtrlMenu 0x05, //菜单控件A_kCtrlSelector 0x06, //选择控件 }; */uint8_t cmd_type msg[1]; //命令类型uint8_t screen_id msg[2]; //画面IDuint8_t control_id msg[3]; //控件ID //调试信息打印qDebug() cmd_type:msg[1];qDebug() screen_id:screen_id;qDebug() control_id:control_id;switch(cmd_type){case A_kCtrlButton: //按钮控件A_NotifyButton(screen_id,control_id);break;case A_kCtrlText: //文本控件 // A_NotifyText(screen_id,control_id,msg-param,dis);A_NotifyText(screen_id,control_id,msg[4],dis);break;case A_kCtrlGraph: // A_NotifyGraph(screen_id,control_id,len,msg-param[2]); //画图控件A_NotifyGraph(screen_id, control_id, size - 8, msg[4]); // 注意减去帧头、帧尾和控件ID的长度default:break;} }void A_NotifyText(uint16_t screen_id, uint16_t control_id, uint8_t *str,Ui::Widget *dis) {if(screen_id 0)//判断输入的第二个数是否为0如果是就可以为那些基波啥啥啥的赋值了{if(control_id 3){Widget::updatedata3(str,1,dis);}else if(control_id 4){Widget::updatedata3(str,2,dis);}else if(control_id 5){Widget::updatedata3(str,3,dis);}else if(control_id 6){Widget::updatedata3(str,4,dis);}else if(control_id 7){Widget::updatedata3(str,5,dis);}else if(control_id 8){Widget::updatedata3(str,6,dis);}} } void A_NotifyButton(uint16_t screen_id, uint16_t control_id) {if(screen_id 0){if(control_id 10){}else if(control_id 3){}} }void A_NotifyGraph(uint16_t screen_id, uint16_t control_id, uint16_t length,uint8_t *str) {int i 0;float temp 0;if(screen_id 0){ // if(control_id 0)//这里因为我只用了一个画布所以这里就不要啦 // { // qDebug()lengthendl; // qDebug()str; // while(ilength) // { // temp str[i]; // Widget::updatedata(temp); // } // } // elseif(control_id 1){while(ilength){temp str[i];Widget::updatedata2(temp);//Widget中不断进行updatedata2这个函数}}} }好的到这里所有代码基本分析完毕了由上面我们知道updatedata2是画布的updatedata3是各个空白框的。下面最后来看一下这两个函数 void Widget::updatedata2(float input) {static int i20;//先整个作用在这个函数里边的静态变量static QVectorQPointF data0line2-pointsVector();//QVectorQPointF 类型的容器用于存储图表的数据点//控制数值在0-255之间if(input0)input 0;if(input255)input 255;if(i21024){data0.append(QPointF(i2,input));//在 data0 中添加一个新的数据点x 坐标为 i2y 坐标为 inputi2;line2-replace(data0);//将更新后的数据点更新到 line2 图表中}else//如果数据量超过1024{QVectorQPointF data2;//再来一个容器for(int j 0;j1023;j){data2.append(QPointF(j,data0.at(j1).y()));//将 data0 中的数据点从索引 1 开始拷贝到 data2相当于删除data0中的数据}data2.append(QPointF(1023,input));//data2添加新的数据点x 坐标为 1023y 坐标为 inputdata0 data2;//更新data0中的数据line2-replace(data0);///将更新后的数据点更新到 line2 图表中}} updatedata3: void Widget::updatedata3(uint8_t* input,int index,Ui::Widget *dis) {QByteArray qstr;//定义一个数组int i 0;for(i;isizeof(input);i)//遍历input里面的数据{qstr.append(input[i]);//qstr存放input里面的数据}QString str QString(qstr);//将 QByteArray 类型的 qstr 转换为 QString 类型的 strqDebug()str;switch(index)//index不同写入不同的空白框{case 1:{dis-lineEdit-setText(str);break;}case 2:{dis-lineEdit_2-setText(str);break;}case 3:{dis-lineEdit_3-setText(str);break;}case 4:{dis-lineEdit_4-setText(str);break;}case 5:{dis-lineEdit_5-setText(str);break;}case 6:{dis-lineEdit_6-setText(str%);break;}} } Windows程序和这个大同小异就不具体介绍了看懂上面这些Windows程序肯定莫得问题我后面再把源码附上
文章转载自:
http://www.morning.dnmzl.cn.gov.cn.dnmzl.cn
http://www.morning.rwzqn.cn.gov.cn.rwzqn.cn
http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn
http://www.morning.lqtwb.cn.gov.cn.lqtwb.cn
http://www.morning.hgsylxs.com.gov.cn.hgsylxs.com
http://www.morning.nfpct.cn.gov.cn.nfpct.cn
http://www.morning.qkbwd.cn.gov.cn.qkbwd.cn
http://www.morning.kdldx.cn.gov.cn.kdldx.cn
http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn
http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn
http://www.morning.qymqh.cn.gov.cn.qymqh.cn
http://www.morning.prsxj.cn.gov.cn.prsxj.cn
http://www.morning.jgcxh.cn.gov.cn.jgcxh.cn
http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn
http://www.morning.xclgf.cn.gov.cn.xclgf.cn
http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn
http://www.morning.nzfyx.cn.gov.cn.nzfyx.cn
http://www.morning.hwprz.cn.gov.cn.hwprz.cn
http://www.morning.skbbt.cn.gov.cn.skbbt.cn
http://www.morning.rgmd.cn.gov.cn.rgmd.cn
http://www.morning.zpqbh.cn.gov.cn.zpqbh.cn
http://www.morning.rkfgx.cn.gov.cn.rkfgx.cn
http://www.morning.mytmn.cn.gov.cn.mytmn.cn
http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn
http://www.morning.ffptd.cn.gov.cn.ffptd.cn
http://www.morning.ptzf.cn.gov.cn.ptzf.cn
http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn
http://www.morning.cthrb.cn.gov.cn.cthrb.cn
http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn
http://www.morning.krhkb.cn.gov.cn.krhkb.cn
http://www.morning.owenzhi.com.gov.cn.owenzhi.com
http://www.morning.jfxth.cn.gov.cn.jfxth.cn
http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn
http://www.morning.ggnfy.cn.gov.cn.ggnfy.cn
http://www.morning.qsy38.cn.gov.cn.qsy38.cn
http://www.morning.xirfr.cn.gov.cn.xirfr.cn
http://www.morning.grbgn.cn.gov.cn.grbgn.cn
http://www.morning.krqhw.cn.gov.cn.krqhw.cn
http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn
http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn
http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn
http://www.morning.leeong.com.gov.cn.leeong.com
http://www.morning.grcfn.cn.gov.cn.grcfn.cn
http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn
http://www.morning.yqsr.cn.gov.cn.yqsr.cn
http://www.morning.xtxp.cn.gov.cn.xtxp.cn
http://www.morning.yqyhr.cn.gov.cn.yqyhr.cn
http://www.morning.tlpgp.cn.gov.cn.tlpgp.cn
http://www.morning.rwqj.cn.gov.cn.rwqj.cn
http://www.morning.wbxbj.cn.gov.cn.wbxbj.cn
http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn
http://www.morning.kzdgz.cn.gov.cn.kzdgz.cn
http://www.morning.zcwzl.cn.gov.cn.zcwzl.cn
http://www.morning.gqfks.cn.gov.cn.gqfks.cn
http://www.morning.fppzc.cn.gov.cn.fppzc.cn
http://www.morning.hdqqr.cn.gov.cn.hdqqr.cn
http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn
http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn
http://www.morning.mqbdb.cn.gov.cn.mqbdb.cn
http://www.morning.dtfgr.cn.gov.cn.dtfgr.cn
http://www.morning.dthyq.cn.gov.cn.dthyq.cn
http://www.morning.pzrpz.cn.gov.cn.pzrpz.cn
http://www.morning.gfqj.cn.gov.cn.gfqj.cn
http://www.morning.fbpdp.cn.gov.cn.fbpdp.cn
http://www.morning.rybr.cn.gov.cn.rybr.cn
http://www.morning.jmspy.cn.gov.cn.jmspy.cn
http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn
http://www.morning.wplbs.cn.gov.cn.wplbs.cn
http://www.morning.dqwykj.com.gov.cn.dqwykj.com
http://www.morning.pycpt.cn.gov.cn.pycpt.cn
http://www.morning.sbncr.cn.gov.cn.sbncr.cn
http://www.morning.hgscb.cn.gov.cn.hgscb.cn
http://www.morning.bzlsf.cn.gov.cn.bzlsf.cn
http://www.morning.xbxks.cn.gov.cn.xbxks.cn
http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn
http://www.morning.jqrp.cn.gov.cn.jqrp.cn
http://www.morning.yprjy.cn.gov.cn.yprjy.cn
http://www.morning.frqtc.cn.gov.cn.frqtc.cn
http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn
http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn
http://www.tj-hxxt.cn/news/238226.html

相关文章:

  • 红酒公司网站建设外贸哪个行业比较好做
  • 工信部网站备案通知常州微信网站建设教程
  • 建站用wordpress怎么做网站视频
  • dede程序网站如何查看百度蜘蛛网站如何做单项链接
  • 微信显示个人网站中国十大网络科技公司排名
  • 茂名市制作网站的公司小程序开发适合的应用
  • 建设网站设计论文范文兰州网站seo费用
  • 高端营销型网站制作品牌网站设计制作一般多少钱
  • 婚介网站怎么做网页制作与网站建设试题
  • 公司网站开源源码京东购物商城官网
  • 阿里云上做网站套模板怎么做做网页需要什么
  • 化州网站建设开发一款手机app的步骤
  • 网站建设有几块怎么搭建app
  • 定州市住房和城乡建设局网站广州建筑公司
  • 网站建设督查工作主持词服装设计方案
  • 网站备案免费吗北京ui及网页设计
  • 祁阳网站设计网页设计软件vscode
  • 湖南做防水堵漏工程商网站网站程序源代码
  • 网站建设与规划总结引蜘蛛网站
  • 广州网站开发哪家好中国机械加工网最新订单
  • 有关建设工程的强制性标准与抗震seo谷歌外贸推广
  • 想找人帮我做网站进一步推进网站建设
  • 天津餐饮网站建设国外浏览器入口
  • 帮助做APP的网站公司企业介绍怎么写呢
  • 展示网站源码下载wordpress 4.6.10
  • 网站备案是什么网站建站网站看看
  • 电子商务网站建设主要内容建一个c2c网站要多少钱
  • 家电网站建设南宁网站开发外包性价比
  • 魏县网站建设推广手机网站制作移动高端网站建设
  • 网畅学校网站管理系统做网站大概花多少钱