管理文件

来源:互联网 发布:csp绘画软件模型 编辑:程序博客网 时间:2024/06/04 18:21


要求:创建一个新文件,文件内容为本班所有同学的学号、姓名、操作系统课程成绩,要求采用有格式的存储方式;文件建立后,能对文件进行插入、删除、查找等操作。


[objc] view plain copy print?在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #include <stdlib.h>  
  4. //#include <unistd.h>  
  5. int NUM = 0;  
  6.   
  7. struct student{  
  8.     char num[20];//   学号   
  9.     char nam[20];//   姓名   
  10.     int score;   //   成绩   
  11.     struct student * next;  
  12. };  
  13.   
  14. typedef struct student Stu;  
  15. typedef Stu * STU;  
  16.   
  17. void SaveConf(STU head);  
  18. void Menu(STU head);  
  19. void LoadConf(STU head);  
  20. void Create(STU head);  
  21.   
  22. /*头节点初始化*/   
  23. void Init(STU *head)  
  24. {  
  25.     (*head) = (STU)malloc(sizeof(Stu));  
  26.     (*head)->next = NULL;  
  27. }  
  28.   
  29. /*从文件加载信息至链表*/   
  30. void LoadConf(STU head)  
  31. {  
  32.     int i = 1;  
  33.   
  34.     FILEFILE *fp;  
  35.     STU newstu;  
  36.     STU p= head;  
  37.     fp = fopen("text.txt","r+");  
  38.     if(fp == NULL)  
  39.     {  
  40.         printf("文件不存在!\n");  
  41.         printf("已为您创建文件!\n");  
  42.         fp = fopen("text.txt","a+");  
  43.     }  
  44.     while(i > 0)  
  45.     {  
  46.         newstu = (STU)malloc(sizeof(Stu));  
  47.         i = fscanf(fp,"%s %s %d\n",newstu->num,newstu->nam,&newstu->score);  
  48.   
  49.         if(i == -1)  
  50.         {  
  51.             free(newstu);  
  52.             newstu = NULL;  
  53.             break;  
  54.         }  
  55.           
  56.             p = head;  
  57.             while(p->next != NULL)  
  58.             {  
  59.                 p = p->next;  
  60.             }  
  61.             p->next = newstu;  
  62.             newstu->next = NULL;       
  63.         //ch = fgetc(fp);  
  64.         //if(ch == 'EOF')  
  65. //      {  
  66. //          break;  
  67. //      }     
  68.           
  69.     }  
  70.     p = NULL;  
  71.     fclose(fp);  
  72. }  
  73.    
  74. /*显示*/  
  75. void Display(STU head)  
  76. {  
  77.     STU p = head;  
  78.     printf("学号     姓名    操作系统成绩\n");  
  79.     while(p->next != NULL)  
  80.     {  
  81.         printf("%s %s %d\n",p->next->num,p->next->nam,p->next->score);  
  82.         p = p->next;  
  83.     }  
  84.       
  85.     getchar();  
  86.     getchar();  
  87.     Menu(head);   
  88. }  
  89.   
  90. /*插入信息*/  
  91. void Create(STU head)  
  92. {  
  93.     STU newstu;  
  94.     STU p = head;  
  95.     //fp = fopen("text.txt","a+");  
  96. //  if(fp == NULL)  
  97. //  {  
  98. //      printf("打开文件失败!\n");  
  99. //      return;  
  100. //  }  
  101.     newstu = (STU)malloc(sizeof(Stu));  
  102.       
  103.     printf("请输入学号:");  
  104.     scanf("%s",newstu->num);  
  105.       
  106.     printf("请输入姓名:");  
  107.     scanf("%s",newstu->nam);  
  108.       
  109.     printf("请输入成绩:");  
  110.     scanf("%d",&newstu->score);  
  111.       
  112.     while(p->next != NULL)  
  113.     {  
  114.         p = p->next;  
  115.     }  
  116.     p->next = newstu;  
  117.     newstu->next = NULL;  
  118.   
  119. //  fprintf(fp,"%s %s %d\n",newstu->num,newstu->nam,newstu->score);//写入数据到文件中 '  
  120. //  
  121. //    fclose(fp);  
  122.       
  123.     char flag;  
  124.     getchar();  
  125.     printf("是否继续插入信息:");  
  126.     scanf("%c",&flag);  
  127.     if('y' == flag)  
  128.     {  
  129.         Create(head);  
  130.     }  
  131.     else  
  132.     {  
  133.         Menu(head);  
  134.     }  
  135. }  
  136. /*保存信息到文件*/  
  137. void SaveConf(STU head)  
  138. {  
  139.     FILEFILE *fp;  
  140.     STU p = head->next;  
  141.     fp = fopen("text.txt","w");  
  142.     if(fp == NULL)  
  143.     {  
  144.         printf("打开文件失败!\n");  
  145.         return;  
  146.     }  
  147.     while(p != NULL)  
  148.     {  
  149.         fprintf(fp,"%s %s %d\n",p->num,p->nam,p->score);//写入数据到文件中  
  150.         p = p->next;  
  151.     }  
  152.      
  153.     fclose(fp);  
  154. }  
  155.   
  156. /*删除*/   
  157. STU search(STU head,charchar *s)  
  158. {  
  159.     STU p;  
  160.     p = head->next;  
  161.     while(p != NULL)  
  162.     {  
  163.         if(strcmp(s,p->num) == 0)  
  164.         {  
  165.             return p;  
  166.         }  
  167.         p = p->next;  
  168.     }  
  169.     return p;     
  170. }  
  171. void Delete(STU head)  
  172. {  
  173.     STU p;  
  174.     STU q = head;  
  175.   
  176.     char flag;  
  177.     char flag1;  
  178.     char n[20];  
  179.     printf("请输入需要删除的学号: ");  
  180.     scanf("%s",&n);  
  181.     p = search(head,n);  
  182.     if(p == NULL)  
  183.     {  
  184.         getchar();  
  185.         printf("你输入的学号有误,没有这个人!\n");  
  186.         printf("重新输入,还是返回!(y / n): ");  
  187.         scanf("%c",&flag);  
  188.         if(flag == 'y')  
  189.         {  
  190.             Delete(head);  
  191.         }  
  192.         else  
  193.         {  
  194.             Menu(head);  
  195.               
  196.         }  
  197.     }  
  198.     else  
  199.     {  
  200.         getchar();  
  201.         printf("%s %s %d\n",p->num,p->nam,p->score);  
  202.         printf("确定要删除吗?");  
  203.         scanf("%c",&flag1);  
  204.         if(flag1 == 'y')  
  205.         {  
  206.             q = head;  
  207.             while(q->next != p)  
  208.             {  
  209.                 q = q->next;  
  210.             }  
  211.             q->next = p->next;  
  212.             p->next = NULL;  
  213.             free(p);  
  214.             p = NULL;  
  215.               
  216.             printf("delete success!\n");  
  217.         }     
  218.     }  
  219.       
  220.     Menu(head);  
  221. }  
  222.   
  223. /*查找*/  
  224. void Constant(STU head)  
  225. {  
  226.     STU p = head;  
  227.     char name[20];  
  228.     printf("请输入需要查找人的姓名:");  
  229.     scanf("%s",name);  
  230.     while(p != NULL)  
  231.     {  
  232.           
  233.         if(strcmp(name,p->nam) == 0)  
  234.         {  
  235.             printf("找到的人有:\n");  
  236.             printf("%s %s %d\n",p->num,p->nam,p->score);  
  237.         }  
  238.         p = p->next;  
  239.     }  
  240.     getchar();  
  241.     getchar();  
  242.     Menu(head);  
  243. }  
  244.   
  245. void Menu(STU head)  
  246. {  
  247.       
  248.     int choice = 0;  
  249.     printf("\t********文件管理******\t\n");  
  250.     printf("\t******1.插入信息******\t\n");  
  251.     printf("\t******2.删除信息******\t\n");  
  252.     printf("\t******3.查找**********\t\n");  
  253.     printf("\t******4.显示信息******\t\n");  
  254.     printf("\t******0.退出**********\t\n");  
  255.     printf("\n");  
  256.     printf("please input your choice: ");  
  257.     scanf("%d",&choice);  
  258.       
  259.     switch(choice)  
  260.     {  
  261.         case 1:{  
  262.             Create(head);  
  263.               
  264.             break;  
  265.         }  
  266.         case 2:{  
  267.             Delete(head);  
  268.             break;  
  269.         }  
  270.         case 3:{  
  271.             Constant(head);  
  272.             break;  
  273.         }  
  274.         case 4:{  
  275.             Display(head);  
  276.             break;  
  277.         }  
  278.           
  279.         case 0:{  
  280.             SaveConf(head);  
  281.             break;  
  282.         }  
  283.           
  284.         default:{  
  285.             printf("输入有误,请重新输入!\n");  
  286.             Menu(head);  
  287.             break;  
  288.         }  
  289.     }   
  290. }  
  291.   
  292. int main()  
  293. {  
  294.     STU head;  
  295.     Init(&head);  
  296.     LoadConf(head);  
  297.     Menu(head);  
  298.       
  299.     return 0;  
  300. }  

0 0