基于COracle的考勤管理系统的设计与开发
c考勤管理系统课程设计

c 考勤管理系统课程设计一、课程目标知识目标:1. 学生理解考勤管理系统的基本概念,掌握其功能模块和工作流程。
2. 学生掌握使用编程语言(如Python)设计并实现一个简单的考勤管理系统。
3. 学生了解数据库管理的基本原理,能够运用到考勤管理系统中进行数据存储和查询。
技能目标:1. 学生能够运用所学知识,独立设计并编写出具备基本功能的考勤管理系统。
2. 学生通过项目实践,提高问题分析、程序设计和调试的能力。
3. 学生学会使用数据库技术进行数据管理,提高数据处理和分析的能力。
情感态度价值观目标:1. 学生培养对计算机编程和数据库管理的兴趣,激发学习积极性。
2. 学生通过团队协作完成项目,培养沟通、协作和团队精神。
3. 学生认识到考勤管理系统在实际应用中的重要性,增强实践操作和创新能力。
课程性质:本课程为信息技术课程,以项目实践为主,结合理论教学。
学生特点:学生为初中年级,具备一定的计算机操作基础,对编程和数据库有一定了解。
教学要求:教师需引导学生运用所学知识,以项目为导向,注重实践操作和团队协作。
在教学过程中,关注学生的个体差异,提高学生的编程能力和数据处理能力。
通过课程学习,使学生能够将所学知识应用于实际问题的解决中。
二、教学内容1. 考勤管理系统的基本概念与功能模块介绍:包括考勤系统的定义、作用、常见功能模块划分及工作流程。
教材章节:第三章第二节《数据库应用系统概述》2. 编程语言基础:运用Python语言进行考勤管理系统的设计与实现,涵盖变量、条件语句、循环语句等基本语法。
教材章节:第二章《Python编程基础》3. 数据库管理:介绍数据库的基本原理,以MySQL为例,进行数据存储、查询和管理操作。
教材章节:第四章《数据库基础与应用》4. 考勤管理系统设计与实现:结合实际需求,引导学生进行系统设计,编写代码实现考勤管理功能。
教材章节:第五章《数据库应用系统设计》5. 项目实践:分组进行考勤管理系统项目实践,包括需求分析、系统设计、编码实现、测试与优化等环节。
c语言课程设计学生考勤系统设计

c语言课程设计学生考勤系统设计一、课程目标知识目标:1. 学生能够掌握C语言基础语法,包括数据类型、变量定义、运算符、控制结构等。
2. 学生能够理解结构体和数组在C语言中的应用,并能运用其设计学生考勤系统。
3. 学生能够掌握文件操作在C语言中的使用,实现对考勤数据的存储和读取。
技能目标:1. 学生能够运用C语言编写程序,实现学生考勤系统的基本功能,如学生信息的添加、删除、修改和查询。
2. 学生能够利用所学知识对程序进行调试和优化,提高代码执行效率。
3. 学生能够通过课程学习,培养解决问题、分析问题和编程实现的能力。
情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,提高主动学习的积极性。
2. 学生能够通过课程实践,认识到编程对解决实际问题的价值,增强自信心和成就感。
3. 学生在团队协作中,学会沟通与交流,培养合作精神和集体荣誉感。
课程性质:本课程为实践性较强的课程,旨在通过设计学生考勤系统,让学生将所学C语言知识应用于实际项目中。
学生特点:学生具备一定的C语言基础,对编程有一定了解,但实际操作能力有待提高。
教学要求:注重理论与实践相结合,通过课程设计,提高学生的编程能力和解决实际问题的能力。
将目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. C语言基础语法复习:包括数据类型、变量定义、运算符、控制结构(如if 语句、循环语句等)。
相关教材章节:第一章至第三章。
2. 结构体和数组的应用:介绍结构体定义、数组的使用,结合实例讲解如何存储和管理学生信息。
相关教材章节:第四章、第七章。
3. 文件操作:讲解文件打开、读写、关闭等操作,以及如何将学生考勤数据存储到文件中。
相关教材章节:第十章。
4. 函数和模块化编程:引导学生学会将程序功能模块化,提高代码的可读性和可维护性。
相关教材章节:第六章。
5. 调试与优化:介绍常见编程错误类型,教授调试技巧,提高代码执行效率。
相关教材章节:第十二章。
C语言课程设计-学生考勤管理系统

学生考勤管理系统目录1. 绪论 (1)1.1课题背景 (1)1.2课题目的和要求 (1)1.3课题意义 (2)2. 系统分析 (2)2.1功能需求 (2)2.2数据需求 (3)2.3性能需求 (3)3. 总体设计 (3)3.1功能模块设计 (3)3.2系统设计方案 (3)4. 详细设计 (4)4.1建立学生缺课记录子模块 (4)4.2修改学生缺课记录子模块 (5)4.3修改学生缺课记录子模块 (6)4.4查看单科旷课记录子模块 (7)4.5查看学生旷课记录子模块 (8)4.6载入学生旷课记录子模块 (9)4.7储存学生旷课记录子模快 (9)5. 调试与测试 (10)5.1调试 (10)5.2测试 (11)6. 结论 (11)结束语 (11)参考文献 (11)附录1—用户手册 (12)附录2—源程序 (17)摘要20世纪末,随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。
学生考勤管理程序是信息管理系统的一个子系统,一个基于单机版的系统。
因为随着计算机技术的不断进步与发展,计算机已经深入到人们日常生活的每个角落,例如:政府部门,企事业单位,学校等等。
该系统开发功能主要包括:管理员可以通过计算机设置学生考勤管理程序,打印供学校及个人使用。
该程序是使用C语言编写的学生考勤统计程序。
关键词:考勤;姓名;缺课类型;课程名称。
1. 绪论1.1 课题背景程序实践是本科生重要教学环节之一。
通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识,加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力学生考勤管理程序是学校管理工作中一个比较重要的任务,过多的学生考勤管理程序工作给学校管理人员带来了很大麻烦的。
虽然原始的记录方法在一定的程度上可以解决问题,可是现在计算机已经走到了我们的生活,它的不足之处就显而易见了。
学生考勤管理程序,是一个对于学生考勤的管理系统, 不仅大大减少了考勤管理人员的大量的工作,而且还方便了班级和学校对学生出课率的查询,只要通计算机登入本系统就能及时修改、更正学生的考勤信息,使信息真实、有效。
考勤管理系统c语言课程设计报告

考勤管理系统c语言课程设计报告课程设计报告:考勤管理系统一、引言随着企业规模的不断扩大,考勤管理成为企业日常管理中的重要环节。
为了提高考勤管理的效率和准确性,我们设计了一个基于C语言的考勤管理系统。
本系统能够实现员工考勤信息的录入、查询、修改和统计等功能,为企业提供了一个方便、快捷的考勤管理平台。
二、系统设计1. 系统功能设计本系统主要包括以下几个功能模块:(1)员工信息管理模块:用于添加、删除、修改和查询员工基本信息,包括姓名、部门、职位等。
(2)考勤信息管理模块:用于记录员工的考勤情况,包括上下班时间、请假记录等。
同时支持迟到、早退、旷工等异常情况的记录和处理。
(3)考勤统计模块:根据员工的考勤记录,自动计算员工的出勤率、迟到率、请假率等数据,并生成相应的统计报表。
(4)系统管理模块:用于设置系统的参数,如工作日、上班时间、节假日安排等;同时提供权限管理和日志查看功能,保证系统的安全性和稳定性。
2. 数据库设计本系统采用结构化查询语言(SQL)进行数据库设计,包括员工表、考勤表和统计表等。
其中,员工表存储员工的基本信息,如姓名、部门、职位等;考勤表存储员工的考勤记录,如上下班时间、请假记录等;统计表存储员工的出勤率、迟到率等统计数据。
通过合理的数据库设计,能够提高系统的数据处理能力和查询效率。
三、系统实现1. 员工信息管理模块实现在员工信息管理模块中,我们使用C语言中的结构体来表示员工信息,包括姓名、部门、职位等字段。
通过添加、删除、修改和查询等操作,实现对员工信息的维护和管理。
同时,为了方便用户操作,我们使用菜单驱动的方式实现交互界面,用户可以根据菜单提示进行相应的操作。
2. 考勤信息管理模块实现在考勤信息管理模块中,我们使用时间函数获取当前时间,并记录员工的上下班时间。
同时,根据员工的请假记录和异常情况处理规则,实现请假申请、异常情况处理等功能。
为了方便用户查询和管理考勤信息,我们设计了友好的界面和查询功能,用户可以根据姓名、部门等条件进行考勤记录的查询和筛选。
c语言课程设计学生考勤系统

C语言课程设计:学生考勤系统1.引言本文档旨在设计一个基于C语言的学生考勤系统。
该系统可以帮助学校、学院或其他教育机构进行学生的考勤管理。
通过该系统,教师或管理员可以方便地记录学生的出勤情况,并生成相关报表进行统计分析。
2.系统概述学生考勤系统是一个基于C语言开发的控制台应用程序,主要包括学生信息管理、考勤记录管理和报表生成等模块。
通过该系统,用户可以实现对学生信息的增、删、改、查操作,并能记录学生的考勤情况,最后生成考勤报表。
3.系统功能3.1 学生信息管理学生信息管理模块主要用于对学生的基本信息进行管理,包括学生姓名、学号、性别、出生日期、班级等。
该模块提供以下功能:•添加学生信息:输入学生的基本信息,将学生添加到系统中。
•修改学生信息:根据学生的学号或姓名,修改学生的基本信息。
•删除学生信息:根据学生的学号或姓名,从系统中删除学生的信息。
•查询学生信息:根据学号、姓名或班级等条件,查询学生的基本信息。
3.2 考勤记录管理考勤记录管理模块用于记录学生的考勤情况,包括学生的出勤、迟到、旷课等。
该模块提供以下功能:•学生签到:根据学生的学号或姓名,进行学生的签到操作。
•学生迟到:根据学生的学号或姓名,记录学生迟到的时间和原因。
•学生旷课:根据学生的学号或姓名,记录学生旷课的时间和原因。
•考勤查询:根据学生的学号、姓名或日期,查询学生的考勤情况。
3.3 报表生成报表生成模块用于根据学生的考勤记录生成考勤报表,对学生的出勤情况进行统计分析。
该模块提供以下功能:•出勤统计报表:根据学期、学科等条件,生成学生的出勤统计报表。
•迟到统计报表:根据学期、班级等条件,生成学生的迟到统计报表。
•旷课统计报表:根据学期、班级等条件,生成学生的旷课统计报表。
4.技术实现本项目使用C语言进行开发,主要利用C语言的数据结构和文件操作等特性实现对学生信息的管理和考勤记录的存储。
具体技术实现包括以下几个方面:•结构体:使用C语言的结构体来定义学生的基本信息,方便进行管理和存取操作。
C语言实现考勤管理系统

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语言课程设计--职工考勤管理系统

xx理工大学《C语言程序设计》题目职工考勤管理程序指导教师:姓名:学号:班级:专业:计算机工程地点:计算机工程学院机房时间:20xx 至20xx一、内容此系统以对职工考勤为背景,提供对职工信息、上下班时间的录入、显示、查询、删除等功能。
具体功能实现如下:1、职工信息新建:实现职工工号、姓名、顺序号、上下班时间的录入功能,并能将其以文件形式加以保存。
2、考勤信息浏览:实现对全体职工所投的的考勤信息的浏览功能。
3、查询功能:实现按工号或姓名查询职工一周的上下班时间的功能。
4、删除功能:实现对职工考勤信息的删除管理。
5、系统以菜单方式工作,界面清晰,易于操作。
二、上机环境操作系统:windows xp/8.1开发工具:vc6.0三、函数调用关系图主函数四、各函数功能说明对每个函数功能加以说明,说明该函数主要实现了什么内容。
例如:1.main()主函数2. void input();录入函数3. void display();显示函数4. void search0();查找函数5. void del();删除函数五、算法描述或流程图(或者进行描述,或者绘出流程图,例子见下)主函数录入函数查询函数六、程序运行效果图;欢迎界面主菜单录入考勤信息显示考勤信息查询考勤信息删除考勤信息删除考勤信息成功七、总结通过这次做C语言课设,我发现这学期在老师那学的只是一些皮毛而已。
编程的知识博大精深,还有许许多多的函i数我都不知j道,不会用,在今后自己还要不断i的学习。
通过这几天做课设,我体会到这个过程是艰辛并快乐着的,这个过程中充满了编程的乐趣。
每次为如何把实际中的问题转化为计算机可以识别的语言而苦恼、烦躁,不停的在图书馆和网上查找自己需要的资料,可是一旦自己把程序编出来了,并在计算机上运行通过,自己心里又是快乐的,有一种巨大的成就感回荡在心头,把坐在电脑前几个小时的苦和累都忘了。
这次课设,是我自己第一次靠自己编出来的一个完整的程序,我会把这个程序一直的保存着,随着我今后在编程方面的学习加深,我会自己慢慢的改进它,让它见证我的成长历程。
Oracle数据库课程设计-学生考勤系统的Oracle实现

Oracle数据库课程设计——学生考勤系统的Oracle实现1学生考勤管理系统背景分析随着高校校园信息化的逐步完善,有效地借助网络、数据库等技术提高工作和管理效率。
如今针对师生的成绩查询系统、教务管理系统、招生就业系统、BBS、校园网站等系统在各大高校纷纷出现,对全校师生的学习、生活、管理、办公带来了便利。
因此学生考勤管理系统为进一步加强高校学风建设,维护正常的教学秩序,给学生创造一个优良的学习环境,从而应运而生。
目前高校学生上课考勤管理都是以任课老师上课点名,签到等等记录学生上课情况,对于时间比较长的请假,需要通过递交请假申请让班导师、院系领导都批准方能生效。
这种模式在目前高校管理中暴露了不可避免的弊端,这主要体现在如下几个方面:1、学生请假不方便;2、学生之间有冒名顶替签到的情况3、学生请假对任课老师不透明;4、学生对自己整个学期的上课出勤情况没有整体的统计信息;5、班导师对本班学生整个学期的上课出勤情况不易查看;6、院系领导、学校领导不容易把握学生上课的出勤情况。
因此一个好的学生考勤管理系统在一定程度上可以解决这些弊端,本系统主要针对目前高校学生在线请假以及学生上课出勤管理当中所暴露出来的问题而设计的信息系统。
本系统涉及到高校六大类用户:学生、任课老师、班导师、院系领导、学校领导、系统管理员。
2学生考勤管理系统需求分析2.1 用户需求描述用户是系统的最终使用者,根据分析,本系统应当包括学生、班导师、任课老师、院系领导、学校领导、系统管理员六类用户,这六类用户对系统的需求简要概括如下:2.2.1学生用户需求描述学生对本系统的主要需求是:在线请假以及查看在校期间所有的上课出勤信息。
在线请假需求:学生请假的全过程当中,学生可以随时查看请假的详细进展情况。
查看出勤信息需求:学生可以查看在校期间所有学期上课出勤的详细信息,如:查看“数据库课程设计”这门课程在整个学期请假、旷课多少次等信息。
其它需求:查看本人的基本信息,如本人的所属的院系、年级、专业、班级、学号、姓名、性别等,以及修改个人用户密码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《基于C#+Oracle的考勤管理系统的设计与开发》年级: ***********学号: ***********姓名: ***********院系: ***********专业: ***********基于C#+Oracle的考勤管理系统的设计与开发一、系统设计基本情况1.系统设计目标利用计算机管理考勤信息,在很大程度上减轻了统计的工作量,实现企业员工考勤管理的规化,考勤数据统计的自动化。
2.设计思想除了能够手工录入员工的考勤记录外,还能与考勤机相配合,实现考勤信息录入自动化;考勤类型灵活设定,以便用户随时调整应具有报表功能,查询统计时能够直接生成相关员工的考勤报表,报表能导出系统应采用模块程序设计,便于组合和修改综合考虑,确定本系统采用C/S工作模式,以oracle作为后台数据库,C#为前台程序开发语言。
3.系统功能模块划分3.1员工信息管理模块3.2考勤类型的设定模块3.3员工考勤信息手工录入模块3.4员工考勤情况统计报表生成模块二、数据库设计1.数据库需求分析与用户结合,调查用户需求操作的资料,弄清用户怎样处理各种数据资料,理清数据库中各数据之间的关系。
通过分析,设计数据集和数据项如下:1.1员工信息数据集,数据项为员工号,员工,员工性别,员工所属部门。
1.2考勤类型数据集:数据项为类型号,类型名称1.3员工考勤情况数据集:数据项为考勤日期,员工号,考勤类型号,备注。
2.数据库结构设计2.1员工信息实体E-R图2.2考勤类型实体E-R图2.3员工考勤实体E-R图2.4实体与实体间的关系E-R图3.各表格数据库设计代码(Oracle平台)3.1考勤类型表格CREATE TABLE KQLXB(BH VARCHAR(4) NOT NULL PRIMARY KEY,LX VARCHAR(20) NULL);3.2员工信息表格CREATE TABLE YGB(BH VARCHAR(8) NOT NULL PRIMARY KEY,XM VARCHAR(12) NOT NULL,XB VARCHAR(2) NOT NULL,BM VARCHAR(20));3.3考勤情况管理表格CREATE TABLE KQGLB(KQRQ DATE NOT NULL,YGBH VARCHAR(8) NOT NULL,LXBH VARCHAR(4) NOT NULL,BZ VARCHAR(60) ,CONSTRAINT KQGLBPRI PRIMARY KEY(KQRQ,YGBH));3.4外键设计ALTER TABLE KQGLB ADD(CONSTRAINT KQGL_BH_FK FOREIGN KEY(LXBH) REFERENCES KQLXB(BH),CONSTRAINT YG_BH_FK FOREIGN KEY(YGBH) REFERENCES YGB(BH) );3.5触发器CREATE or REPLACE TRIGGER delete_ygbAFTER DELETE ON ygb FOR EACH ROWBEGINDELETE FROM kqglb WHERE kqglb.ygbh=:old.bh;END delete_ygb;CREATE or REPLACE TRIGGER update_ygbBEFORE UPDATE ON ygb FOR EACH ROWBEGINUPDATE kqglb SET kqglb.ygbh=:new.bh where kqglb.ygbh=:old.bh;END update_ygb;CREATE or REPLACE TRIGGER delete_kqlxbAFTER DELETE ON kqlxb FOR EACH ROWBEGINDELETE FROM kqglb WHERE kqglb.lxbh=:old.bh;END delete_kqlxb;CREATE or REPLACE TRIGGER update_kqlxbBEFORE UPDATE ON kqlxb FOR EACH ROWBEGINUPDATE kqglb SET kqglb.lxbh=:new.bh where kqglb.lxbh=:old.bh;END update_kqlxb;三、系统设计页面1.主界面:2.员工信息管理界面:3.考勤类型管理界面:4.考勤信息录入界面:5.考勤统计报表界面:四、系统编程的实现1.主界面模块功能:打开各个操作界面。
// 自定义变量public frm_ygxx ygxx = null; // 员工信息窗体变量public frm_kqlx kqlx = null; // 考勤类型窗体变量public frm_kqgl kqgl = null; // 考勤管理窗体变量public frm_kqtj kqtj = null; // 考勤统计窗体变量/// <summary>/// 窗体加载事件/// </summary>private void frm_kqglxt_Load(object sender, EventArgs e) {pBtn.Left = (Width - pBtn.Width) / 2;}/// <summary>/// 各子窗体状态处理事件/// </summary>private void CloseFrm(){if (ygxx != null) ygxx.WindowState = FormWindowState.Minimized;if (kqlx != null) kqlx.WindowState = FormWindowState.Minimized;if (kqgl != null) kqgl.WindowState = FormWindowState.Minimized;if (kqtj != null) kqtj.WindowState = FormWindowState.Minimized; }/// <summary>/// 员工信息按钮事件/// </summary>private void btnYGXX_Click(object sender, EventArgs e){CloseFrm();if (ygxx == null){ygxx = new frm_ygxx();ygxx.MdiParent = this;ygxx.Show();}else{ygxx.WindowState = FormWindowState.Normal;ygxx.Activate();}ygxx.Location = new Point(0, 30);}/// <summary>/// 考勤类型按钮事件/// </summary>private void btnKQLX_Click(object sender, EventArgs e){CloseFrm();if (kqlx == null){kqlx = new frm_kqlx();kqlx.MdiParent = this;kqlx.Show();}else{kqlx.WindowState = FormWindowState.Normal;kqlx.Activate();}kqlx.Location = new Point(0, 30);}/// <summary>/// 考勤管理按钮事件/// </summary>private void btnKQGL_Click(object sender, EventArgs e) {CloseFrm();if (kqgl == null){kqgl = new frm_kqgl();kqgl.MdiParent = this;kqgl.Show();}else{kqgl.WindowState = FormWindowState.Normal;kqgl.Activate();}kqgl.Location = new Point(0, 30);}/// <summary>/// 考勤统计按钮事件/// </summary>private void btnKQTJ_Click(object sender, EventArgs e) {CloseFrm();if (kqtj == null){kqtj = new frm_kqtj();kqtj.MdiParent = this;kqtj.Show();}else{kqtj.WindowState = FormWindowState.Normal;kqtj.Activate();}kqtj.Location = new Point(0, 30);}2.员工信息管理模块功能:操作当前员工信息表,并可以进行员工信息增、改、删的操作。
// 自定义变量private string type = ""; // 按钮禁用判断标记private DataTable table = null; // 封装数据private bool isbj = false; // 状态标记/// <summary>/// 窗体加载事件/// </summary>private void frm_ygxx_Load(object sender, EventArgs e){table = Program.ConnRead("select * from YGB");dgvYG.DataSource = table;ChangeButton("JZ");}/// <summary>/// 数据表行选择更改事件/// </summary>private void dgvYG_SelectionChanged(object sender, EventArgs e){try{tbBH.Text = dgvYG.SelectedRows[0].Cells[0].Value.ToString();tbXM.Text = dgvYG.SelectedRows[0].Cells[1].Value.ToString();cbXB.Text = dgvYG.SelectedRows[0].Cells[2].Value.ToString();tbBM.Text = dgvYG.SelectedRows[0].Cells[3].Value.ToString();}catch { }}/// <summary>/// 窗体按钮是否禁用处理事件/// </summary>private void ChangeButton(string type){if (type == "XG")tbBH.Enabled = !isbj;elsetbBH.Enabled = isbj;tbXM.Enabled = isbj;cbXB.Enabled = isbj;tbBM.Enabled = isbj;dgvYG.Enabled = !isbj;btnZJ.Enabled = !isbj;if (dgvYG.Rows.Count == 0){btnXG.Enabled = false;btnSC.Enabled = false;}else{btnXG.Enabled = !isbj;btnSC.Enabled = !isbj;}btnTC.Enabled = !isbj;btnBC.Enabled = isbj;btnQX.Enabled = isbj;}/// <summary>/// 编号文本框输入格式检查事件/// </summary>private void tbBH_TextChanged(object sender, EventArgs e) {if (tbBH.Text.Length == 0) return;if (!char.IsNumber(tbBH.Text, tbBH.Text.Length - 1)){tbBH.Text = tbBH.Text.Substring(0, tbBH.Text.Length - 1);if (tbBH.Text.Length > 0)tbBH.Select(tbBH.Text.Length, 0);}}/// <summary>/// 判断是否清空文本框数据事件/// </summary>private void btnZJ_Click(object sender, EventArgs e){type = "ZJ";isbj = true;tbBH.Text = "";tbXM.Text = "";cbXB.Text = "男";tbBM.Text = "";ChangeButton("ZJ");}/// <summary>/// 修改数据事件/// </summary>private void btnXG_Click(object sender, EventArgs e){if (tbBH.Text == "") return;type = "XG";isbj = true;ChangeButton("XG");}/// <summary>/// 保存数据事件/// </summary>private void btnBC_Click(object sender, EventArgs e){tbBH.Text = tbBH.Text.Trim();tbXM.Text = tbXM.Text.Trim();tbBM.Text = tbBM.Text.Trim();if (tbBH.Text == ""){MessageBox.Show("编号不能为空。