c语言版学生信息管理系统(文件处理)

学生信息管理系统

系统功能

0.系统帮助及说明
1.刷新学生信息
2.查询学生信息
4.增加学生信息
5.按学号删除信息
6.显示当前信息
7.保存当前学生信息
8.退出系统

源代码

#include<stdio.h>
#include<stdlib.h>  /*其它说明*/
#include<string.h>  /*字符串函数*/
#define max 100
#define LEN 15      /* 学号和姓名最大字符数,实际请更改*/
#define N 50        /* 最大学生人数,实际请更改*/
int k=1,n=0, m=0;/* n代表当前记录的学生人数*/
//学生信息结构体
typedef struct student {
    char no[13];//学号
    char name[10];//姓名
    char sex[4];//性别
    int age;//年龄
    int scorec;//c成绩
    int scoremath;//数学成绩
    int scoreEnglish;//英语成绩
} student,stu[max];
void fileWrite(int n,stu s);
//帮助
void help() 
{
    printf("\n0.欢迎使用系统帮助!\n");
    printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
    printf("\n2.按照菜单提示键入数字代号;\n");
    printf("\n3.增加学生信息后,切记保存;\n");
    printf("\n4.谢谢您的使用!\n");
}
//刷新学生信息
int update()
 {
    int j=0;
    FILE * fp,*fp1; 
    if((fp=fopen("D:\\a.txt","r"))==NULL) return 0;
    stu s;
    //从文件读取信息 
    while(fscanf(fp,"%s %s %s %d %d %d %d ",&s[j].no,&s[j].name,&s[j].sex[j],&s[j].age,&s[j].scorec,&s[j].scoremath,&s[j].scoreEnglish)==7) {
        j++;
    }
    n=j; 
    printf("刷新成功!!!"); 
    return n; 
}
//查询学生信息
void seek() {
    int j=0;
    FILE * fp;
    if((fp=fopen("D:\\a.txt","r"))==NULL) return ;
    stu s;
    while(fscanf(fp,"%s %s %s %d %d %d %d ",&s[j].no,&s[j].name,&s[j].sex[j],&s[j].age,&s[j].scorec,&s[j].scoremath,&s[j].scoreEnglish)==7) {
        j++;
    }
    n=j;
    int i=0,item,flag;
    char s1[13]; /* 以姓名和学号最长长度+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(s1,s[i].no)==0) {   //比较输入的学号和文件中存放的学号是否一致 
                        flag=1;
                        printf("学生学号    学生姓名  年龄   性别  C语言成绩  高等数学  大学英语成绩\n");
                        printf("--------------------------------------------------------------------\n");
                        printf("%4s %8s %9s %6d %9d %9d %9d \n",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].scorec,s[i].scoremath,s[i].scoreEnglish);
                    }
                if(0==flag)
                    printf("该学号不存在!\n");
                break;
            case 2:
                printf("请输入要查询的学生的姓名:\n");
                scanf("%s",&s1);

                for(i=0; i<n; i++)
                    if(strcmp(s[i].name,s1)==0) {  //比较输入的姓名和文件中存放的姓名是否一致 
                        flag=1;
                        printf("学生学号    学生姓名  年龄   性别  C语言成绩  高等数学  大学英语成绩\n");
                        printf("--------------------------------------------------------------------\n");
                        printf("%4s %8s %9s %6d %9d %9d %9d \n",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].scorec,s[i].scoremath,s[i].scoreEnglish);
                    }
                if(0==flag)
                    printf("该姓名不存在!\n");
                break;
            case 3:
                return;
            default:
                printf("请在1-3之间选择\n");
        }
    }
}
//修改学生信息
void modify() {
    int j=0;
    FILE * fp;
    if((fp=fopen("D:\\a.txt","r"))==NULL) return ;
    stu s;
    while(fscanf(fp,"%s %s %s %d %d %d %d ",&s[j].no,&s[j].name,&s[j].sex[j],&s[j].age,&s[j].scorec,&s[j].scoremath,&s[j].scoreEnglish)==7) {
        j++;
    }
    n=j;
    int i,item,num;
    int age;
    char sex1[4],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1为准*/
    float score1;
    printf("请输入要修改的学生的学号:\n");
    scanf("%s",s1);
    for(i=0; i<n; i++) {
        if(strcmp(s[i].no,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(s[num].name,s2);
                        fileWrite(n,s);
                        break;
                    case 2:
                        printf("请输入新的年龄:\n");
                        scanf("%d",&age);
                        s[num].age=age;
                        fileWrite(n,s);
                        break;
                    case 3:
                        printf("请输入新的性别:\n");
                        scanf("%s",&sex1);
                        strcpy(s[num].sex,sex1);
                        fileWrite(n,s);
                        break;
                    case 4:
                        printf("请输入新的C语言成绩:\n");
                        scanf("%d",&score1);
                        s[num].scorec=score1;
                        fileWrite(n,s);
                        break;
                    case 5:
                        printf("请输入新的高等数学成绩:\n");
                        scanf("%d",&score1);
                        s[num].scoremath=score1;
                        fileWrite(n,s);
                        break;
                    case 6:
                        printf("请输入新的大学英语成绩:\n");
                        scanf("%d",&score1);
                        s[num].scoreEnglish=score1;
                        fileWrite(n,s);
                        break;
                    case 7:
                        return;
                    default:
                        printf("请在1-7之间选择\n");
                }
            }
        } else {
            printf("没有该学生学号!!!");
        }
    }
}
//添加学生信息
void insert() {
    int i,a,b;
    printf("请输入待增加的学生数:\n");
    scanf("%d",&n);
    FILE * fp;
    if((fp=fopen("D:\\a.txt","at"))==NULL) return ;
    stu s;
    for(i=0; i<n; i++) {
        printf("\n请输入第%d个学生的学号:",i+1);
        scanf("\n%s",&s[i].no);
        printf("\n请输入第%d个学生的姓名:",i+1);
        scanf("%s",&s[i].name);
        printf("\n请输入第%d 个学生的性别:",i+1);
        scanf("%s",&s[i].sex);
        printf("\n请输入第%d 个学生的年龄:",i+1);
        scanf("%d",&s[i].age);
        printf("\n请输入第%d 个学生的C语言成绩:",i+1);
        scanf("%d",&s[i].scorec);
        printf("\n请输入第%d 个学生的高等数学成绩:",i+1);
        scanf("%d",&s[i].scoremath);
        printf("\n请输入第%d 个学生的大学英语成绩:",i+1);
        scanf("%d",&s[i].scoreEnglish);
        //写入文件
        fprintf(fp,"%s %s %s %d %d %d %d \n",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].scorec,s[i].scoremath,s[i].scoreEnglish);
    }
    printf("添加成功!!!");
    fclose(fp);
}
//按学号删除信息
void del() {
    int j=0;
    FILE * fp,*fp1;
    if((fp=fopen("D:\\a.txt","r"))==NULL) return ;
    stu s;
    while(fscanf(fp,"%s %s %s %d %d %d %d ",&s[j].no,&s[j].name,&s[j].sex[j],&s[j].age,&s[j].scorec,&s[j].scoremath,&s[j].scoreEnglish)==7) {
        j++;
    }
    n=j;

    int i,flag=0;
    char s1[LEN+1];
    printf("请输入要删除学生的学号:\n");
    scanf("%s",s1);
    for(i=0; i<n; i++) {
        if(strcmp(s[i].no,s1)==0) {
            flag=1;
            for(j=i; j<n-1; j++) {
                strcpy(s[j].no,s[j+1].no);
                strcpy(s[j].name,s[j+1].name);
                s[j].age=s[j+1].age;
                strcpy(s[j].sex,s[j+1].sex);
                s[j].scorec=s[j+1].scorec;
                s[j].scoremath=s[j+1].scoremath;
                s[j].scoreEnglish=s[j+1].scoreEnglish;
            }
        }
    }
    if(flag==0)
        printf("该学号不存在!\n");
    if(flag==1) {
        n--;
        fileWrite(n,s);
        fclose(fp); 
        printf("删除成功,显示结果请选择菜单\n");

    }
}
//显示当前信息
void display() {
    int i=0;
    FILE * fp;
    if((fp=fopen("D:\\a.txt","r"))==NULL) return ;
    stu s;
    while(fscanf(fp,"%s %s %s %d %d %d %d ",&s[i].no,&s[i].name,&s[i].sex[i],&s[i].age,&s[i].scorec,&s[i].scoremath,&s[i].scoreEnglish)==7) {
        i++;
    }
    //记录文件中数据的行数
    int n=i;
    printf("学生学号    学生姓名  年龄   性别  C语言成绩  高等数学  大学英语成绩\n");
    printf("--------------------------------------------------------------------\n");
    for(i=0; i<n; i++) {
        printf("%4s %8s %9s %6d %9d %9d %9d \n",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].scorec,s[i].scoremath,s[i].scoreEnglish);
    }

}
//保存当前学生信息(清除文件信息写入函数)
void fileWrite(int n,stu s){
        FILE *fp1;
        int i;
        if((fp1=fopen("D:\\a.txt","w"))==NULL) return ;
        for(i=0; i<n; i++) {
            fprintf(fp1,"%s %s %s %d %d %d %d ",s[i].no,s[i].name,s[i].sex,s[i].age,s[i].scorec,s[i].scoremath,s[i].scoreEnglish);
        }
        fclose(fp1);
        printf("保存成功!!!");
} 
/* 界面*/
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:
            update();
            break;
        case 2:
            seek();
            break;
        case 3:
            modify();
            break;
        case 4:
            insert();
            break;
        case 5:
            del();
            break;
        case 6:
            display();
            break;
        case 7:
            n=update();
            stu s;
            fileWrite(n,s);
            break;
        case 8:
            k=0;
            break;
        default:
            printf("请在0-8之间选择\n");
    }
}
//主函数    
int main() {
    while(k) {
        menu();
    }
    system("pause");
    return 0;
}

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值