您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用C語言怎么編寫一個(gè)學(xué)生打卡系統(tǒng),內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
題目描述
1.學(xué)生信息及打卡情況的錄入
2.修改某個(gè)學(xué)生的打卡情況
3.查詢某個(gè)學(xué)生的打卡情況
4.曠課學(xué)生的姓名及次數(shù)
5.學(xué)生打卡的總評(píng)分?jǐn)?shù)計(jì)算
完整代碼
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdlib.h> #include <stdio.h> #include <string.h> FILE *fp; //定義文件 char a; //返回選擇變量 float kq = 10; //應(yīng)到打卡次數(shù) struct student { char name[10]; //姓名 char number[11]; //學(xué)號(hào) char sex; //性別 int year; //出生日期--年 int month; //出生日期--月 int day; //出生日期--日 int k; //打卡次數(shù) }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★ ※歡迎進(jìn)入學(xué)生考勤系統(tǒng) ★\n"); printf("\t\t★ ★\n"); printf("\t\t★ 1.學(xué)生信息及打卡情況錄入 ★\n"); printf("\t\t★ ★\n"); printf("\t\t★ 2.修改某個(gè)學(xué)生的打卡情況 ★\n"); printf("\t\t★ ★\n"); printf("\t\t★ 3.查詢某個(gè)學(xué)生的打卡記錄 ★\n"); printf("\t\t★ ★\n"); printf("\t\t★ 4.曠課學(xué)生的姓名及次數(shù) ★\n"); printf("\t\t★ ★\n"); printf("\t\t★ 5.學(xué)生打卡的總評(píng)分?jǐn)?shù)計(jì)算 ★\n"); printf("\t\t★ ★\n"); printf("\t\t★ 6.退出系統(tǒng) ★\n"); printf("\t\t★ ★\n"); printf("\t\t★★★★★★★★★★★★★★★★★★★★★★★★\n"); printf("\t *******請(qǐng)選擇您需要的操作******* "); 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("請(qǐng)重新輸入!\n"); } if (it == 6) printf("\t\t\t退出考勤系統(tǒng),歡迎下次使用!"); system("pause"); return 0; } void input() { int i = 0; int j = 0; int x = 1; printf("************1.學(xué)生信息及打卡情況錄入************\n"); if ((fp = fopen("data.txt", "w")) == NULL) { printf("文件打開失??! \n"); main(); } for (i = 0; x == 1; i++) { for (; j == 0;) { getchar(); printf("請(qǐng)輸入第%d個(gè)學(xué)生的姓名:", i + 1); gets(stu[i].name); printf("請(qǐng)輸入第%d個(gè)學(xué)生的學(xué)號(hào):", i + 1); gets(stu[i].number); printf("請(qǐng)輸入第%d個(gè)學(xué)生的性別(男-m 女-f):", i + 1); stu[i].sex = getchar(); printf("請(qǐng)輸入第%d個(gè)學(xué)生的出生日期(格式:年-月-日):", i + 1); scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day); printf("請(qǐng)輸入第%d個(gè)學(xué)生當(dāng)前的打卡次數(shù):", i + 1); scanf("%d", &stu[i].k); printf("您輸入的信息為: 姓名%s 學(xué)號(hào)%s 性別%c 出生日期 %d年%d月%d日 打卡次數(shù)%d \n ", stu[i].name, stu[i].number, stu[i].sex,stu[i].year, stu[i].month, stu[i].day, stu[i].k); printf("請(qǐng)確定信息 (重輸-0 確定-1): "); scanf("%d", &j); //輸入確認(rèn) } j = 0; if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1) printf("文件寫入錯(cuò)誤! \n"); // 寫入文件 printf("是否繼續(xù)輸入下一個(gè)學(xué)生的信息 終止-0 繼續(xù)-1: "); scanf("%d", &x); //繼續(xù)輸入的選擇 } fclose(fp); printf("返回主菜單-0 :"); getchar(); a = getchar(); getchar(); if (a == '0') main(); //返回主菜單 } //錄入數(shù)據(jù)函數(shù)結(jié)束 void change() { printf("************2.修改某個(gè)學(xué)生的打卡情況************\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) //將文件內(nèi)容讀入內(nèi)存 { printf("文件打開失??! \n"); main(); } for (i = 0; feof(fp) == 0; ++i) { fread(&stu[i], sizeof(struct student), 1, fp); //讀取文件內(nèi)容 } printf("選擇修改對(duì)象:按姓名查找-1 按學(xué)號(hào)查找-2: "); scanf("%d", &it); if (it == 1) //按姓名查找開始 { printf("請(qǐng)輸入需要修改學(xué)生的姓名: "); scanf("%s", &name); for (j = 0; t != 0; j++) t = strcmp(stu[j].name, name); if (j == i) { t = 0; printf("未找到該學(xué)生信息,請(qǐng)重新輸入! \n"); fclose(fp); } if (j < i) //查詢成功 { printf("您查詢的信息為: 姓名%s 學(xué)號(hào)%s 性別%c 打卡次數(shù)%d \n ", stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].k); } printf("是否確認(rèn)修改該生打卡信息 否-0 是-1: "); scanf("%d", &x); if (x == 1) { printf("請(qǐng)輸入新的打卡次數(shù): "); scanf("%d", &stu[j-1].k); //輸入新的打卡次數(shù) if ((fp = fopen("data.txt", "w")) == NULL) //以只寫方式打開 { printf("文件打開失??! \n"); main(); } if (fwrite(&stu[j], sizeof(struct student), 1, fp) != 1) printf("文件寫入錯(cuò)誤! \n"); //寫入文件 } fclose(fp); }//按姓名查找結(jié)束 if (it == 2) //按學(xué)號(hào)查找開始 { printf("請(qǐng)輸入需要修改學(xué)生的學(xué)號(hào):"); scanf("%s", &number); for (j = 0; t != 0; j++) t = strcmp(stu[j].number, number); if (j == i) { t = 0; printf("未找到該學(xué)生信息,請(qǐng)重新輸入! \n"); } if (j < i) //查詢成功 { printf("您查詢的信息為: 姓名%s 學(xué)號(hào)%s 性別%c 打卡次數(shù)%d \n ", stu[j - 1].name, stu[j - 1].number, stu[j - 1].sex, stu[j - 1].k); } printf("是否確認(rèn)修改該生打卡信息 否-0 是-1:"); scanf("%d", &x); if (x == 1) { printf("請(qǐng)輸入新的打卡次數(shù): "); scanf("%d", &stu[j-1].k); //輸入新的打卡次數(shù) if ((fp = fopen("data.txt", "w")) == NULL) //以只寫方式打開 { printf("文件打開失??! \n"); main(); } if (fwrite(&stu[j], sizeof(struct student), 1, fp) != 1) printf("文件寫入錯(cuò)誤! \n"); //寫入文件 } fclose(fp); }//按學(xué)號(hào)查詢結(jié)束 printf("是否繼續(xù)修改其他學(xué)生打卡信息 返回主菜單-0 繼續(xù)-1: "); scanf("%d", &x); if (x == 1) change(); else main(); //返回主菜單 } //修改數(shù)據(jù)函數(shù)內(nèi)容結(jié)束 void search() { printf("************3.查詢某個(gè)學(xué)生的打卡記錄************\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) //將文件內(nèi)容讀入內(nèi)存 { printf("文件打開失敗! \n"); main(); } for (i = 0; feof(fp) == 0; ++i) { fread(&stu[i], sizeof(struct student), 1, fp); //讀取文件內(nèi)容 } printf("選擇查找方式:按姓名查找-1 按學(xué)號(hào)查找-2: "); scanf("%d", &it); if (it == 1) //按姓名查找開始 { printf("請(qǐng)輸入需要查詢學(xué)生的姓名: "); scanf("%s", &name); for (j = 0; t != 0; j++) t = strcmp(stu[j].name, name); if (j == i) { t = 0; printf("未找到該學(xué)生信息,請(qǐng)重新輸入! \n"); } if (j < i) //查詢成功 { printf("您查詢的信息為: 姓名%s 學(xué)號(hào)%s 性別%c 出生日期 %d年%d月%d日 打卡次數(shù)%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); }//按姓名查詢結(jié)束 if (it == 2) //按學(xué)號(hào)查找開始 { printf("請(qǐng)輸入需要查詢學(xué)生的學(xué)號(hào):"); scanf("%s", &number); for (j = 0; t != 0; j++) t = strcmp(stu[j].number, number); if (j == i) { t = 0; printf("未找到該學(xué)生信息,請(qǐng)重新輸入! \n"); } if (j < i) //查詢成功 { printf("您查詢的信息為: 姓名%s 學(xué)號(hào)%s 性別%c 出生日期 %d年%d月%d日 打卡次數(shù)%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("是否繼續(xù)查詢其他學(xué)生打卡信息 返回主菜單-0 繼續(xù)-1: "); scanf("%d", &x); if (x == 1) search(); else main(); //返回主菜單 } void times() { printf("************4.曠課學(xué)生的姓名及次數(shù) ************\n"); int i = 0; int j = 0; int it = 0; if ((fp = fopen("data.txt", "r")) == NULL) //將文件內(nèi)容讀入內(nèi)存 { printf("文件打開失??! \n"); main(); } for (i = 0; feof(fp) == 0; i++) { fread(&stu[i], sizeof(struct student), 1, fp); //讀取文件內(nèi)容 } printf("曠課學(xué)生的姓名及次數(shù)如下:\n "); for (j = 0; j < i-1;j++ ) { if (stu[j].k < kq) printf("姓名%s 學(xué)號(hào)%s 缺課次數(shù)%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.學(xué)生打卡的總評(píng)分?jǐn)?shù)計(jì)算************\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) //將文件讀入內(nèi)存 { printf("文件打開失?。?nbsp;\n"); main(); } for (i = 0; feof(fp) == 0; ++i) fread(&stu[i], sizeof(struct student), 1, fp); //讀取文件內(nèi)容 printf("選擇計(jì)算對(duì)象:1 按姓名查找 2 按學(xué)號(hào)查找: "); scanf("%d", &it); if (it == 1) //按姓名查找開始 { printf("請(qǐng)輸入需要計(jì)算分?jǐn)?shù)的學(xué)生姓名: "); scanf("%s", &name); for (j = 0; t != 0; ++j) t = strcmp(stu[j].name, name); if (j == i) { t = 0; printf("未找到該學(xué)生信息,請(qǐng)重新輸入! \n"); fclose(fp); } if (j < i) //查詢成功 { printf("您查詢的信息為: 姓名%s 學(xué)號(hào)%s 打卡次數(shù)%d \n ", stu[j - 1].name, stu[j - 1].number, stu[j - 1].k); score = stu[j-1].k / kq * 100; printf("該生當(dāng)前打卡總評(píng)分為 %5.2f \n", score); } fclose(fp); printf("是否繼續(xù)計(jì)算其他學(xué)生打卡分?jǐn)?shù) 0否 1是"); scanf("%d", &x); if (x == 1) evaluate(); else main(); } //按姓名查找結(jié)束 if (it == 2) //按學(xué)號(hào)查找開始 { printf("請(qǐng)輸入需要計(jì)算分?jǐn)?shù)的學(xué)生學(xué)號(hào):"); scanf("%s", &number); for (j = 0; t != 0; j++) t = strcmp(stu[j].number, number); if (j == i) { t = 0; printf("未找到該學(xué)生信息,請(qǐng)重新輸入! \n"); } if (j < i) //查詢成功 { printf("您查詢的信息為: 姓名%s 學(xué)號(hào)%s 性別%c 打卡日期 %d年%d月%d日 打卡次數(shù)%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("該生當(dāng)前打卡總評(píng)分為 %5.2f \n", score); } fclose(fp); printf("是否繼續(xù)計(jì)算其他學(xué)生打卡分?jǐn)?shù) 0否 1是"); scanf("%d", &x); if (x == 1) evaluate(); else main(); } //按學(xué)號(hào)查找結(jié)束 printf("0 返回主菜單\n"); getchar(); a = getchar(); getchar(); if (a == '0') main(); //返回主菜單 }
上述內(nèi)容就是使用C語言怎么編寫一個(gè)學(xué)生打卡系統(tǒng),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。