课程设计---学生成绩管理系统

/*********************************************************** 
* 版权所有 (C)2016,HuangYujiao 
* 
* 文件名称:Student.h 
* 文件标识:无 
* 内容摘要:函数文件 
* 其它说明:各个模块函数 
* 当前版本:V6.0 
* 作 者:黄玉娇 
* 完成日期: 20161229 
* 
* 修改记录1: 
* 修改日期 :20161205 
* 版本号: V1.0 
* 修改人: 黄玉娇 
* 修改内容:创建 
* 
* 修改记录2: 
* 修改日期:20161215 
* 版本号: V2.0 
* 修改人: 黄玉娇 
* 修改内容:模块建立1 
* 
* 修改记录3: 
* 修改日期:20161226 
* 版本号: V3.0 
* 修改人: 黄玉娇 
* 修改内容:模块建立2 
* 
* 修改记录4: 
* 修改日期:20161227 
* 版本号: V4.0 
* 修改人: 黄玉娇 
* 修改内容:模块建立3 
* 
* 修改记录5: 
* 修改日期:20161228 
* 版本号: V5.0 
* 修改人: 黄玉娇 
* 修改内容:整理函数 
* 
* 修改记录6: 
* 修改日期: 20161229 
* 版本号: V6.0 
* 修改人: 黄玉娇 
* 修改内容:界面整合 
**********************************************************/  

student.h代码:

#ifndef STU_H_INCLUDED
#define STU_H_INCLUDED

#include<stdio.h>
#include<fstream>
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<conio.h>//用于getch函数
using namespace std;
#define N 30
#define M 3
typedef struct student
{
    char number[10];
    char name[20];
    float score[M];
    float aver;
    float total;
} STU;
//extern STU stu[N];
//extern int n;
void inputscore();
void savescore();
void avergescore();
void total();
void modifyscore();
void lookscore();
void searchscore();
void statistic();
void add();
void modify();
void delscore();
void menu();

#endif   //STU_H_INCLUDED
student.cpp代码:

#include "student.h"

int n;
STU stu[N];

/******************************菜单*********************************/
void menu(void)
{
    system("cls");
    printf("\n");
    printf("         **************欢迎进入学生成绩管理系统***********\n");
    printf("         **                      菜单                   **\n");
    printf("         ** 1.输入成绩                                  **\n");
    printf("         ** 2.查看成绩及成绩排序                        **\n");
    printf("         ** 3.查询学生成绩                              **\n");
    printf("         ** 4.成绩统计                                  **\n");
    printf("         ** 5.修改成绩                                  **\n");
    printf("         ** 6.添加成绩                                  **\n");
    printf("         ** 7.删除成绩                                  **\n");
    printf("         ** 8.保存成绩                                  **\n");
    printf("         ** 9.退出系统                                  **\n");
    printf("         *************************************************\n");
    printf("          请输入您的选择\n");

}
/***************输入各个同学的学生信息******************************/
void inputscore()
{
    int i,j;
    system("color 2B");
    printf("请输入学生总数:\n");
    scanf("%d",&n);
    printf("提示:*输入学号时请输入由1位大写字母和8位数字组成的学号,如P01214000*\n");		/*因二维数组上下需对正故有此要求*/
    for(i=0; i<n; i++)
    {
        printf("请输入学生%d的学号 姓名:\n",i+1);
        scanf("%s%s",stu[i].number,stu[i].name);
        printf("请输入学生成绩:\n");
        printf("高数\t英语\tC语言\n");
        for(j=0; j<M; j++)
            scanf("%f",&stu[i].score[j]);
    }
    printf("成功输入\n");
}
/*****************计算各个同学的总分*****************************/
void total()
{
    int i,j;
    system("color 2B");
    for(i=0; i<n; i++)
    {
        stu[i].total=0;
        for(j=0; j<M; j++)
        {
            stu[i].total+=stu[i].score[j];
        }
    }
}
/*****************计算各个同学的平均分*****************************/
void avergescore()
{
    int i,j;
    system("color 2B");
    for(i=0; i<n; i++)
    {
        stu[i].aver=0;
        for(j=0; j<M; j++)
        {
            stu[i].aver+=stu[i].score[j];
        }
        stu[i].aver=stu[i].aver/M;
    }
}
/************查看学生成绩及根据平均分对学生进行排序*********************/
void lookscore()
{
    int i,j,k;
    system("color 2B");
    STU t;
    total();
    avergescore();
    for(i=0; i<n-1; i++)
    {
        for(k=i,j=i+1; j<n; j++)
            if(stu[j].aver>stu[k].aver)
                k=j;
        if(k!=j)
        {
            t=stu[k];
            stu[k]=stu[i];
            stu[i]=t;
        }
    }
    printf("名次\t学号\t\t姓名\t高数\t英语\tC语言\t总分\t平均分\n");
    for(i=0; i<n; i++)
    {
        printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
        for(j=0; j<M; j++)
            printf("%4.2f\t",stu[i].score[j]);
        printf("%4.2f\t",stu[i].total);
        printf("%4.2f",stu[i].aver);
        printf("\n");
    }

}
/*****************通过输入学号查找学生成绩***************************/
void searchscore()
{
    char a[10];
    system("color 2B");
    int i,j;
    printf("请输入需查询的学生学号\n");
    scanf("%s",a);
    for(i=0; i<n; i++)
    {
        if(strcmp(a,stu[i].number)==0)
        {
            printf("名次\t学号\t\t姓名\t高数\t英语\tC语言\t总分\t平均分\n");
            printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
            for(j=0; j<M; j++)
                printf("%4.2f\t",stu[i].score[j]);
            printf("%4.2f\t",stu[i].total);
            printf("%4.2f",stu[i].aver);
            printf("\n");
            break;							/*找到该学生成绩信息后跳出for循环*/
        }
        else
            printf("未找到该学生信息\n");
    }

}
/*******统计学生成绩信息,平均分及格率,优秀率****************/
void statistic()
{
    STU *p=stu;
    system("color 2B");
    int i;
    float count=0.0,sum=0.0;
    for(i=0; i<n; i++)
    {
        sum+=(p+i)->aver;
    }
    printf("该班级平均分为%4.2f\n",sum/n);		/*平均分计算*/
    for(i=0; i<n; i++)
    {
        if((p+i)->aver>=60)
            count++;
    }
    printf("该班级及格率为%4.2f%%\n",count/n*100);	/*及格率计算*/
    count=0.0;
    for(i=0; i<n; i++)
    {
        if((p+i)->aver>=90)
            count++;
    }
    printf("该班级优秀率为%4.2f%%\n",count/n*100);	/*优秀率计算*/
    printf("平均分低于60的学生名单\n");
    for(i=0; i<n; i++)
    {
        if(stu[i].aver<60)
            printf("%s\n",stu[i].name);
    }														/*统计不及格学生名单*/

}
/***************修改学生成绩*****************/
void modify()
{
    char a[10];
    int i,j;
    system("color 2B");
    printf("请输入需要修改成绩的学生学号\n");
    scanf("%s",a);
    for(i=0; i<n; i++)
    {
        if(strcmp(a,stu[i].number)==0)
        {
            printf("名次\t学号\t\t姓名\t高数\t英语\tC语言\t总分\t平均分\n");
            printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
            for(j=0; j<M; j++)
                printf("%4.2f\t",stu[i].score[j]);
            printf("%4.2f",stu[i].total);
            printf("%4.2f",stu[i].aver);
            printf("\n");
            printf("请重新输入该学生的学号 姓名:\n");
            scanf("%s%s",stu[i].number,stu[i].name);
            printf("请重新输入学生成绩:\n");
            printf("高数\t物理\tC语言\n");
            for(j=0; j<M; j++)
                scanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行修改,跳出for循环*/
            printf("修改成功\n");
            break;
        }
        else
            printf("请确认该学生是否为本班学生!\n");
    }

}
/*****************添加学生成绩********************/
void add()
{
    int a,i,j;
    system("color 2B");
    printf("请输入新增加的学生人数:\n");
    scanf("%d",&a);
    n=n+a;
    for(i=n-a; i<n; i++)
    {
        printf("请输入学生%d的学号 姓名:\n",i+1);
        scanf("%s%s",stu[i].number,stu[i].name);
        printf("请输入学生成绩:\n");
        printf("高数\t物理\tC语言\n");
        for(j=0; j<M; j++)
            scanf("%f",&stu[i].score[j]);
        printf("添加成功\n");
    }
}
/*******************删除学生成绩*************************/
void delscore()
{
    int i,j,c;
    char m,a[10];
    system("color 2B");
    printf("请输入学生学号\n");
    scanf("%s",a);
    for(i=0; i<n; i++)
    {
        if(strcmp(a,stu[i].number)==0)
        {
            printf("名次\t学号\t\t姓名\t高数\t英语\tC语言\t总分\t平均分\n");
            printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
            for(j=0; j<M; j++)
                printf("%4.2f\t",stu[i].score[j]);
            printf("%4.2f\t",stu[i].total);
            printf("%4.2f",stu[i].aver);
            printf("\n");
            c=i;
            break;
        }
        else
            printf("未找到该学生信息\n");
    }
    printf("是否删除该学生成绩(y/n)\n");
    scanf("%s",&m);
    if(m=='y')
    {
        for(i=c; i<n-1; i++)
            stu[i]=stu[i+1];			/*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/
        n=n-1;						/*删除该学生信息后学生总数减一*/
        printf("删除成绩成功\n");
    }
    else
        printf("删除成绩失败\n");
}
/******************保存学生成绩************************/
void savescore()
{
    ofstream outfile;
    outfile.open("score.txt", ios::out);
    for(int i=0; i<n; i++)
    {
        outfile<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].score[0]<<" "<<stu[i].score[1]
               <<" "<<stu[i].score[2]<<" "<<endl;
    }
    printf("信息录入成功!\n");
    outfile.close();
}

main.cpp代码:

#include "student.h"
int main()
{
    short int flag=0;
    system("color 2B");
    menu();
    do
    {
        flag=1;
        switch(getch())
        {
        case '1' :
            inputscore();
            break;    /*输入成绩*/
        case '2' :
            lookscore();
            break;	/*查看成绩*/
        case '3' :
            searchscore();
            break;	/*查找成绩*/
        case '4' :
            statistic();
            break;	/*成绩统计*/
        case '5' :
            modify();
            break;		/*修改成绩*/
        case '6' :
            add();
            break;			/*添加成绩*/
        case '7' :
            delscore();
            break;	/*删除成绩*/
        case '8' :
            savescore();
            break;	/*保存成绩*/
        case '9' :
            exit(0);				/*退出程序*/
        default :
            printf("输入有误\n");
        }
        printf("按任意键继续\n");
        getch();
        menu();
    }
    while (flag==1);
    return 0;
}

运行截图:

(1)输入成绩


(2)查看成绩


(3)查询成绩


(4)成绩统计


(5)修改成绩


(6)添加成绩


(7)删除成绩


(8)保存成绩




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值