题目
第一大题,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();
}
}
}
运行结果: