首頁 > 軟體

C語言實現簡單的學生學籍管理系統

2022-07-25 10:00:54

本文範例為大家分享了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== '')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 == '')
            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 = '';
            *stud[0].num = '';
            *stud[0].sex = '';
            *stud[0].clas = '';
            *stud[0].birth.year = '';
            *stud[0].birth.month = '';
            *stud[0].birth.day = '';
            *stud[0].time = '';
            *stud[0].specialit = '';
            *stud[0].remark = '';
        }
        else
        {
            for(k = i;k < n - 1; k++)
            {
                stud[k] = stud[k+1];
            }
            *stud[n - 1].name = '';
            *stud[n - 1].num = '';
            *stud[n - 1].sex = '';
            *stud[n - 1].clas = '';
            *stud[n - 1].birth.year = '';
            *stud[n - 1].birth.month = '';
            *stud[n - 1].birth.day = '';
            *stud[n - 1].time = '';
            *stud[n - 1].specialit = '';
            *stud[n - 1].remark = '';
        }

        PF("已刪除nn");
    }
    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== '')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("tt姓名:%-10sn",stud[i].name);
    PF("tt學號:%-10sn",stud[i].num);
    PF("tt性別:%sn",stud[i].sex);
    PF("tt班級:%-12sn",stud[i].clas);
    PF("tt出生日期:%-4s 年 %-2s 月 %-2s 日n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day);
    PF("tt入學日期:%sn",stud[i].time);
    PF("tt專業:%sn",stud[i].specialit);
    PF("tt備註:%sn",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== '')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("tt姓名:%-10sn",stud[i].name);
        PF("tt學號:%-10sn",stud[i].num);
        PF("tt性別:%sn",stud[i].sex);
        PF("tt班級:%-12sn",stud[i].clas);
        PF("tt出生日期:%-4s 年 %-2s 月 %-2s 日n",stud[i].birth.year,stud[i].birth.month,stud[i].birth.day);
        PF("tt入學日期:%sn",stud[i].time);
        PF("tt專業:%sn",stud[i].specialit);
        PF("tt備註:%snn",stud[i].remark);
    }
    PF("tt輸入回車返回主選單");

    getchar();
    getchar();

}


void change()
{
    int  k = 0;
    char j, s[20];
    front5:
    system("cls");  /*清屏*/
    for(m = 0;; m++)
        if(*stud[m].num== '')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== '')break;
    n = m;

    for(s = 0;s < n;s++)
    {
        PF("tt姓名:%-10sn",stud[s].name);
        PF("tt學號:%-10sn",stud[s].num);
        PF("tt性別:%sn",stud[s].sex);
        PF("tt班級:%-12sn",stud[s].clas);
        PF("tt出生日期:%-4s 年 %-2s 月 %-2s 日n",stud[s].birth.year,stud[s].birth.month,stud[s].birth.day);
        PF("tt入學日期:%sn",stud[s].time);
        PF("tt專業:%sn",stud[s].specialit);
        PF("tt備註:%snn",stud[s].remark);
    }
    PF("tt按確認鍵返回主選單");
    getchar();
    getchar();
}

void insert()
{
    front9:;
    char j;

    for(m = 0;; m++)
        if(*stud[m].num== '')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("tt   ************n");
    PF("tt   *  主選單  *n");
    PF("tt   ************n");
    PF("tt1.學生學籍資訊錄入nn");
    PF("tt2.學生學籍資訊刪除nn");
    PF("tt3.學生學籍資訊查詢nn");
    PF("tt4.學生學籍資訊排序nn");
    PF("tt5.學生學籍資訊修改nn");
    PF("tt6.學生學籍資訊儲存nn");
    PF("tt7.退出系統nn");
    PF("tt8.學生學籍資訊顯示nn");
    PF("tt9.學生學籍資訊插入nn");
    PF("tt請選擇[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;
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com