SCUT-2015年数据库编程题

 

题目

第一大题,10 分,送分的题目:

1、创建文件夹“d:\研究生复试\[你的中文姓名]\” 例: 张三,应创建“d:\研究生复试\张三”文件
夹。 所有文档和答案都放在这个文件夹中。
2、在文件夹中建立一个 readme 文件(.txt 或.doc 均可),以说明所用的软件工具。
3、设计文档,文件名为 Info.doc,数据库连接说明:如用户名,密码,ODBC/JDBC 等数
据源配置等(数据库连接方式及配置参数)如果必要,可以说明运行方式和相关参数 如果
功能不能通过运行,则给出相应的源代码。
4、在你的目录中建立 SOURCE 目录,系统源文件放在该目录下
5、考完后请不要关机,人离开就可以了。


第二大题,数据库设计,35 分


一、建立数据库,并建立以下各表 一个员工可以到多个不同公司上班。
员工关系表 EMPLOYEE(员工号 EmpNo,员工姓名 EmpName,性别 EmpSex,年龄
EmpAge)


工作关系表 WORKS(EmpNo 员工号,CmpNo 公司号,Salary 薪水)


公司关系表 COMPANY(CmpNo 公司号,CmpName 公司名)


要求:
1、在数据库中根据上述表的定义创建上述数据库,同时需建立相应的约束关系
2、将上面的数据输入到数据库中相应的表中
3、将数据库备份到你的文件夹下,命名为 backupInfo


三、基于上述数据库,请使用 sql server2005+vs2008 或 vs2010 完成员工信息管理系统,
并生成相应的可运行文件(文件名为你的名字)。


具体要求如下:
1. 要求程序与数据库能进行有效连接,并具有完善的人机交互界面, 要求有参数输入界面
和执行按钮,在界面上有结果输出展现区, 要求不要把所有操作全部集中在一个菜单内。
2.完成对员工关系表的添加,删除,修改和浏览四项功能。老师的性别要求用单选按钮实现。
(15 分)
3.统计和查询:
(1)根据员工号或员工名查找员工所在的公司名和工资,员工号或员工名不能文本输入,
要求使用下拉菜单实现,并与数据库中现有信息一致(10 分)
(2)统计年龄至少为 40 岁员工的总工资,工资按从大到小顺序排列;与数据库中现有信
息一致(10 分)
(3)查询至少具有两份工作员工的姓名和其公司名。(10 分)
4. 具有数据完整性校验功能,当出现数据异常和操作异常时,程序应给出清楚完整的异常
提示信息。(10 分)

代码与实现

       图片借鉴以前的师兄的.https://blog.youkuaiyun.com/jpf254/article/details/50983443

       把窗体都建出来:

先贴两个用到的工具类:

DBUtils.cs (用来获取SqlConnection)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace Demo2
{
    class DBUtils
    {
        private static String strCon = @"Data Source=.\sqlexpress;Initial Catalog=SCUT;Integrated Security=True";
        private static SqlConnection sqlCon;
        private DBUtils() {
            sqlCon = new SqlConnection(strCon);
        }
        public static SqlConnection getConnection()
        {
            if (sqlCon==null)
            {
                sqlCon = new SqlConnection(strCon);
            }
            sqlCon.Open();
            return sqlCon;
        }
        public void close()
        {
            if (sqlCon != null)
            { 
                sqlCon.Close();
            }
        }
       
    }
}

QueryUtils.cs (查询工具类)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace Demo2
{
    class QueryUtils
    {
        
        public QueryUtils() { }
        //数据库的离线访问
        public static DataTable query(String sql, SqlConnection sqlCon)
        {
            SqlCommand sqlCom = new SqlCommand(sql);
            sqlCom.Connection = sqlCon;
            SqlDataAdapter sDA = new SqlDataAdapter(sqlCom);
            DataSet dS=new DataSet();
           
            sDA.Fill(dS,"SCUT");
            DataTable table=dS.Tables["SCUT"];
            return table;
        }
    }
}

Person.cs (用来封装数据的实体类)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo2
{
   public  class Person
    {
        private String pid;
        private String pname;
        private String psex;
        private String page;
        public void setPid(String pid)
        {
            this.pid = pid;
        }
        public String getPid()
        {
            return pid;
        }
        public void setPname(String pname)
        {
            this.pname = pname;
        }
        public String getPname()
        {
            return pname;
        }
        public void setPsex(String psex)
        {
            this.psex = psex;
        }
        public String getPsex()
        {
            return psex;
        }
        public void setPage(String page)
        {
            this.page = page;
        }
        public String getPage()
        {
            return page;
        }
    }
}

主窗口Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Demo2
{
    public partial class Form1 : Form
    {
        SqlConnection sqlCon;
        public Form1()
        {
            InitializeComponent();
        }

        String sql = "";
        Person person;
        private void button3_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            DialogResult dr=f2.ShowDialog();
            if (dr == DialogResult.OK)
            {
                person = f2.getPerson();
                sql = "select EmpNo as 员工号,EmpName as 员工姓名,EmpSex as 性别,EmpAge as 年龄 from EMPLOYEE where 1=1 ";
                if (person.getPid() != "")
                    sql += " and EmpNo ='" + person.getPid() + "' ";
                if (person.getPname() != "")
                    sql += " and EmpName ='" + person.getPname() + "' ";
                if (person.getPsex() != "")
                    sql += " and EmpSex ='" + person.getPsex() + "' ";
                if (person.getPage() != "")
                    sql += " and EmpAge ='" + person.getPage() + "' ";
            }
            else
            {
                return;
            }
            executeQuery(sql, listView1);
        }
        //更新listView显示
        public void updateListView(DataTable table, ListView lv)
        {
            lv.Clear();
            //lv.BeginUpdate();
            //添加列头
            
            for (int i = 0; i < table.Columns.Count; i++)
            {
                ColumnHeader c = new ColumnHeader();
                c.Text = table.Columns[i].ToString();
                c.Width = 100;
                lv.Columns.Add(c);
                //MessageBox.Show(table.Columns[i].ToString());
             //设置属性
            
            }
            // 添加数据
            for (int i = 0; i < table.Rows.Count; i++)
            {
                //1.创建行对象  一个巨坑:如果直接new ListViewItem() 显示数据时,数据跟表头差一列
                //你new的时候参数就是第一项,你add的是第二项,记得new的时候添加第一项
             //   MessageBox.Show("" + table.Rows[1][1].ToString());
                ListViewItem item = new ListViewItem(table.Rows[i][0].ToString());
               // item.SubItems.Add("0123");
                //2.一行对应的数据
                for(int j=1;j<table.Columns.Count;j++)
                {
                    item.SubItems.Add(table.Rows[i][j].ToString());
                }
                 
                //3.将行对象添加进listView中
                lv.Items.Add(item);
                
            }
           // lv.EndUpdate();
        }
        DataTable table;
        private void Form1_Load(object sender, EventArgs e)
        {
            String sql = "select EmpNo as 员工号,EmpName as 员工姓名,EmpSex as 性别,EmpAge as 年龄 from EMPLOYEE";
            executeQuery(sql,listView1);
        }
        public void executeQuery(String sql, ListView lv)
        {
            sqlCon = DBUtils.getConnection();
            table = QueryUtils.query(sql, sqlCon);
            updateListView(table, lv);
            sqlCon.Close();
        }
        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            String cmd=tabControl1.SelectedTab.Name;
            if ("tabPage1".Equals(cmd))
            {
                Form1_Load(null,null);

            }
            else if ("tabPage2".Equals(cmd))
            {
                listView2.Clear();
                comboBox1.Items.Clear();
                comboBox2.Items.Clear();
                //获取下拉框信息
                sql = "select EmpNo,EmpName from EMPLOYEE";
                sqlCon = DBUtils.getConnection();
                table = QueryUtils.query(sql, sqlCon);
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    comboBox1.Items.Add(table.Rows[i][0]);
                    comboBox2.Items.Add(table.Rows[i][1]);
                }
                comboBox1.SelectedIndex=0;
                comboBox2.SelectedIndex = 0;
                sqlCon.Close();
            }
            else if ("tabPage3".Equals(cmd))
            {
                sql = "select EMPLOYEE.EmpNo as 员工号,EmpName as 员工姓名,Empage as 年龄,CmpName as 公司,salary as 薪水 from EMPLOYEE inner join WORKS on EMPLOYEE.EmpNo=WORKS.EmpNo inner join COMPANY on WORKS.CmpNo=COMPANY.CmpNo where EMPLOYEE.EmpAge>39 order by Salary desc;";
                executeQuery(sql, listView3);
            }
            else if ("tabPage4".Equals(cmd))
            {
                sql = "select EMPLOYEE.EmpName as 员工名,COMPANY.CmpName as 公司名 from EMPLOYEE inner join WORKS on EMPLOYEE.EmpNo=WORKS.EmpNo inner join COMPANY on WORKS.CmpNo=COMPANY.CmpNo inner join (select EMPLOYEE.EmpNO from EMPLOYEE inner join WORKS on EMPLOYEE.EmpNo=WORKS.EmpNo inner join COMPANY on WORKS.CmpNo=COMPANY.CmpNo group by EMPLOYEE.EmpNo having COUNT(EMPLOYEE.EmpNo)>1 ) as t1 on EMPLOYEE.EmpNo=t1.EmpNo";
                executeQuery(sql, listView4);            
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            
            String uname = comboBox2.Text.Trim();
            sql = "select EMPLOYEE.EmpNo as 员工号,EmpName as 员工姓名,CmpName as 公司,salary as 薪水 from EMPLOYEE inner join WORKS on EMPLOYEE.EmpNo=WORKS.EmpNo inner join COMPANY on WORKS.CmpNo=COMPANY.CmpNo where EMPLOYEE.EmpName='"+uname+"'" ;
            executeQuery(sql, listView2);
        }
         //修改数据
        private void button1_Click(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count >0)
            {

                String pid=listView1.SelectedItems[0].Text;
                String pname = listView1.SelectedItems[0].SubItems[1].Text;
                String psex = listView1.SelectedItems[0].SubItems[2].Text;
                String page = listView1.SelectedItems[0].SubItems[3].Text;
                person = new Person();
                person.setPid(pid);
                person.setPname(pname);
                person.setPsex(psex);
                person.setPage(page);
                Form2 f2 = new Form2(person);
                DialogResult dr= f2.ShowDialog();
                if (dr == DialogResult.OK)
                {
                    person = f2.getPerson();
                    sql = "update EMPLOYEE set EmpName='" + person.getPname() + "',EmpSex='" + person.getPsex() + "',EmpAge='" + person.getPage() + "' where EmpNo='" + person.getPid() + "' ";
                    sqlCon = DBUtils.getConnection();
                    SqlCommand com = new SqlCommand(sql, sqlCon);
                    int rows = com.ExecuteNonQuery();
                    if (rows == 1)
                        MessageBox.Show("修改成功!", "消息", MessageBoxButtons.OK);
                    sqlCon.Close();
                    Form1_Load(null,null);
                }
                else
                {
                    return;
                }
            }
            else
            {
                MessageBox.Show("请选中要修改的数据!");
            }
            listView1.SelectedItems.Clear();
        }
            //删除一条员工信息
        private void button3_Click_1(object sender, EventArgs e)
        {
            if (listView1.SelectedItems.Count > 0)
            {

                String pid = listView1.SelectedItems[0].Text;
                DialogResult dr=MessageBox.Show("确定要删除此条信息吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                if (dr == DialogResult.OK)
                {
                    sql = "delete from EMPLOYEE where EmpNo='"+pid+"'";
                    sqlCon = DBUtils.getConnection();
                    SqlCommand com = new SqlCommand(sql, sqlCon);
                    int rows = com.ExecuteNonQuery();
                    if(rows==1)
                        MessageBox.Show("删除成功!", "消息", MessageBoxButtons.OK);
                    sqlCon.Close();
                    Form1_Load(null, null);
                }
                else
                {
                    return;
                }
            }
            else
            {
                MessageBox.Show("请选中要删除的数据!");
            }
            listView1.SelectedItems.Clear();
        }
            //增加一条员工信息
        private void btn3_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            DialogResult dr=f2.ShowDialog();
            if (dr == DialogResult.OK)
            {
                person=f2.getPerson();
                sql = "insert into EMPLOYEE(EmpNo,EmpName,EmpSex,EmpAge) values ('"+person.getPid()+"','"+person.getPname()+"','"+person.getPsex()+"','"+person.getPage()+"')";
                sqlCon = DBUtils.getConnection();
                SqlCommand com = new SqlCommand(sql, sqlCon);
                sqlCon.Open();
                int rows=com.ExecuteNonQuery();
                if (rows == 1)
                    MessageBox.Show("插入成功!", "消息", MessageBoxButtons.OK);
                sqlCon.Close();
                Form1_Load(null, null);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            String uid = comboBox1.Text.Trim();
            sql = "select EMPLOYEE.EmpNo as 员工号,EmpName as 员工姓名,CmpName as 公司,salary as 薪水 from EMPLOYEE inner join WORKS on EMPLOYEE.EmpNo=WORKS.EmpNo inner join COMPANY on WORKS.CmpNo=COMPANY.CmpNo where EMPLOYEE.EmpNo='" + uid + "'";
            executeQuery(sql, listView2);
        }
    }
}

从窗口Form2.cs (数据的查询、修改)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Demo2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
          //把要修改的员工信息初始化到窗口
        public Form2(Person person)
        {
            InitializeComponent();
            //MessageBox.Show();
            tb1.Text = person.getPid();
            tb1.Enabled=false;
            tb2.Text = person.getPname();
            tb3.Text = person.getPage();
            if ("男".Equals(person.getPsex()))
            {
                rb1.Checked = true;
            }
            else
            {
                rb2.Checked = true;
            }
        }
        Person person;
        private void button1_Click(object sender, EventArgs e)
        {
            //获取数据封装成对象
            String pid = tb1.Text.Trim();
            String pname = tb2.Text.Trim();
            String page = tb3.Text.Trim();
            String psex = rb1.Checked ? "男" : "女";
            person = new Person();
            person.setPid(pid);
            person.setPname(pname);
            person.setPsex(psex);
            person.setPage(page);
            this.DialogResult = DialogResult.OK;
            this.Dispose();
        }
        public Person getPerson()
        {
            return person;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Dispose();
        }
    }
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值