文件管理

    xiaoxiao2021-12-14  46

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

    #include <stdio.h> #include <string.h> #include <stdlib.h> //#include <unistd.h> int NUM = 0; struct student{ char num[20];// 学号 char nam[20];// 姓名 int score; // 成绩 struct student * next; }; typedef struct student Stu; typedef Stu * STU; void SaveConf(STU head); void Menu(STU head); void LoadConf(STU head); void Create(STU head); /*头节点初始化*/ void Init(STU *head) { (*head) = (STU)malloc(sizeof(Stu)); (*head)->next = NULL; } /*从文件加载信息至链表*/ void LoadConf(STU head) { int i = 1; FILE *fp; STU newstu; STU p= head; fp = fopen("text.txt","r+"); if(fp == NULL) { printf("文件不存在!\n"); printf("已为您创建文件!\n"); fp = fopen("text.txt","a+"); } while(i > 0) { newstu = (STU)malloc(sizeof(Stu)); i = fscanf(fp,"%s %s %d\n",newstu->num,newstu->nam,&newstu->score); if(i == -1) { free(newstu); newstu = NULL; break; } p = head; while(p->next != NULL) { p = p->next; } p->next = newstu; newstu->next = NULL; //ch = fgetc(fp); //if(ch == 'EOF') // { // break; // } } p = NULL; fclose(fp); } /*显示*/ void Display(STU head) { STU p = head; printf("学号 姓名 操作系统成绩\n"); while(p->next != NULL) { printf("%s %s %d\n",p->next->num,p->next->nam,p->next->score); p = p->next; } getchar(); getchar(); Menu(head); } /*插入信息*/ void Create(STU head) { STU newstu; STU p = head; //fp = fopen("text.txt","a+"); // if(fp == NULL) // { // printf("打开文件失败!\n"); // return; // } newstu = (STU)malloc(sizeof(Stu)); printf("请输入学号:"); scanf("%s",newstu->num); printf("请输入姓名:"); scanf("%s",newstu->nam); printf("请输入成绩:"); scanf("%d",&newstu->score); while(p->next != NULL) { p = p->next; } p->next = newstu; newstu->next = NULL; // fprintf(fp,"%s %s %d\n",newstu->num,newstu->nam,newstu->score);//写入数据到文件中 ' // // fclose(fp); char flag; getchar(); printf("是否继续插入信息:"); scanf("%c",&flag); if('y' == flag) { Create(head); } else { Menu(head); } } /*保存信息到文件*/ void SaveConf(STU head) { FILE *fp; STU p = head->next; fp = fopen("text.txt","w"); if(fp == NULL) { printf("打开文件失败!\n"); return; } while(p != NULL) { fprintf(fp,"%s %s %d\n",p->num,p->nam,p->score);//写入数据到文件中 p = p->next; } fclose(fp); } /*删除*/ STU search(STU head,char *s) { STU p; p = head->next; while(p != NULL) { if(strcmp(s,p->num) == 0) { return p; } p = p->next; } return p; } void Delete(STU head) { STU p; STU q = head; char flag; char flag1; char n[20]; printf("请输入需要删除的学号: "); scanf("%s",&n); p = search(head,n); if(p == NULL) { getchar(); printf("你输入的学号有误,没有这个人!\n"); printf("重新输入,还是返回!(y / n): "); scanf("%c",&flag); if(flag == 'y') { Delete(head); } else { Menu(head); } } else { getchar(); printf("%s %s %d\n",p->num,p->nam,p->score); printf("确定要删除吗?"); scanf("%c",&flag1); if(flag1 == 'y') { q = head; while(q->next != p) { q = q->next; } q->next = p->next; p->next = NULL; free(p); p = NULL; printf("delete success!\n"); } } Menu(head); } /*查找*/ void Constant(STU head) { STU p = head; char name[20]; printf("请输入需要查找人的姓名:"); scanf("%s",name); while(p != NULL) { if(strcmp(name,p->nam) == 0) { printf("找到的人有:\n"); printf("%s %s %d\n",p->num,p->nam,p->score); } p = p->next; } getchar(); getchar(); Menu(head); } void Menu(STU head) { int choice = 0; printf("\t********文件管理******\t\n"); printf("\t******1.插入信息******\t\n"); printf("\t******2.删除信息******\t\n"); printf("\t******3.查找**********\t\n"); printf("\t******4.显示信息******\t\n"); printf("\t******0.退出**********\t\n"); printf("\n"); printf("please input your choice: "); scanf("%d",&choice); switch(choice) { case 1:{ Create(head); break; } case 2:{ Delete(head); break; } case 3:{ Constant(head); break; } case 4:{ Display(head); break; } case 0:{ SaveConf(head); break; } default:{ printf("输入有误,请重新输入!\n"); Menu(head); break; } } } int main() { STU head; Init(&head); LoadConf(head); Menu(head); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-964167.html

    最新回复(0)