C語(yǔ)言版學(xué)生成績(jī)管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言版學(xué)生成績(jī)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tmp[]="D:\\tmp"; struct Student { char Name[20]; char No[20]; char Dept[20]; char ClassNo[20]; double Math,Chinese,English; double Ave; bool Pass; }students[500]; bool cmp1(Student s1,Student s2) { return s1.Chinese>s2.Chinese; } bool cmp2(Student s1,Student s2) { return s1.Math>s2.Math; } bool cmp3(Student s1,Student s2) { return s1.English>s2.English; } bool cmp4(Student s1,Student s2) { return s1.Ave>s2.Ave; } //---------------------------------------------------------void Sort(int cmd) /* 1 ChineseSort 2 MathSort 3 EnglishSort 4 AveSort */ int Sort(int cmd) { Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=0; while((n=fread(&stu,sizeof(stu),1,fp)>0)) { students[cnt++]=stu; } fclose(fp); switch(cmd) { case 1: std::sort(students,students+cnt,cmp1); break; case 2: std::sort(students,students+cnt,cmp2); break; case 3: std::sort(students,students+cnt,cmp3); break; case 4: std::sort(students,students+cnt,cmp4); break; default: exit(0); } return cnt; } //---------------------------------------------------------PrintTitle() void PrintTitle() { printf("%-8s%-12s%-12s%-8s%-7s%-7s%-7s%-7s%-s\n","姓名","班級(jí)","學(xué)號(hào)","系院","語(yǔ)文","數(shù)學(xué)","英語(yǔ)","平均分","及格"); } //---------------------------------------------------------Print(Student stu) void Print(Student stu) { printf("%-8s%-12s%-12s%-8s%-7.2lf%-7.2lf%-7.2lf%-7.2lf%-s\n",stu.Name,stu.ClassNo,stu.No,stu.Dept,stu.Chinese,stu.Math,stu.English,stu.Ave,stu.Pass?"是":"否"); } //---------------------------------------------------------PrintNo(char No[]) void PrintNo(char No[]) { Student stu; int n; bool find=0; FILE *fp=fopen(path,"ab+");//以ab+方式打開(kāi)防止data文件不存在時(shí)發(fā)生錯(cuò)誤 while((n=fread(&stu,sizeof(stu),1,fp))>0) { if(!strcmp(stu.No,No)) { find=1; break; } } fclose(fp); if(find) { PrintTitle(); Print(stu); } else puts("未找到!"); } //---------------------------------------------------------PrintClass(char ClassNo[]) void PrintClass(char ClassNo[]) { Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=0; while((n=fread(&stu,sizeof(stu),1,fp)>0)) { if(!strcmp(stu.ClassNo,ClassNo)) { if(cnt==0) PrintTitle(); Print(stu); cnt++; } } fclose(fp); if(cnt==0) puts("無(wú)數(shù)據(jù)"); else printf("共%d條\n",cnt); } //---------------------------------------------------------PrintDept(char Dept[]) void PrintDept(char Dept[]) { Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=0; while((n=fread(&stu,sizeof(stu),1,fp)>0)) { if(!strcmp(stu.Dept,Dept)) { if(cnt==0) PrintTitle(); Print(stu); cnt++; } } fclose(fp); if(cnt==0) puts("無(wú)數(shù)據(jù)"); else printf("共%d條\n",cnt); } //---------------------------------------------------------PrintAll() void PrintAll() { Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=0; while((n=fread(&stu,sizeof(stu),1,fp)>0)) { if(cnt==0) PrintTitle(); Print(stu); cnt++; } fclose(fp); if(cnt==0) puts("無(wú)數(shù)據(jù)"); else printf("共%d條\n",cnt); } //---------------------------------------------------------Input() Student Input() { Student stu; puts("請(qǐng)輸入姓名、班級(jí)、學(xué)號(hào)、系院:"); scanf("%s%s%s%s",&stu.Name,&stu.ClassNo,&stu.No,&stu.Dept); puts("請(qǐng)輸入各科成績(jī):語(yǔ)文、數(shù)學(xué)、英語(yǔ)"); scanf("%lf%lf%lf",&stu.Chinese,&stu.Math,&stu.English); stu.Ave=(stu.Chinese+stu.Math+stu.English)/3; if(stu.Chinese>=60&&stu.Math>=60&&stu.English>=60) stu.Pass=1; else stu.Pass=0; return stu; } //---------------------------------------------------------Insert() void Insert() { int cmd; do{ Student stu=Input(); FILE *fp=fopen(path,"ab+"); fwrite(&stu,sizeof(stu),1,fp); fclose(fp); puts("錄入成功"); puts("繼續(xù)錄入嗎?[1]是[0]否"); scanf("%d",&cmd); }while(cmd==1); } //---------------------------------------------------------Del() void Del() { int cmd,cmd2; char No[20]; do{ puts("請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào):"); scanf("%s",&No); Student stu; FILE *fp=fopen(path,"ab+"); FILE *fp2=fopen(tmp,"wb"); int n,find=0; while((n=fread(&stu,sizeof(stu),1,fp))>0) { if(!strcmp(stu.No,No)) { find=1; Print(stu); puts("確定要?jiǎng)h除嗎?[1]確定[0]取消"); scanf("%d",&cmd2); if(cmd2==1) puts("已刪除"); else fwrite(&stu,sizeof(stu),1,fp2); } else fwrite(&stu,sizeof(stu),1,fp2); } fclose(fp); fclose(fp2); if(find==0) { printf("未找到學(xué)號(hào)%s\n",No); remove(tmp); } else { remove(path); rename(tmp,path); } puts("繼續(xù)刪除嗎?[1]是[0]否"); scanf("%d",&cmd); }while(cmd==1); } //---------------------------------------------------------Change() void Change() { int cmd; char No[20]; do{ puts("請(qǐng)輸入要更改的學(xué)號(hào):"); scanf("%s",&No); Student stu; int find=0; FILE *fp=fopen(path,"ab+"); FILE *fp2=fopen(tmp,"wb"); int n; while((n=fread(&stu,sizeof(stu),1,fp))>0) { if(!strcmp(stu.No,No)) { find=1; stu=Input(); fwrite(&stu,sizeof(stu),1,fp2); } else fwrite(&stu,sizeof(stu),1,fp2); } fclose(fp); fclose(fp2); if(find) { remove(path); rename(tmp,path); puts("更改成功!"); } else { printf("未找到學(xué)號(hào)%s\n",No); remove(tmp); } puts("繼續(xù)更改嗎?[1]是[0]否"); scanf("%d",&cmd); }while(cmd==1); } //---------------------------------------------------------AboutCourse void Chinese() { double sum=0,ave; int pass=0,fail=0,better=0; Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=Sort(1); while((n=fread(&stu,sizeof(stu),1,fp))>0) { sum+=stu.Chinese; if(stu.Chinese>=60) { pass++; if(stu.Chinese>=80) better++; } else fail++; } ave=sum/cnt; puts("語(yǔ)文成績(jī)分析……"); printf("共有%d學(xué)生\n優(yōu)秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt); printf("%-8s%-10s%-12s%-s\n","名次","姓名","學(xué)號(hào)","語(yǔ)文"); for(int i=0;i<cnt;i++) { printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Chinese); } printf("平均分:%.2lf\n",ave); } void Math() { double sum=0,ave; int pass=0,fail=0,better=0; Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=Sort(2); while((n=fread(&stu,sizeof(stu),1,fp))>0) { sum+=stu.Math; if(stu.Math>=60) { pass++; if(stu.Math>=80) better++; } else fail++; } ave=sum/cnt; puts("數(shù)學(xué)成績(jī)分析……"); printf("共有%d學(xué)生\n優(yōu)秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt); printf("%-8s%-10s%-12s%-s\n","名次","姓名","學(xué)號(hào)","數(shù)學(xué)"); for(int i=0;i<cnt;i++) { printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Math); } printf("平均分:%.2lf\n",ave); } void English() { double sum=0,ave; int pass=0,fail=0,better=0; Student stu; FILE *fp=fopen(path,"ab+"); int n,cnt=Sort(3); while((n=fread(&stu,sizeof(stu),1,fp))>0) { sum+=stu.English; if(stu.English>=60) { pass++; if(stu.English>=80) better++; } else fail++; } ave=sum/cnt; puts("英語(yǔ)成績(jī)分析……"); printf("共有%d學(xué)生\n優(yōu)秀:%d人\n及格:%d人\n不及格:%d人\n及格率:%.2lf%%\n",cnt,better,pass,fail,100.0*pass/cnt); printf("%-8s%-10s%-12s%-s\n","名次","姓名","學(xué)號(hào)","英語(yǔ)"); for(int i=0;i<cnt;i++) { printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].English); } printf("平均分:%.2lf\n",ave); } void Average() { Student stu; int n,cnt=Sort(4); double sum=0; FILE *fp=fopen(path,"ab+"); while((n=fread(&stu,sizeof(stu),1,fp))>0) { sum+=stu.Chinese; sum+=stu.Math; sum+=stu.English; } puts("平均成績(jī)分析……"); printf("%-8s%-10s%-12s%-s\n","名次","姓名","學(xué)號(hào)","平均成績(jī)"); for(int i=0;i<cnt;i++) { printf("第%2d名 %-10s%-12s%-8.2lf\n",i+1,students[i].Name,students[i].No,students[i].Ave); } printf("平均分:%.2lf\n",sum/cnt/3); } //---------------------------------------------------------Search() void Search() { int cmd,cmd2; while(1) { system("cls"); puts("[1] 按學(xué)號(hào)查詢(xún)"); puts("[2] 按班級(jí)查詢(xún)"); puts("[3] 輸出全部"); puts("[4] 按系別查詢(xún)"); puts("[5] 課程分析"); puts("[0] 返回主界面"); scanf("%d",&cmd); if(cmd==0) break; switch(cmd) { case 1: { char No[20]; puts("請(qǐng)輸入要查詢(xún)的學(xué)號(hào):"); scanf("%s",&No); PrintNo(No); } break; case 2: { char ClassNo[20]; puts("請(qǐng)輸入要查詢(xún)班級(jí)號(hào):"); scanf("%s",&ClassNo); PrintClass(ClassNo); } break; case 3: PrintAll(); break; case 4: { char Dept[20]; puts("請(qǐng)輸入要查詢(xún)的系別:"); scanf("%s",&Dept); PrintDept(Dept); } break; case 5: while(1) { puts("[1] 語(yǔ)文成績(jī)分析"); puts("[2] 數(shù)學(xué)成績(jī)分析"); puts("[3] 英語(yǔ)成績(jī)分析"); puts("[4] 平均成績(jī)分析"); puts("[0] 返回上一級(jí)"); scanf("%d",&cmd2); if(cmd2==0) break; switch(cmd2) { case 1: Chinese(); break; case 2: Math(); break; case 3: English(); break; case 4: Average(); break; default: puts("不合法指令!"); } } break; default: puts("不合法指令!"); } while(1) { puts("[0] 返回"); puts("[1] 錄入"); puts("[2] 刪除"); puts("[3] 修改"); scanf("%d",&cmd2); if(cmd2==0) break; switch(cmd2) { case 1: Insert(); break; case 2: Del(); break; case 3: Change(); break; default: puts("不合法指令!"); } } } } //---------------------------------------------------------Menu() void ShowMenu1() { int i; puts(""); printf(" "); for(i=0;i<14;i++) putchar(c); printf("成績(jī)管理分析系統(tǒng)"); for(i=0;i<14;i++) putchar(c); puts(""); printf(" %c %c\n",c,c); printf(" %c 請(qǐng)輸入指令 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [0] 退出 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [1] 錄入 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [2] 刪除 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [3] 查詢(xún) %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [4] 更改 %c\n",c,c); printf(" %c %c\n",c,c); printf(" "); for(i=0;i<44;i++) putchar(c); puts(""); } void ShowMenu2() { int i; puts(""); printf(" "); for(i=0;i<14;i++) putchar(c); printf("成績(jī)管理分析系統(tǒng)"); for(i=0;i<14;i++) putchar(c); puts(""); printf(" %c %c\n",c,c); printf(" %c 請(qǐng)輸入指令 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [0] 退出 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [1] 錄入 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [2] 刪除 %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [3] 查詢(xún) %c\n",c,c); printf(" %c %c\n",c,c); printf(" %c [4] 更改 %c\n",c,c); printf(" %c %c\n",c,c); printf(" "); for(i=0;i<44;i++) putchar(c); puts(""); } //---------------------------------------------------------void RandColor() void RandColor() { int a,b; char param[20]="color ",param2[10]; do{ a=rand()%16; b=rand()%16; }while(a==b); sprintf(param2,"%x%x",a,b); strcat(param,param2); system(param); } //---------------------------------------------------------main() int main() { int cmd; srand(time(NULL)); for(int i=0;i<8;i++) { RandColor(); system("cls"); ShowMenu1(); system("cls"); ShowMenu2(); } system("color 0a"); while(1) { system("cls"); ShowMenu1(); printf("[ ]\b\b"); scanf("%d",&cmd); if(cmd==0) break; switch(cmd) { case 1: Insert(); break; case 2: Del(); break; case 3: Search(); break; case 4: Change(); break; default: puts("命令不合法!"); } } return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言編寫(xiě)學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)C語(yǔ)言代碼實(shí)現(xiàn)
- C語(yǔ)言利用結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)源代碼
- C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)實(shí)戰(zhàn)教學(xué)
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- C語(yǔ)言實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)word版
相關(guān)文章
C++ 先對(duì)數(shù)組排序,在進(jìn)行折半查找
以下小編就為大家介紹兩種實(shí)現(xiàn)方法。第一種方法是,選擇排序法+循環(huán)折半查找法。第二種方法是,冒泡排序法+遞歸折半查找法。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10C語(yǔ)言動(dòng)態(tài)內(nèi)存分配圖文講解
給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過(guò)這樣的疑問(wèn)。這一期就來(lái)聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解2023-01-01Qt自定義表頭實(shí)現(xiàn)過(guò)濾功能的方法
這篇文章主要個(gè)給大家介紹了關(guān)于Qt自定義表頭實(shí)現(xiàn)過(guò)濾功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Qt具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07VC++中HTControl控制類(lèi)使用之CHTDlgBase對(duì)話(huà)框基類(lèi)實(shí)例
這篇文章主要介紹了VC++中HTControl控制類(lèi)使用之CHTDlgBase對(duì)話(huà)框基類(lèi),是比較豐富而實(shí)用的功能,需要的朋友可以參考下2014-08-08C++實(shí)現(xiàn)旋轉(zhuǎn)掃描儀的示例代碼
旋轉(zhuǎn)掃描儀(Rotating?Scanner),也稱(chēng)為旋轉(zhuǎn)掃描儀或圓形掃描儀,是一種用于獲取圖像和文檔的設(shè)備,下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用C++實(shí)現(xiàn)旋轉(zhuǎn)掃描儀功能吧2024-02-02c++統(tǒng)計(jì)文件中字符個(gè)數(shù)代碼匯總
本文給大家匯總介紹了3種使用C++實(shí)現(xiàn)統(tǒng)計(jì)文件中的字符個(gè)數(shù)的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-09-09VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總
這篇文章主要介紹了VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法,對(duì)于更好的了解OpenGL很有幫助,需要的朋友可以參考下2014-07-07