# 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
希望能幫到妳。如果您有任何問題,請再次聯系我。好好考試!