C语言——学生信息管理系统(数组)

一、前言

因为最近是在赶进度总结,数组和指针的笔记已经更新,但是数组、指针的习题还未总结,数组的题已经开始总结,但是还没总结完,所以还没发出来,目前学习进度已经到了学生管理系统,趁热打铁将学生管理系统的数组篇更新,因为之后还有指针篇,怕到时候代码搞混了,由于代码注释都比较清晰,所以不在一一赘述代码含义,有疑问可以给老王留言~

二、目的

用C语言数组写一个学生信息管理系统,并实现以下功能
1.对学生信息实现增、删、改、查;
2.对于增加学生信息可以判定内存是否已满、是否重复录入(学号唯一性);
3.对于删除学生信息判定是否有该生信息;
4.对于修改学生信息判定是否有该生信息;
5.对于查询学生信息判定是否有该生信息、仅打印查询信息;
6.排序功能——按照学号排序/按照成绩排序
7.以管理员身份打印所有学生信息;
8.退出系统

三、框架

1.菜单

1.1主菜单

****** -学生管理系统******
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.学生信息排序
0.退出管理系统

1.2子菜单

**排序方式
1-按照学号排序
2-按照成绩排序

2.流程图

2.1总流程图

在这里插入图片描述
由于不太清楚,我把详细的各部分列出来如下:

2.2开始流程图

在这里插入图片描述

2.3增加学生信息流程图

在这里插入图片描述

2.4.删除学生信息流程图

在这里插入图片描述

2.5修改学生信息流程图

在这里插入图片描述

2.6查询学生信息流程图

在这里插入图片描述

2.7对学生信息排序流程图

在这里插入图片描述

3.思路

1.构建一个学生结构体,里面包含学生学号、姓名、班级、成绩;
2.该结构体是一个数组型,用来存储学生呢信息;
3.先写主菜单和主菜单选项函数及四个相关函数——增删改查;
4.写方便验证的函数——打印函数;
5.写排序方式的子菜单和获取菜单选项的函数;
6.写排序方式——按照学号排序函数/按照成绩排序函数
7.排序函数用的冒泡排序法(在数组的笔记那篇文章有讲);

四、代码

#include "stdio.h"
#define STUDENT_NUM 30

//创建一个学生结构体,包含学号、姓名、班级、成绩
struct Student
{
    int no;
    char name[64];
    int class;
    float score;
};
//初始化一个学生结构体为数组
struct Student student[STUDENT_NUM] = {0};

void Student_Init(void);
int StudentMenu(void); //主菜单函数声明
void Student_ADD();
void Student_Revise();
void Student_Del();
void Student_Find();
void Student_Sort();
int SortMenu();
void SortNo();
void SortScore();
void Student_Printf();



//初始化学生信息,将开辟STUDENT_NUM这么大的空间,并全部赋-1表示未录入信息
void Student_Init(void)
{
    for (int i = 0;i < STUDENT_NUM;i++)
    {
        student[i].no = -1; //未录入信息标志
    }
}

int main()
{
    Student_Init();
    int num1;
    
    
    while (1)
    {
        num1=StudentMenu();
        switch (num1)
        {
            case 1:Student_ADD();break;
            case 2:Student_Del();break;
            case 3:Student_Revise();break;
            case 4:Student_Find();break;
            case 5:Student_Sort();break;
            case 111:Student_Printf();break;
            case 0:goto over;
        }
    }
over:
    printf("感谢使用学生管理系统!\n");
}

//主菜单
int StudentMenu(void)
{
    int num;
p1:
    printf("****** -学生管理系统******\n");
    printf("******1.添加学生信息******\n");
    printf("******2.删除学生信息******\n");
    printf("******3.修改学生信息******\n");
    printf("******4.查询学生信息******\n");
    printf("******5.学生信息排序******\n");
    printf("******0.退出管理系统******\n");
    printf("请输入你要执行操作的序号:\n");
        scanf("%d", &num);
    if ((num >= 0 && num <= 5) || (num == 111)) //111打印所有数据
    {
        return num;
    }
    else
    {
        printf("您输入的菜单选项不正确,清重新输入!\n");
        goto p1;
    }
}
//学生信息排序子菜单
int SortMenu()
{
    int num1;
p1:
    printf("*******排序方式*****\n");
    printf("***1-按照学号排序***\n");
    printf("***2-按照成绩排序***\n");

    printf("请输入排序方式:\n");
    scanf("%d",&num1);
    if (num1>=1&&num1<=2)
    {
        return num1;
    }else{
        printf("输入错误选项,请重新选择排序方式!\n");
        goto p1;
    }

}


//添加学生信息
void Student_ADD()
{
    int i;
    //遍历学号数组,找到放数据的空间
    printf("正在执行添加学生信息操作……\n");
    for (i = 0; i < STUDENT_NUM; i++)
    {
        if (student[i].no==-1)//有空间,跳出循环,输入数据
        {
            break;
        }
    }  
    if (i==STUDENT_NUM)
    {
        printf("空间已满,禁止继续录入!\n");
    }
    //输入信息,由于有判定学号唯一,用tem保存从屏幕上获取的数据
    struct Student temp;
    printf("请输入学号:\n");
    scanf("%d",&temp.no);   
    printf("请输入姓名:\n");
    getchar();
    scanf("%s",temp.name);
    printf("请输入班级:\n");
    getchar();
    scanf("%d",&temp.class);
    printf("请输入成绩:\n");
    scanf("%f",&temp.score);
    //因为学号是唯一的,判断不能重复输入
    for (int j = 0; j < STUDENT_NUM; j++)
    {
        if (student[j].no==temp.no)
        {
            printf("该学生已被录入,请不要重复录入!\n");

        }   
    }
    student[i]=temp;

}
//修改学生信息
void Student_Revise()
{
    int num_0=0;//设置查询标志位,没找到0,找到1
    printf("正在执行修改学生信息操作……\n");
p1:
    printf("请输入您要修改的学号:\n");
    int num,i;
    scanf("%d",&num);
    for (i = 0; i < STUDENT_NUM; i++)   
    {
        if (num!=student[i].no)
        {
            num_0=0;
            continue;
        }else if(student[i].no==num)
        {
            num_0=1;
            break;
        }
    }
    if (num_0==0)
    {
        printf("查无此人,请重新输入要修改的学号!\n");
        goto p1;
    }
    //从屏幕获取新的数据
    printf("请输入学号:\n");
    scanf("%d",&student[i].no);
    printf("请输入姓名:\n");
    getchar();
    scanf("%s",student[i].name);
    getchar();
    printf("请输入班级:\n");
    scanf("%d",&student[i].class);
    printf("请输入成绩:\n");
    scanf("%f",&student[i].score); 

    
    
}
//删除学生信息
void Student_Del()
{
    int num,i;
    int num_0=0;//设置查询标志位,没找到0,找到1
    printf("正在执行删除学生信息操作……\n");
p1:
    printf("请输入您要删除的学号:\n");
    scanf("%d",&num);
    for (i = 0; i < STUDENT_NUM; i++)
    {
        if (num!=student[i].no)//没找到
        {
            continue;
            num_0=0;
        }else if (student[i].no==num)
        {
            num_0=1;
            student[i].no=-1;
            printf("删除成功!\n");
        }
    }
    if (num_0==0)
    {
        printf("查无此人,请重新输入要删除的学号!\n");
        goto p1;
    }
}
//查询学生信息
void Student_Find()
{
    int i,num;
    int num_0=0;//设置查询标志位,没找到0,找到1
    printf("正在执行查询学生信息操作……\n");
p1:
    printf("请输入您要查询的学号:\n");
    scanf("%d",&num);
    for (i = 0; i < STUDENT_NUM; i++)
    {
        if (num!=student[i].no)
        {
            num_0=0;
            continue;
        }else if (student[i].no==num)
        {
            num_0=1;
            break;
        }
    }
    if (num_0==0)
    {
        printf("查无此人,请重新输入要查询的学号!\n");
        goto p1;
    }
    printf("学号\t姓名\t班级\t成绩\n");
    printf("%d\t",student[i].no);
    printf("%s\t",student[i].name);
    printf("%d\t",student[i].class);
    printf("%.2f\n",student[i].score);
    
}
//对学生信息排序
void Student_Sort()
{
    int num2;
    num2=SortMenu();
    int num_0;
    //判断是否有学生信息,有则打印,
    for (int i = 0; i <STUDENT_NUM; i++)
    {
        if (student[i].no==-1)
        {
            num_0=0;
            continue;

        }else{
            num_0=1;
            break;
        }
    }
    if (num_0==0)
    {
        printf("没有学生信息,无法排序打印!\n");
    }
    
    //选择排序方式
    if (num2==1)
    {
        SortNo();
    }else if (num2==2)
    {
        SortScore();
    }
}
//学生学号排序
void SortNo()
{
    int i,j;
    printf("正在按照学号排序\n");
    struct Student temp;
    for ( i = 0; i < STUDENT_NUM; i++)
    {
        for (j = 0; j <STUDENT_NUM-i-1; j++)
        {
            if (student[j].no>student[j+1].no)
            {
                temp=student[j];
                student[j]=student[j+1];
                student[j+1]=temp;
            }
        }
    }
    Student_Printf(); 
}
//学生成绩排序
void SortScore()
{
    int i,j;
    printf("正在按照成绩排序\n");
    struct Student temp;
    for ( i = 0; i < STUDENT_NUM; i++)
    {
        for (j = 0; j <STUDENT_NUM-i-1; j++)
        {
            if (student[j].score<student[j+1].score)
            {
                temp=student[j];
                student[j]=student[j+1];
                student[j+1]=temp;
            }
        }
    }
    Student_Printf(); 

}
//打印所有学生信息
void Student_Printf()
{
    printf("学号\t姓名\t班级\t成绩\n");
    for (int i = 0; i < STUDENT_NUM; i++)
    {
        if (student[i].no!=-1)
        {
            printf("%d\t",student[i].no);
            printf("%s\t",student[i].name);
            printf("%d\t",student[i].class);
            printf("%.2f\n",student[i].score);
        }
    }
    
}

五、演示视频

由于之前我不知道数字时钟上传后友友们下载是要vip的,所以为了方便友友们,我将实现视频放在文章中如下:

数组学生管理系统

  • 16
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<ctype.h> #define M 3 struct student {long num; char name[20]; char sex; int score[5]; int ave; }stu[M]; void init() { printf("\t\t********************************\n\n"); printf("\t\tStudent score management systerm \n"); printf("\n"); printf("\t\t Make by Maggiehe \n"); printf("\n"); printf("\t\t Student number is 3206***** \n\n"); printf("\t\t********************************\n\n"); } void input() { int i,j; printf("\nInput the student number name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) {scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex); for(j=0;j<5;j++) scanf("%d",&stu[i].score[j]); scanf("%d",&stu[i].ave); save(); } } void list() { int i,j; clrscr(); printf("\t**********************student****************************\n"); printf("num name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) { printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } if((i+1)%10==0) { printf("\npress any key continue.......\n"); getch(); } printf("\t*************************end*********************************\n"); } void average() { int i,j; float sum[M]; for(i=0;i<M;i++) for(j=0;j<5;j++) sum[i]+=stu[i].score[j]; stu[i].ave=sum[i]/5.0; } void search_num() { long num; int i,j; printf("\nplease enter number which you want to search:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) if(stu[i].num!=num) printf("The number is not exist\n"); else { printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } } void search_nam() { int i,j; char name[20]; printf("\nplease enter name which you want to search:"); scanf("%s",&name); printf("\n"); for(i=0;i<M;i++) if(strcmp(stu[i].name,name)==0) { printf("number name sex math English PE maolun majing average:\n"); printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } else printf("\nThe name is not exist!!!\n"); } void search_ave() { int i,j,a=0; float k; printf("please enter average score which you want to search:"); scanf("%f",&k); printf("\n"); for(i=0;i<M;i++) if(stu[i].ave!=k) printf("The average score is not exist!!!\n"); else for(i=0;i<M;i++) { if(stu[i].ave<=k) printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); a++; } } void sort() { int i,j; struct student temp; for(i=0;i<M;i++) for(j=i+i;j<M;j++) if(stu[i].ave<stu[j].ave) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } void save() { int i; FILE *fp; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } for(i=0;i<M;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void delect() { int i,t; long num; printf("please enter number which you want to delect:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) { if(stu[i].num!=num) printf("The number is not exist!!!\n"); if(stu[i].num==num) t=i; } for(i=t;i<M;i++) stu[i]=stu[i+1]; save(); } void insert() {FILE *fp; int i,n,t; struct student s; printf("please input record\n"); printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave); s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } i=M; for(t=0;stu[i].ave>s.ave&&t<M;t++) if(fwrite(&s,sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void MainMenu() {clrscr(); printf("\t********************************************************************\n \n); Printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1. search record\n"); printf("\t 2. sort record\n"); printf("\t 3. insert record\n"); printf("\t 4. delect record\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t********************************************************************\n"); } void menu_select() {clrscr(); printf("\t******************************************************************\n\n"); printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1.1 search by number\n"); printf("\t 1.2 search by name\n"); printf("\t 1.3 search by average score\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t******************************************************************\n"); } void search() { char ch; clrscr(); menu_select(); ch=getch(); switch(ch) { case '1':search_num();break; case '2':search_nam();break; case '3':search_ave();break; } } main() { char ch; clrscr(); init(); input(); list(); average(); save(); MainMenu(); ch=getch(); switch(ch) { case '1':search();break; case '2':sort();break; case '3':insert();break; case '4':delect();break; } search_num(); search_nam(); search_ave(); sort(); delect(); insert; }
以下是一个简单的C语言学生成绩管理系统的实现,包括添加学生信息、删除学生信息、修改学生信息、查询学生信息和显示所有学生信息等功能。具体实现如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 // 最大学生数 // 学生结构体 typedef struct { char name[20]; // 姓名 int id; // 学号 float score; // 成绩 } Student; // 学生数组 Student students[MAX_STUDENT_NUM]; int studentNum = 0; // 学生数 // 添加学生信息 void addStudent() { if (studentNum >= MAX_STUDENT_NUM) { printf("学生数已达到最大值,无法添加新学生!\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[studentNum].name); printf("请输入学生学号:"); scanf("%d", &students[studentNum].id); printf("请输入学生成绩:"); scanf("%f", &students[studentNum].score); studentNum++; printf("添加成功!\n"); } // 删除学生信息 void deleteStudent() { int id; printf("请输入要删除的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n"); return; } for (int i = index; i < studentNum - 1; i++) { students[i] = students[i + 1]; } studentNum--; printf("删除成功!\n"); } // 修改学生信息 void modifyStudent() { int id; printf("请输入要修改的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[index].name); printf("请输入学生学号:"); scanf("%d", &students[index].id); printf("请输入学生成绩:"); scanf("%f", &students[index].score); printf("修改成功!\n"); } // 查询学生信息 void queryStudent() { int id; printf("请输入要查询的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n"); return; } printf("姓名:%s,学号:%d,成绩:%.2f\n", students[index].name, students[index].id, students[index].score); } // 显示所有学生信息 void showAllStudents() { printf("姓名\t学号\t成绩\n"); for (int i = 0; i < studentNum; i++) { printf("%s\t%d\t%.2f\n", students[i].name, students[i].id, students[i].score); } } int main() { int choice; while (1) { printf("请选择操作:\n"); printf("1.添加学生信息\n"); printf("2.删除学生信息\n"); printf("3.修改学生信息\n"); printf("4.查询学生信息\n"); printf("5.显示所有学生信息\n"); printf("6.退出程序\n"); scanf("%d", &choice); switch (choice) { case 1: addStudent(); break; case 2: deleteStudent(); break; case 3: modifyStudent(); break; case 4: queryStudent(); break; case 5: showAllStudents(); break; case 6: exit(0); default: printf("无效的选择!\n"); break; } } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值