这个项目这前面做省份管理,校区管理,岗位管理,专业岗位等,全部都是增删改查
把省份管理做完了,后面的几乎都可以复制粘贴前面的代码了,改一下绑定字段即可。
也没啥新意的,做着做着就失去了动力,如果以后工作都是增删改查,那就太可怕,没劲。
在做专业管理和岗位管理时,两个表很明显是多对多的关系,但设计数据库的人,似乎忘了给关系表
数据库表与表之间多对多关系怎么处理?
拆分关系。增加一个表。使之符合范式。
比如做学生选课系统。多个学生选多门课。这是多对多关系。
这样可以写成三个表。
分别为。学生表(学号,姓名)
课程表(课程号,课程名)
选课表(学号,课程号)
通过选课表,将学生和课程联系起来了。
通常情况是这么处理,但自己不想再建表了。
于是乎想了个用一个字段关系也能表示其内在的关联。
想法比较大胆,思想比较歪。
任何一个整数都可以转化成一个二进制数,
如0==》0000,1==》0001,2==》0010,3==》0011,4==》0100,5==》1001
而0,1就能代表关联表中有哪些对应的字段
数据设计是这样的:
--4,岗位表
create table Station
(
StationID int primary key , --岗位ID
StationName varchar(50) not null, --岗位名称
Remarks varchar(50), --岗位被准
)
insert into Station values(1,'软件测试','软测');
insert into Station values(2,'软件开发','开发');
insert into Station values(4,'php','最好的语言');
insert into Station values(8,'.net开发','aa');
insert into Station values(16,'Android开发','bb');
insert into Station values(32,'java开发','cc');
insert into Station values(64,'javaScript','cc');
select * from Station where StationName like'%%' order by StationID desc
go
--5,专业表
create table Major
(
proID int primary key identity(1,1), --专业ID
proName varchar(50) not null, --专业名称
SchoolID int not null references School(SchoolID), --校区ID(外键)
StationS int, --和岗位关系
Remarks varchar(50), --岗位备注
)
insert into Major values('软件测试',1,0,'测试')
insert into Major values('软件工程',1,3,'');
insert into Major values('软件测试',1,11,'');
insert into Major values('网络工程',1,4,'');
insert into Major values('图形图像',2,38,'');
insert into Major values('软件测试',3,21,'');
insert into Major values('网络工程',3,7,'');
insert into Major values('图形图像',3,38,'');
岗位表的编号采用2的n次幂,专业表中的StationS用一个数字可以代表岗位表中关联的岗位
如岗位表中的80,可以推算出岗位表中有64+16这两个岗位组成的
大概关系就是那样的,主要是每次把数组转换成”外键关系“,需要进行计算,然后做增删改查也比较麻烦
岗位的查询,添加,取消
/// <summary>
/// 绑定专业对应的岗位信息
/// </summary>
/// <param name="majorID"></param>
private void GetHideMajorInfo(string majorID)
{
Model.majorModel model = new Model.majorModel();
model.PproName = "";
model.PproID = int.Parse(majorID);
DataTable dt = bll.MajorAndSchool(model);
this.txtMajorName.Text=dt.Rows[0]["proName"].ToString();
this.txtSchool.Text=dt.Rows[0]["SchoolName"].ToString();
int GGNumber=int.Parse(dt.Rows[0]["StationS"].ToString());
DataTable gws = bll.selectStation();
this.DDLStationMy.Items.Clear();
foreach (DataRow row in gws.Rows)
{
int p = int.Parse(row["StationID"].ToString());
if(p<= GGNumber)
{
GGNumber -= p;
string key = row["StationName"].ToString();
string value = row["StationID"].ToString();
this.DDLStationMy.Items.Add(new ListItem(key, value));
if (GGNumber == 0) break;
}
}
}
/// <summary>
/// 绑定所有岗位信息
/// </summary>
private void GetBindDDLStation()
{
this.DDLStationAll.DataSource = bll.selectStation();
this.DDLStationAll.DataTextField = "StationName";
this.DDLStationAll.DataValueField = "StationID";
this.DDLStationAll.DataBind();
}
/// <summary>
/// 添加岗位
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAdd_Click(object sender, EventArgs e)
{
string MajorID = Request.QueryString["MajorID"];
int number =int.Parse(this.DDLStationAll.SelectedValue);
foreach ( ListItem ll in DDLStationMy.Items)
{
if(ll.Value== number.ToString())
{
ClientScript.RegisterStartupScript(GetType(), "UserMain", "alert('该专业已经存在!')", true);
return;
}
}
bll.AddStationbyNumber('+', number,int.Parse(MajorID));
GetHideMajorInfo(MajorID);
}
/// <summary>
/// 取消岗位
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpa_Click(object sender, EventArgs e)
{
string MajorID = Request.QueryString["MajorID"];
int number = int.Parse(this.DDLStationMy.SelectedValue);
bll.AddStationbyNumber('-', number, int.Parse(MajorID));
GetHideMajorInfo(MajorID);
}
设置添加新岗位的ID编号
BLL.StationBLL bll = new BLL.StationBLL();
/// <summary>
/// 设置新加的岗位ID
/// </summary>
private void GetTxtStationID()
{
DataTable dt = bll.SelectStationID();//查询Station表中所有的ID
for (int newId = 1; newId < Math.Pow(2,31); newId *= 2)
{
bool falg = true;//新创建的id能否使用
foreach (DataRow row in dt.Rows)
{
int id = int.Parse(row["StationID"].ToString());//数据库中的id
if(id== newId)//新创建的id数据库中已经存在
{
falg = false;//新创建的id不能用
break;//跳出循环,在创建一个newID
}
}
if (falg)//新创建的id可以用,找到了,赋值,跳出循环
{
this.txtStationID.Text = newId.ToString();
break;
}
}
}
修改专业的岗位SQL语句:
/// <summary>
/// 修改专业的岗位信息
/// </summary>
/// <param name="addNumber"></param>
/// <param name="majorId"></param>
/// <returns></returns>
public bool AddStationbyNumber(char fuhao, int Number,int majorId)
{
string sql = string.Format("update Major set StationS{0}={1} where proID={2}", fuhao, Number, majorId);
return DbHelperSQL.ExecuteSql(sql)>0?true:false;
}
数据库删除某个岗位,对应专业中减去该岗位的数值
/// <summary>
/// 删除岗位表中的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public bool DeleteStationByID(int id)
{
string sql = "delete Station where StationID="+id;
UpdateMajorByStation(id);
return DbHelperSQL.ExecuteSql(sql) > 0 ? true : false;
}
/// <summary>
/// 删除岗位表中数据更新专业表中number
/// </summary>
/// <param name="id"></param>
public void UpdateMajorByStation(int id)
{
DAL.majorDAL major = new majorDAL();
DataTable dt = major.selectMajorAll();
DataTable Station = SelectStationInfo("");
foreach (DataRow row in dt.Rows)
{
int number = int.Parse(row["StationS"].ToString());
foreach (DataRow item in Station.Rows)
{
int p = int.Parse(item["StationID"].ToString());
if (number >= p)
{
number -= p;
if (p == id)
{
updateMajorNumber(row["proID"].ToString(), id);
}
}
}
}
}
public void updateMajorNumber(string Majorid,int id)
{
string sql =string.Format("update Major set StationS-={0} where proID={1}",id,Majorid);
DbHelperSQL.ExecuteSql(sql);
}
ps:好多没解释清楚。算了就这样把