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

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

推薦閱讀: