南京邮电大学课程设计——加速度检测应用

2周的课程设计花了3天(其实真相是花了2个小时就写好了,只是老师一会让我改这一会让我改那而已)。。这个时间可能有点长了,况且读者们看以下的的题目或许就要开始嘲笑我了,“这么简单的一个东西居然还要用那么久”。。。哈哈,不喜勿吐槽。。。。

题目3、压力监测应用

(1) 检测压力是否超过阈值

(2) 若超过压力阈值,则通过一条短信通知联系人,短信内容需包含当前压力。

(3) 可设置联系人名称和联系手机号码

(4) 可设置压力阈值

(5) 记录告警信息到数据库,方便查询

以下开始直接贴代码:

1、MainAcivity

package com.example.shiyan;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.List;

import com.njupt.db.DBDao;
import com.njupt.pojo.Info;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	Sensor sensor;
	private float x, y, z;//用来记录各个方向上的加速度的值

	float xLimit = 5;
	float yLimit = 9;//用来记录y方向上的阈值。这里只是用到了y方向上的阈值
	float zLimit = 5;

	String content;//发短信的内容
	String phone = "15951992898";//短信的号码
	String smsName = "小明";//联系人名称
	String yuzhi;//TextView显示的时候的阈值

	SmsManager smsManager;

	int smsTime = 5;

	private TextView tv_name;
	private TextView tv_phone;
	private TextView tv_yuzhi;
	private Button bt_name;
	private Button bt_phone;
	private Button bt_yuzhi;

	DBDao dao;

	public PackageManager pm;

	int counter = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		smsManager = SmsManager.getDefault();

		// 准备显示信息的UI组建
		final TextView tx1 = (TextView) findViewById(R.id.tv);

		// 从系统服务中获得传感器管理器
		SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

		// 在title上显示重力传感器的变化
		sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
		SensorEventListener lsn = new SensorEventListener() {
			public void onSensorChanged(SensorEvent e) {
				x = e.values[SensorManager.DATA_X];
				y = e.values[SensorManager.DATA_Y];
				z = e.values[SensorManager.DATA_Z];
				tx1.setText("x=" + (int) x + "," + "y=" + (int) y + "," + "z="
						+ (int) z);

				checkAccelerometer(getApplicationContext(), x, y, z);
			}

			public void onAccuracyChanged(Sensor s, int accuracy) {
			}
		};
		// 注册listener,第三个参数是检测的精确度
		sm.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);

		tv_name = (TextView) findViewById(R.id.tv_name);
		tv_phone = (TextView) findViewById(R.id.tv_phone);
		tv_yuzhi = (TextView) findViewById(R.id.tv_yuzhi);
		bt_name = (Button) findViewById(R.id.bt_name);
		bt_phone = (Button) findViewById(R.id.bt_phone);
		bt_yuzhi = (Button) findViewById(R.id.bt_yuzhi);

		dao = new DBDao(getApplicationContext());

		pm = getPackageManager();//用来获取包名
	}

	//设置联系人名称
	public void setName(View view) {
		Intent i = new Intent(MainActivity.this,SetNameActivity.class);
		startActivityForResult(i, 100);
	}

	//查询历史记录
	public void goHistory(View view){
		Intent i = new Intent(MainActivity.this,MyListActivity.class);
		startActivity(i);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(resultCode == 10){
			String name = data.getExtras().getString("name");

			tv_name.setText("联系人名称:" + name);

			smsName = name;
		}else if(resultCode == 20){
			String phonee = data.getExtras().getString("phone");
			tv_phone.setText("联系人号码:" + phonee);

			phone = phonee;
		}else if(resultCode == 30){
			int yuzhi1 = data.getExtras().getInt("yuzhi");
			tv_yuzhi.setText("阈值:" + yuzhi1);

			yLimit = yuzhi1;
		}

		super.onActivityResult(requestCode, resultCode, data);
	}

	public void setPhone(View view) {
		Intent intent = new Intent(MainActivity.this,SetPhoneActivity.class);
		startActivityForResult(intent, 200);
	}

	public void setYuzhi(View view) {
		Intent intent = new Intent(MainActivity.this,SetYuzhiActivity.class);
		startActivityForResult(intent, 300);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	/**
	 * 发短信的逻辑
	 * @param content
	 */
	public void sendSms(String content) {
//		if (smsTime > 0) {
//			return;
//		}

		List<String> texts = smsManager.divideMessage(content);

		System.out.println("--------->content: " + content);
		System.out.println("phone:" + phone);
		for (int i = 0; i < texts.size(); ++i) {
			smsManager.sendTextMessage(phone, null, content, null, null);

			System.out.println("短信已发送...");
//			smsTime++;
		}
	}

	/**
	 * 检查加速度是否超过了阈值
	 * @param context
	 * @param x
	 * @param y
	 * @param z
	 */
	public void checkAccelerometer(Context context, float x, float y, float z) {
		if (y > yLimit) {

			if(counter % 70 == 0){
				Toast.makeText(
						context,
						"accelerometer已经超过了阈值,这时候的x: " + x + ",y: " + y + ",z: "
								+ z, 0).show();

				content = smsName + " 先生/女士,accelerometer已经超过了阈值,这时候的x: " + x + ",y: "
						+ y + ",z: " + z;
				sendSms(content);

				Info info = new Info();

				info.setName(smsName);
				info.setX(x);
				info.setY(y);
				info.setZ(z);

				dao.save(info);

				if(counter > 70){
					counter = 0;
				}
			}else{

			}

			counter++;

		}
	}

	/**
	 * 将DB文件复制到SD卡中(推荐使用下面一种)
	 * @param context
	 * @param oldName
	 * @param newName
	 */
	public void copyDBFile(Context context, String oldName, String newName) {
		try {
			PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0);
			String packageName = info.packageName;

			FileReader reader = new FileReader("data/data/" + packageName + "/"
					+ "/databases/" + oldName);

			System.out.println("Environment.getExternalStorageDirectory(): "
					+ Environment.getExternalStorageDirectory());
			FileWriter writer = new FileWriter(
					Environment.getExternalStorageDirectory() + "/" + newName);

			int ch;
			while ((ch = reader.read()) != -1) {
				writer.write(ch);
			}

			reader.close();
			writer.close();

			System.out.println("--------->db文件备份成功...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 按钮的单击事件
	 * @param view
	 */
	public void saveDB(View view) {
		Thread t = new Thread(new Runnable() {

			@Override
			public void run() {
//				copyDBFile(getApplicationContext(), "njupt.db", "njupt.db");//这种方法不行,不知道为什么..
				copyDatabaseFile(getApplicationContext(), false);
			}
		});

		t.start();

		Toast.makeText(getApplicationContext(), "DB文件备份成功", 0).show();
	}

	/**
	 * 数据库文件的拷贝...
	 * @param context
	 * @param isfored
	 */
	public void copyDatabaseFile(Context context, boolean isfored) {
		try {
			PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0);
			String packageName = info.packageName;

			File dir = new File("data/data/" + packageName + "/"
					+ "/databases/" + "njupt.db");
			if (!dir.exists() || isfored) {
				try {
					dir.mkdir();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

			File dest = new File(Environment.getExternalStorageDirectory() + "/" + "njupt1.db");
			if (dest.exists() && !isfored) {
				return;
			}

			try {
				if (dest.exists()) {
					dest.delete();
				}
				dest.createNewFile();
				InputStream in = new FileInputStream(dir);
				int size = in.available();
				byte buf[] = new byte[size];
				in.read(buf);
				in.close();
				FileOutputStream out = new FileOutputStream(dest);
				out.write(buf);
				out.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();

		}
	}

}

2、MyListActivity

package com.njupt.shiyan;

import java.util.List;

import com.example.shiyan.R;
import com.njupt.db.DBDao;
import com.njupt.pojo.Info;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 查询历史记录的Activity
 * @author Administrator
 *
 */
public class MyListActivity extends Activity {
	private ListView infoLV;
	List<Info> infos;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.list);
		infoLV = (ListView) findViewById(R.id.infoLV);
		DBDao dao = new DBDao(this);
		infos = dao.query();

		infoLV.setAdapter(new MyAdapter());

	}

	public class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return infos.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return infos.get(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View item = View.inflate(getApplicationContext(), R.layout.item,
					null);// 根据布局文件创建View(LinearLayout)

			TextView idTV = (TextView) item.findViewById(R.id.idTV);// 获取这个新生成的View中的TextView
			TextView nameTV = (TextView) item.findViewById(R.id.nameTV);
			TextView xTV = (TextView) item.findViewById(R.id.xTV);
			TextView yTV = (TextView) item.findViewById(R.id.yTV);
			TextView zTV = (TextView) item.findViewById(R.id.zTV);

			Info info = infos.get(position);// 根据位置获取Person对象
			idTV.setText(info.get_id() + "");// 给TextView设置文本
			nameTV.setText(info.getName());
			xTV.setText(info.getX() + "");
			yTV.setText(info.getY() + "");
			zTV.setText(info.getZ() + "");

			return item;
		}

	}
}

3、SetNameActivity

package com.njupt.shiyan;

import com.example.shiyan.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SetNameActivity extends Activity {

	private EditText et_name;
	private Button bt_name;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.setname);

		et_name = (EditText) findViewById(R.id.et_name);
		bt_name = (Button) findViewById(R.id.bt_name);

		bt_name.setOnClickListener(new MyOnClickListener());
	}

	class MyOnClickListener implements OnClickListener{
		@Override
		public void onClick(View v) {
			String name = et_name.getText().toString();

			Intent intent = new Intent();
			intent.putExtra("name", name);

			setResult(10, intent);

			Toast.makeText(getApplicationContext(), "设置联系人名称成功..", 0).show();
			finish();
		}
	}
}

4、SetPhoneActivity

package com.njupt.shiyan;

import com.example.shiyan.R;
import com.njupt.utils.Utils;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SetPhoneActivity extends Activity {

	private EditText et_phone;
	private Button bt_phone;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.setphone);

		et_phone = (EditText) findViewById(R.id.et_phone);
		bt_phone = (Button) findViewById(R.id.bt_phone);

		bt_phone.setOnClickListener(new MyOnClickListener1());
	}

	class MyOnClickListener1 implements OnClickListener{
		@Override
		public void onClick(View v) {
			String phone = et_phone.getText().toString();

			if(Utils.checkStringIsNumber(getApplicationContext(), phone)  == false){
				return ;
			}

			Intent intent = new Intent();

			intent.putExtra("phone", phone);

			setResult(20, intent);

			Toast.makeText(getApplicationContext(), "设置联系人号码成功..", 0).show();
			finish();
		}
	}

}

5、SetYuzhiActivity

package com.njupt.shiyan;

import com.example.shiyan.R;
import com.njupt.utils.Utils;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class SetYuzhiActivity extends Activity {

	private EditText et_yuzhi;
	private Button bt_yuzhi;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.setyuzhi);

		et_yuzhi = (EditText) findViewById(R.id.et_yuzhi);
		bt_yuzhi = (Button) findViewById(R.id.bt_yuzhi);

		bt_yuzhi.setOnClickListener(new MyOnClickListener2());
	}

	class MyOnClickListener2 implements OnClickListener{
		@Override
		public void onClick(View v) {
			String yuzhi = et_yuzhi.getText().toString();

			if(Utils.checkStringIsNumber(getApplicationContext(), yuzhi) == false){
				return ;
			}

			int yuzhi1 = Integer.parseInt(yuzhi);
			Intent intent = new Intent();
			intent.putExtra("yuzhi", yuzhi1);

			setResult(30, intent);

			Toast.makeText(getApplicationContext(), "设置阈值成功..", 0).show();
			finish();
		}
	}

}

6、SplashActivity

package com.njupt.shiyan;

import com.example.shiyan.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;

public class SplashActivity extends Activity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 取消状态栏
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.splash);

		ImageView logoImage = (ImageView) findViewById(R.id.iv_logo);

		AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
		alphaAnimation.setDuration(3000);
		logoImage.startAnimation(alphaAnimation);
		alphaAnimation.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation animation) {

			}

			@Override
			public void onAnimationRepeat(Animation animation) {

			}

			@Override
			public void onAnimationEnd(Animation animation) {
				Intent intent = new Intent();
				intent.setClass(SplashActivity.this,SplashActivity1.class);
				startActivity(intent);
				finish();
			}
		});

	}
}

7、SplashActivity1

package com.njupt.shiyan;

import com.example.shiyan.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;

public class SplashActivity1 extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 取消状态栏
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.splash1);

		ImageView logoImage = (ImageView) findViewById(R.id.iv_logo);

		AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
		alphaAnimation.setDuration(3000);
		logoImage.startAnimation(alphaAnimation);
		alphaAnimation.setAnimationListener(new AnimationListener() {

			@Override
			public void onAnimationStart(Animation animation) {

			}

			@Override
			public void onAnimationRepeat(Animation animation) {

			}

			@Override
			public void onAnimationEnd(Animation animation) {
				Intent intent = new Intent();
				intent.setClass(SplashActivity1.this, MainActivity.class);
				startActivity(intent);
				finish();
			}
		});

	}
}

8、DBDao

package com.njupt.db;

import java.util.ArrayList;
import java.util.List;

import com.njupt.pojo.Info;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DBDao {
	DBOpenHelper dbOpenHelper;

	SQLiteDatabase db;
	public DBDao(Context context){
		this.dbOpenHelper=new DBOpenHelper(context);
		db = dbOpenHelper.getWritableDatabase();

	}
	/**
	 * 添加一条数据
	 * @param info
	 */
	public void save(Info info){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		System.out.println("----->save: " + info.getX() + ", "+info.getY() + ","+info.getZ());
		db.execSQL("insert into info(name,x,y,z) values(?,?,?,?)", new Object[]{info.getName(),info.getX(),info.getY(),info.getZ()});

		System.out.println("------------>保存成功.x: " + info.getX() + ",y: " + info.getY());
		db.close();
	}

	public List<Info> query() {
		ArrayList<Info> infos = new ArrayList<Info>();
		Cursor c = queryTheCursor();
        while (c.moveToNext()) {
        	Info info = new Info();
        	info._id = c.getInt(c.getColumnIndex("_id"));
        	info.name = c.getString(c.getColumnIndex("name"));
        	info.x = c.getFloat(c.getColumnIndex("x"));
        	info.y = c.getFloat(c.getColumnIndex("y"));
        	info.z = c.getFloat(c.getColumnIndex("z"));
        	infos.add(info);
        }
        c.close();

        db.close();

        return infos;
	}

	/**
	 * query all persons, return cursor
	 * @return	Cursor
	 */
	public Cursor queryTheCursor() {
        Cursor c = db.rawQuery("SELECT * FROM info", null);
        return c;
	}

}

9、DBOpenHelper

package com.njupt.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBOpenHelper extends SQLiteOpenHelper {

	public DBOpenHelper(Context context) {
		super(context, "njupt.db", null, 1);

	}

	//数据库第一次创建时候调用,
	public void onCreate(SQLiteDatabase db) {
		System.out.println("---------->创建了一张表...");
		db.execSQL("create table info(_id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20),x float(10), y float(10),z float(10))");
	}

	//数据库文件版本号发生变化时调用
	public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {

	}
}

10、Info

package com.njupt.pojo;

/**
 * 用来记录一条异常信息
 * @author 黄俊东大神
 *
 */
public class Info {
	public int _id;
	public String name;//发生异常信息时,短信是给谁发的
	public float x;//x方向上的加速度
	public float y;//y轴方向上的加速度
	public float z;//z轴方向上的加速度

	public int get_id() {
		return _id;
	}
	public void set_id(int _id) {
		this._id = _id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getX() {
		return x;
	}
	public void setX(float x) {
		this.x = x;
	}
	public float getY() {
		return y;
	}
	public void setY(float y) {
		this.y = y;
	}
	public float getZ() {
		return z;
	}
	public void setZ(float z) {
		this.z = z;
	}

}

11、Uitls

package com.njupt.utils;
import android.content.Context;
import android.widget.Toast;

public class Utils {

	/**
	 * 判断一个函数是否是一个数字
	 * @param context
	 * @param str
	 * @return
	 */
	public static boolean checkStringIsNumber(Context context,String str){
		int size = str.length();
		if (size <= 0) {
			Toast.makeText(context, "所输入的内容不能为空", 0).show();
			return false;
		}
		for (int i = 0; i < size; ++i) {
			if (Character.isDigit(str.charAt(i)) == false) {
				Toast.makeText(context, "所输入的内容必须是一个数字..", 1).show();
				return false;
			}
		}

		return true;
	}
}

12、DBTest

package com.njupt.test;

import java.util.List;

import com.njupt.db.DBDao;
import com.njupt.db.DBOpenHelper;
import com.njupt.pojo.Info;

import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;

public class DBTest extends AndroidTestCase{
	public void testCreateDatabase() {
		DBOpenHelper helper = new DBOpenHelper(getContext());
		helper.getWritableDatabase();
		/*
		 * 获取可写的数据连接
		 * 数据库文件不存在时, 会创建数据库文件, 并且执行onCreate()方法
		 * 数据库文件存在, 并且版本没有改变时, 不执行任何方法
		 * 数据库文件存在, 版本提升, 执行onUpgrade()方法
		 */

	}

	public void testQuery(){
		DBDao dao = new DBDao(getContext());
		List<Info> infos =  dao.query();

		for(Info info : infos){
			System.out.println("_id:" +info.get_id() + ",name: " + info.getName() + ",x: " + info.getX() + ",y: " + info.getY() + ",z: " + info.getZ());
		}

	}
}

本项目源码下载链接:http://download.csdn.net/detail/caihongshijie6/7559633

南京邮电大学课程设计——加速度检测应用,布布扣,bubuko.com

时间: 2024-10-07 05:16:42

南京邮电大学课程设计——加速度检测应用的相关文章

软件课程设计报告

南 京 理 工 大 学 课程设计说明书 组员 : 刘雨薇 学 号: 914106840606   张钰 914106840310   张欢欢 914106840509   彭姿容 914106840501 学院(系): 计算机科学与工程学院 专业 计算机科学与技术专业 题目 计算机网络课程测试系统       2016 年   11 月 目录 一.概述 ·················································3 二.需求分析···············

南理工14级第4组软件课程设计报告

南 京 理 工 大 学 课程设计说明书 作  者: 高明 学 号: 914106840518   刘建平   914106840526   王金   914106840234   王琪栋   914106840235   雷杨   914106840618 学院(系): 计算机科学与技术学院 专  业: 计算机科学与技术 题  目: 离散课程练习测验系统   2016年    10月 目录 一.概述 ················································

文件系统的设计与实现(操作系统课程设计)

 转发请注明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739 源码下载地址:http://download.csdn.net/download/u013255737/9513460 目录 一.设计目的.意义 1 二. 设计分析 1 三.方案分析 2 四.功能模块实现 3 五.最终结果分析 4 六. 设计体会 5 一.设计目的.意义 1.通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重

web课程设计总结

阶段的总结,是进步的一大助力,现在总结下课程设计. 第一个网站:基于PHP的购书网站 现在感到网站的本质是:数据的流动. 网站一开始,完全不懂后台,所以就只做了前台先. 做前端,就是html,CSS,javascript,jQuery. 在这个过程中,接触到了很多库,框架,js插件. 比如bootstrap,boostrap是响应式的,当时第一个接触的东西,感觉好强大,响应式的,有好多模块可以自己任意添加,顶部,按钮,图标等等,对样式的控制也很难.但是以我现在对bootstrap的认识,做不出很

[原创]基于51单片机的红外遥控课程设计

[注]: 一眨眼,大学接近尾声,具有找工作需要,所以把大学做的电子设计“劣作”放上来.希望考研失意,还能赶上“好工作”的春招班车.如果大伙有什么工作推荐也可以联系我哦,因为一年考研少接触了这方面,所以难免有些生疏.但请相信我!给我机会我会很认真学的! 邮箱:[email protected] 转载请注明出处呀! 基于51单片机的红外遥控课程设计 目录 第一章 设计简介... 3 第二章 系统方案... 3 一.设计方案对比... 3 二.方案设计... 4 第三章 硬件设计... 5 一.红外遥

java课程设计--坦克大战

java课程设计--坦克大战 一. 团队课程设计博客链接 https://www.cnblogs.com/zwtcyt/p/12173572.html 二.个人负责模块和任务说明 墙体类,子弹类,道具类以及音效类的编写,部分GUI的编写 三.代码的提交记录截图 四.负责模块和任务详细说明 墙体类 主墙体即不可摧毁的墙体 该类为所有障碍物的父类,子类继承时改变里面draw方法 草地类 河流类 可摧毁的墙类 音效类 子弹类 子弹与碰撞检测 利用javafx中shape的intersect方法来得出两

java课程设计

程序设计实训报告 题目:计算数学表达式程序 1.课设目的 (1)复习巩固java语言的基础知识,进一步加深对java语言的理解和掌握 (2)课设为大家提供一个即动手又动脑,独立实践的机会.提高我们适应实际,编程的能力 (3)培养我们在项目开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及java语言的解释 2.设计题目分析 (1)由用户输入一个简单的四则运算表达式,求出其计算结果后显示 (2)允许在表达式中出现常用的数学函数,如取整.三角函数.倒数.平方根.平方

51单片机课程设计:基于DS18B20的温度报警器

51单片机课程设计:基于DS18B20的温度报警器 本程序用于读取DS18B20温度,同时具备报警功能,工程分为3个文件,main.c.temp.c.temp.h,经本人修改部分代码,适用于吉林农业大学51开发板,其他朋友亦可移植到其他型号开发板.工程文件在文章最下方. 1.main.c文件 /*********************************说明****************************************** 本程序用于读取温度检测模块DS18B20数值,并

51单片机课程设计:基于MQ-3的酒精浓度报警器

51单片机课程设计:基于MQ-3的酒精浓度报警器 本程序用于将MQ-3上读取到的模拟信号转换为对应的数字信号,经51单片机处理后,在数码管显示,同时具有报警功能,当检测值高于预警值,蜂鸣器报警.除了可以检测MQ-3酒精浓度模块的AD值,也适用于MQ系列的其他模块,原理基本都相同,都是将读取到的AD值转换为数字信号,程序修改后,如果接线方法正确,可以在吉林农业大学51开发板上完美运行,相关工程文件见最下方附件. /*************************************说明***