C語言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)_第1頁
C語言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)_第2頁
C語言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)_第3頁
C語言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)_第4頁
C語言課程設(shè)計(jì)學(xué)生考勤系統(tǒng)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

語言程序設(shè)計(jì)之青柳念文創(chuàng)作課程設(shè)計(jì)陳說設(shè)計(jì)題目:學(xué)生考勤系統(tǒng)設(shè)計(jì)專業(yè)微電子迷信與工程班級微電131學(xué)生趙楊怡指導(dǎo)教員年學(xué)期設(shè)計(jì)任務(wù):C語言課程設(shè)計(jì)任務(wù)書10題目:學(xué)生考勤系統(tǒng)設(shè)計(jì)功能:學(xué)生考勤系統(tǒng)應(yīng)包括各班學(xué)生的所有信息.每一個(gè)學(xué)生是一條記錄,包括姓名、性別、學(xué)號、日期、節(jié)次、出勤狀況等信息.本系統(tǒng)能夠模擬考勤過程、記錄考勤成就,并能在課程竣過后依據(jù)設(shè)定的考勤評分尺度自動(dòng)給出每一個(gè)學(xué)生的考勤分?jǐn)?shù).要求:1、用C語言實(shí)現(xiàn)程序設(shè)計(jì);2、操控布局體停止有關(guān)信息辦理;3、系統(tǒng)的各個(gè)功能模塊要求用函數(shù)的形式實(shí)現(xiàn);4、界面友善(優(yōu)秀的人機(jī)交互),程序加需要的說明.平常成績:查收辯論成績:設(shè)計(jì)陳說成績:總評成績:指導(dǎo)教員:一、整體設(shè)計(jì)1.程序的整體設(shè)計(jì)◎確立界面,使用戶可選擇操控項(xiàng)目(錄入,改正,查問,評分).◎錄入功能:使用布局體,要求用戶輸入姓名、性別、學(xué)號、日期、節(jié)次、目前出勤狀況等信息,并寫入文件.◎改正功能:使用戶輸入學(xué)號,姓名此中一項(xiàng)能夠改正考勤其信息.對于改正功能的實(shí)現(xiàn),是先將所有文件內(nèi)容讀入到內(nèi)存中,而后改正考勤值,最后再從頭覆蓋寫入文件.◎查問模塊:使用字符串比較函數(shù),操控循環(huán)找到對應(yīng)布局體數(shù)組元素,而后輸出需要信息.關(guān)于查問功能的實(shí)現(xiàn),同改正,是先將所有文件內(nèi)容讀入到內(nèi)存中,而后查找到此中某項(xiàng),最后輸出到屏幕.◎評分模塊:系統(tǒng)依據(jù)總的應(yīng)道考勤數(shù)依據(jù)百分制,求出每一個(gè)學(xué)生的分?jǐn)?shù),并輸出到屏幕.數(shù)據(jù)布局學(xué)生信息用布局體記錄,包括姓名(字符數(shù)組)、性別(字符型)、日期(年月日三個(gè)字符數(shù)組)、節(jié)次(整型)、出狀況(整型).函數(shù)原型申明voidmain( )

//

主函數(shù)voidinput( );

//

錄入數(shù)據(jù)函數(shù)voidchange( );

//

改正數(shù)據(jù)函數(shù)voidsearch( );

//

查問數(shù)據(jù)函數(shù)voidevaluate( );

//

計(jì)算總評函數(shù)二、詳盡設(shè)計(jì)1.main( )函數(shù)voidmain( ){voidinput( );//voidchange( );//voidsearch( );//voidevaluate( );//charitem;system("color34");

錄入數(shù)據(jù)函數(shù)改正數(shù)據(jù)函數(shù)查問數(shù)據(jù)函數(shù)計(jì)算總評函數(shù)★

★□★

★□★

★□★

★□★

★□★

\n");printf("printf("

●●\n");

學(xué)生

考勤管理系

統(tǒng)

\n");printf("

●●\n");printf("

BY

朱勝佳

\n");printf("printf("

●●\n");★

★□★

★□★

★□★

★□★

★□★

\n");printf("printf("

●●\n");

1.

學(xué)生信息及考勤狀況錄入

\n");printf("●●\n");printf("

2.學(xué)生信息及考勤狀況改正

\n");printf("●●\n");printf("

3.學(xué)生信息及考勤狀況查問

\n");printf("◎◎\n");printf("●4.學(xué)生考勤總評分?jǐn)?shù)查問●\n");printf("

\n");printf("★

★□★

★□★

★□★

★□★

★□★\n");//用戶界面printf("\n");printf("請選擇您需要的操控\n");scanf("%c",&item);switch(item){case'1':input( );break;case'2':change( );break;case'3':search( );break;case'4':evaluate( );break;}//實(shí)現(xiàn)功能選擇}流程圖:開始輸出界面switch(item)switch(ite1342record( )search( )goal( )amend( )竣break事2.input( )函數(shù)voidinput( ){inti,j=0,jx=1;printf("************************學(xué)生基本信息錄入*****************************\n");if((fp=fopen("date.txt","w"))==NULL){printf("文件翻開失敗\n");exit(0);}for(i=0;jx==1;i++)//輸入信息循環(huán){for(;j==0;)//輸入確認(rèn)循環(huán){getchar( );printf("請輸入第%d個(gè)學(xué)生的姓名",i+1);gets(stu[i].name);printf("請輸入第%d個(gè)學(xué)生的學(xué)號",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é)生的目前考勤次數(shù)scanf("%d",&stu[i].kq);年

printf("%d

您輸入的信息為月%d日\n

姓名

%s0

學(xué)號重

%s輸

性別

%c1

誕辰確

%d認(rèn)",stu[i].name,stu[i].number,stu[i].sex,stu[i].year,stu[i].month,stu[i].day);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停止

1持續(xù)\n");scanf("%d",&jx);

//

持續(xù)輸入選擇}fclose(fp);printf("0返回主菜單\n");getchar( );a=getchar( );getchar( );if(a=='0')main( );//返回主菜單}流程圖:初步0=>j翻開文件1=>jx0=>ijx=1?Yj=0?Y輸入

i+1

個(gè)學(xué)生信N

輸入

息生信息j值選擇能否確認(rèn)寫入文件輸入jx值選擇能否持續(xù)i+1=>i3.change( )函數(shù)竣事voidchange( ){inti=0,j=0,sway,t,x;charname[10],number[10];printf("**********************學(xué)生考勤改正**************************\n");if((fp=fopen("date.txt","r"))==NULL)將文件內(nèi)容讀入內(nèi)存{printf("文件翻開失敗\n");exit(0);}for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//讀取文件內(nèi)容fclose(fp);printf("選擇查找方式

//1依據(jù)姓名查找

封閉文件2依據(jù)學(xué)號查找

");scanf("%d",&sway);/**********************

依據(jù)姓名

查找初步*************************///if(sway==1){printf("請輸入需要改正學(xué)生的姓名");//printf("i=%d",i);scanf("%s",name);for(j=0;t!=0;j++){t=strcmp(stu[j].name,name);if(j==i){t=0;printf("

未找到您所查問的數(shù)據(jù)

,請從頭輸入

\n");}}if(j<i)

//

查問成功{printf("誕辰%d

您查找的學(xué)生信息以下\n姓名%s學(xué)號%s性別年%d月%d日目前考勤次數(shù)%d\n",stu[j-

%c1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);printf("能否改正該生考勤信息0否1是");

//

選擇能否改正考勤scanf("%d",&x);//if(x==1){printf("請輸入新的考勤值scanf("%d",&stu[j-1].kq);

");

//

輸當(dāng)選擇變量值

輸入新的考勤值if((fp=fopen("date.txt","w"))==NULL)//以只寫方式翻開文件{printf("文件翻開失敗\n");exit(0);}for(j=0;j<i;j++)if(fwrite(&stu[j],sizeof(struct

student),1,fp)!=1)printf("

文件寫入錯(cuò)誤fclose(fp);

\n");//

//

寫入文件封閉文件}}printf("能否持續(xù)改正其余學(xué)生考勤0否1是");scanf("%d",&x);if(x==1)change( );}/**********************依據(jù)姓名查找竣事*************************////**********************依據(jù)學(xué)號查找初步*************************///if(sway==2){printf("請輸入需要改正學(xué)生的學(xué)號");//printf("i=%d",i);scanf("%s",number);for(j=0;t!=0;j++){t=strcmp(stu[j].number,number);if(j==i)t=0;printf("

未找到您所查問的數(shù)據(jù)

,請從頭輸入

\n");}}if(j<i)

//

查問成功{printf("誕辰%d

您查找的學(xué)生信息以下\n姓名%s學(xué)號%s性別年%d月%d日目前考勤次數(shù)%d\n",stu[j-

%c1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);printf("能否改正該生考勤信息0否1是");//選擇能否改正考勤scanf("%d",&x);//輸當(dāng)選擇變量值if(x==1){printf("請輸入新的考勤值");scanf("%d",&stu[j-1].kq);//輸入新的考勤值if((fp=fopen("date.txt","w"))==NULL)//以只寫方式翻開文件{printf("文件翻開失敗\n");exit(0);}for(j=0;j<i;j++)if(fwrite(&stu[j],sizeof(structstudent),1,fp)!=1)printf("文件寫入錯(cuò)誤\n");//寫入文件fclose(fp);//封閉文件}}printf("能否持續(xù)改正其余學(xué)生考勤0否1是");scanf("%d",&x);if(x==1)change( );}/***********************************************///

依據(jù)學(xué)號查找竣事printf("0返回主菜單\n");getchar( );a=getchar( );getchar( );if(a=='0')main( );}初步翻開文件將文件內(nèi)容所有讀入布局輸入sway值選擇查找方體數(shù)組式Sway=1?NY輸入要查Sway=2?輸入要查找找的姓名的學(xué)號查找姓名N輸入X值選擇查找學(xué)號能否改正考勤X=1?Y輸入新的考勤寫入文件值竣事4.search( )函數(shù)voidsearch( ){inti=0,j=0,sway,t,x;charname[10],number[10];printf("***********************學(xué)生信息查問***************************\n");if((fp=fopen("date.txt","r"))==NULL)將文件內(nèi)容讀入內(nèi)存{printf("

文件翻開失敗

\n");exit(0);}for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//讀取文件內(nèi)容fclose(fp);//封閉文件printf("選擇查找方式1依據(jù)姓名查找2依據(jù)學(xué)號查找");scanf("%d",&sway);/**********************依據(jù)姓名查找初步*************************///if(sway==1){printf("請輸入需要改正學(xué)生的姓名");//printf("i=%d",i);scanf("%s",name);for(j=0;t!=0;j++){t=strcmp(stu[j].name,name);if(j==i){t=0;printf("

未找到您所查問的數(shù)據(jù)

,請從頭輸入

\n");}}查問成功{printf("您查找的學(xué)生信息以下\n姓名%s學(xué)號%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].kq);}printf("能否持續(xù)查問其余學(xué)生信息0否1是");scanf("%d",&x);if(x==1)search( );}/**********************依據(jù)姓名查找竣事*************************////**********************依據(jù)學(xué)號查找初步*************************///if(sway==2){printf("請輸入需要改正學(xué)生的學(xué)號");//printf("i=%d",i);scanf("%s",number);for(j=0;t!=0;j++){t=strcmp(stu[j].number,number);if(j==i){printf("

未找到您所查問的數(shù)據(jù)

,請從頭輸入

\n");}}if(j<i)

//

查問成功{printf("誕辰%d

您查找的學(xué)生信息以下\n姓名%s學(xué)號%s性別年%d月%d日目前考勤次數(shù)%d\n",stu[j-

%c1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);}printf("能否持續(xù)查問其余學(xué)生信息0否1是");scanf("%d",&x);if(x==1)search( );}/**********************依據(jù)學(xué)號查找竣事*************************///printf("0返回主菜單\n");getchar( );a=getchar( );getchar( );if(a=='0')main( );}流程圖:初步翻開文件將文件內(nèi)容所有讀入布局輸入sway值選擇查找方體數(shù)組式Sway=1?NY輸入要查Sway=2?輸入要查找找的姓名的學(xué)號查找姓名查找學(xué)號5.evaluate( )輸出該生信息函數(shù)voidevaluate( ){inti=0,j=0,sway,t,x;floatscore;charname[10],number[10];printf("***********************學(xué)生考勤分?jǐn)?shù)計(jì)算**************************\n");if(kqcs==0){printf("請輸入應(yīng)到考勤總數(shù)");//請輸入應(yīng)到考勤總數(shù)scanf("%f",&kqcs);}if((fp=fopen("date.txt","r"))==NULL)//將文件內(nèi)容讀入內(nèi)存{printf("文件翻開失敗\n");exit(0);}for(i=0;feof(fp)==0;i++)fread(&stu[i],sizeof(structstudent),1,fp);//讀取文件內(nèi)容fclose(fp);//封閉文件printf("選擇查找方式1依據(jù)姓名查找2依據(jù)學(xué)號查找");scanf("%d",&sway);/**********************依據(jù)姓名查找初步*************************///if(sway==1){printf("請輸入需要改正學(xué)生的姓名");//printf("i=%d",i);scanf("%s",name);for(j=0;t!=0;j++){t=strcmp(stu[j].name,name);if(j==i){t=0;printf("

未找到您所查問的數(shù)據(jù)

,請從頭輸入

\n");}}if(j<i)

//

查問成功{printf("

您查找的學(xué)生信息以下\n姓名%s學(xué)號%s性別

%c1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);score=(stu[j-1].kq)/kqcs*100;printf("該生目前考勤分?jǐn)?shù)為%5.2f",score);}printf("能否持續(xù)計(jì)算其余學(xué)生考勤分?jǐn)?shù)0否1是");scanf("%d",&x);if(x==1)evaluate( );}/**********************依據(jù)姓名查找竣事*************************////**********************依據(jù)學(xué)號查找初步*************************///if(sway==2){printf("請輸入需要改正學(xué)生的學(xué)號");//printf("i=%d",i);scanf("%s",number);for(j=0;t!=0;j++){t=strcmp(stu[j].number,number);if(j==i){t=0;printf("

未找到您所查問的數(shù)據(jù)

,請從頭輸入

\n");}}if(j<i)

//

查問成功{printf("誕辰%d

您查找的學(xué)生信息以下\n姓名%s學(xué)號%s性別年%d月%d日目前考勤次數(shù)%d\n",stu[j-

%c1].name,stu[j-1].number,stu[j-1].sex,stu[j-1].year,stu[j-1].month,stu[j-1].day,stu[j-1].kq);score=(stu[j-1].kq)/kqcs*100;printf("該生目前考勤分?jǐn)?shù)為%5.2f",score);}printf("能否持續(xù)計(jì)算其余學(xué)生考勤分?jǐn)?shù)0否1是");scanf("%d",&x);if(x==1)evaluate( );}/**********************依據(jù)學(xué)號查找竣事*************************///printf("0返回主菜單\n");getchar( );a=getchar( );getchar( );if(a=='0')main( );}流程圖:初步輸入應(yīng)到考勤次數(shù)kqcs值翻開文件將文件內(nèi)容所有讀入布局輸入sway值選擇查找方體數(shù)組式Sway=1?NY輸入要查Sway=2?輸入要查找找的姓名的學(xué)號查找姓名查找學(xué)號輸出該生信息計(jì)算考勤分?jǐn)?shù)輸出考勤分?jǐn)?shù)竣事三、測試及調(diào)試(測試方案、存在的問題及辦理方法)測試方案:依據(jù)每一個(gè)函數(shù)功能停止測試,在做完每一個(gè)函數(shù)對其停止測試,主函數(shù)測試,先將所有需要的功能模塊函數(shù)設(shè)置為空,每一個(gè)函數(shù)用一個(gè)printf語句來測試主函數(shù).1.存在問題:初步將誕辰定義為字符數(shù)組,當(dāng)用scanf來輸入年月日時(shí),年月日之間用空格分開,但在輸出時(shí)發(fā)現(xiàn)年月日出現(xiàn)錯(cuò)誤.剖析原由:用scanf輸入年月日時(shí),系統(tǒng)會(huì)把用來分開的空格當(dāng)成字符讀入.辦理方法:將年月日定義為整型,這樣便能夠用scanf輸入,用空格分開.存在問題2:在查找數(shù)據(jù)時(shí),需要先將所有數(shù)據(jù)讀入一個(gè)布局體數(shù)組,在讀取后未封閉文件,履行查找時(shí)查找不到有關(guān)信息.剖析原由:再操控for循環(huán)讀取所有文件內(nèi)容后,文件指針將會(huì)移至文件末端,這樣再履行查找時(shí)就會(huì)從文件末端初步,明顯不切合要求,因此會(huì)出現(xiàn)錯(cuò)誤.辦理方法:在讀取完數(shù)據(jù)后先封閉文件,在查找時(shí)再次翻開文件,這時(shí)文件指針就會(huì)指向文件開首.存在問題3:再多個(gè)使用getchar或許gets輸入的時(shí)候,會(huì)出現(xiàn)直接跳過輸入的狀況.剖析原由:在使用getchar或許gets輸入的時(shí)候,系統(tǒng)會(huì)將前一步用來確認(rèn)履行的回車當(dāng)作字符讀入,致使跳過該步輸入.辦理方法:再getchar或許gets前面加上getchar( )語句,讀掉回車,下邊的getchar或許gets便能夠正常輸入.四、小結(jié)經(jīng)過編寫該程序,熟習(xí)了C語言的基本語法,選擇,循環(huán)等布局,深入演練了函數(shù)的調(diào)用方法,和文件的讀寫方法,熟習(xí)了布局體的使用,更為深入了面向過程語言思想,和一些基本算法.經(jīng)過對程序的后期調(diào)試,熟習(xí)了C稀有錯(cuò)誤,鍛煉了思想的嚴(yán)實(shí)性,和齊備性.經(jīng)過對程序的說明和畫流程圖,形成了一套自己編程的風(fēng)格,和清晰地思路,使思想更為條理化,清楚化.附件:主要源程序代碼(需打?。?include<stdio.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論