【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(); //返回主菜單 }總結
以上是生活随笔為你收集整理的【C语言】学生打卡系统(完整代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab离散信号幅频相频特性,信号幅
- 下一篇: fh 幅频特性曲线怎么画fl_测量rc带