这篇文章主要为大家详细介绍了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);
/
沃梦达教程
本文标题为:C语言实现考勤管理系统


猜你喜欢
- C语言详解float类型在内存中的存储方式 2023-03-27
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言qsort()函数的使用方法详解 2023-04-26
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Easyx实现扫雷游戏 2023-02-06
- ubuntu下C/C++获取剩余内存 2023-09-18
- Qt计时器使用方法详解 2023-05-30