鱼C论坛

 找回密码
 立即注册
查看: 1065|回复: 4

[已解决]学生信息管理系统用文件存储,读取

[复制链接]
发表于 2021-1-21 10:13:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
要做一个学生信息管理系统,要求信息用文件存储,然后可以修改,查看。
可是我运行结果无法显示文件呜呜呜。能不能帮帮孩子。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define N 1000  //最大学生人数

int n=0,i,x=1;  //全局变量

//声明函数
void menu();
void save();
void input();
void insert();
void del();
void modify();
void browse();
void enquiry();

//结构体
struct student
{
        char stunum[15];
        char name[10];
        int age;
        char sex[6];
        int byear;
        int bmonth;
        int bday;
        char place[100];
        char phnum[11];
        char email[15];
}stu[N];

//主函数
main()
{
        while(x)
        menu();
        system("pause");
        return 0;
}

//系统菜单
void menu()
{
        int num;
        printf("*******************************************\n");
        printf("**************学生信息管理系统*************\n");
        printf("*********如果是第一次进入系统请按0*********\n");
        printf("******************系统功能*****************\n");
        printf("******1.插入学生信息***2.删除学生信息******\n");
        printf("******3.修改学生信息***4.浏览学生信息******\n");
        printf("******5.查询学生信息***6.退出信息系统******\n");
        printf("********************^^^********************\n");
        printf("---------请选择需要的功能前的序号: --------\n");
        scanf("%d",&num);
        switch(num)
        {
                case 0:input();break;
                case 1:insert();break;
                case 2:del();break;
                case 3:modify();break;
                case 4:browse();break;
                case 5:enquiry();break;
                case 6:x=0;printf("即将退出系统!\n");break;
                default:printf("请选择需要的功能序号!\n");
        }
}

//文件保存学生信息
void save()
{
        FILE *fp;
        if((fp=fopen("d:\\student.txt","w"))==NULL)
        {         printf("File open error!\n");
                exit(0);
        }
        for(i=0;i<n;i++)
        fprintf(fp,"学号:%s  姓名:%s  年龄:%d  性别:%s  出生日期:%d-%d-%d  地址:%s  电话:%s  E-mail:%s",stu[i].stunum,stu[i].name,stu[i].age,stu[i].sex,stu[i].byear,stu[i].bmonth,stu[i].bday,stu[i].place,stu[i].phnum,stu[i].email);
        if(fclose(fp))
        {         printf("Can not close the file!\n");
                exit(0);
        }
        printf("保存成功!\n");
        system("pause");
}

//录入学生信息
void input()
{
        printf("请输入学生总数:");
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
                printf("请输入学号:\n");
            scanf("%s",stu[i].stunum);
            printf("请输入学生姓名:\n");
            scanf("%s",stu[i].name);
            printf("请输入学生年龄:\n");
            scanf("%d",&stu[i].age);
            printf("请输入学生性别:\n");
            scanf("%s",stu[i].sex);
            printf("请输入学生出生日期(年-月-日):\n");
            scanf("%d-%d-%d",&stu[i].byear,&stu[i].bmonth,&stu[i].bday);
            printf("请输入学生地址:\n");
            scanf("%s",stu[i].place);
            printf("请输入学生电话:\n");
            scanf("%s",stu[i].phnum);
            printf("请输入学生E-mail:\n");
            scanf("%s",stu[i].email);
        }
        printf("录入完成!\n");
        menu();
        system("pause");
}

//插入学生信息
void insert()
{
        int y=1,t=0;
        while(y)
        {
                printf("请输入学号:\n");
            scanf("%s",stu[i].stunum);
            printf("请输入学生姓名:\n");
            scanf("%s",stu[i].name);
            printf("请输入学生年龄:\n");
            scanf("%d",&stu[i].age);
            printf("请输入学生性别:\n");
            scanf("%s",stu[i].sex);
            printf("请输入学生出生日期(年-月-日):\n");
            scanf("%d-%d-%d",&stu[i].byear,&stu[i].bmonth,&stu[i].bday);
            printf("请输入学生地址:\n");
            scanf("%s",stu[i].place);
            printf("请输入学生电话:\n");
            scanf("%s",stu[i].phnum);
            printf("请输入学生E-mail:\n");
            scanf("%s",stu[i].email);
            printf("是否继续添加?(是请输入1,不是请输入0)\n");
            scanf("%d",&t);
            y=t;
            n++;
        }
        printf("插入完毕!");
        save();
        menu();
        system("pause");
}

//删除学生信息
void del()
{
        int j,k,t=0,f;
        char s[15];
        printf("请输入要删除的学生的学号:\n");
        scanf("%s",s);
        for(j=0;j<n;j++)
        {
                if(strcmp(stu[j].stunum,s)==0)
                {
                        t=1;
                        for(k=j;k<n-1;k++)
                        stu[k]=stu[k+1];
                }
        }
        if(t==0)
        printf("该学号不存在!");
        else if(t==1)
        {
                printf("删除成功!\n");
                n--;
        }
        printf("是否继续删除(是按1,否按0)");
        scanf("%d",&f);
        if(f==0)
        {
                save();
                menu();
        }
        else if(f==1)
        {
                del();
        }
        system("pause");
}

//修改学生信息
void modify()
{
        int i,num,t,year,month,day,f;
        char s[15],s1[10],s2[6],s3[100],s4[11],s5[15];
        printf("请输入要修改的学生的学号:\n");
        scanf("%s",s);
        for(i=0;i<n;i++)
        {
                if(strcmp(stu[i].stunum,s)==0)
                {
                        num=i;
                        printf("1.修改姓名\n");
                        printf("2.修改年龄\n");
                        printf("3.修改性别\n");
                        printf("4.修改出生日期\n");
                        printf("5.修改地址\n");
                        printf("6.修改电话\n");
                printf("7.修改E-mail\n");
                        printf("8.退出本菜单\n");
                }
                while(1)
                {
                        printf("请选择编号\n");
                        scanf("%d",&t);
                        switch(t)
                        {
                                case 1:
                                        printf("请输入新的姓名:\n");
                                        scanf("%s",s1);
                                        strcpy(stu[num].name,s1);
                                        break;
                                case 2:
                                        printf("请输入新的年龄:\n");
                                        scanf("%d", stu[num].age);
                                        break;
                                case 3:
                                        printf("请输入新的性别:\n");
                                        scanf("%s", s2);
                                        strcpy(stu[num].sex,s2);
                                        break;
                                case 4:
                                        printf("请输入新的出生日期:\n");
                                        scanf("%d-%d-%d", &year,&month,&day);
                                        stu[num].byear=year;stu[num].bmonth=month;stu[num].bday=day;
                                        break;
                                case 5:
                                        printf("请输入新的地址:\n");
                                        scanf("%s", s3);
                                        strcpy(stu[num].place,s3);
                                        break;
                                case 6:
                                        printf("请输入新的电话:\n");
                                        scanf("%s", s4);
                                        strcpy(stu[num].phnum,s4);
                                        break;
                                case 7:
                                        printf("请输入新的E-mail:\n");
                                        scanf("%s", s5);
                                        strcpy(stu[num].email,s5);
                                        break;       
                                case 8:        return;
                                default:printf("请在1-8之间选择\n");
                        }
                }
        }
        printf("是否继续修改(是按1,否按0)");
        scanf("%d",&f);
        if(f==0)
        {
                save();
                menu();
        }
        else if(f==1)
        {
            modify();
        }
        system("pause");
}

//浏览学生信息
void browse()
{
        int i,j;
        //按学号排序
        for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
        {
                if(strcmp(stu[j].stunum,stu[j+1].stunum)>0)
                {
                        stu[n+1]=stu[j];
                        stu[j]=stu[j+1];
                        stu[j+1]=stu[n+1];
                }
        }
        save();
        //打开文件
        FILE *fp;
    if((fp=fopen("d:/student.txt","r"))==NULL)
    {
                printf("File open error!\n");
            exit(0);
    }
    if(fclose(fp))
    {
                printf("Can not close the file!\n");
            exit(0);
    }

}

//查询学生信息
void enquiry()
{
        int i,f;
        char s[15];
        printf("请输入要查询的学号:\n");
        scanf("%s",&s);
        for(i=0;i<n;i++)
        {
                if(strcmp(stu[i].stunum,s)==0)
                {
                        FILE *fp;
                if((fp=fopen("d:\\student.txt","w"))==NULL)
                {        
                            printf("File open error!\n");
                        exit(0);
                }
                fprintf(fp,"学号:%s  姓名:%s  电话:%s  E-mail:%s",stu[i].stunum,stu[i].name,stu[i].phnum,stu[i].email);
                if(fclose(fp))
                {        
                            printf("Can not close the file!\n");
                        exit(0);
                }
                }
        }
        printf("是否继续查询(是按1,否按0)");
        scanf("%d",&f);
        if(f==0)
        {
                menu();
        }
        else if(f==1)
        {
            enquiry();
        }
        system("pause");
       
}
最佳答案
2021-1-22 11:53:05
呃呃,你的课题这么难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-21 15:03:03 | 显示全部楼层
没仔细看,就挑了个browse函数看了下,你定义的n为全局变量,只有执行特定的操作后他才会改变,否则每次运行程序后n都为零,此时我如果要浏览学生信息的话,browse函数里的for循环永远都没法执行,而且个人觉得应该是每次运行程序后先将文件的内容取出存到一个数组后再进行一系列的操作(没仔细看你的思路),你可以参考下这个C语言学生成绩管理系统
https://fishc.com.cn/thread-188205-1-1.html
(出处: 鱼C论坛)
不过这个程序使用链表写的(个人建议这种需要频繁插入删除的程序用链表来写,不然有些操作太麻烦而且费时间)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 11:53:05 | 显示全部楼层    本楼为最佳答案   
呃呃,你的课题这么难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 10:48:27 | 显示全部楼层
你没有给struct array 分配空间。。。
你需要用malloc去给他分配空间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 15:34:00 | 显示全部楼层
一世轻尘 发表于 2021-1-21 15:03
没仔细看,就挑了个browse函数看了下,你定义的n为全局变量,只有执行特定的操作后他才会改变,否则每次运 ...

对不起,本来像设你为最佳答案的,结果按错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 08:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表