#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define LENGTH sizeof(struct file)
#define MaxOpenFile 5 //最大打开文件数
#define MaxSaveFile 10 // 最大保存文件数
#define MaxUsernum 10 // 最大用户数
struct file
{
int num; //文件编号
char name[20];//文件名称
char infom[20];//文件内容
char state;//文件打开状态:O或C,O为open,C为close
int usernum;//文件使用者编号
struct file * next; //后续文件
};
struct file openfiles[MaxOpenFile]={
{0,"\0","\0",'\0',0,NULL},
{0,"\0","\0",'\0',0,NULL},
{0,"\0","\0",'\0',0,NULL},
{0,"\0","\0",'\0',0,NULL},
{0,"\0","\0",'\0',0,NULL}
};
int userLogin,filenum=0,filenum1=0,createnum=0;// 文件使用者编号、文件数目、 一次创建文件的个数、创建文件的次数
struct file *head,*move,*move0,*tail;
struct file *p1,*p2;
int main()
{
void menu(int x);
int login();
for(;;)
{
int x1=login();
if(x1==1){printf("\n欢迎你%d!登录成功\n",userLogin);break;}
else printf("用户名不存在!登录失败!!请重新打开程序");
}
int choose;
for(;;)
{
printf("\n**********************************************\n");
printf("\n请输入1-8:\n1=createFile\n2=deleteFile\n3=openFile\n4=closeFile\n5=readFile\n6=writeFile\n7=saveFile\n8=printFileOpen\n");
scanf("%d",&choose);
menu(choose);
}
return 0;
}
int login()
{
printf("\n**********************************************\n");
printf("\n请输入用户名1-10:\n");
scanf("%d",&userLogin);
printf("\n**********************************************\n");
if(userLogin>=1&&userLogin<=10)return 1;
else return 0;
}
void menu(int x)
{
void createFile();
void saveFile();
void printFileOpen();
void deleteFile(int x);
void closeFile(int x);
void openFile(int x);
void readFile(int x);
void writeFile(int x,char x1[],char x2[]);
printf("\n**********************************************\n");
if(x==1)
{
printf("你选择的操作是createFile\n");
createFile();
}
else if(x==2)
{
int temp;
printf("你选择的操作是deleteFile\n");
printf("请输入你要删除的文件编号:\n");
scanf("%d",&temp);
deleteFile(temp);
}
else if(x==3)
{
int temp;
printf("你选择的操作是openFile\n");
printf("请输入你要打开的文件编号:\n");
scanf("%d",&temp);
openFile(temp);
}
else if(x==4)
{
int temp;
printf("你选择的操作是closeFile\n");
printf("请输入你要关闭的文件编号:\n");
scanf("%d",&temp);
closeFile(temp);
}
else if(x==5)
{
int temp;
printf("你选择的操作是readFile\n");
printf("请输入你要读取的文件编号:\n");
scanf("%d",&temp);
readFile(temp);
}
else if(x==6)
{
int temp;
char temp1[20],temp2[20];
printf("你选择的操作是writeFile\n");
printf("请输入你要修改的文件编号:\n");
scanf("%d",&temp);
printf("请输入修改后的文件名称:\n");
scanf("%s",temp1);
printf("请输入修改后的文件内容:\n");
scanf("%s",temp2);
writeFile(temp,temp1,temp2);
}
else if(x==7)
{
printf("你选择的操作是saveFile\n");
saveFile();
}
else if(x==8)
{
printf("你选择的操作是printFileOpen\n");
printFileOpen();
}
else
{
printf("不存在此类操作!请重新选择!!\n");
}
}
void createFile()
{
filenum1=0;
int x=filenum,x2;
char ch;
for(x2=x-filenum;x2<MaxOpenFile;)
{
printf("\n请输入c继续创建文件,输入f结束创建文件\n");
ch=getchar();
if(ch=='f') break;
if(ch=='c')
{
filenum1++;
openfiles[x2].num=x+1;
strcpy(openfiles[x2].name,"a1");//利用String.h给字符数组赋值
strcpy(openfiles[x2].infom,"abcdefg");
openfiles[x2].state='O';
openfiles[x2].usernum=userLogin;
printf("**********file%d**********\n",x2+1);
printf("num=%d\n",openfiles[x2].num);
printf("name=%s\n",openfiles[x2].name);
printf("infom=%s\n",openfiles[x2].infom);
printf("state=%c\n",openfiles[x2].state);
printf("usernum=%d\n",openfiles[x2].usernum);
x++;
x2=x-filenum;
}
}
filenum=x;
createnum++;
}
void deleteFile(int x)
{
int i=filenum;
move=head;
if(move==NULL)printf("\n创建的文件没有保存或者没有创建文件!无法删除!!\n");
else
{
for(;i>0;i--,move=move->next)
{
if(move->next==NULL&&move->num!=x)printf("\n文件名不存在!无法删除!!\n");
if(move->num==x&&move==head) {move=move->next;head=move;filenum--;break;}
else if(move->next->num==x&&move->next==tail)
{
move0=move;
move0->next=NULL;
tail=move0;
filenum--;
break;
}
else
{
if(move->next->num==x) move0=move;
if(move->num==x) {move0->next=move->next;filenum--;break;}
}
}
printf("\nfile delete success!\n");
}
}
void openFile(int x)
{
int i=filenum;
move=head;
if(move==NULL)printf("\n创建的文件没有保存或者没有创建文件!无法打开文件!!\n");
else
{
for(;i>0;i--,move=move->next)
{
if(move->next==NULL&&move->num!=x)printf("\n文件名不存在!无法打开!!\n");
if(move->num==x) {move->state='O';printf("\nfile open success!\n");break;}
}
}
}
void closeFile(int x)
{
int i=filenum;
move=head;
if(move==NULL)printf("\n创建的文件没有保存或者没有创建文件!无法关闭文件!!\n");
else
{
for(;i>0;i--,move=move->next)
{
if(move->next==NULL&&move->num!=x)printf("\n文件名不存在!无法关闭!!\n");
if(move->num==x) {move->state='C';printf("\nfile close success!\n");break;}
}
}
}
void readFile(int x)
{
int i=filenum;
move=head;
if(move==NULL)printf("\n创建的文件没有保存或者没有创建文件!无法读取文件!!\n");
else
{
for(;i>0;i--,move=move->next)
{
if(move->next==NULL&&move->num!=x)printf("\n文件名不存在!无法读取!!\n");
if(move->num==x)
{
printf("\nnum=%d\n",move->num);
printf("name=%s\n",move->name);
printf("infom=%s\n",move->infom);
break;
}
}
}
}
void writeFile(int x,char x1[],char x2[])
{
int i=filenum;
move=head;
if(move==NULL)printf("\n创建的文件没有保存或者没有创建文件!无法修改文件!!\n");
else
{
for(;i>0;i--,move=move->next)
{
if(move->next==NULL&&move->num!=x)printf("\n文件名不存在!无法修改!!\n");
if(move->num==x)
{
strcpy(move->name,x1);//利用String.h给字符数组赋值
strcpy(move->infom,x2);
printf("\nnum=%d\n",move->num);
printf("name=%s\n",move->name);
printf("infom=%s\n",move->infom);
break;
}
}
}
}
void saveFile()
{
int i;
if(createnum==1)
{
for(i=0;i<filenum1;i++)
{
if(i==0)
{
head=p1=(struct file *)malloc(LENGTH);
move=head;
p1->num=openfiles[i].num;
strcpy(p1->name,openfiles[i].name);//利用String.h给字符数组赋值
strcpy(p1->infom,openfiles[i].infom);
p1->state='O';
p1->usernum=userLogin;
}
else
{
tail=p2=(struct file *)malloc(LENGTH);
p2->num=openfiles[i].num;
strcpy(p2->name,openfiles[i].name);//利用String.h给字符数组赋值
strcpy(p2->infom,openfiles[i].infom);
p2->state='O';
p2->usernum=userLogin;
p1->next=p2;
p1=p2;
}
}
}
else if(createnum>1)
{
for(i=0;i<filenum1;i++)
{
p2=(struct file *)malloc(LENGTH);
p2->num=openfiles[i].num;
strcpy(p2->name,openfiles[i].name);//利用String.h给字符数组赋值
strcpy(p2->infom,openfiles[i].infom);
p2->state='O';
p2->usernum=userLogin;
tail->next=p2;
tail=p2;
}
}
else { }
printf("\nfile save success!\n");
}
void printFileOpen()
{
int i=filenum;
move=head;
if(move==NULL)printf("\n创建的文件没有保存或者没有创建文件!\n");
else
{
for(;i>0;i--,move=move->next)
{
if(move->state=='O')printf("%d\t",move->num);
}
printf("\n");
}
}