最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

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

来源:动视网 责编:小OO 时间:2025-09-26 18:05:25
文档

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

项目设计题目(学生成绩管理系统)学号:姓名:自评成绩:成绩:1.选题意义、依据学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。依据学生期末成绩表的格式。2.系统功能设计与分析(功能模块说明)系统主要用于从一个文件夹读入学生信息(101张三857887102李斯575960103王红847987104赵子龙727576105李洪磊88),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函
推荐度:
导读项目设计题目(学生成绩管理系统)学号:姓名:自评成绩:成绩:1.选题意义、依据学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。依据学生期末成绩表的格式。2.系统功能设计与分析(功能模块说明)系统主要用于从一个文件夹读入学生信息(101张三857887102李斯575960103王红847987104赵子龙727576105李洪磊88),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函
项目设计题目(学生成绩管理系统)

学号:        姓名:      自评成绩:       成绩:          

1.选题意义、依据

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

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

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

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

(101 张三   85 78 87

102 李斯   57 59 60 

103 王红   84 79 87

104 赵子龙 72 75 76  

105 李洪磊 88 98 ),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函数 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,<60分为disqualified。

Listnumber 函数主要用于把学生的信息(学号 姓名 数学 英语 数据库 总分 平均分 名次 备注)以学号排名的顺序用表的形式输出,方便学生查看。Listnumber 函数中还调用了Cscore 和Rank 函数。

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

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

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

Delete 函数用于删除指定学生的信息。可用两种方式删除:以学号形式删除学生信息,以姓名形式删除学生信息。若要删除了学生不存在则输出“message 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<<"Please input the filenames: ";

cin>>filename;

    infile.open(filename.c_str());

    if (!infile)

    {

     cout<<"Can't open the input file."<        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<<"Y or N 进入菜单栏 "< cin>>ch;

 ch=toupper(ch);

 while (ch=='Y')

 {

cout< <<" 菜单:"< <<" 1)查 询"< <<" 2)修 改"< <<" 3)删 除"< <<" 4)插 入"< <<" 5)成绩单(以学号排名)"<     <<" 6)成绩单(以名次排名)"< cout<<"***请选择 1--4 中任何一个:"< 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<<"error input!"<    }

cout< cin>>ch;

   ch=toupper(ch);

 }

cout<<"Thank you for using!"< <<"Bye bye !"<    infile.close();

    return 0;

}  //end main

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        {

            if (sum0[j]==sum0[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<<"excellent";

        }

     else if (ave>=80)

        {

         cout<<"medium";

        }

         else if (ave>=60)

            {

         cout<<"qualified";

            }

                 else

                 {

                 cout<<"disqualified";

                 }

     cout<}

void Listnumber(int i)

{

    int j;

    Cscore(i);

cout<<"学号   姓名  数学  英语  数据库  总分  平均分  名次  备注 "< for (j=0; j    {   

     cout<         <     cout<     cout<     cout<        Rank(stu[j].average);

    }

}

void Listscore(int  i)

{

    int j,k;

    Cscore(i);

cout<<"学号   姓名  数学  英语  数据库  总分  平均分  名次  备注 "< for (j=1; j    {

     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<<"Please select you check score ways."< cout<<"1 is use number,0 is use name."< cin>>n;

    if (n)    //以学号形式查询学生信息

    {

     cout<<"Please input student number: ";

     cin>>numb;

     for (j=0;j        {

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

            {

                k=j;

                break;

            }

        }

    }

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

    {

     cout<<"Please input student name: ";

     cin>>name1;

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

            {

                k=j;

                break;

            }

    }

    if (k==MAX)

    {

cout<<"Input message is error."<    }

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

    {

        Cscore(i);

     cout<<"学号   姓名  数学  英语  数据库  总分  平均分  名次  备注 "<     cout<         <     cout<      cout<     cout<        Rank(stu[j].average);

    }

}

void Alter(int i) //修改指定学号的学生信息

{

    int numb,j; 

cout<<"alter begin..."< cout<<"Please input number:";

cin>>numb;

for (j=0;j {

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

     {

     cout<<"find out:"< cout<<"学号:"< cout<<"Please input new result: 数学  英语  数据库 "< 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<<"delete begin..."< cout<<"Please select:"< cout<<" [1]以学号形式删除学生信息"< cout<<" [0]以姓名形式删除学生信息"< cin>>k;

    if (k)    //以学号形式删除学生的信息

    {

     cout<<"Please input delete number:";

     cin>>numb;

     for (j=0;j        {

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

                break;

        }

    }

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

    {

     cout<<"Please input delete name:";

     cin>>name0;

     for (j=0;j        {

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

                break;

        }

    }

if (j    {

     for(; j        {

            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<<"message error."<}

void Insert(int &i)    //插入学生的信息

{

    int j,n;

cout<<"insert begin..."< cout<<"Please input insert number of people:";

cin>>n;

    i=i+n;

cout<<"Please input insert message.form:"< cout<<"学号 姓名 数学 英语 数据库 "< for (j=i-n; j    {

     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<<"学号   姓名  数学  英语  数据库  总分  平均分  名次  备注 "< for (j=i-n; j    {   

     cout<         <     cout<     cout<     cout<        Rank(stu[j].average);

    }

}

6.运行结果与分析

运行结果:

分析:

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

Insert 函数代码如下:

void Insert(int &i)    //插入学生的信息

{

    int j,k,n,m,first,last,mid;

    int num0,math0,english0,database0;

    char name0[8];

cout<<"insert begin..."< cout<<"Please input insert number of people:";

cin>>n;

    m=i+n;

    first=0;

    last=i-1;

    mid=(first+last)/2;

cout<<"Please input insert message.form:"< cout<<"学号 姓名 数学 英语 数据库 "< for (j=i; j    {

        i=i+1;

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

     while (first<=last)

        {

         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<<"message error."<        }

        first=0;

        last=i-1;

        mid=(first+last)/2;

    }

    Cscore(i);

}

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

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

文档

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

项目设计题目(学生成绩管理系统)学号:姓名:自评成绩:成绩:1.选题意义、依据学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。依据学生期末成绩表的格式。2.系统功能设计与分析(功能模块说明)系统主要用于从一个文件夹读入学生信息(101张三857887102李斯575960103王红847987104赵子龙727576105李洪磊88),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top