基於檔案管理的學生資訊管理系統(C語言/C++)

Tearth1212發表於2017-06-10
#include<stdio.h>   /*I/O函式*/
#include<stdlib.h>  /*其它說明*/
#include<string.h>  /*字串函式*/
#define LEN 15      /* 學號和姓名最大字元數,實際請更改*/
#define N 50        /* 最大學生人數,實際請更改*/
struct Student
{
 char code[LEN];    /* 學號*/
 char name[LEN];    /* 姓名*/
 int age;           /* 年齡*/
 char sex[3];       /* 性別*/
 float score[3];     /* 3門課程成績*/
}Stud[N];


int k=1,n=0, m=0;/* n代表當前記錄的學生人數*/   
void seek();  /*查詢*/
void modify();  /*修改資訊*/
void insert();  /*插入函式*/
void del();    /*刪除函式*/
void outfile(); /*儲存資訊*/
void freshen(); /*重新整理資訊*/
void display(); /*顯示資訊*/
void menu();   /*主介面*/
int main()
{ 
    while(k)
    {
        menu();
    }
    system("pause");
    return 0;
} 

void outfile() /*儲存當前資訊*/
{
    int i;
    FILE *fp;
    fp=fopen("Studdent.txt","w");    /*用fopen函式開啟資料檔案*/
    for(i=0;i<n;i++)
     {
        fprintf(fp,"%7s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,Stud[i].name,Stud[i].age,
                        Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
     }
     fclose(fp);      /*用fclose函式關閉資料檔案*/
}

void help()  /*幫助選單*/
{ 
    printf("\n0.歡迎使用系統幫助!\n");
    printf("\n1.初次進入系統後,請先選擇增加學生資訊;\n");
    printf("\n2.按照選單提示鍵入數字代號;\n");
    printf("\n3.增加學生資訊後,切記儲存;\n");
    printf("\n4.謝謝您的使用!\n");
} 


void seek() /*查詢*/
{
    int i,item,flag;
    char s1[21]; /* 以姓名和學號最長長度+1為準*/
    printf("------------------\n");
    printf("-----1.按學號查詢-----\n");
    printf("-----2.按姓名查詢-----\n");
    printf("-----3.退出本選單-----\n");
    printf("------------------\n");
    while(1)
    {
        printf("請選擇子選單編號:");
        scanf("%d",&item);
        flag=0;
        switch(item)
        {
        case 1:
            printf("請輸入要查詢的學生的學號:\n");
            scanf("%s",s1);
            for(i=0;i<n;i++)
                if(strcmp(Stud[i].code,s1)==0)
                {
                    flag=1;
                    printf("學生學號    學生姓名  年齡   性別  C語言成績  高等數學  大學英語成績\n");             
                    printf("--------------------------------------------------------------------\n");
                    printf("%6s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,Stud[i].name,Stud[i].age,
                        Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
                }
                if(0==flag)
                    printf("該學號不存在!\n"); break;
        case 2:
            printf("請輸入要查詢的學生的姓名:\n");
            scanf("%s",s1);
            for(i=0;i<n;i++)
                if(strcmp(Stud[i].name,s1)==0)
                {
                    flag=1;
                    printf("學生學號    學生姓名  年齡   性別  C語言成績  高等數學  大學英語成績\n");             
                    printf("--------------------------------------------------------------------\n");
                    printf("%6s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,Stud[i].name,Stud[i].age,
                        Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
                }
                    if(0==flag)
                        printf("該姓名不存在!\n"); break;
        case 3:return;
        default:printf("請在1-3之間選擇\n");
        }
    }
} 


void modify() /*修改資訊*/
{
    int i,item,num;
    char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和學號最長長度+1為準*/
    float score1;
    printf("請輸入要要修改的學生的學號:\n");
    scanf("%s",s1);
    for(i=0;i<n;i++)
        if(strcmp(Stud[i].code,s1)==0) /*比較字串是否相等*/
            num=i;
        printf("------------------\n");
        printf("1.修改姓名\n");
        printf("2.修改年齡\n");
        printf("3.修改性別\n");
        printf("4.修改C語言成績\n");
        printf("5.修改高等數學成績\n");
        printf("6.修改大學英語成績\n");
        printf("7.退出本選單\n");
        printf("------------------\n");
        while(1)
        {
            printf("請選擇子選單編號:");
            scanf("%d",&item);
            switch(item)
            {
            case 1:
                printf("請輸入新的姓名:\n");
                scanf("%s",s2);
                strcpy(Stud[num].name,s2); break;
            case 2:
                printf("請輸入新的年齡:\n");
                scanf("%d",Stud[num].age);break;
            case 3:
                printf("請輸入新的性別:\n");
                scanf("%c",&sex1);
                strcpy(Stud[num].sex,sex1); break;
            case 4:
                printf("請輸入新的C語言成績:\n");
                scanf("%f",&score1);
                Stud[num].score[0]=score1; break;
            case 5:
                printf("請輸入新的高等數學成績:\n");
                scanf("%f",&score1);
                Stud[num].score[1]=score1; break;
            case 6:
                printf("請輸入新的大學英語成績:\n");
                scanf("%f",&score1);
                Stud[num].score[2]=score1; break;
            case 7: return;
            default:printf("請在1-7之間選擇\n");
            }
        }
} 


void sort()/*按學號排序*/
{
    int i,j,k,*p,*q,s;
    char temp[LEN+1];
    float ftemp;
    for(i=0;i<n-1;i++)
    {
        for(j=n-1;j>i;j--)
            if(strcmp(Stud[j-1].code,Stud[j].code)>0)
            {
                strcpy(temp,Stud[j-1].code);
                strcpy(Stud[j-1].code,Stud[j].code);
                strcpy(Stud[j].code,temp);
                strcpy(temp,Stud[j-1].name);
                strcpy(Stud[j-1].name,Stud[j].name);
                strcpy(Stud[j].name,temp);
                strcpy(temp,Stud[j-1].sex);
                strcpy(Stud[j].sex,temp);
                p=&Stud[j-1].age;
                q=&Stud[j].age;
                s=*q;
                *q=*p;
                *p=s;
                for(k=0;k<3;k++)
                {
                    ftemp=Stud[j-1].score[k];
                    Stud[j-1].score[k]=Stud[j].score[k];
                    Stud[j].score[k]=ftemp;
                }
            }
    }
} 

void insert() /*插入函式*/
{
    int j=n;

    printf("請輸入待增加的學生數:\n");
    scanf("%d",&m);
    do
    {

        printf("請輸入第%d 個學生的學號:\n",j-n+1);
        scanf("%s",Stud[j].code);
        printf("請輸入第%d 個學生的姓名:\n",j-n+1);
        scanf("%s",Stud[j].name);
        printf("請輸入第%d 個學生的年齡:\n",j-n+1);
        scanf("%d",&Stud[j].age);
        printf("請輸入第%d 個學生的性別:\n",j-n+1);
        scanf(" %s",&Stud[j].sex);
        printf("請輸入第%d 個學生的C語言成績\n",j-n+1);
        scanf("%f",&Stud[j].score[0]);
        printf("請輸入第%d 個學生的高等數學成績:\n",j-n+1);
        scanf("%f",&Stud[j].score[1]);
        printf("請輸入第%d 個學生的大學英語成績:\n",j-n+1);
        scanf("%f",&Stud[j].score[2]);

    j++;
    }while(j<n+m);
    n+=m;
    printf("資訊增加完畢!\n\n");
    sort();
} 

void del()  /*刪除函式*/
{
    int i,j,flag=0;
    char s1[LEN+1];
    printf("請輸入要刪除學生的學號:\n");
    scanf("%s",s1);
    for(i=0;i<n;i++)
        if(strcmp(Stud[i].code,s1)==0)
        {
            flag=1;
            for(j=i;j<n-1;j++)
            Stud[j]=Stud[j+1];

        }
        if(flag==0)
            printf("該學號不存在!\n");
        if(flag==1)
        {
            printf("刪除成功,顯示結果請選擇選單\n");
            n--;
        }
} 


void display()  /*顯示當前資訊*/
{
    int i;
    printf("共有%d位學生的資訊:\n",n);
    if(0!=n)
    {
        printf("學生學號  學生姓名 年齡  性別  C語言成績  高等數學  大學英語成績\n");             
        printf("--------------------------------------------------------------------\n");
        for(i=0;i<n;i++)
        { 
            printf("%7s %7s %6d %6s %9.1f %10.1f %10.1f\n",Stud[i].code,
        Stud[i].name,Stud[i].age,Stud[i].sex,Stud[i].score[0],Stud[i].score[1],Stud[i].score[2]);
        }
    }
} 




void freshen() /*重新整理資訊*/
{  
}


void menu()/* 介面*/
{
    int num;
    printf(" \n\n                    \n\n");
    printf("  ******************************************************\n\n");
    printf("  *                學生資訊管理系統                    *\n \n");
    printf("  ******************************************************\n\n"); 
    printf("*********************系統功能選單*************************       \n");
    printf("     ----------------------   ----------------------   \n");
    printf("     *********************************************     \n");
    printf("     * 0.系統幫助及說明  * *  1.重新整理學生資訊   *     \n");
    printf("     *********************************************     \n"); 
    printf("     * 2.查詢學生資訊    * *  3.修改學生資訊   *     \n");
    printf("     *********************************************     \n");
    printf("     * 4.增加學生資訊    * *  5.按學號刪除資訊 *     \n");
    printf("     *********************************************     \n");
    printf("     * 6.顯示當前資訊    * *  7.儲存當前學生資訊*     \n");
    printf("     ********************** **********************     \n");
    printf("     * 8.退出系統        *                            \n");
    printf("     **********************                            \n");
    printf("     ----------------------   ----------------------                           \n");
    printf("請選擇選單編號:");
    scanf("%d",&num);
    switch(num)
    { 
    case 0:help();break;
    case 1:freshen();break;
    case 2:seek();break;
    case 3:modify();break;
    case 4:insert();break;
    case 5:del();break;
    case 6:display();break;
    case 7:outfile();break;
    case 8:k=0;break;
    default:printf("請在0-8之間選擇\n");
    }
}

相關文章