recruit_system/README.md

26 KiB
Raw Permalink Blame History

基于ASP.NET和SQL SERVER数据库的招聘网站设计与实现

摘 要

本课题是基于互联网与数据库技术的网上招聘网站是先进的计算机科学技术和现代招聘理念相结合的产物通过使用以ASP.NET技术为基础基本实现网上招聘网站的基本功能满足了求职者和招聘企业的需求实现了招聘单位和求职者的双向选择对于求职者查看岗位和简历投递进度有很大的帮助本网站收集大量招聘单位的招聘任息它使网上招聘从盲目的网络职位搜索到有序大量的职位投递从混乱变为规范而成功率较高。

本人负责求职者简历投递的流程和公司处理求职者的全部操作在功能上已经满足基本需求但细节上仍然有瑕疵。比如数据的更新网站本应使用Ajax技术实现异步刷新但由于技术难度和风险选择了整体刷新在视觉效果上仍然可以有改进的余地。

关键词 招聘网站;职位投递;双向需求

1 系统功能概述

1.1 公司权限

  • 公司权限登录:进入公司权限,可选择公司的功能菜单

  • 公司信息管理:展示公司图标、名称、地址及详细信息,并提供编辑功能

  • 职位管理:提供发布删除本公司职位功能

  • 申请管理:查看求职者投递的简历并选择是否提档

  • 录用信息:查看已经被提档的用户,并发送面试时间。

1.2 求职者权限

  • 求职者登录:进入求职者界面,可选择求职者的功能菜单

  • 简历管理:查看个人简历信息,并提供编辑简历功能

  • 职位市场:展示市场中的职位信息,并允许投递简历

  • 职位管理:查看求职者已经投档的简历

  • 我的信箱:查看公司反馈的投递简历信息和面试信息

1.3 系统层次

系统的层次图如下图所示。

2 数据库设计

2.1 需求分析

为了实现系统功能本系统需要设计7个数据表对应的实体关系图如下图所示。

2.2 表结构设计

求职者模型对应的表结构如下表所示。

求职者表

字段名 数据类型 长度 含义 约束
Sid int 10 ID 主键
Sresume int 10 对应简历I
Susername varchar 20 用户名
Spassword varchar 20 密码

简历表

字段名 数据类型 长度 含义 约束
Rid int 10 ID 主键
Rname varchar 10 姓名
Rsex varchar 2 性别
Rbirth datetime 20 生日
Rtel varchar 255 手机号
Rphoto varchar 255 照片
Remail varchar 255 电子邮件
Rworktime varchar 255 工作经历
Redu varchar 255 学历
Revaluate varchar 255 自我评价
Rproject varchar 255 项目经验
Rtech varchar 255 教育经历
Rhonor varchar 255 荣誉奖项
Rhobby varchar 255 兴趣爱好

职位表

字段名 数据类型 长度 含义 约束
Jid int 10 ID 主键
Jname varchar 20 职位名
Jcompany int 10 所属公司
Jneed varchar 255 需求
Jsalary varchar 255 工资待遇
Jduty varchar 255 工作任务
Jdemand varchar 255 工作内容
Jdate varchar 255 发布时间

3 系统各功能模块的详细设计

3.1 求职者登录

该模块是求职者登录的入口,首先通过用户的账号判断数据库是否存在该求职者用户,然后通过用户账号读取用户名密码进行匹配,并做出相应反馈。

求职者登录界面如下图所示。

登录后从数据库中读取求职者信息并存储到Seeker对象中。然后将进入求职者权限界面并可以选择求职者的菜单。

求职者欢迎界面如下图所示。

求职者登录界面模块中的主要代码如下:

        public static Seeker Login(string name, string pwd)
        {
            if (Exist(name))
            {
                string sql = "SELECT * FROM seeker WHERE Susername = @name";
                SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@name",name)
                };
                DataTable dt = DBHelper.GetDataTable(sql, parm);
                DBHelper.SqlClose();
                if (dt.Rows[0].ItemArray[4].ToString() == pwd)
                {
                    Seeker seeker = new Seeker();
                    seeker.Sid = (int)dt.Rows[0].ItemArray[0];
                    seeker.Sresume = (int)dt.Rows[0].ItemArray[2];
                    seeker.Sname = dt.Rows[0].ItemArray[1].ToString();
                    return seeker;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
     }

3.2 简历管理

求职者的简历管理模块是查看编辑简历的模块。首先通过DataSource来绑定到数据库并将FormView绑定到DataSource更新时数据源也会跟着更新。

简历展示界面如下图所示。

当点击编辑键时,会展示事先设置好的编辑样式,点击更新后自动根据绑定的数据源更新到数据库。

编辑简历界面如下图所示。

3.3 职位市场

职位市场模块提供了求职者对职位的浏览并可以随时向中意的职位发送简历。展示界面从数据库中查询没有被投递过的职位并用Html代码和asp脚本动态展示。动态展示的同时在复选框中存储着职位的ID作为投递的依据。

职位市场界面如下图所示。

投递简历时首先将隐藏的对话框展示出来等待用户确认确认后将复选框选中的ID求职者的ID和当前的时间存储到数据库。

投递确认的对话框如下图所示

展示职位的界面主要代码如下:

        public static List<Job> getJobsBySeeker(int sid)
        {
            string sql = "SELECT * FROM job,company Where Cid = Jcompany And Jid NOT IN (Select Jid FROM Apply where Sid = @Sid)";
            SqlParameter[] parm = new SqlParameter[]
            {
                new SqlParameter("@Sid",sid)
            };
            DataTable dt = DBHelper.GetDataTable(sql, parm);
            DBHelper.SqlClose();
            List<Job> jobs = new List<Job>();
            foreach (DataRow row in dt.Rows)
            {
                Job job = new Job();
                job.Jid = (int)row.ItemArray[0];
                job.Jname = row.ItemArray[1].ToString();
                job.Jcompany = (int)row.ItemArray[2];
                job.Jneed = row.ItemArray[3].ToString();
                job.Jsalary = row.ItemArray[4].ToString();
                job.Jduty = row.ItemArray[5].ToString();
                job.Jdemand = row.ItemArray[6].ToString();
                job.Jdate = row.ItemArray[7].ToString().Split(' ')[0];
                job.Cname = row.ItemArray[9].ToString();
                jobs.Add(job);
            }
            return jobs;
     }

投递简历的主要代码如下:

        protected void Button1_Click(object sender, EventArgs e)
        {
            string[] jids = Request.Form["push"].ToString().Split(',');
            foreach (string jid in jids)
            {
                if (!DJob.PushResume(Convert.ToInt32(jid), Convert.ToInt32(Session["uid"])))
                {
                    Response.Write("<script>alert('投递失败!');</script>");
                    return;
                }
            }
            Response.Write("<script>alert('投递成功!');</script>");
        }

3.4 公司登录

该模块是公司职员登录界面,首先通过用户的账号判断数据库是否存在该公司用户,然后通过用户账号读取用户名密码进行匹配,账号及密码匹配则进入公司主页,否则予以提示。

公司登录界面如下图所示。

成功登录后从数据库中读取公司信息并存储到Company对象中然后将进入公司权限界面并可以查看公司的菜单。

成功登录界面如下图所示。

公司登录界面模块中的主要代码如下:

        public static Company Login(string name, string pwd)
        {
            if (Exist(name))
            {
                string sql = "SELECT * FROM company WHERE Cusername = @name";
                SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@name",name)
                };
                DataTable dt = DBHelper.GetDataTable(sql, parm);
                DBHelper.SqlClose();
                if (dt.Rows[0].ItemArray[4].ToString() == pwd)
                {
                    Company company = new Company();
                    company.Cid = (int)dt.Rows[0].ItemArray[0];
                    company.Cname = dt.Rows[0].ItemArray[1].ToString();
                    company.Cdetails = dt.Rows[0].ItemArray[2].ToString();
                    company.Caddress = dt.Rows[0].ItemArray[5].ToString();
                    return company;
                }
                else
                {
                    return null;
                }
            else
            {
                return null;
            }
        }

3.5 公司信息管理

公司信息管理模块是提供查看和编辑公司信息的模块。首先将对象Company中存储的信息用p标签展示到前端。

公司信息展示界面如下图所示。

当点击编辑键时展示修改的对话框。确定后先将改动的数据存储到Company对象然后用公司的方法封装类DCompany的方法将新的Company对象更新到数据库。

编辑公司详情界面如下图所示。

公司修改详细信息的按钮事件代码如下:

        protected void Button1_Click(object sender, EventArgs e)
        {
            String s1 = Request.Form["company_info"];
            com.Cdetails = s1;
            if (DCompany.UpdateCompany(com))
                Response.Write("<script>alert('修改完成!');</script>");
            else
                Response.Write("<script>alert('修改失败!');</script>");
        }

工具类DCompany更新数据库的主要代码如下

        public static bool UpdateCompany(Company company)
        {
            string sql = "UPDATE [company] SET [Cname] = @Cname, [Cdetails] = @Cdetails, [Caddress] = @Caddress WHERE [Cid] = @Cid";
            SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@Cname",company.Cname),
                    new SqlParameter("@Cdetails",company.Cdetails),
                    new SqlParameter("@Caddress",company.Caddress),
                    new SqlParameter("@Cid",company.Cid)
                };
            int line = DBHelper.ExecuteNonQuery(sql, parm);
            DBHelper.SqlClose();
            return line>0;
        }

3.6 公司职位管理

公司职位管理模块提供了公司对职位的发布和删除功能。展示界面根据Company对象的公司ID从数据中读取公司的职位存储到集合中在前端页面用ASP脚本遍历集合并用Html代码和asp脚本动态展示数据。

职位展示界面如下图所示。

新建职位信息时首先将隐藏的新建对话框展示出来等待用户输入信息后点击确认按钮确认后通过职位的工具类DJob插入到数据库中。

新建职位界面如下图所示。

公司职位展示界面主要代码如下:

        public static List<Job> getJobsByCompany(int cid)
        {
            string sql = "SELECT * FROM job,company WHERE Jcompany = @cid AND Cid = Jcompany";
            SqlParameter[] parm = new SqlParameter[]
            {
                new SqlParameter("@cid",cid)
            };
            DataTable dt = DBHelper.GetDataTable(sql, parm);
            DBHelper.SqlClose();
            List<Job> jobs = new List<Job>();
            foreach(DataRow row in dt.Rows)
            {
                Job job = new Job();
                job.Jid = (int)row.ItemArray[0];
                job.Jname = row.ItemArray[1].ToString();
                job.Jcompany = (int)row.ItemArray[2];
                job.Jneed = row.ItemArray[3].ToString();
                job.Jdate = row.ItemArray[7].ToString().Split(' ')[0];
                job.Cname = row.ItemArray[9].ToString();
                jobs.Add(job);
            }
            return jobs;
        }

公司发布岗位的主要代码如下:

        public static bool InsertJob(Job job)
        {
            string sql = "INSERT INTO [job] ([Jname], [Jcompany], [Jneed], [Jsalary], [Jduty], [Jdemand], [Jdate]) VALUES (@Jname, @Jcompany, @Jneed, @Jsalary, @Jduty, @Jdemand, @Jdate)";
            SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@Jname",job.Jname),
                    new SqlParameter("@Jcompany",job.Jcompany),
                    new SqlParameter("@Jneed",job.Jneed),
                    new SqlParameter("@Jduty",job.Jduty),
                    new SqlParameter("@Jdemand",job.Jdemand),
                    new SqlParameter("@Jdate",DateTime.Now.Date),
                };
            int line = DBHelper.ExecuteNonQuery(sql, parm);
            DBHelper.SqlClose();
            return line > 0;
        }

3.7 公司申请管理模块

申请管理模块是求职者向公司发送简历后公司对发送过来的简历处理的过程。首先通过公司的ID从数据库中读取多表匹配的结果将结果作为数据源绑定在DataGridView上以表格的形式展示。

申请界面如下图所示。

选择一个求职者后,跳转到简历界面,查看选中的求职者的简历。有同意和驳回两个选项。并且会分别给对方发送通知。

查看简历界面如下图所示。

发送同意信息的按钮中的主要代码如下:

        protected void Button1_Click(object sender, EventArgs e)
        {
            int aid = Convert.ToInt32(Request.QueryString["apply"]);
            if (DNews.SentSuccessNews(aid))
            {
                Response.Redirect("~/Com/apply.aspx",false);
                Response.Write("<script>alert('提档成功!');</script>");
            }
            else
            {
                Response.Write("<script>alert('提档失败!');</script>");
            }
        }

获取申请的主要代码如下:

        public static Apply GetApply(int aid)
        {
            string sql = "SELECT Apply.Aid, job.Jname, company.Cname,seeker.Sid, seeker.Sname, Apply.Adatetime,job.Jid FROM job INNER JOIN Apply ON job.Jid = Apply.Jid INNER JOIN seeker ON Apply.Sid = seeker.Sid CROSS JOIN company WHERE (Apply.Aid = @Aid)";
            SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@Aid",aid)
                };
            DataTable dt = DBHelper.GetDataTable(sql, parm);
            DBHelper.SqlClose();
            Apply apply = new Apply();
            apply.Aid = Convert.ToInt32(dt.Rows[0].ItemArray[0]);
            apply.Jname = dt.Rows[0].ItemArray[1].ToString();
            apply.Cname = dt.Rows[0].ItemArray[2].ToString();
            apply.Sid = Convert.ToInt32(dt.Rows[0].ItemArray[3]);
            apply.Sname = dt.Rows[0].ItemArray[4].ToString();
            apply.Adatetime = dt.Rows[0].ItemArray[5].ToString();
            apply.Jid = Convert.ToInt32(dt.Rows[0].ItemArray[6]);
            return apply;
       }

操作类DNews发送消息的函数主要代码如下

        public static bool SentSuccessNews(int aid)
        {
            string sql = "INSERT INTO [news] ([Sid], [Ntitle], [Ncontent], [Ntime]) VALUES (@Sid, @Ntitle, @Ncontent, @Ntime)";
            Apply apply = DNews.GetApply(aid);
            string title = apply.Cname + "-" + apply.Jname + "-提档通知";
            string content = "亲爱的" + apply.Sname + "同学:\n\t您在" + apply.Adatetime + "的时候向" + apply.Cname + "公司" + apply.Jname + "职位投递的简历已被提档,请等待面试通知.\n\t祝您面试顺利!";
            SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@Sid",apply.Sid),
                    new SqlParameter("@Ntitle",title),
                    new SqlParameter("@Ncontent",content),
                    new SqlParameter("@Ntime",DateTime.Now),
                };
            int line = DBHelper.ExecuteNonQuery(sql, parm);
            DBHelper.SqlClose();
            if (line > 0)
            {
                if (DEmploy.Employ(apply.Jid, apply.Sid))
                    return true;
            }
            return false;
     }

3.8 录用管理与面试

录用管理模块主要展示被提档的人员的录用信息以及向录用人员发送面试通知。首先通过公司的ID从数据库中读取被录用的人员信息存储在集合中在前端遍历集合通过html和asp脚本动态展示。

查看录用人员的界面如下图所示。

发送面试通知的界面如下图所示。

展示录用人员的主要代码如下:

        public static List<Employ> getEmploys(int cid)
        {
            string sql = "SELECT resume.Rname, resume.Remail, resume.Rtel, employ.Eid, employ.Jid, employ.Sid, employ.Edate, job.Jname, job.Jcompany FROM resume INNER JOIN job INNER JOIN employ ON job.Jid = employ.Jid INNER JOIN seeker ON employ.Sid = seeker.Sid ON resume.Rid = seeker.Sresume WHERE(job.Jcompany = @Jcompany)";
            SqlParameter[] parm = new SqlParameter[]
            {
                new SqlParameter("@Jcompany",cid)
            };
            DataTable dt = DBHelper.GetDataTable(sql, parm);
            DBHelper.SqlClose();
            List<Employ> employs = new List<Employ>();
            foreach (DataRow row in dt.Rows)
            {
                Employ employ = new Employ();
                employ.Eid = (int)row.ItemArray[3];
                employ.Jid = (int)row.ItemArray[4];
                employ.Sid = (int)row.ItemArray[5];
                employ.Edate = row.ItemArray[6].ToString();
                employ.Jname = row.ItemArray[7].ToString();
                employ.Sname = row.ItemArray[0].ToString();
                employ.Stel = row.ItemArray[2].ToString();
                employ.Smail = row.ItemArray[1].ToString();
                employs.Add(employ);
            }
            return employs;
      }

发送面试通知的主要代码如下:

        public static bool SentInterviewNews(int eid,string date)
        {
            string sql = "INSERT INTO [news] ([Sid], [Ntitle], [Ncontent], [Ntime]) VALUES (@Sid, @Ntitle, @Ncontent, @Ntime)";
            Employ employ = DEmploy.getEmploy(eid);
            string title = employ.Jname + "-面试通知";
            string content = "亲爱的" + employ.Sname + "同学:\n\t 请您在 " + date + " 的时候参加 "+ employ.Jname+" 岗位的面试.";
            SqlParameter[] parm = new SqlParameter[]
                {
                    new SqlParameter("@Sid",employ.Sid),
                    new SqlParameter("@Ntitle",title),
                    new SqlParameter("@Ncontent",content),
                    new SqlParameter("@Ntime",DateTime.Now),
            };
            int line = DBHelper.ExecuteNonQuery(sql, parm);
            DBHelper.SqlClose();
            return line > 0;
      }

3.9 求职者信箱

信箱模块可以让求职者快速查看简历投递的进度和面试通知。系统根据求职者的ID从数据库中读取求职者的信息集合然后在前端遍历集合通过html和asp脚本动态展示。

信箱界面如下图所示。

展示信息的主要代码如下:

        public static List<News> getNewsBySeeker(int sid)
        {
            string sql = "SELECT * FROM [news] WHERE ([Sid] = @Sid)";
            SqlParameter[] parm = new SqlParameter[]
            {
                new SqlParameter("@Sid",sid)
            };
            DataTable dt = DBHelper.GetDataTable(sql, parm);
            DBHelper.SqlClose();
            List<News> newsList = new List<News>();
            foreach (DataRow row in dt.Rows)
            {
                News news = new News();
                news.Nid = Convert.ToInt32(row.ItemArray[0]);
                news.Ntime = row.ItemArray[4].ToString();
                news.Ntitle = row.ItemArray[2].ToString();
                news.Ncontent = row.ItemArray[3].ToString();
                newsList.Add(news);
            }
            return newsList;
       }

4 结论

由于本次课设在期末考试之后经过一次又一次细致的复习此次课设对我来说也不是完全的一头雾水本次题目是网上招聘网站的设计与开发当我带着疑问查询问题时也对asp这门课有着更深层上的理解。这次课程设计我学到很多很多的东西不仅巩固了以前所学过的知识而且学到了很多在书本上所没有学到过的知识掌握了一种系统的研究方法。通过这次课程设计使我懂得了理论与实际相结合是很重要的只有理论知识是远远不够的。同时在设计的过程中发现了自己的不足之处不过。这次课程设计通过自己和同组同学的努力还有老师的辛勤指导下最终顺利完成了。

在开发的过程中,一个标点符号就有可能让你烦不胜烦,其次在开发的过程中,要先对开发的项目进行分析,设计,先分析清楚项目的主要业务,主要流程,弄清楚实体与实体之间的关系,要尽可能的考虑周到,要细到具体的每一个功能,每一个实体所包含的属性、字段,然后在进行数据库的设计,之后再着手代码的编写。

有的功能看起来貌似很简单总感觉自己没必要花时间去做这么简单的东西当你真正动手去做的时候你就会知道它其实并不简单要把它做好的话也是有一定的困难的。例如这次项目中的detailsview界面不太美观而且还不能套用css于是我们放弃了使用detailsview而选择使用了formview这样就完美地解决了此类问题也为我以后的程序设计打下了基础。还有一点就是要多注意代码的书写规范它能方便我们队代码的查找与修改同时也能缩短我们的开发时间。

本系统基本实现网上招聘网站的基本功能,满足了求职者和招聘企业的需求,实现了招聘单位和求职者的双向选择,对于求职者查看岗位和简历投递进度有很大的帮助。

由于项目实训的时间紧迫仍然具有很多问题和缺点比如公司对于某条岗位信息的修改因为暂时无法获取鼠标点击的div所代表的数据ID而暂时搁置。虽然可以通过后台的JavaScript获取点击时间但仍然无法很好的解决。再比如数据的更新本应使用Ajax技术实现异步刷新但由于技术难度和风险选择了整体刷新在视觉效果上没有尽善尽美。

总之,本系统已基本满足招聘网站的需求,可以发布并测试,根据运行中的反馈和测试进行进一步的修改与完善。

参考文献

[1] 丁允超 汪忆 张浩然著.ASP.NET WEB程序设计.北京.清华大学出版社.2017

[2] 黄锐军著..NET WEB企业应用开发实战.北京.清华大学出版社.2017

[3] 魏菊霞著.ASP.NET实践教程.北京.清华大学出版社.2017

[4] 尚展垒,唐思均著.ASP.NET程序设计.北京.人民邮电出版社.2017

[5] 软件开发技术联盟著.ASP.NET开发实例大全.北京.清华大学出版社.2016