1. 程式人生 > 程式設計 >C語言實現學生打卡系統

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],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],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].k);
 }
 printf("是否確認修改該生打卡資訊 否-0 是-1:");
 scanf("%d",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",fp); //讀取檔案內容
 }
 printf("選擇查詢方式:按姓名查詢-1 按學號查詢-2: ");
 scanf("%d",&it);
 if (it == 1)   //按姓名查詢開始
 {
 printf("請輸入需要查詢學生的姓名: ");
 scanf("%s",name);
 if (j == i)
 {
  t = 0;
  printf("未找到該學生資訊,請重新輸入! \n");
 }
 if (j < i)  //查詢成功
 {
  printf("您查詢的資訊為: 姓名%s 學號%s  性別%c  出生日期 %d年%d月%d日  打卡次數%d \n ",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);
 if (j == i)
 {
  t = 0;
  printf("未找到該學生資訊,請重新輸入! \n");
 }
 if (j < i)  //查詢成功
 {
  printf("您查詢的資訊為: 姓名%s 學號%s  性別%c  出生日期 %d年%d月%d日  打卡次數%d \n ",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],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],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].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);
 if (j == i)
 {
  t = 0;
  printf("未找到該學生資訊,請重新輸入! \n");
 }
 if (j < i)  //查詢成功
 {
  printf("您查詢的資訊為: 姓名%s 學號%s  性別%c  打卡日期 %d年%d月%d日  打卡次數%d \n ",stu[j - 1].k);
  score = (float)(stu[j-1].k) / kq * 100;
  printf("該生當前打卡總評分為 %5.2f \n",&x);
 if (x == 1) evaluate();
 else     main();
 }  //按學號查詢結束
 printf("0 返回主選單\n");
 getchar();
 a = getchar();
 getchar();
 if (a == '0')
 main(); //返回主選單     
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。