1.计算两个日期相差月数,不满一月按一月算 (方法存在问题,待处理)
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; public static void main(String[] args) throws ParseException { System.out.println(getMonthSpace("2020-09-29", "2020-10-27")); } /** * 获取两个日期相差多少个月 */ public static int getMonthSpace(String date1, String date2) throws ParseException { int result = 0; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(sdf.parse(date1)); c2.setTime(sdf.parse(date2)); int i = c2.get(Calendar.YEAR)-c1.get(Calendar.YEAR); int month = 0; if (i<0) { month = -i*12; }else if(i>0) { month = i*12; } result = (c2.
1、数组的定义 所谓数组,是有序的元素序列。如将有限个类型相同的变量的集合命名,那么这个名称就是数组名。数组是用于存储多个相同类型数据的集合。
数组的特点: (1)数组是相同数据类型的元素的集合(int的数组不能存float,float也不能存double)
(2) 数组中各元素的存储是有先后顺序的,它们在内存中按照这个顺序连续存放到一起。内存地址(连续存储)
(3)数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。a[0]表示名字为a的数组中的第一个元素。a[1]表示名字为a的数组中的第二个元素。
示例 int a[],String b[]; 2、超过数组范围会返回什么? 如下所示,数组b一共有5个元素,我在定义的时候只赋值了两个数,会默认赋值到数组的前两位。 而剩下的会被保持为0。在cout输出的时候,因为总共遍历10次,超出了数组的大小,后面超过的5次就会返回这种乱七八糟的数字。
运行结果如下:
3.插入数据 public void insert(int loc, int n) { if (index++ < size) { //从后开始遍历,遍历到需要插入的位置,开始后移数据 for (int i=size - 1; i> loc; i--) { //数据往后移动 data[i] = data[i-1]; } //在loc位置插入n值 data[loc] = n; } else {//扩容 this.size = size * 2 + 1; int[] newData = new int[this.size]; for (int i=0; i< data.length; i++) { newData[i] = data[i]; } this.
题目:
封装一个学生类(Student):包括受保护成员:姓名、年龄、分数,完成其相关函数,以及show
在封装一个领导类(Leader):包括受保护成员:岗位、工资,完成其相关函数及show
由以上两个类共同把派生出学生干部类:引入私有成员:管辖人数,完成其相关函数以及show函数
在主程序中,测试学生干部类:无参构造、有参构造、拷贝构造、拷贝赋值、show
程序:
#include <iostream> using namespace std; class Student { protected: string name; int age; double score; public: Student(){cout<<"Stu::无参构造"<<endl;} Student(string n,int a,double s):name(n),age(a),score(s) { cout <<"Stu::有参构造"<<endl; } //析构函数 ~Student(){cout<<"Student::析构函数"<<endl;} //拷贝构造函数 Student(const Student&other):name(other.name),age(other.age),score(other.score) { cout<<"Student::拷贝构造函数"<<endl; } //父类的拷贝赋值函数 Student &operator=(const Student&other) { if(this != &other) { this->name = other.name; this->age = other.age; this->score = other.score; } cout<<"Student::拷贝赋值函数"<<endl; return *this; } void show() { cout<<"stu.name:"<<name<<endl; cout<<"stu.age:"<<age<<endl; cout<<"stu.score:"<<score<<endl; } }; class Leader { protected: string position; int wage; public: Leader(){cout<<"
看书标记——关于R语言 chapter 99.2 任务实现 【R语言 商务数据分析实战9】 chapter 9 餐饮企业综合分析
统计分析>>ARIMA预测销售额>>协同过滤算法对菜品进行智能推荐>>Apriori算法对菜品进行关联分析>>K-means算法进行客户价值分析>>决策树算法进行客户流失预测
这几种算法是不同从不同方面得到不同的结果的独立模块,根据算法的要求,对数据进行相关的数据预处理
9.2 任务实现 统计餐饮数据
# 【分组聚合:使用aggregate或者split-lapply-cbind模式】 # 设置工作目录 setwd() # [使用aggregate函数进行分组统计] # 导入数据 score <- read.csv("./data/score.csv", stringsAsFactors = FALSE) # 提取score中的gender字段 gender <- list(score$gender) # 对score1和score2列进行分组统计 aggregate(score[, c(2,3)], gender, mean) # [使用split-lapply-cbind模式进行分组统计] # 分组 sp <- split(score, score$gender, drop = TRUE) # 求score1和score2的均值 score1 <- lapply(sp, FUN = function(x) mean(x$score1)) score2 <- lapply(sp, FUN = function(x) mean(x$score2)) # 合并分组计算结果 result <- cbind(score1, score2 ) result # 【使用melt和dcast这两个函数实现透视表功能】 library(reshape2) data(airquality) airquality <- airquality[29:34, ] names(airquality) <- tolower(names(airquality)) airquality # 【用melt转换数据格式】 md <- melt(airquality, id = c("
看书标记——关于R语言 chapter 44.2 任务实现 【R语言 商务数据分析实战4】 chapter 4 财政收入预测分析
从海量数据中发现隐藏的运行模式,并提供具有决策意义的信息。变量过多会造成相关性过高,若仅用多元线性回归模型结合最小二乘估计得到的解只是局部解,或者多重共线性的出现等,分析结果就失去意义。
数据理解和预处理>>探索特征之间的相关性+用Lasso选取特征并提取>>建立单个特征的灰色(GM(1,1))预测模型和支持向量回归(SVR)预测模型>>预测和评价模型
4.2 任务实现 数据特征的相关性
连续性变量》pearson相关系数
定序变量或不满足正态分布假设的等间隔数据》Spearman秩相关系数
有序分类(等级)变量》Kendall秩相关系数
# 设置工作目录并读取数据 setwd() datafile <- read.csv("./data/data.csv") # 计算pearson相关系数,保留两位小数 round(cor(datafile, method = c("pearson")), 2) 用Lasso回归方法选取财政收入预测的关键特征(Lasso回归是一种很好的处理共线性的方法,缺点是当遇到一组高度相关的特征时,Lasso倾向于选择一个特征,进一步的改进可以结合EN等回归算法优化)。
# 设置工作目录并读取数据 setwd() datafile <- read.csv("./data/data.csv") # 数据读取 library(glmnet) # 加载glmnet包 x <- as.matrix(datafile[, 1:13]) # 转换成矩阵格式 y <- as.matrix(datafile[, 14]) gla <- cv.glmnet(x, y, nfolds = 10) gla.best <- gla$glmnet.fit # 对应的最佳模型 gla.coef <- coef(gla$glmnet.fit, s = gla$lambda.
看书标记——关于R语言 chapter 33.2.4 任务实现 【R语言 商务数据分析实战3】 chapter 3 航空公司客户价值分析
信息时代的来临使得企业营销焦点从产品转向了客户,客户关系管理(customer relationship management,CRM)成为企业核心问题,关键点就在于客户分群,千人千面,精准打击,使得资源分配更加合理。本章结合RFM模型,用K-means聚类算法将客户分群,比较分析客户价值,从而为营销策略的制定提供数据支撑。
数据清洗+特征选取+标准化等预处理>>RFM模型(得到相应指标)+K-Means算法分群>>得到具有不同价值的客户群
3.2.4 任务实现 分析热销商品>>分析商品结构
数据预处理
# 设置工作目录并读取数据 setwd() dataFile <- read.csv('./data/air_data.csv', header = TRUE) # 数据读取 # 丢弃票价为空的记录 delet.na <- dataFile[-which(is.na(dataFile$SUM_YR_1) | is.na(dataFile$SUM_YR_2)), ] # 丢弃票价为0、平均折扣系数不为0、总飞行千米数大于0的记录 index1 <- delet.na$SUM_YR_1 != 0 index2 <- delet.na$SUM_YR_2 != 0 index3 <- delet.na$avg_discount != 0 & delet.na$SEG_KM_SUM > 0 cleanData <- delet.na[which((index1 | index2) & index3), ] 建立LRFMC特征
# 构建LRFMC的5个特征 L <- as.
#include <bits/stdc++.h> using namespace std; int main() { int n, r; //n个人,r个水龙头 cin >> n >> r; int time[n]; for (int a = 0; a < n; a++) { cin >> time[a]; } sort(time, time + n); //时间从小到大排序 int minx = 0, lt_time[10001], j = 0; //存水龙头的时间,表示哪个水龙头 for (int a = 0; a < n; a++) { j++; if (j == r + 1) j = 1; //水龙头是交替更换的 lt_time[j] += time[a]; minx += lt_time[j]; } cout << minx; return 0; } 偶数降序输出
一、命令简介 lsblk命令的英文是“list block devices”,即用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等。lsblk命令包含util-linux中。通过yum provides lsblk命令查看命令对应的软件包。
不通的版本命令参数可能略有差异,此博文示例环境说明:
1.操作系统:centos 7.6。
2.lsblk命令版本:2.23.2。
二、使用示例 1、获取命令帮助 :
2、查看命令版本:
[root@test1 ~]# lsblk -V lsblk from util-linux 2.23.2 3、列表所有块设备:
[root@test1 ~]# lsblk -a NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 300M 0 part /boot ├─sda2 8:2 0 2G 0 part [SWAP] └─sda3 8:3 0 37.7G 0 part / sr0 11:0 1 1024M 0 rom 4、查看scsi信息:
[root@test1 ~]# lsblk -S NAME HCTL TYPE VENDOR MODEL REV TRAN sda 0:0:0:0 disk VMware, VMware Virtual S 1.
有时,可能STM32CubeIDE会报错,如下图Failed to start GDB server。
而且点击Details也只能得知“ST-LINK初始化失败”,建议你检查线缆。
我看了一些CSDN文章再加上ST社区的内容,有以下几种可能:
1、线缆松了或者损坏,可以重新拔插一遍来排除这种问题
2、系统出错,重启即可恢复(一篇帖子里ST社区的外国开发者就是这么解决的),但是我这边的报错还是无法解决。
3、需要重启GDB服务端,在任务管理器里找ST的GDB任务,关闭它,再次进入IDE尝试。
4、需要重新安装GDB服务端,右键打开STM32CubeIDE的安装目录,找“STLinkServer”文件夹(GDB服务端修复文件存放地),右键"st-stlink-server.2.1.0-1.msi"打开设置,先“卸载”服务端,然后再次安装服务端。
5、端口那边有问题,重新安排一个端口,打开STM32CubeIDE的RUN的Run Configurations,然后点开"调试器(如果你是纯英文界面,那就不是这个名字,看图吧)",自行编写一个暂时不会被占用的端口号码,比如我写了一个65534。
然后向下滑动,使能串行线查看器,然后调整另一个端口号,如65535,然后关闭使能,最后点击APPLY
(必须点击“应用”,整个设置才会起效)
我这边问题通过换端口的方式解决了。
备注:各位也可以在ST官网查询他们的GDB数据手册,里面讲的很清楚,也讲了如何处理GDB报错的问题。
我截个图
#include <bits/stdc++.h> using namespace std; //a存放皇后位置,b标记皇后是否被占用,c,d表示对角线 int a[9], b[9], c[17], d[17]; int sum = 0; void output() { int i; sum++; cout << "sum=" << sum << endl; for (int i = 1; i <= 8; i++) cout <<<< " " << a[i]; cout << endl; } void search(int i)//第i行开始 { int j; for (j = 1; j <= 8; j++) //每行的列上有8个皇后可以选择 { if ((b[j] == 0) && c[i + j] == 0 && (d[i - j + 7]) == 0) //行,列,对角线没有别的皇后 { a[i] = j; //第i行第j列保存了皇后 b[j] = 1; //第j列被占领了 c[i + j] = 1; //占领对角线 d[i - j + 7] = 1; //占领对角线 if (i == 8) output(); else search(i + 1); b[j] = 0; c[i + j] = 0; d[i - j + 7] = 0; } } } int main() { search(1); return 0; } 单词排序
目录
说明
外键列设置后自增失效特性演示
ID不设置自增策略,报错问题和解决
设置自增策略冲突问题和解决。
说明 记录在使用SpringBoot + MyBatisPlus操作数据库以及和前端页面交互时遇到的问题和解决方式。
1.表主键字段设置外键之后,自增功能失效问题。
2.PostMan测试传入json数据后台接收时报错argument type mismatch解决。
3.yml文件配置ID自增策略为auto后导致表外键自增列添加失败问题解决。
外键列设置后自增失效特性演示 现有表 tab_student_info 和表 tab_login_info,两个表的字段:
tab_student_info-学生信息表
tab_login_info-登录信息表
登录信息表的ID设置外键映射学生信息表的ID。
给登录信息表添加记录,ID字段设置为null,查看ID是否会自增。
INSERT INTO tab_login_info VALUES(NULL,'123456') 执行该SQL语句,会报如下错误:
1452 - Cannot add or update a child row: a foreign key constraint fails (`xingshang`.`tab_login_info`, CONSTRAINT `fk_logininfo_stuinfo_id` FOREIGN KEY (`id`) REFERENCES `tab_student_info` (`id`)) 大概意思就是:该条记录无法添加或更新,因为存在外键约束。
因此就只能在添加记录时,显示的声明ID了,如下:
INSERT INTO tab_login_info VALUES(7,'123456') 添加成功: Affected rows: 1
ID不设置自增策略,报错问题和解决 用SpringBoot+MyBatisPlus 在写好表现层接口后,使用PostMan测试接口的新增记录方法:save()
获取PostMan传入的对应实体类的json数据,报错:argument type mismatch解决。
表现层接口代码:
@RestController //加入Bean 使用REST风格 响应数据 @RequestMapping("
替换单词
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
输入包括3行, 第1行是包含多个单词的字符串 s; 第2行是待替换的单词a(长度 <= 100); 第3行是a将被替换的单词b(长度 <= 100). s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you
还是用今天课上讲的那个模版
#include <bits/stdc++.h> using namespace std; int main() { string s = " ", s1 = " ", s2 = " ";//用户输入的字符串,待替换的单词,被替换的单词 vector<string> word; getline(cin, s); cin >> s1; cin >> s2; s = s + ' '; int x = 0; for (int a = 0; a < s.
温度统计
现有一段时间的温度数据,请统计指定温度出现的次数。
输入
第一行一个整数n,表示温度数据的个数。(0 < n ≤ 200) 第二行n个整数,以空格分隔,每个整数表示一个温度,温度的范围大于等于0,小于等于40。 第三行一个整数,表示需要查询的温度t。(0 ≤ t ≤ 40)
输出
输出一个整数,表示温度t出现的次数。
样例输入
10
18 19 21 17 20 18 21 21 22 21
21
样例输出
4
考点:对一维数组操作
核心:判断+计数
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int arr[n];//存一段时间的温度 for (int a = 0; a < n; a++) cin >> arr[a]; int t, count = 0; //指定的温度,计数器 cin >> t; //指定的温度 for (int b = 0; b < n; b++) { if (arr[b] == t) count++; } cout << count; return 0; } 序列排序
VS2017编译mbsystem5.7.8的bsio库
报了一个C1853错误:
预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
搜索了一下问题,有几篇博文介绍了:
C/C++混合编程出现:预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)问题的解决方案_puppet_master的博客-CSDN博客
解决Visual C++ 混合编译C和C++文件时的错误fatal error C1853_code_future的博客-CSDN博客_混合 编译 c 文件 和 c++文件报错
解决:预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)_足球中国的博客-CSDN博客_预编译头文件来自编译器的早期版本
看了半天,大概明白是怎么回事。
解决方法:
(1)先创建与预编译头文件,选择创建(/Yc),编译,生成了预编译头文件
(2)选择使用(/Yu),编译就可以了
List对象数组转为tree 代码是自己写的,今天学习来的。下一步,写成工具类。
pom里面加上:阿里的fastjson <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> </dependency> import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; /** * <p></p> * * @package: com.tree * @class: TreeNode1 * @date: 2018/3/27 * @author: jcroad() * @since 1.0 */ public class TreeNode { private Integer id; private Integer pid; private String name; private List<TreeNode> children; TreeNode(Integer id, Integer pid, String name) { this.id = id; this.pid = pid; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.
其实设置Qpushbutton的大小的方式有两种,一种是通过代码的方式,另一种就是通过UI界面的形式进行设置:
一、通常比较常见的通过UI界面中来进行设置,一般默认的情况下设置如图所示:
修改大小之后,如图所示,这样就固定住了大小:
二、通过代码来实现:
在构造函数中或者你想要进行加的地方加上这样一句代码:
ui->pushButton->setFixedSize(100,100); 后面的100,100分别代表的是长和宽
关于QPushButton的详细介绍,可以参考这篇:
QT入门Buttons之QPushButton_Littlehero_121的博客-CSDN博客
为了不让用户在使用小程序时造成困扰,微信小程序规定页面路径只能是五层,请尽量避免多层级的交互方式。
页面跳转的话就涉及到了多个页面层级
第一种:wx.navigateTo(OBJECT)
保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面。
OBJECT参数说明:
参数 类型 必填 说明
url String 是 需要跳转的应用内页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 ‘path?key=value&key2=value2’
goto: function (e) { let a =e.currentTarget.dataset.id wx.navigateTo({ url: '../index/index?id'+id }) } 另一个页面在 onLoad 接参数
onLoad(options) { // console.log(options.id); let id =options.id }, 第二种:wx.redirectTo(OBJECT)
关闭当前页面,跳转到应用内的某个页面。
OBJECT参数说明:
参数 类型 必填 说明
url String 是 需要跳转的应用内页面的路径
goto: function (e) { let a =e.currentTarget.dataset.id wx.navigateTo({ url: '../index/index?id'+id }) } 第三种:wx.navigateBack(OBJECT)
关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()) 获取当前的页面栈,决定需要返回几层。
OBJECT参数说明:
参数 类型 默认值 说明
需求要求是单选操作,再次点击取消勾选
Vue中的事件修饰符:
1.prevent:阻止默认事件;
2.stop:阻止事件冒泡;
3.once:事件只触发一次;
4.capture:使用事件的捕获模式;
5.self:只有event.target是当前操作的元素时才触发事件;
代码
<div> <el-radio-group v-model="ruleForm.radio2"> <el-radio :label="'FACE'" @click.prevent="radioChange('FACE')">面容</el-radio> <el-radio :label="'FINGERPRINT'" @click.prevent="radioChange('FINGERPRINT')">指纹</el-radio> <el-radio :label="'IC'" @click.prevent="radioChange('IC')">刷卡 </el-radio-group> </div> js代码
const radioChange = (e) => { e === data.ruleForm.radio2 ? (data.ruleForm.radio2 = "") : (data.ruleForm.radio2 = e); } vue2中的写法
(.native修饰符在vue3中已经移除)
<div> <el-radio-group v-model="ruleForm.radio2"> <el-radio :label="'FACE'" @click.native.prevent="radioChange('FACE')">面容</el-radio> <el-radio :label="'FINGERPRINT'" @click.native.prevent="radioChange('FINGERPRINT')">指纹</el-radio> <el-radio :label="'IC'" @click.native.prevent="radioChange('IC')">刷卡 </el-radio-group> </div> radioChange = (e) => { e === this.ruleForm.radio2 ? (this.ruleForm.radio2 = "") : (this.
基于asp+access的学生成绩查询系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的学生成绩查询系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。
需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
基于asp+access的学生成绩查询系统设计与实现(毕业论文+程序源码)1、项目简介2、资源详情3、关键词:4、毕设简介5、资源下载 1、项目简介 学生成绩查询系统成为教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。可以说它是完全为学生朋友服务的系统,并且适用于各所高校。 2、资源详情 项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:16010个字49页
包含内容:整套源码+完整毕业论文
3、关键词: asp access 成绩查询 4、毕设简介 提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
第一章 绪论
1.1背景
省略
1.2目的
对于本系统,我们需要实现以下一些以下主要功能:
1.学生查询功能:为了方便学生查找成绩等信息,将所有信息按照需要进行分类。这样学生就能很方便的找到自己需要的信息。
2.添加功能:管理员可以通过填写表格的形式输入学生成绩等相关信息。系统可以自动避免重复信息。
3.修改功能:管理员可以对数据库中的信息进行修改。系统能够通过管理员给出的条件查找出所要修改的信息,对修改后的信息进行保存,并自动查找是否是重复信息。
4.删除功能:管理员可以对数据进行删除操作。系统能够通过管理员给出的条件查找出要删除的信息,并提示是否确定删除,如果确定删除,则把相关信息从数据库中删除掉。
5.管理员查询功能:管理员可以通过条件选择查询所有信息,并进行排序。
1.3实现
利用DREAMWEAVER和简单的ASP语言就可以实现本系统。从系统开发的硬件、软件角度,分析系统设计所需软件与硬件的环境,并介绍系统开发设计的步骤及开发原则。使用系统的工作人员,除了需要具备在Microsoft Windows平台上使用个人计算机的知识,并不需要特别的技术能力。
1.Web信息处理模式
Web信息处理模式是指将信息资源以页面的方式保存在WWW服务器中。传统的网页信息是相对静止的页面(称为静态网页),网页间的联系主要通过超链接实现。映客为了让网页动起来,必须在HTML页面中嵌入程序,客户在浏览器端输入参数,提交给Web服务器,Web服务器会启动相应的程序完成必要的处理,然后将结果通过Web服务器以HTML页面的形式传送给浏览器,实现信息的自动发布,即动态网页技术。
2.ASP技术
ASP中使用的程序语言有VbScrip和JavaScript,ASP默认使用VbScript语言,如果要使用JavaScript,需在程序开始处加入语句< Script Language=JavaScript RunAt=Server >。ASP能够引用ADO(ActiveX Data Object)存取Web数据库,可以通过ActiveX服务器组件扩充它的功能。
3.SQL语言与数据库
任何访问数据库的应用程序都必须使用SQL语言。ODBC是一个与数据库无关的应用程序编程接口,通过这个接口,应用程序能访问不同厂商提供的服务器数据库。每一种格式的数据库必须提供专门的ODBC驱动程序,当应用程序想存取某一数据库时,即挂上这种格式的驱动程序,然后使用标准的SQL语句操作数据。至于如何转换成具体DBMS(关系型数据库管理系统)所支持的格式,则由对应的ODBC驱动程序去完成。
4.ASP访问Web数据库
当浏览器向Web服务器要求下载檔时,Web服务器会判断下载的檔是否为.asp文件。如果不是,则直接下载,否则会判断.asp檔中是否含有Script代码。如果含有Script代码,则加以解释执行。若在执行过程中Script程序使用了ADO对象,Web服务器会启动对应的ODBC驱动程序。启动ODBC驱动程序后,程序可以直接利用ADO对象访问数据库,以达到存取数据库的目的。
第二章 系统开发运行环境
2.1网页设计Dreamweaver工具简介
学生成绩查询系统中需要使用网页设计,而现在使用最多的网页设计工具主要有两个,一个是微软的FrontPage,另一个就是Macromedia公司的Dreamweaver。
通过对两者优缺点的比较以及本系统的需求发现,虽然微软的FrontPage 号称最好的所见即所得的网页编辑器,然而一旦与Dreamweaver相比,几乎可以肯定,一定会将FrontPage抛诸脑后。Dreamweaver提供了强大的设计工具,在不用书写一行代码的情况下,就能够快速创建各种极具动态HTML特性的网页,例如动画和分层等;利用Dreamweaver的目标浏览器检查特性,可以创建兼容性极好的网页,以适用于各种平台和各种浏览器;利用Dreamweaver的Roundtrip HTML技术,用户可以精确控制Dreamweaver生产的网页源代码,例如,在可视编辑器中进行编辑时,可以在HTML检视器中同步地看到Dreamweaver到底为您生成了什么样的源代码,从而杜绝了盲人摸象的弊病。在编辑由其他网页创作工具所生成的网页时,Dreamweaver会尊重其他工具所生成的原代码,不会任意修改它,当然,如果需要,Dreamweaver也仍然可以帮助您“净化”其他工具所生成的垃圾代码。
Dreamweaver是完全可定制的,您可以创建自己的对象和命令,修改菜单和快捷键,甚至可以通过自己书写JavaScript代码来为Dreamweaver创建新的行为和属性面板,以增强Dreamweaver本身的能力。
2.2 ASP语言概述
ASP是一种服务器端执行的脚本语言,在学习、开发、测试ASP之前,安装、配置服务器。服务器可以分为两类,一种是Web服务器, PWS或者IIS;另一种是数据库服务器,常用的数据库服务器一般使用Access或者SQL server。
安装和使用ASP服务器,ASP是在服务器端运行;使用服务器,鉴定自己的劳动成果。
运用HTTP协议和HTML。
ASP用的控制语言是VBScript和Jscript,运用VBScript。
系统开发软件的使用,frontpage、 dreamweaver等的使用,它们是集成的Web应用软件开发系统,包括开发、发行、以及管理数据库驱动的Web应用软件所需的功能。
本系统设计以整个网络Windows操作系统为实现的核心。
ASP环境的配置:ACCESS数据库的安装及配置。
应用软件:dreamweaver
2.3 ASP技术的运用
目录
一、printf()函数格式字符
二、printf()函数修饰符
三、关于正负号
关于 printf函数 的各种打印形式,我刚开始学的时候也是懵懵懂懂,所以在此收集整理了这些printf函数 的各种不同的打印方式,希望能帮助到各位C友
一、printf()函数格式字符 格式转换字符
含义
举例
%d,%i
以十进制整数输出
int a=65;printf(“%d”,a) //65
%c
输出一个字符型数据
int a=65;printf(“%c”,a) //A
%s
输出一个字符串
printf(“%s”,“abcd”) //abcd
%e,%E
以指数形式输出一个浮点型数据(小数位数缺省值为6位)
float x=984.235497426;
printf("%e",x); //9.842355e+002
%f(有效数字6-7位)
以十进制小数形式输出一个浮点型数据(小数位数缺省值为6位)
float x=984.235432426;
printf("%f",x); //984.235413
%g,%G
按照%e,%f输出宽度较短的格式输出,不输出无意义的0
float x=23.240;
printf("%g",x); //23.24
二、printf()函数修饰符 修饰符
功能
示例
m
数据最小宽度.
>m,正常输出;
<m ,左补空格.
int a=36;printf("a=%5d\n",a);
//□□□36
.n
对实数,表示输出n位小数;
对字符串,表示截取的字符个数
float a=123.456;
printf("a=%8.2f\n",a);//□□123.46
0
小于指定宽度左边补0。
int b=789;
printf("b=%05d\n",b);//00789
如:在C程序的格式输出中,%d表示输出十进制整数,%6.2f表示输出长度为6位,有2位小数的实数。printf("s=%-5.3s","student");的输出结果是s=stu 。