C语言实现学生管理系统V2.0(结构体方式实现)

实现功能

  • 添加学生
  • 删除学生
  • 修改学生
  • 查询学生
  • 显示所有学生信息
  • 菜单

简述

        该系统主要使用了结构体、数组、循环、条件语句,包含头文件string.h、windows.h,使用结构体做学生数据的存储结构,该结构体存放了学生的基本信息,包括学号、姓名、性别、年龄、院系、专业等相关信息,系统还实现了对于学生的CRUD操作。

运行截图

 代码

        

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define N 100       //最大学生数量为50


typedef struct Student{
    int id;         //编号
    char name[20];  //姓名
    char sex[20];   //性别
    int age;        //年龄
    char depart[40];   //院系
    char major[40];     //专业
}Student;

Student student[N];
int count = 0;          //当前学生数量


/* 以下是函数声明 */
void addStu();      //添加学生信息
void delStu();      //删除学生信息
void modStu();      //修改学生信息
int seaStuById();   //查询学生信息 - 根据ID
void showStu();     //显示学生信息
void print(int id); //显示一条学生信息
void menu();        //菜单


/*
* 学生函数的实现
* 以下是函数实现
*/

//添加学生信息
void addStu(){
    printf("请输入学生编号(1 - N):");
    scanf("%d",&student[count].id);
    printf("请输入学生姓名:");
    scanf("%s",student[count].name);
    printf("请输入学生性别(男/女):");
    scanf("%s",student[count].sex);
    printf("请输入学生年龄:");
    scanf("%d",&student[count].age);
    printf("请输入学生院系:");
    scanf("%s",student[count].depart);
    printf("请输入学生专业:");
    scanf("%s",student[count].major);
    count++;
}

//删除学生信息
void delStu(){
    int id,i;
    printf("请输入学生编号:");
    scanf("%d",&id);
    int index;
    index = seaStuById(id);
    if(index == -1){
        printf("未查找到!\n");
        return;
    }

    //进行覆盖 - 删除指定条目
    for(i = index;i < N;i++){
        student[i].id = student[i+1].id;
        strcpy(student[i].name,student[i+1].name);
        strcpy(student[i].sex,student[i+1].sex);
        student[i].age = student[i+1].age;
        strcpy(student[i].depart,student[i+1].depart);
        strcpy(student[i].major,student[i+1].major);
    }
    count--;
    printf("删除成功!\n");
}

//修改学生信息
void modStu(){
    int id;
    printf("请输入学生编号:");
    scanf("%d",&id);
    int index;
    index = seaStuById(id);
    if(index == -1){
        printf("未查找到!\n");
        return;
    }

    printf("请输入学生编号(1 - N):");
    scanf("%d",&student[index].id);
    printf("请输入学生姓名:");
    scanf("%s",student[index].name);
    printf("请输入学生性别(男/女):");
    scanf("%s",student[index].sex);
    printf("请输入学生年龄:");
    scanf("%d",&student[index].age);
    printf("请输入学生院系:");
    scanf("%s",student[index].depart);
    printf("请输入学生专业:");
    scanf("%s",student[index].major);
    printf("修改成功!\n");
}

//查询学生信息 - 根据ID
int seaStuById(int id){
    int i;
    for(i = 0;i < count;i++){
        if(student[i].id == id){
            return i;
        }
    }
    return -1;      //查询失败  返回-1的意义在于可以根据返回值的不同做成功与否的验证
}

//显示学生信息
void showStu(){
    int i;
    printf("---------------------------------------------\n");
    printf("学生编号   姓名   性别  年龄  院系  专业\n");
    for(i = 0;i < count;i++){
        printf("%d   %s   %s   %d   %s   %s\n",student[i].id,student[i].name,student[i].sex,student[i].age,student[i].depart,student[i].major);
    }
    printf("---------------------------------------------\n");
}

//显示一条学生信息
void print(int id){
    int index;
    index = seaStuById(id);
    if(index == -1){
        printf("未查找到!\n");
        return;
    }

    printf("---------------------------------------------\n");
    printf("学生编号   姓名   性别  年龄  院系  专业\n");
        printf("%d   %s   %s   %d   %s   %s\n",student[index].id,student[index].name,student[index].sex,student[index].age,student[index].depart,student[index].major);
    printf("---------------------------------------------\n");
}


//菜单

void menu(){
    int choice,id;
    while(1){
        printf("---------------------------------------------\n");
        printf("0、退出\n");
        printf("1、添加学生信息\n");
        printf("2、删除学生信息\n");
        printf("3、修改学生信息\n");
        printf("4、查询学生信息\n");
        printf("5、显示学生信息\n");
        printf("---------------------------------------------\n");
        printf("请输入您的选择:");
        scanf("%d",&choice);
        switch(choice){
        case 0:
            exit(0);
            break;
        case 1:
            addStu();
            break;
        case 2:
            delStu();
            break;
        case 3:
            modStu();
            break;
        case 4:
            printf("请输入查找的学生编号:");
            scanf("%d",&id);
            print(id);
            break;
        case 5:
            showStu();
            break;
        default:
            printf("输入有误!\n");
            break;
        }
        system("pause");
        system("cls");
    }
}

int main()
{
    menu();
    return 0;
}

总结


         从V1.0版本使用的数组开发的方式到V2.0使用结构体开发方式,我们可以更加清晰地理解面向对象开发方式的优点。它更加符合人的思维方式,将对属性地操作转换为对某个特定对象的整体操作。 

         对于该系统而言缺陷在于,没有保存和读取数据的功能。因此,该系统只能当做一个演示作品使用,并不能够符合实际的生产实践的需求。后续我们会继续开发附带有文件读写功能的系统软件。


        欢迎大家下载讨论~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值