C#WindowForm窗体实验-----招评标管理系统
2013-08-18 16:44
597 查看
一、实际业务流程:
实际业务流程是将工程进行邀标,然后对每一标段进行招标,招标报名结束后,进行评标,评标的规则如下:
1)、从专家库中抽取若个名专家。
2)、形成指标库(5个指标,各个指标有各自的满分值,总和为100分。该指标数量有可能变化,程序要能满足指标变化的需求)。
3)、各个专家对每个标段的每个投标单位的各个指标进行打分,然后将各个指标的打分值汇总后为该专家给该单位的打分值,因为有5个专家,所以每个单位有5个分值,这5个分值中去掉一个最高分,去掉一个最低分,剩下几个分值的平均分即为该单位的最终得分,最后按得分进行排名,第一名即为中标单位。
4)、要打印报名一览表,专家详细打分表,最终单位得分表。
二.设计的数据库
指标表:指标编号、指标名称
投标单位表:投标单位编号、单位名称、联系地址、负责人。
专家表:专家编号、专家姓名、密码、联系地址、电话
工程表:工程编号、工程名称、是否已招标
管理员表:管理员编号、密码
招标指标表:招标编号、工程编号、指标编号、初始设置分
专家打分表:打分编号、招标编号、投标单位编号、专家编号、实际打分。
create database 招标管理库;
go
use 招标管理库;
--指标表:指标编号、指标名称
create table Indicator (
indicatorNO int not null identity(10,1) primary key ,
indicatorName varchar(20)
);
insert into indicator values('施工资质');
insert into indicator values('以往施工项目');
insert into indicator values('注册资金');
insert into indicator values('企业总资产');
insert into indicator values('施工优良率');
insert into indicator values('公司管理水平');
--投标单位表:投标单位编号、单位名称、联系地址、负责人。
create table TenderUnit(
TenderUnitNO int not null identity(100,1) primary key ,
TenderUnitName varchar(30),
TenderUnitAddress varchar(100),
TenderUnitLeader varchar(20)
);
insert into TenderUnit values('中国建筑一公司','北京市朝阳区','刘晓珠');
insert into TenderUnit values('中国建筑二公司','北京市朝阳区','朱万水');
insert into TenderUnit values('上海建工','上海浦东新区','周圣洁');
insert into TenderUnit values('中国水利第一建筑安装','北京市朝阳区','王俊');
insert into TenderUnit values('中国铁建一公司','北京市朝阳区','刘晓函');
insert into TenderUnit values('中国铁建二公司','北京市朝阳区','赵雄来');
--专家表:专家编号、专家姓名、密码、联系地址、电话
create table Expert(
ExpertNO int not null identity(1000,1) primary key ,
ExpertName varchar(20),
ExpertPwd varchar(20),
ExpertAddress varchar(50),
ExpertTel varchar(20)
);
insert into Expert values('张俊','1234','同济大学水木工程系','021-222222');
insert into Expert values('周礼','1234','上海大学建筑系','021-33333');
insert into Expert values('赵四','1234','上海工程研究所','021-66666');
insert into Expert values('王丽','1234','同济大学水木工程系','021-777777');
insert into Expert values('朱豪杰','1234','北京第一建筑研究所','010-3434343');
insert into Expert values('王劳斯','1234','上海市建设局','021-454545');
--工程表:工程编号、工程名称、是否已招标
create table Project(
ProjectNo int not null identity(1000,1) primary key ,
ProjectName varchar(50),
ProjectISTender int default 0
);
insert into Project values('沪宁高速A段维修工程',0);
insert into Project values('沪宁高速B段维修工程',0);
insert into Project values('A20B段基础施工',0);
insert into Project values('A20张江高架桥基础施工',0);
--管理员表:管理员编号、密码
create table Administrators(
AdminNo int not null identity(10000,1) primary key ,
AdminName varchar(20) not null,
AdminPwd varchar(20)
);
insert into Administrators values('admin', '1234');
--招标指标表:招标编号、工程编号、指标编号、初始设置分
create table TenderIndicator (
tiNo int not null identity(100,1) primary key ,
ProjectNo int ,
indicatorNO int,
initScore int default 0
);
--专家打分表:打分编号、招标编号、投标单位编号、专家编号、实际打分。
create table ExpertScore(
ExpertScoreNo int not null identity(100,1) primary key ,
TINo varchar(50) ,
TenderUnitNO int,
ExpertNo int,
ExpertScore float
);
Go
--入围项目和竞标公司表 项目名称和竞标的公司名称
create table ProjectInUnit
(
ProjectName varchar(50),
TenderUnitName varchar(30)
)
---入围项目和打分专家表
create table ProjectInExpert
(
ProjectName varchar(50),
ExpertName varchar(20)
)
三.重要代码展示
1.DLL层
DataHelp和数据库打交道工具类
public class DataHelper
{
private static string connstr = @"Data Source=LIHAIJUN-PC\SQLEXPRESS;Initial Catalog=PF;Integrated Security=True;Pooling=False";
private static SqlConnection conn = new SqlConnection(connstr);
private static SqlCommand cmd = new SqlCommand("", conn);
/*执行查询语句,返回DataReader*/
public static SqlDataReader ExecuteQuery(string sql)
{
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.CommandText = sql;
SqlDataReader dr = cmd.ExecuteReader();
return dr;
}
/*执行insert,update,delete语句*/
public static int ExecuteUpdate(string sql)
{
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.CommandText = sql;
int x = cmd.ExecuteNonQuery();
conn.Close();
return x;
}
/*返回单个值函数*/
public static object ExecuteScalar(string sql)
{
object obj = null;
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.CommandText = sql;
obj = cmd.ExecuteScalar();
conn.Close();
return obj;
}
/*关闭连接对象*/
public static void CloseConnection()
{
if (conn != null && conn.State != ConnectionState.Closed)
conn.Close();
}
}
2.Model层
示例: TenderIndicator
public class TenderIndicator
{
private int tiNo;
private int projectNo;
private int indicatorNO;
private int initScore;
public TenderIndicator()
{
}
public TenderIndicator(int tino,int projectno,int indicatorno,int initscore )
{
this.tiNo = tino;
this.projectNo = projectno;
this.indicatorNO = indicatorno;
this.initScore = initscore;
}
public int TiNo
{
get
{
return this.tiNo;
}
}
public int ProjectNo
{
get
{
return this.projectNo;
}
}
public int IndicatorNO
{
get
{
return this.indicatorNO;
}
}
public int InitScore
{
get
{
return this.initScore;
}
}
}
3.service层即Dao层
示例:ProjectDao
public class ProjectDao
{
public List<Project> ExecuteQuery(string sql)
{
List<Project> list = new List<Project>();
SqlDataReader sr = DataHelper.ExecuteQuery(sql);
while (sr.Read())
{
Project pro = new Project(int.Parse(sr[0].ToString()),(string) sr[1],(string) sr[2]);
list.Add(pro);
}
DataHelper.CloseConnection();
return list;
}
public List<string> ExecuteQueryOnly(string sql)
{
List<string> list = new List<string>();
SqlDataReader sr = DataHelper.ExecuteQuery(sql);
while (sr.Read())
{
string proName = (string)sr[0];
list.Add(proName);
}
DataHelper.CloseConnection();
return list;
}
public int ExecuteProjectNo(string sql)
{
int projectno=0;
object projectno1=DataHelper.ExecuteScalar(sql);
if (projectno1!=null)
projectno=(int)projectno1;
return projectno;
}
public object ExecuteProjectIsTender(string sql)
{
object IsTender =DataHelper.ExecuteScalar(sql);
return IsTender;
}
4.View层(视图层)windowForm
treeView
private void initTreeView()
{
root = new TreeNode("招标项目名");
treeView2.Nodes.Add(root);
}
private void updateTreeView()
{
string sql = "select ProjectName from Project";
List<string> listPr = prdao.ExecuteQueryOnly(sql); ;
foreach (string prName in listPr)
{
TreeNode tn = new TreeNode(prName);
root.Nodes.Add(tn);
}
}
listView
private void initListView1()//初始化listView1
{
int width = this.listView1.Width;
this.listView1.Columns.Add("指标编号", width / 4, HorizontalAlignment.Left);
this.listView1.Columns.Add("指标名称",width/4,HorizontalAlignment.Left);
this.listView1.Columns.Add("是否入选", width / 4, HorizontalAlignment.Left);
this.listView1.Columns.Add("指标分值", width / 4, HorizontalAlignment.Left);
//this.listView1.View = View.Details;
this.listView1.GridLines = true;
this.listView1.FullRowSelect = true;
}
private void updateListView1()//更新listView1内容
{
this.listView1.Items.Clear();//漏掉Items
List<Indicator> list = indao.ExecuteQueryIndicator();
cmds = new ComboBox[list.Count];//为ComBox分配内存
//for (int i = 0; i < cmds.Length; i++)
//{
// cmds[i] =null;
//}
foreach (Indicator cator in list)
{
ListViewItem item = new ListViewItem(cator.IndicatorNO.ToString().Trim());
item.SubItems.Add(cator.IndicatorName.Trim());
item.SubItems.Add("不入选");
item.SubItems.Add("");
this.listView1.Items.Add(item);
}
}
点击checkBox触发事件
private void listView1_ItemCheck(object sender, ItemCheckEventArgs e)//选中checkBox修改入选不入选
{
int row = e.Index;//选中事件的索引
ListViewItem item = this.listView1.Items[row];
if (e.NewValue == CheckState.Checked)
{
item.SubItems[2].Text = "入选";
}
else
{
item.SubItems[2].Text = "不入选";
}
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)//当listView1选择的索引发生改变后触发的事件
{
if (this.listView1.SelectedItems.Count > 0)
{
ListViewItem item = this.listView1.SelectedItems[0];
int index = this.listView1.SelectedIndices[0];
//MessageBox.Show(index.ToString());
cmds[index] = new ComboBox();
for (int i = 10; i <= 50; i = i + 10)
{
cmds[index].Items.Add(i + "");
}
cmds[index].SelectedItem = "20";//为ComBox设置初始值
//MessageBox.Show(cmds[index].Text);
cmds[index].Bounds = item.SubItems[3].Bounds;//为ComBox设置边界(Bounds指起点和长宽能确定位置)
this.listView1.Controls.Add(cmds[index]);//在指定位置添加comBox
cmds[index].Show();//显示ComBox
}
}
在listView中动态添加多个ComBox
private void lExpertInScore_Click(object sender, EventArgs e)//鼠标点击时触发的事件
{
ListViewItem item =this.lExpertInScore.GetItemAt(MouPos.X,MouPos.Y);//获取鼠标点击时的item
Rectangle rect = item.GetBounds(ItemBoundsPortion.Entire);
int StartX = rect.Left;
int ColumnIndex = 0;
int pos = GetScrollPos(this.lExpertInScore.Handle.ToInt32(), 0);
foreach (ColumnHeader Column in lExpertInScore.Columns)
{
if (MouPos.X + pos >= StartX + Column.Width)//更换列索引
{
StartX += Column.Width;
ColumnIndex += 1;
}
}
// MessageBox.Show(ColumnIndex.ToString());
if (item != null && ColumnIndex>0)
{
// MessageBox.Show(ColumnIndex.ToString());
for (int i =0; i < list.Count; i++)
{
if (ColumnIndex == this.lExpertInScore.Columns[i + 1].Index)
{
int index = this.lExpertInScore.SelectedIndices[0];
combox[index, ColumnIndex] = new ComboBox();
for (int j = list[i].InitScore; j>=0; j -= 1)
{
combox[index, ColumnIndex].Items.Add(j + "");
}
combox[index, ColumnIndex].SelectedItem = list[i].InitScore.ToString();
combox[index, ColumnIndex].Bounds = item.SubItems[ColumnIndex].Bounds;
lExpertInScore.Controls.Add(combox[index, ColumnIndex]);
combox[index, ColumnIndex].Show();
}
}
}
}
相关文章推荐
- C# WindowForm窗体-菜单栏、状态栏设计--(学生管理系统项目)
- c# winform 让Form窗体上系统自带的红色关闭按钮失效,点击关闭变为隐藏
- C# .NET 可灵活配置登录窗体、主窗体的快速信息管理系统开发架构参考
- c# 使form窗体在系统中获得焦点
- C# WindowsForm 员工管理系统一【登录】
- C#.net实验——数据库应用管理系统
- C#窗体应用程序 vs + sql server2008连接举例,简单的学生信息管理系统 补充注册页面,如有侵权,请联系本人删除
- c# WindowForm练习项目主窗体设计
- C# WindowsForm 员工管理系统四【发放工资】
- c# winform 让Form窗体上系统自带的红色关闭按钮失效,点击关闭变为最小化
- C#窗体应用程序 vs + sql server2008连接举例,简单的学生信息管理系统
- C# WindowsForm 员工管理系统五【查看工资】
- 高校学生信息管理系统C#窗体版更新(一)
- C# Windows窗体——仪器管理系统
- C# .NET 可灵活配置登录窗体、主窗体的快速信息管理系统开发架构参考
- C# .NET 可灵活配置登录窗体、主窗体的快速信息管理系统开发架构参考
- C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试
- 清理吉日嘎拉走火入魔C#.NET通用权限管理系统组件表数据的脚本方法参考
- Windowform 窗体关联数据库存储,读取图片,参考代码
- 结对实验——学生管理系统