环境: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;@Overrideprotected 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();}@Overridepublic 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"><FrameLayoutandroid: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.BottomNavigationViewandroid: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@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);userDao = new UserDaoImpl(new DBHelper(getContext()));}@Overridepublic 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() {@Overridepublic 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);}}@Overridepublic 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*/@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();userDao.delete(user.getId());Toast.makeText(getContext(), "删除成功", Toast.LENGTH_SHORT).show();getData();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}}).create().show();}@Overridepublic void onResume() {super.onResume();getData();}
}
  • fragment_home.xml

  • `<?xml version="1.0" encoding="utf-8"?>

     <AutoCompleteTextViewandroid:id="@+id/et_id"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:hint="ID" /><Buttonandroid:id="@+id/btn_all"android:text="显示所有"android:layout_width="wrap_content"android:layout_height="wrap_content" />
    
     <ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:divider="@null"android:dividerHeight="0dp" /><android.support.design.widget.FloatingActionButtonandroid: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@Overridepublic 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());}@Overridepublic void onResume() {super.onResume();initData();}@Overridepublic 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);}}@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {startActivity(new Intent(getContext(), LoginActivity.class));SpUtil.put("isLogin", false);//保存登录状态getActivity().finish();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {dialogInterface.dismiss();}}).create().show();}@Overridepublic 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.RoundedImageViewandroid: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" /><TextViewandroid: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" />
    
     <TextViewandroid: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="修改密码" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="match_parent"app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp"tools:ignore="VectorDrawableCompat" />
    
     <TextViewandroid: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="员工反馈" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="match_parent"app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp"tools:ignore="VectorDrawableCompat" />
    
     <TextViewandroid: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="我的反馈" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="match_parent"app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp"tools:ignore="VectorDrawableCompat" />
    
     <TextViewandroid: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" /><ImageViewandroid:layout_width="wrap_content"android:layout_height="match_parent"app:srcCompat="@drawable/ic_keyboard_arrow_right_black_24dp" />
    

`

、、、、、、
有需要源码的可以加QQ:2103752102

基于Android的员工工资管理系统相关推荐

  1. 基于Java的员工工资管理系统(源码分享)

    ​ 源码编号:F-A15 项目类型:Java SE项目(awt+swing) 项目名称:基于Java的员工工资管理系统(EmployeeSalary) 用户类型:双角色(员工.管理员) 主要技术:ja ...

  2. 计算机代码设计-基于ssm的员工工资管理系统-人事工资管理系统设计-企业工资管理系统代码

    计算机代码设计-基于ssm的员工工资管理系统-人事工资管理系统设计-企业工资管理系统代码 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 1.开发环境 开发语言:Java 后台:SSM(Spr ...

  3. 基于JAVA企业员工工资管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA企业员工工资管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA企业员工工资管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  4. 基于JavaSwing的员工工资管理系统

    开发环境 eclipse+jdk1.8+mysql5.7 系统简介 本项目是主要功能有员工信息管理,部门信息管理,员工工资设定,系统设置等,员工不需要登录系统,可以直接查询自己的工资,具体项目操作及项 ...

  5. 基于Java毕业设计员工工资管理系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计员工工资管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计员工工资管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开 ...

  6. 员工工资管理系统(JAVA完整课设和详细思路)

    这是一篇基于JAVA的员工工资管理系统的课程设计,编译环境是eclipse. 下面进入正文: 一. 课设题目       题目:设计员工工资管理系统       实现功能:   1.输入 5 名员工姓 ...

  7. 基于springboot+mybatis+mysql+layui员工工资管理系统

    基于springboot+mybatis+mysql+layui员工工资管理系统 一.目的 二.需求 功能划分 系统结构设计 软件界面截图 三.系统开发配置 四.获取源码 一.目的 ​ 运用JavaE ...

  8. 基于springboot的企业员工工资管理系统(财务系统)

    项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等.这里根据疫情当下,你 ...

  9. 基于java+swing+mysql员工工资管理系统

    基于java+swing+mysql员工工资管理系统 一.系统介绍 二.功能展示 1.用户登陆 2.员工主要功能 3.管理员主要功能 三.系统实现 1.StudentFrame .java 四.其它 ...

  10. 基于C/C++语言员工工资管理系统编程设计

    详细代码讨论加我QQ:1271370903 1.课程目的 本程序旨在训练学生的C语言基本编程能力,通过串联C语言输入输出.循环语句.子函数设计.数组.结构体等知识点,完成一个简单系统的设计开发. 2. ...

最新文章

  1. python随机字典数据_python数据类型-字典
  2. IoT数据分析可能需要混合方法
  3. 初等数论--同余--WILSON定理
  4. php 不识别redis,redis,_redis卡死无法读取数据如何解决?,redis - phpStudy
  5. linux 移除python_第16 p,PYthon中的用户交互,Python GUI编程
  6. 【逆水寒三周年】大型MMO项目UI管理的价值与责任
  7. Android简单封装类似JQuery异步请求
  8. centos mysql pid_centos7 mysql The server quit without updating PID file(错误解决)
  9. rgb红色范围_【论文阅读18】RGB-D Object-Oriented Semantic Mapping
  10. DataFrame创建程序利用字典创建dataframe对象
  11. SQL SERVER执行计划详解
  12. 快速制作机房3D效果图教程
  13. 工作态度决定了工作结果
  14. CS客户端渗透测试(二)信息收集与流量分析
  15. vue用html方式路由守卫,vue-router 实现导航守卫(路由卫士)的实例代码
  16. DES方式加解密的简单介绍
  17. vue 敏感词过滤 前端
  18. python菜单及其功能_python 文本菜单
  19. 揭阳计算机短期培训机构,揭阳市PLC自动化速成班
  20. 利用Java计算计算贷款的月支付金额和总偿还金额

热门文章

  1. rapidxml 给节点赋值时出现乱码问题
  2. Pico Neo3 VR Pro 开发新手入门有感(避坑与心得,新手学习必备,瞬移射线传送,移动,射线传送光圈效果,传送指定区域)
  3. [暗黑破坏神2]PLUGY与HACKMAP共存
  4. vijos 1066 树状数组
  5. Google账户解封秘籍:这样申诉,分分钟解封Google 账户!
  6. Jenkins非常详细的教程四(钩子程序,定时构建实现)
  7. 【19】蓝桥杯之奇妙的数字(填空题)
  8. .prettierrc代码格式化配置介绍
  9. c/s架构的ERP系统对接开票接口
  10. 百度文档吓载券免财富值自助吓载方法