1、 校友管理系统 精品文档 本科课程设计 题 目 基于jsp的校友管理系统的设计 姓 名 学 号 专业年级 物联网工程1501班 指导教师 职 称 讲师 2017年 6 月 29 日 1.绪论 3 1.1 选课背景与意义 3 1.2开发环境和工具 3 2.系统的开发环境介绍 2 2.1系统流程分析 4 2.2功能分析 4 3.系统设计 6 3.1 系统功能模块设计 6 3.2 数据库设计 6 3.2.1
2、 系统数据流图 6 3.2.2 数据库逻辑设计 7 3.2.3 数据库物理设计 9 4. 系统的设计与实现 11 4.1登录界面: 11 主要代码: 11 4.2连接数据库跳转 12 主要代码: 12 4.3主界面 14 主要代码: 14 4.4添加信息界面 16 5.设计心得 20 基于jsp的校友管理系统的设计实现 1. 绪论 1.1项目背景及意义 当今时代是飞速发展的信息时代,各行各业都离不开信息处理,计算机的给信息系统提供了一个良好的环境,使用计算机进行环境控制,能够很好的进行信息管理。不仅提高了工作效率,而且提高了安全性。 当前人员
3、管理信息较大,工作繁琐,管理模式不够完善,主要是缺乏一个良好的管理系统,本系统就是为了管理院系校友信息而设计的。校友信息管理信息系统是一种新型工具,它的出现就是跟随时代的步伐,为人类造福。校友信息管理系统是以校友为主要用户的管理型信息系统,它可以为在校或已毕业的广大校友们提供交流思想的场所,通过提供完善的校友信息管理服务和规范校友信息的管理,建立起校友间的沟通渠道,以达到增进校友之间、校友与母校之间的感情,方便校友联系的目的,从而增强学校的凝聚力。 作为一个高校,每年都会有新生进毕业生出的现象。一旦毕业生走出校门,想要一直保留有效信息是一件费时间,人力,物力的事情。那么,设计一个有效的管理系
4、统记录毕业生信息成立一种必然。这样将使得校友信息管理工作规范化,系统化,程序化,提高了信息处理的准确性,能够有效的查询和修改,存储校友的信息。 随着就业形势的加剧,每年的就业工作压力都很大,到我校招聘的公司企业也有限,地理位置也不是很好,学校的名声在企业也不太高,这对我校就业也带来了很多问题,如果有校友信息管理系统,这样我们的校友的公司等信息都很容易获取,这即对我校就业有利,而且还能为他们公司带去优秀的人才,这样贵公司也更加信任我校的学生,对所有人都是有利的。 校友信息管理系统虽然只是一个很小的系统,但是他的作用却是重大的,每天一小步就是成功的开始,校友信息就是数字化校园的奠基石,他会给学
5、校和校友带来很多的方便,为学校的建设和发展起到很好的推动作用,也为数字化校园起到了宣传作用。 1.2开发环境和工具 本系统是基于windows 8.1平台,系统前台界面采用常用的MyEclipse,后台数据库采用Mysql。 2.需求分析 2.1系统流程分析 系统分析是应用系统开发过程中的一个重要环节,在完成需求分析之前,应该反复与用户进行详细地交流,即便题目是虚拟的,也要进行大量的调查、研究和讨论,保证系统的基本需求接近现实情况。 系统流程内容包括各环节的信息处理、信息来源、处理方法、信息流去向,可以用系统流程图来表示,易于阅读和理解,系统流程图的基本图例如图2-1
6、 启动系统登陆界面 是否已注册 注册 登录 密码正确 校友界面 个人信息管理 查询 校友信息 浏览杰出校友 校友留言板 校友捐赠中心 导出校友信息 表 系统管理 是 否 是 否 2.2功能分析 根据湖北大学的实际情况,校友信息管理系统需要满足普通用户和系统管理人员两方面的需求。 (1)普通用户的需求 系统的普通用户是肇庆学院历年以来毕业的校友,由于大多数用户对计算机系统都没有很深入的了解,他们一定希望系统比较容易使用,如操作便捷、响应快速等。肇庆学院校
7、友通过注册成为校友信息管理系统的普通用户,已注册的普通用户根据本人的用户名和密码登录系统后,可以查询其他校友的信息,还可以查询本人信息并允许修改部分个人信息。具体说,普通用户的主要需求如下: 1)注册功能。普通用户进入注册页面,可以向系统提交注册信息,系统对用户提交的注册项的语法、格式 进行检查,并将合法的内容保存到数据库中。用户注册时需要提交的主要信息包括用户名、性别、邮箱、密码等。 2)注册用户登录功能。用户提交用户名和密码后,系统会根据数据库中的用户身份信息,验证用户身份,合法用户可以登录到系统中。 3)校友信息查询功能。已经登录的用户可以根据校友的姓名、学院、专业、毕业年限等关键
8、词查询并显示校友信息。 4)个人信息管理功能。当某个校友的部分个人信息(如联系地址、联系电话)发生改变时,该校友可以登录到系统中及时修改自己的个人信息,以便使其他用户能够获得准确的校友信息。 6)浏览杰出校友信息功能。浏览杰出校友的信息,能让我们每一个校友更了解母校的杰出人才,为母校感到骄傲。 7)导出数据表。为了方便校友的需要,系统为校友提供了将校友信息表导出为Excel表 8)系统管理。包括重新登录,退出系统,修改密码 9)校友发表留言的功能。为了促进校友之间信息的交流,校友用户可以在留言板进行留言,发布招聘信息等。 10)校友捐赠功能。校友的捐赠是促进母校发展的一股力量,也是
9、校友回报母校的一种方式。 3.系统设计 3.1 系统功能模块设计 根据需求分析阶段进行的系统流程分析和功能分析,对本系统的功能模块设计如图3-1: 校友信息管理系统 个人信息管理 模块 查询 校友信息 模块 浏览杰出校友 模块 校友留言板 模块 校友捐赠模块 数据报表模块 系统管理 模块 图3-1 3.2 数据库设计 3.2.1 系统数据流图 数据流图是描述系统数据流程的工具,它将数据独立抽象出来,通过图形方
10、式描述信息的来龙去脉和实际流程。对校友信息管理系统及各功能模块进行数据流程分析,可得到校友信息管理系统的各个模块处理数据的过程,如图3-2-1所示: 修改信息 捐赠信息表 留言表 捐赠 查找校友 查看杰出校友 留言 校友 图3 系统数据流程图 校友信息表 杰出校友表 3.2.2 数据库逻辑设计 概念模型是数据库系统的核心和基础,在管理信息系统中,概念模型:体现了设计者对现实世界的认识,描述了软件系统的整体概括。由于各个机器上实现的DBMS软件都是基于某种数据
11、模型的,但是在具体机器上实现的模型都有许多严格的限制。而现实应用环境是复杂多变的,如果把实现世界中的事物直接转换为机器中的对象,就非常不方便。因此,人们研究把现实世界中的事物抽象为不依赖与具体机器的信息结构,又接近人们的思维,并具有丰富语义的概念模型,然后再把概念模型转换为具体的机器上DBMS支持的数据模型。概念模型的描述工具通常是使用E-R模型图。该模型不依赖于具体的硬件环境和DBMS。概念模型设计的常用方法是实体关系方法(E-R方法)。用实体关系方法对具体数据进行抽象加工,将实体集合抽象成实体类型,用实体间的关系反映现实世界事物间的内在关系。首先可以进行局部E-R模型,然后把各局部E-R模
12、型综合成一个全局的E-R模型,最后对全局E-R模型进行优化,最后得到的。在需求分析和逻辑设计之间增加概念设计阶段,可以使设计人员仅从用户的角度看待数据及处理要求和约束。 表达概念设计的结果称为概念模型,对概念模型有以下要求: (1)有丰富的语义表达能力,能表达用户的各种需求。 (2)易于交流和理解,从而可以用它和不熟悉计算机的用户交换意见。 (3)要易于更改。当应用环境和应用要求改变时,概念模型要能很容易的修改和扩充以反映这种变化。 (4)易于向各种数据模型转换。 按照上述要求,传统的数据模型(网状、层次和关系模型)都不适合作概念模型。在数据库的概念设计中,通常采用E-R数据模型来
13、表示数据库的概念结构。 E-R数据模型将现实世界的信息结构统一用属性、实体以及它们之间的联系来描述。 校友信息管理系统的E-R图如图3-2-2所示 姓名 m m 1 m 1 城市 校友 属于 属于 班级 属于 专业 出生年月 姓名 联系电话 毕业年限 联系地址 现居城市 工作领域 工作单位 学院 性别 职业 班级 邮箱 QQ 班级名称 班级编号 专业编号 城市名称 城市编号 省份名称 专业 学院名称 专业编号 专业名称 班主任 教工编号 职称 电话 邮箱 QQ 管理 班级编号 性别
14、 1 m 1 如图3-2-2 3.2.3 数据库物理设计 根据在数据库概念设计中给出的数据库校友理系统的关系模型,可以设计数据表结构,服务器上建名为schoolfellow的数据库。其中包括以下表:下面具体介绍数据库中各表的结构: (1)表名:schoolfellow,即:校友信息表,存储校友的基本信息,其结构如表所示。 表1 (schoolfelloew)校友信息表 字段名称 字段类型 字段长度 字段属性 是否为空 备注 username nvarchar 15 用户名 NOT NULL 主键
15、sname nvarchar 10 姓名 NOT NULL sex nvarchar 1 性别 NOT NULL faculty nvarchar 15 学院 NULL major nvarchar 15 专业 NULL class nvarchar 15 班级 NULL teacher nvarchar 15 班主任 NULL Tphone nvarchar 15 班主任电话 NULL birthday datetime 出生年月 NULL graduate dateti
16、me 毕业年限 NULL phone nvarchar 12 联系电话 NULL mail nvarchar 20 邮箱 NOT NULL QQ nvarchar 15 QQ NULL address nvarchar 50 联系地址 NULL city nvarchar 10 现居城市 NULL jobfield nvarchar 15 工作领域 NULL workunit nvarchar 20 工作单位 NULL job nvarchar 20 职业 NULL
17、 (2)表名:message,即:留言表,存储校友的留言信息,其结构如表所示。 表2 message( 留言表) 字段名称 字段类型 字段长度 字段属性 是否为空 备注 username nchar 15 用户名 NOT NULL 主键 name nchar 10 姓名 NOT NULL message ntext 留言内容 NOT NULL (3)表名:special,即:杰出校友表,存储杰出校友信息,其结构如表所示。 表3 special(杰出校友表) 字段名称 字段类型 字段长度 字段属
18、性 是否为空 备注 username nchar 15 用户名 NOT NULL 主键 sname nchar 10 姓名 NOT NULL sex nchar 1 性别 NOT NULL faculty nchar 15 学院 NULL major nchar 15 专业 NULL class nchar 15 班级 NULL birthday datetime 出生年月 NULL graduate datetime 毕业年限 NULL phone nchar 1
19、2 联系电话 NULL mail nchar 20 邮箱 NOT NULL 主键 QQ nchar 15 QQ NULL address nvarchar 50 联系地址 NULL city nchar 10 现居城市 NULL jobfield nchar 15 工作领域 NULL workunit nchar 20 工作单位 NULL job nchar 20 职业 NULL achievement ntext 个人成就 4. 系统的
20、设计与实现 4.1登录界面: 主要代码:
24、2连接数据库跳转 主要代码:
<% String name=request.getParameter("username1"); String pass=request.getParameter("password1"); //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.25、1:3306/school","root","123456"); //3.获取预处理命令 //conn.prepareStatement ("insert into ebmanager (username) value(?)"); PreparedStatement ps=conn.prepareStatement("select * from information where username=?"); ps.setString(1,name); //4.执行查询 ResultSet rs=ps.e
26、xecuteQuery(); //5.处理结果集 if(rs.next()) { //用户名正确 String pass1=rs.getString("password"); if(pass1.equals(pass)) { //查询成功 session.setAttribute("user",name); response.sendRedirect("admin.jsp"); } else{
27、 out.println("");
}
}
else{
out.println("");
}
%>
4.3主界面
主要代码:
29、
30、index="3">测试用例三
32、
33、class="scm dd-ar">
35、/dl>
36、",name); mygerenset=new CGERENSET(&((CSchoolfellowApp*)AfxGetApp())->m_DB); if(!mygerenset->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr)) { AfxMessageBox("schoolfellow表打开失败!"); } if(mygerenset->GetRecordCount() == 0) { //AfxMessageBox("无记录!"); } m_sname=mygerenset->m_sname; m_sex=my
37、gerenset->m_sex; m_faculty=mygerenset->m_faculty; m_major=mygerenset->m_major; m_classname=mygerenset->m_classname; m_birthday=mygerenset->m_birthday; m_graduate=mygerenset->m_graduate; m_phone=mygerenset->m_phone; m_mail=mygerenset->m_mail; m_QQ=mygerenset->m_QQ; m_myaddress=myger
38、enset->m_myaddress; m_city=mygerenset->m_city; m_jobfield=mygerenset->m_jobfield; m_workunit=mygerenset->m_workunit; m_job=mygerenset->m_job; m_teacher2=mygerenset->m_teacher; m_tphone2=mygerenset->m_tphone; // m_Photo=mygerenset->m_tupian; // m_Photo=mygerenset->m_tupian.m_hData;
39、 //m_Photo=mygerenset->m_tupian.m_dwDataLength; if(mygerenset->IsOpen()) { mygerenset->Close(); delete mygerenset; } UpdateData(FALSE); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property
40、 Pages should return FALSE } void CGEREN::OnXiugai() { // TODO: Add your control notification handler code here UpdateData(TRUE); CString sql; sql.Format("SELECT * FROM schoolfellow where username='%s'",name); mygerenset = new CGERENSET(&((CSchoolfellowApp*)AfxGetApp())->m_DB);
41、 if(!mygerenset->Open(AFX_DB_USE_DEFAULT_TYPE,sql)) { AfxMessageBox("schoolfellow 表打开失败!"); return; } mygerenset->Edit(); //mygerenset->m_username=name; mygerenset->m_sname=m_sname; mygerenset->m_sex=m_sex; mygerenset->m_faculty=m_faculty; mygerenset->m_major=m_major; my
42、gerenset->m_classname=m_classname; mygerenset->m_birthday=m_birthday; mygerenset->m_graduate=m_graduate; mygerenset->m_phone=m_phone; mygerenset->m_QQ=m_QQ; mygerenset->m_myaddress=m_myaddress; mygerenset->m_city=m_city; mygerenset->m_jobfield=m_jobfield; mygerenset->m_workunit=m_wor
43、kunit; mygerenset->m_job=m_job; mygerenset->m_teacher=m_teacher2; mygerenset->m_tphone=m_tphone2; // mygerenset->m_tupian=m_Photo; mygerenset->m_tupian.m_hData =(HGLOBAL)m_Photo; mygerenset->m_tupian.m_dwDataLength = sizeof(m_Photo); try { mygerenset->Update(); mygerenset->
44、Requery(); AfxMessageBox("成功保存修改!"); } catch( CDBException* e ) { AfxMessageBox( e->m_strError,MB_ICONEXCLAMATION ); e->Delete(); } UpdateData(FALSE); } void CGEREN::Onexit() { // TODO: Add your control notification handler code here CDialog::OnCancel(
45、); } void CGEREN::OnUp() { // TODO: Add your control notification handler code here CFileDialog fileDlg(TRUE, "bmp", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp||", this); if(IDOK != fileDlg.DoModal()) return ; m_PhotoFileName = fileDlg.GetFileName(); m_Photo
46、 (HBITMAP)::LoadImage(::AfxGetInstanceHandle(), m_PhotoFileName, IMAGE_BITMAP, 128, 128, LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_DEFAULTSIZE); //((CStatic*)GetDlgItem(IDC_PHOTO))->SetBitmap(m_Photo); this->Invalidate(); } dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0
47、0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY); if(NULL != m_Photo) { CDC memDC; CBitmap bitmap; BITMAP bm; bitmap.Attach(m_Photo); memDC.CreateCompatibleDC((CDC* )&dc); memDC.SelectObject(&bitmap); bitmap.GetBitmap(&bm); dc.StretchBlt(BITMAP_X, BITMAP_Y, 128, 128, &memDC,
48、 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); memDC.DeleteDC(); bitmap.Detach(); } // TODO: Add your message handler code here // Do not call CDialog::OnPaint() for painting messages 5.设计心得 在做这个学生信息管理系统的这段时间,真的学会了很多,编程不仅仅是要编程者明白其中的用法,更主要的是要使用者明白,对于大多数人更加使用,所以,在这个管理系统真的让我学会了很多,也知道了以前我根本想不到的一些问题,让我在做这些程序的时候更加周密、严谨。在这期间,高兴过,同时也失落过。做出了一个函数真的真的是很高兴,因为那时自己的果实,但如果一时陷入问题当中又很苦恼,真的是很失落,甚至对它失去信息。现在我真的认识到了c语言的渊博,以前我们只是敲一些非常简单的程序,现在我们都可以设计一个管理系统了,而且它都是有以前那些小程序的基础。真的需要好好去学习,值得去探索。 收集于网络,如有侵权请联系管理员删除






