环境:Android Studio 3.4
一、项目简介
通过Android Stdio创建一个员工工资管理系统,可以实现管理员和员工的登录,管理员可以查看、添加、修改、删除员工信息和工资信息,普通员工登录只能查看自己的信息以及工资信息,此外员工可以反馈信息给管理员,管理员可以处理或忽略。
初次打开软件时,把一批员工的信息及对应的工资存到sqlite数据库,管理员的账号唯一,拥有最高权限,可以对员工信息和工资信息进行增删改查,并查看处理员工的反馈信息;员工登录后能查看自己的个人信息,并修改个人信息,员工还能查看自己的工资,但是不能进行操作。个人中心有反馈的功能,可以反馈信息给管理员,并能查看自己的反馈记录,及管理员的处理结果等
二、项目运行截图
三、项目部分源码
- MainActivity.java
/**
* @author 小强程序设计
* QQ:2103752102
* @Date 2019/10/3 15:21
* @Desc 主页
*
*/
public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
BottomNavigationView navigation;
private Fragment[] fragments;
private int currentIndex, index;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(this);
fragments = new Fragment[]{new HomeFragment(), new WagesFragment(), new MeFragment()};
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fl_main, fragments[0])
.show(fragments[0]).commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
index = 0;
break;
case R.id.navigation_dashboard:
index = 1;
break;
case R.id.navigation_notifications:
index = 2;
break;
}
showFragment(index);
return true;
}
/**
* 切换fragment
*
* @param index:0-2
*/
public void showFragment(int index) {
if (currentIndex != index) {
FragmentTransaction trx = getSupportFragmentManager().beginTransaction();
trx.hide(fragments[currentIndex]);
if (!fragments[index].isAdded()) {
trx.add(R.id.fl_main, fragments[index]);
}
trx.show(fragments[index]).commit();
}
currentIndex = index;
}
}
- activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.MainActivity">
<FrameLayout
android:id="@+id/fl_main"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="#f0f0f0"
app:layout_constraintBottom_toTopOf="@id/navigation"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
</android.support.constraint.ConstraintLayout>
- HomeFragment.java
public class HomeFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemClickListener {
private AutoCompleteTextView et_id;
private ListView listView;
private UserListAdapter adapter;
private FloatingActionButton fab_add;
private Button btn_all;
private UserDao userDao;
private List<User> users;
private boolean isAdmin = SpUtil.getBoolean("isAdmin", false);//是否是管理员
private int id = (int) SpUtil.getData("id", -1);//员工id
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
userDao = new UserDaoImpl(new DBHelper(getContext()));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
initView(view);
getData();
return view;
}
/**
* 从数据库查询员工数据
*/
@SuppressLint("RestrictedApi")
private void getData() {
et_id.setText("");
//用户数据库操作类
userDao = new UserDaoImpl(new DBHelper(getContext()));
if (isAdmin) {
users = userDao.selectById(-1);//管理员传-1,表示查询所有员工信息
} else {
users = userDao.selectById(id);//管理员传-1,表示查询所有员工信息
}
adapter = new UserListAdapter(getContext(), users);
listView.setAdapter(adapter);
}
@SuppressLint("RestrictedApi")
private void initView(View view) {
et_id = (AutoCompleteTextView) view.findViewById(R.id.et_id);
listView = (ListView) view.findViewById(R.id.listView);
fab_add = (FloatingActionButton) view.findViewById(R.id.fab_add);
btn_all = view.findViewById(R.id.btn_all);
fab_add.setOnClickListener(this);
listView.setOnItemClickListener(this);
btn_all.setOnClickListener(this);
final List<String> strings;
if (isAdmin) {
strings = userDao.selectAllWorkIds(-1);
} else {
strings = userDao.selectAllWorkIds(id);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, strings);
et_id.setAdapter(arrayAdapter);
et_id.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String s = (String) parent.getItemAtPosition(position);
Log.d("HomeFragment", s);
boolean isExist = false;
for (int i = 0; i < users.size(); i++) {
if (users.get(i).getWork_num().equals(s)) {
isExist = true;
User qUser = users.get(i);
users.clear();
users.add(qUser);
listView.setAdapter(new UserListAdapter(getContext(), users));
break;
}
}
if (!isExist) {
Toast.makeText(getContext(), "没有此员工", Toast.LENGTH_SHORT).show();
users.clear();
listView.setAdapter(new UserListAdapter(getContext(), users));
}
}
});
if (isAdmin) {
fab_add.setVisibility(View.VISIBLE);
btn_all.setVisibility(View.VISIBLE);
} else {
et_id.setVisibility(View.GONE);
btn_all.setVisibility(View.GONE);
fab_add.setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_all://显示所有
getData();
break;
case R.id.fab_add:
addUser();
break;
}
}
/**
* 添加用户
*/
private void addUser() {
Intent intent = new Intent(getContext(), AddUpdateUserActivity.class);
startActivity(intent);
}
/**
* ListView 点击事件
*
* @param parent
* @param view
* @param position
* @param id
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
final User user = (User) parent.getItemAtPosition(position);
if (!isAdmin){
Intent intent = new Intent(getContext(), AddUpdateUserActivity.class);
intent.putExtra("user", user);
startActivity(intent);
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
String[] items = {"修改", "删除"};
builder.setTitle("操作");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
if (which == 0) {//修改
Intent intent = new Intent(getContext(), AddUpdateUserActivity.class);
intent.putExtra("user", user);
startActivity(intent);
} else if (which == 1) {//删除
if (isAdmin) {
delete(user);
} else {
Toast.makeText(getContext(), "不能删除自己", Toast.LENGTH_SHORT).show();
}
}
}
});
builder.create().show();
}
/**
* 删除
*
* @param user
*/
private void delete(final User user) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("删除员工")
.setMessage("是否删除此员工(" + user.getName() + ")?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
userDao.delete(user.getId());
Toast.makeText(getContext(), "删除成功", Toast.LENGTH_SHORT).show();
getData();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();
}
@Override
public void onResume() {
super.onResume();
getData();
}
}
-
fragment_home.xml
-
`<?xml version="1.0" encoding="utf-8"?>
<AutoCompleteTextView android:id="@+id/et_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:hint="ID" /> <Button android:id="@+id/btn_all" android:text="显示所有" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" android:dividerHeight="0dp" /> <android.support.design.widget.FloatingActionButton android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:id="@+id/fab_add" android:layout_marginBottom="@dimen/commDimen" android:layout_marginRight="@dimen/commDimen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_add" app:backgroundTint="@color/colorPrimary" />
`
- MeFragment.java
package com.admin.staff.fragment;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.admin.staff.R;
import com.admin.staff.activity.FeedBackAddActivity;
import com.admin.staff.activity.FeedbackActivity;
import com.admin.staff.activity.LoginActivity;
import com.admin.staff.activity.MyFeedBackActivity;
import com.admin.staff.activity.PasswordActivity;
import com.admin.staff.util.SpUtil;
import com.makeramen.roundedimageview.RoundedImageView;
/**
* 我的
*/
public class MeFragment extends Fragment implements View.OnClickListener {
private RoundedImageView riv_head;
private TextView tv_name;
private LinearLayout ll_publish;
private LinearLayout ll_logout;
private LinearLayout ll_password, ll_my_back;
private boolean isAdmin = SpUtil.getBoolean("isAdmin", false);//是否是管理员
private int id = (int) SpUtil.getData("id", -1);//员工id
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_me, container, false);
initView(view);
initData();
return view;
}
private void initData() {
tv_name.setText(SpUtil.getCurrentUser().getName());
}
@Override
public void onResume() {
super.onResume();
initData();
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
private void initView(View view) {
riv_head = (RoundedImageView) view.findViewById(R.id.riv_head);
tv_name = (TextView) view.findViewById(R.id.tv_name);
ll_password = (LinearLayout) view.findViewById(R.id.ll_password);
ll_publish = (LinearLayout) view.findViewById(R.id.ll_publish);
ll_logout = (LinearLayout) view.findViewById(R.id.ll_logout);
ll_my_back = (LinearLayout) view.findViewById(R.id.ll_my_back);
ll_publish.setOnClickListener(this);
ll_logout.setOnClickListener(this);
ll_password.setOnClickListener(this);
ll_my_back.setOnClickListener(this);
if (isAdmin) {
ll_my_back.setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ll_password:
startActivityForResult(new Intent(getContext(), PasswordActivity.class), 11);
break;
case R.id.ll_publish:
//反馈
if (isAdmin) {
startActivity(new Intent(getContext(), FeedbackActivity.class));
} else {
startActivity(new Intent(getContext(), FeedBackAddActivity.class));
}
break;
case R.id.ll_my_back:
startActivity(new Intent(getContext(), MyFeedBackActivity.class));
break;
case R.id.ll_logout:
logout();
break;
}
}
/**
* 退出登录
*/
private void logout() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder
.setTitle("退出登录")
.setMessage("您是否要退出登录?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
startActivity(new Intent(getContext(), LoginActivity.class));
SpUtil.put("isLogin", false);//保存登录状态
getActivity().finish();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
})
.create().show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 11 && resultCode == Activity.RESULT_OK) {
SpUtil.put("isLogin", false);//保存登录状态
startActivity(new Intent(getContext(), LoginActivity.class));
getActivity().finish();
}
}
}
-
fragment_me.xml
-
`<?xml version="1.0" encoding="utf-8"?>
<com.makeramen.roundedimageview.RoundedImageView android:id="@+id/riv_head" android:layout_width="80dp" android:layout_height="80dp" android:src="@mipmap/ic_head6" app:riv_border_color="#fff" app:riv_border_width="2dp" app:riv_oval="true" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="@string/app_name" android:textColor="#ffffff" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:drawableLeft="@drawable/ic_publish_black_24dp" android:drawablePadding="5dp" android:gravity="center_vertical" android:text="修改密码" /> <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp" tools:ignore="VectorDrawableCompat" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:drawableLeft="@drawable/ic_publish_black_24dp" android:drawablePadding="5dp" android:gravity="center_vertical" android:text="员工反馈" /> <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp" tools:ignore="VectorDrawableCompat" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:drawableLeft="@drawable/ic_publish_black_24dp" android:drawablePadding="5dp" android:gravity="center_vertical" android:text="我的反馈" /> <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp" tools:ignore="VectorDrawableCompat" />
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:drawableLeft="@drawable/ic_publish_black_24dp" android:drawablePadding="5dp" android:gravity="center_vertical" android:text="@string/logout" /> <ImageView android:layout_width="wrap_content" android:layout_height="match_parent" app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp" />
`
、、、、、、
有需要源码的可以加QQ:2103752102