综合实训报告及成绩评定表.docx
《综合实训报告及成绩评定表.docx》由会员分享,可在线阅读,更多相关《综合实训报告及成绩评定表.docx(24页珍藏版)》请在冰豆网上搜索。
综合实训报告及成绩评定表
XXXX学院计算机系
201-201第学期综合工程实训评定表
填表时间:
201年月日
学号
专业班级
实训地点
实训题目
信息接收发布系统
实训工程介
绍
〔包括实训工程简介,本人承当任务及完成情况,企业联系情况等〕
学生签名〔手写〕:
指导教师评语
指导教师签名〔手写〕:
成绩评定
任务完成情况
出勤情况
教师评价
总成绩
XXXXX学院计算机系
综合项目实训报告
2021-2021第一学期
实训题目:
信息接收发布系统
专业班级:
学号:
姓名:
指导教师:
日期:
年月日
一、实训目的及要求
1.1实训目的
毕业实训是计算机科学与技术专业重要的实践性教学活动。
其目的是使学生们进一步加深对所学知识的理解,理论联系实际,稳固所学有关计算机专业根底理论知识和根本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活、社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况。
学生在实训的同时,进展一定的社会实践与调查活动。
毕业实训环节对于提高学生的综合能力和全面素质具有重要意义。
1.2实训要求
通过课程设计,要求学生在指导教师的指导下,独立完成课程的设计的全部容,包括:
(1).确定开发的系统,收集和调查有关技术资料。
(2).按软件工程步骤进展系统开发。
(3).对系统进展测试和完善。
(4).完成课程设计报告。
二、设计思路
2.1作品介绍
2.1.1作品名称
信息接收发布系统
2.1.2作品大小
2.93MB
2.1.3作品功能
信息接收发布系统的主要功能实现包括后台管理员登录并对信息的操作及管理,通过后台发布信息,Android手机端用户登录接收并查看信息。
从而实现前台与后台的相互交流。
Android前台功能主要有:
用户名的登录、信息的查看。
后台包括管理员的登录、信息发布、信息管理〔添加及删除〕、关于〔系统的一些介绍〕。
2.1.4技术实现
在作品设计及实现的过程中,系统采用apache-tomcat为效劳器、mysql做数据库、android作为前台、jsp为后台的模式进展设计。
前台android主要运用到的技术包括、等进展布局,进展信息的显示,Intent进展页面的跳转。
后台通过jsp实现信息的发布、管理及用户的管理,主要运用到的技术有css+div进展页面布局及定位,通过servlet来进展用户名与数据库的验证及处理结果。
后台页面采用c/s模式进展设计。
2.2作品操作实践
首先,进入后台管理员登陆界面。
如图:
用户登陆成功,进入信息发布页面实现对信息的发布,如下列图:
输入所要发布的信息容,点击“发送信息〞,提示信息发送状态,如图:
然后,登陆Android手机客户端进展接收信息,如图:
登陆成功后接收并查看后台发布的信息,如下列图:
2.3开发过程
2.3.1数据库模块
数据库采用当前比拟流行的mysql作为数据库,数据库的名字为jnvcmis。
数据库包括五表,adminmis管理员表、friendmis好友表、infomis信息表、reply信息回复表、usermis用户表
管理员表(adminmis)主要用于管理管理员的表,它包括三个属性:
adminid、adminname、adminpwd,分别用于记录管理员的编号、以及登录密码。
具体如下列图:
好友表(friendmis)用来管理好友,好友表包括三个属性:
username、friendnumber、remarks,用来记录好友的编号、及评论。
具体如下列图:
信息表(infomis)管理信息发布的容content、发布时间time、发布人adminname、信息的编号infoid以及信息的主题thenum。
具体如下列图:
信息回复表(reply)主要是用来记录信息回复的容(replyrecord)、信息回复人(replyname)、信息回复时间(replytime)、信息编号(replyid),具体如下列图:
用户表(usermis)包括用户名(username)、用户编号(usernumber)、用户密码(userpwd)、用户性别(usersex)、所在部门(department)、所在状态(state)(是否在线)等属性,还有一些其他的属性。
具体如下列图:
连接数据库的局部代码如下:
DBOP.java
publicclassDBOP{
publicstaticConnectiongetConnection(){
Connectioncon=null;
StringJDriver=".mysql.jdbc.Driver";//MySQL提供的JDBC驱动,要保证它在CLASSPATH里可见
StringconURL="jdbc:
mysql:
//localhost/jnvcmis";//本地计算机上的MySQL数据库Company的URL
try{
Class.forName(JDriver);
}
catch(ClassNotFoundExceptionf_e){//如果找不到驱动类
System.out.println("找不到驱动类DriverNotFound:
"+f_e);
}
try{
con=DriverManager.getConnection(conURL,"root","root");//连接数据库
}catch(SQLExceptionsql_e){//都是SQLException
System.out.println("sql_e");
}
returncon;
}
}
2.3.2前台登陆模块
整个前台用户登录界面采用冷色调,主要以浅蓝加白色搭配。
因为考虑到时信息发布系统,所以风格仿当前比拟流行的QQ设计的,延续了QQ的一些功能的同时也进展了一些简化。
登录功能通过读取mysql数据库的数据进展验证用户是否是合法用户,同时也对用户的一些根本设置进展保存。
例如:
是否记住密码、是否隐身登陆等的设置。
局部代码如下:
publicclassMainActivityextendsActivity{
privateEditTextetname,etpwd;
privateButtonbtn;
privateCheckBoxcbpwd,cbzt;
privateStringname,pwd;
Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etname=(EditText)findViewById(R.id.login_name);
etpwd=(EditText)findViewById(R.id.login_password);
cbpwd=(CheckBox)findViewById(R.id.auto_save_password);
cbzt=(CheckBox)findViewById(R.id.hide_login);
btn=(Button)findViewById(R.id.login_btn);
btn.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
name=etname.getText().toString().trim();
pwd=etpwd.getText().toString().trim();
if(validate()){
Stringflag=query();
if(flag.equals("3")){
showDialog("登陆失败,请检查网络");
}else{
Intentintent=newIntent(MainActivity.this,
TheMain.class);
intent.putExtra("name",name);
intent.putExtra("nickname",flag);
startActivity(intent);
finish();
}
}
}
});
}
Override
publicbooleanonCreateOptionsMenu(Menumenu){
getMenuInflater().inflate(R.menu.activity_main,menu);
returntrue;
}
publicbooleanvalidate(){
if(name.equals("")){
showDialog("请输入您的账号");
returnfalse;
}else{
if(pwd.equals("")){
showDialog("请您输入密码");
returnfalse;
}
}
returntrue;
}
privatevoidshowDialog(Stringmsg){
AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
builder.setMessage(msg).setCancelable(false)
.setPositiveButton("确定",newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intid){
}
});
AlertDialogalert=builder.create();
alert.show();
}
privateStringquery(){
StringqueryString="username="+name+"&password="+pwd;
Stringurl=Util.BASE_URL+"/UserLogin"+"?
"+queryString;
StringaString=Util.queryStringForGet(url);
System.out.println(aString+url);
returnaString;
}
}
2.3.3前台信息接收及查看模块
Android客户端信息接收及查看采用ListView来显示信息列表,json技术来解析数据。
他是一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。
业主流技术为其提供了完整的解决方案〔有点类似于正那么表达式,获得了当今大局部语言的支持〕,从而可以在不同平台间进展数据交换。
JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
具体实现局部代码如下:
Message.java:
publicclassMessageextendsActivity{
privateList<.jnvcmis.user.SysMessage1>sysmessage;
privateListViewmessagelv;
Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.message);
messagelv=(ListView)findViewById(R.id.messagelv);
try{
//得到Json解析成功之后数据
sysmessage=SysMessage.getListMessage();
List>data=newArrayList>();
for(inti=0;iHashMapmap=newHashMap();
intj=i+1;
map.put("j",""+j);
map.put("time",sysmessage.get(i).getTime());
data.add(map);
}
SimpleAdapter_Adapter=newSimpleAdapter(Message.this,data,
R.layout.message_list,newString[]{"j","time"},newint[]{
R.id.messagetvtime,R.id.messagetv});
messagelv.setAdapter(_Adapter);
}catch(Exceptione){
Toast.makeText(Message.this,"读取失败",2000);
}
messagelv.setOnItemClickListener(newOnItemClickListener(){
publicvoidonItemClick(AdapterView
>arg0,Viewarg1,intarg2,
longarg3){
//TODOAuto-generatedmethodstub
HashMapmap=(HashMap)messagelv.getItemAtPosition(arg2);
Stringid=map.get("time");
Intentintent=newIntent(Message.this,ShowMessage.class);
intent.putExtra("id",id);
startActivity(intent);
}
});
}
privateStringquery(){
Stringurl=Util.BASE_URL+"/SysMessage";
StringaString=Util.queryStringForGet(url);
System.out.println(aString+url);
returnaString;
}
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.KEYCODE_BACK){
this.finish();
}
returnsuper.onKeyDown(keyCode,event);
}
}
ShowMessage.java:
publicclassShowMessageextendsActivity{
privateTextViewtimetv,messagetv;
Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.showmessage);
timetv=(TextView)findViewById(R.id.showmessagetimeid);
messagetv=(TextView)findViewById(R.id.showmessagetvid);
Bundlebd=getIntent().getExtras();
Stringtime=bd.getString("id");
timetv.setText(time);
messagetv.setText(query(time));
}
privateStringquery(Stringtime){
Stringurl=Util.BASE_URL+"/ShowMessage"+"?
"+"time="+time;
StringaString=Util.queryStringForGet(url);
returnaString;
}
Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.KEYCODE_BACK){
this.finish();
}
returnsuper.onKeyDown(keyCode,event);
}
}
2.3.4后台登陆模块的实现
后台登陆后可以对信息的管理,包括(信息的发布、删除),同时也可以实现对好友的管理(人员信息的修改及删除)翻开Web端的登录页面,登录页面通过index.jsp实现,向控制器Log.java发出请求并处理其返回信息来实现管理员的登录。
实现代码如下:
Log.java
publicclassLogextendsServlet{
privatestaticfinallongserialVersionUID=1L;
publicLog(){
super();
//TODOAuto-generatedconstructorstub
}
protectedvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
doPost(request,response);
}
protectedvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
Stringadminname=request.getParameter("adminname");
Stringpassword=request.getParameter("password");
AdminDaomi=Factory.getAdminDao();
booleanflag=mi.log(adminname,password);
if(flag){
request.getSession().setAttribute("user",adminname);
response.sendRedirect("main.jsp");
}else{
//request.setAttribute("error",newString("error"));
response.sendRedirect("index.jsp?
error='error'");
//response.sendRedirect("../log.jsp");
//request.getRequestDispatcher("../log.jsp").forward(request,response);
}
}
}
2.3.5后台信息发布模块实现
管理员登陆系统后,跳入main.jsp该页面控制信息的发布,及发布状态(是否发送成功),当点击发送信息时该页面向Release.java发送请求,Release处理该请求,具体代码如下:
Release.java
publicclassReleaseextendsServlet{
privatestaticfinallongserialVersionUID=1L;
publicRelease(){
super();
//TODOAuto-generatedconstructorstub
}
protectedvoiddoGet(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
doPost(request,response);
}
protectedvoiddoPost(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
inty,m,d,h,mm,ss;
Stringrtime;
Stringrid;
response.setCharacterEncoding("UTF-8");
Calendarc=Calendar.getInstance();
y=c.get(Calendar.YEAR);//年
m=c.get(Calendar.MONTH)+1;//月
d=c.get(Calendar.DAY_OF_MONTH);//日
h=c.get(Calendar.HOUR_OF_DAY);//时
mm=c.get(Calendar.MINUTE);//分
ss