用C++编写 学生成绩管理程序
功能设计要求 设计要求实现的功能较多,所以将它们分为几个部分叙述。
1.建立文件
(1)可以使用默认文件名或指定文件名将记录存储到文件;
(2)文件保存成功返回0,失败返回-1;
(3)设置保存标志savedTag作为是否已对记录进行存储操作的信息;
(4)写同名文件将覆盖原来文件的内容;
2.增加学生记录
(1)可在已有记录后面追加新的记录;
(2)可以随时用它增加新的记录,它们仅保存在结构数组中;
(3)可以将一个文件读入,追加在已有记录之后;
(4)如果已经采取用文件追加的方式,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续文件追加操作方式;
(5)如果没有记录存在,给出提示信息。
3.新建学生信息文件
(1)用来重新建立学生信息记录;
(2)如果已经有记录存在,可以覆盖原记录或者在原记录后面追加,也可以将原有记录信息保存到一个指定文件,然后重新建立记录;
(3)给出相应的提示信息。
4.显示记录
(1)如果没有记录可供显示,给出提示信息;
(2)可以随时显示内存中的记录;
(3)显示表头。
5.文件存储
(1)可以按默认名字或指定名字存储记录文件;
(2)存储成功返回0,否则返回-1;
(3)更新存储标志。
6.读取文件
(1)可以按默认名字或指定名字将记录文件读入内存;
(2)读取成功返回0,否则返回-1;
(3)可以将指定或默认文件追加到现有记录的尾部;
(4)可以将文件连续追加到现有记录并更新记录的名次。
(5)更新存储标志。
7.删除记录
(1)可以按“学号”、“姓名”或“名次”方式删除记录;
(2)给出将被删除记录的信息,经确认后再删除;
(3)如果已经是空表,删除时应给出提示信息并返回主菜单;
(4)如果没有要删除的信息,输出没有找到的信息;
(5)应该更新其他记录的名次;
(6)删除操作仅限于内存,只有执行存记录时,才能覆盖原记录;
(7)更新存储标志。
8.修改记录
(1)可以按“学号”、“姓名”或“名次”方式修改记录内容;
(2)给出将被修改记录的信息,经确认后进行修改;
(3)如果已经是空表,应给出提示信息并返回主菜单;
(4)如果没有找到需要修改的信息,输出提示信息;
(5)应该同时更新其他记录的名次;
(6)修改操作仅限于内存,只有进行存储操作时,才能覆盖原记录;
(7)更新存储标志。
9.查询记录
(1)可以按“学号”、“姓名”或“名次”方式查询记录;
(2)能给出查询记录的信息;
(3)如果查询的信息不存在,输出提示信息。
10.对记录进行排序
(1)可以按学号进行升序或降序排序;
(2)可以按名称进行升序和降序排序;
(3)可以按名次进行升序和降序排序;
(4)如果属于选择错误,可以立即退出排序;
(5)更新存储标志。
11.头文件
(1)使用条件编译定义头文件;
(2)函数原型声明;
(3)数据结构及包含文件;
12.测试程序
(1)应列出测试大纲对程序进行测试;
(2)应保证测试用例测试到程序的各种边缘情况是基本要求,希望通过对本章设计的理解,重新考虑如何改进设计。
答案:#include<iostream>
using namespace std;
class student
{private:
int number;
char name[20];
char 易做图;
float yingyu;
float yuwen;
float shuxue;
int mingci;
public:
student(){number=0;strcmp(name," ");易做图=' ';yingyu=0;yuwen=0;shuxue=0;mingci=0;}
void chushihua(){number=0;strcmp(name," ");易做图=' ';yingyu=0;yuwen=0;shuxue=0;mingci=0;}
void SetNumber(int number_){number=number_;}
void SetName(char name_[]){strcpy(name,name_);}
void SetSex(char 易做图_){易做图=易做图_;}
void SetYingyu(float yingyu_){yingyu=yingyu_;}
void SetYuwen(float yuwen_){yuwen=yuwen_;}
void SetShuxue(float shuxue_){shuxue=shuxue_;}
void SetMingci(int mingci_){mingci=mingci_;}
float GetZongchengji(){return yuwen+yuwen+shuxue;}
int GetNumber(){return number;}
float GetYingyu(){return yingyu;}
float GetYuwen(){return yuwen;}
float GetShuxue(){return shuxue;}
char GetSex(){return 易做图;}
char *GetName(){return name;}
void ShowNumber(){cout<<"编号:"<<number;}
void ShowName(){cout<<" 姓名:"<<name;}
void ShowSex(){cout<<" 性别:"<<易做图;}
void ShowYingyu(){cout<<" 英语:"<<yingyu;}
void ShowYuwen(){cout<<" 语文:"<<yuwen;}
void ShowShuxue(){cout<<" 数学:"<<shuxue;}
void ShowMingci(){cout<<" 班级名次:"<<mingci<<endl;}
};
student stu[30];
int jiashuxueshengxinxi()
{int number_;
char name_[20];
char 易做图_;
int i;
float yingyu_;
float yuwen_;
float shuxue_;
for(i=0;i<30;i++)
{if(stu[i].GetNumber()==0)
{cout<<"请输入学生编号:";
cin>>number_;
getchar();
stu[i].SetNumber(number_);
cout<<"请输入学生姓名:";
cin>>name_;
getchar();
stu[i].SetName(name_);
loop:
cout<<"请输入学生性别(男-M,女-W):";
cin>>易做图_;
getchar();
if((易做图_=='M')||(易做图_=='W')) stu[i].SetSex(易做图_);
else {goto loop;}
cout<<"请输入学生的英语成绩:";
cin>>yingyu_;
getchar();
stu[i].SetYingyu(yingyu_);
cout<<"请输入学生的语文成绩:";
cin>>yuwen_;
getchar();
stu[i].SetYuwen(yuwen_);
cout<<"请输入学生的数学成绩:";
cin>>shuxue_;
getchar();
stu[i].SetShuxue(shuxue_);
cout<<"该学生信息录入成功!"<<endl;
return 0;
}
}
return 0;
}
int shanchuxueshengxinxi()
{char name_[20];
int i;
cout<<"请输入要删除的学生姓名:";
cin>>name_;
for(i=0;i<30;i++)
{if(strcmp(stu[i].GetName(),name_)==0)
{stu[i].chushihua();
cout<<"删除学生信息成功!"<<endl;
return 0;
}
}
cout<<"对不起,没有此名字的学生!"<<endl;
return 0;
}
int jiansuoxueshengxinxi()
{int number_;
char name_[20];
char c;
int i;
cout<<"1.按编号检索;\n"
<<"2.按姓名检索.\n"
<<"请输入序列号:";
cin>>c;
getchar();
switch(c)
{case '1':cout<<"请输入编号";
cin>>number_;
for(i=0;i<30;i++)
if(number_==stu[i].GetNumber())
{stu[i].ShowNumber();
stu[i].ShowName();
stu[i].ShowSex();
stu[i].ShowYingyu();
stu[i].ShowYuwen();
stu[i].ShowShuxue();
cout<<"\n";
return 0;
}
cout<<"对不起,没有此编号的学生!"<<endl;
break;
case '2':cout<<"请输入姓名";
cin>>name_;
for(i=0;i<30;i++)
if(strcmp(stu[i].GetName(),name_)==0)
{stu[i].ShowNumber();
stu[i].ShowName();
stu[i].ShowSex();
stu[i].ShowYingyu();
stu[i].ShowYuwen();
stu[i].ShowShuxue();
cout<<"\n";
return 0;
}
cout<<"对不起,没有此姓名的学生!"<<endl;
break;
}
return 0;
}
int xianshiquanbuxueshengdezongchengjihepaiming()
{int i,j;
student *p= new student();
for(i=0;i<29;i++)
for(j=i+1;j<30;j++)
{if(stu[i].GetZongchengji()<stu[j].GetZongchengji())
{p->SetNumber(stu[j].GetNumber());
p->SetName(stu[j].GetName());
p->SetSex(stu[j].GetSex());
p->SetYingyu(stu[j].GetYingyu());
p->SetYuwen(stu[j].GetYuwen());
p->SetShuxue(stu[j].GetShuxue());
stu[j].SetNumber(stu[i].GetNumber());
stu[j].SetName(stu[i].GetName());
stu[j].SetSex(stu[i].GetSex());
stu[j].SetYingyu(stu[i].GetYingyu());
stu[j].SetYuwen(stu[i].GetYuwen());
stu[j].SetShuxue(stu[i].GetShuxue());
stu[i].SetNumber(p->GetNumber());
stu[i].SetName(p->GetName());
stu[i].SetSex(p->GetSex());
stu[i].SetYingyu(p->GetYingyu());
stu[i].SetYuwen(p->GetYuwen());
stu[i].SetShuxue(p->GetShuxue());
}
}
delete p;
for(i=0;i<30;i++)
{stu[i].SetMingci(i+1);
}
for(i=0;i<30;i++)
if(stu[i].GetNumber()!=0)
{stu[i].ShowNumber();
stu[i].ShowName();
stu[i].ShowSex();
stu[i].ShowYingyu();
stu[i].ShowYuwen();
stu[i].ShowShuxue();
stu[i].ShowMingci();
}
delete p;
return 0;
}
int tongjigekepingjunchengjihejigelv()
{float yingyupingjunchengji;
float yuwenpingjunchengji;
float shuxuepingjunchengji;
long yingyusum=0;
long yuwensum=0;
long shuxuesum=0;
int i;
int n=0; //统计学籍存在的学生总数
for(i=0;i<30;i++)
{if(stu[i].GetNumber()!=0)
{yingyusum+=stu[i].GetYingyu();
yuwensum+=stu[i].GetYuwen();
shuxuesum+=stu[i].GetShuxue();
n++;
}
}
yingyupingjunchengji=yingyusum/n;
yuwenpingjunchengji=yuwensum/n;
shuxuepingjunchengji=shuxuesum/n;
cout<<"科目:英语"<<" 总人数:"<<n<<" 平均成绩:"<<yingyupingjunchengji<<endl;
cout<<"科目:语文"<<" 总人数:"<<n<<" 平均成绩:"<<yuwenpingjunchengji<<endl;
cout<<"科目:数学"<<" 总人数:"<<n<<" 平均成绩:"<<shuxuepingjunchengji<<endl;
return 0;
}
void main()
{int jiashuxueshengx
上一个:先学vb再深入c++ 可以吗
下一个:想学会C++语言必须看什么书