C語(yǔ)言實(shí)現(xiàn)學(xué)生考勤系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)學(xué)生考勤系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
項(xiàng)目要求:
學(xué)生考勤系統(tǒng)
功能:學(xué)生考勤系統(tǒng)應(yīng)包含各班學(xué)生的全部信息。每個(gè)學(xué)生是一條記錄,包括姓名、性別、學(xué)號(hào)、出勤情況等。本系統(tǒng)可模擬考勤過(guò)程,記錄考勤結(jié)果,并能夠在課程結(jié)束后按照設(shè)定的考勤評(píng)分標(biāo)準(zhǔn)自動(dòng)給出每個(gè)學(xué)生的考勤分?jǐn)?shù)。
分步實(shí)施:
(1)初步完成總體設(shè)計(jì),搭好框架,確定人機(jī)對(duì)話界面,確定函數(shù)個(gè)數(shù);
(2)最低要求:建立一個(gè)文件,包括同一個(gè)班的10個(gè)學(xué)生的必要信息,能對(duì)文件進(jìn) 行補(bǔ)充、修訂、刪除。
采用結(jié)構(gòu)體數(shù)組讀入讀出文件(二進(jìn)制形式寫(xiě)進(jìn)data.txt文件)
#include<stdio.h> #include<stdlib.h> #include<string.h> const int N = 1010; const int LEN = 20; const int CLAstunumber = 10;//每個(gè)班CLAstunumber人? typedef struct { ?? ?char attdate[LEN];//日期 ?? ?int atts;//出勤情況 0缺勤 1出勤 ? }attdent; typedef struct { ?? ?char stname[LEN]; ?? ?char sex[LEN]; ?? ?int stnumber; ?? ?int core; ?? ?attdent stattdent[N];//最多紀(jì)錄N個(gè)日期的考勤情況?? ? }studentinf; int cnt;//記錄日期數(shù)組用到哪里? studentinf students[CLAstunumber]; void menu() { ?? ?printf("========================================================\n"); ?? ?printf("0.學(xué)生信息錄入\n"); ?? ?printf("1.開(kāi)始考勤\n"); ?? ?printf("2.修改學(xué)生考勤紀(jì)錄\n"); ?? ?printf("3.生成并查看學(xué)生考勤分?jǐn)?shù)\n"); ?? ?printf("4.讀取數(shù)據(jù)\n"); ?? ?printf("5.保存數(shù)據(jù)\n"); ?? ?printf("6.退出\n"); ?? ?printf("========================================================\n"); } void studentinput() { ?? ?//錄入操作? ?? ?for(int i = 0 ; i < CLAstunumber; i ++) ?? ?{ ?? ??? ?printf("----------------------------------------\n"); ?? ??? ?printf("請(qǐng)輸入學(xué)生姓名: ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ?studentinf student1; ?? ??? ?scanf("%s",student1.stname); ?? ??? ?printf("請(qǐng)輸入學(xué)生性別: ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ?scanf("%s",student1.sex); ?? ??? ?printf("請(qǐng)輸入學(xué)生學(xué)號(hào): ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ??? ?scanf("%d",&student1.stnumber); ?? ??? ?student1.core = 0; ?? ??? ?//(student1.stattdent[N]).attdate[LEN] = '0'; ?? ??? ?students[i] = student1; ?? ??? ?printf("----------------------------------------\n"); ?? ?} } void attcheck() { ?? ?//考勤操作? ?? ?for(int i = 0;i < CLAstunumber ; i ++) ?? ?{ ?? ??? ?students[i]; ?? ??? ?printf("------------------------------\n"); ?? ??? ?printf("姓名:%s\n",students[i].stname); ?? ??? ?printf("性別:%s\n",students[i].sex); ?? ??? ?printf("學(xué)號(hào):%d\n",students[i].stnumber); ?? ??? ?printf("請(qǐng)輸入時(shí)間:XXXX/XX/XX\n"); ?? ??? ?scanf("%s",(students[i].stattdent[cnt]).attdate); ?? ??? ?printf("請(qǐng)輸入該學(xué)生出勤情況:(0表示缺勤,1表示出勤)\n"); ?? ??? ?scanf("%d",&(students[i].stattdent[cnt]).atts); ?? ??? ?cnt ++; ?? ??? ?printf("------------------------------\n"); ?? ??? ? ?? ?} } void changeinf() { ?? ?//遍歷修改 ?? ?char fname[LEN]; ?? ?char fdate[LEN]; ?? ?printf("----------------------------------\n"); ?? ?printf("請(qǐng)輸入學(xué)生姓名:\n"); ?? ?scanf("%s",fname); ?? ?int stand1;//退出第一層for標(biāo)準(zhǔn)? ?? ?for(int i = 0;i < CLAstunumber; i ++)? ?? ?{ ?? ??? ?if(!strcmp(fname,students[i].stname)) ?? ??? ?{ ?? ??? ??? ?printf("學(xué)生姓名:%s\n",students[i].stname); ?? ??? ??? ?printf("請(qǐng)輸入時(shí)間:(XXXX/XX/XX)\n"); ?? ??? ??? ?scanf("%s",fdate); ?? ??? ??? ?for(int j = 0;j < cnt ; j ++) ?? ??? ??? ?{ ?? ??? ??? ??? ?if(!strcmp(fdate,(students[i].stattdent[j]).attdate)) ?? ??? ??? ??? ?printf("學(xué)生:%s",fname); ?? ??? ??? ??? ?printf("考勤時(shí)間:%s\n",fdate); ?? ??? ??? ??? ?printf("出勤情況:%d\n",(students[i].stattdent[j]).atts); ?? ??? ??? ??? ?printf("請(qǐng)輸入修改后的出勤情況:\n"); ?? ??? ??? ??? ?scanf("%d",&(students[i].stattdent[j]).atts); ?? ??? ??? ??? ?printf("修改成功!\n"); ?? ??? ??? ??? ?stand1 = 1; ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?if(stand1 == 1) break; ?? ??? ?} ?? ?} ?? ?printf("----------------------------------\n"); } void checkcore() { ?? ?//生成考勤分?jǐn)?shù) = 出勤次數(shù)即分?jǐn)?shù)? ?? ?for(int i = 0;i < CLAstunumber; i++) ?? ?{ ?? ??? ?printf("----------------------------\n"); ?? ??? ?printf("學(xué)生姓名:%s\n",students[i].stname); ?? ??? ?printf("學(xué)生性別:%s\n",students[i].sex); ?? ??? ?printf("學(xué)生學(xué)號(hào):%d\n",students[i].stnumber); ?? ??? ?//計(jì)算分?jǐn)?shù) ?? ??? ?students[i].core = 0; ?? ??? ?for(int j = 0;j < cnt ; j ++) ?? ??? ?{ ?? ??? ??? ?students[i].core += (students[i].stattdent[j]).atts;?? ? ?? ??? ?}? ?? ??? ?printf("考勤分?jǐn)?shù):%d\n",students[i].core);?? ? ?? ??? ?printf("----------------------------\n"); ?? ?} ?? ? } void readdata() { ?? ?FILE *fp = NULL; ?? ?fp = fopen("data.txt","rb"); ?? ? ?? ?//讀出? ?? ?int i = 0; ?? ?while(!feof(fp)) ?? ?{ ?? ??? ?fread(&students[i],sizeof(studentinf),1,fp); ?? ??? ?i ++; ?? ?} ?? ?i --; ?? ? ?? ?cnt = i; ?? ? ?? ?fclose(fp); ??? ? ?? ?printf("讀取成功!\n"); } void savedata() { ?? ?FILE *fp = NULL; ?? ?fp = fopen("data.txt","wb"); ?? ?//寫(xiě)入 ?? ?for(int i = 0;i < CLAstunumber ?; i ++) ?? ?{ ?? ??? ?fwrite(&students[i],sizeof(studentinf),1,fp); ?? ?} ?? ? ?? ?fclose(fp); ? ?? ?printf("保存成功!\n");?? ? } int main() { ?? ?menu(); ?? ?int op; ?? ?while(1) ?? ?{ ?? ??? ?scanf("%d",&op); ?? ??? ?if(op == 0) ?? ??? ?{ ?? ??? ??? ?system("cls"); ?? ??? ??? ?studentinput(); ?? ??? ??? ?menu(); ?? ??? ?} ?? ??? ?else if(op == 1) ?? ??? ?{ ?? ??? ??? ?system("cls"); ?? ??? ??? ?attcheck(); ?? ??? ??? ?menu(); ?? ??? ?}? ?? ??? ?else if(op == 2) ?? ??? ?{ ?? ??? ??? ?changeinf(); ?? ??? ??? ?menu(); ?? ??? ?} ?? ??? ?else if(op == 3) ?? ??? ?{ ?? ??? ??? ?system("cls"); ?? ??? ??? ?checkcore(); ?? ??? ??? ?menu(); ?? ??? ?} ?? ??? ?else if(op == 4) ?? ??? ?{ ?? ??? ??? ?system("cls"); ?? ??? ??? ?readdata(); ?? ??? ??? ?menu(); ?? ??? ?} ?? ??? ?else if(op == 5) ?? ??? ?{ ?? ??? ??? ?system("cls"); ?? ??? ??? ?savedata(); ?? ??? ??? ?menu(); ?? ??? ?} ?? ??? ?else if(op == 6) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else printf("input error!\n"); ?? ?} ?? ?? }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于C語(yǔ)言實(shí)現(xiàn)迷宮游戲的示例代碼
這篇文章主要介紹了基于C語(yǔ)言如何實(shí)現(xiàn)簡(jiǎn)單的迷宮游戲,對(duì)于學(xué)習(xí)游戲開(kāi)發(fā)的朋友相信有一定的借鑒價(jià)值,需要的朋友可以參考下2022-05-05C語(yǔ)言實(shí)現(xiàn)訪問(wèn)及查詢(xún)MySQL數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)訪問(wèn)及查詢(xún)MySQL數(shù)據(jù)庫(kù)的方法,涉及C語(yǔ)言基于libmysql.lib實(shí)現(xiàn)訪問(wèn)MySQL數(shù)據(jù)庫(kù)的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01C語(yǔ)言修煉之路靈根孕育源流出?初識(shí)C言大道生下篇
C語(yǔ)言是一門(mén)面向過(guò)程、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā)。C語(yǔ)言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。C語(yǔ)言是僅產(chǎn)生少量的機(jī)器語(yǔ)言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語(yǔ)言2022-03-03C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序圖文示例
這篇文章主要為大家介紹了C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05關(guān)于C語(yǔ)言 文件讀寫(xiě) feof 函數(shù)
這篇文章主要給大家分享的是關(guān)于C語(yǔ)言文件讀寫(xiě) feof 函數(shù) ,feof 是 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),其功能是檢測(cè)文件結(jié)束符,如果文件結(jié)束,則返回非 0 值,否則返回 0,感興趣的小伙伴請(qǐng)跟小編一起來(lái)看看下面文章的內(nèi)容吧2021-10-10Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單易上手版
在Qt應(yīng)用程序里,可實(shí)現(xiàn)遠(yuǎn)程MySQL服務(wù)器的連接操作,本文就來(lái)介紹一下Qt6遠(yuǎn)程連接MySQL數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11C語(yǔ)言實(shí)現(xiàn)Flappy Bird小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)Flappy Bird小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12