# include & ltiostream & gt
使用STD::CIN;
使用STD::cout;
使用STD::cerr;
使用STD::endl;
使用STD::IOs;
# include & ltfstream & gt
使用STD::of stream;
使用STD::if stream;
使用STD::fstream;
# include & lt字符串& gt
使用STD::string;
# include & ltiomanip & gt
使用STD::setw;
int enter choice();
void searchGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void changeGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void deleteGrade(字符串名稱[],字符串ID[],int Chinese[],int Math[],int Eng[],int & amp排);
void addGrade(字符串名稱[],字符串ID[],int Chinese[],int Math[],int Eng[],int & amp排);
int getRow(if stream & amp;InP);
void getID(if stream & amp;inp,字符串名稱[],字符串ID[],int中文[],int數學[],int工程[]);
void countGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void saveResult(字符串名稱[],字符串ID[],int中文[],int數學[],int工程[],int行);
void showGrade(string names[],string ID[],int Chinese[],int Math[],int Eng[],int row);
void averGrade(int Chinese[],int Math[],int Eng[],int row);
int main()
{
ifstream infile(" grade info . txt ");
如果(!infile){
cerr & lt& lt打開文件時出錯,gradeInfo.txt不存在< & ltendl
退出(1);}
int row = getRow(infile);
infile . close();//確保當前學生人數為第行。
ifstream infile 2(" grade info . txt ");
//為多達60名學生提供績效管理。是根據目前合理的班數來確定的。可以根據需要進行更改。
字符串名稱[60];//學生姓名
字符串ID[60];//學生ID
int中文[60];//語言成績
int Math[60];//數學成績
int Eng[60];//英語成績
getID(infile2,names,ID,中文,數學,英語);//從文件中讀取學生信息。
infile 2 . close();
int部分;//它的值表示用戶選擇的模塊。
//系統的主菜單。用戶選擇要執行的操作。
而(部分!=4){
cout & lt& lt" \n **歡迎使用學生信息管理系統* * " & lt& lt恩德爾
& lt& lt“-”& lt;& lt恩德爾
& lt& lt"請選擇您要執行的操作"
& lt& lt" 1-學生成績信息維護"
& lt& lt“2-學生成績信息查詢”
& lt& lt“3-學生成績統計”
& lt& lt“4-退出系統”
& lt& lt“-”& lt;& ltendl
CIN & gt;& gt部分;
if (part==1){
int選擇;//用戶在信息維護模塊中選擇的執行功能。
while((choice=enterChoice())!=4){
開關(選擇){
案例1:
addGrade(姓名、ID、中文、數學、英語、行);
打破;
案例二:
deleteGrade(姓名、ID、中文、數學、英語、行);
打破;
案例三:
changeGrade(姓名、ID、中文、數學、英語、row);
打破;
默認值:
cerr & lt& lt“您的選擇不正確”< & ltendl
打破;
}
}
}
if (part==2){
cout & lt& lt"請選擇:"
& lt& lt" 1-按學號或姓名查詢"
& lt& lt“2-查看所有學生信息”
int allOrPart
CIN & gt;& gtallOrPart
if (allOrPart==1)
searchGrade(姓名、ID、中文、數學、英語、row);
if (allOrPart==2)
showGrade(姓名、ID、中文、數學、英語、row);
}
if (part==3){
cout & lt& lt"請選擇:"
& lt& lt" 1-查詢單個科目分數中的學生分布情況"
& lt& lt“2-計算單壹科目的平均分”
int averOrPart
CIN & gt;& gtaverOrPart
if (averOrPart==2)
averGrade(語文、數學、英語、行);
if (averOrPart==1)
countGrade(姓名、ID、中文、數學、英語、row);
}
}
返回0;
}
//該函數用於獲取當前系統中存儲的學生人數信息。
int getRow(if stream & amp;inp)
{
int row = 0;
字符串a,名稱,ID;
int標記;
inp & gt& gta & gt& gta & gt& gta & gt& gta & gt& gta;//跳過第壹行的目錄結構。
while(inp){
inp & gt& gt名稱& gt& gtID & gt& gt馬克& gt& gt馬克& gt& gt馬克;
row++;
}
返回行-1;
}
//此函數用於將文本文檔中的數據讀入內存,供用戶在終端上操作。
void getID(if stream & amp;inp,字符串名稱[],字符串ID[],int中文[],int數學[],int工程[])
{
字符串a;
inp & gt& gta & gt& gta & gt& gta & gt& gta & gt& gta;//跳過第壹行的目錄結構。
int I = 0;
while(inp){
inp & gt& gt姓名[I]& gt;& gtID[I]& gt;& gt中文[I]& gt;& gtmath[I]& gt;& gteng[I];
i++;
}
}
//該功能實現了學生成績信息維護模塊的子菜單。
int enterChoice()
{
cout & lt& lt"請輸入您想執行的操作"
& lt& lt" | 1-添加學生信息| "
& lt& lt" | 2-刪除學生信息| "
& lt& lt" | 3-修改學生信息| "
& lt& lt" | 4-返回到上壹級| "
int選擇;
CIN & gt;& gt選擇;
回歸選擇;
}
//該函數為用戶提供學生成績的查詢功能,可以使用學生姓名,也可以使用學號。
void searchGrade(字符串名稱[],字符串ID[],整數中文[],整數數學[],整數工程[],整數行)
{
字符串searchGoal
cout & lt& lt" \ n請輸入學生ID或姓名"
CIN & gt;& gtsearchGoal
布爾發現;
for(int j = 0;j & lt排;j++){
if(names[j]= = search goal | | ID[j]= = search goal){
cout & lt& lt"查詢結果"
& lt& lt“姓名、學號、語文、數學、英語”< & lt恩德爾
& lt& ltsetw(6)& lt;& ltnames[j]& lt;& ltsetw(6)& lt;& ltID[j]& lt;& ltsetw(6)& lt;& lt中文[j]& lt;& ltsetw(6)& lt;& ltmath[j]& lt;& ltsetw(6)& lt;& lteng[j]& lt;& ltendl
發現=真;
打破;
}
}
如果(發現!=真)
cout & lt& lt“搜索到的學生成績不存在”< & ltendl
}
//該功能可以刪除系統中存儲的學生信息記錄。
void deleteGrade(字符串名稱[],字符串ID[],int Chinese[],int Math[],int Eng[],int & amp行)
{
cout & lt& lt" \ n請輸入您要刪除其信息的學生的姓名或學號"
字符串delName
CIN & gt;& gtdelName
布爾發現;
for(int j = 0;j & lt排;j++){
if(names[j]= = delName | | ID[j]= = delName){
發現=真;
names[j]= " \ 0 ";
ID[j]= " \ 0 ";
中文[j]=-1;
math[j]=-1;
eng[j]=-1;
saveResult(姓名、ID、中文、數學、英語、行);
cout & lt& lt"學生信息已被成功刪除"
}
}
如果(發現!=真)
cout & lt& lt"要刪除的學生信息不存在"
}
//這個函數可以將新的學生信息寫入壹個文本文件。
void addGrade(字符串名稱[],字符串ID[],int Chinese[],int Math[],int Eng[],int & amp行)
{
字符串newID
cout & lt& lt"請首先輸入學生ID:"
//所以通過學號來判斷要添加的信息是否重復。
CIN & gt;& gtnewID
布爾存在;
for(int j = 0;j & lt排;j++)
if(newID==ID[j]){
cout & lt& lt"學生信息已經存在"
存在=真;
打破;}
如果(存在!=真){
cout & lt& lt\ n請再次輸入學生姓名和三個年級,用空格鍵分隔。endl
ID[row]= newID;
CIN & gt;& gtnames[row]& gt;& gt中文[row]& gt;& gtmath[row]& gt;& gteng[row];
row++;
saveResult(姓名、ID、中文、數學、英語、行);
cout & lt& lt"學生信息添加成功"
}
}
//該功能可以更改學生的各種信息。
void changeGrade(字符串名稱[],字符串ID[],整數中文[],整數數學[],整數工程[],整數行)
{
字符串changeGoal
cout & lt& lt" \ n請輸入您要更改其信息的學生的姓名或學號:";
CIN & gt;& gt改變目標;
布爾發現;
int changeNum//用戶修改內容的選項
for(int j = 0;j & lt排;j++){
if(names[j]= = change goal | | ID[j]= = change goal){
發現=真;
cout & lt& lt"這個學生的原始信息是:"
& lt& lt“姓名、學號、語文、數學、英語”< & lt恩德爾
& lt& ltsetw(6)& lt;& ltnames[j]& lt;& ltsetw(6)& lt;& ltID[j]
& lt& ltsetw(6)& lt;& lt中文[j]& lt;& ltsetw(6)& lt;& lt數學[j]
& lt& ltsetw(6)& lt;& lteng[j]& lt;& lt恩德爾
& lt& lt"請選擇:"
& lt& lt" 1-修改學生姓名"
& lt& lt" 2-修改學生ID "
& lt& lt“3-修改語文成績”
& lt& lt“4-修改數學分數”
& lt& lt“5-修改英語成績”
CIN & gt;& gtchangeNum
cout & lt& lt"請輸入修改的內容:";
開關(changeNum){
案例1:
CIN & gt;& gt姓名[j];
打破;
案例二:
CIN & gt;& gtID[j];
打破;
案例三:
CIN & gt;& gt中文[j];
打破;
案例4:
CIN & gt;& gtmath[j];
打破;
案例5:
CIN & gt;& gteng[j];
打破;
}
saveResult(姓名、ID、中文、數學、英語、行);
cout & lt& lt" \ n修改成功!"& lt& lt恩德爾
& lt& lt"修改後的學生信息是:"
& lt& lt“姓名、學號、語文、數學、英語”< & lt恩德爾
& lt& ltsetw(6)& lt;& ltnames[j]& lt;& ltsetw(6)& lt;& ltID[j]
& lt& ltsetw(6)& lt;& lt中文[j]& lt;& ltsetw(6)& lt;& lt數學[j]
& lt& ltsetw(6)& lt;& lteng[j]& lt;& ltendl
}
}
如果(發現!=真)
cout & lt& lt"要修改的學生信息不存在"
}
//該功能可以統計某壹科目、某壹分數段的學生分布情況,包括學生姓名、學號、年級以及該分數段的人數。
void countGrade(字符串名稱[],字符串ID[],整數中文[],整數數學[],整數工程[],整數行)
{
字符串主題;
int低,高;
int count result = 0;
cout & lt& lt\ n請輸入要查詢的課程名稱和分數段,用空格分隔,如英語60 70
CIN & gt;& gt主題& gt& gt低& gt& gt高;
cout & lt& lt主題& lt& lt“成就在”
for(int I = 0;我& lt排;i++){
If (subject== "中文" &;& amp中文[I]& gt;=低& amp& amp中文[I]& lt;=高){
count result++;
cout & lt& ltsetw(7)& lt;& lt姓名[I]& lt;& ltsetw(7)& lt;& lt"學生編號"
& lt& ltsetw(5)& lt;& ltID[I]& lt;& ltsetw(7)& lt;& lt“分數”
& lt& ltsetw(7)& lt;& lt中文[I]& lt;& ltendl
}
If (subject== "數學" &;& ampmath[I]& gt;=低& amp& ampmath[I]& lt;=高){
count result++;
cout & lt& ltsetw(7)& lt;& lt姓名[I]& lt;& ltsetw(7)& lt;& lt"學生編號"
& lt& ltsetw(5)& lt;& ltID[I]& lt;& ltsetw(7)& lt;& lt“分數”
& lt& ltsetw(7)& lt;& ltmath[I]& lt;& ltendl
}
if(subject = = " English " &;& ampeng[I]& gt;=低& amp& ampeng[I]& lt;=高){
count result++;
cout & lt& ltsetw(7)& lt;& lt姓名[I]& lt;& ltsetw(7)& lt;& lt"學生編號"
& lt& ltsetw(5)& lt;& ltID[I]& lt;& ltsetw(7)& lt;& lt“分數”
& lt& ltsetw(7)& lt;& lteng[I]& lt;& ltendl
}
}
cout & lt& lt" \ n * * * " & lt& ltcountResult & lt& lt“人”
}
//該函數可以將內存中學生信息數據的更改保存到壹個文本文件中。
void saveResult(字符串名稱[],字符串ID[],整數中文[],整數數學[],整數工程[],整數行)
{
of stream outfile(" grade info . txt ");
outfile & lt& lt“姓名、學號、語文、數學、英語”< & ltendl
for(int n = 0;n & lt排;n++){
if (names[n]!="\0")
outfile & lt& ltsetw(7)& lt;& lt名稱[n]& lt;& ltsetw(6)& lt;& ltID[n]
& lt& ltsetw(7)& lt;& lt中文[n]& lt;& ltsetw(7)& lt;& lt數學
& lt& ltsetw(7)& lt;& lteng[n]& lt;& ltendl
}
}
//顯示當前系統中記錄的所有學生信息。
void showGrade(字符串名稱[],字符串ID[],整數中文[],整數數學[],整數工程[],整數行)
{
for(int n = 0;n & lt排;n++){
if (names[n]!="\0")
cout & lt& ltsetw(7)& lt;& lt名稱[n]& lt;& ltsetw(6)& lt;& ltID[n]
& lt& ltsetw(7)& lt;& lt中文[n]& lt;& ltsetw(7)& lt;& lt數學
& lt& ltsetw(7)& lt;& lteng[n]& lt;& ltendl
}
}
//計算單科平均分
void average(int Chinese[],int Math[],int Eng[],int row)
{
cout & lt& lt"請選擇您要計算平均分的帳戶:"
& lt& lt" 1-中文"
& lt& lt“2-數學”< & lt恩德爾
& lt& lt“3-英語”
int主題;
CIN & gt;& gt主體;
int sum = 0;
for(int n = 0;n & lt排;n++){
if (Eng[n]!=-1)
{
if (subject==1)
sum+=中文[n];
if (subject==2)
sum+= Math[n];
if (subject==3)
sum+= Eng[n];
}
else row = row-1;
}
雙倍averGrade
averGrade = static _ cast & ltdouble & gt(sum)/static _ cast & lt;double & gt(排);
cout & lt& lt"這個科目的平均分數是:"
}