C語言實(shí)現(xiàn)學(xué)生打卡系統(tǒng)
更新時(shí)間:2020年12月30日 13:20:43 作者:ly_1115
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生打卡系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)學(xué)生打卡系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
題目描述
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 *******請選擇您需要的操作******* ");
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退出考勤系統(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("請輸入第%d個(gè)學(xué)生的姓名:", i + 1);
gets(stu[i].name);
printf("請輸入第%d個(gè)學(xué)生的學(xué)號(hào):", i + 1);
gets(stu[i].number);
printf("請輸入第%d個(gè)學(xué)生的性別(男-m 女-f):", i + 1);
stu[i].sex = getchar();
printf("請輸入第%d個(gè)學(xué)生的出生日期(格式:年-月-日):", i + 1);
scanf("%d%d%d", &stu[i].year, &stu[i].month, &stu[i].day);
printf("請輸入第%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("請確定信息 (重輸-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("選擇修改對象:按姓名查找-1 按學(xué)號(hào)查找-2: ");
scanf("%d", &it);
if (it == 1) //按姓名查找開始
{
printf("請輸入需要修改學(xué)生的姓名: ");
scanf("%s", &name);
for (j = 0; t != 0; j++)
t = strcmp(stu[j].name, name);
if (j == i)
{
t = 0;
printf("未找到該學(xué)生信息,請重新輸入! \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("請輸入新的打卡次數(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("請輸入需要修改學(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é)生信息,請重新輸入! \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("請輸入新的打卡次數(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("請輸入需要查詢學(xué)生的姓名: ");
scanf("%s", &name);
for (j = 0; t != 0; j++)
t = strcmp(stu[j].name, name);
if (j == i)
{
t = 0;
printf("未找到該學(xué)生信息,請重新輸入! \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("請輸入需要查詢學(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é)生信息,請重新輸入! \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("文件打開失?。?\n");
main();
}
for (i = 0; feof(fp) == 0; ++i)
fread(&stu[i], sizeof(struct student), 1, fp); //讀取文件內(nèi)容
printf("選擇計(jì)算對象:1 按姓名查找 2 按學(xué)號(hào)查找: ");
scanf("%d", &it);
if (it == 1) //按姓名查找開始
{
printf("請輸入需要計(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é)生信息,請重新輸入! \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("請輸入需要計(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é)生信息,請重新輸入! \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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
C++靜態(tài)變量,常量的存儲(chǔ)位置你真的了解嗎
這篇文章主要介紹了C++中靜態(tài)變量與常量的存儲(chǔ)位置的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助2021-08-08
VSCode配置C++環(huán)境的方法步驟(MSVC)
這篇文章主要介紹了VSCode配置C++環(huán)境的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05

