鱼C论坛

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

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

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

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

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

x
本帖最后由 wuliangtdi 于 2019-3-5 23:03 编辑
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<windows.h>
  5. #define N 100
  6. int n=0;
  7. int color(int c)
  8. {
  9.     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
  10.     return 0;
  11. }
  12. //*登入界面模块*//
  13. void Login()
  14. {
  15.         int i=0;
  16.         char Administrator[] = {"admin"};  //*管理员账号*//
  17.         char password[] = {"admin"};      //*管理员密码*//
  18.         char a[20]={0};                  //*用户自己输入的账号*//
  19.         char b[20]={0};                 //*用户自己输入的密码*//
  20.         color(3);
  21.         for(i=0;i<3;i++)
  22.         {
  23.         printf("请输入管理员账号:\n");
  24.         scanf("%s",a);
  25.         printf("请输入管理员密码:\n");
  26.         scanf("%s",b);
  27.         if(!strcmp(Administrator,a)&&!strcmp(password,b))
  28.         {
  29.                 break;
  30.         }
  31.         else
  32.         {
  33.                 i++;
  34.                 printf("您输入的账号或密码有误请重新输入,您还有%d次机会输入:\n",3-i);
  35.         }
  36.         if(i==3)
  37.         {
  38.                 printf("退出系统\n");
  39.         }
  40.         }
  41.         system("cls");
  42. }
  43. //*开始菜单*//
  44. void menu()
  45. {
  46.         color(12);
  47.         printf("\n\n\n\n\n");
  48.         printf("\t\t|-------------------------开始菜单------------------------|\n");
  49.         printf("\t\t|\t\t1.输入学生信息                            |\n");
  50.         printf("\t\t|\t\t2.查询学生信息                            |\n");
  51.         printf("\t\t|\t\t3.显示学生信息                            |\n");
  52.         printf("\t\t|\t\t3.删除学生信息                            |\n");
  53.         printf("\t\t|\t\t4.修改学生信息                            |\n");
  54.         printf("\t\t|\t\t5.插入学生信息                            |\n");
  55.         printf("\t\t|\t\t6.学生的总人数                            |\n");
  56.         printf("\t\t|\t\t0.退出系统                                |\n");
  57.         printf("\t\t|---------------------------------------------------------|\n");
  58. }

  59. //*学生信息结构体*//
  60. struct Student
  61. {
  62.         char name[16];               //学生姓名*//
  63.         char sex[4];                //*学生性别//
  64.         char number[20];               //*学生学号*//
  65.         int  age;                 //*学生年龄*//
  66.         char phone[15];              //*学生电话*//
  67.         char id[20];                //*学生身份证*//
  68.         char mail[25];         //*学生的邮箱*//
  69.         char address[200];    //*学生的家庭住址*//
  70.     char born[20];       //*学生出生年月*//
  71. }stu[N];
  72. //*学生读入信息*//
  73. void read()
  74. {
  75.         int i=0;                                        //*选择是否继续输入*//
  76.         FILE *fp;
  77.         if((fp=fopen("D:\\date.txt","r"))==NULL)
  78.         {
  79.                 printf("对不起,文件不存在。请在D盘下新建一个名叫date.txt文件");
  80.                 system("pause");
  81.         system("cls");
  82.                 return;
  83.         }
  84.         fscanf(fp,"%d\n",&n);
  85.         while(i < n)
  86.         {
  87.                 fscanf(fp,"%s\n",stu[i].name);
  88.                 fscanf(fp,"%s\n",stu[i].sex);
  89.                 fscanf(fp,"%s\n",stu[i].number);
  90.                 fscanf(fp,"%s\n",stu[i].phone);
  91.                 fscanf(fp,"%d\n",&stu[i].age);
  92.                 fscanf(fp,"%s\n",stu[i].id);
  93.                 fscanf(fp,"%s\n",stu[i].mail);
  94.                 fscanf(fp,"%s\n",stu[i].address);
  95.                 fscanf(fp,"%s",stu[i].born);
  96.                 i++;
  97.         }
  98.         fclose(fp);
  99. }
  100. //*学生信息写入*//
  101. void  write()
  102. {
  103.         FILE *fp;
  104.         int i=0;
  105.         if((fp=fopen("D:\\date.txt","w"))==NULL)
  106.         {
  107.                 printf("无法打开文件\n");
  108.                 return;
  109.         }
  110.         fprintf(fp,"%d",n);
  111.         while(i<n)
  112.         {
  113.         fprintf(fp,"%s\n",stu[i].name);
  114.         fprintf(fp,"%s\n",stu[i].sex);
  115.         fprintf(fp,"%s\n",stu[i].number);
  116.         fprintf(fp,"%s\n",stu[i].phone);
  117.         fprintf(fp,"%d\n",stu[i].age);
  118.         fprintf(fp,"%s\n",stu[i].id);
  119.         fprintf(fp,"%s\n",stu[i].address);
  120.         fprintf(fp,"%s\n",stu[i].born);
  121.         i++;
  122.         }
  123.         fclose(fp);       
  124. }
  125. void input()
  126. {
  127.         int i;
  128.         int flag;                                    //*标记学号是否已存在*//
  129.         char c;                                     //*指令Y?N*//
  130.     read();
  131.         color(9);
  132.         do
  133.     {
  134.         flag = 0;
  135.         printf("\t\t请输入学生的学号:                              \n\t\t");
  136.         scanf("%s",stu[n].number);
  137.                 printf("hello world");
  138.         for(i = 0 ; i < n ; i ++)
  139.         {   if(strcmp(stu[i].number,stu[n].number) == 0)
  140.             {
  141.                 flag = 1;
  142.                 break;
  143.             }
  144.         }
  145.             if(flag)
  146.                 {
  147.             printf("该编号已存在!\n\n");
  148.                         printf("\t\t是否继续输入?(Y/N): ");
  149.             scanf("%*c%c",&c);
  150.                         if(c == 'N' || c == 'n') break;
  151.             continue;
  152.                 }
  153.         printf("\t\t请输入第%d名学生姓名:\n\t\t",i+1);
  154.                 scanf("%s",stu[i].name);
  155.                 printf("\t\t请输入第%d名学生性别:\n\t\t",i+1);
  156.                 scanf("%s",stu[i].sex);
  157.                 printf("\t\t请输入第%d名学生电话:\n\t\t",i+1);
  158.                 scanf("%s",stu[i].phone);
  159.                 printf("\t\t请输入第%d名学生年龄:\n\t\t",i+1);
  160.                 scanf("%d",&stu[i].age);
  161.                 printf("\t\t请输入第%d名学生身份证:\n",i+1);
  162.                 scanf("%s",stu[i].id);
  163.                 printf("\t\t请输入第%d名学生邮箱:\n\t\t",i+1);
  164.                 scanf("%s",stu[i].mail);
  165.                 printf("\t\t请输入第%d名学生家庭地址:\n\t\t",i+1);
  166.                 scanf("%s",stu[i].address);
  167.                 printf("\t\t请输入第%d名学生出生年月日:\n\t\t",i+1);
  168.                 scanf("%s",stu[i].born);
  169.                 printf("\t\t是否继续输入?(Y/N): ");
  170.         scanf("%*c%c",&c);
  171.                 n++;
  172.         }while( c != 'N' && c != 'n');                                        //输入数据前先将文件中原有的数据读入*//
  173.         write();
  174.     printf("\n\n数据已保存!\n\n");
  175. }
  176. //显示模块
  177. void output_inf(int Id)
  178. {
  179.    printf("\t\t    学号: %s\n",stu[Id].number);
  180.    printf("\t\t    姓名: %s\n",stu[Id].name);
  181.    printf("\t\t    性别: %s\n",stu[Id].sex);
  182.    printf("\t\t    出生年月: %s\n",stu[Id].born);
  183.    printf("\t\t    电话: %s\n",stu[Id].phone);
  184.    printf("\t\t    年龄: %d\n",stu[Id].age);
  185.    printf("\t\t    身份证: %s\n",stu[Id].id);
  186.    printf("\t\t    家庭住址: %s\n",stu[Id].address);
  187.    printf("\t\t    邮箱: %s\n",stu[Id].mail);
  188.    printf("\n\n\n");
  189. }
  190. void show()                    //*显示所有学生信息*//
  191. {
  192.         int i;
  193.     read();                  //*读取数据*//
  194.         if(n == 0)
  195.         printf("无记录!\n\n");
  196.         else
  197.                 for(i = 0 ; i < n ; i ++)
  198.                 {
  199.                         output_inf(i);
  200.                 }
  201. }
  202. //*查询信息*//
  203. void que()//查询信息
  204. {
  205.         char num;
  206.         int flag,i;
  207.         char q_number[20] ;//查询学号
  208.         char q_name[20] ;//查询姓名
  209.         char q_id[20] ; //查询身份证
  210.         char c;//指令Y?N
  211.     read();//打开程序后,要查询以前的数据,要先读入
  212.         color(9);
  213.     while(1)
  214.     {
  215.         system("cls");
  216.         printf("\t\t******************查询********************\n");
  217.         printf("\t\t******************************************\n");
  218.         printf("\t\t*             1.按学号查询               *\n");
  219.         printf("\t\t******************************************\n");
  220.         printf("\t\t*             2.按姓名查询               *\n");
  221.         printf("\t\t******************************************\n");
  222.         printf("\t\t*             3.按身份查询               *\n");
  223.         printf("\t\t******************************************\n");
  224.         printf("\t\t*       输入其他任意键退出本模块         *\n");
  225.         printf("\t\t******************************************\n");
  226.         printf("\t\t请输入指令(1-3):");
  227.         scanf("%*c%c",&num);
  228.         if(num < '1' || num > '3')
  229.         {
  230.             printf("错误指令!\n\n");
  231.             system("pause");
  232.             break;
  233.         }
  234.         system("cls");
  235.         flag = 0;//用来标记学生信息是否存在
  236.         if(num == '1')//按学号查询
  237.         {
  238.             printf("\t\t请输入您要查询学生的学号:");
  239.             scanf("%s",q_id);
  240.             for(i = 0 ; i < n ;i ++)
  241.             {
  242.                 if( strcmp(stu[i].number,q_number) == 0)
  243.                 {
  244.                     output_inf(i);
  245.                     flag = 1;//标记
  246.                     break;
  247.                 }
  248.             }
  249.         }
  250.         else if(num == '2')//按姓名查询
  251.         {
  252.             printf("\t\t请输入您要查询员工的姓名:");
  253.             scanf("%s",q_name);
  254.             for(i = 0 ; i < n ;i ++)
  255.             {
  256.                 if( strcmp(stu[i].name,q_name) == 0)
  257.                 {
  258.                     output_inf(i);
  259.                     flag = 1;//标记
  260.                 }
  261.             }
  262.         }
  263.         else if(num == '3')//按身份证查询
  264.         {
  265.             printf("\t\t请输入您要查询学生的身份证:");

  266.             scanf("%s",q_id);
  267.             for(i = 0 ; i < n ;i ++)
  268.             {
  269.                 if( strcmp(stu[i].id,q_id) == 0)
  270.                 {
  271.                     output_inf(i);
  272.                     flag = 1;//标记
  273.                 }
  274.             }
  275.         }
  276.         if(!flag)//判断是否有该学生信息
  277.         {
  278.             printf("\n\n无该学生信息!\n\n");
  279.         }
  280.         printf("\n\n是否继续查询(Y/N):");
  281.         scanf("%*c%c",&c);
  282.         if(c == 'N' || c == 'n')
  283.                 break;
  284.     }
  285. }

  286. int main()
  287. {
  288.         int i;
  289.         Login();
  290.         menu();
  291.         printf("请输入0~7继续操作:\n");
  292.         scanf("%d",&i);
  293.                 switch(i)
  294.         {
  295.                         case 1: input();break;
  296.                         case 2: que();break;
  297.                         case 3: show();break;
  298.                         case 4: printf("删除数据\n");break;
  299.                         case 5: printf("数据排序数据\n");break;
  300.                         case 6: printf("保存期数据\n");break;
  301.                         default: printf("输入无效\n");
  302.         }
  303. }   
复制代码

第一次输入学生的信息时可以直接运行并保存,但是重新输入学生信息或者查询显示学生信息会直接停止工作,我感觉是文件读写那里有问题,找了两个多小时都找不到问题,希望大神能够指点一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

真的吗?如果能发的话就真的太好了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

main.zip

4.35 KB, 下载次数: 24

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +20 鱼币

复制试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-11 18:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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