IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 用c语言做学生成绩统计程序 -> 正文阅读

[C++知识库]用c语言做学生成绩统计程序

下文仅代表个人对c语言的见解。
?

一、本程序的功能要求

1.录入学生信息和成绩

2.查找学生信息和

3.增加学生信息

4.修改学生信息

5.删除学生信息

6.打印学生成绩排名

7.打印出优秀和不及格学生

8.退出程序

二、程序设计的思想

我们的思路要对它有一个大概的轮廓,轮廓有了,我们再一步一步来实现它,首先需要定义一个学生结构体类型,里面包含着我们所需的各种学生信息和各科成绩。

主函数里定义结构体数组,管理好多个学生信息,也可以把他定义为全局变量。定义一个总人数的全局变量在最上方,int count=0;

然后再定义自定义函数来实现各个功能模块,再定义一个主菜单函数实现登录界面和作为实现其他功能的纽带,主函数采用do-while和switch结构。

三、函数功能介绍

以下主要介绍了重要的函数功能,部分函数省略:
void BubbleSort(stu *s) ? ? ?冒泡排序,对学生平均分进行排序,并确定个人的排名
void Input(stu *s) ? ?实现输入学生的信息和成绩
void Search(stu *s) ? 实现查找学生信息
void Alter(stu *s) ? ?实现修改学生信息
void Delete(stu *s) ? 实现删除学生信息
void Add(stu *s) ? ?实现增加学生信息
int Menu() ? 实现登录主菜单界面
void Rank(stu *s) ? ? ? 实现按名次从高到低输出学生成绩排名
void Statistics(stu *s)? ? 实现输出优秀和不及格的学生信息

学生结构体

typedef struct student
{
? ? int num; ? ? ?
? ? char name[10];?
? ? int pol; ? ? ??
? ? int Eng; ? ? ??
? ? int Math; ? ? ?
? ? int aver; ? ??
? ? int ran; ? ??
}stu;

四、完整源代码

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 100
int count = 0;      
typedef struct student
{
    int num;       
    char name[10]; 
    int pol;       
    int Eng;      
    int Math;      
    int aver;      
    int ran;       
}stu;
void BubbleSort(stu *s)
{
    int i, j, a;
    stu t;
    for (i = 1; i<count; i++)
    {
        a = 0;
        for (j = count; j>i; j--)
        {
            if (s[j].aver>s[j-1].aver)
            {
                t=s[j];
                s[j]=s[j-1];
                s[j-1]=t;
                a=1;
            }
        }
        if (a==0)
            break;
    }
	s[1].ran=1;
    for(i=2;i<=count;i++)
    {
		if(s[i].aver<s[i-1].aver)
			s[i].ran=i;
        else if(s[i].aver==s[i-1].aver)
            s[i].ran=s[i-1].ran;
        else
            printf("\nerror!\n");
    }
}
void Input(stu *s)  
{
    int i;
    printf("请输入要录入学生信息的人数:");
    scanf("%d", &count);
    for (i = 1; i <= count; i++)
    {
        printf("请输入第%d个学生信息!\n", i);
        printf("学号:");
        scanf("%d", &s[i].num);
        printf("姓名:");
        scanf("%s", s[i].name);
        printf("政治:");
        scanf("%d", &s[i].pol);
        printf("英语:");
        scanf("%d", &s[i].Eng);
        printf("高数:");
        scanf("%d", &s[i].Math);
        s[i].aver = (s[i].pol + s[i].Eng + s[i].Math ) / 3;
    }
    BubbleSort(s);
    printf("\n\t录入学生信息完毕!\a\n");
	printf("正在拼命回到主菜单!\n");
	system("pause");system("cls");
}
void Output(stu *s)  
{
    int i;
    printf("\n\n");
    printf("-----------------------------------------------------------\n");
    printf("\t名次  学号    姓名     政治  英语  高数  平均分\n\n");
    for (i = 1; i<=count; i++)
        printf("\t %2d%6d  %7s      %3d   %3d   %3d    %3d\n", s[i].ran , s[i].num, s[i].name, s[i].pol, s[i].Eng, s[i].Math,s[i].aver);
    printf("\n-----------------------------------------------------------\n");
    printf("\t\t一共有%d个学生信息!\n\n", count);system("pause");system("cls");
}
int Order_n(stu *s, int x)  
{
    int i = count;
    s[0].num = x;
    while (s[i].num != x)
        i--;
    return i;
}
int Order_m(stu *s, char *c)   
{
    int i=count;
    strcpy(s[0].name, c);
    while (strcmp(s[i].name, c))
        i--;
    return i;
}
void OutSingle(stu *s, int n)  
{
    printf("\n\t以下是该学生的信息!\n");
	printf("\t名次  学号    姓名     政治  英语  高数  平均分\n\n");
	printf("\t %2d%6d  %7s      %3d   %3d   %3d    %3d\n\n", s[n].ran , s[n].num, s[n].name, s[n].pol, s[n].Eng, s[n].Math,s[n].aver);

}
int Submenu()   
{
    int n;
    printf("\n\t---------------------------\n");
    printf("\n\t     1--按学号查找");
    printf("\n\t     2--按姓名查找");
    printf("\n\t     0--返回");
    printf("\n\n\t---------------------------");
    do {
        printf("\n请输入菜单号(0-2):");
        scanf("%d", &n);
        getchar();
    } while (n<0 || n>2);
    return n;
}
void SubAlter(stu *s,int n)  
{
    stu g;
    int p;
    printf("请输入以下要修改该学生的信息!");
    printf("\n学号:");
    scanf("%d",&g.num);
    printf("名字:");
    scanf("%s",g.name);
    printf("政治:");
    scanf("%d",&g.pol);
    printf("英语:");
    scanf("%d",&g.Eng);
    printf("高数:");
    scanf("%d",&g.Math);
    g.aver = (g.pol+g.Eng+g.Math)/3;
    printf("确定修改请输入1,撤销请输入0!\n");
    scanf("%d",&p);
    if(p){
        s[n]=g;
        printf("\n\t修改成功!\n");
    }
    else
        printf("\n\t已撤销!\n");
}
void Search(stu *s)   
{
    int a, n, z;
    char c[10];
    a=Submenu();
    switch(a)
    {
        case 1:
            printf("请输入要查找学生的学号:");
            scanf("%d", &n);
            z = Order_n(s, n);
            if (z)
                OutSingle(s, z);
            else
                printf("\n\t无法找到您所查找的学生,查找失败!\n");
			printf("\n正在拼命回到主菜单!\n");
            system("pause");system("cls");break;
        case 2:
            printf("请输入要查找学生的姓名:");
            scanf("%s", c);
            z = Order_m(s, c);
            if(z)
                OutSingle(s, z);
            else
                printf("\n\t无法查找您所查找的学生,查找失败!\n");
			printf("\n正在拼命回到主菜单!\n");
            system("pause");system("cls");break;
        default:
            printf("\n正在返回主菜单\n");system("pause");system("cls");
    }
}
void Alter(stu *s)    
{
    int a,z,n;
    char c[10];
    printf("\n请先查找到该学生后再进行修改!");
    a=Submenu();
    switch(a){
        case 1:
            printf("请输入要修改学生的学号:");
            scanf("%d", &n);
            z=Order_n(s, n);
            if(z){
                OutSingle(s,z);
                SubAlter(s, z);
            }
            else
                printf("\t无法找到你所查找的学生!");
			printf("\n正在拼命回到主菜单!\n");
            system("pause");system("cls");break;
        case 2:
            printf("请输入要修改学生的姓名:");
            scanf("%d", c);
            z=Order_m(s, c);
            if(z){
                OutSingle(s,z);
                SubAlter(s, z);
            }
            else
                printf("\t无法找到你所查找的学生!");
			printf("\n正在拼命回到主菜单!\n");
            system("pause");system("cls");break;
        default:
            printf("\n正在返回主菜单\n");system("pause");
    }
    BubbleSort(s);
}
void Delete(stu *s)  
{
    int a,z,n,i,p;
    char c[10];
    printf("\n请先查找到该学生后再进行删除!");
    a=Submenu();
    switch(a){
        case 1:
            printf("请输入要删除学生的学号:");
            scanf("%d", &n);
            z=Order_n(s, n);
            if(z){
                OutSingle(s,z);
                printf("\n\t确认删除请输入1,撤销请输入0!\n");
                scanf("%d",&p);
                if(p){
                    for(i=z;i<count;i++)
                        s[i]=s[i+1];
                    count--;
                    printf("\n\t删除成功!\n");
                }
                else
                    printf("\n\t已撤销!\n");
            }
            else
                printf("\n\t无法找到你所查找的学生,删除失败!\n");
			printf("\n正在拼命回到主菜单!\n");
            system("pause");system("cls");break;
        case 2:
            printf("请输入要修改学生的姓名:");
            scanf("%d", c);
            z=Order_m(s, c);
            if(z){
                OutSingle(s,z);
                printf("\n\t确认删除请输入1,撤销请输入0!\n");
                scanf("%d",&p);
                if(p){
                    for(i=z;i<count;i++)
                        s[i]=s[i+1];
                    count--;
                    printf("\n\t删除成功!\n");
                }
                else
                    printf("\n\t已撤销!\n");
            }
            else
                printf("\n\t无法找到你所查找的学生,删除失败!\n");
			printf("\n正在拼命回到主菜单!\n");
            system("pause");system("cls");break;
        default:
            printf("\n正在返回主菜单\n");system("pause");system("cls");
    }
    BubbleSort(s);
}
void Add(stu *s)   
{
    int n, i, a;
    printf("请输入增加学生信息的人数:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        a=count+i;
        printf("请输入第%d个学生信息:\n", i);
        printf("学号:");
        scanf("%d", &s[a].num);
        printf("姓名:");
        scanf("%s", s[a].name);
        printf("政治:");
        scanf("%d", &s[a].pol);
        printf("英语:");
        scanf("%d", &s[a].Eng);
        printf("高数:");
        scanf("%d", &s[a].Math);
        s[a].aver=(s[a].pol+s[a].Eng+s[a].Math)/3;
    }
	count+=n;
    BubbleSort(s);
    printf("\n\t增加学生信息完毕!\n");
	printf("\n正在拼命回到主菜单!\n");
    system("pause");system("cls");
}
void Rank(stu *s)       
{
    stu *r = s;
    BubbleSort(r);
    Output(r);

}
void Statistics(stu *s)
{
	stu su[99],fail[99];
	int i,a=0,b=0;
	for(i=1;i<=count;i++)
	{
		if(s[i].aver>=80){
			su[a]=s[i];
			a++;
		}
		if(s[i].aver<60){
			fail[b]=s[i];
			b++;
		}
	}
	printf("\n\n\t下列名单为优秀同学!\n");
	printf("-----------------------------------------\n");
	printf("\t学号       姓名\n\n");
	for(i=0;i<a;i++)
		printf("      %6d   %7s\n",su[i].num,su[i].name);
	printf("-----------------------------------------\n");
	printf("\n\t一共有%d位同学成绩优秀\n",a);
	printf("\n\t下列名单为不及格同学!\n");
	printf("-----------------------------------------\n");
	printf("\t学号       姓名\n\n");
	for(i=0;i<b;i++)
		printf("      %6d   %7s\n",fail[i].num,fail[i].name);
	printf("-----------------------------------------\n");
	printf("\n\t一共有%d位同学不及格\n",b);
	printf("\n\t增加学生信息完毕!\n");
	printf("\n正在拼命回到主菜单!\n");
    system("pause");system("cls");
}
void Thanks()   
{
    int i,j;
    printf("\n\t程序正在退出!\n");
    for(i=1;i<=9;i++)
    {
        for(j=9;j>=i;j--)
            printf("   ");
        for(j=1;j<=i;j++)
            printf("谢谢");
        printf("\n");
    }
}
int Menu()   
{
    int n;
    printf("\n     --------------------------------------");
	printf("\n     *                主菜单              *");
    printf("\n     *          1——录入学生信息         *");
    printf("\n     *          2——查找学生信息         *");
    printf("\n     *          3——修改学生信息         *");
    printf("\n     *          4——删除学生信息         *");
    printf("\n     *          5——增加学生信息         *");
    printf("\n     *          6——打印学生成绩排名     *");
	printf("\n     *          7——统计优秀和不及格学生 *");
    printf("\n     *          0——退出程序             *");
	printf("\n     --------------------------------------");
    do {
        printf("\n请输入菜单号(0-7):");
        scanf("%d", &n);
        getchar();
    } while (n<0 || n>7);
    return n;
}
main(){
    stu s[MAX];
    int a;
	printf("\n请输入程序登入口令!\n");
	do{	
		printf("\n\t口令:");
		scanf("%d",&a);
		if(a!=6)
			printf("\n输入口令错误!\n");
	}while(a!=6);
    printf("高校学生成绩统计程序正在启动...\n");
    do {
        a=Menu();
        switch (a)
        {
            case 1:
                Input(s);
                break;
            case 2:
                Search(s);
                break;
            case 3:
                Alter(s);
                break;
            case 4:
                Delete(s);
                break;
            case 5:
                Add(s);
                break;
            case 6:
                Rank(s);
                break;
			case 7:
				Statistics(s);
				break;
            case 0:
                Thanks();
        }
    } while (a);
}



以上就是本文的全部内容
如有错误可以联系我,由于时间有限,编者能力有限,错误在所难免。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:48:36  更:2022-01-11 23:49:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:42:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码