C语言实现学生打卡系统

本文实例为大家分享了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(); //返回主菜单
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现大学生考勤管理系统

    程序设计题:大学生考勤系统 1 问题描述 该系统要求实现一个简单.实用的学生考勤系统程序,主要功能包括考勤数据的新增.删除.修改.查找.统计.排序.输出等.所有统计数据都要利用文件系统保存,以备系统下次运行时使用.通过此课题,熟练掌握文件.数组.指针的各种操作,以及一些基本算法的应用. 2 功能要求 代码要能提供以下几个基本功能. (1)考勤数据是由多条数据记录构成,其信息包括:学号(唯一).姓名.班级.考勤日期(由月和日组成)等等. (2)数据保存形式:所有信息要以文本或二进制文件保存. (3

  • C语言实现学生打卡系统

    本文实例为大家分享了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;

  • C语言实现学生奖学金评定系统

    本文实例为大家分享了C语言实现学生奖学金评定系统的具体代码,供大家参考,具体内容如下 说明: 学生综合积分由文化积分和德育积分构成,文化积分是所有门课程成绩总和除以课程门数(平均分),德育积分是参加各类活动的积分,学生综合积分=文化积分×70%+德育积分×30%.按照学生综合积分排名,获得一等奖学金1名学生,获得二等奖学金2名学生,获得三等奖学金3名学生,项目要求输入班级学生成绩信息,输出获得奖学金的学生名单.已知学生成绩信息包括学号.姓名.英语成绩.网络成绩.C语言成绩.数据库成绩.文化积分.

  • C语言实现学生选课系统完整版

    本文实例为大家分享了C语言实现学生选课系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> int N1,N2,kk1,kk2,kk3; struct couse * head1; struct student * head2; struct couse//课程信息结构体 { int num1; char name1[20]; int score; int nelepeo;//课程已选人数 int Melepeo;//课

  • C语言实现学生选课系统

    本文实例为大家分享了C语言实现学生选课系统的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<windows.h> #include<stdlib.h> #include<conio.h> typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #define CLASS_CLS

  • C语言实现学生考勤系统

    本文实例为大家分享了C语言实现学生考勤系统的具体代码,供大家参考,具体内容如下 项目要求: 学生考勤系统 功能:学生考勤系统应包含各班学生的全部信息.每个学生是一条记录,包括姓名.性别.学号.出勤情况等.本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数. 分步实施: (1)初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数:(2)最低要求:建立一个文件,包括同一个班的10个学生的必要信息,能对文件进 行补充.修订.删除. 采用结构体数

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

  • C语言实现学生学籍管理系统

    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> #include<windows.h> //**********************************结构体************************************* struct score

  • C语言实现学生选修课程系统设计

    本文实例为大家分享了C语言学生选修课程系统的具体代码,供大家参考,具体内容如下 我编程的时间不长,所以这里面肯定有一些错误,或者存在更好的解决方案,欢迎大神上课!谢谢! ps:寻找一起学习的小伙伴! 代码: /********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加的类别,要求编号要唯一,如果添加了重复编号的记录是,则提示数据添加重复并取消添加. *2.查

  • C语言版学生信息管理系统

    本文实例为大家分享了C语言版学生信息管理系统的具体代码,供大家参考,具体内容如下 一.题目分析 1.功能概述 1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生信息 二.算法构造 1.难点解析----对文件的操作 1.1文件读取 FILE * fp; if ((fp = fopen(filename, "r")) ==

随机推荐