一道综合练习题实践list及dictionary集合类
定义一个员工的集合,对员工集合内的元素进行查询和删除。
实现员工的签到和签退,要求如下:
//A:每天只能签到一次
//B:签退前必须已经签到
//C:显示打卡记录
代码如下:
员工信息类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace StringTest
{
class Employee
{ private int id; public int ID
{
get { return id; }
set { id = value; }
}
private string name; public string Name
{
get { return name; }
set { name = value; }
}
private string sex; public string Sex
{
get { return sex; }
set { sex = value; }
}
private int age; public int Age
{
get { return age; }
set { age = value; }
} // A:实现新增员工(工号,年龄,姓名,性别) public Employee(int _id, int _age, string _name, string _sex)
{
this.Name = _name;
this.Age = _age;
this.Sex = _sex;
this.ID = _id;
} //B:展示员工信息, public void ShowMsg()
{ Console.WriteLine("工号:{0} 年龄:{1} 姓名:{2} 性别:{3}", this.ID, this.Age, this.Name, this.Sex);
}
}
}
公司信息类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace StringTest
{
class Company
{
public List<Employee> list = new List<Employee>();
public Dictionary<string, List<KaoqinRecord>> dicKaoQinEachDay = new Dictionary<string, List<KaoqinRecord>>();
public void AddEmp(Employee sc)
{
list.Add(sc);
} public void DelEmp(int nID)
{
for (int i = ; i < list.Count; i++)
{
if (list[i].ID == nID)
{
list.RemoveAt(i);
}
}
} public void PrintAllEmp()
{
for (int i = ; i < list.Count; i++)
{
list[i].ShowMsg();
} } public Employee FindEmp(int nID)
{
for (int i = ; i < list.Count; i++)
{
if (list[i].ID == nID)
{
return list[i];
}
}
return null;
}
}
}
考勤记录类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace StringTest
{
class KaoqinRecord
{ public int nID;
public DateTime dtStart;
public DateTime dtEnd;
}
}
主程序类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace StringTest
{
class Program
{
static Company c = new Company();
static void Main(string[] args)
{
//// 1、使用你所学的C#的容器类实现员工考勤信息管理,
//实现以下功能:要求:使用泛型集合list的添加,查询和删除操作)
// A:实现新增员工(工号,年龄,姓名,性别)
List<Employee> list = new List<Employee>(); c.AddEmp(new Employee(, , "zhang3", "男"));
c.AddEmp(new Employee(, , "li4", "女"));
c.AddEmp(new Employee(, , "wang5", "男"));
c.AddEmp(new Employee(, , "zhao6", "女"));
c.AddEmp(new Employee(, , "qian7", "男"));
c.AddEmp(new Employee(, , "sun8", "女")); c.PrintAllEmp(); //C:根据工号删除员工信息 Console.WriteLine("请输入删除员工信息!工号:");
int numDel = Convert.ToInt32(Console.ReadLine()); c.DelEmp(numDel); c.PrintAllEmp(); //D根据员工工号查询员工信息
Console.WriteLine("请输入查询员工信息!工号:");
int numShu = Convert.ToInt32(Console.ReadLine()); Employee sc = c.FindEmp(numShu);
sc.ShowMsg(); while(true)
{
Console.WriteLine("员工考勤系统");
Console.WriteLine("0--------------exit");
Console.WriteLine("1--------------qiandao");
Console.WriteLine("2--------------qiantui");
Console.WriteLine("3--------------ShowKaoqin"); int n = Convert.ToInt32(Console.ReadLine());
if (n == )
break;
switch(n)
{
case :
{
Console.WriteLine("请输入要签到的员工号码");
int nEmpNo = Convert.ToInt32(Console.ReadLine());
qiandao(nEmpNo);
break;
}
case :
{
Console.WriteLine("请输入要签退的员工号码");
int nEmpNo = Convert.ToInt32(Console.ReadLine());
qiantui(nEmpNo);
break;
}
case :
{
Console.WriteLine("请输入考勤日期:");
ShowKaoqins();
break;
}
default:
break; }
} } public static void ShowKaoqins()
{
string strDate = System.DateTime.Now.Date.ToShortDateString();
List<KaoqinRecord> lst = c.dicKaoQinEachDay[strDate];
Console.WriteLine("今天考勤的人数有:");
foreach(KaoqinRecord kr in lst)
{
int nId = kr.nID;
Employee sc = c.FindEmp(nId);
Console.WriteLine("{0} 今天签到时间为:{1} 签退时间为 {2}", sc.Name, kr.dtStart, kr.dtEnd);
}
} public static void qiantui(int nID)
{
Employee sc = c.FindEmp(nID);
string strDate = System.DateTime.Now.Date.ToShortDateString();
if (!c.dicKaoQinEachDay.Keys.Contains(strDate))//第一个签到的员工
{
Console.WriteLine("{0}今天没有签到", sc.Name);
return;
}
else
{
List<KaoqinRecord> lst = c.dicKaoQinEachDay[strDate];
int nFindIndex = -;
int i = ;
foreach (KaoqinRecord kr in lst)
{
if (kr.nID == nID)
{
nFindIndex = i;
break;
}
i++;
} if(nFindIndex >= )
{
KaoqinRecord kr = lst[nFindIndex];
kr.dtEnd = System.DateTime.Now;
}
else
{
Console.WriteLine("{0}今天没有签到", sc.Name);
}
}
}
public static void qiandao(int nID)
{
Employee sc = c.FindEmp(nID);
string strDate = System.DateTime.Now.Date.ToShortDateString();
if(!c.dicKaoQinEachDay.Keys.Contains(strDate))//第一个签到的员工
{
KaoqinRecord kr = new KaoqinRecord();
kr.nID = sc.ID;
kr.dtStart = System.DateTime.Now;
List<KaoqinRecord> lst = new List<KaoqinRecord>();
lst.Add(kr);
c.dicKaoQinEachDay.Add(strDate, lst);
}
else
{
List<KaoqinRecord> lst = c.dicKaoQinEachDay[strDate]; foreach(KaoqinRecord kr in lst)
{
if(kr.nID == nID)
{
Console.WriteLine("{0}今天已经签到了",sc.Name);
return;
}
} KaoqinRecord krNew = new KaoqinRecord();
krNew.nID = sc.ID;
krNew.dtStart = System.DateTime.Now;
lst.Add(krNew); } Console.WriteLine("{0}签到成功",sc.Name); }
}
}
java版
公司信息类
package com.company; import java.text.SimpleDateFormat;
import java.util.*; /**
* Created by ttc on 2017/6/30.
*/
public class Company {
private List<String> lstEmps = new ArrayList<String>();
//key是签到日期
private Map<String,List<KaoqinRecord>> map = new HashMap<>(); public void qiandao()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入要签到的员工姓名");
String strName = sc.nextLine();
if(!lstEmps.contains(strName))
{
System.out.println("不存在该员工");
return;
} Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdfTime = new SimpleDateFormat("hh:mm:ss");
String strDate = sdf.format(date);
String strTime = sdfTime.format(date);
if(!map.containsKey(strDate))//第一个签到的员工
{
List<KaoqinRecord> lst = new ArrayList<>(); KaoqinRecord kq = new KaoqinRecord();
kq.setEmpName(strName);
kq.setTimeStart(strTime);
kq.setTimeEnd("");
lst.add(kq); map.put(strDate,lst);
System.out.println(strName+"签到成功");
}
else//说明之前,今天已经有人签过到了
{
List<KaoqinRecord> lst = map.get(strDate); //判断是否已经签到过
boolean bIsFind = false;//假设没找到,没签到过
for(KaoqinRecord qr : lst)
{
if(qr.getEmpName().equals(strName))
{
System.out.println("已经签过到了");
bIsFind = true;
break;
}
}
if(!bIsFind)
{
KaoqinRecord kq = new KaoqinRecord();
kq.setEmpName(strName);
kq.setTimeStart(strTime);
kq.setTimeEnd("");
lst.add(kq);
System.out.println(strName+"签到成功");
} } }
public void qiantui()
{
System.out.println("请输入要签退的员工姓名");
Scanner sc = new Scanner(System.in);
String strName = sc.nextLine();
if(!lstEmps.contains(strName))
{
System.out.println("不存在该员工");
return;
}
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdfTime = new SimpleDateFormat("hh:mm:ss");
String strDate = sdf.format(date);
String strTime = sdfTime.format(date); if(!map.containsKey(strDate))//今天一个人也没签到
{
System.out.println("你没有签到,不能签退");
}
else
{
List<KaoqinRecord> lst = map.get(strDate);
boolean bIsFind = false;//假设没找到
for(KaoqinRecord kr : lst)
{
if(kr.getEmpName().equals(strName))
{
kr.setTimeEnd(strTime);
bIsFind = true;
break;
}
} if(!bIsFind)//真的没找到,也即意味着没签到
{
System.out.println("你没有签到,不能签退");
}
else
{
System.out.println(strName+"签退成功");
}
}
}
public void showKaoqinInfo()
{
System.out.println("请输入要查找的日期(yyyyMMdd)");
Scanner sc = new Scanner(System.in);
String strDate = sc.nextLine();
List<KaoqinRecord> lst = map.get(strDate);
for(KaoqinRecord kr : lst)
{
System.out.println(kr.getEmpName() + "签到时间为" + kr.getTimeStart()
+ "签退时间为" + kr.getTimeEnd());
}
} public List<String> getLstEmps() {
return lstEmps;
} public void setLstEmps(List<String> lstEmps) {
this.lstEmps = lstEmps;
} public Map<String, List<KaoqinRecord>> getMap() {
return map;
} public void setMap(Map<String, List<KaoqinRecord>> map) {
this.map = map;
}
}
考勤记录类
package com.company; import java.util.Date; /**
* Created by ttc on 2017/6/30.
*/
//某一个员工,某天的的考勤情况
public class KaoqinRecord {
private String empName;
private String timeStart;
private String timeEnd; public String getTimeStart() {
return timeStart;
} public void setTimeStart(String timeStart) {
this.timeStart = timeStart;
} public String getTimeEnd() {
return timeEnd;
} public void setTimeEnd(String timeEnd) {
this.timeEnd = timeEnd;
} public String getEmpName() {
return empName;
} public void setEmpName(String empName) {
this.empName = empName;
} }
主程序类:
package com.company; import java.util.Calendar;
import java.util.Scanner; public class Main { public static void main(String[] args) {
// write your code here
//
// 20170630---zhangsan 9:00 18:00,lisi 9:00 18:00,wangwu 10:00 21:00
// 20170629---zhangsan 9:00 18:00,lisi 9:00 ,wangwu 10:00 21:00
// Map<String,List<KaoqinRecord>>
//
// map.put("20170630",[{name:hanwei,startTime:8:00,endTime:00},xiuwei]) Company company = new Company(); company.getLstEmps().add("马云");
company.getLstEmps().add("李连杰");
company.getLstEmps().add("赵本山"); Scanner sc = new Scanner(System.in);
int cmd = -1;
Calendar calendar = Calendar.getInstance();
String str = calendar.toString();
do
{
System.out.println("员工考勤系统");
System.out.println("0------exit");
System.out.println("1------签到");
System.out.println("2------签退");
System.out.println("3------显示考勤信息"); cmd = sc.nextInt();
switch (cmd)
{
case 1: {
company.qiandao();
break;
}
case 2: {
company.qiantui();
break;
}
case 3: {
company.showKaoqinInfo();
break;
}
default:
{
break;
}
} }while (cmd != 0); return;
}
}
一道综合练习题实践list及dictionary集合类的更多相关文章
- 一道C++练习题,替换一个字符串里所有实例
做了一道C++练习题,替换一个字符串里面的所有实例. #include <iostream> #include <string> using namespace std; co ...
- CSS3背景 制作导航菜单综合练习题
CSS3背景 制作导航菜单综合练习题 小伙伴们,根据所学知识,使用CSS3实现下图的导航菜单效果 任务 1.制作导航圆角 提示:使用border-radius实现圆角 2.制作导航立体风格 提示:使用 ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- 一道综合渗透题引发的updatexml()注入思考
MYSQL数据库updatexml报错注入UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式, ...
- 一道Python练习题
有关字符串与编码的,转自廖雪峰Python教程. 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位: # -*- co ...
- python全栈开发笔记---数据类型--综合练习题
一.有两个列表 l1 = [11,22,33] l2 = [22,33,44] a. 获取内容相同的元素列表 for item in l1: if item in l2: print(it ...
- ADO.Net 综合练习题
题目: 第一部分: 新建一个数据库:ADO测试,包含下面两个数据表,使用代码创建,并保留创建的代码文本. 专业表Subject: 专业编号(SubjectCode):nvarchar类型,不能为空,主 ...
- 第2章 Python基础-字符编码&数据类型 综合 练习题
1.转换 将字符串s = "alex"转换成列表 s = "alex" s_list = list(s) print(s_list) 将字符串s = " ...
- if else 选择机构 _多重if选择机构_if选择结构嵌套(综合练习题——code)
import java.util.*; class If01{ public static void main(String[ ]args){ //练习1:假如张三参加Java考试,判断如果在95分以 ...
随机推荐
- POJ1182 食物链---(经典种类并查集)
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- 【UVALive4685-Succession】树形DP
http://acm.hust.edu.cn/vjudge/problem/14338 题意:给定一棵树,每个点有一个值,让你选择k个点,并且这k个点是连在一起的(从任意一个点出发,可以遍历完所有选择 ...
- [BZOJ1982][POJ1740][Spoj 2021]Moving Pebbles|解题报告
这道题的题意BZ和POJ上的都不大清楚... 大概就是给出n堆石子,以及初始每堆石子的个数 两个玩家交替操作,每个操作可以任意在一堆中取任意多的石子 然后再从这堆里拿若干个石子放到某个当前还存在的堆里 ...
- Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节 ...
- python常用模块补充hashlib configparser logging,subprocess模块
一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
- System and method for parallel execution of memory transactions using multiple memory models, including SSO, TSO, PSO and RMO
A data processor supports the use of multiple memory models by computer programs. At a device extern ...
- Bash Shell 下打开一个TCP / UDP SOCKET
Bash Shell 下打开一个TCP / UDP SOCKET http://jingyan.baidu.com/article/636f38bb6166c3d6b84610d1.html
- GUI自动化模块化实现方式
效率为王:脚本与数据的解耦 + Page Object模型 1.数据驱动:实现了“测试脚本和数据的解耦”,数据驱动测试的数据文件中不仅可以包含测试输入数据,还可以包含测试验证结果数据,甚至可以包含测试 ...
- StringUtils工具类的使用
注意isNotEmpty()和isNotBlank()的区别 过去的字符串判空:if("".equals(str) || str == null).现在使用工具类StringUti ...
- 在一个ros包下怎么使用另外一个自定义ros包里的message
假设自定义消息包my_message_package https://answers.ros.org/question/206257/catkin-use-ros-message-from-anoth ...