C语言实现学籍信息管理系统

 更新时间:2022年07月22日 11:09:57   作者:活捉一只xiaozhu  
这篇文章主要为大家详细介绍了C语言实现学籍信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

  • 系统功能:录入、修改、添加、删除、查找、读取、删除数据
  • 系统主要技术:基本就是函数的调用,只用到结构体,与文件的读写

所有的数据改动都会及时保存到文件

student.txt文件用来储存所有信息

shuju.txt文件用来储存信息数据

代码如下

/*
            学籍信息管理系统
系统功能:录入、修改、添加、删除、查找、读取、删除数据
系统主要技术:基本就是函数的调用,还有结构体,与文件的读写 

*/

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


int n = 0;//变动的学生个数 
int i=0;//用来储存总共的学生人数

struct student
{
    char xh[20];//学生学号
    char xm[10];//学生姓名
    int nl;//年龄
    char xb1[4];//学生性别
    char jg[100];//籍贯
    char tele[20];//学生电话
    char xb[40];//系别
    char zy[36];//学生专业
    char bj[30];//学生班级
} aa[100]; //定义一个学生基本学籍信息的结构体,可容纳100人;


//申明各函数!
void init();//初始化界面 
void help();//系统帮助
void chazhao();//查找
void xiugai();//修改函数
void caidan();//主菜单
void shuru();//输入函数
void tianjia();//添加函数
void shanchu();//删除函数
void shuchu();//输出函数
void baocun();//保存函数
void duqu();//读取函数
void del();//清空文件数据 
void luru();//全部信息录入文件 

/*
主函数 
*/
int main()
{
    init(); 
    system("pause");
    system("cls");
    
    duqu();
    
    caidan();
    return 0;
}

/*
系统初始化界面
*/ 
void init()
{
    printf("————————————————————————————————————————————————————————————\n\n");
    printf("\t\t\t\t*********************************************************\n\n");
    printf("\t\t\t\t*****************欢迎使用学生学籍管理系统****************\n\n");
    printf("\t\t\t\t——————————学院:胡编乱造学院——————————\n\n");
    printf("\t\t\t\t——————————班级:胡编1班————————————\n\n");
    printf("\t\t\t\t——————————姓名:xiaozhu06———————————\n\n");
    printf("\t\t\t\t*********************************************************\n\n");
}

/*
帮助函数
显示完成后再显示菜单
*/
void help()
{
    printf("\n0.欢迎使用系统帮助!\n");
    printf("\n1.初次进入系统后,请先选择录入学生学籍;\n");
    printf("\n2.按照菜单提示键入数字代号;\n");
    printf("\n3.录入或删除学生学籍信息后,切记保存;\n");
    printf("\n4.谢谢您的使用!\n");
    caidan();
}

/*
主菜单函数
用户输入0-8的数字并显示其功能
*/
void caidan()
{
    printf("—————————————————————————————————————————————————————————\n");
    printf("*********************************************************\n");
    printf("*****************欢迎使用学生学籍管理系统****************\n");
    printf("***输入“0”小白帮助                                    ***\n");
    printf("***输入“1”可录入学籍信息                              ***\n");
    printf("***输入“2”可修改学籍信息                              ***\n");
    printf("***输入“3”可添加学籍信息                              ***\n");
    printf("***输入“4”可以删除学籍的信息                          ***\n");
    printf("***输入“5”可以查找学生学籍的信息                      ***\n");
    printf("***输入“6”可以输出学籍表                              ***\n");
    printf("***输入“7”清空文件中储存的学生信息                    ***\n");
    printf("***输入“8”结束系统                                    ***\n");
    printf("*********************************************************\n\n");
    printf("请输入编号:(1 —8)");
    int x;
    scanf("%d",&x);
    switch(x)
    {
    case 0:
        system("cls");
        help();
        break;
    case 1:
        system("cls");
        shuru();
        break;
    case 2 :
        system("cls");
        xiugai();
        break;
    case 3:
        system("cls");
        tianjia();
        break;
    case 4:
        system("cls");
        shanchu();
        break;
    case 5:
        system("cls");
        chazhao();
        break;
    case 6:
        system("cls");
        shuchu();
        caidan();
        break;
    case 7:
        system("cls");
        del();
        caidan();
        break;
    case 8:
        system("cls");
        break;
    }
}

/*
录入学籍信息函数 
*/
void shuru()
{
    int l,m,p;
    printf("请输入要录入的学生人数:\n");
    scanf("%d",&n);
    p = n;
    for(m = i+1; m <= (i+n); m ++)//循环输入学生信息
    {
    bb: int flage = 0;
        printf("请输入学号:");
        scanf("%s",aa[m].xh);
        for(l = 1; l < m; l ++)
        {
            if(strcmp(aa[m].xh,aa[l].xh) == 0)
            {
                flage = 1;
                break;
            }
        }
        if(flage == 1)
        {
            printf("学号重复,请重新输入:\n");
            goto bb;
        }
        p --;
        printf("请输入姓名:");
        scanf("%s",aa[m].xm);
        printf("请输入年龄:");
        scanf("%d",&aa[m].nl);
        printf("请输入性别:");
        scanf("%s",aa[m].xb1);
        printf("请输入籍贯:");
        scanf("%s",aa[m].jg);
        printf("请输入电话:");
        scanf("%s",aa[m].tele);
        printf("请输入系别:");
        scanf("%s",aa[m].xb);
        printf("请输入专业:");
        scanf("%s",aa[m].zy);
        printf("请输入班级:");
        scanf("%s",aa[m].bj);
        printf("\n");
        printf("已录入 %d 个学生信息\n",n-p);
        printf("\n");
        if(p == 0)
        printf("本次录入完成\n");
    }
    
    i = i + n;
    baocun();
    caidan();
}

/*
修改函数
通过学号查找来修改学生信息
*/
void xiugai()
{
    int j;
    char k[100];
    printf("请输入需要修改的学生学籍的学号:");
    scanf("%s",k);
    for(j=1; j<=i; j++)
    {
        if(strcmp(aa[j].xh,k) == 0)
        {
            strcpy(aa[j].xh,k);
            break;
        }
    }
    printf("请输入姓名:");
    scanf("%s",aa[j].xm);
    printf("请输入年龄:");
    scanf("%d",&aa[j].nl);
    printf("请输入性别:");
    scanf("%s",aa[j].xb1);
    printf("请输入籍贯:");
    scanf("%s",aa[j].jg);
    printf("请输入电话:");
    scanf("%s",aa[j].tele);
    printf("请输入系别:");
    scanf("%s",aa[j].xb);
    printf("请输入专业:");
    scanf("%s",aa[j].zy);
    printf("请输入班级:");
    scanf("%s",aa[j].bj);
    luru();
    caidan();
}

/*
查找函数
通过学号来查找学生信息
*/
void chazhao()
{
    int j,flage,z;
    char p[100];
    flage = 0;
    printf("\n请输入你所要查找学生的学号:");
    scanf("%s",p);
    for(j=1; j<=i; j++)
    {
        if(strcmp(aa[j].xh,p) == 0)
        {
            flage = 1;
            break;
        }
    }
    if(flage == 1)
    {
        printf("\n已查到此人,信息为:\n\n");
        printf("学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
    }
    if(flage == 0)
        printf("\n查无此人\n");
    printf("\n是否继续查找(是输入1、否输入0):");
    scanf("%d",&z);
    switch(z)
    {
        case 1:
            chazhao();
            break;
        case 0:
            system("cls");
            break;
        default:
            system("cls");
            break;
    }
    caidan();
}

/*
添加信息函数
*/
void tianjia()
{
    FILE*fp;
    int counts=0;//表示添加学生的数量
    int k;
    printf("\n 原来的学生信息:\n");
    shuchu();
    printf("请输入想增加的学生数:\n");
    scanf("%d",&n);
    for (k=i+1; k<=(i+n); k++)
    {
       aa:    int flage;
           flage = 0;
        printf("\n 请输入新增加学生的信息:\n");
        printf("请输入学号:  ");
        scanf("%s",aa[k].xh);
        int q;
        for(q = 1; q < k; q ++)
        {
            if(strcmp(aa[k].xh,aa[q].xh) == 0)
            {
                flage = 1;
                break;
            }
        }
       if(flage == 1)
       {
           printf("学号重复,请重新输入\n");
               goto aa; 
       }
       
        getchar();
        printf("请输入姓名:  ");
        scanf("%s",aa[k].xm);
        getchar();
        printf("请输入性别:  ");
        scanf("%c",aa[k].xb1);
        getchar();
        printf("请输入年龄:  ");
        scanf("%d",&aa[k].nl);
        getchar();
        printf("请输入籍贯:  ");
        scanf("%s",aa[k].jg);
        getchar();
        printf("请输入电话:  ");
        scanf("%s",aa[k].tele);
        printf("请输入系别:  ");
        scanf("%s",aa[k].xb);
        getchar();
        printf("请输入专业:  ");
        scanf("%s",aa[k].zy);
        getchar();
        printf("请输入班级:  ");
        scanf("%s",aa[k].bj);
        printf("\n");
        counts=counts+1;
        printf("已增加的人数:\n");
        printf("%d\n",counts);
    }
    printf("\n添加完毕!\n");
    i=i+n;
    printf("\n浏览增加后的所有学生信息:\n");
    printf("\n");
    baocun();
    shuchu();
   
    caidan();
}

/*
删除函数
*/
void shanchu()   
{
    int k,j,t,flage,numb;
    char xh[100];
    printf("请输入要删除的学生学籍的学号:\n");
    scanf("%s",xh);
    flage=0;
    for(k=1; k<=i; k++)
    {
        if(strcmp(aa[k].xh,xh) == 0)
        {
            flage = 1;
            break;
        }
    }
    if(flage == 1)
    {
        printf("\n已找到此人,原始记录为:\n");
        printf("学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[k].xh,aa[k].xm,aa[k].nl,aa[k].xb1,aa[k].jg,aa[k].tele,aa[k].xb,aa[k].zy,aa[k].bj);
        printf("\n确实要删除此人信息请按1,不删除请按0\n");
        scanf("%d",&numb);
        if(numb==1)
        {
            for(j=k; j<=i-1; j++)
            {
                strcpy(aa[j].xh,aa[j+1].xh);
                strcpy(aa[j].xm,aa[j+1].xm);
                aa[j].nl=aa[j+1].nl;
                strcpy(aa[j].xb1,aa[j+1].xb1);
                strcpy(aa[j].jg,aa[j+1].jg);
                strcpy(aa[j].tele,aa[j+1].tele);
                strcpy(aa[j].xb,aa[j+1].xb);
                strcpy(aa[j].zy,aa[j+1].zy);
                strcpy(aa[j].bj,aa[j+1].bj);
            }
            i --;
        }
        else;
    }
    if(numb == 1)
        luru();
    if(flage == 0)
    {
        printf("\n对不起,查无此人!\n\n");
    }
    printf("继续删除请按1,不再删除请按0\n");
    scanf("%d",&t);
    switch(t)
    {
    case 1:
        shanchu();
        break;
    case 0:
        system("cls");
        caidan();
        break;
    default :
        system("cls");
        break;
    }
    
}

/*
全部学生信息输出 
*/
void shuchu()
{
    FILE*fp;
//    fp=fopen("student.txt","r");
    if((fp = fopen("student.txt","r")) == NULL)
    {
        printf("打开文件失败\n");
        exit(EXIT_FAILURE);
    }
    /*-
    while循环 
    读取文件中的数据 
    */
    char a[100];
    while(fgets(a,100,fp))
    {
        
        printf("%s",a);
    }
    fclose(fp);
    getchar();
}

/*
保存函数
学生信息每次添加后以 追加 的方式保存到文件中 
*/
void baocun()   
{
    
    FILE*fp;
    fp=fopen("student.txt","ab+");
    int j;
    for(j=i-n+1; j<=i; j++)
    {
        fprintf(fp,"学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        fprintf(fp,"\n");
    }
    printf("\n");
    fclose(fp);
    
    FILE *fp1;
    if((fp1 = fopen("shuju.txt","ab+")) == NULL)
    {
        exit(EXIT_FAILURE);
    }
    for(j=i-n+1; j<=i; j++)
    {
        
        fprintf(fp,"%s\n%s\n%d\n%s\n%s\n%s\n%s\n%s\n%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        fprintf(fp,"\n");
    }
    fclose(fp1);
    
    n = 0;
}

/*
当储存过的学生信息变动时重新往文件中录入数据 
将所有学生信息全部以 写 的方式录入文件 
*/
void luru()
{
    FILE*fp;
    fp=fopen("student.txt","wb");
    int j;
    for(j=1; j<=i; j++)
    {
        fprintf(fp,"学号:%s\n姓名:%s\n年龄: %d\n性别:%s\n籍贯:%s\n电话:%s\n系别:%s\n专业:%s\n班级:%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        fprintf(fp,"\n");
    }
    printf("\n");
    fclose(fp);
    
    FILE *fp1;
    if((fp1 = fopen("shuju.txt","wb")) == NULL)
    {
        exit(EXIT_FAILURE);
    }
    for(j=1; j<=i; j++)
    {
        fprintf(fp,"\n");
        fprintf(fp,"%s\n%s\n%d\n%s\n%s\n%s\n%s\n%s\n%s\n",aa[j].xh,aa[j].xm,aa[j].nl,aa[j].xb1,aa[j].jg,aa[j].tele,aa[j].xb,aa[j].zy,aa[j].bj);
        
    }
    fprintf(fp,"\n");
    fclose(fp1);
}

/*
读取函数
读取文件中储存的数据,赋值到student结构体数组中 
*/
void duqu()
{
    FILE *fp1;
    if((fp1 = fopen("shuju.txt","r")) == NULL)
    {
        exit(EXIT_FAILURE);
    }
    int stnum = 0,num = 0,l;
    char c[100],shuju[100];
    while(!feof(fp1))
    {
        
        num ++;
        if(num % 10 == 1)
        {
            stnum ++;
        }
        fgets(shuju,100,fp1);
        int j;
        j = 0;
        while(shuju[j] != '\n')
        {
            c[j] = shuju[j];
            j ++;
        }
        c[j] = '\0';
        
        if(num % 10 == 2)
            strcpy(aa[stnum].xh,c);
        if(num % 10 == 3)
            strcpy(aa[stnum].xm,c);
        if(num % 10 == 4)
            aa[stnum].nl = atoi(c);
        if(num % 10 == 5)
            strcpy(aa[stnum].xb1,c);
        if(num % 10 == 6)
            strcpy(aa[stnum].jg,c);
        if(num % 10 == 7)
            strcpy(aa[stnum].tele,c);
        if(num % 10 == 8)
            strcpy(aa[stnum].xb,c);
        if(num % 10 == 9)
            strcpy(aa[stnum].zy,c);
        if(num % 10 == 0)
            strcpy(aa[stnum].bj,c);
            
        if(feof(fp1))
        {
            num ++;
            break;
        }
    }
    fclose(fp1);
    
    i = num / 10;
    printf("\n文件中有%d个学生信息\n\n",i);
}
/*
清空文件中的数据 
*/
void del()
{
    FILE *fp;
    fp = fopen("student.txt","w");
    ftruncate(fileno(fp), 0);
    fclose(fp);
    i = 0;
    FILE *fp1;
    fp1 = fopen("shuju.txt","w");
    ftruncate(fileno(fp1), 0);
    fputs("\n",fp1); 
    fclose(fp1);
}

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

相关文章

  • websocket++简单使用及实例分析

    websocket++简单使用及实例分析

    下面小编就为大家带来一篇websocket++简单使用及实例分析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • C语言菜鸟基础教程之a++与++a

    C语言菜鸟基础教程之a++与++a

    很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下
    2017-10-10
  • 浅析c#中WebBrowser控件的使用方法

    浅析c#中WebBrowser控件的使用方法

    以下是对c#中WebBrowser控件的使用方法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 使用C++实现监控文件是否被修改

    使用C++实现监控文件是否被修改

    软件开发过程中经常会用到配置文件,某些应用场景要求在软件运行时动态修改配置文件,此时就需要监控配置文件是否被修改,下面我们就来看看如何使用C++实现这一功能吧
    2024-02-02
  • C++资源管理操作方法详解

    C++资源管理操作方法详解

    系统中的资源,诸如动态申请的内存,文件描述符,数据库连接,网络socket等,在不用的时候,应该及时归还给系统,否则就会造成内存泄露
    2022-09-09
  • C语言全排列回溯算法介绍

    C语言全排列回溯算法介绍

    大家好,本篇文章主要讲的是C语言全排列回溯算法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++ API功能设计的实现

    C++ API功能设计的实现

    C++ API中看似很小的修改,都可能会影响到生成的对象和库文件的二进制表示,如果客户想替换共享库使之工作,就不能简单的替换库文件了事,而往往需要重新编译
    2022-08-08
  • C语言进阶二叉树的基础与销毁及层序遍历详解

    C语言进阶二叉树的基础与销毁及层序遍历详解

    朋友们好,这篇播客我们继续C++的初阶学习,现在对我们对C++的二叉树基础oj与二叉树销毁和层序遍历进行练习,让我们相互学习,共同进步
    2022-06-06
  • C++数据结构之红黑树的实现

    C++数据结构之红黑树的实现

    红黑树在表意上就是一棵每个节点带有颜色的二叉搜索树,并通过对节点颜色的控制,使该二叉搜索树达到尽量平衡的状态。本文主要为大家介绍了C++中红黑树的原理及实现,需要的可以参考一下
    2022-08-08
  • C语言实现简单电子通讯录(2)

    C语言实现简单电子通讯录(2)

    这篇文章主要为大家详细介绍了C语言实现简单电子通讯录的第二部分,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论