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

2022-11-13 13:11:02 语言 管理系统 学籍

本文实例为大家分享了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;
    }
}

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

相关文章