C語言實現學生打卡系統
阿新 • • 發佈:2021-01-01
本文例項為大家分享了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(); //返回主選單 }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。