C#WindowForm窗体实验-----招评标管理系统

来源:互联网 发布:天猫运营模式分析 知乎 编辑:程序博客网 时间:2024/04/28 07:51

 



一、实际业务流程:

实际业务流程是将工程进行邀标,然后对每一标段进行招标,招标报名结束后,进行评标,评标的规则如下:

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();
                       
                    }


                }
                
            }
            
       }



原创粉丝点击