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)查詢");
puts("[2] 按班級(jí)查詢");
puts("[3] 輸出全部");
puts("[4] 按系別查詢");
puts("[5] 課程分析");
puts("[0] 返回主界面");
scanf("%d",&cmd);
if(cmd==0)
break;
switch(cmd)
{
case 1:
{
char No[20];
puts("請(qǐng)輸入要查詢的學(xué)號(hào):");
scanf("%s",&No);
PrintNo(No);
}
break;
case 2:
{
char ClassNo[20];
puts("請(qǐng)輸入要查詢班級(jí)號(hào):");
scanf("%s",&ClassNo);
PrintClass(ClassNo);
}
break;
case 3:
PrintAll();
break;
case 4:
{
char Dept[20];
puts("請(qǐng)輸入要查詢的系別:");
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] 查詢 %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] 查詢 %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-10
C語(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-01
Qt自定義表頭實(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-07
VC++中HTControl控制類使用之CHTDlgBase對(duì)話框基類實(shí)例
這篇文章主要介紹了VC++中HTControl控制類使用之CHTDlgBase對(duì)話框基類,是比較豐富而實(shí)用的功能,需要的朋友可以參考下2014-08-08
C++實(shí)現(xiàn)旋轉(zhuǎn)掃描儀的示例代碼
旋轉(zhuǎn)掃描儀(Rotating?Scanner),也稱為旋轉(zhuǎn)掃描儀或圓形掃描儀,是一種用于獲取圖像和文檔的設(shè)備,下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用C++實(shí)現(xiàn)旋轉(zhuǎn)掃描儀功能吧2024-02-02
c++統(tǒng)計(jì)文件中字符個(gè)數(shù)代碼匯總
本文給大家匯總介紹了3種使用C++實(shí)現(xiàn)統(tǒng)計(jì)文件中的字符個(gè)數(shù)的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-09-09
VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總
這篇文章主要介紹了VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法,對(duì)于更好的了解OpenGL很有幫助,需要的朋友可以參考下2014-07-07

