学生成绩管理系统C++程序设计_c学生成绩管理系统

其他范文 时间:2020-02-27 17:20:50 收藏本文下载本文
【www.daodoc.com - 其他范文】

学生成绩管理系统C++程序设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c学生成绩管理系统”。

项目设计题目(学生成绩管理系统)

学号:

姓名:

自评成绩:

成绩:

1.选题意义、依据

学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。

依据学生期末成绩表的格式。

2.系统功能设计与分析(功能模块说明)

系统主要用于从一个文件夹读入学生信息(101 张三

78 87 102 李斯

103 王红

79 87 104 赵子龙 72 75 76

李洪磊 88 98 89),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函数 void Cscore(int);void Rank(int ave);void Listnumber(int i);

void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);系统主要实现的功能有:查询、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)。

Cscore 函数主要是对学生进行排名。具有相同总分的学生具有相同的名次,例如:第三名和第四名具有相同的总分则在表中不会出现第四名,将出现两个第三名紧接着出现第五名学生的情况。

Rank 函数主要用于按平均分对学生进行备注。把学生分为四个等级:>90分为excellent,80—90分为medium,60—80分为qualified,

Listscore 函数是把学生的信息以总成绩排名的形式输出。

Lookup 函数主要运用学号或姓名形式查询单个学生信息,如果存在则输出该学生信息(学号 姓名 数学 英语 数据库 总分 平均分 名次 备注),否则输出“Input meage is error.”。

Alter 函数是修改指定学号的学生信息。主要用于修改指定学号学生的各科成绩并输出修改后的学生信息(学号 姓名 数学 英语 数据库 总分 平均分 名次 备注)。

Delete 函数用于删除指定学生的信息。可用两种方式删除:以学号形式删除学生信息,以姓名形式删除学生信息。若要删除了学生不存在则输出“meage error.”。

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.源代码

//****************************************************************** //Student achievement program //This program has eight functions of students grade,including list //score ranking,lookup,alter,delete,insert and rank.From the file read in //student achievement.Scores of people have the same same place.//****************************************************************** #include #include #include #include #include #include

void Cscore(int);void Rank(int ave);void Listnumber(int i);void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);

using namespace std;const int MAX=100;

struct student

//定义学生信息结构体 { int num;char name[8];int math;int english;int database;int sum;int average;int score;}stu[MAX];

int main()

//主函数 {

int i,k;char ch;string filename;ifstream infile;

cout>filename;infile.open(filename.c_str());if(!infile){

cout

return 1;} for(i=0;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

学生成绩管理系统

cout>ch;ch=toupper(ch);while(ch=='Y'){ cout

菜单:”

1)查 询“

2)修 改”

3)删 除“

4)插 入”

5)成绩单(以学号排名)“

6)成绩单(以名次排名)”

cout

cin>>k;

cout

switch(k){

case 1:Lookup(i);break;

case 2:Alter(i);break;

case 3:Dele(i);break;

case 4:Insert(i);break;

case 5:Listnumber(i);break;

case 6:Listscore(i);break;

default :cout

cout

cin>>ch;

ch=toupper(ch);} cout

void Cscore(int i)

//对学生分数进行排名 { int h[MAX],b[MAX],score[MAX+1],n,k,j;int sum0[MAX],s;n=i;for(j=0;j

sum0[j]=stu[j].sum;} for(j=0;j

h[j]=0;for(k=0;k

h[j]++;

//具有同一分数的人数

} } //end for } //end for for(j=0;j

//删除多个同一分数只保留其中一个分数 { for(k=j+1;k

if(sum0[j]==sum0[k])

{

sum0[k]=sum0[i-1];

i--;

k--;

} } } //end for for(j=0;j

//按从高到底的顺序对总分进行排名 { for(k=j+1;k

if(sum0[j]

{

s=sum0[j];

sum0[j]=sum0[k];

sum0[k]=s;

} //end if } //end for } //end for b[0]=0;score[0]=1;for(j=0;j

//对学生成绩进行排名 { for(k=0;k

if(sum0[j]==stu[k].sum)

{

score[j+1]=score[j]+b[j];

stu[k].score=score[j+1];

b[j+1]=h[k];

} //end if

} //end for } //end for }

void Rank(int ave)

//对学生等级输出 { if(ave>=90)

{

cout

}

else if(ave>=80)

{

cout

}

else if(ave>=60)

{

cout

}

else

{

cout

}

cout

void Listnumber(int i){ int j;Cscore(i);cout

姓名

数学

英语

数据库

总分

平均分

名次

备注

cout

cout

cout

cout

Rank(stu[j].average);} }

void Listscore(int i){ int j,k;Cscore(i);cout

姓名

数学

英语

数据库

总分

平均分

名次

备注

for(k=0;k

{

if(stu[k].score==j)

{

cout

cout

cout

cout

Rank(stu[k].average);

}

} } }

void Lookup(int i)

//运用学号或姓名形式查询单个学生信息 { int j,k,n,numb;char name1[8];

cout>n;if(n)

//以学号形式查询学生信息

{

cout

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

{

k=j;

break;

}

} } else

//以姓名形式查询学生信息

{

cout

cin>>name1;

for(j=0;j

if(strcmp(stu[j].name,name1)==0)

{

k=j;

break;

} } if(k==MAX){

cout

//如果学生存在则输出学生信息

{

Cscore(i);

cout

姓名

数学

英语

数据库

总分

平均分

名次

备注

cout

cout

cout

cout

Rank(stu[j].average);} }

void Alter(int i)//修改指定学号的学生信息 { int numb,j;

cout

cout

cin>>numb;for(j=0;j

if(numb==stu[j].num)

{

cout

cout

cout

英语

数据库 ”

cin>>stu[j].math>>stu[j].english>>stu[j].database;

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

姓名

数学

英语

数据库

总分

平均分

名次

备注

cout

cout

cout

cout

Rank(stu[j].average);

break;

} } }

void Dele(int &i)

//删除指定学生的信息 { int numb,j,k;char name0[8];cout

cout

[1]以学号形式删除学生信息”

[0]以姓名形式删除学生信息“>k;if(k)

//以学号形式删除学生的信息

{

cout

cin>>numb;

for(j=0;j

{

if(numb==stu[j].num)

break;

} } else

//以姓名形式删除学生的信息

{

cout

cin>>name0;

for(j=0;j

{

if(strcmp(name0,stu[j].name)==0)

break;

}

}

void Insert(int &i)

//插入学生的信息 { int j,n;cout>n;i=i+n;cout

cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;

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

姓名

数学

英语

数据库

总分

平均分

名次

备注

cout

cout

cout

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;Cscore(i);} else cout

cout

运行结果:

分析:

系统基本上能实现对成绩的查询、、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)等功能,并且可以插入多个学生的信息。但在插入学生后未不能成绩单以学号排名的形式输出。为了改进程序对Insert 函数进行了一下修改。

Insert 函数代码如下:

void Insert(int &i)

//插入学生的信息 {

int j,k,n,m,first,last,mid;int num0,math0,english0,database0;char name0[8];cout>n;m=i+n;first=0;last=i-1;mid=(first+last)/2;cout>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database;while(first

if(stu[j].num

{

last=mid-1;

}

else if(stu[j].num>stu[mid].num)

{

first=mid+1;

}

else

{

break;

}

mid=(first+last)/2;} if(first>last){

num0=stu[j].num;

strcpy(name0,stu[j].name);

math0=stu[j].math;

english0=stu[j].english;

database0=stu[j].database;

for(k=i-1;k>first;k--)

//进行有序插入

{

stu[k].num=stu[k-1].num;

strcpy(stu[k].name,stu[k-1].name);

stu[k].math=stu[k-1].math;

}

stu[k].english=stu[k-1].english;

stu[k].database=stu[k-1].database;

stu[k].sum=stu[k-1].sum;

stu[k].average=stu[k-1].average;

}

stu[first].num=num0;

strcpy(stu[first].name,name0);

stu[first].math=math0;

stu[first].english=english0;

stu[first].database=database0;

stu[first].sum=stu[first].math+stu[first].english+stu[first].database;

stu[first].average=int(float(stu[first].sum)/3.0+0.5);} else {

cout

last=i-1;

mid=(first+last)/2;} Cscore(i);

修改后程序经运行后结果如下:

结果发现修改后的程序运用了二分查找法、多重嵌套等,能较好的实现对学生的信息以学号为序进行了多个数据的有序插入。

C++程序设计—电话簿管理系统

XXXXXXXXXXXC/C++程序设计实训电话簿管理系统学生姓名 ×××× 学 号 ×××× 所在学院 ×××× 专业名称 ×××× 班 级 ×××× 指导教师XXXXXXXXXXXXXXXXXXX XXXXXX......

C++课程设计学生成绩管理分析系统

五、解决方案 C++程序设计实践教学环节任务书1.分析程序的功能要求,划分程序功能模块。2.画出系统流程图。一、题目: 学生成绩管理分析系统 3.代码的编写。定义类和各个功能......

C程序设计学生成绩管理

《C程序设计》综合性实验实验报告题目: 学生成绩管理姓名: 班级: 学号: 指导教师: 完成时间:一、实验题目学生成绩管理二、实验目的1.掌握一维数组、二维数组的使用方法。 2.掌握......

长安大学C++设计 学生成绩管理系统实验报告

C++程序设计实验报告院系:电子与控制工程学院 交通信息与控制工程系 学号:2011320101 姓名:XXX2012年11月20 日学生信息管理系统一、问题描述和需求分析;编写一个学生信息管理系......

学生成绩管理系统

//*学生成绩管理系统*//#include#define N 3struct student{int no;char name[20];float english;float computer;float math;float average;};void getcla(struct student......

下载学生成绩管理系统C++程序设计word格式文档
下载学生成绩管理系统C++程序设计.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文