C语言实现简单的学生学籍管理系统

 更新时间:2022年07月25日 08:41:03   作者:电信-HUBIN  
这篇文章主要为大家详细介绍了C语言实现简单的学生学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下

一 .课题设计内容与主要功能

1.1问题描述:

通过该系统实现对学生学籍信息进行录入、显示、修改、插入、删除、排序、保存等操作的管理。

2.1功能要求:

1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、出生日期、入学时间、专业、班级、备注。

2、本系统显示这样的菜单:

请选择系统功能项:

j.学生学籍信息录入
k.学生学籍信息显示
l.学生学籍信息保存
m.学生学籍信息修改
n.学生学籍信息插入
o.学生学籍信息删除
p.学生学籍信息排序
q.学生学籍信息查询
r.退出系统

3、执行一个具体的功能之后,程序将重新显示菜单。

4、将学生学籍信息保存到文件中。

二.代码

#include    "stdio.h"
#include    "string.h"
#include     "stdlib.h"
#define PF printf
#define SF scanf
#define N 20

FILE *fp;
static int n = 0, i, m;

struct date
{
    char year[10];
    char month[10];
    char day[10];
};
struct classmate
{
    char name[20];
    char num[20];
    char sex[10];
    char clas[40];
    struct date birth;
    char time[20];
    char specialit[20];
    char remark[40];
}stud[N] = {NULL};


void add()
{
    char j;

    front1:

    for(m = 0;; m++)
        if(*stud[m].num== '\0')break;
    n = m;

    system("cls");  /*清屏*/

    PF("\n");
    PF("\n请输入要添加的姓名:");
    SF("%s",stud[n].name);
    PF("\n请输入要添加的学号(12位):");
    SF("%s",&stud[n].num);
    PF("\n请输入要添加的性别(男/女):");
    SF("\n%s",&stud[n].sex);
    PF("\n请输入要添加的班级:");
    SF("%s",&stud[n].clas);
    PF("\n请输入要添加的出生年份:");
    SF("%s",&stud[n].birth.year);
    PF("\n请输入要添加的出生月份:");
    SF("%s",&stud[n].birth.month);
    PF("\n请输入要添加的出生日子:");
    SF("%s",&stud[n].birth.day);
    PF("\n请输入要添加的入学日期:");
    SF("%s",&stud[n].time);
    PF("\n请输入要添加的专业:");
    SF("%s",&stud[n].specialit);
    PF("\n请输入要添加的备注:");
    SF("%s",stud[n].remark);
    getchar();
    n++;
    PF("是否继续(Y/N)?:");
    j=getchar(); getchar();
    if(j=='y'||j=='Y')
    {
        n++;
        goto front1;
    }        /*再输入记录*/


}
void del()
{
    int  k = 0;
    char j, s[20];
    front2:;

    for(m = 0;; m++)
        if(*stud[m].num == '\0')
            break;
    n = m;

    system("cls");  /*清屏*/

    PF("请输入要删除的学号:\n");
    getchar();
    gets(s);
    for(i = 0; i < n; i++)
       if(strcmp(s , stud[i].num) == 0)
        {
            k=1;break;
        }       /*查找记录*/
    if(k == 1)                                 /*删除记录*/
    {
        if(n == 1)
        {
            *stud[0].name = '\0';
            *stud[0].num = '\0';
            *stud[0].sex = '\0';
            *stud[0].clas = '\0';
            *stud[0].birth.year = '\0';
            *stud[0].birth.month = '\0';
            *stud[0].birth.day = '\0';
            *stud[0].time = '\0';
            *stud[0].specialit = '\0';
            *stud[0].remark = '\0';
        }
        else
        {
            for(k = i;k < n - 1; k++)
            {
                stud[k] = stud[k+1];
            }
            *stud[n - 1].name = '\0';
            *stud[n - 1].num = '\0';
            *stud[n - 1].sex = '\0';
            *stud[n - 1].clas = '\0';
            *stud[n - 1].birth.year = '\0';
            *stud[n - 1].birth.month = '\0';
            *stud[n - 1].birth.day = '\0';
            *stud[n - 1].time = '\0';
            *stud[n - 1].specialit = '\0';
            *stud[n - 1].remark = '\0';
        }

        PF("已删除\n\n");
    }
    else
    {
         PF("找不到要删除的记录!\n");
         PF("按回车键返回:");
         getchar();
    }
    PF("是否继续(Y/N)?:");
    j = getchar(); getchar();
    if(j=='y'||j=='Y')
        goto front2;

}

void find()
{
    int  i,s = 0;
    char j,k[20];
    for(m = 0;; m++)
        if(*stud[m].num== '\0')break;
    n = m;
    front3:
    s=0;
    system("cls");  /*清屏*/

    PF("\n请输入要查询的学号: ");
    getchar();
    gets(k);
    for(i = 0;i <= n; i++)
    if(strcmp(k,stud[i].num) == 0)
    {
    PF("\t\t姓名:%-10s\n",stud[i].name);
    PF("\t\t学号:%-10s\n",stud[i].num);
    PF("\t\t性别:%s\n",stud[i].sex);
    PF("\t\t班级:%-12s\n",stud[i].clas);
    PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day);
    PF("\t\t入学日期:%s\n",stud[i].time);
    PF("\t\t专业:%s\n",stud[i].specialit);
    PF("\t\t备注:%s\n",stud[i].remark);

    s=1;
    }
    if(s==0)
    PF("查无此人!\n");
    getchar();
    PF("是否继续查询(Y/N)?:");
    j=getchar();getchar();
    if(j=='y'||j=='Y')
        goto front3;

    getchar();
}

void arrange()
{
    int k,i;
    struct classmate t;

    system("cls");  /*清屏*/

    FILE *fp;
    int s;
    for(m = 0;; m++)
        if(*stud[m].num== '\0')break;
    n = m;

    for(k = 0;k < n - 1; k++)
        for(i = 0;i < n - k - 1; i++)
            if(strcmp(stud[i].num,stud[i+1].num) > 0)
            {
                t = stud[i];
                stud[i] = stud[i+1];
                stud[i+1] = t;
            }
            else continue;

    for(i=0;i<=n-1;i++)
    if(stud[k].num != 0)
    {
        PF("\t\t姓名:%-10s\n",stud[i].name);
        PF("\t\t学号:%-10s\n",stud[i].num);
        PF("\t\t性别:%s\n",stud[i].sex);
        PF("\t\t班级:%-12s\n",stud[i].clas);
        PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day);
        PF("\t\t入学日期:%s\n",stud[i].time);
        PF("\t\t专业:%s\n",stud[i].specialit);
        PF("\t\t备注:%s\n\n",stud[i].remark);
    }
    PF("\t\t输入回车返回主菜单");

    getchar();
    getchar();

}


void change()
{
    int  k = 0;
    char j, s[20];
    front5:
    system("cls");  /*清屏*/
    for(m = 0;; m++)
        if(*stud[m].num== '\0')break;
    n = m;
    PF("\n请输入要修改记录的学号:");
    getchar();
    gets(s);
    for(i = 0;i < n; i++)
       if(strcmp(s , stud[i].num) == 0)
       {
            k = 1;break;
       }      /*查找*/
       if(k == 1)                                   /*修改*/
       {
            PF("\n");
            PF("\n请输入修改后的姓名:");
            SF("%s",stud[i].name);
            PF("\n请输入修改后的学号:");
            SF("%s",&stud[i].num);
            PF("\n请输入修改后的性别:");
            SF("\n%s",&stud[i].sex);
            PF("\n请输入修改后的班级:");
            SF("%s",&stud[i].clas);
            PF("\n请输入修改后的出生年:");
            SF("%s",&stud[i].birth.year);
            PF("\n请输入修改后的出生月:");
            SF("%s",&stud[i].birth.month);
            PF("\n请输入修改后的出生日:");
            SF("%s",&stud[i].birth.day);
            PF("\n请输入修改后的入学日期:");
            SF("%s",&stud[n].time);
            PF("\n请输入修改后的专业:");
            SF("%s",&stud[n].specialit);
            PF("\n请输入修改后的备注:");
            SF("%s",stud[i].remark);
            PF("修改成功\n");
            getchar();
     }
     if(k==0)
     {
        PF("找不到要修改的记录!\n");
        PF("按回车键返回:");
        getchar();
     }
    getchar();
    PF("是否继续(Y/N)?:");
    j=getchar(); getchar();
    if(j=='y'||j=='Y') goto front5;
}

void show()
{
    int s;
    for(m = 0;; m++)
        if(*stud[m].num== '\0')break;
    n = m;

    for(s = 0;s < n;s++)
    {
        PF("\t\t姓名:%-10s\n",stud[s].name);
        PF("\t\t学号:%-10s\n",stud[s].num);
        PF("\t\t性别:%s\n",stud[s].sex);
        PF("\t\t班级:%-12s\n",stud[s].clas);
        PF("\t\t出生日期:%-4s 年 %-2s 月 %-2s 日\n",stud[s].birth.year,stud[s].birth.month,stud[s].birth.day);
        PF("\t\t入学日期:%s\n",stud[s].time);
        PF("\t\t专业:%s\n",stud[s].specialit);
        PF("\t\t备注:%s\n\n",stud[s].remark);
    }
    PF("\t\t按回车键返回主菜单");
    getchar();
    getchar();
}

void insert()
{
    front9:;
    char j;

    for(m = 0;; m++)
        if(*stud[m].num== '\0')break;
    n = m;

    system("cls");  /*清屏*/

    PF("\n");
    PF("\n请输入要插入的姓名:");
    SF("%s",stud[n].name);
    PF("\n请输入要插入的学号(12位):");
    SF("%s",&stud[n].num);
    PF("\n请输入要插入的性别(男/女):");
    SF("\n%s",&stud[n].sex);
    PF("\n请输入要插入的班级:");
    SF("%s",&stud[n].clas);
    PF("\n请输入要插入的出生年份:");
    SF("%s",&stud[n].birth.year);
    PF("\n请输入要插入的出生月份:");
    SF("%s",&stud[n].birth.month);
    PF("\n请输入要插入的出生日子:");
    SF("%s",&stud[n].birth.day);
    PF("\n请输入要插入的入学日期:");
    SF("%s",&stud[n].time);
    PF("\n请输入要插入的专业:");
    SF("%s",&stud[n].specialit);
    PF("\n请输入要插入的备注:");
    SF("%s",stud[n].remark);
    getchar();
    arrange();
    front10:;
    PF("是否继续(Y/N)?:");
    j=getchar(); getchar();
    if(j=='y'||j=='Y')
    {
        n++;
        goto front9;
    }
}

void main()
{
    char j;
    PF("\n           * * * * * * * * * * * * * * * * * * * * * * * * * * *");
    PF("\n           *              欢迎使用学生学籍管理系统             *");
    PF("\n           *                  制作人:胡彬                     *");
    PF("\n           *                   2020年1月                       *");
    PF("\n           *               按回车键进入主菜单:                 *");
    PF("\n           * * * * * * * * * * * * * * * * * * * * * * * * * * *");

    if(( fp = fopen("student.txt","r")) == NULL)//载入已保存的学籍信息
    {
        PF("\n           数据加载失败!");
    }
    else
    {

        fread(stud, sizeof(struct classmate), N, fp);
        fclose(fp);
        PF("\n           数据加载成功");
    }

    getchar();
    loop:
    system("cls");
    PF("\n");
    PF("\t\t   ************\n");
    PF("\t\t   *  主菜单  *\n");
    PF("\t\t   ************\n");
    PF("\t\t1.学生学籍信息录入\n\n");
    PF("\t\t2.学生学籍信息删除\n\n");
    PF("\t\t3.学生学籍信息查询\n\n");
    PF("\t\t4.学生学籍信息排序\n\n");
    PF("\t\t5.学生学籍信息修改\n\n");
    PF("\t\t6.学生学籍信息保存\n\n");
    PF("\t\t7.退出系统\n\n");
    PF("\t\t8.学生学籍信息显示\n\n");
    PF("\t\t9.学生学籍信息插入\n\n");
    PF("\t\t请选择[1/2/3/4/5/6/7/8]: ");
    j=getchar();
    if(j=='\n') goto loop;    /*返回主菜单*/


    switch(j)
    {
        case '1':   add(); goto loop;    /*返回主菜单*/
        case '2':   del(); goto loop;
        case '3':   find(); goto loop;
        case '4':   arrange(); goto loop;
        case '5':   change(); goto loop;
        case '6':   {
                        FILE *fp;
                        fp=fopen("student.txt","w");
                        fwrite(stud,n*sizeof(struct classmate),1,fp);
                        fclose(fp); goto loop;
                    }
        case '7':   exit(0);
        case '8':   show(); goto loop;
        case '9':   insert();goto loop;
        default:    goto loop;
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 简单讲解C语言中宏的定义与使用

    简单讲解C语言中宏的定义与使用

    这篇文章主要介绍了C语言中宏的定义与使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2016-05-05
  • C++使用jsoncpp库解析Json

    C++使用jsoncpp库解析Json

    对json的解析操作是我们日常开发中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于C++使用jsoncpp库解析Json的相关资料,需要的朋友可以参考下
    2021-06-06
  • C++错误使用迭代器超出引用范围问题及解决方案

    C++错误使用迭代器超出引用范围问题及解决方案

    这篇文章主要介绍了C++错误使用迭代器超出引用范围分析与解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • C++中获取随机数的常用方法小结

    C++中获取随机数的常用方法小结

    这篇文章主要为大家详细介绍了C++中获取随机数的几种常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2025-01-01
  • Cocos2d-x UI开发之CCControlSlider控件类使用实例

    Cocos2d-x UI开发之CCControlSlider控件类使用实例

    这篇文章主要介绍了Cocos2d-x UI开发之CCControlSlider控件类使用实例,本文代码中包含大量注释讲解了CCControlSlider控件类的使用,需要的朋友可以参考下
    2014-09-09
  • C++实践数组作数据成员的参考

    C++实践数组作数据成员的参考

    今天小编就为大家分享一篇关于C++实践数组作数据成员的参考,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • C++中declspec(dllexport)和declspec(dllimport) 的用法介绍

    C++中declspec(dllexport)和declspec(dllimport) 的用法介绍

    这篇文章介绍了C++中declspec(dllexport)和declspec(dllimport) 的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C++获取内存使用情况小结

    C++获取内存使用情况小结

    在程序编程过程中,为了防止出现内存泄漏情况出现,需要持续关注内存程序内存占用情况,本文主要介绍了C++获取内存使用情况小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 详解windows下C/C++的内存泄露检测

    详解windows下C/C++的内存泄露检测

    C/C++由于其没有垃圾回收机制,所以内存的释放一直以来都依靠于程序员的手工释放,因此极其容易出现内存泄露的问题,而在比较大的程序之中,查找内存泄露是一件比较困难的事情,所以我们需要一些简便的方法来检测内存泄露,避免内存泄露导致设备崩溃
    2021-06-06
  • 使用C++实现单链表的操作与实践

    使用C++实现单链表的操作与实践

    在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应用中,本文将详细介绍如何用C++语言实现一个面向对象的单链表,并展示完整的代码示例
    2025-02-02

最新评论