本篇文章为大家展示了使用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语言怎么编写一个学生打卡系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。