目录一、题目概述(容及要求) (1)二、需求分析 (1)2.1高校就业管理系统 (1)2.2高校就业管理系统数据流图 (1)2.3高校就业系统管理系统功能框图 (1)三、概要设计 (1)3.1数据模型(E-R图) (1)3.2数据库表格结构设计 (2)四、详细设计 (3)4.1登录界面 (3)4.2修改界面 (4)4.3查询界面 (9)五、软件测试 (15)5.1划分等价类并编号 (15)5.2有效测试用例 (15)5.3无效测试用例 (16)六、总结 (16)参考文献 (16)一、题目概述(容及要求)实现院系、专业、毕业生信息管理(设有就业标志,初值为‘待业’);实现职业类型、职业信息(职业号、类型号、需求数量、聘用数量、用人单位)登记;实现毕业生就业登记(学号、职业号),自动修改相应学生的就业标志和职业的聘用数量,并保证聘用数量不大于需求数量;创建存储过程查询毕业生的人数、待业人数、就业人数和就业率;创建存储过程查询各专业的毕业生就业率;创建check 约束限制毕业生性别必须为‘男’或‘女’;建立表间关系。
二、需求分析2.1高校就业管理系统高校就业管理系统化可以完成对学生信息的修改、查询(就业率,已就业信息,未就业信息,公司信息)、添加(学生基本信息,院系信息,公司信息)、退出功能。
初步完成了对高校就业信息的管理,界面设计简洁,使用简单。
2.2高校就业管理系统数据流图图2.1 高校就业管理系统数据流图2.3高校就业系统管理系统功能框图图2.2 高校就业系统管理系统功能框图三、概要设计3.1数据模型(E-R图)图3 高校学生就业管理E_R图3.2数据库表格结构设计表3.1 学院信息表权限char(10) NULL表3.5 用人单位信息表列名数据类型是否为空说明职业号char(10) NOT NULL 主键类型号char(10) NULL需求数量int NULL聘用数量int NULL用人单位char(20) NULL表3.6 学生信息表列名数据类型是否为空说明char(20) NULL性别char(2) NOT NULL Check(男,女)出生年月char(10) NULL籍贯char(20) NULL专业编号char(6) NULL院系编号char(4) NULL就业标志char(20) NULL 初值为“待就业”表3.7 职业信息表列名数据类型是否为空说明类型号char(10) NULL 主键类型名称char(20) NULL四、详细设计4.1登录界面登陆界面的设计如图4.1所示:图4.1 登陆界面设计代码如下:private void button1_Click(object sender, EventArgs e){if (textBox1.Text != ""){if (textBox2.Text != ""){DataConnection.getConn();string id = textBox1.Text.Trim();string pwd = textBox2.Text.Trim();string sql = "select count(*) from [login] where 用户名='" + id + "' and 密码='" + pwd + "'";int state = DataConnection.GetCountInfoBySql(sql);if (state == 0 || state > 1){MessageBox.Show("用户名或密码错误!!!");}else{Form1 f2 = new Form1();f2.Show();this.Hide();}DataConnection.CloseConn();}else{MessageBox.Show("密码为空!!!请输入....");}}else{MessageBox.Show("用户名为空!!!请输入....");}}private void button2_Click(object sender, EventArgs e){textBox1.Text = "";textBox2.Text = "";}4.2修改界面修改界面的设计如图4.2所示:图4.2 修改界面设计代码如下:private void button7_Click(object sender, EventArgs e){if (textBox1.Text != ""){string id = textBox1.Text.Trim();if (radioButton3.Checked == true){if (comboBox1.Text != ""){if (comboBox4.Text != ""){string a = "select sum(需求数量) from profesion_student,type where profesion_student.类型号=type.类型号and profesion_student.用人单位='" + comboBox1.Text.Trim() + "'and 类型名称='" + comboBox4.Text.Trim() + "'";int b = DataConnection.GetCountInfoBySql(a);a = "select sum(聘用数量) from profesion_student,type where profesion_student.类型号=type.类型号and profesion_student.用人单位='" + comboBox1.Text.Trim() + "' and 类型名称='" + comboBox4.Text.Trim() + "'";int c = DataConnection.GetCountInfoBySql(a);if (c < b){string sql = "update student_info set 就业标志 = '已就业' where 学号='" + id + "'";DataConnection.UpdateDate(sql);sql = "select 学号 from employment where 学号='" + id + "'"; if (DataConnection.GetCountInfoBySql(sql) == 0){sql = "insert into employment(学号)values ('" + id + "')";DataConnection.UpdateDate(sql);}string s = "select 职业号 from profesion_student,type where profesion_student.类型号=type.类型号and profesion_student.用人单位='" + comboBox1.Text.Trim() + "' and 类型名称 ='" + comboBox4.Text.Trim() + "'";s = DataConnection.GetDataString(s).Trim();sql = "select count(*) from employment where 职业号='" + s + "'";int d = DataConnection.GetCountInfoBySql(sql);sql = "update profesion_student set 聘用数量=" + d + " where 职业号='" + s + "'";DataConnection.UpdateDate(sql);sql = "update employment set 职业号='" + s + "' where 学号='" + id + "'";DataConnection.UpdateDate(sql);}elseMessageBox.Show("公司聘用数量已达上线!!!");}elseMessageBox.Show("类型号为空!!!请选择....");}else{MessageBox.Show("用人单位为空!!!请选择....\n否则,将就业情况修改为待就业!!!");radioButton2.Checked = true;string s = "update student_info set 就业标志='待就业' where 学号='" + id + "'";DataConnection.UpdateDate(s);string sql = "select 学号 from employment where 学号='" + id + "'"; int h = DataConnection.GetCountInfoBySql(sql);s = "select 职业号 from employment where 学号='" + id+"'";s = DataConnection.GetDataString(s).Trim();if (DataConnection.GetCountInfoBySql(sql) > 0){sql= "delete from employment where 学号= '" + id + "'";int f = DataConnection.UpdateDate(sql);}sql = "select count(*) from employment where 职业号='" + s + "'"; int d = DataConnection.GetCountInfoBySql(sql);sql = "update profesion_student set 聘用数量=" + d + " where 职业号='" + s + "'";DataConnection.UpdateDate(sql);}}elseMessageBox.Show("学号为空!!!请输入....");}}private void tabPage2_Click(object sender, EventArgs e){comboBox2.Items.Clear();comboBox1.Items.Clear();comboBox4.Items.Clear();comboBox6.Items.Clear();radioButton3.Checked = false;radioButton1.Checked = false;radioButton2.Checked = false;radioButton4.Checked = false;string sql = "select 专业名称 from department order by 专业编号 asc";SqlDataReader dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox2.Items.Add(dr["专业名称"]);}sql = "select distinct 用人单位 from profesion_student";dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox1.Items.Add(dr["用人单位"]);}sql = "select 类型名称 from dbo.type";dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox4.Items.Add(dr["类型名称"]);}sql = "select 院系名称 from academy order by 院系编号 asc";dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox6.Items.Add(dr["院系名称"]);}if (textBox1.Text != ""){string id = textBox1.Text.Trim();string sql1 = "select from student_info where 学号='" + id + "'";textBox2.Text = DataConnection.GetDataString(sql1);sql1 = "select 性别 from student_info where 学号='" + id + "'";string s = DataConnection.GetDataString(sql1);if (s == "男")radioButton4.Checked = true;if (s == "女")radioButton1.Checked = true;sql1 = "select 出生年月 from student_info where 学号='" + id + "'";textBox3.Text = DataConnection.GetDataString(sql1);sql1 = "select 籍贯 from student_info where 学号='" + id + "'";textBox4.Text = DataConnection.GetDataString(sql1);sql1 = "select 专业名称 from student_info,department where student_info.专业编号=department.专业编号 and 学号='" + id + "'";comboBox2.Text = DataConnection.GetDataString(sql1);sql1 = "select 院系名称 from student_info,academy where student_info.院系编号=academy.院系编号 and 学号='" + id + "'";comboBox6.Text = DataConnection.GetDataString(sql1);sql1 = "select 就业标志 from student_info where 学号='" + id + "'";string s1 = DataConnection.GetDataString(sql1).Trim();if (s1 == "待就业"){radioButton2.Checked = true;}if (s1 == "已就业"){radioButton3.Checked = true;}sql1 = "select 用人单位from profesion_student,employment where profesion_student.职业号=employment.职业号 and employment.学号='" + id + "'";comboBox1.Text = DataConnection.GetDataString(sql1);sql1 = "select 类型名称 from type,profesion_student,employment where type.类型号=profesion_student.类型号and profesion_student.职业号=employment.职业号and employment.学号='" + id + "'";comboBox4.Text = DataConnection.GetDataString(sql1);}elseMessageBox.Show("学号为空!!!请输入....");}private void button1_Click(object sender, EventArgs e){if (textBox1.Text != ""){string sql = "select 院系编号from academy where 院系名称='" + comboBox6.Text.Trim() + "'";string a = DataConnection.GetDataString(sql).Trim();sql = "select 专业编号from department where 专业名称='" + comboBox2.Text.Trim() + "'";string b = DataConnection.GetDataString(sql).Trim();if (radioButton1.Checked == true){sql = "update student_info set 性别='" + radioButton1.Text + "' where 学号='" + textBox1.Text.Trim() + "'";int g = DataConnection.UpdateDate(sql);}if (radioButton4.Checked == true){sql = "update student_info set 性别='" + radioButton4.Text + "' where 学号='" + textBox1.Text.Trim() + "'";int f = DataConnection.UpdateDate(sql);}sql = "update student_info set ='" + textBox2.Text.Trim() + "',出生年月='" + textBox3.Text.Trim() + "',籍贯='" + textBox4.Text.Trim() + "',专业编号='" + b + "',院系编号='" + a + "' where 学号='" + textBox1.Text.Trim() + "'";int d = DataConnection.UpdateDate(sql);}elseMessageBox.Show("学号为空!!!请输入....");}4.3查询界面查询就业率界面的设计如图4.3所示:图4.3 查询就业率界面设计代码如下:private void tabPage3_Click(object sender, EventArgs e){string sql = "select count(*) from student_info";int a=DataConnection.GetCountInfoBySql(sql);label3.Text = a.ToString();sql = "select count(*) from student_info where 就业标志='已就业'"; int b = DataConnection.GetCountInfoBySql(sql);label5.Text = b.ToString();sql = "select count(*) from student_info where 就业标志='待就业'"; label4.Text = DataConnection.GetCountInfoBySql(sql).ToString();float c =(float) b / a;label6.Text = c.ToString();comboBox3.Items.Clear();sql = "select 专业名称 from department order by 专业编号 asc";SqlDataReader dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox3.Items.Add(dr["专业名称"]);}comboBox3.Text = "";label10.Text = "";}private void button2_Click(object sender, EventArgs e){//comboBox3.Text = "";label10.Text = "";{string sql = "select count(*) from student_info,department where student_info.专业编号=department.专业编号 and 专业名称='" + comboBox3.Text + "'";int a = DataConnection.GetCountInfoBySql(sql);sql = "select count(*) from student_info,department where student_info.专业编号=department.专业编号 and 就业标志='已就业' and 专业名称='" + comboBox3.Text + "'"; int b = DataConnection.GetCountInfoBySql(sql);if (a == 0){label10.Text = "该专业学生人数为0";}else{float c = (float)b / a;label10.Text = c.ToString();}}elseMessageBox.Show(“专业为空!!!请选择….”);}查询已就业信息界面的设计如图4.4所示:图4.4 查询已就业信息界面设计代码如下:private void tabPage4_Click(object sender, EventArgs e){comboBox5.Items.Clear();comboBox7.Items.Clear();comboBox5.Text = "";comboBox7.Text = "";string sql = "select 专业名称 from department order by 专业编号 asc";SqlDataReader dr = DataConnection.GetSqlDataReader(sql);while (dr.Read())comboBox7.Items.Add(dr["专业名称"]);}sql = "select 院系名称 from academy order by 院系编号 asc";dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox5.Items.Add(dr["院系名称"]);}}private void button3_Click(object sender, EventArgs e){if (comboBox5.Text != ""){string s = "select c5.学号,,出生年月,籍贯,院系名称,专业名称,就业标志,用人单位,类型名称 from type right join (select c4.学号,,出生年月,就业标志,籍贯,院系名称,专业名称,c4.职业号,类型号,用人单位 from profesion_student right join (select c3.学号,,出生年月,就业标志,籍贯,院系名称,专业名称,职业号 from dbo.employment right join (select 学号,,出生年月,就业标志,籍贯,院系名称,专业名称 from department join (select 学号,,出生年月,就业标志,籍贯,院系名称,专业编号 from academy join (select 学号,,出生年月,院系编号,籍贯 ,就业标志,专业编号 from student_info where 就业标志='已就业')c1 on academy.院系编号=c1.院系编号)c2 on department.专业编号=c2.专业编号)c3 on employment.学号=c3.学号)c4 on profesion_student.职业号=c4.职业号) c5 on type.类型号=c5.类型号 where 院系名称='"+ comboBox5.Text.Trim() + "'order by c5.学号";dataGridView1.DataSource = DataConnection.GetDataSuoce(s).Tables[0];}elseMessageBox.Show("院系名称为空!!!请选择....");}private void button4_Click(object sender, EventArgs e){if (comboBox7.Text != ""){string s = "select c5.学号,,出生年月,籍贯,院系名称,专业名称,就业标志,用人单位,类型名称 from type right join (select c4.学号,,出生年月,就业标志,籍贯,院系名称,专业名称,c4.职业号,类型号,用人单位 from profesion_student right join (select c3.学号,,出生年月,就业标志,籍贯,院系名称,专业名称,职业号 from dbo.employment right join (select 学号,,出生年月,就业标志,籍贯,院系名称,专业名称 from department join (select 学号,,出生年月,就业标志,籍贯,院系名称,专业编号 from academy join (select 学号,,出生年月,院系编号,籍贯 ,就业标志,专业编号 from student_info where 就业标志='已就业')c1 on academy.院系编号=c1.院系编号)c2 on department.专业编号=c2.专业编号)c3 on employment.学号=c3.学号)c4 on profesion_student.职业号=c4.职业号) c5 on type.类型号=c5.类型号 where 专业名称='" + comboBox7.Text.Trim() + "'order by c5.学号";}elseMessageBox.Show("专业名称为空!!!请选择....");}查询未就业信息界面的设计如图4.5所示:图4.5 查询未就业信息界面设计代码如下:private void tabPage5_Click(object sender, EventArgs e){comboBox8.Items.Clear();comboBox9.Items.Clear();comboBox8.Text = "";comboBox9.Text = "";string sql = "select 专业名称 from department order by 专业编号 asc"; SqlDataReader dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox9.Items.Add(dr["专业名称"]);}sql = "select 院系名称 from academy order by 院系编号 asc";dr = DataConnection.GetSqlDataReader(sql);while (dr.Read()){comboBox8.Items.Add(dr["院系名称"]);}}{if (comboBox8.Text != ""){string sql = "select student_info.学号,,出生年月,籍贯,院系名称,专业名称,就业标志 from student_info,academy,department where student_info.院系编号=academy.院系编号and student_info.专业编号=department.专业编号 and 就业标志='待就业' and 院系名称='" + comboBox8.Text.Trim() + "'order by student_info.学号";dataGridView2.DataSource = DataConnection.GetDataSuoce(sql).Tables[0];}elseMessageBox.Show("院系名称为空!!!请选择....");}private void button6_Click(object sender, EventArgs e){if (comboBox9.Text != ""){string sql = "select student_info.学号,,出生年月,籍贯,院系名称,专业名称,就业标志 from student_info,academy,department where student_info.院系编号=academy.院系编号and student_info.专业编号=department.专业编号 and 就业标志='待就业' and 专业名称='" + comboBox9.Text.Trim() + "'order by student_info.学号";dataGridView2.DataSource = DataConnection.GetDataSuoce(sql).Tables[0];}elseMessageBox.Show("专业名称为空!!!请选择....");}查询公司信息界面如图4.6所示:图4.6 查询公司信息界面设计代码如下:{string sql = "select 用人单位,类型名称,需求数量,聘用数量from profesion_student,type where type.类型号=profesion_student.类型号";dataGridView3.DataSource = DataConnection.GetDataSuoce(sql).Tables[0];}五、软件测试考虑到各种因素和条件的限制,我们决定采用黑盒测试方案。