学生成绩管理系统C++程序设计Word文件下载.doc
- 文档编号:6873350
- 上传时间:2023-05-07
- 格式:DOC
- 页数:19
- 大小:312.50KB
学生成绩管理系统C++程序设计Word文件下载.doc
《学生成绩管理系统C++程序设计Word文件下载.doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统C++程序设计Word文件下载.doc(19页珍藏版)》请在冰点文库上搜索。
Alter函数是修改指定学号的学生信息。
主要用于修改指定学号学生的各科成绩并输出修改后的学生信息(学号姓名数学英语数据库总分平均分名次备注)。
Delete函数用于删除指定学生的信息。
可用两种方式删除:
以学号形式删除学生信息,以姓名形式删除学生信息。
若要删除了学生不存在则输出“messageerror.”。
Insert函数用来插入学生的信息,一次调用Insert函数可以添加多个学生的信息。
Insert函数中还调用了Cscore和Rank函数。
3.涉及的主要知识点说明
(1)系统主要运用了函数的声明、定义、调用(值调用和地址调用)。
(2)对文件的读入操作。
(3)在平均分的求取上采用四舍五入的方式,运用了类型转换。
(4)多次运用if和for嵌套,在for嵌套中又运用了break语句。
(5)运用了switch。
(6)对字符数组的比较中运用了strcmp,还运用toupper把小写字母转换成大写。
(7)对学生信息进行的插入和有序删除操作。
(8)运用iomanip对输出进行美观。
4.创新性说明(怎么解决)
创新性:
系统可以对具有相同总分学生的学生输出相同的名次。
若存在三个相同的分数都为第二名,则在输出时出现三个第二名不会出现第三、四名,紧接着出现第五名。
解决方法:
(1)用一个数组记录具有相同分数的人数,数组下标和学生信息所具有的下标相同;
(2)删除相同的总分只保留其中一个分数;
(3)对删除相同总分的分数按从高到底进行排序;
(4)对各个学生的总分进行排名。
5.源代码
//******************************************************************
//Studentachievementprogram
//Thisprogramhaseightfunctionsofstudentsgrade,includinglist
//scoreranking,lookup,alter,delete,insertandrank.Fromthefilereadin
//studentachievement.Scoresofpeoplehavethesamesameplace.
#include<
iostream>
string>
cctype>
cstring>
iomanip>
fstream>
voidCscore(int);
voidRank(intave);
voidListnumber(inti);
voidListscore(inti);
voidLookup(int);
voidAlter(int);
voidDele(int&
voidInsert(int&
usingnamespacestd;
constintMAX=100;
structstudent//定义学生信息结构体
{
intnum;
charname[8];
intmath;
intenglish;
intdatabase;
intsum;
intaverage;
intscore;
}stu[MAX];
intmain()//主函数
{
inti,k;
charch;
stringfilename;
ifstreaminfile;
cout<
<
"
Pleaseinputthefilenames:
"
;
cin>
filename;
infile.open(filename.c_str());
if(!
infile)
{
cout<
Can'
topentheinputfile."
endl;
return1;
}
for(i=0;
i<
MAX&
&
infile;
i++)
infile>
stu[i].num>
stu[i].name>
stu[i].math>
stu[i].english>
stu[i].database;
stu[i].sum=stu[i].math+stu[i].english+stu[i].database;
stu[i].average=int(float(stu[i].sum)/3+0.5);
i=i-1;
cout<
endl<
Welcometo学生成绩管理系统"
YorN进入菜单栏"
cin>
ch;
ch=toupper(ch);
while(ch=='
Y'
)
{
endl
<
菜单:
1)查询"
2)修改"
3)删除"
4)插入"
<
5)成绩单(以学号排名)"
6)成绩单(以名次排名)"
cout<
***请选择1--4中任何一个:
cin>
k;
switch(k)
case1:
Lookup(i);
break;
case2:
Alter(i);
case3:
Dele(i);
case4:
Insert(i);
case5:
Listnumber(i);
case6:
Listscore(i);
default:
cout<
errorinput!
cout<
继续选择YorN?
cin>
ch=toupper(ch);
}
Thankyouforusing!
<
Byebye!
infile.close();
return0;
}//endmain
voidCscore(inti)//对学生分数进行排名
inth[MAX],b[MAX],score[MAX+1],n,k,j;
intsum0[MAX],s;
n=i;
for(j=0;
j<
i;
j++)
sum0[j]=stu[j].sum;
h[j]=0;
for(k=0;
k<
k++)
{
if(sum0[j]==sum0[k])
{
h[j]++;
//具有同一分数的人数
}
}//endfor
}//endfor
j++)//删除多个同一分数只保留其中一个分数
for(k=j+1;
if(sum0[j]==sum0[k])
sum0[k]=sum0[i-1];
i--;
k--;
}
j++)//按从高到底的顺序对总分进行排名
for(k=j+1;
if(sum0[j]<
sum0[k])
s=sum0[j];
sum0[j]=sum0[k];
sum0[k]=s;
}//endif
b[0]=0;
score[0]=1;
j++)//对学生成绩进行排名
for(k=0;
n;
if(sum0[j]==stu[k].sum)
score[j+1]=score[j]+b[j];
stu[k].score=score[j+1];
b[j+1]=h[k];
}
voidRank(intave)//对学生等级输出
if(ave>
=90)
cout<
excellent"
elseif(ave>
=80)
medium"
elseif(ave>
=60)
cout<
qualified"
else
{
cout<
disqualified"
}
cout<
voidListnumber(inti)
intj;
Cscore(i);
学号姓名数学英语数据库总分平均分名次备注"
{
setw
(1)<
stu[j].num<
setw(9)<
stu[j].name<
setw(4)<
stu[j].math<
setw(6)
<
stu[j].english<
setw(6)<
stu[j].database;
setw(8)<
stu[j].sum<
setw(7)<
stu[j].average;
setw(7);
stu[j].score<
"
Rank(stu[j].average);
voidListscore(inti)
intj,k;
for(j=1;
i+1;
if(stu[k].score==j)
cout<
stu[k].num<
stu[k].name<
stu[k].math<
<
stu[k].english<
stu[k].database;
cout<
stu[k].sum<
stu[k].average;
stu[k].score<
Rank(stu[k].average);
voidLookup(inti)//运用学号或姓名形式查询单个学生信息
intj,k,n,numb;
charname1[8];
Pleaseselectyoucheckscoreways."
1isusenumber,0isusename."
if(n)//以学号形式查询学生信息
Pleaseinputstudentnumber:
cin>
numb;
for(j=0;
j<
j++)
if(numb==stu[j].num)
k=j;
break;
else//以姓名形式查询学生信息
Pleaseinputstudentname:
name1;
if(strcmp(stu[j].name,name1)==0)
break;
if(k==MAX)
cout<
Inputmessageiserror."
else//如果学生存在则输出学生信息
Cscore(i);
cout<
voidAlter(inti)//修改指定学号的学生信息
intnumb,j;
alterbegin..."
Pleaseinputnumber:
for(j=0;
if(numb==stu[j].num)
{
findout:
cout<
学号:
姓名:
Pleaseinputnewresult:
数学英语数据库"
cin>
stu[j].math>
stu[j].english>
stu[j].sum=stu[j].math+stu[j].english+stu[j].database;
stu[j].average=int(float(stu[j].sum)/3.0+0.5);
Cscore(i);
//输出修改后该学号学生的信息
cout<
Rank(stu[j].average);
break;
}
i)//删除指定学生的信息
intnumb,j,k;
charname0[8];
deletebegin..."
Pleaseselect:
[1]以学号形式删除学生信息"
[0]以姓名形式删除学生信息"
if(k)//以学号形式删除学生的信息
Pleaseinputdeletenumber:
else//以姓名形式删除学生的信息
Pleaseinputdeletename:
name0;
if(strcmp(name0,stu[j].name)==0)
if(j<
i)
for(;
i-1;
stu[j].num=stu[j+1].num;
strcpy(stu[j].name,stu[j+1].name);
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
stu[j].database=stu[j+1].database;
stu[j].sum=stu[j+1].sum;
stu[j].average=stu[j+1].average;
i=i-1;
else
messageerror."
i)//插入学生的信息
intj,n;
insertbegin..."
Pleaseinputinsertnumberofpeople:
i=i+n;
Pleaseinputinsertmessage.form:
学号姓名数学英语数据库"
for(j=i-n;
stu[j].num>
stu[j].name>
stu[j].sum=stu[j].math+stu[j].english+stu[j].database;
stu[j].average=int(float(stu[j].sum)/3.0+0.5);
6.运行结果与分析
运行结果:
分析:
系统基本上能实现对成绩的查询、、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)等功能,并且可以插入多个学生的信息。
但在插入学生后未不能成绩单以学号排名的形式输出。
为了改进程序对Inser
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 C+ 程序设计