【C语言】学生打卡系统(完整代码)
题目描述
1.学生信息及打卡情况的录入
2.修改某个学生的打卡情况
3.查询某个学生的打卡情况
4.旷课学生的姓名及次数
5.学生打卡的总评分数计算
完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
#include <string.h>FILE *fp; //定义文件
char a; //返回选择变量
float kq = 10; //应到打卡次数struct student
{char name[10]; //姓名char number[11]; //学号char sex; //性别int year; //出生日期--年int month; //出生日期--月int day; //出生日期--日int k; //打卡次数
}stu[100];void input();
void change();
void search();
void times();
void evaluate();
int main();int main()
{int it = 0;printf("\t\t★★★★★★★★★★★★★★★★★★★★★★★★\n");printf("\t\t★ ※欢迎进入学生考勤系统 ★\n");printf("\t\t★ ★\n");printf("\t\t★ 1.学生信息及打卡情况录入 ★\n");printf("\t\t★ ★\n");printf("\t\t★ 2.修改某个学生的打卡情况 ★\n");printf("\t\t★ ★\n");printf("\t\t★ 3.查询某个学生的打卡记录 ★\n");printf("\t\t★ ★\n");printf("\t\t★ 4.旷课学生的姓名及次数 ★\n");printf("\t\t★ ★\n");printf("\t\t★ 5.学生打卡的总评分数计算 ★\n");printf("\t\t★ ★\n");printf("\t\t★ 6.退出系统 ★\n");printf("\t\t★ ★\n");printf("\t\t★★★★★★★★★★★★★★★★★★★★★★★★\n");printf("\t *******请选择您需要的操作******* ");scanf("%d", &it);switch (it){case 1: input(); break;case 2:change(); break;case 3:search(); break;case 4:times(); break;case 5:evaluate(); break;case 6: break;default: printf("请重新输入!\n");}if (it == 6)printf("\t\t\t退出考勤系统,欢迎下次使用!");system("pause");return 0;
}void input()
{int i = 0;int j = 0;int x = 1;printf("************1.学生信息及打卡情况录入************\n");if ((fp = fopen("data.txt", "w")) == NULL){printf("文件打开失败! \n");main();}for (i = 0; x == 1; i++){for (; j == 0;){getchar();printf("请输入第%d个学生的姓名:", i + 1);gets(stu[i].name);printf("请输入第%d个学生的学号:", i + 1);gets(stu[i].number);printf("请输入第%d个学生的性别(男-m 女-f):", i + 1);stu[i].sex = getchar();printf("请输入第%d个学生的出生日期(格式:年-月-日):", i + 1);scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);printf("请输入第%d个学生当前的打卡次数:", i + 1);scanf("%d", &stu[i].k);printf("您输入的信息为: 姓名%s 学号%s 性别%c 出生日期 %d年%d月%d日 打卡次数%d \n ",stu[i].name, stu[i].number, stu[i].sex,stu[i].year, stu[i].month, stu[i].day, stu[i].k);printf("请确定信息 (重输-0 确定-1): ");scanf("%d", &j); //输入确认} j = 0;if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)printf("文件写入错误! \n"); // 写入文件printf("是否继续输入下一个学生的信息 终止-0 继续-1: ");scanf("%d", &x); //继续输入的选择}fclose(fp);printf("返回主菜单-0 :");getchar();a = getchar();getchar();if (a == '0')main(); //返回主菜单
} //录入数据函数结束void change()
{printf("************2.修改某个学生的打卡情况************\n");int i = 0;int j = 0;int t = 10;int it = 10;int x = 10;;char name[10] = { 0 };char number[10] = { 0 };if ((fp = fopen("data.txt", "r")) == NULL) //将文件内容读入内存{printf("文件打开失败! \n");main();}for (i = 0; feof(fp) == 0; ++i){fread(&stu[i], sizeof(struct student), 1, fp); //读取文件内容}printf("选择修改对象:按姓名查找-1 按学号查找-2: ");scanf("%d", &it);if (it == 1) //按姓名查找开始{printf("请输入需要修改学生的姓名: ");scanf("%s", &name);for (j = 0; t != 0; j++)t = strcmp(stu[j].name, name);if (j == i){t = 0;printf("未找到该学生信息,请重新输入! \n");fclose(fp);}if (j < i) //查询成功{printf("您查询的信息为: 姓名%s 学号%s 性别%c 打卡次数%d \n ",stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].k);}printf("是否确认修改该生打卡信息 否-0 是-1: ");scanf("%d", &x);if (x == 1){printf("请输入新的打卡次数: ");scanf("%d", &stu[j-1].k); //输入新的打卡次数if ((fp = fopen("data.txt", "w")) == NULL) //以只写方式打开{printf("文件打开失败! \n");main();}if (fwrite(&stu[j], sizeof(struct student), 1, fp) != 1)printf("文件写入错误! \n"); //写入文件}fclose(fp);}//按姓名查找结束if (it == 2) //按学号查找开始{printf("请输入需要修改学生的学号:");scanf("%s", &number);for (j = 0; t != 0; j++)t = strcmp(stu[j].number, number);if (j == i){t = 0;printf("未找到该学生信息,请重新输入! \n");}if (j < i) //查询成功{printf("您查询的信息为: 姓名%s 学号%s 性别%c 打卡次数%d \n ",stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].k);}printf("是否确认修改该生打卡信息 否-0 是-1:");scanf("%d", &x);if (x == 1){printf("请输入新的打卡次数: ");scanf("%d", &stu[j-1].k); //输入新的打卡次数if ((fp = fopen("data.txt", "w")) == NULL) //以只写方式打开{printf("文件打开失败! \n");main();}if (fwrite(&stu[j], sizeof(struct student), 1, fp) != 1)printf("文件写入错误! \n"); //写入文件}fclose(fp);}//按学号查询结束printf("是否继续修改其他学生打卡信息 返回主菜单-0 继续-1: ");scanf("%d", &x);if (x == 1) change();else main(); //返回主菜单
} //修改数据函数内容结束void search()
{printf("************3.查询某个学生的打卡记录************\n");int i = 0;int j = 0;int it = 10;int t = 10;int x = 10;char name[10] = { 0 };char number[10] = { 0 };if ((fp = fopen("data.txt", "r")) == NULL) //将文件内容读入内存{printf("文件打开失败! \n");main();}for (i = 0; feof(fp) == 0; ++i){fread(&stu[i], sizeof(struct student), 1, fp); //读取文件内容}printf("选择查找方式:按姓名查找-1 按学号查找-2: ");scanf("%d", &it);if (it == 1) //按姓名查找开始{printf("请输入需要查询学生的姓名: ");scanf("%s", &name);for (j = 0; t != 0; j++)t = strcmp(stu[j].name, name);if (j == i){t = 0;printf("未找到该学生信息,请重新输入! \n");}if (j < i) //查询成功{printf("您查询的信息为: 姓名%s 学号%s 性别%c 出生日期 %d年%d月%d日 打卡次数%d \n ",stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].year, stu[j - 1].month, stu[j - 1].day, stu[j - 1].k);}fclose(fp);}//按姓名查询结束if (it == 2) //按学号查找开始{printf("请输入需要查询学生的学号:");scanf("%s", &number);for (j = 0; t != 0; j++)t = strcmp(stu[j].number, number);if (j == i){t = 0;printf("未找到该学生信息,请重新输入! \n");}if (j < i) //查询成功{printf("您查询的信息为: 姓名%s 学号%s 性别%c 出生日期 %d年%d月%d日 打卡次数%d \n ",stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].year, stu[j - 1].month, stu[j - 1].day, stu[j - 1].k);}fclose(fp);}printf("是否继续查询其他学生打卡信息 返回主菜单-0 继续-1: ");scanf("%d", &x);if (x == 1) search();else main(); //返回主菜单
}void times()
{printf("************4.旷课学生的姓名及次数 ************\n");int i = 0;int j = 0;int it = 0;if ((fp = fopen("data.txt", "r")) == NULL) //将文件内容读入内存{printf("文件打开失败! \n");main();}for (i = 0; feof(fp) == 0; i++){fread(&stu[i], sizeof(struct student), 1, fp); //读取文件内容}printf("旷课学生的姓名及次数如下:\n ");for (j = 0; j < i-1;j++ ){if (stu[j].k < kq)printf("姓名%s 学号%s 缺课次数%f \n ",stu[j].name, stu[j].number, (kq - stu[j].k));}printf("是否返回主菜单 0否 1是: ");scanf("%d", &it);if (it == 0) return;else main();
}void evaluate()
{printf("************5.学生打卡的总评分数计算************\n");int i = 0;int j = 0;int t = 10;int it = 10;int x = 10;float score=0;char name[10] = { 0 };char number[10] = { 0 };if ((fp = fopen("data.txt", "r")) == NULL) //将文件读入内存{printf("文件打开失败! \n");main();}for (i = 0; feof(fp) == 0; ++i)fread(&stu[i], sizeof(struct student), 1, fp); //读取文件内容printf("选择计算对象:1 按姓名查找 2 按学号查找: ");scanf("%d", &it);if (it == 1) //按姓名查找开始{printf("请输入需要计算分数的学生姓名: ");scanf("%s", &name);for (j = 0; t != 0; ++j)t = strcmp(stu[j].name, name);if (j == i){t = 0;printf("未找到该学生信息,请重新输入! \n");fclose(fp);}if (j < i) //查询成功{printf("您查询的信息为: 姓名%s 学号%s 打卡次数%d \n ",stu[j - 1].name, stu[j - 1].number, stu[j - 1].k);score = stu[j-1].k / kq * 100;printf("该生当前打卡总评分为 %5.2f \n", score);}fclose(fp);printf("是否继续计算其他学生打卡分数 0否 1是");scanf("%d", &x);if (x == 1) evaluate();else main();} //按姓名查找结束if (it == 2) //按学号查找开始{printf("请输入需要计算分数的学生学号:");scanf("%s", &number);for (j = 0; t != 0; j++)t = strcmp(stu[j].number, number);if (j == i){t = 0;printf("未找到该学生信息,请重新输入! \n");}if (j < i) //查询成功{printf("您查询的信息为: 姓名%s 学号%s 性别%c 打卡日期 %d年%d月%d日 打卡次数%d \n ",stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].year, stu[j - 1].month, stu[j - 1].day, stu[j - 1].k);score = (float)(stu[j-1].k) / kq * 100;printf("该生当前打卡总评分为 %5.2f \n", score);}fclose(fp);printf("是否继续计算其他学生打卡分数 0否 1是");scanf("%d", &x);if (x == 1) evaluate();else main();} //按学号查找结束printf("0 返回主菜单\n");getchar();a = getchar();getchar();if (a == '0')main(); //返回主菜单
}
【C语言】学生打卡系统(完整代码)相关推荐
- C语言期末大作业15个(附源码)成绩管理系统、图书馆管理系统、学生打卡系统、超市信息管理系统、学生考勤系统、职工信息管理系统源码、歌曲信息管理系统、超市收款系统等等
C语言期末作业15个(上) 1.C语言学生成绩管理系统 2.C语言图书馆管理系统(复杂版) 3.C语言图书馆管理系统(简洁版) 4.C语言停车管理系统(两个版本) 5.C语言学生考勤系统 6.C语言班 ...
- C语言期末作业(15个)-货物管理系统、歌曲信息管理系统、职工信息管理系统源码、学生打卡系统、小学生计算机辅助教学系统、门禁系统、银行管理系统等等
C语言期末作业15个(下) 9.C语言货物管理系统 10.C语言歌曲信息管理系统 11.C语言职工信息管理系统源码 12.C语言学生打卡系统 13.C语言小学生计算机辅助教学系统 14.C语言门禁系统 ...
- 基于python,mysql的学生打卡系统(班级在用)
本文约有1.8W字,快来数一数 读一读吧 本文目录 前言 一.建立基础数据库(数据库名:english punch) all_name表:用于存储所有学生信息 update_table表:用于记录打卡 ...
- C语言学生综合测评系统
C语言学生综合测评系统 28.学生综合测评系统 每个学生的信息为:学号.姓名.性别.家庭住址.联系电话.语文.数学.外语三门单科成绩.考试平均成绩.考试名次.同学互评分.品德成绩.任课教师评分.综合测 ...
- 门禁系统 java源代码_Java经典源码 门禁系统完整代码
[实例简介] Java经典源码 门禁系统完整代码 门禁系统 另一种写法,代码和前一个系统有区别 [实例截图] [核心代码] ControlSys1 └── ControlSys1 ├── accp.l ...
- 成绩查询系统c语言,学生成绩查询系统C语言代码(分服务器端和客户端).doc
学生成绩查询系统C语言代码(分服务器端和客户端) 客户端:#include#include#include #pragma comment(lib , "Wsock32.lib " ...
- c语言-学生成绩查找系统
从写完上一篇博客,马不停蹄的我开始写这篇博客,就是不想辜负大家的期待,希望有更多的文章呈现给大家,话不多说让我们开始吧! 首先呈上题目: 在写这个算法题之前要求我们对结构体的知识有所了解,但不必过于深 ...
- 基于 K-means 算法的校园微博热点话题发现系统 完整代码 +论文
完整代码: https://download.csdn.net/download/qq_38735017/87382373 一.研究目的 微博由其 "短平快 " 的信息能力和快速传 ...
- c语言编写音乐播放器完整代码(mciSendString函数的使用方法,第一次使用Visual Studio 2019的详细步骤)
本文会尽量让和笔者一样只有一点点可怜的c语言基础的小白看懂,并写出自己的音乐播放器. 笔者使用的编译器是Visual Studio 2019,直接在官网下载就行了.下面是Visual Studio 2 ...
- 学生信息录入系统java代码
学生信息录入系统可以实现学生本身账号密码登陆,然后录入自己关键信息(其中,带*的为必填)最后 会在电脑f盘生成一个自己信息录入完成的文件,并且可以提交信息,进而将文件中的信息展示出来.我觉得这部分的难 ...
最新文章
- Oracle11gR2在9x8hk..Windows18669144449 命名进入Oracle
- 前端学习(2755):配置tabber其他属性
- linux IP 设置
- QuantLib 金融计算——随机过程之概述
- 优秀程序员都有哪些编程习惯?
- 图解:SQL SERVER2005的安装
- 春节假期,我把父母家的网络整瘫了……
- 小程序定位并获取城市编码
- 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资(salary)
- pnpm monorepo的技术选型临界点(Critical adoption)
- JAVA小功能手机短信发送
- 哈尔滨计算机职业学校赵梓琦,哈尔滨赛区复选晋级名单
- python---用单个葫芦丝音节合成完整的曲目
- n-魔方阵(找规律)
- 二, 大数据基础架构Hadoop-HDFS入门和基本操作(基本组成, Shell操作, API操作, 读写流程) hf
- helm安装cert-manager自动化Https(1.8)
- 怎么在 Windows 下生成 文档树 tree?
- 银河英雄传说————牛客
- 帮助粉丝用青泥学术大数据推荐毕业论文选题(围绕 教育信息化2.0、疫情期间线上学习质量问题、Steam教育、智慧教育等突破点来抉择)
- 研究生阶段的大数据专业都学习什么科目?