学生信息管理系统

来源:互联网 发布:java的applet过时了吗 编辑:程序博客网 时间:2024/06/06 01:45

**

用c语言制作的一个微型学生管理系统

**

#include<stdlib.h>#include<windows.h>#include<string.h>#include<stdio.h>#include <direct.h>#include <io.h>typedef struct{    char S_num[20];//学号    char name[25];//姓名    char sex[5];//性别    long int birthday;//生日    int age;//年龄    char adress[50];//住址    char department[30];//系    char major[20];//专业    int Classes;//班级}Student_information;//学生信息Student_information S_Data[20000];//最多20000个学生数据FILE *fp;void CreateSystemData()//建立文件夹和数据库{    _mkdir("D:\\tem");//新建文件夹    fp = fopen("D:\\tem\\data.dat", "wb");//建立dat数据库    if (fp == NULL)//创建失败    {        printf("Create error!\n->>please check your D disk<<-\n");        exit(0);    }}void save()//信息录入保存{    int i = 0;    if ((fp = fopen("D:\\tem\\data.dat", "wb")) == NULL)    {        printf("can't open file\n");        exit(0);    }    while(strcmp(S_Data[i].name, "#") != 0)//将数组中的数据写入磁盘        if (fwrite(&S_Data[i++], sizeof(Student_information), 1, fp) != 1)        {            printf("file write error!\n");            exit(0);        }    fwrite(&S_Data[i], sizeof(Student_information), 1, fp);    fclose(fp);}void LoadData()//读取文件中的信息{    int i = 0;    if ((fp = fopen("D:\\tem\\data.dat", "rb")) == NULL)    {        printf("can't open file\n");        exit(0);    }    do    {        if (fread(&S_Data[i], sizeof(Student_information), 1, fp) != 1)//将磁盘中的数据读入数组中        {            printf("file read error!\n");            exit(0);        }    } while (strcmp(S_Data[i++].name, "#") != 0);    fclose(fp);}void add_save(Student_information t_Data[])//追加录入数据{    int i = 0, j = 0;    LoadData();    while (strcmp(S_Data[i].name, "#") != 0)        i++;    while (strcmp(t_Data[j].name, "#") != 0)//将新的数据添加到数组尾    {        S_Data[i++] = t_Data[j++];    }    S_Data[i] = t_Data[j];    FILE *temp;//新建临时文件保存数据    if ((temp = fopen("D:\\tem\\tempt.dat", "wb")) == NULL)    {        printf("can't open file\n");        exit(0);    }    i = 0;    while (strcmp(S_Data[i].name, "#") != 0)//数据写入临时文件中        if (fwrite(&S_Data[i++], sizeof(Student_information), 1, temp) != 1)        {            printf("file write error!\n");            exit(0);        }    fwrite(&S_Data[i], sizeof(Student_information), 1, temp);    fclose(temp);    unlink("D:\\tem\\data.dat");//删除原文件    rename("D:\\tem\\tempt.dat", "D:\\tem\\data.dat");//将临时文件改名覆盖到原来的文件}int Search(char num[])//通过学号查找信息返回数组下标失败返回-1{    int i = 0;    while (S_Data[i].age != 0)    {        if (strcmp(num, S_Data[i].S_num) == 0)            return i;        i++;    }    return -1;}void Change_Data(){    int op;    while (1)    {        int i = 0;        printf("\nIn put number to choose operation:\n1.entering data\t2.change data\t3.another operation\n");        scanf("%d", &op);        if (op == 1)//信息录入        {            printf("Please entering students' information in order:\n <student name | number | sex | birthday | age | adress | dapartment | major\n | class>\n");             //按顺序输入数据            printf("Finish entering with '#'\n");//以#号结束输入            fp = fopen("D:\\tem\\data.dat", "rb");//读取一个数据以判断文件中有无数据            fread(&S_Data[0], sizeof(Student_information), 1, fp);            fclose(fp);            if (S_Data[0].age != 0)//有数据则追加输入数据            {                Student_information t_Data[100];                i = 0;                scanf("%s", t_Data[i].name);                while (strcmp(t_Data[i].name, "#") != 0)                {                    scanf("%s", t_Data[i].S_num);                    scanf("%s", t_Data[i].sex);                    scanf("%ld %d", &t_Data[i].birthday, &t_Data[i].age);                    scanf("%s %s %s", t_Data[i].adress, t_Data[i].department, t_Data[i].major);                    scanf("%d", &t_Data[i].Classes);                    i++;                    scanf("%s", t_Data[i].name);                }                add_save(t_Data);            }            else//否则从头开始写入数据            {                i = 0;                scanf("%s", S_Data[i].name);                while (strcmp(S_Data[i].name, "#") != 0)                {                    scanf("%s", S_Data[i].S_num);                    scanf("%s", S_Data[i].sex);                    scanf("%ld %d", &S_Data[i].birthday, &S_Data[i].age);                    scanf("%s %s %s", S_Data[i].adress, S_Data[i].department, S_Data[i].major);                    scanf("%d", &S_Data[i].Classes);                    i++;                    scanf("%s", S_Data[i].name);                }                save();            }        }        else if (op == 2)//信息修改        {            char t_num[25];            int k;            LoadData();            printf("Inputting the student's number to change data\n");            scanf("%s", t_num);            k = Search(t_num);            if (k == -1)                printf("Search failed!\n");            else            {                printf("Inputting new information in order:\n student name | number | sex | birthday | age | adress | dapartment | \nmajor | class\n");                scanf("%s", S_Data[k].name);                scanf("%s", S_Data[k].S_num);                scanf("%s", S_Data[k].sex);                scanf("%ld %d", &S_Data[k].birthday, &S_Data[k].age);                scanf("%s %s %s", S_Data[k].adress, S_Data[k].department, S_Data[k].major);                scanf("%d", &S_Data[k].Classes);            }            save();        }        else if (op == 3)            return;        else            printf("Input error!\n");    }}void Delete_Data()//删除单项数据信息{    char num[25];    int k = 0, i;    LoadData();    printf("Please entering the student's number to delet information:\n");    scanf("%s", num);    k = Search(num);    if (k == -1)        printf("search failed!\n");    else    {        S_Data[k].age = -1;//将要删除的数据年龄标记为-1        FILE *temp;        if ((temp = fopen("D:\\tem\\tempt.dat", "wb")) == NULL)        {            printf("can't open file\n");            exit(0);        }        i = 0;        while (strcmp(S_Data[i].name, "#") != 0)        {            if (S_Data[i].age != -1)//将年龄不为-1的数据复制到临时文件中            {                if (fwrite(&S_Data[i], sizeof(Student_information), 1, temp) != 1)                {                    printf("file write error!\n");                    exit(0);                }            }            i++;        }        fwrite(&S_Data[i], sizeof(Student_information), 1, temp);        fclose(temp);        unlink("D:\\tem\\data.dat");        rename("D:\\tem\\tempt.dat", "D:\\tem\\data.dat");//将临时文件覆盖到原文件    }}void Inquire_Data() //查找学生信息{    char num[25];    int k;    printf("Please entering student's number to inquire student's information:\n");    scanf("%s", num);    k = Search(num);    if (k == -1)        printf("search failed!\n");    else        printf("%-10s %10s %5s %10ld %4d %15s\n%-10s %10s %4d\n", S_Data[k].name, S_Data[k].S_num, S_Data[k].sex, S_Data[k].birthday, S_Data[k].age, S_Data[k].adress, S_Data[k].department, S_Data[k].major, S_Data[k].Classes);}void Output_Data() // 输出学生信息{    int i = 0;    LoadData();    while (strcmp(S_Data[i].name, "#") != 0)    {        printf("%-10s %10s %5s %10ld %4d %15s\n%-10s %10s %4d班\n", S_Data[i].name, S_Data[i].S_num, S_Data[i].sex, S_Data[i].birthday, S_Data[i].age, S_Data[i].adress, S_Data[i].department, S_Data[i].major, S_Data[i].Classes);        i++;    }}int main(){    int opreation;    printf("Welcome to Student Roll management system...\n");    if (access("D:\\tem", 0) != 0)//判断文件是否已经存在        CreateSystemData();    while (1)    {        printf("\nPlease entering number to choose operation:\n1.Change/entering data\t2.Delete data\t3.Inquire data\t4.Output data\n5.exit system\n");//操作提示        scanf("%d", &opreation);        switch (opreation)        {        case 1:            Change_Data();            break;        case 2:            Delete_Data();            break;        case 3:            Inquire_Data();            break;        case 4:            Output_Data();            break;        case 5:            system("cls");            return 0;        default:            printf("Input error!\n");            break;        }    }    return 0;}

这里写图片描述

0 0
原创粉丝点击