基于C++的企业考勤管理系统的设计代码
- 格式:docx
- 大小:8.78 KB
- 文档页数:5
题目12 “公司员工考勤管理系统设计”1、问题描述某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。
其中,雇员分为经理、技术人员、销售人员和销售经理。
定义一个将小时换成天数的类。
转换规则:8小时转换为一天,12小时转换为1.5天。
可进行天数的加、减。
定义一个记录员工生病、休假时间的类。
其中包括:员工生病没工作的天数、生病可以不工作的最多天数、员工已经带薪休假的天数、员工可以带薪休假的天数。
公司规定带薪休假不能超过24小时。
生病可以不工作的最多不能超过16小时。
设计一程序能够对公司人员的休假情况进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
2、功能要求(1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
还可以添加带薪休假和生病休假的记录,每条记录中必须包含员工编号和姓名。
(2)查询功能:可根据编号、姓名等信息对已添加的员工信息和休假信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的人员记录和休假记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行人员的统计。
例如,统计四类人员数量以及总数,统计任一员工的休假天数等信息。
(7)保存功能:可将当前系统中各类人员记录和休假记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
3、问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;(8)完成系统总结报告。
c 考勤管理系统课程设计一、课程目标知识目标:1. 学生理解考勤管理系统的基本概念,掌握其功能模块和工作流程。
2. 学生掌握使用编程语言(如Python)设计并实现一个简单的考勤管理系统。
3. 学生了解数据库管理的基本原理,能够运用到考勤管理系统中进行数据存储和查询。
技能目标:1. 学生能够运用所学知识,独立设计并编写出具备基本功能的考勤管理系统。
2. 学生通过项目实践,提高问题分析、程序设计和调试的能力。
3. 学生学会使用数据库技术进行数据管理,提高数据处理和分析的能力。
情感态度价值观目标:1. 学生培养对计算机编程和数据库管理的兴趣,激发学习积极性。
2. 学生通过团队协作完成项目,培养沟通、协作和团队精神。
3. 学生认识到考勤管理系统在实际应用中的重要性,增强实践操作和创新能力。
课程性质:本课程为信息技术课程,以项目实践为主,结合理论教学。
学生特点:学生为初中年级,具备一定的计算机操作基础,对编程和数据库有一定了解。
教学要求:教师需引导学生运用所学知识,以项目为导向,注重实践操作和团队协作。
在教学过程中,关注学生的个体差异,提高学生的编程能力和数据处理能力。
通过课程学习,使学生能够将所学知识应用于实际问题的解决中。
二、教学内容1. 考勤管理系统的基本概念与功能模块介绍:包括考勤系统的定义、作用、常见功能模块划分及工作流程。
教材章节:第三章第二节《数据库应用系统概述》2. 编程语言基础:运用Python语言进行考勤管理系统的设计与实现,涵盖变量、条件语句、循环语句等基本语法。
教材章节:第二章《Python编程基础》3. 数据库管理:介绍数据库的基本原理,以MySQL为例,进行数据存储、查询和管理操作。
教材章节:第四章《数据库基础与应用》4. 考勤管理系统设计与实现:结合实际需求,引导学生进行系统设计,编写代码实现考勤管理功能。
教材章节:第五章《数据库应用系统设计》5. 项目实践:分组进行考勤管理系统项目实践,包括需求分析、系统设计、编码实现、测试与优化等环节。
c语言课程设计考勤系统一、课程目标知识目标:1. 理解C语言的基本语法,掌握数据类型、运算符、控制结构等基础知识;2. 学会使用数组、函数和指针等C语言特性进行编程;3. 了解文件操作的基本方法,实现数据存储与读取;4. 掌握面向过程编程思想,能够运用所学知识设计简单的考勤系统。
技能目标:1. 能够运用所学C语言知识,编写出结构清晰、逻辑性强的程序代码;2. 熟练使用编程工具(如Visual Studio、Code::Blocks等)进行代码编写、调试与运行;3. 学会分析问题,将实际问题转化为程序设计的解决方案;4. 提高团队协作能力,通过分组讨论、分工合作完成考勤系统的设计与实现。
情感态度价值观目标:1. 培养学生对待编程的兴趣和热情,激发学生主动探索、创新的精神;2. 培养学生的逻辑思维能力,提高分析问题和解决问题的能力;3. 增强学生的自信心,使其在完成考勤系统设计的过程中获得成就感;4. 培养学生的团队协作精神,学会与他人共同解决问题,提高沟通能力。
课程性质:本课程为C语言编程实践课,结合实际应用场景,培养学生的编程能力和实际操作能力。
学生特点:学生具备一定的C语言基础,对编程有一定兴趣,但实践经验不足。
教学要求:教师应注重理论与实践相结合,引导学生积极思考,鼓励学生动手实践,关注个体差异,因材施教。
通过课程学习,使学生在掌握C语言基础知识的同时,具备实际编程能力。
二、教学内容1. C语言基础知识回顾:数据类型、变量、常量、运算符、表达式、输入输出函数等;教材章节:第一章至第三章。
2. 控制结构:顺序结构、选择结构、循环结构;教材章节:第四章。
3. 函数与数组:函数的定义与调用、数组的定义与使用;教材章节:第五章、第六章。
4. 指针:指针的概念、指针与数组、指针与函数;教材章节:第七章。
5. 文件操作:文件打开与关闭、文件的读写操作;教材章节:第八章。
6. 考勤系统设计与实现:需求分析、功能设计、模块划分、编码实现;教材章节:综合应用。
package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class AttendFrame extends JFrame//工作制类型{public AttendFrame(){this.setTitle("工作制类型");this.setVisible(true);this.setContentPane(new JPanel());this.setSize(300,200);create();}private void create(){JButton b1,b2,b3;Box box1,box2,box;b1=new JButton("非弹性工作制");b2=new JButton("弹性工作制");b3=new JButton("返回");box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box=Box.createVerticalBox();box1.add(b1);box1.add(Box.createHorizontalStrut(20));box1.add(b2);box2.add(b3);box.add(box1);box.add(Box.createVerticalStrut(30));box.add(box2);this.add(box);b1.addActionListener(new ActionListener() // {@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根UBoundFrame frame=new UBoundFrame();dispose();}});b2.addActionListener(new ActionListener() //{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根BoundFrame frame=new BoundFrame();dispose();}});b3.addActionListener(new ActionListener() //{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根MFrame frame=new MFrame();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class BoundFrame extends JFrame{public BoundFrame(){this.setTitle("弹性工作制");this.setVisible(true);this.setContentPane(new JPanel());this.setSize(400,400);create();}JLabel k1,k2,k3,k4,k5,k6;JTextField f1,f2,f3,f4,f5,f6;Box box1,box2,box3,box4,box5,box;JButton b1;private void create(){k1=new JLabel("工号:");k2=new JLabel("姓名:");k3=new JLabel("当月工时:");k4=new JLabel(":");k5=new JLabel("当月工作天数");k6=new JLabel("当月富余:");b1=new JButton("返回");f1=new JTextField(5);f2=new JTextField(5);f3=new JTextField(5);f4=new JTextField(5);f5=new JTextField(5);f6=new JTextField(5);box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box3=Box.createHorizontalBox();box4=Box.createHorizontalBox();box5=Box.createHorizontalBox();box=Box.createVerticalBox();box1.add(k1);box1.add(f1);box1.add(Box.createHorizontalStrut(20));box1.add(k2);box1.add(f2);box2.add(k3);box2.add(f3);box2.add(k4);box2.add(f4);box3.add(k5);box3.add(f5);box4.add(k6);box4.add(f6);box5.add(b1);box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(20));box.add(box3);box.add(Box.createVerticalStrut(20));box.add(box4);box.add(Box.createVerticalStrut(20));box.add(box5);this.add(box);b1.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根AttendFrame frame=new AttendFrame();dispose();}});}}package kaoqin;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class ConnectionDB {private String JDriver="sun.jdbc.odbc.JdbcOdbcDriver";private String sqlURL="jdbc:odbc:bobo";//private String JDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//private String sqlURL="jdbc:sqlserver://localhost:1433;DatabaseName=MyTest;integratedSecurity=TRUE;";private Connection connection;private Statement statement;private static Connection conn = null;private String[] tableSQL=new String[4];public ConnectionDB(){try {Class.forName(JDriver);connection=DriverManager.getConnection(sqlURL);statement=connection.createStatement();} catch (ClassNotFoundException e) {e.printStackTrace();}catch (SQLException e) {e.printStackTrace();}}public Connection getConnection(){return connection;}public Statement getStatement(){return statement;}public void breakDB(){try {statement.close();connection.close();} catch (SQLException e) {e.printStackTrace();}}public void createTable(){tableSQL[0]="create table staff_info("+"Sno char(9) primary key,"+"Sname char(10) not null,"+"Sage smallint,"+"enter_time char(10) not null,"+"position char(10) not null,"+"sex char(1),"+"password char(6));";tableSQL[1]="create table pz_info("+"arrive_hour char(2),"+"arrive_minute char(2),"+"leave_hour char(2),"+"leave_minute char(2),"+"everyday_time char(2));";tableSQL[2]="create table everymonth_statistics("+"Sno char(9) not null,"+"Sname char(10) not null,"+"remain_time char(4),"+"late_times smallint,"+"early_leave smallint,"+"work_day smallint,"+"primary key(Sno),"+"foreign key(Sno)"+"references staff_info(Sno) on delete cascade);";tableSQL[3]="create table everyday_statistics("+"Sno char(9) not null,"+"Sname char(10) not null,"+"hour char(2),"+"minute char(2),"+"action char(6),"+"time char(4),"+"primary key(Sno),"+"foreign key(Sno)"+"references staff_info(Sno) on delete cascade);";try {for(int i=0;i<4;i++)statement.executeUpdate(tableSQL[i]);} catch (SQLException e) {e.printStackTrace();}private static ResultSet executeQuery(String sql) {try {if(conn==null)new ConnectionDB();returnconn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDA TABL E).executeQuery(sql);} catch (SQLException e) {e.printStackTrace();return null;} finally {}}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class Equ_Frame extends JFrame //配置信息{public Equ_Frame(){this.setTitle("配置信息");this.setSize(400,400);this.setContentPane(new JPanel());this.setVisible(true);this.create();}JLabel k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;JLabel f1,f2,f3,f4,f5,f6,f7,f8,f9,f10;Box box1,box2,box3,box4,box5,box6,box7,box;JButton b1,b2;private void create()k1=new JLabel("上班时间:");k2=new JLabel(":");k3=new JLabel("下班时间:");k4=new JLabel(":");k5=new JLabel("每月工作总时间:"); k6=new JLabel("每月工作天数:"); k7=new JLabel("每月工作日期:"); k8=new JLabel("~");k9=new JLabel("每月放假日期:"); k10=new JLabel("~");b1=new JButton("修改");b2=new JButton("返回");f1=new JLabel("08");f2=new JLabel("30");f3=new JLabel("17");f4=new JLabel("30");f5=new JLabel("200");f6=new JLabel("22");f7=new JLabel("星期一");f8=new JLabel("星期五");f9=new JLabel("星期六");f10=new JLabel("星期日");box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box3=Box.createHorizontalBox();box4=Box.createHorizontalBox();box5=Box.createHorizontalBox();box6=Box.createHorizontalBox();box7=Box.createHorizontalBox();box=Box.createVerticalBox();box1.add(k1);box1.add(f1);box1.add(k2);box1.add(f2);box2.add(k3);box2.add(f3);box2.add(k4);box2.add(f4);box3.add(k5);box3.add(f5);box4.add(k6);box4.add(f6);box5.add(k7);box5.add(f7);box5.add(k8);box5.add(f8);box6.add(k9);box6.add(f9);box6.add(k10);box6.add(f10);box7.add(b1);box7.add(Box.createHorizontalStrut(20));box7.add(b2);box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(20));box.add(box3);box.add(Box.createVerticalStrut(20));box.add(box4);box.add(Box.createVerticalStrut(20));box.add(box5);box.add(Box.createVerticalStrut(20));box.add(box6);box.add(Box.createVerticalStrut(20));box.add(box7);this.add(box);b1.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根EquAltFrame frame=new EquAltFrame();dispose();}});b2.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根MFrame frame=new MFrame();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class EquAltFrame extends JFrame //修改配置信息{public EquAltFrame(){this.setTitle("修改配置信息");this.setSize(400,400);this.setContentPane(new JPanel());this.setVisible(true);this.create();}JLabel k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;JTextField f1,f2,f3,f4,f5,f6,f7,f8,f9,f10;Box box1,box2,box3,box4,box5,box6,box7,box;JButton b1,b2;private void create(){k1=new JLabel("上班时间:");k2=new JLabel(":");k3=new JLabel("下班时间:");k4=new JLabel(":");k5=new JLabel("每月工作总时间:"); k6=new JLabel("每月工作天数:"); k7=new JLabel("每月工作日期:"); k8=new JLabel("~");k9=new JLabel("每月放假日期:"); k10=new JLabel("~");b1=new JButton("保存");b2=new JButton("取消");f1=new JTextField(5);f2=new JTextField(5);f3=new JTextField(5);f4=new JTextField(5);f5=new JTextField(5);f6=new JTextField(5);f7=new JTextField(5);f8=new JTextField(5);f9=new JTextField(5);f10=new JTextField(5);box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box3=Box.createHorizontalBox();box4=Box.createHorizontalBox();box5=Box.createHorizontalBox();box6=Box.createHorizontalBox();box7=Box.createHorizontalBox();box=Box.createVerticalBox();box1.add(k1);box1.add(f1);box1.add(k2);box1.add(f2);box2.add(k3);box2.add(f3);box2.add(k4);box2.add(f4);box3.add(k5);box3.add(f5);box4.add(k6);box4.add(f6);box5.add(k7);box5.add(f7);box5.add(k8);box5.add(f8);box6.add(k9);box6.add(f9);box6.add(k10);box6.add(f10);box7.add(b1);box7.add(Box.createHorizontalStrut(20));box7.add(b2);box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(20));box.add(box3);box.add(Box.createVerticalStrut(20));box.add(box4);box.add(Box.createVerticalStrut(20));box.add(box5);box.add(Box.createVerticalStrut(20));box.add(box6);box.add(Box.createVerticalStrut(20));box.add(box7);this.add(box);b1.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根Equ_Frame in=new Equ_Frame();EquAltFrame on=new EquAltFrame();in.f1.setText(on.f1.getText());in.f2.setText(on.f2.getText());in.f3.setText(on.f3.getText());in.f4.setText(on.f4.getText());in.f5.setText(on.f5.getText());in.f6.setText(on.f6.getText());in.f7.setText(on.f7.getText());in.f8.setText(on.f8.getText());in.f9.setText(on.f9.getText());in.f10.setText(on.f10.getText());}});b2.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根Equ_Frame frame=new Equ_Frame();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class login extends JFrame //管理员登陆界面{public login(){this.setTitle("管理员登陆界面");this.setSize(300,300);this.setContentPane(new JPanel());this.setVisible(true);init();}JTextField jTextField1;JPasswordField jPasswordField1;private void init(){JLabel jLabel1=new JLabel("管理员登陆");JLabel jLabel2=new JLabel("用户名");JLabel jLabel3=new JLabel("密码");jTextField1=new JTextField(10);jPasswordField1=new JPasswordField(10);JButton button1=new JButton("确定");JButton button2=new JButton("取消");JButton button3=new JButton("修改密码");Box box,box1,box2,box3,box4,box5;box1=Box.createHorizontalBox();box1.add(jLabel1);box1.add(Box.createHorizontalStrut(10));box2=Box.createHorizontalBox();box2.add(jLabel2);box2.add(Box.createHorizontalStrut(20));box2.add(jTextField1);box3=Box.createHorizontalBox();box3.add(jLabel3);box3.add(Box.createHorizontalStrut(20));box3.add(jPasswordField1);box4=Box.createHorizontalBox();box4.add(button1);box4.add(Box.createHorizontalStrut(20));box4.add(button2);box5=Box.createHorizontalBox();box5.add(button3);box=Box.createVerticalBox();box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(20));box.add(box3);box.add(Box.createVerticalStrut(20));box.add(box4);box.add(Box.createVerticalStrut(20));box.add(box5);this.add(box);button1.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根// login im=new login();String name=jTextField1.getText(),password=jPasswordField1.getText();if(name.equals("admin")&&password.equals("123456")){MFrame mi=new MFrame();dispose();}else{JOptionPane.showMessageDialog(new JFrame("WARNING"), "用户名或密码错误");}}});button2.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根Main_login frame=new Main_login();dispose();}});button3.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根MPwd f1=new MPwd();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class login1 extends JFrame //普通用户登陆界面{public login1(){this.setTitle("普通用户登陆界面");this.setSize(300,300);this.setContentPane(new JPanel());this.setVisible(true);init();}JTextField jTextField1;JPasswordField jPasswordField1;private void init(){JLabel jLabel1=new JLabel("员工登陆");JLabel jLabel2=new JLabel("用户名");JLabel jLabel3=new JLabel("密码");jTextField1=new JTextField(10);jPasswordField1=new JPasswordField(10);JButton button1=new JButton("确定");JButton button2=new JButton("取消");JButton button3=new JButton("修改密码");Box box,box1,box2,box3,box4,box5;box1=Box.createHorizontalBox();box1.add(jLabel1);box1.add(Box.createHorizontalStrut(10));box2=Box.createHorizontalBox();box2.add(jLabel2);box2.add(Box.createHorizontalStrut(20));box2.add(jTextField1);box3=Box.createHorizontalBox();box3.add(jLabel3);box3.add(Box.createHorizontalStrut(20));box3.add(jPasswordField1);box4=Box.createHorizontalBox();box4.add(button1);box4.add(Box.createHorizontalStrut(20));box4.add(button2);box5=Box.createHorizontalBox();box5.add(button3);box=Box.createVerticalBox();box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(20));box.add(box3);box.add(Box.createVerticalStrut(20));box.add(box4);box.add(Box.createVerticalStrut(20));box.add(box5);this.add(box);button1.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根String name=jTextField1.getText(),password=jPasswordField1.getText();if(name.equals("user")&&password.equals("123456")){WoSerFrame2 mi=new WoSerFrame2();dispose();}else{JOptionPane.showMessageDialog(new JFrame("WARNING"), "用户名或密码错误");}}});button2.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根Main_login frame=new Main_login();dispose();}});button3.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根MPwd f1=new MPwd();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.sql.*;public class Main_login extends JFrame implements ActionListener {public Main_login(){super("选择用户类型");this.setSize(300,300);this.setContentPane(new JPanel());create();}private void create(){JButton b1,b2,b3;Box box1,box2,box3,box;b1=new JButton("系统管理员");b2=new JButton("普通用户");b3=new JButton("退出登陆");b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box3=Box.createHorizontalBox();box1.add(b1);box2.add(b2);box3.add(b3);box=Box.createVerticalBox();box.add(box1);box.add(Box.createVerticalStrut(20));box.add(box2);box.add(Box.createVerticalStrut(40));box.add(box3);this.add(box);}public void actionPerformed(ActionEvent e){if(e.getActionCommand()=="系统管理员"){login frame=new login();dispose();}else if(e.getActionCommand()=="普通用户"){login1 frame=new login1();dispose();}else if(e.getActionCommand()=="退出登陆"){System.exit(0);}}public static void main(String args[]){//ConnectionDB myDB=new ConnectionDB();int flag=0; //判断是否创建过数据库的标志File file=new File("SQL.txt");try {//读入标志FileReader in=new FileReader(file);int len;if((len=in.read())!=-1)flag=1; //已创建了数据库,置1in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//没有创建过数据库if(flag==0){ConnectionDB myDB=new ConnectionDB();myDB.createTable();myDB.breakDB();try {//写入标志FileWriter out=new FileWriter(file);out.write("1");out.close();} catch (IOException e) {e.printStackTrace();}}Main_login frame1=new Main_login();frame1.setVisible(true);}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class MFrame extends JFrame //主功能界面{public MFrame(){this.setTitle("主要功能");this.setContentPane(new JPanel());this.setSize(350,200);this.setVisible(true);init();}private void init(){JButton button1=new JButton("员工信息管理");JButton button2=new JButton("员工出勤信息");JButton button3=new JButton("配置信息");JButton button4=new JButton("退出登陆");Box box1=Box.createHorizontalBox();Box box2=Box.createHorizontalBox();Box box3=Box.createVerticalBox();box1.add(button1);box1.add(Box.createHorizontalStrut(10));box1.add(button2);box1.add(Box.createHorizontalStrut(10));box1.add(button3);box2.add(button4);box3.add(box1);box3.add(Box.createVerticalStrut(30));box3.add(box2);this.add(box3);button1.addActionListener(new ActionListener() // {@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根Worker_Frame frame=new Worker_Frame();dispose();}});button2.addActionListener(new ActionListener() // {@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根AttendFrame frame=new AttendFrame();dispose();}});button3.addActionListener(new ActionListener() //{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根Equ_Frame frame=new Equ_Frame();dispose();}});button4.addActionListener(new ActionListener() //{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根Main_login frame=new Main_login();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class MPwd extends JFrame //管理员密码修改{public MPwd(){this.setTitle("修改密码");this.setVisible(true);this.setSize(300,200);this.setContentPane(new JPanel());init();}JLabel L1,L2,L3;JPasswordField p1,p2,p3;JButton b1,b2;Box box1,box2,box3,box4,box;private void init(){L1=new JLabel("请输入原密码:");L2=new JLabel("请输入新密码:");L3=new JLabel("请再次输入密码:");p1=new JPasswordField(10);p2=new JPasswordField(10);p3=new JPasswordField(10);b1=new JButton("确定");b2=new JButton("取消");box1=Box.createHorizontalBox();box1.add(L1);box1.add(Box.createHorizontalStrut(20));box1.add(p1);box2=Box.createHorizontalBox();box2.add(L2);box2.add(Box.createHorizontalStrut(20));box2.add(p2);box3=Box.createHorizontalBox();box3.add(L3);box3.add(Box.createHorizontalStrut(20));box3.add(p3);box4=Box.createHorizontalBox();box4.add(b1);box4.add(Box.createHorizontalStrut(20));box4.add(b2);box=Box.createVerticalBox();box.add(box1);box.add(Box.createVerticalStrut(10));box.add(box2);box.add(Box.createVerticalStrut(10));box.add(box3);box.add(Box.createVerticalStrut(10));box.add(box4);this.add(box1);this.add(box2);this.add(box3);this.add(box4);this.add(box);b1.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法if(p1.getText().equals("123456")){if(p2.getText().equals(p3.getText())){JOptionPane.showMessageDialog(new JFrame("WARNING"), "密码修改成功");login frame=new login();dispose();}else{JOptionPane.showMessageDialog(newJFrame("WARNING"), "两次密码输入不一致,请重新输入");}}else{JOptionPane.showMessageDialog(new JFrame("WARNING"), "原密码输入不正确,请重新输入");}}});b2.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根Main_login frame=new Main_login();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class OperatSFrame extends JFrame //提示类{private JLabel displayLabel;private static Font font=new Font("楷体",Font.BOLD,14);public OperatSFrame(){this.setSize(300,100);this.setLayout(null);this.setResizable(false);this.setVisible(true);this.addCompnents();}private void addCompnents(){displayLabel=new JLabel("操作成功!");displayLabel.setFont(font);displayLabel.setBounds(80,30,100,30);this.add(displayLabel);}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class UBoundFrame extends JFrame//非弹性工作制{public UBoundFrame(){this.setTitle("非弹性工作制");this.setVisible(true);this.setContentPane(new JPanel());this.setSize(400,400);create();}JLabel k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;JTextField f1,f2,f3,f4,f5,f6,f7,f8,f9,f10;Box box1,box2,box3,box4,box5,box6,box7,box;JButton b1;private void create(){k1=new JLabel("工号:");k2=new JLabel("姓名:");k3=new JLabel("进入时间:");k4=new JLabel(":");k5=new JLabel("离开时间:");k6=new JLabel(":");k7=new JLabel("工作时间:");k8=new JLabel(":");k9=new JLabel("早退次数:");k10=new JLabel("迟到次数:");b1=new JButton("返回");f1=new JTextField(5);f2=new JTextField(5);f3=new JTextField(5);f4=new JTextField(5);f5=new JTextField(5);f6=new JTextField(5);f7=new JTextField(5);f8=new JTextField(5);f9=new JTextField(5);f10=new JTextField(5);box1=Box.createHorizontalBox();box2=Box.createHorizontalBox();box3=Box.createHorizontalBox();box4=Box.createHorizontalBox();box5=Box.createHorizontalBox();box6=Box.createHorizontalBox();box7=Box.createHorizontalBox();box=Box.createVerticalBox();box1.add(k1);box1.add(f1);box1.add(Box.createHorizontalStrut(20)); box1.add(k2);box1.add(f2);box2.add(k3);box2.add(f3);box2.add(k4);box2.add(f4);box3.add(k5);box3.add(f5);box3.add(k6);box3.add(f6);box4.add(k7);box4.add(f7);box4.add(k8);box4.add(f8);box5.add(k9);box5.add(f9);box6.add(k10);box6.add(f10);box7.add(b1);box.add(box1);box.add(Box.createVerticalStrut(20)); box.add(box2);box.add(Box.createVerticalStrut(20));box.add(box3);box.add(Box.createVerticalStrut(20));box.add(box4);box.add(Box.createVerticalStrut(20));box.add(box5);box.add(Box.createVerticalStrut(20));box.add(box6);box.add(Box.createVerticalStrut(20));box.add(box7);this.add(box);b1.addActionListener(new ActionListener() //确定{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根AttendFrame frame=new AttendFrame();dispose();}});}}package kaoqin;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.sql.*;class WoAddFrame extends JFrame//添加员工{private ConnectionDB myCon=new ConnectionDB();private JButton YesBtn,NoBtn;private static JTextField woName,woNo,woAge,woYear,woPosition,woSex,woPassword;private JLabel woNameLabel,woNoLabel,woAgeLabel,woYearLabel,woPositionLabel,woSexLabel,woPassword Label;//提示区private static Font font=new Font("楷体",Font.BOLD,14);。
{#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<malloc.h> #include<time.h> /* 所使用的头文件 */ typedef struct/* 时间结构体定义 */{int hour; int minute; }TIME;typedef struct worker /* 职工结构体定义 */ {char id[10]; char name[10];TIME time[20]; struct worker *next; }worker;int menu_select(); void welcome(); void createInfo(); void createRec(); void listRec(); void searchRec(); void saveRec(); void deleteRec(); void modifyRec(); void loadRec(); void resetPassword(); int fun();worker *head=NULL; writeinfo_flag=0;char password[16]="888888"; struct tm *timeinfo; int main()/* 主菜单 *//* 欢迎界面 */ /* 新建职工信息 */ /* 录入考勤信息 *//* 浏览当天考勤信息 */ /*/ 查询考勤信息 *//* 保存所有信息 *//* 删除考勤信息 */ /* 修改考勤信息 *//* 加载文件信息 *//* 重设密码 *//* 判断输入选择是否正确 *//* 链表头指针 head*//* 信息保存标记 *//* 初始密码 *//* 主函数 */char s[16]; welcome();loadRec();/* 欢迎界面 */ /* 加载文件信息 */printf("\n 提示:\n\n 初始密码为:888888\n"); /* 进入系统密码管理*/ printf("\t\t\t\n\n\n\n\n 请输入密码,进去系统( 密码不超过15 个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n 密码错误,请重新输入:"); scanf("%s",s);} system("cls");for(;;) /* 菜单循环*/{ switch(menu_select()) {case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");listRec();break;case 3:system("cls");searchRec();break;case 4:system("cls");deleteRec();break;case 5:system("cls");modifyRec();break;case 6:system("cls");saveRec();break;case 7:system("cls");resetPassword();break;case 8:system("cls");if(writeinfo_flag==1)saveRec();return 0; default:{printf("\n 选择错误,请按回车键返回后,重新输入(0~8)!"); getchar();getchar();system("cls"); break;}}}return 0;}/* 选择菜单*/ int menu_select(){worker *p=head;int c,k;time_t nowtime; time( &nowtime );timeinfo = localtime( &nowtime );printf("\t\t** ************ 选择菜单************* *\t");/* 在菜单中显示当前时间*/if(timeinfo->tm_wday==0){printf(" 时间:星期天");printf(" %d:%d",timeinfo->tm_hour,timeinfo->tm_min);}elseprintf(" 时间: 星期%d %d:%d",timeinfo->tm_wday,timeinfo->tm_hour,timeinfo->tm_min);printf("\n ------------------------------------------------------------------ ");printf("\t\t\t0. 新建职工信息\n");printf("\t\t1. 录入考勤信息\n");printf("\t\t2. 浏览考勤信息\n");printf("\t\t3. 查询考勤信息\n");printf("\t\t4. 删除考勤信息\n");printf("\t\t5. 修改考勤信息\n");printf("\t\t6. 保存所有信息\n");printf("\t\t7. 重设密码\n");printf("\t\t8. 退出(退出后信息会自动保存在磁盘中)\n\t\t( 任何情况下按Ctrl+C 退出程序)\n ”);printf("\n ------------------------------------------------------------------ ");printf("\n\n 请输入您的选择(0~8):");scanf("%d",&c); if(timeinfo->tm_wday==0&&p!=NULL) /* 每周周日所有考勤信息初始化*/{for(k=0;k<20;k++){p->time[k].hour=88; p->time[k].minute=88;}}return c;}void loadRec() /* 从磁盘导入信息*/{worker *rear,*p,*pre; FILE *fp,*key; int i,pos=0; key=fopen("key.txt","r"); if(key!=NULL){}fscanf(key,"%s",password); fclose(key);p=(worker*)malloc(sizeof(worker)); /* 开辟一个新单元 */ fscanf(fp,"%s%s",p->id,p->name); for(i=0;i<20;i++)fscanf(fp,"%d%d",&p->time[i].hour,&p->time[i].minute); if(head==NULL){head=p; pre=p; rear=p;}else{rear->next=p; pre=rear; rear=p;}}pre->next=NULL; fclose(fp); return;}fp=fopen("workerRec.txt","r"); if(fp!=NULL){fseek(fp, 0, SEEK_END); pos= ftell(fp);}if(fp==NULL||0 == pos)件*/{printf("\n\n\n\n\n\n\t\t 提示:在!\n");printf("\n\t\t getchar();\n\n\t\t 数据库中没有职工信息请按回车键进入主菜单新建职工信息/* 指针移到文件末尾 *//* 打开职工信息文件和密码文,文本为空或文件不存system("cls"); return;}fseek(fp, 0, SEEK_SET); while(!feof(fp)){Un");/*清屏 *//* 指针移到文件开头 */ /*fp 不指向文件末尾 *//* 关闭文件 */void createInfo() /* 新建职工信息*/{worker *p,*rear;int i,k,n;char s[10];if(head!=NULL){printf("\n\n\n\n\n\n\n\t\t\t 职工信息数据库已存在\n\n\t\t\t 新建职工信息将续接在信息库的后面\n\n\n\t\t\t 按回车键继续");getchar();getchar();rear=head; while(rear->next!=NULL) rear=rear->next;system("cls");}printf("\n\n 请输入希望建立职工信息条数:");scanf("%s",s);if(fun(s)==0)return;elsen=atoi(s);printf("\n 请输入职工的工号(至多6 个字符)和姓名( 至多5 个字符):\n"); for(i=0;i<n;i++){p=(worker*)malloc(sizeof(worker));scanf("%s%s",p->id,p->name); if(strlen(p->id)>6||strlen(p->name)>5){printf("\n 职工工号或姓名输入长度不合法!\n\n 请按回车键返回主菜单\n",n);rear->next=NULL;free(p);getchar();getchar();system("cls");return;}for(k=0;k<20;k++) /* 时间初始化为88:88*/{p->time[k].hour=88;p->time[k].minute=88;}if(head==NULL){head=p;rear=p;}else{ rear->next=p; rear=p;}} p->next=NULL;printf("\n%d 条信息建立完毕!\n\n 请按回车键返回主菜单\n",n); getchar();getchar();system("cls");writeinfo_flag=1;return;}void createRec() /* 录入考勤信息*/{time_t nowtime;worker *p;char s[10],k[10],*g=k,ss[10];int c,m,week;time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday; if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;} if(timeinfo->tm_wday==6||timeinfo->tm_wday==0){printf("\n\n\n\n\t\t\t 今天不是工作日\n\n\t\t\t 无法录入考勤信息\n\n\t\t\t 请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 请选择录入考勤种类:\n\n\t\t\t1. 上午上班(8:00)\n\n\t\t\t2. 上午下班(11:30)\n\n\t\t\t3. 下午上班(14:00)\n\n\t\t\t4. 下午下班(17:30)\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsem=atoi(k);if(m<1||m>4){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");if(m==1&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timeinfo->tm_min>30))) {printf("\n\n\n\t\t\t 现在已经过了上午下班的时间(11:30)\n\n\t\t\t 无法录入上班的时间(8:00)信息\n\n\t\t\t 请按回车键返回主菜单");getchar();getchar();system("cls");return;}if(m==3&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))){printf("\n\n\n\t\t\t 现在已经过了下午下班的时间(17:30)\n\n\t\t\t 无法录入上班的时间(14:00)信息\n\n\t\t\t 请按回车键返回主菜单");getchar();getchar();system("cls");return;}/* 可通过工号或姓名;录入*/printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",ss); if(fun(ss)==0)return;elsec=atoi(ss);if(c<1||c>2){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return ;} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;} if((m==2||m==4)&&p->time[4*week+m-6].hour==88){printf("\n\n\n\n\t\t\t 该职工无上班记录,无法记录下班信息, 请先录入上班信息\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}p->time[4*week+m-5].hour=(timeinfo->tm_hour); /* 存储时间*/p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;} if((m==2||m==4)&&p->time[4*week+m-6].hour==88) {printf("\n\n\n\n\t\t\t 该职工无上班记录,无法记录下班信息, 请先录入上班信息\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;p->time[4*week+m-5].hour=(timeinfo->tm_hour); p->time[4*week+m-5].minute=(timeinfo->tm_min); break;}}system("cls");printf("\n\n\n\n\n\n\t\t\t 考勤成功! 请按回车键返回主菜单\n");getchar();getchar();writeinfo_flag=1;system("cls");return;}void listRec() /* 浏览当天的考勤信息*/{worker *p=head;int m,week;week=timeinfo->tm_wday;if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}if(timeinfo->tm_wday==6||timeinfo->tm_wday==0) {printf("\n\n\n\n\t\t\t 今天不是工作日,无考勤记录\n\n\t\t\t 无法浏览当天的考勤信息\n\n\t\t\t 请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n 职工今天整体出勤情况如下:\n\n");printf(" 职工号姓名上午上班上午下班下午上班下午下班\n"); while(p!=NULL){m=0;printf("\n%s %s",p->id,p->name);if((p->time[(week-1)*4].hour>8&&p->time[(week-1)*4].hour<25)||(p->time[(week-1)*4].hour==8&&p->time[(week-1)*4].minute>0))printf(" 迟到"); /* 上班时间之后来的都算迟到*/else if(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timein fo->tm_min>30)))printf(" 旷工"); /* 过了下班时间就是旷工*/else if(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour<11||(timeinfo->tm_hour==8&&timeinf o->tm_min==30)))printf(" 无记录"); /* 下班之前还没有来显示无记录*/else if(p->time[(week-1)*4].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+1].hour<11&&p->time[(week-1)*4].hour!=0)||(p->time[(week-1)*4+1].hour==11&&p->time[(week-1)*4+1].minute<30))printf(" 早退");else {printf(" ");m++;}if((p->time[(week-1)*4+2].hour>14&&p->time[(week-1)*4+2].hour<25)||(p->time[(week-1)*4+2].hour==14&&p->time[(week-1)*4+2].minute>0))printf(" 迟到");else if(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30)))printf(" 旷工");else if(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour<17||(timeinfo->tm_hour==17&&tim einfo->tm_min==30)))printf(" 无记录");else if(p->time[(week-1)*4+2].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+3].hour<17&&p->time[(week-1)*4+2].hour!=0)||(p->time[(week-1)*4+3].hour==17&&p->time[(week-1)*4+3].minute<30))printf(" 早退");else {printf(" ");m++;}if(m==4&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))) printf(" 全勤!");p=p->next;}printf("\n\n 显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void searchRec() /* 根据工号或姓名查找考勤信息*/{worker *p=head;int c,i;char s[10],k[10];if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){ printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始getchar();getchar();system("cls"); return ;!\n");} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}system("cls");printf(" 职工号姓名\n\n");printf(" %s %s",p->id,p->name);printf(" 周一");for(i=0;i<4;i++) {上午上班上午下班下午上班下午下班if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==4) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);printf("\n 周二"); for(i=4;i<8;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==8) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);}printf("\n 周三"); for(i=8;i<12;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==12) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);}printf("\n 周四"); for(i=12;i<16;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d ");",p->time[i].hour,p->time[i].minute);if(i==16)printf("\n\n");}printf("\n 周五");for(i=16;i<20;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute); if(i==20)printf("\n\n");}printf("\n\n\n\n\n\n\t\t\t 显示完毕,按回车键返回主菜单!"); getchar();getchar();system("cls");return;}void saveRec() /* 储存所有信息*/{worker *p=head;FILE *fp,*key;int i;if(writeinfo_flag==0){printf("\n\n\n\n\t\t\t 信息无改动,无需保存!\n\n\t\t\t 请按回车键返回主菜单\n");getchar();getchar();system("cls");return;}if(writeinfo_flag==1){ if((fp=fopen("workerRec.txt","w"))==NULL||(key=fopen("key.txt","w"))==NULL) {printf("\n\t\t\t 提示:\n\n\t\t\t 存储信息失败!\n"); printf("\n\t\t\t 请按回车键进入主菜单重新开始\n"); getchar();getchar();system("cls");return;} while(p!=NULL){fprintf(fp,"%s\n%s\n",p->id,p->name); for(i=0;i<20;i++)fprintf(fp,"%d\n%d\n",p->time[i].hour,p->time[i].minute); p=p->next;} fprintf(key,"%s",password);fclose(fp),fclose(key);writeinfo_flag=0; /* 消除改动标志*/ printf("\n\n\n\n\n\t\t\t 保存完毕,按回车键继续!");getchar();getchar();system("cls");return;}}void deleteRec() //删除考勤信息*/{worker *p,*pre=head;char s[16],k[10];int c; if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar(); system("cls"); return;}printf("\n\n\n\t\t\t 提示:\n\n\t\t\t 初始密码为:888888\n"); printf("\n\n\n\t\t\t 请输入密码(密码不超过15 个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n\n\t\t\t 密码错误!\n\n"); printf("\t\t\t 按回车键返回主菜单!"); getchar();getchar();system("cls");return;} printf("\n\n\n\t\t\t 密码输入成功!\n\n\t\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){ printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始getchar();getchar();system("cls"); return ;!\n");} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号:"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名:"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;} break;}} system("cls"); if(p==head) head=p->next;else{ for(;pre->next!=p;pre=pre->next); pre->next=p->next;}free(p);printf("\n\n\n\n\n\n\t\t\t 删除成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1; return;}void modifyRec() /* 修改考勤信息*/{worker *p,*pre=head; char s[16],k[10];int c; if(head==NULL){ printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar(); system("cls"); return;}printf("\n\n\n\t\t\t 提示:\n\n\t\t\t 初始密码为:888888\n"); printf("\n\n\n\t\t\t 请输入密码(密码不超过15 个字符):"); scanf("%s",s);if(strcmp(password,s)!=0){printf("n\n\n\t\t\t 密码错误!\n\n"); printf("\t\t\t 按回车键返回主菜单!"); getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 密码输入成功!\n\n\t\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t\t\t 请选择通过工号修改还是姓名修改:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\n\n\t\t 您的选择(以回车键结束):"); scanf("%s",k);if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;} system("cls"); switch(c) { case 1:{printf("\n\n\n\n\n\n\t\t\t 请输入工号:"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}break;} case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名:"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}break;}} system("cls");printf("\n\n\n\t\t\t 请选择要修改的内容:\n\n\t\t\t1. 工号\n\n\t\t\t2. 姓名\n\n\t\t\t3. 上午上班时间\n\n\t\t\t4. 上午下班时间\n\n\t\t\t5. 下午上班时间\n\n\t\t\t6. 下午下班时间");printf("\n\n\n\t\t 您的选择(以回车键结束):");scanf("%s",&k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>6) {printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return ;}system("cls");switch(c){case 1: printf("\n\n\n\t\t 请输入要修改的工号(至多10 个字符):"); scanf("%s",p->id);break; case 2: printf("\n\n\n\t\t 请输入要修改的姓名(至多10 个字符):"); scanf("%s",p->name);break; case 3: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4].hour,&p->time[(c-1)*4].minute);break;case 4: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+1].hour,&p->time[(c-1)*4+1].minute);break;case 5:printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+2].hour,&p->time[(c-1)*4+2].minute);break; case 6: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+3].hour,&p->time[(c-1)*4+3].minute);break;} printf("\n\n\n\t\t\t 修改成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1;return;}void resetPassword() /* 重设密码*/{char s[16];printf("\n\n\n\t\t 提示:\n\n\t\t 初始密码为:888888\n"); printf("\n\t\t 请输入密码(密码不超过15个字符):"); scanf("%s",s);if(strcmp(password,s)!=0){printf("\n\n\n\t\t 密码错误!\n\n"); printf("\n\n\n\t\t 按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\t\t 密码输入成功!\n\n\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t 请输入要修改的密码(密码不超过15 个字符):"); scanf("%s",s);strcpy(password,s);printf("\n\n\t 修改成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1;return;}void welcome() //欢迎界面{ printf("\n\n\n\n\n\n\n\t\t\t 欢迎使用职工考勤管理系统"); printf("\n\n\n\t\t\t 请按任意键进入系统,开始您的操作"); printf("\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t 作者:XXX");getch(); system("cls");return;}int fun(char *g){do{ if(*g<'0'||*g>'9') {printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return 0 ;}g++; }while(*g!=0); return 1;}。
考勤管理系统c语言课程设计报告课程设计报告:考勤管理系统一、引言随着企业规模的不断扩大,考勤管理成为企业日常管理中的重要环节。
为了提高考勤管理的效率和准确性,我们设计了一个基于C语言的考勤管理系统。
本系统能够实现员工考勤信息的录入、查询、修改和统计等功能,为企业提供了一个方便、快捷的考勤管理平台。
二、系统设计1. 系统功能设计本系统主要包括以下几个功能模块:(1)员工信息管理模块:用于添加、删除、修改和查询员工基本信息,包括姓名、部门、职位等。
(2)考勤信息管理模块:用于记录员工的考勤情况,包括上下班时间、请假记录等。
同时支持迟到、早退、旷工等异常情况的记录和处理。
(3)考勤统计模块:根据员工的考勤记录,自动计算员工的出勤率、迟到率、请假率等数据,并生成相应的统计报表。
(4)系统管理模块:用于设置系统的参数,如工作日、上班时间、节假日安排等;同时提供权限管理和日志查看功能,保证系统的安全性和稳定性。
2. 数据库设计本系统采用结构化查询语言(SQL)进行数据库设计,包括员工表、考勤表和统计表等。
其中,员工表存储员工的基本信息,如姓名、部门、职位等;考勤表存储员工的考勤记录,如上下班时间、请假记录等;统计表存储员工的出勤率、迟到率等统计数据。
通过合理的数据库设计,能够提高系统的数据处理能力和查询效率。
三、系统实现1. 员工信息管理模块实现在员工信息管理模块中,我们使用C语言中的结构体来表示员工信息,包括姓名、部门、职位等字段。
通过添加、删除、修改和查询等操作,实现对员工信息的维护和管理。
同时,为了方便用户操作,我们使用菜单驱动的方式实现交互界面,用户可以根据菜单提示进行相应的操作。
2. 考勤信息管理模块实现在考勤信息管理模块中,我们使用时间函数获取当前时间,并记录员工的上下班时间。
同时,根据员工的请假记录和异常情况处理规则,实现请假申请、异常情况处理等功能。
为了方便用户查询和管理考勤信息,我们设计了友好的界面和查询功能,用户可以根据姓名、部门等条件进行考勤记录的查询和筛选。
C语⾔实现考勤管理系统这些天因为补修c语⾔课设,在花费了⼀段时间后写完了这个课设,课设的要求如下:考勤信息记录了学⽣的缺课情况,它包括:缺课⽇期、第⼏节课、课程名称、学⽣姓名、缺课类型(迟到、早退、请假及旷课)。
试设计⼀考勤管理系统,使之能提供以下功能:(1) 录⼊学⽣的缺课记录;(2) 修改某个学⽣的缺课记录;(3) 查询某个学⽣的缺课情况;(4) 统计某段时间内,旷课学⽣姓名及旷课次数,按旷课次数由多到少排序;(5) 统计某段时间内,有学⽣旷课的课程及旷课⼈次,按旷课⼈次由多到少排序;(6) 系统以菜单⽅式⼯作。
本程序由visual studio 2017编写我会先将程序放上来然后后⾯慢慢加注释,程序的⼤概思路是设计三个结构体,考勤信息结构体负责保存每⼀条缺课信息,其中包括学⽣信息和课程信息,每次添加考勤信息的时候,剩下的两个学⽣和课程结构体会⾃动从⾥⾯添加所需要的信息,整个程序的功能实现也是建⽴在三个结构体的基础上的。
#define _CRT_SECURE_NO_WARNINGS#define N 1000#define M 100#include<stdio.h>#include<stdlib.h>#include<string.h>struct kaoqing {//int total;//旷课总节数int number;// 旷课的第⼏节char coure_name[20];//课程名称char stu_name[20];//学⽣名字char type[20];//课程类型int year;int month;int day;};struct stu {char stu_name2[20];int num;//每个学⽣的旷课总节数,旷课次数};struct course {char coure_name2[20];//课程名称int num;//本门课程旷课⼈次};struct kaoqing K[N+1]= { 0 };struct stu S[M + 1] = { 0 };struct course C[M + 1] = { 0 };int add_course(char name[], int *t){int z = *t;int i = 1;int flag = 0;for (; i < z; i++) {if (strcmp(C[i].coure_name2, name) == 0) {flag = 1;}}if (flag) {return 1;//}strcpy(C[i].coure_name2, name);++(*t);return 0;}int add_stu(char name[],int *t){int m = *t;int i = 1;int flag = 0;for(;i<m;i++) {if (strcmp(S[i].stu_name2, name) == 0) {flag = 1;}}if (flag) {return 1;//}strcpy(S[i].stu_name2, name);++(*t);return 0;}void Coure_show(int n,int m){int imax; int temp;int i = 1, j = 1;int by, bm, bd, ey, em, ed;for (; i < n; i++) {printf("%s缺课⽇期:%d年%d⽉%d⽇第%d节课 %s %s\n", K[i].stu_name, K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type); }printf("请输⼊统计时间段的起点时间:");scanf("%d%d%d", &by, &bm, &bd);printf("请输⼊统计时间段的终点时间:");scanf("%d%d%d", &ey, &em, &ed);i = 1; j = 1;for (; i < m; i++) {for (j = 1; j < n; j++) {if ((K[j].year >= by) && (K[j].year <= ey)) {if ((K[j].month >= bm) && (K[j].month <= em)) {if ((K[j].day >= bd) && (K[j].day <= ed)) {if (strcmp(K[j].coure_name, C[i].coure_name2) == 0) {++C[i].num;}}}}}}i = 1; j = 1;for (; i < m; i++){imax = i;for (j = i + 1; j < m; j++){if (C[j].num > C[imax].num) {imax = j;}}temp = C[imax].num;C[imax].num = C[i].num;C[i].num = temp;}i = 1; j = 1;printf("从%d年%d⽉%d⽇到%d年%d⽉%d⽇这段时间内,旷课情况如下:\n", by, bm, bd, ey, em, ed);for (; i < m; i++) {//if (C[i].num > 0) {printf("%s 旷课⼈次%d\n", C[i].coure_name2, C[i].num);//}for (j = 1; j < n; j++) {if (strcmp(K[j].coure_name, C[i].coure_name2) == 0) {printf("缺课⽇期:%d年%d⽉%d⽇第%d节课 %s %s\n", K[j].year, K[j].month, K[j].day, K[j].number, K[j].stu_name, K[j].type);}}}i = 1;for (; i < m; i++) {C[i].num = 0;}}void Info_show(int n,int m){int imax; int temp;int i = 1,j=1;int by, bm, bd,ey,em,ed;for (; i < n; i++) {printf("%s缺课⽇期:%d年%d⽉%d⽇第%d节课 %s %s\n",K[i].stu_name,K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type); }printf("请输⼊统计时间段的起点时间:");scanf("%d%d%d", &by, &bm, &bd);printf("请输⼊统计时间段的终点时间:");scanf("%d%d%d", &ey, &em, &ed);i = 1; j = 1;for (; i < m; i++) {for (j=1; j < n; j++) {if ((K[j].year >= by) && (K[j].year <= ey)) {//满⾜年份则不需要管⽉份和⽇期if ((K[j].month >= bm) && (K[j].month <= em)) {//不满⾜年份满⾜⽉份则不需要管if ((K[j].day >= bd) && (K[j].day <= ed)) {if (strcmp(K[j].stu_name,S[i].stu_name2)==0) {++S[i].num;}}}}}}i = 1; j = 1;for (; i < m; i++){imax = i;for (j = i + 1; j < m; j++){if (S[j].num > S[imax].num) {imax = j;}}temp = S[imax].num;S[imax].num = S[i].num;S[i].num = temp;}i = 1; j = 1;printf("从%d年%d⽉%d⽇到%d年%d⽉%d⽇这段时间内,旷课情况如下:\n",by,bm,bd,ey,em,ed);for (; i < m; i++) {if (S[i].num > 0) {printf("%s 旷课次数%d\n", S[i].stu_name2, S[i].num);}for (j=1; j < n; j++) {if (strcmp(K[j].stu_name, S[i].stu_name2) == 0) {printf("缺课⽇期:%d年%d⽉%d⽇第%d节课 %s %s\n", K[j].year, K[j].month, K[j].day, K[j].number, K[j].coure_name, K[j].type); }}}i = 1;for (; i < m; i++) {S[i].num = 0;}}void Info_change(int n){char name[20];int i=1;int flag = 0;//记录是否修改int year, month, day, number;printf("请输⼊想修改的学⽣姓名:");scanf("%s", name);printf("请输⼊想修改记录的时间和节数:");scanf("%d%d%d%d", &year, &month, &day, &number);for (; i < n; i++) {if ((strcmp(K[i].stu_name,name) == 0)&&((K[i].year==year)&&(K[i].month==month)&&(K[i].day==day)&&(K[i].number==number))) {printf("请依次输⼊新的该条信息!");printf("请输⼊缺课⽇期,格式为年⽉⽇:");scanf("%d%d%d", &K[i].year, &K[i].month, &K[i].day);printf("请输⼊缺课课程为当⽇第⼏节:");scanf("%d", &K[i].number);printf("请输⼊缺课课程名称:");scanf("%s", K[i].coure_name);printf("请输⼊缺课类型:");scanf("%s", K[i].type);printf("请输⼊缺课学⽣姓名:");scanf("%s", K[i].stu_name);printf("修改成功!");++flag;}}if (!flag) {printf("修改失败!请联系管理员进⾏错误排查!");}void Info_find(int n){char name[20];int i = 1;printf("请输⼊查找学⽣姓名:");scanf("%s", name);printf("%s的缺课情况如下:\n",name);for (; i < n; i++) {if (strcmp(K[i].stu_name, name) == 0) {printf("缺课⽇期:%d年%d⽉%d⽇第%d节课 %s %s\n", K[i].year, K[i].month, K[i].day, K[i].number, K[i].coure_name, K[i].type); }}}void Info_init(int *x,int *y,int *z){/*int number;// 旷课的第⼏节char coure_name[20];//课程名称char stu_name[20];//学⽣名字char type[20];//课程类型int year;int month;int day;*/int a_s;int a_c;int X = *x;int Y = *y;int Z = *z;int numbera;// 旷课的第⼏节char coure_namea[20];//课程名称char stu_namea[20];//学⽣名字char typea[20];//课程类型int yeara;int montha;int daya;FILE *fp;if ((fp = fopen("INFO.txt", "r")) == NULL) {printf("数据读⼊失败!请联系管理员进⾏错误排查!");exit(0); //退出程序(结束程序)}while (fscanf(fp, "%d%s%s%s%d%d%d", &numbera, coure_namea, stu_namea, typea, &yeara, &montha, &daya) == 7) {K[*x].number = numbera;strcpy(K[*x].coure_name,coure_namea);strcpy(K[*x].stu_name, stu_namea);strcpy(K[*x].type, typea);K[*x].year = yeara;K[*x].month = montha;K[*x].day = daya;++(*x);printf("%d\n", *x);a_s = add_stu(stu_namea,y);a_c = add_course(coure_namea,z);/*if (!a_s) {printf("%d\n", *y);printf("学⽣姓名数组初始化成功!\n");}if (!a_c) {printf("%d\n", *z);printf("课程名称数组初始化成功!\n");}*/}fclose(fp);}void Info_save(int n){int i=1;FILE * fp;if ((fp = fopen("INFO.txt", "w")) == NULL) {printf("数据读⼊失败!请联系管理员进⾏错误排查!");exit(0); //退出程序(结束程序)for (; i < n; i++) {fprintf(fp, "%d %s %s %s %d %d %d\n", K[i].number, K[i].coure_name, K[i].stu_name, K[i].type, K[i].year, K[i].month, K[i].day); }fclose(fp);}void Info_in(int *w,int *z,int *v){char name[20];char c_name[20];int flag1, flag2;int n = *w;//记录数组的控制数int m = *z;//学⽣数组的控制数int o = *z;//课程数组的控制数printf("请依次输⼊学⽣的缺课情况:");printf("请输⼊缺课⽇期,格式为年⽉⽇:");scanf("%d%d%d", &K[n].year, &K[n].month, &K[n].day);printf("请输⼊缺的课程为当⽇第⼏节:");scanf("%d", &K[n].number);printf("请输⼊缺的课程的名称:");scanf("%s", K[n].coure_name);strcpy(c_name, K[n].coure_name);flag1 = add_course(c_name, v);if (!flag1){printf("课程名称添加成功");}printf("请输⼊缺课的学⽣姓名:");scanf("%s", K[n].stu_name);strcpy(name, K[n].stu_name);flag2=add_stu(name,z);if (!flag2){printf("学⽣姓名添加成功");}printf("请输⼊缺课类型:");scanf("%s", K[n].type);printf("添加成功!");++(*w);}int main(){int X = 1; int Y = 1; int Z = 1;Info_init(&X,&Y,&Z);while (1){system("cls");int n;printf(" *************************************************************************\n");printf(" ** **\n");printf(" ** -------欢迎使⽤考勤管理系统------ **\n");printf(" ** **\n");printf(" *************************************************************************\n\n");printf("\t\t\t [ 1.缺课信息登记 ]\n\n");printf("\t\t\t [ 2.缺课信息修改 ]\n\n");printf("\t\t\t [ 3.缺课信息查询 ]\n\n");printf("\t\t\t [ 4.旷课学⽣信息展⽰]\n\n");printf("\t\t\t [ 5.课程情况展⽰ ]\n\n");printf("\t\t\t [ 6.退出系统 ]\n\n");printf("请输⼊需要使⽤的功能数字:");scanf("%d", &n);while (n < 1 || n > 7) {printf("\n\n代码输⼊有误,请您重新输⼊:");scanf("%d", &n);}switch (n) {case 1:Info_in(&X,&Y,&Z); break;case 2:Info_change(X); break;case 3:Info_find(X); break;case 4:Info_show(X,Y); break;case 5:Coure_show(X,Z); break;case 6:exit(0);}Info_save(X);system("pause");}return 0;以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
C语言考勤管理系统课程设计一、课程目标知识目标:1. 学生能理解C语言在考勤管理系统中的应用,掌握基本的数据类型、运算符、控制结构等语法知识。
2. 学生能运用结构体、文件操作等C语言特性,实现员工信息的增删改查功能。
3. 学生了解并掌握模块化编程思想,将系统分解为多个功能模块,提高代码的可读性和可维护性。
技能目标:1. 学生能够独立设计并编写C语言程序,实现考勤管理系统的基本功能。
2. 学生能够运用调试工具(如Turbo C)查找并修复程序中的错误,提高程序的稳定性和可靠性。
3. 学生掌握基本的算法和数据结构,能够对程序进行优化,提高系统性能。
情感态度价值观目标:1. 学生通过本课程的学习,培养对编程的兴趣和热情,提高信息素养。
2. 学生能够意识到编程在实际应用中的重要性,增强解决问题的信心和责任感。
3. 学生在团队协作中,培养沟通与协作能力,尊重他人的观点,共同完成项目任务。
课程性质:本课程为实践性课程,以项目为导向,结合C语言编程知识,培养学生实际编程能力。
学生特点:学生为初中生,具备一定的计算机操作基础,对编程有一定兴趣,但缺乏实际编程经验。
教学要求:教师需结合学生特点,以实际项目为载体,引导学生掌握C语言编程知识,培养实际编程能力。
通过项目实践,使学生能够将所学知识应用于实际问题的解决,提高学生的综合素养。
在教学过程中,注重培养学生的团队协作能力和创新精神,使学生在完成项目任务的同时,实现知识、技能和情感态度价值观的全面提升。
二、教学内容1. C语言基础知识回顾:数据类型、变量、常量、运算符、表达式等,对应教材第一章。
2. 控制结构:顺序结构、选择结构、循环结构,对应教材第二章。
3. 函数:函数定义、调用、传参、返回值,对应教材第三章。
4. 结构体和文件操作:结构体的定义和使用、文件读写操作,对应教材第四章和第六章。
5. 模块化编程:模块划分、模块间通信、主函数设计,结合教材第三章和第五章。
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计课程设计报告课设题目:考勤管理系统专业:自动化班级: xxxxx姓名: xxxx成绩: xxxx目录1.课程设计目的 (3)2.需求分析 (3)2.1要求 (3)2.2任务描述 (4)2.3运行环境 (4)2.4开发工具 (4)3.总体设计 (4)3.1系统流设计 (4)3.2系统模块设计 (5)4.详细设计 (6)4.1数据结构设计 (6)4.2模块接口设计 (6)4.3 以下是几个主要模块的流程图: (7)5.运行结果 (10)5.1主菜单界面: (11)5.2信息录入界面: (12)5.3信息浏览界面: (13)5.4 信息查询界面: (15)5.5信息修改界面: (15)6.程序调试与测试 (17)6.1程序调试 (17)6.2程序测试 (19)7.问题与不足 (19)8.建议 (19)9.编程体会 (19)10.程序源代码: (20)11.参考文献 (38)12.用户使用手册 (38)1.课程设计目的1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2)通过课程设计,进一步掌握C语言中重要的数据结构。
掌握并熟练运用指针、链表、结构体、文件等数据结构。
3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。
5)通过课程设计,加强了自己的程序分析能力。
2.需求分析2.1要求1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。
2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。
3)学会利用数组、结构体、链表进行相关信息表示。
1、问题描述 某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。
其
中,雇员 分为经理、技术人员、销售人员和销售经理。
定义一个将小时换成天数的类。
转换规则: 8小时转换为一天, 12 小时转换为 1.5 天。
可进行 天数的加、减。
定义一个记录员工生病、休假时间的类。
其中包括:员工生病没工作的天数、生病可以不工作 的最多天数、员工已经带薪休假的天数、员工可以带薪休假的天数。
公司规定带薪休假不能超过 24 小时。
生病可以不工作的最多不能超过 16 小时。
设计一程序能够对公司人员的休假情况进行管理,应用到继承、抽象类、虚函数、虚基类、多 态和文件的输入 / 输出等内容。
2、功能要求
( 1)添加功能: 程序能够任意添加上述四类人员的记录, 可提供选择界面供用户选择所要添加 的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消 添加。
还可以添加带薪休假和生病休假的记录,每条记录中必须包含员工编号和姓名。
( 2)查询功能: 可根据编号、 姓名等信息对已添加的员工信息和休假信息进行查询, 如果未找
到,给出相应的提示信息,如果找到,则显示相应的记录信息;
( 3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
( 4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
( 5)删除功能: 主要实现对已添加的人员记录和休假记录进行删除。
如果当前系统中没有相应 的人员记录,则提示“记录为空! ”并返回操作。
( 6)统计功能:能根据多种参数进行人员的统计。
例如,统计四类人员数量以及总数, 统计任一员工的休假天数等信息。
( 7)保存功能:可将当前系统中各类人员记录和休假记录存入文件中,存入方式任意。
( 8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
3、问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤: ( 1)应用系统分析,建
立该系统的功能模块框图以及界面的组织和设计; ( 2)分析系统中的各个实体及它们之间的关系;
( 3)根据问题描述,设计系统的类层次;
题目 12
公司员工考勤管理系统设
计”
( 4)完成类层次中各个类的描述;
( 5)完成类中各个成员函数的定义;
( 6)完成系统的应用模块;
( 7)功能调试;
( 8)完成系统总结报告。
#import"msado15.dll" no_namespace rename("EOF,"adoEOF") class CADOConnection
{
private:
Static void InitADO();
Static void UnInitADO();
protected:
_ConnectionPtr m_Connection;
public:
BOOL IsOpen();
_ConnectionPtr GetConnection();
Cstring GetSQLConstr(CString IP,CString DBName);
BOOL Open(CString ConStr);
CADOConnection();
Virtual~CADOConnection();
};
CADOConnection*GetConnection();
Int ConCount = 0;
CADOConnection*GetConnection()
{
Return & g_Connection;
}
CADOConnection::CADOConnection()
{
InitADO();
m_Connection.CreateInstance("ADODB.Connection"); } CADOConnection::CADOConnection()
{
If(IsOpen());
m_Connection->Close();
m_Connection = NULL;
UnInitADO();
}
Void CADOConnection::InitADO()
{
If(ConCount ++ == 0)
CoInitialize(NULL);
};
{
if(~ConCount == 0)
CoUninitialize();
};
BOOL CADOConnection::Open(CString ConStr)
{
if(IsOpen())
m_Connection->Close();
m_Connection->Open((_bstr_t)ConStr,","adModeUnknown); return
IsOpen();
}
CString CADOConnection::GetSQLConStr(CString IP,CString DBName) { CString Str;
Str.Format("Provider = SQLOLEDB.1;Persist Security Info
False;User ID = sa;Initial Catalog = %s;Data Source = %s",DBName,IP); return Str; }
_ConnectionPtr CADOConnection::GetConnection()
return m_Connection:
{
long State;
m_Connection->get_State(&State);
if(State == adStateOpen)
return true;
return false;
}
class CADODataSet
{
protected:
_RecoedsetPtr m_DataSet;
CADOConnection *m_Connection
public:
void Delete();
int GetRecordNo();
void move(int nIndex);
void Save();
void SetFieldValue(CString FieldName,_variant_t Value);
void AddNew();
BOOL Next();
FieldsPtr GetFields();。