文件管理
2016-12-02 14:59
183 查看
要求:创建一个新文件,文件内容为本班所有同学的学号、姓名、操作系统课程成绩,要求采用有格式的存储方式;文件建立后,能对文件进行插入、删除、查找等操作。
#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;
}
#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;
}
相关文章推荐
- 把asp程序封装成可执行文件(无需IIS web服务器)直接运行的管理系统
- 明日网全功能超级文件上传管理系统 V1.0 源码发布
- 远程服务器文件管理
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 关于双通输入法管理里面要导入的文件以及生成文件的格式说明
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 公司文件服务器管理,让用户快速找到需要的文件。
- WEB文件管理工具
- 收藏——在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 文件管理系统
- Web文件管理系统!免费使用版
- tomcat管理界面常用设置 -- 不解压war文件
- 网络小工具(管理共享文件) ShareView
- 一个管理最近使用过的文件的类
- Policy Tool — 策略文件创建和管理工具
- Linux/Unix中的SUID和SGID文件权限和在CVS项目管理中的应用
- Web文件管理系统!
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 最近写了一个小的管理软件,其中在LOGO里加入了视频,这里讨论一下文件的保密
- 修改用户控制权限管理自启动文件