?? 學生成績管理系統.cpp
字號:
cin>>score[i].Math;
cout<<"\n英語成績: ";
cin>>score[i].English;
score[i].total=score[i].Chinese+score[i].Math+score[i].English;
score[i].average=(score[i].total*1.0)/3;
}
}
if(!flag)
cout<<"沒有找到符合條件的記錄!\n";
break;
}
return;
}
//3.2按學號編輯修改函數
void mod_num(record score[],int n)
{
int number,flag ,i;
char ask;
while(1)
{
flag=0; //查找標志,查找成功flag=1
cout << "\n請輸入學號: ";
cin >> number;
for(i=0;i<n;i++)
{
if(number==score[i].number)
{
flag=1;
cout << "當前要修改的記錄信息:\n";
dis_table();
dis_row(score[i]);
cout << "請重新輸入以下信息:\n";
cout<<"姓名: ";
cin>>score[i].name;
cout<<"\n學號: ";
cin>>score[i].number;
cout<<"\n語文成績: ";
cin>>score[i].Chinese;
cout<<"\n數學成績: ";
cin>>score[i].Math;
cout<<"\n英語成績: ";
cin>>score[i].English;
score[i].total=score[i].Chinese+score[i].Math+score[i].English;
score[i].average=(score[i].total*1.0)/3;
cout << "\n繼續修改請按y鍵,否則按其他鍵......";
cin >> ask;
if(ask!='y' && ask!='Y')
break;
}
}
if(!flag)
cout<<"沒有找到符合條件的記錄!\n";
break;
}
return;
}
//3.3顯示全部學生的記錄
void dis_all(record score[],int n)
{
char press;
int i;
for(i=0;i<n;i++)
{
if(i%20==0)//每顯示20行數據記錄后重新顯示一下表頭
{
cout << endl << endl;
dis_char(' ',25);
cout << "學生的信息錄";
cout << endl;
dis_char('*',72);
cout << endl;
cout << "序號";
dis_table(); //調用顯示表頭函數顯示表頭
}
cout << setw(4) << (i+1);
dis_row(score[i]);//調用顯示一個數組元素的函數
if((i+1)%20==0)//滿20行則顯示下一屏
{
dis_char('*',72);
cout << endl;
cout << "按回車鍵繼續顯示下屏,按其他鍵結束顯示!";
cout << endl;
cout << "請按鍵......";
cin >> press;
if(press!='\n')
break;
}
}
dis_char('*',72);
cout << endl;
return;
}
//4 顯示信息錄文件主控函數
void display()
{
record score[M];
FILE *fp;
int ask;
int i=0;
if((fp=fopen("address.txl","rb"))==NULL)
{
cout << "can't open file!\n";
return;
}
while(!feof(fp))
{
//將信息錄信息讀到score數組中
fread(&score[i++],sizeof(record),1,fp);
}
i-=1;
while(1)
{
cout << endl << endl;
dis_char(' ',10);
cout << "顯示信息錄信息(共有" << i << "條記錄)\n";
dis_char('*',50);
cout << endl;
dis_char(' ',17);
cout << "1.按自然順序顯示\n";
dis_char(' ',17);
cout << "2.按姓名順序顯示\n";
dis_char(' ',17);
cout << "3.按學號順序顯示\n";
dis_char(' ',17);
cout << "4.按平均成績順序顯示\n";
dis_char(' ',17);
cout << "5.退出顯示程序\n";
dis_char('*',50);
cout << endl;
dis_char(' ',16);
cout << "請輸入代碼選擇(1~5) ";
cin >> ask;
switch(ask)
{
case 1 :
dis_all(score,i);//調用顯示數組函數
break;
case 2 :
sort_name(score,i);//調用按姓名排序顯示記錄信息函數
break;
case 3 :
sort_num(score,i);//調用按學號排序函數
break;
case 4 :
sort_aver(score,i);//調用按平均成績排序函數
break;
case 5 :
fclose(fp);//退出顯示程序
return;
default :
cout<<"輸入數字不在范圍之內,請重試\n";
continue;
}
}
}
//4.1按姓名排序
void sort_name(record score[],int n)
{
int i,j;
record score_t[M],temp;
for(i=0;i<n;i++)
{
score_t[i]=score[i];//將score數組讀到score_t數組中
}
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(strcmp(score_t[j].name,score_t[j+1].name)>0)//使用字符串比較函數
{
temp=score_t[j];
score_t[j]=score_t[j+1];
score_t[j+1]=temp;
}
}
dis_all(score_t,n);//調用顯示函數對已排序數組列表顯示
return;
}
//4.2按學號排序
void sort_num(record score[],int n)
{
int i,j;
record score_t[M],temp;
for(i=0;i<n;i++)
{
score_t[i]=score[i];//將score數組讀到score_t數組中
}
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(score_t[j].number>score_t[j+1].number)//
{
temp=score_t[j];
score_t[j]=score_t[j+1];
score_t[j+1]=temp;
}
}
dis_all(score_t,n);//調用顯示函數對已排序數組列表顯示
return;
}
//4.3按平均成績排序
void sort_aver(record score[],int n)
{
int i,j;
record score_t[M],temp;
for(i=0;i<n;i++)
{
score_t[i]=score[i];//將score數組讀到score_t數組中
}
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
{
if(score_t[j].average>score_t[j+1].average)//
{
temp=score_t[j];
score_t[j]=score_t[j+1];
score_t[j+1]=temp;
}
}
dis_all(score_t,n);//調用顯示函數對已排序數組列表顯示
return;
}
//5 刪除功能函數實現
void dele()
{
record temp,score[M];
int ask;
int i=0,length;
FILE * fp;
if((fp=fopen("address.txl","rb"))==NULL)
{
cout << "can't open file!" << endl;
return;
}
while(fread(&temp,sizeof(record),1,fp)==1)//讀通訊錄文件
{
score[i++]=temp;
}
length=i;
while(1)
{
cout<<endl;
dis_char(' ',18);
cout << "記錄的刪除\n";
dis_char('*',50);
cout << endl;
dis_char(' ',17);
cout << "1.按姓名刪除\n";
dis_char(' ',17);
cout << "2.按學號刪除\n";
dis_char(' ',17);
cout << "3.返回上一層\n";
dis_char('*',50);
cout << endl;
dis_char(' ',14);
cout << "請輸入號碼選擇(1~3) ";
cin >> ask;
switch(ask)
{
case 1 :
dele_name(score,&i);//調用按姓名刪除函數
break;
case 2 :
dele_num(score,&i);//調用按學號刪除函數
break;
case 3 :
return;//退出刪除程序
default :
cout<<"輸入數字不在范圍之內,請重試\n";
continue;
}
if(length>i)
{
fclose(fp);// 關閉文件,準備以新建文件的方式打開文件
fp=fopen("address.txl","wb");
fwrite(score,sizeof(record),length-1,fp);
fclose(fp);
fp=fopen("address.txl","rb");
}
}
fclose(fp);
return;
}
//5.1按姓名刪除函數
void dele_name(record score[],int* n)
{
char d_name[20],sure;
int i;
cout << "請輸入姓名:";
cin >> d_name;
for(i=0;i<*n;i++)
{
if(strcmp(score[i].name,d_name)==0)
break;//找到要刪除的記錄
}
if(i!=*n)
{
cout << "要刪除的記錄如下:\n";
dis_table();
dis_row(score[i]);
cout << "確定刪除---y,否則按其他鍵......";
cin >> sure;
if(sure!='y' && sure!='Y')
return;
for(;i<*n-1;i++)//自刪除位置開始,其后記錄依次前移
score[i]=score[i+1];
*n=*n-1;//數組總記錄數減1
}
else
cout << "要刪除的記錄沒有找到......";
return;
}
//5.2調用按學號刪除函數
void dele_num(record score[],int* n)
{
char sure;
int i,num;
cout << "請輸入學號:";
cin >> num;
for(i=0;i<*n;i++)
{
if(score[i].number== num)
break;//找到要刪除的記錄
}
if(i!=*n)
{
cout << "要刪除的記錄如下:\n";
dis_table();
dis_row(score[i]);
cout << "確定刪除---y,否則按其他鍵......";
cin >> sure;
if(sure!='y' && sure!='Y')
return;
for(;i<*n-1;i++)//自刪除位置開始,其后記錄依次前移
score[i]=score[i+1];
*n=*n-1;//數組總記錄數減1
}
else
cout << "要刪除的記錄沒有找到......";
return;
}
//6 建立學生信息錄函數
void create()
{
FILE * fp;
if((fp=fopen("address.txl","wb"))==NULL)
{
cout << "can't open file!\n";
return;
}
fclose(fp);
cout << "\n\n文件成功建立,請使用-信息輸入功能-輸入信息!";
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -