當前位置:成語大全網 - 新華字典 - 求c語言高手幫忙編程~非常感謝~簡單的學生成績管理系統

求c語言高手幫忙編程~非常感謝~簡單的學生成績管理系統

# include & ltstdio.h & gt

# include & ltstring.h & gt

# include & ltstdlib.h & gt

# include & ltconio.h & gt

#定義最大20

void read _ file();//導入數據

void dis _ menu();//顯示菜單

void ave _英語();//計算英語平均分

void ave _ math();//計算數學平均分

void ave _ c();//計算C語言平均分

void ave _ moral();//計算思想訓練平均分。

void save _ score();//保存班級報告表單

void save _ ave();//保存每個班級的平均分。

void compute();//計算每個階段的人數。

void排序名稱();//按名稱排序

void sort _ ave();//按平均分排序

void display _ 1(int);//打印學生的個人信息

void display _ 2();//根據學號打印學生報告單。

void display _ 3();//按姓名打印學生成績單。

int changeStrInt(char * ch);//將字符串轉換為整數。

typedef結構

{

int num//學生編號

char name[30];

浮動英語;

浮點數學;

浮動道德;//休斯

浮動c;

浮動大街;

int號;//排名

}斯圖;

typedef結構

{

int exce _ num

int good _ num

int medi _ num

int傳遞數量;

int fail_num

} subsec

Stu stu[MAX]={0," \0 ",0 };

subsec sub[4]= { 0 };

bool tag=true,Tag = true;

float sum _ eng = 0;

float sum _ math = 0;

float sum _ moral = 0;

float sum _ c = 0;

int class _ num = 0;

float ave _ eng = 0;

float ave _ mat = 0;

float ave _ mor = 0;

float ave _ C = 0;

//test.cpp

void main()

{

dis _ menu();

}

//test.cpp

void dis_menu()

{

int i=0,j=0,k=0,n = 0;

char ch,c;

做{

printf(" * * * * * * * *歡迎使用學生管理系統* * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * *輸入要執行的操作* * * * * * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * * 1:原始數據導入* * * * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * * 2:信息查詢(結果顯示)* * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * * 3:信息檢索(排序)* * * * * * * * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * * 4:數據保存(報表)* * * * * * * * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * * 5:數據存儲(段表)* * * * * * * * * * * * * * * * * * * * \ n ");

Printf ("* * * * * * * * 0:退出系統* * * * * * * * * * * * * * * * * * * * \ n ");

fflush(stdin);

scanf("%d ",& ampI);

開關(壹)

{

案例1:

read _ file();

打破;

案例二:

printf(" * * * * * * * * * * 1:* * * * * * * * * * * * * * * \ n ");

printf(" * * * * * * * * * * 2:按名稱顯示* * * * * * * * * * * * * * * * \ n ");

fflush(stdin);

fflush(stdin);

scanf("%d ",& ampj);

開關(j)

{

案例1:

顯示_ 2();

打破;

案例二:

顯示_ 3();

打破;

默認:break

}破;

案例三:printf ("* * * * * * * * * 1:按名稱排序* * * * * * * * * * * * * * * * * * \ n ");

printf(" * * * * * * * * * * 2:按平均分排序* * * * * * * * * * * * * * * * * * \ n ");

fflush(stdin);

scanf("%d ",& ampk);

開關(k)

{

案例1:

sort_name()。

Printf("要打印學生成績信息嗎?(Y或N)\ N ");

fflush(stdin);

c = getchar();

開關(c)

{

案例“Y”:

案例“y”:

Tag = false

Printf("學號\t \t \tname \英語\t c語言\ t高級數學\ t思維\ t平均成績\ n ");

for(n = 0;n & ltclass _ numn++)

display _ 1(n);

打破;

默認:break

}

打破;

案例二:

sort _ ave();

Printf("要打印學生成績信息嗎?(Y或N)\ N ");

fflush(stdin);

c = getchar();

開關(c)

{

案例“Y”:

案例“y”:

Tag = false

Printf("學號\t \t \tname \英語\t c語言\ t高級數學\ t思維\ t平均成績\ n ");

for(n = 0;n & ltclass _ numn++)

display _ 1(n);

打破;

默認:break

}

默認:break

}破;

案例4:

save _ score();

打破;

案例5:

save _ ave();

打破;

默認值:

Printf("感謝使用這個系統!\ n ");

系統(“退出”);

退出(0);

}

Printf("要繼續嗎?(Y或N)\ N ");

fflush(stdin);

ch = getchar();

系統(“cls”);

} while(ch = = ' Y ' | | ch = = ' Y ');

}

int changeStrInt(char *ch)

{ int a=1,b=0,c=0,I;

for(I = strlen(ch)-1;我& gt=0;我-)

{ if(ch[I]& lt;= ' 9 ' & amp& ampch[I]& gt;='0')

{ b = a *(ch[I]-' 0 ');

a = a * 10;

c = c+b;

}

其他

{printf("%c "是非法的,這個字符不能轉換成塑料!\n ",ch[I]);

返回0;

}

}

返回c;

}

void read_file()

{

FILE * fp

char file path[20];

多頭頭寸;char ch

int I = 0;char str _ num[20]= " \ 0 ";

char str _ English[20]= " \ 0 ";char str _ c[20]= " \ 0 ";

char str _ math[20]= " \ 0 ";char str _ moral[20]= " \ 0 ";

Printf("輸入原始數據存儲路徑:\ n ");

fflush(stdin);

獲取(文件路徑);

if((fp=fopen(filepath," r))= = NULL)

{

Printf("原始數據導入失敗,請檢查輸入路徑是否正確\ n ");

返回;

}

而(我!=1)

{

ch = fgetc(FP);

if(ch=='\n ')

{

位置= ftell(FP);

i++;

}

}

fseek(fp,position,SEEK _ SET);//定位

for(I = 0;我& lt馬克斯& amp& amp!feof(FP);i++)

{

fscanf(fp," \ t % s \ t % s \ t % s \ t % s \ t % s \ t % s \ t % s \ n ",str_num,stu[i]。姓名,

str_english,str_c,str_math,str _ moral);

斯圖[我]。num = changeStrInt(str _ num);

斯圖[我]。English =(float)changeStrInt(str _ English);

斯圖[我]。math =(float)changeStrInt(str _ math);

斯圖[我]。c =(float)changeStrInt(str _ c);

斯圖[我]。moral =(float)changeStrInt(str _ moral);

斯圖[我]。ave=(stu[i]。英語+stu[i]。數學+斯圖[i]。c+stu[i]。道德)/4;

class _ num++;

sum_math+=stu[i]。數學;

sum_eng+=stu[i]。英語;

sum_c+=stu[i]。c;

sum_moral+=stu[i]。道德;

}

fclose(FP);

ave _英語();

ave _ math();

ave _ c();

ave _ moral();

計算();

Printf("原始數據導入成功!\ n ");

}

void ave_english()

{

ave _ eng = sum _ eng/class _ num;

}

void ave_math()

{

ave _ mat = sum _ math/class _ num;

}

void ave_c()

{

ave _ C = sum _ C/class _ num;

}

void ave_moral()

{

ave _ mor = sum _ moral/class _ num;

}

void sort_ave()

{

Stu temp

int i,j;

for(I = 1;我& ltclass _ numi++)

for(j = 1;j & lt= class _ num-I;j++)

{

if(stu[j-1]。ave & lt斯圖[j]。ave)

{

temp = stu[j-1];

stu[j-1]= stu[j];

stu[j]= temp;

}

斯圖[i-1]。no = I;

}

斯圖[i-1]。no = I;

如果(標簽)

{

Printf("排序完成!\ n ");

}

}

void sort_name()

{

Stu temp

int i,j;

for(I = 1;我& ltclass _ numi++)

for(j = 1;j & lt= class _ num-I;j++)

{

if(strcmp(stu[j-i].姓名,斯圖[j]。姓名)>0)//按照字典從大到小的順序。

{

temp = stu[j-1];

stu[j-1]= stu[j];

stu[j]= temp;

}

}

如果(標簽)

{

Printf("排序完成!\ n ");

}

}

void計算()

{

int I;

//英語

for(I = 0;我& ltclass _ numi++)

{

如果(斯圖[我]。英語& lt60)

sub[0]。fail _ num++;

else if(stu[i]。英語& lt70)

sub[0]。pass _ num++;

else if(stu[i]。英語& lt80)

sub[0]。medi _ num++;

else if(stu[i]。英語& lt90)

sub[0]。good _ num++;

else sub[0]。exce _ num++;

}

//c

for(I = 0;我& ltclass _ numi++)

{

如果(斯圖[我]。c & lt60)

sub[1]。fail _ num++;

else if(stu[i]。c & lt70)

sub[1]。pass _ num++;

else if(stu[i]。c & lt80)

sub[1]。medi _ num++;

else if(stu[i]。c & lt90)

sub[1]。good _ num++;

else sub[1]。exce _ num++;

}

//高數字

for(I = 0;我& ltclass _ numi++)

{

如果(斯圖[我]。數學& lt60)

分段[2]。fail _ num++;

else if(stu[i]。數學& lt70)

分段[2]。pass _ num++;

else if(stu[i]。數學& lt80)

分段[2]。medi _ num++;

else if(stu[i]。數學& lt90)

分段[2]。good _ num++;

其他

sub[1]。exce _ num++;

}

//休斯

for(I = 0;我& ltclass _ numi++)

{

如果(斯圖[我]。道德& lt60)

分段[3]。fail _ num++;

else if(stu[i]。道德& lt70)

分段[3]。pass _ num++;

else if(stu[i]。道德& lt80)

分段[3]。medi _ num++;

else if(stu[i]。道德& lt90)

分段[3]。good _ num++;

else sub[3]。exce _ num++;

}

}

void save_score()

{

char file path[30];

FILE * fp

int I;

tag = false

Printf("輸入保存路徑:\ n ");

fflush(stdin);

獲取(文件路徑);

if((fp=fopen(filepath," w+")= = NULL)

{

Printf("保存失敗,請檢查文件名和路徑是否正確!\ n ");

返回;

}

sort _ ave();//保存時先用“按平均分排序”排序,否則排序輸出錯誤。

Fprintf(fp," Rank \t學號\t姓名\t英語\tc語言\t高等數學\t思維\t平均成績\ n ");

for(I = 0;我& ltclass _ numi++)

{

fprintf(fp," % d \ t % d \ t % s \ t % . 2f \ t % . 2f \ t % . 2f \ t % . 2f \ t % . 2f \ t % . 2f \ n ",stu[i]。不,斯圖[我]。num,

斯圖[我]。姓名,斯圖[我]。英語,斯圖[我]。c,斯圖[我]。數學,斯圖[我]。道德,斯圖[我]。ave);

}

fclose(FP);

Printf("學生成績文件已經保存!\ n ");

}

void save_ave()

{

FILE * fptag = false

char file path[30];

Char課程[4][30]={《英語》《C語言》《高等數學》《思維》};

float ave[4]={ave_eng,ave_C,ave_mat,ave _ mor };

int I;

Printf("輸入文件保存路徑:\ n ");

fflush(stdin);

獲取(文件路徑);

if((fp=fopen(filepath," w+")= = NULL)

{

Printf("保存失敗,請檢查文件名和路徑是否正確!");

返回;

}

sort_name()。

Fprintf(fp,"編號\ t課程名稱\ t平均課程成績\ t優秀\ t良好\ t公平\ t通過\ t失敗\ n ");

for(I = 0;我& lt4;i++)

{

fprintf(fp," % d \ t % s \ t \ t % . 2f \ t \ t % d \ t % d \ t % d \ t % d \ t % d \ n ",i+1,*(course+i),ave[i],

子[i]。exce _ num,sub[i]。good_num,sub[i]。medi_num,sub[i]。pass_num

子[i]。失敗數量);

}

fclose(FP);

Printf("學生成績文件已經保存!\ n ");

}

void display_1(int i)

{

如果(標簽)

Printf("學號\t \t \ tname \英語\tc語言\ t高級數學\ t思維\ t平均成績\ n ");

printf(" % d \ t % s \ t % . 2f \ t % . 2f \ t % . 2f \ t % . 2f \ t % . 2f \ t % . 2f \ n ",stu[i]。num,stu[i]。姓名,

斯圖[我]。英語,斯圖[我]。c,斯圖[我]。數學,斯圖[我]。道德,斯圖[我]。ave);

fflush(stdin);

返回;

}

空顯示_2()

{

int i,no;

volatile int標誌= 0;

Printf("請輸入您要查詢的學生的學號:\ n ");

fflush(stdin);

scanf("%d ",& amp否);

for(I = 0;我& ltclass _ numi++)

{

if(no==stu[i]。數字& amp& amp!旗幟)

{

Printf("學生信息如下:\ n ");

fflush(stdin);

display _ 1(I);

flag = 1;

}

}

如果(!旗幟)

{

Printf("查詢學生不存在,請檢查學號輸入是否正確!\ n ");

返回;

}

}

void顯示_3()

{

char name[30];

int I;

volatile int標誌= 0;

Printf("輸入要查詢的學生姓名:\ n ");

fflush(stdin);

獲取(名稱);

for(I = 0;我& ltclass _ numi++)

{

if((strcmp(stu[i].name,name)= = 0)& amp;& amp!旗幟)

{

Printf("學生信息如下:\ n ");

display _ 1(I);

flag = 1;

}

}

如果(!旗幟)

{

Printf("查詢學生不存在,請檢查學號輸入是否正確!\ n ");

返回;

}

}

寫好了。看看合不合適?創建原始文件時,不能有排名和平均分,分數是整數;格式如下:

學生姓名英語C語言高等數學思維

20080001本人96 93 91 90

20080002丁勇76 89 89 61

20080003董茂91 71 67 84

20080004馮連軍54 68 78 69

希望能幫到妳。如果您有任何問題,請再次聯系我。好好考試!