管理文件
来源:互联网 发布:csp绘画软件模型 编辑:程序博客网 时间:2024/06/04 18:21
要求:创建一个新文件,文件内容为本班所有同学的学号、姓名、操作系统课程成绩,要求采用有格式的存储方式;文件建立后,能对文件进行插入、删除、查找等操作。
- #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;
- FILEFILE *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)
- {
- FILEFILE *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,charchar *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;
- }
0 0
- 文件管理
- 文件管理....
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 文件管理
- 矩阵乘法总结
- Sqlite的使用详解
- java数组问题(一)
- PAT B1020
- 【51nod1086】【背包问题 V2】【动态规划】【二进制分组】
- 管理文件
- 相似图片搜索的原理
- C/C++的对象模型
- 本地计算机用plsql访问虚拟机中的oracle数据库
- noip2016 游记
- PAT B1021
- 使用stunnel双向证书认证加密samba的数据传输
- 1084. Broken Keyboard (20)解题报告
- Two Sum