2015-CS

数据库部分

create table [EMPLOYEE](
[EmpNo] varchar(10) not null primary key,
[EmpName] varchar(10) not null,
[EmpSex] varchar(5) check([EmpSex]='男' or [EmpSex]='女'),
[EmpAge] int check([EmpAge]>0)
) create table [COMPANY](
[CmpNo] varchar(10) not null primary key,
[CmpName] varchar(10) not null
) create table [WORKS](
[EmpNo] varchar(10) not null references [EMPLOYEE]([EmpNo]),
[CmpNo] varchar(10) not null references [COMPANY]([CmpNo]),
[Salary] int check([Salary]>0)
) insert into [EMPLOYEE] values('E01','张三','女',32);
insert into [EMPLOYEE] values('E02','李四','男',28);
insert into [EMPLOYEE] values('E03','王五','女',42);
insert into [EMPLOYEE] values('E04','赵六','男',37);
insert into [EMPLOYEE] values('E05','陈七','男',51); insert into [COMPANY] values('C01','阳光科技');
insert into [COMPANY] values('C02','晨光科技');
insert into [COMPANY] values('C03','未来科技'); insert into [WORKS] values('E01','C01',3000);
insert into [WORKS] values('E01','C02',4000);
insert into [WORKS] values('E02','C02',5000);
insert into [WORKS] values('E02','C03',2500);
insert into [WORKS] values('E03','C01',3500);
insert into [WORKS] values('E04','C02',3000);
insert into [WORKS] values('E05','C03',2000);

DB.cs

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Text;
using System.Data; //DataTable 用到
using System.Data.SqlClient; //一些列数据库操作类用到 namespace test0314
{
internal class DB:IDisposable
{
private SqlConnection sqlConnection; public DB() //私有无参构造函数
{
//采用Windows身份验证,关键是Trusted_Connection=SSPI
sqlConnection = new SqlConnection(@"server=.;database=test0314;Trusted_Connection=SSPI;");
sqlConnection.Open();
}
//查询
public DataTable GetBySql(string sql)
{
SqlDataAdapter adapter = new SqlDataAdapter(new SqlCommand(sql,sqlConnection));
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
}
//修改
public void SetBySql(string sql)
{
new SqlCommand(sql).ExecuteNonQuery();
} //相当于析构函数
public void Dispose()
{
sqlConnection.Close();
}
//在C#中关闭数据库连接不能在类的析构函数中关闭,否则会抛出“内部.Net Framework 数据提供程序错误 1”的异常
//通过实现C#中IDisposable接口中的Dispose() 方法主要用途是释放非托管资源。
}
}

Intent.cs

using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using test0314;
using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace test0314
{
internal class Intent
{
//便于窗体间传送数据
//存数据的字典容器
public static Dictionary<string,Object> dict = new Dictionary<string,Object>();
}
}

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;//使用到了正则表达式
using System.Globalization; namespace test0314
{
public partial class Form1 : Form
{
DB db;
public Form1()
{
InitializeComponent();
db = new DB();
} private void Form1_Load(object sender, EventArgs e)
{
//第一张表增删改查的”查“
//生成表头
listView1.Columns.Add("员工号", listView1.Width / 4 - 1, HorizontalAlignment.Left);
listView1.Columns.Add("员工名", listView1.Width / 4 - 1, HorizontalAlignment.Left);
listView1.Columns.Add("性别", listView1.Width / 4 - 1, HorizontalAlignment.Left);
listView1.Columns.Add("年龄", listView1.Width / 4 - 1, HorizontalAlignment.Left);
//查数据库
DataTable dataTable = db.GetBySql(@"select * from [EMPLOYEE]");
//更新表的内容
listView1.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
for(int i= 0; i < dataTable.Rows.Count; i++)
{
ListViewItem listViewItem = new ListViewItem();//生成每一行
for(int j = 0; j < dataTable.Columns.Count; j++)
{
if (j <= 0) //listView 每行第一项与其余子项的添加是不同的。
{
listViewItem.Text = dataTable.Rows[i][j].ToString();
}
else
{
listViewItem.SubItems.Add(dataTable.Rows[i][j].ToString());
}
}
listView1.Items.Add(listViewItem);
}
listView1.EndUpdate();//结束数据处理,UI界面一次性绘制 //查询3-1:根据员工号和员工名查询所在公司和工资
//初始时只需要更新下拉列表框的数据以便选择后进行查询
//加载现有的员工号到下拉列表框1
dataTable = db.GetBySql(@"select [EmpNo] from [EMPLOYEE]");
for(int i= 0;i < dataTable.Rows.Count;i++)
{
for(int j = 0; j < dataTable.Columns.Count; j++)
{
comboBox1.Items.Add(dataTable.Rows[i][j].ToString());
}
}
//下拉列表框1默认选中第一个数据显示出来
comboBox1.SelectedIndex = 0;
//加载现有员工名到下拉列表框2
dataTable = db.GetBySql(@"select [EmpName] from [EMPLOYEE]");
for (int i= 0;i< dataTable.Rows.Count; i++)
{
for (int j= 0; j < dataTable.Columns.Count; j++)
{
comboBox2.Items.Add(dataTable.Rows[i][j].ToString());
}
}
//下拉列表框2默认选中第一个数据显示出来
comboBox2.SelectedIndex = 0; //查询3-2:查询年龄至少为40岁的员工的总工资,工资按从小到大排序
//生成表头
listView3.Columns.Add("员工号", listView1.Width / 5 - 1, HorizontalAlignment.Left);
listView3.Columns.Add("员工名", listView1.Width / 5 - 1, HorizontalAlignment.Left);
listView3.Columns.Add("性别", listView1.Width / 5 - 1, HorizontalAlignment.Left);
listView3.Columns.Add("年龄", listView1.Width / 5 - 1, HorizontalAlignment.Left);
listView3.Columns.Add("总工资", listView1.Width / 5 - 1, HorizontalAlignment.Left);
//查数据库
dataTable = db.GetBySql(@"select [EMPLOYEE].[EmpNo],[EMPLOYEE].[EmpName],[EMPLOYEE].[EmpSex],[EMPLOYEE].[EmpAge],sum([WORKS].[Salary]) as '总工资' from [EMPLOYEE],[WORKS] where [EMPLOYEE].[EmpAge]>=40 and [EMPLOYEE].[EmpNo]=[WORKS].[EmpNo] group by [EMPLOYEE].[EmpNo],[EMPLOYEE].[EmpName],[EMPLOYEE].[EmpSex],[EMPLOYEE].[EmpAge] order by '总工资' desc ");
//更新表的内容
listView3.BeginUpdate();//数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
for (int i=0;i<dataTable.Rows.Count;i++)
{
ListViewItem listViewItem = new ListViewItem();//生成每一行
for(int j=0;j<dataTable.Columns.Count;j++)
{
if (j <= 0)
{
listViewItem.Text = dataTable.Rows[i][j].ToString();
}
else
{
listViewItem.SubItems.Add(dataTable.Rows[i][j].ToString());
}
}
listView3.Items.Add(listViewItem);
}
listView3.EndUpdate();//结束数据处理,UI界面一次性绘制 //查询3-3 :查询至少有两份工作员工的姓名和公司名
//生成表头
listView4.Columns.Add("员工名",listView1.Width/2 - 2, HorizontalAlignment.Left); //生成表头
listView4.Columns.Add("公司名",listView1.Width/2 - 2, HorizontalAlignment.Left);
//查数据库
dataTable = db.GetBySql(@"select [EMPLOYEE].[EmpName],[COMPANY].[CmpName] from [EMPLOYEE],[COMPANY],[WORKS],(select [EmpName],count([CmpName]) as 'CmpNum' from [EMPLOYEE],[COMPANY],[WORKS] where [EMPLOYEE].[EmpNo]=[WORKS].[EmpNo] and [COMPANY].[CmpNo]=[WORKS].[CmpNo] group by [EmpName] having count([CmpName])>1) as t1 where [EMPLOYEE].[EmpNo]=[WORKS].[EmpNo] and [COMPANY].[CmpNo]=[WORKS].[CmpNo] and [EMPLOYEE].[EmpName]=t1.[EmpName];");
//更新表的内容
listView4.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
for(int i=0;i<dataTable.Rows.Count;i++)
{
ListViewItem listViewItem = new ListViewItem();//生成每一行
for(int j=0;j<dataTable.Columns.Count;j++)
{
if (j <= 0)
{
listViewItem.Text = dataTable.Rows[i][j].ToString();
}
else
{
listViewItem.SubItems.Add(dataTable.Rows[i][j].ToString());
}
}
listView4.Items.Add(listViewItem);
}
listView4.EndUpdate(); //结束数据处理,UI界面一次性绘制
} //添加按钮
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();//声明要使用form2窗体
//将form1当前的位置压入 Intent中的dict
Intent.dict["form1_text"] = this.Text;
Intent.dict["form1_flag"] = 0; //传个flag =0 表示这是”添加“
if(form2.ShowDialog() == DialogResult.OK)
{//这个判断,将会等到form2被关闭后才执行,如果返回一个OK值的话
bool canAdd = true;
foreach(ListViewItem item in this.listView1.Items)
{
if (Intent.dict["form2_textbox1_text"].ToString() == item.SubItems[0].Text)
{
canAdd = false;
MessageBox.Show("该员工已经存在!", this.Text);
break;
}
}
Regex regex = new Regex("^[0-9]*$");
//利用正则表达式判断是否输入的是数字
if (!regex.IsMatch(Intent.dict["form2_textbox3_text"].ToString()))
{
canAdd = false;
MessageBox.Show("年龄不为正数!",this .Text);
}
if(canAdd)
{
//在listView中添加一项
ListViewItem listViewItem = new ListViewItem();
//listViewItem的第一项与其他项的添加不一样
listViewItem.Text = Intent.dict["form2_textbox1_text"].ToString();
listViewItem.SubItems.Add(Intent.dict["form2_textbox2_text"].ToString());
listViewItem.SubItems.Add(Intent.dict["form2_radioButton"].ToString());
listViewItem.SubItems.Add(Intent.dict["form2_textbox3_text"].ToString());
listView1.Items.Add(listViewItem);
db.SetBySql("insert into [EMPLOYEE] values('" + Intent.dict["form2_textbox1_text"] + "','" + Intent.dict["form2_textbox2_text"] + "','" + Intent.dict["form2_radioButton"] + "','" + Intent.dict["form2_textbox3_text"] + ")");
}
}
} //修改按钮
private void button2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();//声明要使用form2窗体
//将form1当前的位置压入Intent中的dict
Intent.dict["form1_text"] = this.Text;
Intent.dict["form1_flag"] = 1; //传flag = 1 表示这是“修改”
Intent.dict["form1_selectedItems0"] = listView1.SelectedItems[0].SubItems[0].Text;
Intent.dict["form1_selectedItems1"] = listView1.SelectedItems[0].SubItems[1].Text;
Intent.dict["form1_selectedItems2"] = listView1.SelectedItems[0].SubItems[2].Text;
Intent.dict["form1_selectedItems3"] = listView1.SelectedItems[0].SubItems[3].Text;
Intent.dict["form1_flag"] = 1;
if(form2.ShowDialog() == DialogResult.OK)
{//这个判断,将会等到form2 被关闭之后才执行,如果form2返回一个OK值
bool canUpdate = true;
//仅仅当用户修改过员工号才进行遍历
if (!(Intent.dict["form1_selectedItems0"].ToString() == Intent.dict["form2_textbox1_text"]))
{
foreach(ListViewItem item in this.listView1.Items)
{
if (Intent.dict["form2_textbox1_text"] == item.SubItems[0].Text)
{
canUpdate = false;
MessageBox.Show("已经存在该员工号!", this.Text);
break;
}
}
}
Regex regex = new Regex("^[0-9]*$");
if (!regex.IsMatch(Intent.dict["form2_textbox3_text"].ToString()))//利用正则表达式判读输入的是否是数字
{
canUpdate = false;
MessageBox.Show("年龄不正确!", this.Text);
}
if(canUpdate)
{
//在listView中添加一项
ListViewItem listViewItem = new ListViewItem();
listView1.SelectedItems[0].SubItems[0].Text = Intent.dict["form2_textbox1_text"].ToString();
listView1.SelectedItems[0].SubItems[1].Text = Intent.dict["form2_textbox2_text"].ToString();
listView1.SelectedItems[0].SubItems[2].Text = Intent.dict["form2_radioButton"].ToString();
listView1.SelectedItems[0].SubItems[3].Text = Intent.dict["form2_textbox3_text"].ToString();
db.SetBySql("update [EMPLOYEE] set [EmpNo]='" + Intent.dict["form2_textbox1_text"].ToString() + "' where [EmpNo]='" + Intent.dict["form1_selectedItems0"] + "';");
db.SetBySql("update [EMPLOYEE] set [EmpName]='" + Intent.dict["form2_textbox2_text"].ToString() + "' where [EmpName]='" + Intent.dict["form1_selectedItems1"] + "';");
db.SetBySql("update [EMPLOYEE] set [EmpSex]='" + Intent.dict["form2_radioButton"].ToString() + "' where [EmpSex]='" + Intent.dict["form1_selectedItems2"] + "';");
db.SetBySql("update [EMPLOYEE] set [EmpAge]='" + Intent.dict["form2_textbox3_text"].ToString() + "' where [EmpAge]='" + Intent.dict["form1_selectedItems3"] + "';");
}
}
} //删除按钮
private void button3_Click(object sender, EventArgs e)
{
//传sql删除指令
db.SetBySql("delete from [EMPLOYEE] where [EmpNo]='" + listView1.SelectedItems[0].SubItems[0].Text + "';");
//显示出来的表数据的删除一定要放在在数据库操作之后,否则选中项再也取不到了。
listView1.SelectedItems[0].Remove();
} //根据员工 号 查所在公司和工资
private void button4_Click(object sender, EventArgs e)
{
listView2.Clear();
//生成表头
listView2.Columns.Add("员工号", listView2.Width / 4 - 1, HorizontalAlignment.Left);
listView2.Columns.Add("员工名", listView2.Width / 4 - 1, HorizontalAlignment.Left);
listView2.Columns.Add("公司名", listView2.Width / 4 - 1, HorizontalAlignment.Left);
listView2.Columns.Add("工资数", listView2.Width / 4 - 1, HorizontalAlignment.Left);
//sql语句查询
DataTable dataTable = db.GetBySql(@"select [EMPLOYEE].[EmpNo],[EMPLOYEE].[EmpName],[COMPANY].[CmpName],[WORKS].[Salary] from [EMPLOYEE],[COMPANY],[WORKS] where [EMPLOYEE].[EmpNo]=[WORKS].[EmpNo] and [COMPANY].[CmpNo]=[WORKS].[CmpNo] and [EMPLOYEE].[EmpNo]='" + comboBox1.Text + "';"); listView2.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
for (int i = 0; i < dataTable.Rows.Count; i++)
{
ListViewItem listViewItem = new ListViewItem();//生成每一行
for (int j = 0; j < dataTable.Columns.Count; j++)
{
if (j <= 0)
{
listViewItem.Text = dataTable.Rows[i][j].ToString();
}
else
{
listViewItem.SubItems.Add(dataTable.Rows[i][j].ToString());
}
}
listView2.Items.Add(listViewItem);
}
listView2.EndUpdate(); //结束数据处理,UI界面一次性绘制
} //根据员工 名 查所在公司和工资
private void button5_Click(object sender, EventArgs e)
{
listView2.Clear();
//生成表头
listView2.Columns.Add("员工号", listView2.Width / 4 - 1, HorizontalAlignment.Left);
listView2.Columns.Add("员工名", listView2.Width / 4 - 1, HorizontalAlignment.Left);
listView2.Columns.Add("公司名", listView2.Width / 4 - 1, HorizontalAlignment.Left);
listView2.Columns.Add("工资数", listView2.Width / 4 - 1, HorizontalAlignment.Left);
//sql语句查询
DataTable dataTable = db.GetBySql(@"select [EMPLOYEE].[EmpNo],[EMPLOYEE].[EmpName],[COMPANY].[CmpName],[WORKS].[Salary] from [EMPLOYEE],[COMPANY],[WORKS] where [EMPLOYEE].[EmpNo]=[WORKS].[EmpNo] and [COMPANY].[CmpNo]=[WORKS].[CmpNo] and [EMPLOYEE].[EmpName]='" + comboBox2.Text + "';"); listView2.BeginUpdate(); //数据更新,UI暂时挂起,直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
for (int i = 0; i < dataTable.Rows.Count; i++)
{
ListViewItem listViewItem = new ListViewItem();//生成每一行
for (int j = 0; j < dataTable.Columns.Count; j++)
{
if (j <= 0)
{
listViewItem.Text = dataTable.Rows[i][j].ToString();
}
else
{
listViewItem.SubItems.Add(dataTable.Rows[i][j].ToString());
}
}
listView2.Items.Add(listViewItem);
}
listView2.EndUpdate(); //结束数据处理,UI界面一次性绘制
} }
}

Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace test0314
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void Form2_Load(object sender, EventArgs e)
{
if((int)Intent.dict["form1_flag"] == 0) //flag=0 表示添加,对应添加按钮
{
this.Text = Intent.dict["form1_text"].ToString();
textBox1.Focus();//设置焦点停留在 textBox1中,即“员工号”
}
else //flag=1 表示修改,对应修改按钮
{
this.Text = Intent.dict["form1_text"]+"";
textBox1.Text = Intent.dict["form1_selectedItems0"].ToString();
textBox2.Text = Intent.dict["form1_selectedItems1"].ToString();
if(Intent.dict["form1_selectedItems2"].ToString() == "男")
{
radioButton1.Checked = true;
}
else
{
radioButton2.Checked = true;
}
textBox3.Text = Intent.dict["form1_selectedItems3"].ToString();
textBox1.Focus();//设置焦点停留在textBox1中
textBox1.SelectAll();//要现有焦点才能全选
} } //确认按钮
private void button1_Click(object sender, EventArgs e)
{
if(textBox1.Text=="" || textBox2.Text=="" || (!radioButton1 .Checked && !radioButton2.Checked) || textBox3.Text == "")
{
MessageBox.Show("没有填写完整!", this.Text);
}
else
{
//关闭form2之间,将要穿给form1 的值压入 Intent中的dict
Intent.dict["form2_textbox1_text"] = textBox1.Text;
Intent.dict["form2_textbox2_text"] = textBox2.Text;
if (radioButton1.Checked)
{
Intent.dict["form2_radioButton"] = "男";
}
else
{
Intent.dict["form2_radioButton"] = "女";
}
Intent.dict["form2_textbox3_text"] = textBox3.Text;
this.DialogResult = DialogResult.OK;//同时设置返回值为OK,如不设置的话,默认返回值为cancel
this.Close();
}
} private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

2015-CS的更多相关文章

  1. Kristen Grauman

    http://www.cs.utexas.edu/~grauman/ CV         Publications         Code           Data        Short ...

  2. 体验Visual Studio 2015 之 MVC - 视图组建

    VS2015 PERVIEW中可以创建MVC 项目. 我们可以 发现有几大亮点. 首先我们看目录结构: 当前项目包含两个主要的文件夹:Solution Items .src 很明显src文件夹下为当前 ...

  3. Visual Studio 2015 开发 ASP.NET 5 有何变化?

    本篇博文目录: ASP.NET 5 模版 ASP.NET 5 目录结构 前端管理工具 无编译开发 Microsoft Git Provider 智能感知和错误信息 Smart Unit Testing ...

  4. 使用Visual Studio 2015 Community 开发windows服务

    昨天研究在.NET下开发Windows服务程序,期间遇到一些小问题,这里仅将自己的开发过程和需要注意的地方写下和广大网友分享……  1.基础   Windows服务是指系统启动时能够自己运行的程序.W ...

  5. The week in .NET - 1/12/2015

    On.NET Last week, we had Mads Torgersen on the show to talk about language design in general, and C# ...

  6. Visual Studio 2015的坑:中文字符串编译后成乱码

    (2015年8月5日更新:微软已经修复了Roslyn的这个bug,详见 https://github.com/dotnet/roslyn/pull/4303 ) 昨天,我们用VS2015编译了博客程序 ...

  7. [MAC]2015款MACBOOK使用BOOTCAMP安装WIN8.1+多分区

    注意事项: 2013年以前,带光驱的,请使用WinClone安装WIN7或WIN8,或可使用BOOTCAMP制作WINDOWS安装光盘 13-14年,不带光驱的,也能使用WinClone安装WIN7和 ...

  8. Blend 2015 教程 (一) 基础

    微软公司在Visual Studio 2015产品套件中作出了许多革命性的变更,包括.NET开源,.NET服务器端部分跨平台,推出向个人和小团队免费的社区版,移动应用开发部分跨平台支持,商店应用支持C ...

  9. 2015继续任性——不会Git命令,照样玩转Git

    最近事情比较多,一眨眼,已经半个月没有写博客了~不得不感慨光阴似箭啊!当然,2015年有很多让我们期待的事情,比如win10正式版..NET开源.VS2015等等.想想都让人兴奋啊~~ 为了迎接VS2 ...

  10. 解析Visual Studio 2015促进生产力的10个新功能

    1 性能提示 Performance Tips 当我们想知道执行一段代码所耗费的时间时,需要借助于.NET 框架的Stopwatch类,像下面这样: class Program { static vo ...

随机推荐

  1. 【实战分享】使用 Go 重构流式日志网关

    项目背景 分享之前,先来简单介绍下该项目在流式日志处理链路中所处的位置. 流式日志网关的主要功能是提供 HTTP 接口,接收 CDN 边缘节点上报的各类日志(访问日志/报错日志/计费日志等),将日志作 ...

  2. 原生AJAX的学习

    基础知识 知识点梳理见图: 自己动手实践案例 案例1: 访问本地文件 <!DOCTYPE html> <html> <body> <div id=" ...

  3. RALB负载均衡算法的应用

    一.背景 搜索推荐算法架构为京东集团所有的搜索推荐业务提供服务,实时返回处理结果给上游.部门各子系统已经实现了基于CPU的自适应限流,但是Client端对Server端的调用依然是RR轮询的方式,没有 ...

  4. Unity 制作KinematicCharacterController

    本篇博客为游戏开发记录,博主只是想自己做个移动组件给自己做游戏用,此间产生的一些经验也做一个分享. 简介 为了在3D世界中自由的控制我们的角色,引擎一般会提供一些基础的移动组件,上层用户做提供一些每帧 ...

  5. 华为云河图KooMap 共筑数字孪生底座 共建产业标杆

    摘译:7月7日至9日,华为开发者大会2023(Cloud)将在东莞溪村盛大举行,由华为云河图KooMap带来的关于数字孪生主题的技术分论坛.圆桌闭门会和精彩成果展示 7月7日至9日,华为开发者大会20 ...

  6. Batch Normalization及其反向传播及bn层的作用

    笔记: Batch Normalization及其反向传播 重点: 在神经网络中,网络是分层的,可以把每一层视为一个单独的分类器,将一个网络看成分类器的串联.这就意味着,在训练过程中,随着某一层分类器 ...

  7. Redis缓存同步1-策略介绍

    缓存数据同步策略示意图 在大多数情况下,我们通过浏览器查询到的数据都是缓存数据,如果缓存数据与数据库的数据存在较大差异的话,可能会产生比较严重的后果的.所以,我们应该也必须保证数据库数据.缓存数据的一 ...

  8. Day05_Java_作业

    A:看程序写结果(写出自己的分析理由),程序填空,改错,看程序写结果. 1.看程序写结果 class Demo { public static void main(String[] args) { i ...

  9. Hexo博客Next主题DaoVoice实现在线联系

    注册登录DaoVoice 注册地址如下: http://www.daovoice.io/ 在官网注册帐号需要邀请码,可以输入我的邀请码 b69005f1 复制粘贴代码 修改的hexo的文件路劲如下: ...

  10. C补充

    C语言之unsigned 与signed 无符号与有符号数据的操作区别在于当最高位,当最高位为0时都一样: 在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) c ...