(1)问题描述。录入并保存一个班级学生多门课程的成绩,并对成绩进行分析。
(2)基本要求。a)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。b)对文件input.dat中的数据进行处理,要求具有如下功能:按各门课程成绩排序,并生成相应的文件输出;计算每个人的平均成绩,按平均成绩排序,并生成文件;求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数;根据姓名或学号查询某人的各门课成绩。c)使用Visual C++ 6. 0控制台应用程序开发,界面美观。
(3)测试数据,如下图所示。
学号 |
姓名 |
数学 |
英语 |
计算机 |
01 |
王芳 |
78 |
77 |
90 |
02 |
张强 |
89 |
67 |
88 |
03 |
李浩 |
56 |
66 |
78 |
04 |
黄鹏 |
89 |
86 |
85 |
05 |
尚校 |
67 |
88 |
76 |
06 |
赵鹏 |
45 |
54 |
67 |
07 |
蒋泽 |
78 |
76 |
70 |
程序结构及清单
2.1.1 头文件
#define NUM1 30
class Students
{
public:
Students(char *sNane, int cNumber,int sMath,int sEnglish,int sComputer);
Students()
{}
~Students()
{}
char* GetName();
void SetName(char* sName);//获取姓名
int GetNumber();
void SetNumber(int sNumber);//获取学号
int GetMath();
void SetMath(int sMath);//获取数学成绩
int GetEnglish();
void SetEnglish(int sEnglish);//获取英语成绩
int GetComputer();
void SetComputer(int sComputer);//获取计算机成绩
void disply(Students &st1);
//void WriterData();
//void DeleteData(int icount);
//void GetStudentsFromFile(int icount);//数据库接口
protected:
char Name[NUM1];
int Number;
int Math;
int English;
int Computer;
};
2.1.2 公共函数
#include "stuends.h"
#include
#include
#include
#include
using namespace std;
Students::Students(char *sName,int sNumber,int sMath,int sEnglish,int sComputer)
{
strncpy(Name,sName,NUM1);
Number=sNumber;
Math=sMath;
English=sEnglish;
Computer=sComputer;
}
char* Students::GetName()
{
return Name;
}
int Students::GetNumber()
{
return Number;
}
int Students::GetMath()
{
return Math;
}
int Students::GetEnglish()
{
return English;
}
int Students::GetComputer()
{
return Computer;
}
void Students::SetName(char* sName)
{
strncpy(Name,sName,NUM1);
}
void Students::SetNumber(int sNumber)
{
Number=sNumber;
}
void Students::SetMath(int sMath)
{
Math=sMath;
}
void Students::SetEnglish(int sEnglish)
{
English=sEnglish;
}
void Students::SetComputer(int sComputer)
{
Computer=sComputer;
}
void Students::disply(Students &st1)
{
cout<
#include
#include
#include
#include
#include
using namespace std;
Students st1[20];
int mm;
int addmain()
{
cout<<"请输入要添加的学生成绩记录的个数"<>mm;
for(int i=0;i>aName>>aNumber>>aMath>>aEnglish>>aComputer;
Students st(aName,aNumber,aMath,aEnglish,aComputer);
st1[i]=st;
cout<<"添加的记录为:"<>num;
for(int j=0;j>aName>>aNumber>>aMath>>aEnglish>>aComputer;
Students st3(aName,aNumber,aMath,aEnglish,aComputer);
st1[j]=st3;
st1[j].disply(st1[j]);
return;
}
}
cout<<"未找到相应的学生的成绩"<>num;
for(int j=0;j>num;
for(int j=0;jmax[i2])
{
int temp;
temp=max[i];
max[i]=max[i2];
max[i2]=temp;
}
}
}//总成绩排序
void highall()
{
temp();
cout<<"最高总分为:"<maxM[i2])
{
int temp;
temp=maxM[i];
maxM[i]=maxM[i2];
maxM[i2]=temp;
}
}
}//数学成绩排序
void highallM()
{
tempM();
cout<<"最高数学成绩为:"<maxE[i2])
{
int temp;
temp=maxE[i];
maxE[i]=maxE[i2];
maxE[i2]=temp;
}
}
}//英语成绩排序
void highallE()
{
tempE();
cout<<"最高英语成绩为:"<maxC[i2])
{
int temp;
temp=maxC[i];
maxC[i]=maxC[i2];
maxC[i2]=temp;
}
}
}//计算机成绩排序
void highallC()
{
tempC();
cout<<"最高计算级成绩为:"<st1[i2].GetNumber())
{
Students temp;
temp=st1[i1];
st1[i1]=st1[i2];
st1[i2]=temp;
}
}
cout<<"按学号排列为:"<90)
{
count++;
}
}
cout<<"数学成绩大于90分的有"<79 &&st1[i].GetMath()<90)
{
count++;
}
}
cout<<"数学成绩在80-89分的有"<69 &&st1[i].GetMath()<80)
{
count++;
}
}
cout<<"数学成绩在70-79分的有"<59 &&st1[i].GetMath()<70)
{
count++;
}
}
cout<<"数学成绩在60-69分的有"<90)
{
count++;
}
}
cout<<"计算机成绩大于90分的有"<79 &&st1[i].GetComputer()<90)
{
count++;
}
}
cout<<"计算机成绩在80-89分的有"<69 &&st1[i].GetComputer()<80)
{
count++;
}
}
cout<<"计算机成绩在70-79分的有"<59 &&st1[i].GetComputer()<70)
{
count++;
}
}
cout<<"计算机成绩在60-69分的有"<90)
{
count++;
}
}
cout<<"英语成绩大于90分的有"<79 &&st1[i].GetEnglish()<90)
{
count++;
}
}
cout<<"英语成绩在80-89分的有"<69 &&st1[i].GetEnglish()<80)
{
count++;
}
}
cout<<"英语成绩在70-79分的有"<59 &&st1[i].GetEnglish()<70)
{
count++;
}
}
cout<<"英语成绩在60-69分的有"<90)
{
count++;
}
}
cout<<"平均成绩大于90分的有"<79 &&aa<90)
{
count++;
}
}
cout<<"平均成绩在80-89分的有"<69 && aa<80)
{
count++;
}
}
cout<<"平均成绩在70-79分的有"<59 && aa<70)
{
count++;
}
}
cout<<"平均成绩在60-69分的有"<>xun;
if(xun==1)
{
displayall();
}
else if(xun==2)
{
chaxun();
}
system("pause");
}
void mainloop2()
{
addmain();
system("pause");
}
void mainloop3()
{
miodefy();
system("pause");
}
void mainloop4()
{
deletea();
system("pause");
}
void mainloop5()
{
avgs();
system("pause");
}
void mainloop6()
{
cout<<"输入 1:查看数学平均成绩"<>m;
if(m==1)
{
avgcm();
}
else if(m==2)
{
avgcE();
}
else if(m==3)
{
avgcc();
}
else if(m==4)
{
avgca();
}
system("pause");
}
void mainloop7()
{
cout<<"输入 1:查看数学最高成绩"<>m;
if(m==1)
{
highallM();
}
else if(m==2)
{
highallE();
}
else if(m==3)
{
highallC();
}
else if(m==4)
{
highall();
}
system("pause");
}
void mainloop8()
{
cout<<"输入 1:查看数学最低成绩"<>m;
if(m==1)
{
lowallM();
}
else if(m==2)
{
lowallE();
}
else if(m==3)
{
lowallC();
}
else if(m==4)
{
lowall();
}
system("pause");
}
void mainloop9()
{
cout<<"输入 1:查看不及格人数"<>i1;
if(i1==1)
{
cout<<"输入 1:查看数学在此范围内人数"<>jj;
if(jj==1)
{
coun1M();
}
else if(jj==2)
{
coun1E();
}
else if(jj==3)
{
coun1C();
}
else if(jj==4)
{
coun1Z();
}
}
else if(i1==2)
{
cout<<"输入 1:查看数学在此范围内人数"<>jj;
if(jj==1)
{
coun2M();
}
else if(jj==2)
{
coun2E();
}
else if(jj==3)
{
coun2C();
}
else if(jj==4)
{
coun2Z();
}
}
else if(i1==3)
{
cout<<"输入 1:查看数学在此范围内人数"<>jj;
if(jj==1)
{
coun3M();
}
else if(jj==2)
{
coun3E();
}
else if(jj==3)
{
coun3C();
}
else if(jj==4)
{
coun3Z();
}
}
else if(i1==4)
{
cout<<"输入 1:查看数学在此范围内人数"<>jj;
if(jj==1)
{
coun4M();
}
else if(jj==2)
{
coun4E();
}
else if(jj==3)
{
coun4C();
}
else if(jj==4)
{
coun4Z();
}
}
else if(i1==5)
{
cout<<"输入 1:查看数学在此范围内人数"<>jj;
if(jj==1)
{
coun5M();
}
else if(jj==2)
{
coun5E();
}
else if(jj==3)
{
coun5C();
}
else if(jj==4)
{
coun5Z();
}
}
system("pause");
}
void mainloop10()
{
sortchengji();
system("pause");
}
2.1.5 主窗体设计及主函数
void SetScreenGrid()
{
//char sysSetBuf[80];
//sprintf(sysSetBuf,"mode con cols=%d line=%d " ,CMD_COLS,CMD_LINES);
//system(sysSetBuf);
system("color 5");
}//设置显示信息的行数,列数和背景颜色等信息
int mainlook()
{
SetScreenGrid();
int c;
do
{
//设置字体为绿色
system("cls");
cout<>c;
switch(c)
{
case 1: system("cls");mainloop1(); break;
case 2:system("cls");mainloop2();break;
case 3: system("cls");mainloop3();break;
case 4: system("cls");mainloop4(); break;
case 5: system("cls");mainloop5(); break;
case 6: system("cls");mainloop6(); break;
case 7: system("cls");mainloop7(); break;
case 8: system("cls");mainloop8(); break;
case 9:system("cls");mainloop9();break;
case 10:system("cls");mainloop10();break;
default: break;
}
}while(c!=0);
return 0;
}
int main()
{
mainlook();
return 0;
}
1. 设置公共类students,设置姓名Name,学号Number,数学成绩Math,英语成绩English,计算机成绩Computer,四个属性来存储学生成绩记录。
2.公共类设置15个函数来获取信息与成绩及初始化。
1) Students(char *sNane, int cNumber,int sMath,int sEnglish,int sComputer);
2) Students()
3) {}
4) ~Students()
5) {}
6) char* GetName();
7) void SetName(char* sName);//获取姓名
8) int GetNumber();
9) void SetNumber(int sNumber);//获取学号
10) int GetMath();
11) void SetMath(int sMath);//获取数学成绩
12) int GetEnglish();
13) void SetEnglish(int sEnglish);//获取英语成绩
14) int GetComputer();
15) void SetComputer(int sComputer);//获取计算机成绩
3.功能函数。
1) 添加修改成绩功能。
2) 初始化一个对象数组,采用带参数的构造函数初始化记录,完成学生信息的添加,修改功能。
3) 2,删除学生成绩功能。
4) 设置计数器,与学号关联,查询到要删去的学号,去掉该学生的成绩,其他的成绩依次向前移动一位,学生成绩总数减一位。
5) 排序,最低最高成绩功能。
6) 进行学生成绩的排序,对象数组下标为0的是最低成绩,为计数器数字减一的是最高成绩。
7) 各个分数段人数。
8) 进行简单的筛选,外加计数器。
4.排序采用简单的冒泡排序,时间复杂度为O(n)。
5.菜单设计。
函数工能组合后,为mainloop1-10,为了能进行多次功能选择,采用永真的while(1)循环,只有当判断条件(c==0)满足时退出系统。
循环中采用switch,case结构方便进行选择。
6.主窗体设计。
采用system(“cls”)函数调动DOS下的清屏功能,system("color 5")进行文字背景颜色选择功能,使界面看起来美观。
使用system("pause")函数,是程序暂停,给使用者以选择的时间。
1.使各个功能能够持续不断地进行,而不丢失已经录入的数据。
设置一个全局变量的对象数组,每个函数对数组进行操作。
2.菜单设置每次单个功能完成后能再次回到菜单继续执行命令,以及程 序的退出。
为了能进行多次功能选择,采用永真的while(1)循环,只有当判断 条件(c==0)满足时退出系统。
循环中采用switch,case结构方便进行选择。
3.功能执行时,没有给以选择时间,程序闪退。
使用system("pause")函数,是程序暂停,给使用者以选择的时间。
4.快速设置改变背景色,样式,标题,等格式。
采用system(“cls”)系列的函数,调用系统命令,快速改变样式。
例如:
sprintf(sysSetBuf,"mode con cols=%d line=%d " ,CMD_COLS,CMD_LINES);
system(sysSetBuf);
system("color 5");
1) 实验过程中学到了不少的知识,例如如何设置菜单,改界面,完一个简单的数据的增删改查的功能,以及简单的从文件中读取 数据的操作,对文件中的数据进行操作。
2)了解了做一个项目的大致的流程。感觉总体功能做的可以了,也设 置了一个简单的界面。
3) 从文件中读入,写入数据可以采用文件的输入输出流。例如:
#include
#include
using namespace std;
int main()
{
ofstream fout;
fout.open("output.txt");
fout << "Here is a number: " << "/n";
fout << "Now here is a string: " << "/n";
fout << flush
fout.close();
ifstream fin("input.txt");
return 0;
}
时间紧急没有来的及完成。