C语言程序设计 | 学生信息管理系统

主界面:

***************欢迎进入学生管理系统********************
**1.添加 2.删除 3.修改 4.查询 5.排序 6.退出************
*****************************************************

功能:实现学生信息的增、删、查、改、排序

主函数

#include "stu.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char* argv[])
{
    int chose;
    // 1.定义出来班级
    class_t cls;

    // 2.初始化班级内学生的个数
    cls.n = -1;
    int ret = 0;
    while (1) {
        puts("***************欢迎进入学生管理系统********************");
        puts("**1.添加 2.删除 3.修改 4.查询 5.排序 6.退出************");
        puts("*****************************************************");
        printf("input chose > ");
        scanf("%d", &chose);
        while ((getchar()) != '\n')
            ;

        switch (chose) {
        case ADDSTU:
            MyAddStu(&cls);
            break;
        case DELSTU:
            ret = MyDelStu(&cls);
            printf("删除学生个数%d\n", ret);
            break;
        case MODSTU:
            MyModStu(&cls);
            break;
        case CHKSTU:
            MyChkStu(&cls);
            break;
        case SOTSTU:
            MySotStu(&cls);
            break;
        case QITSTU:
            printf("退出学生管理系统....\n");
            return -1;
        default:
            printf("选择错误,请重新输入:");
            continue;
        }
    }

    return 0;
}

功能函数:

头文件:

#include "stu.h"


/*void Input(stu_t* stu)
*功能:从终端输入学生信息name,sex,score
*参数:学生的结构体指针
*返回值:无
*/

void Input(stu_t* stu)
{
    int ret = 0;
repoint1:
    printf("请输入学生信息,name,sex,score:");
    ret = scanf("%s %c %d", stu->name, &stu->sex, &stu->score);
    if (3 != ret) {
        printf("输入错误,请重新输入\n");
        while ((getchar() != '\n'))
            ;
        goto repoint1;
    }
    while ((getchar() != '\n'))
        ;
    if (('m' != stu->sex) && ('w' != stu->sex)) {
        printf("性别输入错误,请重新输入\n");
        goto repoint1;
    }
    if ((stu->score < 0) && (stu->score > 100)) {
        printf("分数输入错误,请重新输入\n");
        goto repoint1;
    }
}

int MyAddStu(class_t* cls)
/*
*功能:添加学生信息
*参数:班级的指针
返回值:0 添加成功 -1失败
*/

int MyAddStu(class_t* cls)
{
    if (cls->n >= 29) {
        printf("班级人数已满!\n");
        return -1;
    }
    Input(&cls->stu[++(cls->n)]);

    return 0;
}


/*int MyDelStu(class_t* cls)
*功能:根据学生name,删除学生信息
*参数:班级结构体
*返回值:删除学生的个数
*/

int MyDelStu(class_t* cls)
{
    int i = 0;
    int j = 0;
    char name[20];
    int num;
    int k = cls->n;
repoint3:
    printf("输入要删除学生信息的姓名:");
    scanf("%s", name);
    while ((getchar() != '\n'))
        ;
    for (i = 0; i <= cls->n; i++) {
        if (!strcmp(name, cls->stu[i].name)) {
            printf("%-2d %-20s %-2c %-2d\n", i, cls->stu[i].name, cls->stu[i].sex, cls->stu[i].score);
        } else {
            printf("没有该学生,请重新输入:");
            goto repoint3;
        }
    }
    printf("输入要删除的学生信息对应的编号,如果输入-1则全部删除:");
    scanf("%d", &num);
    while ((getchar() != '\n'))
        ;
    if (-1 == num) {
        for (i = 0; i <= cls->n; i++) {
            if (strcmp(name, cls->stu[i].name)) {
                cls->stu[j] = cls->stu[i];
                j++;
            }
        }
        cls->n = cls->n - i - j;
    } else {
        if (num == cls->n)
            cls->n--;
        else {
            for (i = num; i < cls->n; i++) {
                cls->stu[i] = cls->stu[i + 1];
            }
            cls->n--;
        }
    }
    return (k - cls->n);
}

/*void MyModStu(class_t* cls)
*功能:根据学生姓名,修改学生信息
*参数:班级结构体
*返回值:无
*/

void MyModStu(class_t* cls)
{
    char name[20];
    int n = -1;
repoint2:
    printf("请输入要修改学生的姓名:");
    scanf("%s", name);
    int ret;
    for (int i = 0; i <= cls->n; i++) {
        if ((ret = strcmp(name, cls->stu[i].name))) {
            printf("没有该学生,请重新输入\n");
            goto repoint2;
        } else {
            n = i;
        }
    }
    Input(&cls->stu[n]);
}


/*void MyChkStu(class_t* cls)
 *功能:显示所有学生信息
 *参数:班级结构体
 *返回值:无
 */

void MyChkStu(class_t* cls)
{
    for (int i = 0; i <= cls->n; i++) {
        printf("%-20s%-2c%-2d\n", cls->stu[i].name, cls->stu[i].sex, cls->stu[i].score);
    }
}


/*int MySotStu(class_t* cls)
*功能:按成绩给学生信息排序,冒泡排序
*参数:班级结构体
*返回值:0排序成功
*/

.h文件内容:

#ifndef __STU_H__
#define __STU_H__

#include <stdio.h>
#include <string.h>

enum choose {
    ADDSTU = 1,
    DELSTU,
    MODSTU,
    CHKSTU,
    SOTSTU,
    QITSTU,
};

typedef struct {
    char name[20]; //姓名
    char sex; //性别
    int score; //分数
} stu_t;

typedef struct {
    stu_t stu[30]; //班级内能容纳的学生的个数
    int n; //班级内当前学生的个数
} class_t;

int MyAddStu(class_t* cls);
int MyDelStu();
void MyModStu();
void MyChkStu();
int MySotStu();

#endif

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值