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);
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: