鱼C论坛

 找回密码
 立即注册
查看: 1447|回复: 5

学生信息管理系统文件读写问题

[复制链接]
发表于 2019-3-5 14:21:59 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wuliangtdi 于 2019-3-5 23:03 编辑
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define N 100
int n=0;
int color(int c)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
    return 0;
}
//*登入界面模块*//
void Login()
{
        int i=0;
        char Administrator[] = {"admin"};  //*管理员账号*//
        char password[] = {"admin"};      //*管理员密码*//
        char a[20]={0};                  //*用户自己输入的账号*//
        char b[20]={0};                 //*用户自己输入的密码*//
        color(3);
        for(i=0;i<3;i++)
        {
        printf("请输入管理员账号:\n");
        scanf("%s",a);
        printf("请输入管理员密码:\n");
        scanf("%s",b);
        if(!strcmp(Administrator,a)&&!strcmp(password,b))
        {
                break;
        }
        else
        {
                i++;
                printf("您输入的账号或密码有误请重新输入,您还有%d次机会输入:\n",3-i);
        }
        if(i==3)
        {
                printf("退出系统\n");
        }
        }
        system("cls");
}
//*开始菜单*//
void menu()
{
        color(12);
        printf("\n\n\n\n\n");
        printf("\t\t|-------------------------开始菜单------------------------|\n");
        printf("\t\t|\t\t1.输入学生信息                            |\n");
        printf("\t\t|\t\t2.查询学生信息                            |\n");
        printf("\t\t|\t\t3.显示学生信息                            |\n");
        printf("\t\t|\t\t3.删除学生信息                            |\n");
        printf("\t\t|\t\t4.修改学生信息                            |\n");
        printf("\t\t|\t\t5.插入学生信息                            |\n");
        printf("\t\t|\t\t6.学生的总人数                            |\n");
        printf("\t\t|\t\t0.退出系统                                |\n");
        printf("\t\t|---------------------------------------------------------|\n");
}

//*学生信息结构体*//
struct Student
{
        char name[16];               //学生姓名*//
        char sex[4];                //*学生性别// 
        char number[20];               //*学生学号*//
        int  age;                 //*学生年龄*//
        char phone[15];              //*学生电话*//
        char id[20];                //*学生身份证*//
        char mail[25];         //*学生的邮箱*//
        char address[200];    //*学生的家庭住址*//
    char born[20];       //*学生出生年月*// 
}stu[N];
//*学生读入信息*//
void read()
{
        int i=0;                                        //*选择是否继续输入*// 
        FILE *fp;
        if((fp=fopen("D:\\date.txt","r"))==NULL)
        {
                printf("对不起,文件不存在。请在D盘下新建一个名叫date.txt文件");
                system("pause");
        system("cls");
                return;
        }
        fscanf(fp,"%d\n",&n);
        while(i < n)
        {
                fscanf(fp,"%s\n",stu[i].name);
                fscanf(fp,"%s\n",stu[i].sex);
                fscanf(fp,"%s\n",stu[i].number);
                fscanf(fp,"%s\n",stu[i].phone);
                fscanf(fp,"%d\n",&stu[i].age);
                fscanf(fp,"%s\n",stu[i].id);
                fscanf(fp,"%s\n",stu[i].mail);
                fscanf(fp,"%s\n",stu[i].address);
                fscanf(fp,"%s",stu[i].born);
                i++;
        }
        fclose(fp);
}
//*学生信息写入*// 
void  write()
{
        FILE *fp;
        int i=0;
        if((fp=fopen("D:\\date.txt","w"))==NULL)
        {
                printf("无法打开文件\n");
                return;
        } 
        fprintf(fp,"%d",n);
        while(i<n)
        {
        fprintf(fp,"%s\n",stu[i].name);
        fprintf(fp,"%s\n",stu[i].sex);
        fprintf(fp,"%s\n",stu[i].number);
        fprintf(fp,"%s\n",stu[i].phone);
        fprintf(fp,"%d\n",stu[i].age);
        fprintf(fp,"%s\n",stu[i].id);
        fprintf(fp,"%s\n",stu[i].address);
        fprintf(fp,"%s\n",stu[i].born);
        i++;
        }
        fclose(fp);        
}
void input()
{
        int i;
        int flag;                                    //*标记学号是否已存在*//
        char c;                                     //*指令Y?N*//
    read();
        color(9);
        do
    {
        flag = 0;
        printf("\t\t请输入学生的学号:                              \n\t\t");
        scanf("%s",stu[n].number);
                printf("hello world");
        for(i = 0 ; i < n ; i ++)
        {   if(strcmp(stu[i].number,stu[n].number) == 0)
            {
                flag = 1;
                break;
            }
        } 
            if(flag)
                {
            printf("该编号已存在!\n\n");
                        printf("\t\t是否继续输入?(Y/N): ");
            scanf("%*c%c",&c);
                        if(c == 'N' || c == 'n') break;
            continue;
                }
        printf("\t\t请输入第%d名学生姓名:\n\t\t",i+1);
                scanf("%s",stu[i].name);
                printf("\t\t请输入第%d名学生性别:\n\t\t",i+1);
                scanf("%s",stu[i].sex);
                printf("\t\t请输入第%d名学生电话:\n\t\t",i+1);
                scanf("%s",stu[i].phone);
                printf("\t\t请输入第%d名学生年龄:\n\t\t",i+1);
                scanf("%d",&stu[i].age);
                printf("\t\t请输入第%d名学生身份证:\n",i+1);
                scanf("%s",stu[i].id);
                printf("\t\t请输入第%d名学生邮箱:\n\t\t",i+1);
                scanf("%s",stu[i].mail);
                printf("\t\t请输入第%d名学生家庭地址:\n\t\t",i+1);
                scanf("%s",stu[i].address);
                printf("\t\t请输入第%d名学生出生年月日:\n\t\t",i+1);
                scanf("%s",stu[i].born);
                printf("\t\t是否继续输入?(Y/N): ");
        scanf("%*c%c",&c);
                n++;
        }while( c != 'N' && c != 'n');                                        //输入数据前先将文件中原有的数据读入*// 
        write();
    printf("\n\n数据已保存!\n\n");
}
//显示模块
void output_inf(int Id)
{
   printf("\t\t    学号: %s\n",stu[Id].number);
   printf("\t\t    姓名: %s\n",stu[Id].name);
   printf("\t\t    性别: %s\n",stu[Id].sex);
   printf("\t\t    出生年月: %s\n",stu[Id].born);
   printf("\t\t    电话: %s\n",stu[Id].phone);
   printf("\t\t    年龄: %d\n",stu[Id].age);
   printf("\t\t    身份证: %s\n",stu[Id].id);
   printf("\t\t    家庭住址: %s\n",stu[Id].address);
   printf("\t\t    邮箱: %s\n",stu[Id].mail);
   printf("\n\n\n");
}
void show()                    //*显示所有学生信息*// 
{
        int i;
    read();                  //*读取数据*// 
        if(n == 0) 
        printf("无记录!\n\n");
        else
                for(i = 0 ; i < n ; i ++)
                {
                        output_inf(i);
                }
}
//*查询信息*//
void que()//查询信息
{
        char num;
        int flag,i;
        char q_number[20] ;//查询学号
        char q_name[20] ;//查询姓名
        char q_id[20] ; //查询身份证
        char c;//指令Y?N
    read();//打开程序后,要查询以前的数据,要先读入
        color(9);
    while(1)
    {
        system("cls");
        printf("\t\t******************查询********************\n");
        printf("\t\t******************************************\n");
        printf("\t\t*             1.按学号查询               *\n");
        printf("\t\t******************************************\n");
        printf("\t\t*             2.按姓名查询               *\n");
        printf("\t\t******************************************\n");
        printf("\t\t*             3.按身份查询               *\n");
        printf("\t\t******************************************\n");
        printf("\t\t*       输入其他任意键退出本模块         *\n");
        printf("\t\t******************************************\n");
        printf("\t\t请输入指令(1-3):");
        scanf("%*c%c",&num);
        if(num < '1' || num > '3')
        {
            printf("错误指令!\n\n");
            system("pause");
            break;
        }
        system("cls");
        flag = 0;//用来标记学生信息是否存在
        if(num == '1')//按学号查询
        {
            printf("\t\t请输入您要查询学生的学号:");
            scanf("%s",q_id);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(stu[i].number,q_number) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                    break;
                }
            }
        }
        else if(num == '2')//按姓名查询
        {
            printf("\t\t请输入您要查询员工的姓名:");
            scanf("%s",q_name);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(stu[i].name,q_name) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        else if(num == '3')//按身份证查询
        {
            printf("\t\t请输入您要查询学生的身份证:");

            scanf("%s",q_id);
            for(i = 0 ; i < n ;i ++)
            {
                if( strcmp(stu[i].id,q_id) == 0)
                {
                    output_inf(i);
                    flag = 1;//标记
                }
            }
        }
        if(!flag)//判断是否有该学生信息
        {
            printf("\n\n无该学生信息!\n\n");
        }
        printf("\n\n是否继续查询(Y/N):");
        scanf("%*c%c",&c);
        if(c == 'N' || c == 'n') 
                break;
    }
}

int main()
{
        int i;
        Login();
        menu();
        printf("请输入0~7继续操作:\n");
        scanf("%d",&i);
                switch(i)
        {
                        case 1: input();break;
                        case 2: que();break;
                        case 3: show();break;
                        case 4: printf("删除数据\n");break;
                        case 5: printf("数据排序数据\n");break;
                        case 6: printf("保存期数据\n");break;
                        default: printf("输入无效\n");
        }
}   
第一次输入学生的信息时可以直接运行并保存,但是重新输入学生信息或者查询显示学生信息会直接停止工作,我感觉是文件读写那里有问题,找了两个多小时都找不到问题,希望大神能够指点一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-5 15:25:33 | 显示全部楼层
额,请问你是哪里有问题,我运行你的程序,没有出现你所说的问题,当然bug还是很多的,我之前也写过一个类似的,如果需要,我可以把我的程序给你参考一下
建议你加一个返回菜单的函数,这样就不用每次查看就得重新运行一下程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 15:27:07 | 显示全部楼层
一般文件输入输出流出现错误的话,基本上是一下几点
1、权限不够
2、要删除的程序正打开着,运行着(流没关)
3、磁盘出现错误
4、是共享文件,被远程机器打开着
之前写程序的时候,第2点是犯错误最多的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-5 16:27:08 From FishC Mobile | 显示全部楼层
暗pluto 发表于 2019-3-5 15:25
额,请问你是哪里有问题,我运行你的程序,没有出现你所说的问题,当然bug还是很多的,我之前也写过一个类 ...

真的吗?如果能发的话就真的太好了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 17:13:58 | 显示全部楼层
在这里,程序还不算完善,仅供参考

main.zip

4.35 KB, 下载次数: 24

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-3 16:16:02 | 显示全部楼层

回帖奖励 +20 鱼币

复制试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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