?? 學生成績管理系統.cpp
字號:
//
#include "address.h"
void main()
{
int choice;
while (1)
{
cout<<"\n\n";
dis_char(' ',15);
cout<<"學生成績管理系統\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',15);
cout<<"1.信息錄入功能\n";
dis_char(' ',15);
cout<<"2.信息查詢功能\n";
dis_char(' ',15);
cout<<"3.信息修改功能\n";
dis_char(' ',15);
cout<<"4.信息刪除功能\n";
dis_char(' ',15);
cout<<"5.信息瀏覽功能\n";
dis_char(' ',15);
cout<<"6.信息文件建立功能\n";
dis_char(' ',15);
cout<<"7.退出管理系統程序\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',15);
cout<<"請輸入代碼選擇(1-7)\n";
cin>>choice;
switch(choice)
{
case 1:
append();
break;
case 2:
locate();
break;
case 3:
modify();
break;
case 4:
dele();
break;
case 5:
display();
break;
case 6:
create();
break;
case 7:
return;
default :
cout<<"輸入數字不在范圍之內,請重試\n";
continue;
}
}
}
//0.1顯示字符串函數
void dis_char(char ch,int n)
{
int i;
for(i=0;i<n;i++)
cout<<ch;
}
//0.2打印單個結構函數
void dis_row(record score)
{
cout<<setw(20)<<score.name<<setw(12)<<score.number
<<setw(6)<<score.Chinese<<setw(6)<<score.Math
<<setw(6)<<score.English<<setw(6)<<score.total
<<setw(9)<<score.average<<endl;
}
//0.3顯示一行表頭的函數
void dis_table()
{
dis_char(' ',16);
cout << " 姓名";
dis_char(' ',8);
cout << "學號";
dis_char(' ',2);
cout << "語文";
dis_char(' ',2);
cout << "數學";
dis_char(' ',2);
cout << "英語";
dis_char(' ',2);
cout << "總分 平均分";
cout << endl;
}
//1 錄入學生信息函數
void append()
{
record score;
FILE *fp;
char ask;
if((fp=fopen("address.txl","ab"))==NULL)
{
cout<<"can't open file!\n";
return;
}
while(1)
{
cout<<"\n\n";
cout<<"輸入學生信息\n";
cout<<"姓名: ";
cin>>score.name;
cout<<"\n學號: ";
cin>>score.number;
cout<<"\n語文成績: ";
cin>>score.Chinese;
cout<<"\n數學成績: ";
cin>>score.Math;
cout<<"\n英語成績: ";
cin>>score.English;
score.total=score.Chinese+score.Math+score.English;
score.average=(score.total*1.0)/3;
fwrite(&score,sizeof(record),1,fp);//
cout<<"\n繼續輸入記錄嗎(y/n) ";
cin>>ask;
if(ask!='y'&& ask!='Y')
break;
}
fclose(fp);
return;
}
//2 查詢學生信息函數
void locate()
{
record temp,score[M];
char name[20];
int n=0;
int i,flag,ask,d_total;
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[n++]=temp;
while(1)
{
d_total=0;
flag=0;
cout<<"\n\n";
dis_char(' ',10);
cout<<"查找學生信息\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',10);
cout<<"1-按姓名查找\n";
dis_char(' ',10);
cout<<"2-按學號查找\n";
dis_char(' ',10);
cout<<"3-按平均分查找\n";
dis_char(' ',10);
cout<<"4-查找一門課程信息\n";
dis_char(' ',10);
cout<<"5-返回上一層\n";
dis_char('*',40);
cout<<endl;
dis_char(' ',10);
cout<<"請輸入號碼選擇(1-5)\n";
cin>>ask;
switch(ask)
{
case 1:
cout<<"請輸入要查詢的姓名: ";
cin>>name;
for(i=0;i<n;i++)
{
if(strcmp(name,score[i].name)==0)
{
flag=1;
dis_table();
dis_row(score[i]);
}
}
if(!flag)
cout<<"沒有找到符合條件的記錄!\n";
break;
case 2:
int num;
cout<<"請輸入要查詢的學號: ";
cin>>num;
for(i=0;i<n;i++)
{
if(num==score[i].number)
{
flag=1;
dis_table();
dis_row(score[i]);
}
}
if(!flag)
cout<<"沒有找到符合條件的記錄!\n";
break;
case 3:
int num1,num2;
cout<<"請輸入要查詢的平均分分數段(如80-90只輸入數字80 90): ";
cin>>num1>>num2;
for(i=0;i<n;i++)
{
if(num1<score[i].average && num2>score[i].average)
{
flag=1;
dis_table();
dis_row(score[i]);
}
}
if(!flag)
cout<<"沒有找到符合條件的記錄!\n";
break;
case 4:
int kechen;
cout<<"請輸入要查詢的科目(如語文輸入1數學輸入2英語輸入3): ";
cin>>kechen;
switch(kechen)
{
case 1:
flag=1;
cout<<"\n語文";
for(i=0;i<n;i++)
{
cout<<setw(18)<<score[i].name<<setw(5)<<score[i].Chinese;
d_total+=score[i].Chinese;
}
cout<<" 總平均分 "<<setw(6)<<(d_total*1.0/n);
break;
case 2:
flag=1;
cout<<"\n數學";
for(i=0;i<n;i++)
{
cout<<setw(18)<<score[i].name<<setw(5)<<score[i].Math;
d_total+=score[i].Math;
}
cout<<" 總平均分 "<<setw(6)<<(d_total*1.0/n);
break;
case 3:
flag=1;
cout<<"\n英語";
for(i=0;i<n;i++)
{
cout<<setw(18)<<score[i].name<<setw(5)<<score[i].English;
d_total+=score[i].English;
}
cout<<" 總平均分 "<<setw(6)<<(d_total*1.0/n);
break;
default:
cout<<"輸入錯誤,請重試";
break;
}
break;
case 5:
return;
default :
cout<<"輸入數字不在范圍之內,請重試\n";
continue;
}
}
return;
}
//3 修改功能函數
void modify()
{
char point;
int ask;
record temp,score[M];
FILE * fp;
int i=0;
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;
}
while(1)
{
cout << "\n";
dis_char(' ',20);
cout << "編輯修改信息錄" << endl;
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('*',50);
cout << endl;
dis_char(' ',16);
cout << "請輸入號碼選擇(1~3) ";
cin >> ask;
switch(ask)
{
case 1:
dis_all(score,i);//調用顯示數組函數
break;
case 2:
mod_name(score,i);//調用編輯按姓名修改函數
break;
case 3:
mod_num(score,i);//調用按學號編輯修改函數
break;
case 4 :
break;
default :
cout<<"輸入數字不在范圍之內,請重試\n";
continue;
}
cout << "繼續修改請按y鍵,否則按其他鍵......";
cin >> point;
if(point!='y' && point!= 'Y' )
break;
}
fclose(fp);
fp=fopen("address.txl","wb");
fwrite(score,sizeof(record),i,fp);//將修改后的數據寫回到通訊錄文件
fclose(fp);
return;
}
//3.1按姓名編輯修改函數
void mod_name(record score[],int n)
{
int i,flag;
char name[20];
while(1)
{
flag=0; //查找標志,查找成功flag=1
cout << "\n請輸入姓名: ";
cin >> name;
for(i=0;i<n;i++)
{
if(strcmp(name,score[i].name)==0)
{
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數學成績: ";
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -