针对在校大学生的C语言入门学习——学生管理系统

这篇博客介绍了一位讲师为在校大学生设计的C语言入门项目——学生管理系统。项目涉及学生信息的增删改查,使用链表作为数据结构,并通过文件读写实现数据持久化。文中详细讲解了如何封装学生结构体、实现界面切换、添加学生信息、修改和删除学生信息以及排序查看功能,旨在帮助初学者掌握C语言编程技巧。
摘要由CSDN通过智能技术生成

针对在校大学生的C语言入门学习——学生管理系统

  • 有了前面的链表作为数据结构,接下来我们就开始学生管理系统的项目。项目的功能主要就是对学生信息的增、删、改、查。我简单画了一个图来表达一下我们的需求。
    在这里插入图片描述
  • 主界面显示学生的信息,可以根据姓名和各科的成绩升序降序排序。修改、删除、添加都会切换到其他界面进行。数据的持久化我就使用C语言的文件读写来实现。

学生结构体封装

/*
学生信息结构体
*/
typedef struct Student
{
   
    char name[32];
    float language;
    float english;
    float math;
}Student;
  • 结构体包含存放名字的字符数组和语数外三科成绩。这里要强调的是我们不可以在结构体中定义一个指针变量来保存名字。比如char* name这样是错误的。因为指针变量只能保存地址,不能保存字符串。

界面切换

  • 每个界面都要定义一个函数。但是切换界面的时候如果只是简单的函数调用,那程序就太不灵活了。我使用函数指针的形式来实现界面的切换。请看下面代码。
int mainMenu();
int addMenu();
int updateMenu();
int removeMenu();

int(*currentMenu)() = mainMenu;

int main(void)
{
   
    while(1)
    {
   
        if(currentMenu())
            break;
    }
    return 0;
}

/*
主菜单
*/
int mainMenu()
{
   
    
}

/*
添加学生信息菜单
*/
int addMenu()
{
   
    
}

/*
修改学生信息菜单
*/
int updateMenu()
{
   
    
}

/*
删除学生信息菜单
*/
int removeMenu()
{
   
    
}
  • currentMenu是函数指针,在项目中它将会指向每个界面函数。main函数中使用currentMenu来执行各个界面。每个界面在结束之前要给currentMenu指向下一个界面,然后结束当前界面的函数。界面函数的返回值是1就结束整个程序,否则继续执行下一个界面。下面我把几个界面函数添加一些显示内容和切换的操作。
  • 主菜单

/*
主菜单
*/
#define MEIN_MENU_ITEMS 3
void mainMenuShow(int cursor)
{
     
    char* menus[] = {
   "添加学生信息","修改学生信息","删除学生信息"};
    printf(" --------------------------------- \n");
    printf("|         Welcome to use          |\n");
    printf("|    Sea Student Manage System    |\n");
    printf(" --------------------------------- \n");
    printf("input: 1 up 2 down 3 ok\n");
    int i;
    for(i = 0;i < MEIN_MENU_ITEMS;i++)
    {
   
        if(i == cursor)//当前选中项前面加*
            printf("*%s\n", menus[i]);
        else
            printf("%s\n",menus[i]);
    }
}

int mainMenu()
{
     
    int cursor = 0;
    while(1)
    {
   
        mainMenuShow(cursor);
        int ctrl;
        scanf("%d",&ctrl);
    }
}

在这里插入图片描述

  • 现在有了主菜单的显示内容,下一步是移动光标。
/*
调整光标
*/
int cursorCtrl(int* cursor)
{
   
    int ctrl;
    scanf("%d", &ctrl);
    switch(ctrl)
    {
   
    case 1://上移
        *cursor = *cursor==0?MEIN_MENU_ITEMS-1:*cursor-1;
        return 0;
    case 2://下移
        *cursor = *cursor==MEIN_MENU_ITEMS-1?0:*cursor+1;
        return 0;
    case 3://ok
        return 1;
    }
}
  • 函数返回0表示用户操作的是up和down,返回1表示用户操作的是ok。下面请看mainMenu中的调用。
int mainMenu()
{
     
    int cursor = 0;
    while(1)
    {
   
        mainMenuShow(cursor);
        if(cursorCtrl(&cursor))
        {
   
            //根据光标做事
        }
    }
}
  • 接下来我们封装用户选中ok的时候的函数。目前只有三件事可做,那就是分别切换到不同的界面。
/*
主菜单功能函数
*/
int mainMenuCtrl(int cursor)
{
   
    switch(cursor)
    {
   
    case 0://跳转到 添加学生信息界面
        currentMenu = addMenu;
        return 1;
    case 1://跳转到 修改学生信息界面
        currentMenu = updateMenu;
        return 1;
    case 2://跳转到 删除学生信息界面
        currentMenu = removeMenu;
        return 1;
        
    }
}
  • 函数返回1表示要切换界面,返回0表示不切换界面。目前我们只做切换界面的功能。下面是另外三个界面的简单实现。
/*
主菜单
*/
int mainMenu()
{
     
    int cursor = 0;
    while(1)
    {
   
        mainMenuShow(cursor);
        if(cursorCtrl(&cursor))
        {
   
            if(mainMenuCtrl(cursor))
            {
   
                return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东海sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值