精华内容
下载资源
问答
  •  如果想要获取应用程序的出错信息则比较简单,只需要通过实现 UncaughtExceptionHandler就可以达到目的,那么如何获取Android OS 所有应用程序的出错信息,目前的方式只有通过修改框架层来达到此目的。 (一)...

    前段时间做过一个反馈应用程序Bug的程序,今天和大家分享下

        如果想要获取应用程序的出错信息则比较简单,只需要通过实现 UncaughtExceptionHandler就可以达到目的,那么如何获取Android OS 所有应用程序的出错信息,目前的方式只有通过修改框架层来达到此目的。

    (一)首先,我们先来看如何获取应用程序的出错信息:

    A) 继承UncaughtExceptionHandler的类

    package org.winplus.getex;
    
    import java.lang.Thread.UncaughtExceptionHandler;
    
    import android.content.Context;
    import android.os.Looper;
    import android.util.Log;
    import android.widget.Toast;
    
    public class CrashHandler implements UncaughtExceptionHandler {
    
    	private final static String TAG = "UncaughtExceptionHandler";
    	private Thread.UncaughtExceptionHandler mDefaultHandler;
    	private static CrashHandler mInstance;
    	private Context mContext;
    	private CrashHandler() {
    	}
    
    	/** 获取CrashHandler实例 ,单例模式 */
    	public static CrashHandler getInstance() {
    		if (mInstance == null)
    			mInstance = new CrashHandler();
    		return mInstance;
    	}
    
    	@Override
    	public void uncaughtException(Thread thread, Throwable throwable) {
    		if (!handleException(throwable) && mDefaultHandler != null) {  
                // 如果用户没有处理则让系统默认的异常处理器来处理  
                mDefaultHandler.uncaughtException(thread, throwable);  
            } else {  
                // Sleep一会后结束程序  
                // 来让线程停止一会是为了显示Toast信息给用户,然后Kill程序  
                try {  
                    Thread.sleep(3000);  
                } catch (InterruptedException e) {  
                    Log.e(TAG, "Error : ", e);  
                }  
                android.os.Process.killProcess(android.os.Process.myPid());  
                System.exit(10);  
            }  
    	}
    	
    	private boolean handleException(Throwable ex) {  
            if (ex == null) {  
                return true;  
            }  
            final String msg = ex.getLocalizedMessage();  
            // 使用Toast来显示异常信息  
            new Thread() {  
                @Override  
                public void run() {  
                    // Toast 显示需要出现在一个线程的消息队列中  
                    Looper.prepare();  
                    Toast.makeText(mContext, "Exception:" + msg, Toast.LENGTH_LONG).show();  
                    Looper.loop();  
                }  
            }.start();  
            return true;  
        }  
    	
    	public void init(Context context) {  
            mContext = context;  
            mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();  
            Thread.setDefaultUncaughtExceptionHandler(this);  
        }  
    	
    
    }
    
    B) 初始化并启动获取异常的线程类:CrashApplication

    import android.app.Application;
    
    public class CrashApplication extends Application {
    
    	@Override
    	public void onCreate() {
    		super.onCreate();
    
    		CrashHandler crashHandler = CrashHandler.getInstance();
    		// 注册crashHandler
    		crashHandler.init(getApplicationContext());
    	}
    }
    

    C) 记得修改AndroidManifest.xml文件~~~

    D) 写一个用于测试的Activity

    public class GetExceptionActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            int i = 1/0;//除数不能为0 这里会抛出异常
        }
    }

    (二)获取AndroidOS应用程序所有出错信息的思路

        获取应用程序异常的方法我们介绍过了,网上也有很多例子。下面来进入这边文章的重点,说是重点,其实也不难。我们的目的是通过修改最少的代码来获取系统中所有应用程序出错的信息:修改框架层ActivityManagerService类(如果不是特殊的要求,非常不建议修改框架层,当然我们在这里要修改的东西不会影响到什么)

    系统出错时一般会弹出一个Dialog,这个Dialog是由frameworks\base\services\java\com\android\server\am\ActivityManagerService.java弹出的,具体的Dialog是frameworks\base\services\java\com\android\server\am\AppErrorDialog.java,所以在这里我们只需要将这个AppErrorDialog改掉,或者在AppErrorDialog中添加一个按钮用于来反馈出错信息的功能,简单的说就是在AppErrorDialog中添加一个按钮,这个按钮通过Intent打开相应的应用程序,并将错误信息发送到应用程序的Activity。

        这里主要给出一个思路吧。

    (三)发送邮件

        最后,如何发送邮件呢?Android有几种发送邮件的方式,一种是直接调用系统的邮件,第二种是通过Java Mail的方式发送邮件,第一种并不是我们所需要的,要通过javaMail发送邮件,但Android如何通过JavaMail的方式发送邮件呢?很好,以及有哥们帮我们做了,请看这个:http://code.google.com/p/javamail-android/,只需要下载下面3个Jar包即可:additionnal.jar mail.jar activation.jar

    我们来看如何使用这些jar包发邮件

    public class MailTool {
    
    	public static void sendMail(String subject, String content) throws MessagingException {
    		Properties props = new Properties();
    		props.put("mail.smtp.host", "mail.sina.cn");// 存储发送邮件服务器的信息
    		props.put("mail.smtp.auth", "true");// 同时通过验证
    		
    		// 基本的邮件会话
    		Session session = Session.getInstance(props);
    		session.setDebug(true);// 设置调试标志
    		// 构造信息体
    		MimeMessage message = new MimeMessage(session);
    
    		// 发件地址
    		Address fromAddress = null;
    		fromAddress = new InternetAddress("abc@sina.cn");
    
    		message.setFrom(fromAddress);
    
    		// 收件地址
    		Address toAddress = new InternetAddress("def@sina.cn");
    		message.addRecipient(Message.RecipientType.TO, toAddress);
    
    		// 解析邮件内容
    		message.setSubject(subject);// 设置信件的标题
    		message.setText(content);// 设置信件内容
    		message.saveChanges(); // implicit with send()//存储信息
    
    		// send e-mail message
    		Transport transport = null;
    		transport = session.getTransport("smtp");
    		transport.connect("mail.sina.cn", "abc@sina.cn", "winplus.org");
    
    		transport.sendMessage(message, message.getAllRecipients());
    		transport.close();
    	}
    
    }

    发送邮件时一定要注意属性值得设置,不同的邮件服务器有不同的设置,要想实现发送gmail,yahoo等邮箱的发送接收,需要正确的设置,当时就纠结了很久!至于怎么设置,可以先在foxmail中进行设置,看属性就好了。

    比如说需要发送接收gmail的邮件,要进行一下设置

        Properties props = new Properties(); 
        props.setProperty("mail.transport.protocol", "smtp"); 
        props.setProperty("mail.host", "smtp.gmail.com"); 
        props.put("mail.smtp.auth", "true"); 
        props.put("mail.smtp.port", "465"); 
        props.put("mail.smtp.socketFactory.port", "465"); 
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
        props.put("mail.smtp.socketFactory.fallback", "false"); 
        props.setProperty("mail.smtp.quitwait", "false"); 

    Ok,这篇文章就到这里吧,主要是和大家分享思路~各位有更好的方法要分享哦

    原创文章,欢迎转载,转载请注明出处http://blog.csdn.net/tangcheng_ok


    展开全文
  • 网上书店信息管理系统

    万次阅读 多人点赞 2018-05-25 13:46:52
    WEB数据库程序设计语言课程设计说明书(2016-2017-1-14级) 题目: 网上书店信息管理系统 web数据库程序设计语言课程设计任务书题目: 网上书店信息管理系统 课程设计从 2016 年 12 月 30 日起 2017年 1 ...

     

     

     

     

    WEB数据库程序设计语言课程设计说明书

    2016-2017-1-14级)

     

     

     

     

     

    题目:          网上书店信息管理系统                

     

     

     

     

     

    web数据库程序设计语言课程设计任务书

    题目:                  网上书店信息管理系统                       

    课程设计从 2016  12 30 日起到  2017 1  8

    1、课程设计的内容和要求(包括原始数据、技术要求、工作要求等):

    1)、设计内容:

    开发基于intranet网络上B/S模式的信息管理系统,要求能实现数据录入、数据删除、数据修改和数据浏览以及数据查询等基本功能。

    2)、课程设计的要求:

    课程设计教学基本要求:通过课程设计,要求学生在指导教师的指导下,完成设计课题的全部内容,包括:

    (1)系统分析与数据库设计阶段

    1)通过调查研究,选择一个实际应用数据库的信息管理系统的课题。

    2)进行系统需求分析与概念设计,写出系统需求分析分析报告,分析方法参考数据库系统概论课本第7章7.2需求分析、7.3概念结构设计(E-R图设计)、7.4逻辑结构设计(关系模式设计);分析实例参照周慧/施乐军主编的人民邮电出版社出版《数据库应用技术—SQL Server 2008R2》(第2版)的第2章数据库需求分析与概念设计(P18-41)。

    3)建立关系数据模型、完成数据库的逻辑设计,确定数据库结构与功能、表的结构、列级约束、表级约束、表与表之间的关联关系、参照关系、视图、存储过程等,并对关系模式进行优化使其符合3NF的要求。充分考虑系统安全性、数据的完整性等要求,并写出系统设计方案。

    (2) 页面设计阶段

         页面布局设计、确定网页元素、各种样式规则设计。要求页面颜色搭配美观、简洁,字体大小协调,图片内容与文字内容相互衬托并与软件功能相匹配。

    (3)应用程序设计阶段

    1)实现基于intranet网络上B/S模式的信息管理系统,要求在客户端利用IE浏览器能进行数据录入、数据删除、数据修改和数据浏览以及数据查询等基本功能。

    2)实现应用程序的设计、编程、优化功能,即能从前端页面实现数据完整性、有效性、正确性和数据库安全性等功能,又能在后台数据库管理平台上实现数据完整性、有效性、正确性和数据库安全性等功能。

    4)系统集成调试阶段

    对系统的各个应用程序进行集成和调试,进一步优化系统性能,改善系统用户界面、完善功能。

    3)、课程设计选题、学时分配、进度安排

    从以下六题中任选一题作为课程设计的题目(用选定的题目替换××信息管理系统):

    1)人事信息管理系统; 

    2)工资信息管理系统;

    3)仓库信息管理系统;

    4)图书借阅信息管理系统。

    5)网上书店信息管理系统

    6)普通高等学校招生信息管理系统

        学时分配为:

    教学内容

    学时

    地点

    备注

    查资料,调研、做需求分析

    0.5天

    图书馆、实际部门

     

    数据库系统及数据模型设计

    0.5天

    图书馆、实验室

     

    数据库的定义、建立和维护

    0.5天

    数学综合实验室

    统计实验室

    数据库的视图和表的定义

    0.5天

    数学综合实验室

    统计实验室

    数据库完整性和安全性设计

    0.5天

    数学综合实验室

    统计实验室

    网页界面设计与代码编写

    0.5天

    数学综合实验室

    统计实验室

    网页界面设计与代码编写

    1天

    数学综合实验室

    统计实验室

    后台数据库与前台网页联调

    1天

    数学综合实验室

    统计实验室

    后台数据库与前台网页联调

    1天

    数学综合实验室

    统计实验室

    代码测试

    1天

    数学综合实验室

    统计实验室

    成果验收

    1天

    数学综合实验室

    统计实验室

     

     

     

     

    注:教学计划课程设计为期一周(第19周2016年12月30日-2017年 1 月 8日),每天至少投入8小时研究开发时间,课程设计任务提前发放,要求接到任务后立即查阅资料、开始分析设计,要求在第19周周日(2017年1月8日)上午 8点前提交排版、打印、装订规范的课程设计报告

    4)、需求分析与概念设计:

    明确所开发的软件是针对哪个行业、为那些用户开发软件,即弄清软件的用户,通过调查获得用户对数据库的信息要求、处理要求、安全性与完整性要求。用数据流图表达数据和处理的关系;用数据字典描述系统中的各类数据,数据字典包括数据项、数据结构、数据流、数据存储和处理过程,画出分E-R图,然后再合并成总的系统的E-R图。

    5)数据库逻辑设计

    E-R图建立关系数据模型,完成数据库的逻辑设计,确定数据库结构与功能、表的结构、列级约束、表级约束、表与表之间的关联关系、参照关系、视图、存储过程等,并对关系模式进行优化使其符合3NF的要求。充分考虑系统安全性、数据的完整性等要求,并写出系统设计方案。

    6)页面设计最低要求

    ①     能够输入基本信息、能够实现元组信息修改、个别元组删除、新元组插入;

    ②     能够实现对信息的浏览;

    ③     能够实现对信息进行查询;

    7)、系统性能要求:

    ①     系统安全、可靠、能保证数据的完整性和安全性;

    ②     功能齐全;

    ③     操作方便、界面友好;

    ④     易于维护和扩充。

    7)、系统的功能分析:

    信息资料维护:系统维护包括对各种表记录的修改、删除、添加等操作。

    信息资料浏览:对数据表中的信息进行浏览。

    信息资料查询:可以按主键等相关信息进行精确查询或模糊查询。

    8)、系统功能模块

    信息管理系统功能模块应当有:数据输入模块、数据查找与浏览模块、数据修改模块、数据删除模块、报表显示模块和打印模块构成。

    8)、技术要求

    使用ADO.NET技术连接数据源

    9)、软件打包与发行要求

        经过翻阅资料发现,VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield,对于初次使用InstallShield的程序员来说,需要根据提示一步步的先下载安装该打包工具。具体的打包部署及安装方法见:http://blog.csdn.net/zhang_xinxiu/article/details/9099757就提供了“VS2012程序打包部署详解”。 参考网上VS2012程序打包部署详解”资料对你的系统进行打包发行。

    10)、设备要求

    每个学生一台计算机。

    2、对课程设计成果的要求〔包括图表、实物等硬件要求〕:

    1)提交课程设计报告

    按照系统设计要求,用visual studio.net中的visual C#.NET实现基于intranet网络上B/S模式的信息管理系统,提交由需求分析说明(包括数据流图、数据字典);概念结构设计说明;逻辑结构设计说明;应用程序系统设计说明(包括主菜单、子菜单、模块功能简介、系统结构图);系统技术文档 (包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论、运行情况记录),系统使用说明书,源程序代码为附录构成的课程设计报告。

    2)课程设计报告版式要求

    执行《陕西科技大学课程设计说明书撰写格式暂行规范》

    目录的要求:居中打印目录二字,(四号黑体,段后1行),字间空一字符;章、节、小节及其开始页码(字体均为小四号宋体)。节向右缩进两个字符(汉字),小节及以后标题均向右缩进四个字符(汉字)。目录中应包含正文部分的每个章节标题、设计总结、无序号的参考文献资料”,目录的最后一项是“附录”。

    正文的要求:设计说明论述清楚,公式符号撰写规范,ER图、数据流图、程序流程图等图符规范,文字简练通顺,插图简洁规范,书写整洁。文中图、表按制图要求绘制,程序调试和运行情况记录详实。

    打印版面要求:A4,页边距:上2cm,下2cm,左2.5cm、右2cm;字体:正文宋体、小四号;行距:固定值20;页眉1.5cm ,页脚1.75cm;页码位于页脚居中打印;奇数页页眉“WEB数据库程序设计语言课程设计”,偶数页页眉“具体章标题名”,页眉宋体小5号;

    段落及层次要求:每章另起一页每章的标题都应出现在本章首页的第一行上,章标题用黑体3号,居中对齐,段前0行段后1行,单倍行距,大纲级别1级。每节标题以四号黑体左起打印(段前段后各0.5行),节下为小节,以小四号黑体左起打印(段前段后各0.5行)。换行后以小四号宋体打印正文。章、节、小节编号分别以11.11.1.1格式依次标出,空一字符后接各部分的标题。当课程设计报告结构复杂,小节以下的标题,左起顶格书写,编号依次用(1)、(2……1)、2……顺序表示。字体为小四号宋体。对条文内容采用分行并叙时,其编号用(a)、(b……a)、b……顺序表示,如果编号及其后内容新起一个段落,则编号前空两个中文字符。

    曲线图表要求:所有曲线、图表、ER图、流程图、程序框图、示意图等不准徒手画,必须按国家规定标准或工程要求绘制(应采用计算机绘图)。

    课程设计说明书(报告)中图表、公式要求如下

    a)图:图的名称采用中文,中文字体为五号宋体,图号图名在图片下面。引用图应在图题右上角标出文献来源。图号以章为单位顺序编号。格式为:图1-1空一字符后接图名,比如第1章第5个图是关于学生这个实体进行分析的局部ER图,图的下方的图号图名应为:图1-5 学生实体E-R

    b)表格:表的名称及表内文字采用中文,中文字体为五号宋体,表号表名在表格上面。表号以章为单位顺序编号,表内必须按规定的符号标注单位。格式为:表1-1,空一字符后接表格名称。比如第4章第1个表是关于学生表的表结构描述表,表的上方表号表名则应为:表4-1 学生表的表结构描述表。

    c)公式:公式书写应在文中另起一行,居中排列。公式序号按章顺序编号。字体为五号宋体,序号靠页面右侧对齐。比如第3章第1个公式其编号则应为:(3-1)。

    设计体会及今后的改进意见:设计总结要写出对WEB数据库程序设计过程的认识及编程经验等技术性、学术性总结;体会要简洁、真实、深刻,切忌空话、大话,客套话和矫揉造作之词改进意见要合理、中肯。

    参考文献的要求:另起一页,居中打印参考文献四字(四号黑体,段前段后1行),字间空一字符;另起一行,按报告中参考文献出现的先后顺序用阿拉伯数字连续编号(参考文献编号应在正文中标注出);参考文献中每条项目应齐全(字体均为小四号宋体)。(格式:[编号]作者.论文或著作名称.期刊名或出版社.出版时间)。(期刊应注明第几期、起止页数(包括论著))。参考文献中条目要符合科技文献引用文献条目书写的国家标准规范。

    3)设计报告装订顺序与规范要求

    封面(按照给定的封面模板填写相关信息)

    web数据库程序设计语言课程设计任务书

    目录

    web数据库程序设计语言设计课程设计报告正文

    设计体会及今后的改进意见

    参考文献(资料)

    左边缘装订

    课程设计任务书、课程设计说明书(纸质报告)和光盘(含设计说明书电子文档、设计任务书电子文档,完整的程序代码)、打印好的课程设计成绩考核表(手工填写表中专业、班级、学号、姓名等信息)等必须装入课程设计专用袋中,必须完整且准确填写课程设计专用袋封面上的各项信息

     

     

    1 需求分析 1

    1.1.数据需求 1

    1.1 事务需求 1

    1.1系统用例 1

    2 数据库逻辑设计 3

    2.1 E-R 3

    2.2 实体图 3

    2.3联系图 4

    2.4数据字典 5

    2.5图书实体 5

    2.6用户实体 5

    2.7 图书订购实体 5

    2.8用户视图中的表 5

    3数据库物理设计 6

    3.1图书信息表 6

    3.2 订购信息表 6

    3.3 主键约束 7

    4 应用程序设计 8

    4.1 查询系统流程图 8

    4.2更新系统流程图 9

    4.3 删除系统流程图 9

    4.4修改系统流程图 10

    4.5 登录模块 10

    4.6 管理员模块 10

    4.7 用户模块 15

    5 测试与运行 18

    6 设计体会及相关的改进意见 19

    参考文献资料 20

    附录 .........................................................21


     

    1 需求分析

    1.1.数据需求

    图书借阅信息管理系统从总体看可分为三大模块,分别是系统管理员模块、图书订购信息模块和用户模块。

    系统管理员主要负责维护图书订阅信息、用户信息等。对于用户发出的订阅需求进行管理。同时,如果买进了新书或杂志,系统管理员可以增加这些图书信息;如果一些图书已经卖完,系统管理员还可以对图书订阅数据库中的订阅信息进行删除操作。

    用户在订阅书籍之前必须先登陆,登陆后便可进行查看书籍、购买书籍等一系列操作。如果想查看馆内图书信息,用户只需单击查看按钮即可;如果想订购图书,用户先选择所要订购的图书编号,再按提交按钮系统就会将提交信息发送到后台订购数据库中。

    对应于订购图书信息包括用户ID、书名、作者、类别、出版社、价格。

    1.1 事务需求

    (1) 数据录入

    a 新用户登陆时录入自己的用户名等信息。

    b 录入新进图书的各项信息。

    c 用户登录后录入自己的订购请求信息。

    (2) 数据查询

    a 查询图书的基本信息。

    b 查询图书的借阅信息。

    c 查询用户的请求信息。

     (3) 数据修改

    a 修改某些图书的基本信息。

    b 修改某些图书的借阅信息(当发生订购请求后)。

    c 更新某些用户的请求信息。

    (4) 数据删除

    a 当某些图书被订购后,从图书信息数据库中删除图书记录。

    b 对已经卖完的图书从图书订阅信息数据库中删除。

    1.1系统用例

    (1) 用例总图

    1-1-3-1 系统用例总图

    (2) 组件图

    1-1-3-2 系统组件图


     

     

     

     

     

     

     

     

    2 数据库逻辑设计

    2.1 E-R

         图书信息管理系统的数据库可以设计定义用户(由权限可分为管理员和普通读者)、书籍、借阅信息、请求信息等实体及其之间的

    联系。实体使用E-R图进行描述。为清楚起见,这里将实体图和联系图分开表

    现。

    2.2 实体图

    (1) 图书信息的E-R图

    2-1-1-1 图书信息E-R图

    (2) 用户信息的E-R图

    2-1-1-2 用户信息的E-R图

    (3) 图书订阅信息的E-R图

    2-1-1-3 图书订购信息E-R图

    2.3联系图

    2-1-2-1 图书订购联系图

    2-1-2-2 管理员与用户联系

    2-1-2-3 管理员与图书联系

    2-1-2-4 管理员与用户请求联系

    2.4数据字典

    根据上面描述的E-R图进行数据库的逻辑结构设计。在这里以表格的形式给出数据库的设计。下面表中的字段除特殊标明的外,均不能为空。

    2.5图书实体

    2-2-1 图书实体表

    字段

    类型

    备注

    book_id 

    int(11)

    主键,图书编号

    book_name

    varchar(100)

    图书名称

    book_author

    varchar(20)

    作者

    book_place

    Varchar(100)

    出版社

    book_price 

    decimal(110)

    图书单价

    2.6用户实体

    2-2-2 用户实体表

    字段

    类型

    备注

    user_id

     

    int(11)

     

    主键,用户编号,由用户自主选择

    user_password

    varchar(20)

    用户密码

    user_name

    varchar(20)

    用户名字

    2.7 图书订购实体

    2-2-3 图书订购实体表

    字段

    类型

    备注

    book_id

    int(11)

    外码

    user_id

    Int(11)

    外码

     

    2.8用户视图中的表

    (1) Book(book_id,book_name,book_author, book_price,book_price)

    主键:book_id

    (2) User(用户id,书号,书名,类别,作者,出版社,价格


    3数据库物理设计

    3.1图书信息表

    (1) book表的定义如下:

     

    3-1-1-1 book表的定义

    (2) book表的数据填充如下

     

    3-1-1-2 book表内数据

    3.2 订购信息表

    (1) buy表的定义如下

     

    3-1-2-1 buy表的定义图

    (2) 订购buy表的数据如下

     

    3-1-2-2 buy表的数据图

    3.3 主键约束

    Book表主键为book_idBuy表的主键为书号。设置主键成功后,一旦主键为空,系统会显示相应的出错信息。


    4 应用程序设计

    4.1 查询系统流程图

    4-1-1 查询系统流程图

    4.2更新系统流程图

    4-1-2 更新系统流程图

    4.3 删除系统流程图

    4-1-3 删除系统流程图

    4.4修改系统流程图

    4-1-4 修改系统流程图

    4.5 登录模块

    主界面如下:

     

    4-2-1 主界面图示

    说明:登陆界面可实现管理员、用户两种身份的登录功能,如果输入的账户和密码均正确,则正常登录系统,否则系统会给出的错误信息。

    4.6 管理员模块

    当系统管理员登陆时,需要填上管理员姓名Admin及相应的密码。如下:

     

    4-2-2-1 管理员登陆示例图

    单击登陆后,界面如下:

     

    4-2-2-2 管理员选择界面

    管理员在该界面中选择相应的功能。

     (1) 插入图书信息

    当管理员选择插入记录后,进入如下的修改图书信息的界面,如下:

     

    4-2-2-3 管理员插入界面

    当新书购进时,管理员需要填写相关的书籍信息,如下:

     

    4-2-2-4 管理员插入操作示例图

    单击提交后,系统会返回如下的信息:

     

    4-2-2-5 插入数据成功返回框

    此即完成了对数据库的修改操作。

    (2) 更新图书信息

     

    4-2-2-6 管理员选择界面

    管理员如果想更新图书信息,需要单击修改数据按钮即可弹出如下的界面:

     

    4-2-2-7 修改记录界面

    管理员将需要选择修改的图书号,填上修改后的图书信息,单击提交,即可完成后台数据库的更新操作。如下:

     

    4-2-2-8 更新成功返回界面

    此即完成了对数据库的更新操作。

    (3) 删除图书信息

    管理员选择删除记录后,系统会填出如下的界面:

     

    4-2-2-9 删除记录界面

    单击确定后,系统会弹出如下界面:

     

    4-2-2-10 单击确定后的返回界面

    完成删除功能。

    4.7 用户模块

    当一般用户登陆成功后,系统进入如下的界面:

     

    用户可实现相应的功能。一一介绍。。。。

    (1) 查询图书信息

    填写用户名和密码后进入用户订阅界面。如下:

     

    4-2-3-1 用户查询界面

    (2) 提交订购信息

    如果用户需要订购图书,只需填写相应的序号即可。填上书号等信息后,单击提交,即完成订购操作。系统就会将提交信息反馈给后台数据库。

     

    4-2-3-2 用户提交记录示例图

    用户如果需要查看订单,只需单击订单查看按钮即可完成查询功能。如下:

     

    4-2-3-3 单击订单查看后的返回界面


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    5 测试与运行

    本系统在WindowsXP环境下调试通过,并在IE浏览器和360浏览器上显示良好。


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    6 设计体会及相关的改进意见

    (1) 通过本次课程设计,我对C#语言有了更进一步的理解,特别是对其完全面向对象的程序设计方法有了较为深入的认识。但在C#环境中的流程控制做的还不够完善,以后要加强这方面的训练。

    (2) 在页面控制方面,对css+div的页面布局方法有较为深入的理解,在此次课程设计中节省了时间。

    (3) 本次课程设计虽然完成了对数据库修改、浏览、更新、删除等基本功能,但是有的地方还是不尽人意。比如说,在对图书信息进行更新时只能完成单条记录的更新操作。

    (4) 进一步熟悉了实现数据库操纵的ADO.NET对象的应用,特别是DataAdapter对象的各种方法有了进一步的认识。


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    参考文献资料

    [1] 王珊、萨师煊.数据库系统概论(4).高等教育出版社。

    [2] 崔淼、关六三、彭炜主编.ASP.NET程序设计教程(C#),机械工程出版社。

    [3] 崔淼、关六三、彭炜主编.ASP.NET程序设计教程(C#)上机指导与习题解答,机械工出版社。

     

     


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    附录

    8.1 Default.aspx代码如下

    <%@ Page Language="C#"  Debug="true" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head id="Head1" runat="server">

        <title>无标题页</title>

        <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

    </head>

    <body>

        <form id="form1" runat="server">

        <div id="login">

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

        </div>

        <div id="left">

        

            <br />

            <br />

            <br />

            <br />

            <br />

            <asp:Button ID="Button1" runat="server" Text="书籍管理" />

            <br />

            <asp:Button ID="Button2" runat="server" PostBackUrl="~/User.aspx" Text="用户管理" />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

     </div>

        <div id="right">

            <asp:GridView ID="GridView1" runat="server"

                OnSelectedIndexChanged="GridView1_SelectedIndexChanged" Width="702px"  

                AutoGenerateColumns="False">

                <Columns>

                    <asp:BoundField DataField="uid" HeaderText="书籍编号" />

                    <asp:BoundField DataField="uname" HeaderText="书籍名称" SortExpression="文本" >

                        <ItemStyle Width="100%" />

                    </asp:BoundField>

                    <asp:BoundField DataField="usex" HeaderText="类别" SortExpression="文本" >

                        <ItemStyle Width="100px" />

                    </asp:BoundField>

                    <asp:BoundField DataField="class" HeaderText="作者" SortExpression="文本" />

                    <asp:BoundField DataField="math" HeaderText="出版社" SortExpression="数据" />

                    <asp:BoundField DataField="chs" HeaderText="价格" SortExpression="数据" />

                </Columns>

                

            </asp:GridView>

            <br />

            <asp:LinkButton ID="LinkIns" runat="server" OnClick="LinkIns_Click">LinkButton</asp:LinkButton>

            <asp:LinkButton ID="LinkUpdata" runat="server" OnClick="LinkUpdata_Click">LinkButton</asp:LinkButton>

            <asp:LinkButton ID="LinkDel" runat="server" OnClick="LinkDel_Click">LinkButton</asp:LinkButton>

            </div>

        </form>

    </body>

    </html>

    8.2 修改操作代码如下

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="add.aspx.cs" Inherits="add" %>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

        <title>无标题页</title>

        <style type="text/css">

            .style1

            {

                text-align: center;

            }

            .style2

            {

                height: 23px;

            }

        </style>

        <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

    </head>

    <body>

        <form id="form1" runat="server">

        <div id="login">

        

        </div>

        <div id="dow">

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

        <table style="width:100%;" >

            <tr>

                <td class="style1" colspan="4">

                    添加新纪录</td>

            </tr>

            <tr>

                <td>

                    书籍编号</td>

                <td>

                    <asp:TextBox ID="TextNo" runat="server"></asp:TextBox>

                </td>

                <td>

                    书籍名称</td>

                <td>

                    <asp:TextBox ID="TextName" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    类别</td>

                <td>

                    <asp:RadioButtonList ID="RadioSex" runat="server" RepeatDirection="Horizontal"

                        onselectedindexchanged="RadioSex_SelectedIndexChanged">

                        <asp:ListItem Selected="True">科技类</asp:ListItem>

                        <asp:ListItem>文学类</asp:ListItem>

                    </asp:RadioButtonList>

                </td>

                <td>

                    作者</td>

                <td>

                    <asp:TextBox ID="TextClass" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    出版社</td>

                <td>

                    <asp:TextBox ID="TextMath" runat="server" ontextchanged="TextMath_TextChanged"></asp:TextBox>

                </td>

                <td>

                    语文</td>

                <td>

                    <asp:TextBox ID="TextChs" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td class="style2">

                    </td>

                <td class="style2">

                </td>

                <td class="style2">

                    </td>

                <td class="style2">

                    </td>

            </tr>

            <tr>

                <td colspan="2">

                    <asp:Button ID="ButtonSubmit" runat="server" οnclick="ButtonSubmit_Click"

                        Text="提交" />

                </td>

                <td colspan="2">

                    <asp:Button ID="ButtonBack" runat="server" οnclick="ButtonBack_Click"

                        Text="返回" />

                </td>

            </tr>

        </table>

        </div>

        </form>

    </body>

    </html>

    8.3 删除操作代码如下

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="del.aspx.cs" Inherits="del" %>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

        <title>无标题页</title>

        <style type="text/css">

            .style1

            {

                text-align: center;

            }

        </style>

        <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

    </head>

    <body>

        <form id="form1" runat="server">

        <div id="login">

        

        </div>

        <div id ="dow">

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

        <table style="width:100%;">

            <tr>

                <td class="style1" colspan="3">

                    选择要删除的书号<asp:DropDownList ID="DropNo" runat="server" AutoPostBack="True"

                       DataTextField="uid" DataValueField="uid"

                        onselectedindexchanged="DropNo_SelectedIndexChanged"

                        DataSourceID="AccessDataSource1">

                    </asp:DropDownList>

                </td>

            </tr>

            <tr>

                <td colspan="3">

                    <asp:GridView ID="GridView1" runat="server" AllowSorting="True"

                        AutoGenerateColumns="False" DataKeyNames="uid" >

                        <Columns>

                            <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />

                            <asp:BoundField DataField="uid" HeaderText="uid" ReadOnly="True"

                                SortExpression="uid" />

                            <asp:BoundField DataField="uname" HeaderText="uname" SortExpression="uname" />

                            <asp:BoundField DataField="usex" HeaderText="usex" SortExpression="usex" />

                            <asp:BoundField DataField="class" HeaderText="class" SortExpression="class" />

                            <asp:BoundField DataField="math" HeaderText="math" SortExpression="math" />

                            <asp:BoundField DataField="chs" HeaderText="chs" SortExpression="chs" />

                        </Columns>

                    </asp:GridView>

                </td>

            </tr>

            <tr>

                <td>

                    <asp:Label ID="LabelMsg" runat="server"></asp:Label>

                </td>

                <td>

                    <asp:Button ID="ButtonOK" runat="server" οnclick="ButtonOK_Click" Text="确定" />

                    <asp:Label ID="Label1" runat="server" Font-Bold="True" Text="删除成功"

                        Visible="False"></asp:Label>

                </td>

                <td>

                    <asp:Button ID="ButtonBack" runat="server" Text="返回"

                        οnclick="ButtonBack_Click" />

                </td>

            </tr>

        </table>

        <asp:AccessDataSource ID="AccessDataSource1" runat="server"

            ConflictDetection="CompareAllValues" DataFile="~/App_Data/Student.mdb"

            DeleteCommand="DELETE FROM [grade] WHERE (([uid] = ?) OR ([uid] IS NULL AND ? IS NULL))"

            InsertCommand="INSERT INTO [grade] ([uid]) VALUES (?)"

            OldValuesParameterFormatString="original_{0}"

            SelectCommand="SELECT [uid] FROM [grade]">

            <DeleteParameters>

                <asp:Parameter Name="original_uid" Type="String" />

            </DeleteParameters>

            <InsertParameters>

                <asp:Parameter Name="uid" Type="String" />

            </InsertParameters>

        </asp:AccessDataSource>

        <asp:AccessDataSource ID="AccessDataSource2" runat="server"

            ConflictDetection="CompareAllValues" DataFile="~/App_Data/Student.mdb"

            DeleteCommand="DELETE FROM [grade] WHERE [uid] = ?"

            InsertCommand="INSERT INTO [grade] ([uid]) VALUES (?)"

            OldValuesParameterFormatString="original_{0}"

            SelectCommand="SELECT [uid] FROM [grade]">

            <DeleteParameters>

                <asp:Parameter Name="original_uid" Type="String" />

            </DeleteParameters>

            <InsertParameters>

                <asp:Parameter Name="uid" Type="String" />

            </InsertParameters>

        </asp:AccessDataSource>

        </div>

        </form>

    </body>

    </html>

    8.3 更新操作代码如下

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="updata.aspx.cs" Inherits="updata" %>

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

     

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

        <title>无标题页</title>

        <style type="text/css">

            .style1

            {

                text-align: center;

            }

            .style2

            {

                height: 25px;

            }

        </style>

        <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

    </head>

    <body>

        <form id="form1" runat="server">

        <div id="login"></div>

        <div id ="dow">

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

            <br />

        <table style="width:100%;">

            <tr>

                <td class="style1" colspan="4">

                    修改数据</td>

            </tr>

            <tr>

                <td>

                    书号</td>

                <td>

                    <asp:DropDownList ID="DropNo" runat="server" AutoPostBack="True"

                        onselectedindexchanged="DropNo_SelectedIndexChanged"

                        DataSourceID="AccessDataSource1" DataTextField="uid" DataValueField="uid"

                        Width="98px">

                    </asp:DropDownList>

                </td>

                <td>

                    书名</td>

                <td>

                    <asp:TextBox ID="TextName" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    类别</td>

                <td>

                    <asp:RadioButtonList ID="RadioSex" runat="server" RepeatDirection="Horizontal">

                        <asp:ListItem Selected="True">科技类</asp:ListItem>

                        <asp:ListItem>文学类</asp:ListItem>

                    </asp:RadioButtonList>

                </td>

                <td>

                    作者</td>

                <td>

                    <asp:TextBox ID="TextClass" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td class="style2">

                    出版社</td>

                <td class="style2">

                    <asp:TextBox ID="TextMath" runat="server"></asp:TextBox>

                </td>

                <td class="style2">

                    价格</td>

                <td class="style2">

                    <asp:TextBox ID="TextChs" runat="server"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                     </td>

                <td>

                     </td>

                <td>

                     </td>

                <td>

                     </td>

            </tr>

            <tr>

                <td colspan="2">

                    <asp:Button ID="ButtonSubmit" runat="server" οnclick="ButtonSubmit_Click"

                        Text="提交" style="width: 40px" />

                </td>

                <td colspan="2">

                    <asp:Button ID="ButtonBack" runat="server" οnclick="ButtonBack_Click"

                        Text="返回" />

                </td>

            </tr>

        </table>

        <asp:AccessDataSource ID="AccessDataSource1" runat="server"

            DataFile="~/App_Data/Student.mdb"

            SelectCommand="SELECT [uid] FROM [grade]">

        </asp:AccessDataSource>

        </div>

        </form>

    </body>

    </html>

    8.5修改操作代码

    using System;

    using System.Collections;

    using System.Configuration;

    using System.Data;

    using System.Linq;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.HtmlControls;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Linq;

    using System.Data.OleDb;

    public partial class add : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            this.Title = "添加新纪录";

            TextNo.Focus();

        }

        protected void ButtonSubmit_Click(object sender, EventArgs e)

        {

            OleDbConnection conn = new OleDbConnection();

            conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;" + "Data Source=" +

                Server.MapPath("App_Data/Student.mdb");

     

            string Val = "'" + TextNo.Text + "','" + TextName.Text + "','" + RadioSex.SelectedValue.ToString() +

                "','" + TextClass.Text + "','" + TextMath.Text + "'," + int.Parse(TextChs.Text);

            string SqlIns = "insert into grade(uid,uname,usex,class,math,chs) values(" + Val + ")";

     

            OleDbCommand InsCom = new OleDbCommand(SqlIns, conn);

            OleDbDataAdapter da = new OleDbDataAdapter();

            conn.Open();

            da.InsertCommand = InsCom;

            da.InsertCommand.ExecuteNonQuery();

            conn.Close();

            Response.Write("<script language= javascript>alert('新纪录添加成功,请单击“返回”回到主页面!');</script>");

        }

        protected void ButtonBack_Click(object sender, EventArgs e)

        {

            Response.Redirect("Default.aspx");

        }

        protected void RadioSex_SelectedIndexChanged(object sender, EventArgs e)

        {

        }

        protected void TextMath_TextChanged(object sender, EventArgs e)

        {

        }

    }

    8.6删除操作代码如下

    using System;

    using System.Collections;

    using System.Configuration;

    using System.Data;

    using System.Linq;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.HtmlControls;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Linq;

    using System.Data.OleDb;

    public partial class del : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            if (!IsPostBack)

            {

                this.Title = "删除记录";

                LabelMsg.Text = "单击“确定”将删除当前记录";

                OleDbConnection conn = new OleDbConnection();

                conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;"+"Data Source=" +

                Server.MapPath("App_Data/Student.mdb");

                string SqlStr = "select top 1 * from grade";

                OleDbDataAdapter da = new OleDbDataAdapter(SqlStr, conn);

                DataTable dt = new DataTable();

                da.Fill(dt);

                GridView1.DataSource = dt;

                GridView1.DataBind();

                conn.Close();

            }

        }

        protected void ButtonOK_Click(object sender, EventArgs e)

        {

            OleDbConnection conn = new OleDbConnection();

            conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;" + "Data Source=" +

            Server.MapPath("App_Data/Student.mdb");

            string SqlDel = "delete from grade where uid='" + DropNo.SelectedItem.Text + "'";

            OleDbCommand DelCom = new OleDbCommand(SqlDel, conn);

            OleDbDataAdapter da = new OleDbDataAdapter();

            conn.Open();

            da.DeleteCommand = DelCom;

            da.DeleteCommand.ExecuteNonQuery();

            conn.Close();

            Label1.Visible = true;

        }

    protected void  DropNo_SelectedIndexChanged(object sender, EventArgs e)

    {

        OleDbConnection conn = new OleDbConnection();

            conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;"+"Data Source=" +

                Server.MapPath("App_Data/Student.mdb");

            string SqlStr = "select *from grade where uid='" + DropNo.Text + "'";

            OleDbDataAdapter da = new OleDbDataAdapter(SqlStr, conn);

            DataTable dt = new DataTable();

            da.Fill(dt);

            GridView1.DataSource = dt;

            GridView1.DataBind();

            conn.Close();

    }

    protected void  ButtonBack_Click(object sender, EventArgs e)

    {

         Response.Redirect("Default.aspx");

    }

    }

    8.7更新操作代码如下

    using System;

    using System.Collections;

    using System.Configuration;

    using System.Data;

    using System.Linq;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.HtmlControls;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Linq;

    using System.Data.OleDb;

    public partial class updata : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

            this.Title = "更新记录";

            DropNo.AutoPostBack = true;

            if (!IsPostBack)

            {

                OleDbConnection conn = new OleDbConnection();

                conn.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;" + "Data Source=" +

                    Server.MapPath("App_Data/Student.mdb");

                string SqlStr = "select *from grade";

                OleDbDataAdapter da = new OleDbDataAdapter(SqlStr,conn);

                DataTable dt = new DataTable();

                da.Fill(dt);

                DataRow MyRow = dt.Rows[0];

                TextName.Text = MyRow["uname"].ToString();

                if (MyRow["usex"].ToString() == "男")

                {

                    RadioSex.SelectedIndex = 0;

                }

                else

                {

                    RadioSex.SelectedIndex = 1;

                }

                TextClass.Text = MyRow["class"].ToString();

                TextMath.Text = MyRow["math"].ToString();

                TextChs.Text = MyRow["chs"].ToString();

                conn.Close();

            }

        }

     

        protected void  ButtonSubmit_Click(object sender, EventArgs e)

        {

        OleDbConnection conn = new OleDbConnection();

        conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;" + "Data Source=" +

                Server.MapPath("App_Data/Student.mdb");

        string SqlStr = "select *from grade where uid='" + DropNo.Text + "'";

            OleDbDataAdapter da = new OleDbDataAdapter(SqlStr, conn);

            DataTable dt = new DataTable();

            OleDbCommandBuilder builder = new OleDbCommandBuilder(da);

            da.Fill(dt);

            DataRow MyRow = dt.Rows[0];

            MyRow[1] = TextName.Text;

            MyRow[2] = RadioSex.SelectedValue.ToString();

            MyRow[3] = TextClass.Text;

            MyRow[4] = int.Parse(TextMath.Text);

            MyRow[5] = int.Parse(TextChs.Text);

            da.Update(dt);

            Response.Write("<script language= javascript>alert('纪录更新成功,请单击“返回”回到主页面!');</script>");

            conn.Close();

         }

        protected void  ButtonBack_Click(object sender, EventArgs e)

         {

         Response.Redirect("default.aspx");

         }

        protected void DropNo_SelectedIndexChanged(object sender, EventArgs e)

         {

         OleDbConnection conn = new OleDbConnection();

         conn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0;" + "Data Source=" +

            Server.MapPath("App_Data/Student.mdb");

         string SqlStr = "select * from grade where uid='" + DropNo.Text + "'";

         OleDbDataAdapter da = new OleDbDataAdapter(SqlStr, conn);

         DataTable dt = new DataTable();

         da.Fill(dt);

         DataRow MyRow = dt.Rows[0];

         TextName.Text = MyRow["uname"].ToString();

         if (MyRow["usex"].ToString() == "男")

         {

            RadioSex.SelectedIndex = 0;

         }

         else

         {

            RadioSex.SelectedIndex = 1;

         }

         TextClass.Text = MyRow["class"].ToString();

         TextMath.Text = MyRow["math"].ToString();

         TextChs.Text = MyRow["chs"].ToString();

         conn.Close();

        }

    }

     

    展开全文
  • )做了一个“记录android项目中的日志信息,并日志信息存放到手机客户端,然后自动发送到指定邮箱中的例子”。测demo我已经测试过了,是可以成功发送的。下面会告诉大家到哪里下载源代码。希望大家从中能够得到...

    今日整合了网上一些大神的例子(具体看了那些大神的?这个真不好意思我忘记了。下次再整合一定给大家补上,这次也只有默默的给那几个大神说声抱歉了。)做了一个“记录android项目中的日志信息,并将日志信息存放到手机客户端,然后自动发送到指定邮箱中的例子”。测demo我已经测试过了,是可以成功发送的。下面会告诉大家到哪里下载源代码。希望大家从中能够得到帮助。哈哈。

    一、记录android项目中的异常日志类

    复制代码
    package cn.yw.exception;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.lang.Thread.UncaughtExceptionHandler;
    
    import android.content.Context;
    import android.os.Environment;
    import android.os.Looper;
    import android.util.Log;
    
    /**
     * 在Application中统一捕获异常
     * @author tony
     *
     */
    public class CrashHandler implements UncaughtExceptionHandler {
        /**
         * 是否开启日志输出,在debug状态下开启
         * 在release状态下关闭以提示程序性能
         */
        public static final boolean DEBUG = true;
        /**
         * 系统默认的UncaughtException处理类
         */
        private Thread.UncaughtExceptionHandler mDefaultHandler;
        private static CrashHandler INSTANCE;
        private CrashHandler(){}
        public static CrashHandler getInstance() {  
               if (INSTANCE == null) {  
                   INSTANCE = new CrashHandler();  
               }  
               return INSTANCE;  
          } 
        /** 
         * 初始化,注册Context对象, 
         * 获取系统默认的UncaughtException处理器, 
         * 设置该CrashHandler为程序的默认处理器 
         *  
         * @param ctx 
         */ 
        public void init(Context ctx) {  
            mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();  
            Thread.setDefaultUncaughtExceptionHandler(this);  
        }
        @Override
        public void uncaughtException(Thread thread, Throwable ex) {
            if (!handleException(ex) && mDefaultHandler != null) {  
                //如果用户没有处理则让系统默认的异常处理器来处理  
                mDefaultHandler.uncaughtException(thread, ex);  
            } else {  //如果自己处理了异常,则不会弹出错误对话框,则需要手动退出app
                try {  
                    Thread.sleep(3000);  
                } catch (InterruptedException e) {  
                }  
                android.os.Process.killProcess(android.os.Process.myPid());  
                System.exit(10);  
            }  
        }
        /** 
         * 自定义错误处理,收集错误信息 
         * 发送错误报告等操作均在此完成. 
         * 开发者可以根据自己的情况来自定义异常处理逻辑 
         * @return 
         * true代表处理该异常,不再向上抛异常,
         * false代表不处理该异常(可以将该log信息存储起来)然后交给上层(这里就到了系统的异常处理)去处理,
         * 简单来说就是true不会弹出那个错误提示框,false就会弹出
         */ 
        private boolean handleException(final Throwable ex){
            if(ex == null){
                return false;
            }
            final StackTraceElement[] stack = ex.getStackTrace();
            final String message = ex.getMessage();
            new Thread() {  
                @Override 
                public void run() {  
                    Looper.prepare();  
                    String fileName = "crash-test.log";  
                    File file = new File(Environment.getExternalStorageDirectory(), fileName);
                    Log.e("path", ""+Environment.getExternalStorageDirectory());
                    try {
                        FileOutputStream fos = new FileOutputStream(file,true);
                        fos.write(message.getBytes());
                        for (int i = 0; i < stack.length; i++) {
                            fos.write(stack[i].toString().getBytes());
                        }
                        fos.flush();
                        fos.close();
                    } catch (Exception e) {
                        
                    }
                    Looper.loop();  
                }  
       
            }.start();
            return false;
        }
    
    }
    复制代码

    二、Application类

    复制代码
    package mi.email.activity;
    
    
    import android.app.Application;
    import cn.yw.exception.CrashHandler;
    
    public class GApplication extends Application{
        @Override
        public void onCreate() {
            super.onCreate();
            CrashHandler crashHandler = CrashHandler.getInstance();
            crashHandler.init(getApplicationContext()); 
        }
    
    }
    复制代码

    三、一键发送邮件的activity(邮件的主要代码都在这个类中,需要给位修改的地方已经加上了注释)

    复制代码
    package mi.email.activity;
    
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    
    import mi.email.core.PassAuthenticator;
    import mi.learn.com.R;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Environment;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    /**
     * 一键发送邮件
     * @author tony
     *
     */
    public class MailActivity extends Activity {
        
        private Button btnOK; 
        @Override
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mail);
            btnOK = (Button) findViewById(R.id.btnOK);
            btnOK.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    sendEmail();
                }
            });
    
        }
        /**
         * 发送邮件的方法
         * @return
         */
           private boolean sendEmail(){  
                Properties props = new Properties();  
                props.put("mail.smtp.protocol", "smtp");  
                props.put("mail.smtp.auth", "true");//设置要验证  
                props.put("mail.smtp.host", "smtp.163.com");//设置host  
                props.put("mail.smtp.port", "25");  //设置端口  
                PassAuthenticator pass = new PassAuthenticator();   //获取帐号密码  
                Session session = Session.getInstance(props, pass); //获取验证会话  
                try  
                {  
                    //配置发送及接收邮箱  
                    InternetAddress fromAddress, toAddress;  
                    /**
                     * 这个地方需要改成自己的邮箱
                     */
                    fromAddress = new InternetAddress("发送邮箱", "自己给自己发");  
                    toAddress   = new InternetAddress("接收邮箱", "自己接收自己发的邮件");
                    /**
                     * 一下内容是:发送邮件时添加附件
                     */
                    MimeBodyPart attachPart = new MimeBodyPart();  
                    FileDataSource fds = new FileDataSource(Environment.getExternalStorageDirectory()+"/crash-fortrun.log"); //打开要发送的文件  
                    
                    attachPart.setDataHandler(new DataHandler(fds)); 
                    attachPart.setFileName(fds.getName()); 
                    MimeMultipart allMultipart = new MimeMultipart("mixed"); //附件  
                    allMultipart.addBodyPart(attachPart);//添加  
                    //配置发送信息  
                    MimeMessage message = new MimeMessage(session);  
    //                message.setContent("test", "text/plain"); 
                    message.setContent(allMultipart); //发邮件时添加附件
                    message.setSubject("这次发送仅作测试");  
                    message.setFrom(fromAddress);  
                    message.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);  
                    message.saveChanges();  
                    //连接邮箱并发送  
                    Transport transport = session.getTransport("smtp");  
                    /**
                     * 这个地方需要改称自己的账号和密码
                     */
                    transport.connect("smtp.163.com", "账号", "密码");  
                    transport.send(message);  
                    transport.close();   
                } catch (Exception e) {
                    throw new RuntimeException();//将此异常向上抛出,此时CrashHandler就能够接收这里抛出的异常并最终将其存放到txt文件中
    //                Log.e("sendmail", e.getMessage());
                }
                return false;  
            } 
    }
    复制代码

    三、认证邮箱账号和密码的类

    复制代码
    package mi.email.core;
    
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    
    public class PassAuthenticator extends Authenticator  
    {  
        public PasswordAuthentication getPasswordAuthentication()  
        {  
            /**
             * 这个地方需要添加上自己的邮箱的账号和密码
             */
            String username = "账号";  
            String pwd = "密码";  
            return new PasswordAuthentication(username, pwd);  
        }  
    }  
    复制代码

    四、xml文件就不写了,里面就一个按钮别的什么都没有。

    备注:此demo需要引入3个jar包分别是activation.jar、 mail.jar 、additionnal.jar。

    源代码下载地址http://download.csdn.net/detail/openopen_119/5846353

     问题补充:上面的代码虽然发送邮件可以,但是当发送邮件的内容为中文是,在收件箱中会看到中文乱码(需要制定编码格式)

    解决办法:message.setContent(content, "text/html;charset=GBK");

    转自:http://www.cnblogs.com/tony-yang-flutter/p/android%E9%82%AE%E4%BB%B6%E6%97%A5%E5%BF%97%E4%B8%8A%E4%BC%A0.html

    展开全文
  • 首先我们看到的是免费网络传真:faxZERO ... faxZERO无需你拥有一台传真机,也不需要注册用户即可在线发送免费网络传真,每天可发送2个免费网络传真,每个免费网络传真最多可3个页面,支持.DOC(Word)和.

    首先我们看到的是免费网络传真:faxZERO

      官方网址是:http://faxzero.com/

      这个免费传真适用于美国和加拿大,发送的传真上会自动附上广告,每次发传真只能发三页,也每天只可以发两次。

      faxZERO无需你拥有一台传真机,也不需要注册用户即可在线发送免费网络传真,每天可发送2个免费网络传真,每个免费网络传真最多可发3个页面,支持.DOC(Word)和.PDF文档格式,文档限制10M以内,faxZERO会在免费网络传真中加入他的广告。

      第二个发现的是Vbuzzer。(免费向中国、美国、加拿大地区发送传真)

      官方网站:http://www.vbuzzer.com/fax.php

      以下是官方介绍:

      随时随地,轻点鼠标,通过Vbuzzer收发传真。

      只需连接互联网

      不需要传真机、电话线

      不需要打印机、墨盒和纸张

      不必等待重发

      直接从电脑发送,机密文件绝对安全

      注意:

      1. 免费传真服务试用目前仅限于美国和加拿大、中国大陆。

      2. 如果您希望接收传真,可以订购一个416传真号码,只需$25/年。

      Vbuzzer是一家网络电话服务商,之前提供过很长时间的免费网络电话,但现在不提供了。Vbuzzer目前提供免费网络传真服务,可以将你电脑上的文档发送到美国、加拿大、中国大陆的任何传真机上.

      下载安装Vbuzzer软件客户端,注册为Vbuzzer用户,登陆Vbuzzer软件客户端,点客户端下方的“传真”按钮,再点左上角“发送传真”按钮按照提示将你电脑上的文档发送传真到传真机上。

      注意:中国大陆的国际区号是86,地区区号前面的0要去掉,比如杭州区号0571,只填571即可。

      第三个是Hi-Fax

      免费试用地址:http://www.hi-fax.com/tishi.htm

      下面是他的一个试用申明,很严肃的哦。

      尊敬的测试用户,我们非常欢迎用于正常的商业用途的测试。但我们不欢迎以下行为的测试:

      游戏玩家发送“游戏密码找回”、“封游戏帐户”之类的传真;情侣之间写情书;求职等等。 一旦发现

      上述内容,我们将在网上公布您在传真中描述的个人身份信息。

      * 注意:注册完成,系统将自动给您的帐户充值2元免费测试费用。用于发送传真。

      第四个是金恒3GFAX数码传真机

      官方网址:http://www.aofax.com/

      WEB收发传真体验

      体验步骤:

      1、 登录:打开IE浏览器,在地址栏输入试用服务器网址:

      http://aofax.6600.org 或 http://aofax.8800.org

      从表1 中选择一组客户端帐号和密码,输入后点击登录按钮;

      2、 发送传真:点击上面发送传真按钮,出现发送传真窗口;点击电话簿按钮,选择“傲发”或“金恒”后按确定;点击添加文件按钮,再点击浏览按钮,选择一可打印文件后确定,点击发送传真即可;发送成功后,点击进入左边发件箱,可查看您刚刚发送成功的传真;(暂时不开放将传真发送到有线传真机上)

      3、 签字盖章:待续;

      4、 接收有纸传真:您可以用您的有线传真机,拨打试用服务器端传真号:86-755-83239880,听到欢迎词后输入您从表1中选择的传真分机号码,然后发送传真;发送成功后几分钟,点击进入左边收件箱,可查看您刚刚发送的传真;

      5、 其他可体验功能:电话簿管理,传真群发、内部转发,日志查找,定时发送、优先发送等。

      客户端漫游收发体验

      体验步骤:

      1、 安装:进入金恒科技网站AOFAX软件 下载中心,下载企业型AOFAX客户端软件,解压缩,安装,并按提示重新启动电脑;

      2、 登录:双击电脑桌面AOFAX传真管理器图标,出现AOFAX客户端登录界面;点击新建,输入试用服务器端傲发号AF26391900,点击保存;从表1中选择一组客户端帐号和密码,输入后点击登录按钮;(如果显示已登录,请另选一组)

      3、 发送传真:从左下角窗口资源管理器中选择一子目录,在右边窗口中选择一可打印文件,如Word文档等,拖动其到左中部窗口公共联系人傲发或金恒上,出现传真发送窗口,点击发送传真即可;发送成功后,点击左上角窗口,进入发件箱,双击可查看您刚刚发送成功的传真;(暂时不开放将传真发送到有线传真机上)

      4、 签字盖章:在上一步中,如果您在出现传真发送窗口后,点击上方预览签章按钮,则会出现传真浏览窗口。在这里,我们为您预先准备了“附件”“李海”等签章,密码均为“123456”,您可在图章库中选择其一,点击签章按钮,拖动鼠标将图章移动到适合的位置,点击即可完成签章功能;

      5、 接收有纸传真:您可以用您的有线传真机,拨打试用服务器端传真号:86-755-83239880,听到欢迎词后输入您从表1中选择的分机号码,然后发送传真;发送成功后几分钟,就会出现收到传真提示,点击进入收件箱,双击可查看您刚刚发送的传真;

      6、 其他可体验功能:电话簿管理,传真群发、内部转发,内部聊天,日志查找,优先发送等。

    展开全文
  • 如何把自己写的网站项目发布到网上

    千次阅读 多人点赞 2014-04-30 13:22:34
    本文以简单的静态页面来给大家做个演示,把这个静态页面发布到网上。 这个过程大概需要2步:1、申请域名和服务器空间 2、通过ftp软件上传自己的项目到服务器。 首先第一步,因为仅是用来学习的,不用考虑空间的...
  • 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息,邮箱地址是从用户的基本信息中获取,好了,首先我们来看一下java中发送邮件的方法。1. java中发送email的方法 在完善这个项目之前,...
  • 上一节我们使用了Java mail完成了给买家发送邮件的功能,还遗留一个功能,就是给买家发送短信,告诉他订单已经生成之类的。这一节主要介绍一下如何在用户支付完成后自动给用户发送短信。 1. 申请短信发送功能  很...
  • 使用Linux命令来发送信息

    千次阅读 2016-06-06 16:00:57
    使用Linux命令来发送信息(转贴)2007-10-08 12:13 Linux发展今天,很多功能已经可以在可视化的界面中来完成。不过在很多情况下,命令还是非常有用的,特别是Linux系统管理员可以通过命令发送系统休息、布告栏信息...
  • zabbix使用企业微信发送告警信息

    千次阅读 2017-08-30 09:18:40
    用qq邮箱发送告警信息一点都不方便,看到网上说也可以使用微信发送告警信息,所以就试了一下。 首先先试着在虚拟主机上给微信发送信息。 我们需要注册企业微信,注册时有一个地方需要注意,就是注册时选择组织,再...
  • 我在网上找了一些教程,包括我其中一个数据库导入工程中,不知道应该怎么实例化新对象,我试过这样: [[GCDAsyncUdpSocket alloc] initWithSocketQueue:... ??? I don't know how to initialize it. 非常...
  • 如今,暗网论坛兜售个人隐私信息,除了常见的身份证、护照、家庭地址等信息外,每个文件中还包含用户的自拍。这些自拍有何利用价值呢?咨询快递据外媒 TheNextWeb 报道,专门研究暗网的以色列安全公司 Sixgill ...
  • 如果在汇款人信息中填写了email信息,则在缴费人提交补充缴费信息后,补充缴费信息的处理状态会通过email发送给缴费人。 缴费信息应在汇款当天最迟不得超过汇款次日补充。 填写“汇款金额”时,在输入框旁...
  • 一、背景 首先我特别感谢我一个哥们帮我解决...就会把你的错误日志发送到你指定的邮箱中,让指定人去解决问题,好了现在开始我们的xxl-job邮件发送问题之旅吧,最后也欢迎大家批评指正。 二、具体步骤 1.在配置中...
  • 本地文件如何上传到网上

    万次阅读 2016-12-21 11:00:17
    背景:我们经常把写好的网页上传到网上,这对大部分人来说是在简单不过了,不过对于刚刚接触网络的新人来说是个疑问,所以今天我总结一下,怎么本地写好的网页上传到网络上(服务器) 一、首先说一下上传方式  ...
  • Log4j 配置错误信息发送Mail

    千次阅读 2012-03-15 23:55:04
    近来不是很忙,看了看log4j,然后看到log4j里面有appendermail的功能,个人做了点了解和实验,写了个简单的demo做了点测试。 Log4j发送日志邮件的作用:  项目错误信息能及时(实时)反映给项目维护人员以及...
  • 所以使用企业微信,调用相关接口给用户发送信息。百度一篇教程 java调用企业微信接口发送消息 这个教程讲的非常详细而且还有所使用的Jar包截图。 找到Demo代码如下,使用Java程序发送企业微信 非常感谢各位前辈...
  • 在ros下实现节点编程,实现一个节点发送消息,另一个节点接收。实现方式有多种,可以直接在命令窗口创建工作空间包以及节点,用catkin_make进行编译,添加.bash路径,然后执行rosrun package node_name 。这种方式...
  • 概述:最近在赶毕业设计,遇到一个问题,爬虫模块我用PyQt5写了图形界面,为了所有的输出信息都显示图形界面上遇到了问题。 先演示一下效果最终效果吧,下面两张图用来镇楼。可以看到我们图形界面和程序运行的...
  • 2、log.mailLog日志信息输出指定log文件 3、按天更新日志,并当天日期添加在文件名中   具体参考的地址是java进阶http://www.javady.com/index.php/406.html  log4j可以实现INFO、DEBUG、ERROR等级别...
  • 包括:Python基础知识系列:Python基础知识学习与提升Python网络爬虫系列:Python爬虫之Selenium+Phantomjs+CasperJSPython数据分析系列:知识图谱、web数据挖掘及NLP 接下来作者学习并讲解一些Python小应用,它...
  • 手机AT指令 AT+CMGS发信息_…

    千次阅读 2017-07-04 19:52:41
    原文地址:AT+CMGS发信息_编程阶段_百度空间 (转载)">手机AT指令 AT+CMGS发信息_编程阶段_百度空间 (转载)作者:鸽子 例如短信息中心号码为深圳 +8613800755500 对方手机号码为 +8613612345678 要发送的...
  • 上一次说了如何收集我们已经发布的应用程序的错误信息,方便我们调试完善程序。...今天介绍个更简单的方法,我们把异常信息收集后,通过后台发送邮件方法,把相关异常信息发送到我们指定的邮箱里面。 这篇文章是实用性
  • 不重新发送信息,则无法刷新网页...在网上很多人都 用:opener.window.location.href = opener.window.location.href 来实现,但如果当翻页第二或第三页时就发现页面回到第一页了。  我现向大家提供一个方法就是
  • <br />  手机信息怎么呢?一次在移动梦网上,点击忘记密码,在弹出的页面上再点获取随机短信密码,一个短信就发到手机上啦,哇。  看着看着,好奇的我,就想搞个不断点击那个页面的恶搞软件,好...
  • 针对JDK中的URLConnection连接Servlet的问题,网上有虽然有所涉及,但是只是说明了某一个或几个问题,是以FAQ的方式来解决的,而且比较零散,现在对这个类的使用就本人在项目中的使用经验做如下总结:1:> URL请求的...
  • 在聊天的过程中,我发现手机qq 存在着信息发不出去,也收不信息的情况(本人的qq加了自己为好友,哈哈, 用自己的qq 测试发现的),搞得别人以为我不理人。  网上查了一下,有很多人也存在这个问题,试了他们...
  • 手机AT指令 AT+CMGS发信息

    万次阅读 2012-10-26 10:34:11
    最近在忙一个手机AT指令的项目,就是电脑通过蓝牙串口(无线)发送AT指令控制手机,比如给手机接受与发送短信(AT+CMGR AT+... 这2天发送短信把我整惨了,网上AT+CMGF=0 OK AT+CMGS=18 >0011000D91683105114501F5000
  • 摄像头扫二维码后提取二维码中的信息分别放数组中把想要的信息编辑好放二维码中(网上有好多在线生成二维码的工具)char name[6];//从二维码扫的姓名:eg:weibo char ID[12];//从二维码扫的ID:eg:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 264,582
精华内容 105,832
关键字:

如何将信息发到网上