OS.cpp
上传用户:tinajin
上传日期:2014-01-19
资源大小:136k
文件大小:21k
- ////////////////////////////////////////////////////////////
- // 编译工具:Visual c++ 6.0 //
- // //
- // 作者:~小楚*smill~ 、蓝色的天空 //
- // 邮件:qvb20974151@163.com //
- // //
- // 复制、传播请保留作者信息,谢谢! //
- // //
- ////////////////////////////////////////////////////////////
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <time.h>
- void fileCreate(char *fileName,int fileLenght); //创建文件,文件最大长度为1万
- void fileDel(char *fileName); //删除文件
- void fileRead(char *fileName,int postion,int lenght);
- void fileWrite(char *fileName,int position,char *s); //函数声明
- void fileAsk(char *fileName); //查询文件属性
- void fileType(char *fileName); //显示文件内容
- void fileRen(char *fileName,char *newName); //重命名文件
- void fileDir(); //列出所有文件
- void fileClose(char *fileName); //关闭一个文件
- int requestDisk(int *startPosition,int *maxLength); //分配磁盘空间
- /////////////////////////////////
- //模拟磁盘空间
- char disk[10000];
- ///////////////////////////////
- //磁盘空间管理
- struct freeDiskTable
- {
- int start; //开始位置
- int length; //占用长度
- int maxLength; //最大长度
- int useFlag; //使用标志,1为占用,0为空闲
- };
- //////////////////////////////////
- //文件表
- struct fileTable
- {
- char fileName[20]; //文件名字
- int start; //开始位置
- int length; //文件长度
- int maxLength; //最大长度
- char fileKind[8]; //文件种类,此默认为txt
- struct tm *timeinfo; //文件创建时间
- };
- ////////////////////////////////
- //打开文件表
- struct openFileTable
- {
- char fileName[20]; //文件名字
- char fileKind[8]; //文件类型
- int start; //文件开始位置
- int length; //文件长度
- int maxLength; //最大长度
- int openCount; //打开文件的进程数
- struct tm *timeinfo; //文件创建时间
- };
- //////////////////////////////
- typedef struct freeDiskTable LinDataType; //定义链表的数据类型
- #include "LinList.h" //链表操作集合
- SLNode *freeDiskTableHead; //定义磁盘分配表链表 头指针
- #define MaxSize 100 //定义线性表 最大长度
- typedef struct fileTable SeqDataType; //定义线性表数据类型
- #include "SeqList.h" //线性表操作集合
- SeqList L; //文件表,模拟文件操作嘛,文件数不多,故可以用 线性表,简化操作^_^
- struct openFileTable OFT[10]; //打开文件表数组
- int OFT_count=0; //打开文件表占用长度
- void main()
- {
- struct orderTable //命令表
- {
- char name[8];
- };
- char orderInput[30]; //存储用户输入的命令字符串
- char orderName[8]; //命令名字
- char fileName[20]; //命令参数1,是文件名字
- char parameter2[6]; //命令参数2,是个数字
- char parameter3[30]; //命令参数3,是字符串或数字
- struct orderTable u[9]; //命令表
- int i=0;
- int flag=0; //用户输入串 读写位置 标志
- int flagOrder=-1;
- /////////////////////////////////////
-
- LinListInitiate(&freeDiskTableHead);//磁盘空间分配键表初始化
- struct freeDiskTable temp;
- temp.length=0;
- temp.maxLength=10000;
- temp.start=0;
- temp.useFlag=0;
- if(!LinListInsert(freeDiskTableHead,0,temp))
- {
- printf("初始磁盘空闲表失败!");
- system("pause");
- exit(0);
- }
- /////////////////////////////////////
- //文件表初始化
- SeqListInitiate(&L); //初始化 文件表
- /////////////////////////////////////
- for(i=0;i<2;i++)
- for(int j=0;j<2;j++)
- {
- system("color fc");
- printf("nnnnnnnnn 作者:XXX 操作系统课程设计n");
- for(int k=0;k<30000000;k++);
- system("cls");
- system("color f3");
- printf("nnnnnnnnn 作者:XXX 操作系统课程设计n");
- for(k=0;k<30000000;k++);
- system("cls");
- }
- system("color 17"); //设置背景色 和 前景色
- ////////////////////////////////////////////////////////////
- //初始化命令表
- strcpy(u[0].name,"create");
- strcpy(u[1].name,"delete");
- strcpy(u[2].name,"read");
- strcpy(u[3].name,"write");
- strcpy(u[4].name,"ask");
- strcpy(u[5].name,"type");
- strcpy(u[6].name,"ren");
- strcpy(u[7].name,"dir");
- strcpy(u[8].name,"close");
- ////////////////////////////////////////////////////////////
- while(1)
- {
- printf("n");
- printf("|******************************************************|n");
- printf("|* create-创建 delete-删除 read-读取 write-写入 *|n");
- printf("|* ask-查询 type-显示 ren-重命名 dir-显示文件 *|n");
- printf("|* close-关闭文件 *|n");
- printf("|* 输入'命令 ?'获得帮助,例如'create ?',exit-退出程序 *|n");
- printf("|******************************************************|n");
- printf("请输入命令:>");
- fflush(stdin); //清空缓冲区
- gets(orderInput); //获取用户输入串
- if(!strcmp(orderInput,"exit"))exit(0); //当用户输入 exit 退出程序
- system("cls"); //清屏
- for(i=0;orderInput[i]!=' '&&orderInput[i]!=' ';i++)//以空格为界 分解用户输入串
- {
- orderName[i]=orderInput[i];
- }
- flag=i;//保存读写指针
- if(flag>6) //命令名长度 小于6
- {
- printf("输入的命令有误,请重新输入!n");
- continue ;
- }
- orderName[i]=' ';
- flagOrder=-1; //初始化标志位,flagOrder 指明命令在命令表中的位置
- for(i=0;i<9;i++)
- {
- if(!strcmp(orderName,u[i].name))
- {
- flagOrder=i; //记录命令的位置,以便访问
- break;
- }
- }
- if(flagOrder==-1)
- {
- printf("你输入的命令有误!请重新输入!n");
- continue ;
- }
- /////////////////////////////////////////////////////
- //以空格为界,分解字符串,分解出第一个字符串放到fileName中
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- fileName[i-flag-1]=orderInput[i];
- }
- fileName[i-flag-1]=' '; //为字符串数组 置一个结束标志
- /////////////////////////////////////////////////////
- flag=i; //下一个字符串 读写指针
- if(!strcmp(fileName,"?")) //显示命令帮助
- {
- switch(flagOrder)
- {
- case 0:
- printf("创建一个文件 格式 create [filename][filelength]n");
- printf("例如: create a1 1000 ,将创建名为a1,长度为1000字节的文件n");
- break;
- case 1:
- printf("删除一个文件 格式 delete [filename] n");
- printf("例如: delete a1,将删除名为a1的文件n");
- break;
- case 2:
- printf("读取一个文件 格式 read [filename][postion][length]n");
- printf("例如: read a1 8 3,从a1文件第8个字节开始,显示3字节内容n");
- break;
- case 3:
- printf("写一个文件 格式 write [fileName][postion][conten] n");
- printf("例始: write a1 15 test,从a1文件第15字节开始写入 test 字符串n");
- break;
- case 4:
- printf("显示文件的属性,格式 ask [filename]n");
- printf("例如 ask a1 ,将显示文件 a1的属性n");
- break;
- case 5:
- printf("显示文件的所有内容,格式 type [filename]n");
- printf("例如 type a1,将显示文件 a1的所有内容n");
- break;
- case 6:
- printf("重命名一个文件,格式 ren [oldFileName][newFileName]n");
- printf("例如ren a1 b1 ,将a1改名为b1n");
- break;
- case 7:
- printf("显示所有文件,例如 dir,将显示所有文件n");
- break;
- case 8:
- printf("关闭文件,格式 close [fileName]n");
- printf("例如,close a1,将关闭文件a1n");
- break;
- default:
- printf("命令错误");
- }
- getch();
- }
- else
- {
- switch(flagOrder)//对相应的命令 进行参数处理
- {
- case 0:
- {
- int Temp[4]={1,10,100,1000};
- int sum=0;
- int len=0;
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- parameter2[i-flag-1]=orderInput[i];
- }
- parameter2[i-flag-1]=' '; //为字符串数组 置一个结束标志
- flag=i;
- len=strlen(parameter2); //求字符串数组的长度
- for(i=0;i<len;i++) //把第二个参数 字符串变成整数
- sum=sum+((int)parameter2[len-i-1]-48)*Temp[i];
- fileCreate(fileName,sum); //将命令和参数 传给建文件模块执行
- }
- break;
- case 1:
-
- fileDel(fileName); //删除文件
- break;
- case 2:
- {
- int Temp[4]={1,10,100,1000};
- int sum=0;
- int len=0;
- int sum2=0;
- //////////////////////////////////////////////////////////
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- parameter2[i-flag-1]=orderInput[i];
- }
- parameter2[i-flag-1]=' ';
- flag=i;
- len=strlen(parameter2); //求字符串数组的长度
- for(i=0;i<len;i++) //把第二个参数 字符串变成整数
- sum=sum+((int)parameter2[len-i-1]-48)*Temp[i];
- ///////////////////////////////////////////////////////////
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- parameter3[i-flag-1]=orderInput[i]; //把第三个参数变成整型
- }
- parameter3[i-flag-1]=' ';
- flag=i;
- len=strlen(parameter3);
- for(i=0;i<len;i++)
- sum2=sum2+((int)parameter3[len-i-1]-48)*Temp[i];
- fileRead(fileName,sum,sum2); //调用读文件模块
- }
- break;
- case 3:
- {
- int Temp[4]={1,10,100,1000};
- int sum=0;
- int len=0;
- //////////////////////////////////////////////////////////
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- parameter2[i-flag-1]=orderInput[i];
- }
- parameter2[i-flag-1]=' ';
- flag=i;
- len=strlen(parameter2); //求字符串数组的长度
- for(i=0;i<len;i++) //把第二个参数 字符串变成整数
- sum=sum+((int)parameter2[len-i-1]-48)*Temp[i];
- ///////////////////////////////////////////////////////////
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- parameter3[i-flag-1]=orderInput[i]; //获取第三个参数,为字符串
- }
- parameter3[i-flag-1]=' ';
- flag=i;
- //////////////////////////////////////////////////////////
- fileWrite(fileName,sum,parameter3); //调用写文件模块
- }
- break;
- case 4:
- fileAsk(fileName); //查询文件属性
- break;
- case 5:
- fileType(fileName); //显示文件内容
- break;
- case 6:
- {
- for(i=flag+1;orderInput[i]!=' '&&orderInput[i]!=' ';i++)
- {
- parameter2[i-flag-1]=orderInput[i];
- }
- parameter2[i-flag-1]=' ';
- flag=i;
- fileRen(fileName,parameter2);
- }
- break;
- case 7:
- fileDir();
- break;
- case 8:
- fileClose(fileName);
- break;
- default:
- printf("错误!没有可执行的命令");
- }
- }
- }
- }
- //以上主函数,主函数进行数据结构的定义 分析用户输入的命令。
- //提供命令帮助。把命令和参数,传递给执行模块
- //////////////////////////////////////////////////////////////////////
- void fileCreate(char *fileName,int fileLength)//没有写到打开文件表
- {
- int i=0;
- time_t rawtime;
- int startPosition=0; //文件开始位置,等磁盘分配函数 返回值
- int maxLength=fileLength;
- struct fileTable temp;
- for(i=0;i<L.size;i++)
- if(!strcmp(fileName,L.list[i].fileName)) //判断是否重名,如果重名直接返回
- {
- printf("文件重名,请取别的名字!n");
- return ; //文件重名,退出创建函数
- }
- if(!requestDisk(&startPosition,&maxLength))
- {
- printf("申请磁盘空间失败!无法建立文件!n");
- return ; //申请磁盘空间失败,退出创建函数
- }
- strcpy(temp.fileName,fileName);
- strcpy(temp.fileKind,"txt"); //设置文件类型为 txt
- temp.length=0; //创建的时候,还没写入内容,是空文件,长度设为0
- temp.maxLength=fileLength; //文件的最大长度
- temp.start=startPosition; //文件的开始位置
-
- time(&rawtime); //获取时间
- temp.timeinfo=localtime(&rawtime); //把时间写到结构体里去
- if(!SeqListInsert(&L,L.size,temp)) //把文件 插入到文件表
- {
- printf("插入文件表失败!n");
- system("pause");
- exit(0); //把文件插入到 文件表,如果失败,退出程序
- }
- printf("成功创建文件!nn");
- printf("===========================================n");
- printf("文件名 长度 最大长度 类型 开始位置n");//显示刚建立的文件
- printf("%s ",temp.fileName);
- printf("%d ",temp.length);
- printf("%d ",temp.maxLength);
- printf("%s ",temp.fileKind);
- printf("%d ",temp.start);
- printf("n===========================================n");
- printf("create进程打开了文件%s,关闭请用close命令!nn",fileName);
- //写到打开文件表
- strcpy(OFT[OFT_count].fileName,temp.fileName);
- strcpy(OFT[OFT_count].fileKind,temp.fileKind);
- OFT[OFT_count].length=temp.length;
- OFT[OFT_count].maxLength=temp.maxLength;
- OFT[OFT_count].start=temp.start;
- OFT[OFT_count].openCount=1;
- OFT[OFT_count].timeinfo=temp.timeinfo;
- OFT_count++; //打开表 记录的是文件数
- //printf("count%d",OFT_count);
- }
- void fileDel(char *fileName)
- {
- int i;
- int flag=0;
- int k=0; //记录文件在 文件表中的位置
- SLNode *p; //磁盘空间分配表 指针
- SeqDataType x; //存储被删除的结点,无特殊意义
- for(i=0;i<OFT_count;i++) //判断是否被别的进程占用,若被占用,打印出错,直接返回
- if(!strcmp(fileName,OFT[i].fileName))
- {
- printf("别的进程占用文件!无法删除!");
- return ;
- }
- for(i=0;i<L.size;i++)//从文件表里查找到要删除的文件,若查找不到,直接返回
- {
- if(!strcmp(fileName,L.list[i].fileName))
- {
- flag=1;
- k=i;
- break;
- }
- }
- if(flag==0)
- {
- printf("无此文件!");
- return ;
- }
- if(flag==1)//查找到文件后,把磁盘空间置为空闲,之后从文件表中删除
- {
- for(p=freeDiskTableHead;p->next!=NULL;p=p->next)
- {
- if(p->next->data.start==L.list[k].start)
- {
- p->next->data.useFlag=0;
- printf("成功删除!n");
- break;
- }
- }
- SeqListDelete(&L,k,&x);//从文件表中删除
- }
- }
- void fileRead(char *fileName,int position,int length)
- {
- int i;
- int flag=0;
- int k=0;
- for(i=0;i<OFT_count;i++) //查找文件打开表,如果存在,则不需要再查找文件表
- {
- if(!strcmp(fileName,OFT[i].fileName))
- {
- k=i;
- flag=1;
- OFT[i].openCount++;//多个进程打开,计算器加1
- break;
- }
- }
- if(flag!=1) //文件不在打开表,找到它,并写到打开表最后
- {
- for(i=0;i<L.size;i++)
- {
- if(!strcmp(fileName,L.list[i].fileName)) //找到文件,写到文件打开表
- {
- strcpy(OFT[OFT_count].fileName,L.list[i].fileName);
- strcpy(OFT[OFT_count].fileKind,L.list[i].fileKind);
- OFT[OFT_count].length=L.list[i].length;
- OFT[OFT_count].maxLength=L.list[i].maxLength;
- OFT[OFT_count].start=L.list[i].start;
- OFT[OFT_count].timeinfo=L.list[i].timeinfo;
- OFT[OFT_count].openCount++;
- k=OFT_count;
- //OFT_count=1;//初次打开,赋值为1
- flag=1; //标志在打开文件表里
- }
- }
- }
- if(flag==1)
- {
- if(position<0||position+length>OFT[k].length)
- {
- printf("读取参数错误,请检查参数!n");
- return ;
- }
- for(i=0;i<length;i++)
- printf("%c",disk[OFT[k].start+position+i-1]); //读取内容
- printf("nread进程打开了文件%s,关闭请用close命令!nn",fileName);
- }
- }
- void fileWrite(char *fileName,int position,char *s)//找到文件,写到打开表,根据打开表操作
- {
- int i=0;
- int len=0; //计算写入字串长度,跟原来长度相加,如果超过最大长度,就失败
- int k=0; //如果在 打开表里打到记录,则记录位置
- int flag=0; //如果flag=1,说明在打开表里找到了,不用在文件表里找了
- len=strlen(s);
- for(i=0;i<OFT_count;i++)
- {
- if(!strcmp(fileName,OFT[i].fileName))
- {
- k=i;
- flag=1;
- OFT[i].openCount++;//多个进程打开,计算器加1
- break;
- }
- }
- if(flag!=1) //文件不在打开表,找到它,并写到打开表最后
- {
- for(i=0;i<L.size;i++)
- {
- if(!strcmp(fileName,L.list[i].fileName)) //找到文件,写到文件打开表的最后
- {
- strcpy(OFT[OFT_count].fileName,L.list[i].fileName);
- strcpy(OFT[OFT_count].fileKind,L.list[i].fileKind);
- OFT[OFT_count].length=L.list[i].length;
- OFT[OFT_count].maxLength=L.list[i].maxLength;
- OFT[OFT_count].start=L.list[i].start;
- OFT[OFT_count].timeinfo=L.list[i].timeinfo;
- OFT[OFT_count].openCount++;
- k=OFT_count; //记录在文件打开表中的位置
- flag=1; //标志在打开文件表里
-
- }
- }
- }
- if(1==flag) //如果在打开表里 找到文件,则不用再找文件表
- {
- if(OFT[k].length+len>OFT[k].maxLength)
- {
- printf("超过文件最大长度,写入失败!n");
- return ;
- }
- else if(position<0||position>OFT[k].length)
- {
- printf("插入位置非法!请检查参数n");
- return ;
- }
- else
- {
- int j=0;
- for(i=OFT[k].length-1;i>=OFT[k].start+position;i--)
- disk[i+len]=disk[i]; //给插入的字符串 空出位置
- for(i=OFT[k].start+position;i<OFT[k].start+position+len;i++,j++)
- disk[i]=s[j]; //写进磁盘
- for(i=0;i<L.size;i++) //改变文件长度
- {
- if(!strcmp(fileName,L.list[i].fileName))
- {
- L.list[i].length=L.list[i].length+len; //设置文件长度
- break;
- }
- }
- OFT[k].length=OFT[k].length+len; //同时更新打开文件表中文件的长度
- printf("成功写入!n");
- printf("write进程打开了文件%s,关闭请用close命令!nn",fileName);
- }
- }
- else
- printf("无此文件,请输入正确的文件名!");
- }
- void fileAsk(char *fileName)
- {
- int i;
- int flag=0;
- for(i=0;i<OFT_count;i++) //如果在打开表里 找到文件,则不用再找文件表
- {
- if(!strcmp(fileName,OFT[i].fileName))
- {
- printf("文件名:%sn",OFT[i].fileName);
- printf("类型:%sn",OFT[i].fileKind);
- printf("长度:%dn",OFT[i].length);
- printf("打开进程数:%dn",OFT[i].openCount);
- printf("创建时间:%sn",asctime(OFT[i].timeinfo));
- flag=1;
- break;
- }
- }
- if(flag!=1)
- {
- for(i=0;i<L.size;i++) //从文件表里查找文件
- {
- if(!strcmp(fileName,L.list[i].fileName))
- {
- printf("文件名:%sn",L.list[i].fileName);
- printf("类型:%sn",L.list[i].fileKind);
- printf("长度:%dn",L.list[i].length);
- printf("创建时间:%sn",asctime(L.list[i].timeinfo));
- flag=1;
- break;
- }
- }
- }
- if(flag==0)
- printf("无此文件!n");
- }
- void fileType(char *fileName)
- {
- int i;
- int flag=0;
- int k=0;
- for(i=0;i<OFT_count;i++)
- {
- if(!strcmp(fileName,OFT[i].fileName))
- {
- k=i;
- flag=1;
- OFT[i].openCount++;//多个进程打开,计算器加1
- break;
- }
- }
- if(flag!=1) //文件不在打开表,找到它,并写到打开表最后
- {
- for(i=0;i<L.size;i++)
- {
- if(!strcmp(fileName,L.list[i].fileName)) //找到文件,写到文件打开表
- {
- strcmp(OFT[OFT_count].fileName,L.list[i].fileName);
- strcmp(OFT[OFT_count].fileKind,L.list[i].fileKind);
- OFT[OFT_count].length=L.list[i].length;
- OFT[OFT_count].maxLength=L.list[i].maxLength;
- OFT[OFT_count].start=L.list[i].start;
- OFT[OFT_count].timeinfo=L.list[i].timeinfo;
- OFT[OFT_count].openCount++;
- k=OFT_count;
- //OFT_count=1;//初次打开,赋值为1
- flag=1; //标志在打开文件表里
- }
- }
- }
- if(flag==1)
- {
- for(i=0;i<OFT[k].length;i++)
- printf("%c",disk[OFT[k].start+i]); //显示全部内容
- if(OFT[k].length==0)
- printf("文件为空,无内容显示!n");
- printf("n===========================================n");
- printf("ncreate进程打开了文件%s,关闭请用close命令!nn",fileName);
- // printf(",,,,n");
- // printf("OFT[k].length %dn",OFT[k].length);
- }
- else
- printf("无此文件,请检查文件名!n");
- }
- void fileRen(char *fileName,char *newName)
- {
- int i=0;
- int flag=0;
- for(i=0;i<OFT_count;i++) //若还有别的进程打开文件,刚不能重命名
- if(!strcmp(fileName,OFT[i].fileName))
- {
- printf("别的进程占用文件!无法重命名!n");
- return ;
- }
- for(i=0;i<L.size;i++) //在文件表里找到,并重命名
- if(!strcmp(fileName,L.list[i].fileName))
- {
- strcpy(L.list[i].fileName,newName);
- flag=1;
- break;
- }
- if(flag==1)
- printf("重命名成功!n");
- else
- printf("重命名失败!无此文件n");
- }
- void fileDir()
- {
- int i;
- if(L.size==0) //文件表的 大小为0,说明没有文件
- {
- printf("磁盘无文件!n");
- return ;
- }
- for(i=0;i<L.size;i++) //打印所有文件名
- printf("%sn",L.list[i].fileName);
- }
- void fileClose(char *fileName)
- {
- int i;
- int flag=0;
- int j;
- for(i=0;i<OFT_count;i++)
- {
- if(!strcmp(fileName,OFT[i].fileName)) //在文件打开表里找到,把打开数减1,
- //如果计数为0,显示关闭成功!
- {
- OFT[i].openCount--;
- flag=1;
- if(OFT[i].openCount==0)
- {
- for(j=i;j<OFT_count;j++)
- OFT[j]=OFT[j+1]; //删除要关闭的文件
- OFT_count--;
- printf("成功关闭文件!n");
- }
- else
- printf("计数器减1n");
- break;
- }
- }
- if(flag==0)
- printf("此文件没有打开!n");
- }
- ///////////////////////////////
- //磁盘空间管理 操作
- int requestDisk(int *startPosistion,int *maxLength)
- {
- struct freeDiskTable temp;
- int flag=0; //分配成功与否标志
- int k=0; //记录插入位置
- SLNode *p=NULL;
- for(p=freeDiskTableHead;p->next!=NULL;p=p->next)
- {
- k++;//记录位置,在空闲结点之后插入结点
- if(p->next->data.useFlag==0&&p->next->data.maxLength>=*maxLength)
- {
- temp.length=0;
- temp.maxLength=p->next->data.maxLength-*maxLength;
- temp.start=p->next->data.start+*maxLength;
- temp.useFlag=0; //分解节点
- //=========================================
- p->next->data.maxLength=*maxLength;
- p->next->data.useFlag=1; //设置分配的空间标志位
- *startPosistion=p->next->data.start;
- flag=1;//成功分配
- break;
-
- }
-
- }
- if(1==flag) //成功分配空间,返回成功标志
- {
- if(!LinListInsert(freeDiskTableHead,k,temp))
- {
- printf("失败!n");
- system("pause");
- exit(0);
- }
- return 1;
- }
- else
- return 0;
- }
- ///////////////////////////////////////////////////