
#include <stdioh>
#include <stdlibh>
#include <stringh>
int main(int argc, char argv[])
{
char file_name[64] = {0};
char file_path[128] = {0};
char dir_path[64] = {0};
char cmd[256] = {0};
int re = 0;
FILE pf = NULL;
char p = NULL;
scanf("%s", file_name);
snprintf(cmd, 256, "find -name %s > tmptxt", file_name);//如果文件不在程序运行的本地目录(或者子目录)下,则需要改成find / -name xxxx 但耗时会很长
system(cmd);
//文件中取绝对路径
pf = fopen("tmptxt", "r");
if (pf)
{
re = fscanf(pf, "%s", file_path);//只取第一行 也就是默认不存在同名文件
if (-1 == re)
{
printf("err0\n");
return 0;
}
else
{
flcose(pf);
pf = NULL;
}
}
else
{
printf("err1\n");
return 0;
}
if (0 == strlen(file_path))
{
printf("err2\n");
return 0;
}
//获取目录名
p = strstr(file_path, file_name);
if (p)
{
p = '\0';
strcpy(dir_path, file_path);//也可以不cp直接用file_path
}
//通过c语言展开ls这个路径c语言变量 其实我没有理解这句话 先这么做吧
snprintf(cmd, 256, "ls %s", dir_path);
system(cmd);
return 0;
}
如果哪里有异常就加printf打印出来各个变量
/
这是CBrowseDir的类定义文件 BrowseDirh
/
#include "stdlibh"
class CBrowseDir
{
protected:
//存放初始目录的绝对路径,以'\'结尾
char m_szInitDir[_MAX_PATH];
public:
//缺省构造器
CBrowseDir();
//设置初始目录为dir,如果返回false,表示目录不可用
bool SetInitDir(const char dir);
//开始遍历初始目录及其子目录下由filespec指定类型的文件
//filespec可以使用通配符 ,不能包含路径。
//如果返回false,表示遍历过程被用户中止
bool BeginBrowse(const char filespec);
protected:
//遍历目录dir下由filespec指定的文件
//对于子目录,采用迭代的方法
//如果返回false,表示中止遍历文件
bool BrowseDir(const char dir,const char filespec);
//函数BrowseDir每找到一个文件,就调用ProcessFile
//并把文件名作为参数传递过去
//如果返回false,表示中止遍历文件
//用户可以覆写该函数,加入自己的处理代码
virtual bool ProcessFile(const char filename);
//函数BrowseDir每进入一个目录,就调用ProcessDir
//并把正在处理的目录名及上一级目录名作为参数传递过去
//如果正在处理的是初始目录,则parentdir=NULL
//用户可以覆写该函数,加入自己的处理代码
//比如用户可以在这里统计子目录的个数
virtual void ProcessDir(const char
currentdir,const char parentdir);
};
//
这是CBrowseDir的类实现文件 BrowseDircpp
//
#include "stdlibh"
#include "directh"
#include "stringh"
#include "ioh"
#include "browsedirh"
CBrowseDir::CBrowseDir()
{
//用当前目录初始化m_szInitDir
getcwd(m_szInitDir,_MAX_PATH);
//如果目录的最后一个字母不是'\',则在最后加上一个'\'
int len=strlen(m_szInitDir);
if (m_szInitDir[len-1] != '\\')
strcat(m_szInitDir,"\\");
}
bool CBrowseDir::SetInitDir(const char dir)
{
//先把dir转换为绝对路径
if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)
return false;
//判断目录是否存在
if (_chdir(m_szInitDir) != 0)
return false;
//如果目录的最后一个字母不是'\',则在最后加上一个'\'
int len=strlen(m_szInitDir);
if (m_szInitDir[len-1] != '\\')
strcat(m_szInitDir,"\\");
return true;
}
bool CBrowseDir::BeginBrowse(const char filespec)
{
ProcessDir(m_szInitDir,NULL);
return BrowseDir(m_szInitDir,filespec);
}
bool CBrowseDir::BrowseDir
(const char dir,const char filespec)
{
_chdir(dir);
//首先查找dir中符合要求的文件
long hFile;
_finddata_t fileinfo;
if ((hFile=_findfirst(filespec,&fileinfo)) != -1)
{
do
{
//检查是不是目录
//如果不是,则进行处理
if (!(fileinfoattrib & _A_SUBDIR))
{
char filename[_MAX_PATH];
strcpy(filename,dir);
strcat(filename,fileinfoname);
if (!ProcessFile(filename))
return false;
}
} while (_findnext(hFile,&fileinfo) == 0);
_findclose(hFile);
}
//查找dir中的子目录
//因为在处理dir中的文件时,派生类的ProcessFile有可能改变了
//当前目录,因此还要重新设置当前目录为dir。
//执行过_findfirst后,可能系统记录下了相关信息,因此改变目录
//对_findnext没有影响。
_chdir(dir);
if ((hFile=_findfirst("",&fileinfo)) != -1)
{
do
{
//检查是不是目录
//如果是,再检查是不是 或
//如果不是,进行迭代
if ((fileinfoattrib & _A_SUBDIR))
{
if (strcmp(fileinfoname,"") != 0 && strcmp
(fileinfoname,"") != 0)
{
char subdir[_MAX_PATH];
strcpy(subdir,dir);
strcat(subdir,fileinfoname);
strcat(subdir,"\\");
ProcessDir(subdir,dir);
if (!BrowseDir(subdir,filespec))
return false;
}
}
} while (_findnext(hFile,&fileinfo) == 0);
_findclose(hFile);
}
return true;
}
bool CBrowseDir::ProcessFile(const char filename)
{
return true;
}
void CBrowseDir::ProcessDir(const char
currentdir,const char parentdir)
{
}
/
这是例子examplecpp
/
#include "stdioh"
#include "BrowseDirh"
//从CBrowseDir派生出的子类,用来统计目录中的文件及子目录个数
class CStatDir:public CBrowseDir
{
protected:
int m_nFileCount; //保存文件个数
int m_nSubdirCount; //保存子目录个数
public:
//缺省构造器
CStatDir()
{
//初始化数据成员m_nFileCount和m_nSubdirCount
m_nFileCount=m_nSubdirCount=0;
}
//返回文件个数
int GetFileCount()
{
return m_nFileCount;
}
//返回子目录个数
int GetSubdirCount()
{
//因为进入初始目录时,也会调用函数ProcessDir,
//所以减1后才是真正的子目录个数。
return m_nSubdirCount-1;
}
protected:
//覆写虚函数ProcessFile,每调用一次,文件个数加1
virtual bool ProcessFile(const char filename)
{
m_nFileCount++;
return CBrowseDir::ProcessFile(filename);
}
//覆写虚函数ProcessDir,每调用一次,子目录个数加1
virtual void ProcessDir
(const char currentdir,const char parentdir)
{
m_nSubdirCount++;
CBrowseDir::ProcessDir(currentdir,parentdir);
}
};
void main()
{
//获取目录名
char buf[256];
printf("请输入要统计的目录名:");
gets(buf);
//构造类对象
CStatDir statdir;
//设置要遍历的目录
if (!statdirSetInitDir(buf))
{
puts("目录不存在。");
return;
}
//开始遍历
statdirBeginBrowse("");
//统计结果中,子目录个数不含 及
printf("文件总数: %d\n子目录总数:
%d\n",statdirGetFileCount(),
statdirGetSubdirCount());
}
学生成绩的太多了,帮你找了一个图书管理的,希望能帮上忙,代码如下:
#include <stdioh>
#include <malloch>
#include <conioh>
#include <stringh>
#include <stdlibh>
#define LEN sizeof(struct booklist)
#define LEN2 sizeof(struct memberlist)
#define LEN3 sizeof(struct readers)
typedef struct readers//借书信息结构体
{
char name[30];//借书人的姓名
struct readers next2;
}reader;
//书本信息结构体
typedef struct booklist
{
char num[20]; //书号
char name[30]; //书名
char concern[50];//出版社
char date[20];//出版日期
char author[20];//作者
int page;//页数
int price;//价格
int imformation;//图书剩余数量
reader a;//借阅人
struct booklist next;
}Book;
void creatlist();//创建新的书本信息
void print(Book head);//打印书本信息
void save(Book head);//储存书本信息
void AddBook();//添加书本信息
void DelBook();//删除书本信息
Book read();//读取书本信息
void manager();//管理员 *** 作
void Bookconsult(); //图书查询
int Borrow();//借书
int Return();//还书
Book sort(Book head);//书本信息按书号排序
void imformation();//系统信息
Book head=NULL,p1=NULL,p2=NULL;
//创建新的书本信息
void creatlist()
{
int i,n;
printf("要创建的书本数目");
scanf("%d",&n);
p2=head=(Book )malloc(LEN); //创建带有头结点的链表
p2->a=(reader )malloc(LEN3);
p2->a->next2=NULL;
p2->next=NULL;
printf("请输入书的信息:\n");
for(i=1;i<=n;i++)
{
p1=(Book )malloc(LEN);
printf("书号: "); scanf("%s",p1->num);
printf("书名: "); scanf("%s",p1->name);
printf("出版社: "); scanf("%s",p1->concern);
printf("出版日期: "); scanf("%s",p1->date);
printf("作者: "); scanf("%s",p1->author);
printf("书本页数: "); scanf("%d",&p1->page);
printf("书本价格(元): "); scanf("%d",&p1->price);
p1->a=(reader )malloc(LEN3);
p1->a->next2=NULL;
p1->imformation=10;
p1->next=NULL;
p2->next=p1;
p2=p1;
if(i<n) printf("下一本:\n");
}
head=sort(head);
save(head);
print(head);
}
//打印书本信息
void print(Book head)
{
Book p=NULL;
reader p0=NULL;
p=head->next;
printf("\n");
while(p!=NULL)
{
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation);
printf("借阅图书的人:");
if(p->a->next2==NULL) printf("------------暂无借阅人!");
else
{
for(p0=p->a->next2;p0!=NULL;p0=p0->next2)
{
printf("%s ",p0->name);
}
}
p=p->next; / p后移一个结点 /
printf("\n");
printf("\n");
}
}
//书本信息按书号排序
Book sort(Book head)
{
Book p1=NULL,p2=NULL,p3=NULL,min=NULL,min2=NULL,head2=head->next;
p1=head2;
while(p1->next!=NULL)
{
min=p2=p1; /把首结点作为最小值/
while(p2->next!=NULL)
{
if(strcmp(min->num,p2->next->num)>0) /首结点与下一结点比较/
{
min2=p2;
min=p2->next;
}
p2=p2->next;
}
if(min!=p1)
{
min2->next=min->next; /删除最小结点/
min->next=p1; /插入最小结点/
if(p1==head2) head2=min;
else p3->next=min; /p3为min前的结点指针/
p3=min;
}
else
{
p3=p1;
p1=p1->next;
}
}
head->next=head2;
return(head);
}
//储存书本信息
void save(Book head)
{
FILE fp,fp2;
Book p=NULL;
reader q=NULL;
fp=fopen("书本信息txt","wb"); //printf("不能打开文件!\n");
fp2=fopen("借阅信息txt","wb"); //printf("不能打开文件!\n");
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp); /逐个结点写文件/
for(q=p->a;q!=NULL;q=q->next2)
{fwrite(q,LEN3,1,fp2);}
p=p->next;
}
fclose(fp);
fclose(fp2);
}
//添加书本信息
void AddBook()
{
FILE fp,fp2;
Book addbook=NULL;
reader p0=NULL;
fp=fopen("书本信息txt","ab"); //追加方式打开文件
fp2=fopen("借阅信息txt","ab");
addbook=(Book )malloc(LEN);
printf("输入书本信息:\n");
printf("书号: "); scanf("%s",addbook->num);
printf("书名: "); scanf("%s",addbook->name);
printf("出版社: "); scanf("%s",addbook->concern);
printf("出版日期: "); scanf("%s",addbook->date);
printf("作者: "); scanf("%s",addbook->author);
printf("书本页数: "); scanf("%d",&addbook->page);
printf("书本价格(元): "); scanf("%d",&addbook->price);
p0=(reader )malloc(LEN3);
p0->next2=NULL;
addbook->a=p0;
addbook->imformation=10;
addbook->next=NULL;
fwrite(addbook,LEN,1,fp); /块写/
fwrite(p0,LEN3,1,fp2);
fclose(fp);
fclose(fp2);
}
//读取书本信息
Book read()
{
FILE fp,fp2;
Book p=NULL,p1=NULL,head=NULL;
reader p0=NULL,p2=NULL;
if((fp=fopen("书本信息txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
if((fp2=fopen("借阅信息txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n");
head=(Book )malloc(LEN);
fread(head,LEN,1,fp);
p1=head;
p0=(reader )malloc(LEN3);
fread(p0,LEN3,1,fp2);
p0->next2=NULL;
head->a=p0;
head->next=NULL;
p=(Book )malloc(LEN);
while(fread(p,LEN,1,fp)) /逐个结点读取/
{
p1->next=p;
p1=p1->next;
p0=(reader )malloc(LEN3);
p1->a=p0;
while(fread(p0,LEN3,1,fp2))
{
if(p0->next2==NULL)
{
p2=p0;
p0=(reader )malloc(LEN3);
break;
}
p2=p0;
p0=(reader )malloc(LEN3);
p2->next2=p0;
}
free(p0);
p2->next2=NULL;
p=(Book )malloc(LEN);
}
p1->next=NULL;
free(p);
fclose(fp);
fclose(fp2);
head=sort(head);
if(head!=NULL) return(head);
else
{
printf("文件为空!\n");
return 0;
}
}
//删除书本信息
void DelBook()
{
Book head=NULL,p=NULL,q=NULL;
char bookname[30];
head=read();
printf("输入要删除的书名: ");
scanf("%s",bookname);
p=head;
while(p!=NULL)/按名字查找要删除的图书/
{
if(strcmp(p->name,bookname)==0)
{
if(p==head)
{
head=head->next;
break;
}
else
{
q->next=p->next;
break;
}
}
q=p;
p=p->next;
}
save(head);
}
//管理员 *** 作
void manager()
{
int n,i=0,k=1;
while(k==1)
{
printf("\n");
printf(" 请选择你需要的 *** 作\n");
printf(" ◎ 1建立新的书本信息\n");
printf(" ◎ 2插入书本信息\n");
printf(" ◎ 3删除书本信息\n");
printf(" ◎ 4读取所有书本信息\n");
printf(" ◎ 5读取指定书本信息\n");
printf(" ◎ 6返回到上级目录\n");
printf(" ◎ 7保存并退出\n");
printf("请输入:");
scanf("%d",&n);
switch(n)
{
case 1: creatlist();break;
case 2: AddBook();break;
case 3: DelBook();break;
case 4: head=read();system("CLS");print(head);break;
case 5: system("CLS");Bookconsult();break;
case 6: k=0;break;
default: k=0;break;
}
}
}
//图书查询
void Bookconsult()
{
int n,m=1,sign=0;
Book p=NULL,p1=NULL,p0=NULL,head=NULL;
reader p2=NULL;
char a[30],b[20],c[20];
head=read();
while(m==1)
{
printf(" 请选择你查询书本的方式: 1按书名 2按书的编号 3按书的作者 4退出查询\n");
printf("输入=");
scanf("%d",&n);
switch(n)
{
case 1: printf("请输入书名:");
scanf("%s",a);
p0=head;
while(p0!=NULL)
{
if(strcmp(a,p0->name)==0)
{
printf("\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("没有这本书的信息\n");
break;
case 2: printf("请输入书的编号:");
scanf("%s",b);
p0=head;
while(p0!=NULL)
{
if(strcmp(b,p0->num)==0)
{
printf("\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
break;
}
else p0=p0->next;
}
if(p0==NULL) printf("没有这本书的信息\n");
break;
case 3: printf("请输入书的作者:");
scanf("%s",c);
p0=head;
while(p0!=NULL)
{
if(strcmp(c,p0->author)==0)
{
printf
("\n");
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation);
printf("借阅图书的人:");
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n");
else
{
for(p2=p0->a;(p2=p2->next2)!=NULL;)
{printf("%s ",p2->name);}
}
printf("\n");
sign=1;
p0=p0->next;
}
else p0=p0->next;
}
if(sign==0) printf("没有这本书的信息\n");
break;
default: m=0;break;
}
}
}
//借书
int Borrow()
{
char a[30],b[30],c;
Book p0=NULL,head=NULL;
reader p2=NULL,p3=NULL;
head=read();
printf("请输入要借的书的书号:");
scanf("%s",a);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(a,p0->num))==0)
{
if(p0->imformation>0)
{
printf("图书在馆,可以借出,是否确定借出?'y'or'n'\n");
c=getchar();
scanf("%c",&c);
if(c=='y')
{
printf("请再次输入你的用户名:");
scanf("%s",b);
p3=(reader )malloc(LEN3);
strcpy(p3->name,b);
if(p0->a->next2==NULL)
{
p0->a->next2=p3;
p3->next2=NULL;
}
else
{
for(p2=p0->a;p2->next2!=NULL;p2=p2->next2);
p2->next2=p3;
p3->next2=NULL;
}
--p0->imformation;
save(head);
printf(" *** 作完成,可以带走图书。\n");
return 1;
break;
}
else
{
return 0;
break;
}
}
else printf("很抱歉,该图书不在馆\n");return 0;break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("很抱歉,没有这本书。\n");
return 0;
}
else return 2;
}
//还书
int Return()
{
Book p0=NULL,head=NULL;
reader p2=NULL,p3=NULL;
char c[20],b[30];
head=read();
printf("请输入要还的书的书号:");
scanf("%s",&c);
p0=head->next;
while(p0!=NULL)
{
if((strcmp(c,p0->num))==0)
{
printf("请输入你的用户名:");
scanf("%s",&b);
if(p0->a->next2==NULL) {printf("你没有借这本书!\n");break;}
else
{
p3=p0->a;
p2=p3->next2;
while(p2!=NULL)
{
if(strcmp(p2->name,b)==0)
{
if(p2->next2==NULL) {p3->next2=NULL;free(p2);break;}
else
{
p3->next2=p2->next2;
free(p2);
break;
}
}
else
{
p3=p2;
p2=p2->next2;
}
}
if(p2==NULL) printf("你没有借这本书!\n");
}
++p0->imformation;
save(head);
printf("书已归馆, *** 作完成。\n");
return 1;
break;
}
else p0=p0->next;
}
if(p0==NULL)
{
printf("没有这本书。\n");
return 0;
}
else return 2;
}
//借书信息
void imformation()
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf("※ 欢迎你使用我们的图书管理系统!以下是本系统的有关说明: ※\n");
printf("※本系统主要功能是进行图书的有关管理,你可以进行图书信息的创建、插入、删除、 ※\n");
printf("※查询;在 *** 作中主要是以阿拉伯数字来选择相应的菜单功能,在选择时以'y'表示 '是' ※\n");
printf("※以'n'表示'不是'。在你 *** 作的时候就会有相应的 *** 作提示。 ※\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
}
main()
{
int n,k=1;
printf("\n");
printf("\n\n");
printf(" 欢迎进入我们的图书管理系统! \n");
printf("\n\n");
printf("\n");
while(k==1)
{
printf(" 请选择你的 *** 作: 1管理员 *** 作 2系统信息 3退出系统\n");
printf("\n");
printf(" 你的选择是:");
scanf("%d",&n);
system("CLS");
switch(n)
{
case 1: manager();break;
case 2: imformation();break;
default: printf("+++++++++++++++++++++++++++欢迎你再次使用我们的系统!++++++++++++++++++++++++++++\n");k=0;break;
}
}
}
根据你写得要求:
一、头文件file1h中放了一个函数申明语句。源文件中放了函数。
二、根据头文件的include语句解析字符串获取头文件名,与头文件默认路径(常量)组成文件路径。同字符串的匹配,找到在语句在源文件的位置,并读取头文件内容替换到源文件对应位置。
三、合并后的内容,我是写入新的文件中,如你想要覆盖同文件,自行修改路径常量。
#include <stdioh>
#include <malloch>
#include <stringh>
#define NN "C:\\newFilec"//合并后的文件完整路径
#define HPH "C:\\"//头文件的默认路径
int getFSize(char Path);//获取文件字节数,参数文件路径
char readHFile(char hPath);//获取头文件内容
char checkCFile(char cPath,char hcon);// 检查源文件,找到对应includ语句,替换成对应头文件内容,并保存到新的文件中
int findStr(char str1,char str2);//在str1中查找str2,返回str2在str1中对应的首尾字符下标
int main()
{
char newFile=NULL;
newFile=checkCFile("C:\\file1c","#include\"file1h\"");
if(newFile)
printf("合并成功,合并后的文件内容为(路径:%s):\n%s\n",NN,newFile);
else
printf("合并失败,无匹配内容\n");
free(newFile);
return 0;
}
int getFSize(char Path)
{
int fSize=0;
if(!Path) return 0;
FILE fp=NULL;
fp=fopen(Path,"r");
if(!fp) return 0;
fseek(fp,0,SEEK_END);
fSize=ftell(fp);
fclose(fp);
return fSize;
}
char checkCFile(char cPath,char hcom)
{
int i=0,inx=NULL,fSize=0,hfnLen=0,hPLen=0,len=0;
char fcon=NULL,hcon=NULL,newfcon=NULL,hPath=NULL,pb=hcom,pe=pb,hfn=NULL;
if(!cPath || !hcom) return NULL;
FILE fp=NULL;
fp=fopen(cPath,"rb+");//这里不要要用r,避免下面计算大小误差
if(!fp) return 0;
if(!(fSize=getFSize(cPath))) return NULL;
printf("源文件大小:%d字节\n",fSize);
fcon=(char )malloc(sizeof(char)(fSize+1));
if(!fcon) return 0;
fcon[fSize]=0;
//fseek(fp,0,SEEK_SET);
if(fread(fcon,1,fSize,fp)!=fSize) return NULL;
printf("源文件内容为:\n%s\n",fcon);
if(!(inx=findStr(fcon,hcom))) return NULL;//将找到的匹配内容所在下标保存在inx指向地址
fclose(fp);
//----通过include语句获取头文件文件名---
while(pb!='"')pb++;
pb++,pe=pb;
while(pe!='"')pe++;
hfnLen=pe-pb;
hfn=(char )malloc(sizeof(char)(hfnLen+1));
if(!hfn)return NULL;
hfn[hfnLen]=0;
while(pb<pe)hfn[i++]=pb,pb++;
//----------------------------------------
hPLen=hfnLen+strlen(HPH);
hPath=(char )malloc(sizeof(char)(hPLen+1));
strcpy(hPath,HPH);
strcat(hPath,hfn);
hPath[hPLen]=0;
hcon=readHFile(hPath);//获得头文件对应内容
//----合并两个文件内容到新的数组,释放原数组---
len=fSize-strlen(hcom)+strlen(hcon);
newfcon=(char )malloc(sizeof(char)(len+1));
if(!newfcon) return NULL;
newfcon[0]=0;
fcon[inx[0]]=0;
pb=fcon;
strcpy(newfcon,pb);
pb=hcon;
strcat(newfcon,pb);
pb=&fcon[inx[1]+1];
strcat(newfcon,pb);
newfcon[len]=0;
free(fcon);
free(hcon);
free(hfn);
//----------------------------------------------
//-------------写入新文件-----------------------
fp=fopen(NN,"w");
if(!fp) return NULL;
fwrite(newfcon,1,strlen(newfcon),fp);
fclose(fp);
//---------------------------------------------
return newfcon;
}
char readHFile(char hPath)
{
int fSize=0;
char hcon=NULL;
FILE fp=NULL;
fp=fopen(hPath,"rb+");
if(!fp)return NULL;
if(!(fSize=getFSize(hPath)))return NULL;
printf("头文件大小:%d字节\n",fSize);
hcon=(char )malloc(sizeof(char)(fSize+1));
if(!hcon) return NULL;
hcon[fSize]=0;
if(fread(hcon,1,fSize,fp)!=fSize) return NULL;
printf("头文件内容为:\n%s\n",hcon);
fclose(fp);
return hcon;
}
int findStr(char str1,char str2)
{
char p0=NULL,p1=NULL;
int i,cnt=0,len1,len2;
static int inx[2];//str2首尾字符在str1中的对应下标
if(!str1 || !str2) return NULL;
inx[0]=inx[1]=0;
len1=strlen(str1);
len2=strlen(str2);
for(i=0;i<len1;i++)
{
cnt=0,p0=&str1[i],p1=p0+len2-1;
//每次搜索,先用p0,p1定位str2的在str1中的首尾位置,进行字符对比,再两指针向内收缩比较
if(p0!=str2[cnt] || p1!=str2[len2-1-cnt]) continue;
cnt++,p0++,p1--;
while(p0<=p1)
{
if(p0!=str2[cnt] || p1!=str2[len2-1-cnt]) break;//只要一对字符不匹配,跳过本次对比
cnt++,p0++,p1--;
}
if(p0>p1)//没有跳过说明本次完全匹配,记录首尾位置
{
inx[0]=i,inx[1]=i+len2-1;
return inx;
}
}
return NULL;
}
admin
123456
int insert(int);//添加书籍
int search(int d);//书籍查找
void chaxun(int);//查询
void main1();//书籍查询界面
void shezhi();//界面设置
void know();//用户须知
void bye();//结束界面
void jie();//借书
void huan();//还书
int syhyk(double k);//使用会员卡
double jisuan(int k);//计算费用
void check(int k);//月年日合法性
int findid(int d);//办理借阅手续
int del();//删除书籍
int huiyuan(int);//会员功能界面
int tianjia(int m);//添加会员
int jiancha(int temp);//会员卡号检查
void srmima(int m);//输入密码
void srsfz(int m);//输入身份z
void chaxunhuiyuan(int m);//查询会员
void help();//软件帮助
struct members{
int mid;//会员卡号
char name[20];//姓名
char idcard[19];//身份z
char mima[7];
char address[50];
int sfjie;//是否借书
}member[N];
struct books{
int bookid;
char bookname[30];
char writer[10];
int zhuangtai;
int year,month,day;
}book[N]={
{10001,"C语言","谭浩强",1,0,0,0},
{10002,"C++","不详",1,0,0,0},
{10003,"诛仙","不详",1,0,0,0},
{10004,"佛公子","不详",1,0,0,0},
{10005,"鬼律师","不详",1,0,0,0},
{10006,"PHP编程","不详",1,0,0,0},
{10007,"C#编程","不详",1,0,0,0}
};
void main()
{
int m,d,i=7,mem=0;
system("color 0e");//调用颜色函数
jiemian();
printf("\n\n\n\n\n\n");
printf("\t 按ENTER继续");
fflush(stdin);
getchar();
system("cls");//清屏,等于在DOS上使用cls命令
administrator();
do{
system("cls");
starmain();
scanf("%d",&m);
switch(m)
{
case 1:system("cls");
i=insert(i);
break;
case 2:system("cls");
chaxun(i);
break;
case 3:system("cls");
jie();
break;
case 4:system("cls");
huan();
break;
case 5:system("cls");
d=del();
if(d==0)
{
printf("\n\n\t 无法删除,没找到此书或此书已经借出!");
fflush(stdin);
getchar();
}
else if(d==1)
{
i--;
printf("\n\n\t 删除成功!");
fflush(stdin);
getchar();
}
break;
case 6:system("cls");
mem=huiyuan(mem);
break;
case 0:system("cls");
shezhi();
break;
case 7:system("cls");
help();
fflush(stdin);
getchar();
break;
case 8:system("cls");
bye();
}
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\t *** 作结束,按 ENTER 回到主菜单");
fflush(stdin);
getchar();
}while(1);
}
void administrator()
{
char id[12],mima[6];
int n,k;
for(k=0;k<3;k++)
{
system("cls");
printf("\n\n\n\n\n\n\t 要进入管理系统请先输入管理员帐号和密码\n\n");
printf("\n\t 请输入管理帐号:");
fflush(stdin);
gets(id);
printf("\n\t 请输入管理密码:");
for(n=0;n<6;n++)
{
fflush(stdin);
mima[n]=getch();//从控制台无回显地取一个字符
printf("");
}
mima[n]='\0';
fflush(stdin);
getchar();
if(!strcmp(id,"admin")&&!strcmp(mima,"123456"))
break;
else
{
system("cls");
if(k==2)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\t\t很抱歉,您输入次数超过3次,按任意键将退出系统");
fflush(stdin);
getchar();
system("cls");
bye();
break;
}
printf("\n\n\n\n\n\n\n\n\t\t 用户名或密码错误,请重新输入!");
fflush(stdin);
getchar();
}
}
}
void star()
{
printf("\t ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t ┃┏ ┓┃\n");
printf("\t ┃ ┃\n");
printf("\t ┃ ┃\n");
printf("\t ┃ 图 书 管 理 系 统 ┃\n");
printf("\t ┃ ┃\n");
printf("\t ┃ ┃\n");
printf("\t ┃ 无聊工作室制作 ┃\n");
printf("\t ┃ ┃\n");
printf("\t ┃┗ ┛┃\n");
printf("\t ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
int insert(int i)
{
char a;
int d,k;
for(i=i;i<9999;i++)
{
system("cls");
printf("\n\n\n\t ┏━━━━━━━━━━━━━添加新书━━━━━━━━━━━━┓\n\n\n");
printf("\t 请输入书籍编号:");
fflush(stdin);
scanf("%d",&d);
k=search(d);
if(k==1)
{
book[i]bookid=d;
printf("\n\n\t 请输入书籍名:");
fflush(stdin);
gets(book[i]bookname);
printf("\n\n\t 请输入书的作者名:");
fflush(stdin);
gets(book[i]writer);
fflush(stdin);
book[i]zhuangtai=1;
printf("\n\n\n\t ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\t 是否还要继续添加新书(y/n):");
fflush(stdin);
a=getchar();
if(a=='n'||a=='N')
break;
}
else
i--;
}
return i+1;
}
void huan()
{
char a;
double money,p;
int k,d,f=1;
system("date/t");
printf("\n\n\t┏━━━━━━━━━━━━━━还 书━━━━━━━━━━━━━━┓");
printf("\n\n\n\t 请输入您要还书的编号:");
scanf("%d",&d);
for(k=0;k<10000;k++)
{
if(d==book[k]bookid&&book[k]zhuangtai==0)
{
printf("\n\n\t编号\t书名\t\t作者\t状态\t借出日期\n\n");
printf("\t%d\t%s\t\t%s\t%d\t%d-%d-%d\n",book[k]bookid,book[k]bookname,book[k]writer,book[k]zhuangtai,book[k]year,book[k]month,book[k]day);
money=jisuan(k);
printf("\n\n\t 您是否使用会员卡(y/n):");
fflush(stdin);
a=getchar();
if(a=='y'||a=='Y')
{
p=syhyk(money);
if(p==0)
{
printf("\n\n\t 没找到该会员卡号,或着您输入错误,请重新办理还书手续!");
fflush(stdin);
getchar();
f=3;
break;
}
if(p==1)
{
book[k]zhuangtai=1;
book[k]year=0;book[k]month=0;book[k]day=0;
f=1;
break;
}
}
printf("\n\n\t 您需要支付%2f元,谢谢光临!",money);
printf("\n\t 押金除去租书费用归,还付你%2f元",10-money);
book[k]zhuangtai=1;
book[k]year=0;book[k]month=0;book[k]day=0;
fflush(stdin);
getchar();
printf("\n\n\t 还书成功!");
f=1;
fflush(stdin);
getchar();
break;
}
else
f=0;
}
if(f==0)
{
printf("\n\n\t 没找到这本书的编号,或该书没被借阅,请确定是否输入错误!");
fflush(stdin);
getchar();
}
}
int syhyk(double k)
{
int d,j,i,p;
char a[7];
printf("\n\n\t 请输入您的会员卡卡号:");
scanf("%d",&d);
for(j=0;j<10000;j++)
{
if(d==member[j]mid)
{
printf("\n\n\t 请输入您的密码:");
for(i=0;i<6;i++)
{
fflush(stdin);
a[i]=getch();
printf("");
}
fflush(stdin);
getchar();
a[6]='\0';
if(strcmp(a,member[j]mima)==0)
{
printf("\n\n\t 谢谢使用会员服务,你只需要支付%2f元",k08);
member[j]sfjie--;
printf("\n\n\t 还书成功,谢谢光临!");
fflush(stdin);
getchar();
p=1;
break;
}
}
else
p=0;
}
return p;
}
double jisuan(int k)
{
int y,m,r;
double money=0;
printf("\n\n\t 请输入还书日期(年-月-日):");
scanf("%d-%d-%d",&y,&m,&r);
m=m;
r=r;
if(y==book[k]year&&m==book[k]month&&r>=book[k]day)
{
money=(r-book[k]day+1)05;
}
else if(y==book[k]year&&m>book[k]month)
{
if(book[k]month<=2&&m>2)
money=((m-book[k]month)30+r-book[k]day-2+1)05;
else
money=((m-book[k]month)30+r-book[k]day+1)05;
}
else if(y>book[k]year)
money=((y-book[k]year)365+(m-book[k]month)30+r-book[k]day+1)05;
else
{
printf("\n\n\t 您日期输入错误,请重新输入");
jisuan(k);
}
return money;
}
int search(int d)
{
int k,p=1;
for(k=0;k<10000;k++)
if(d==book[k]bookid)
{
p=0;
printf("\n\n\n\n\t 你输入书籍编号已经存在!");
fflush(stdin);
getchar();
break;
}
return p;
}
void starmain()
{
printf("系统日期:");
system("date/t");//调用年月日函数
printf("系统时间:");
system("time/t");//时间调用函数
printf("\n\t 无聊工作室欢迎您使用图书管理系统 \n\n");
printf("\t ┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t ┃ ┃\n");
printf("\t ┃ 菜 单 ┃\n");
printf("\t ┃ ┃\n");
printf("\t ┣━━━━━━━━━━━━┳━━━━━━━━━━━┫\n");
printf("\t ┃ ⑴ 添加新书 ┃ ⑵ 查询书籍 ┃\n");
printf("\t ┣━━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printf("\t ┃ ⑶ 借 书 ┃ ⑷ 还 书 ┃\n");
printf("\t ┣━━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printf("\t ┃ ⑸ 删除书籍 ┃ ⑹ 会员服务 ┃\n");
printf("\t ┣━━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printf("\t ┃ ⑺ 软件帮助 ┃ ⑻ 退出系统 ┃\n");
printf("\t ┣━━━━━━━━━━━━┻━━━━━━━━━━━┫\n");
printf("\t ┃ 无聊工作室制作 ┃\n");
printf("\t ┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n\t 请选择服务项目(1~8):");
}
void chaxun(int i)
{
int m,k,quit=1;
do{
system("cls");
main1();
fflush(stdin);
scanf("%d",&m);
switch(m)
{
case 1:
system("cls");
printf("\n\n ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵所有书籍详细资料∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴\n\n");
printf("\t编号\t书名\t\t作者\t状态\t借出日期\n\n");
for(k=0;k<i;k++)
printf("\t%d\t%s\t\t%s\t%d\t%d-%d-%d\n",book[k]bookid,book[k]bookname,book[k]writer,book[k]zhuangtai,book[k]year,book[k]month,book[k]day);
break;
case 2:
system("cls");
printf("\n\n ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵查看借出书籍∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴\n\n");
printf("\t编号\t书名\t\t状态\t借出日期\n\n");
for(k=0;k<i;k++)
if(book[k]zhuangtai==0)
printf("\t%d\t%s\t\t%d\t%d-%d-%d\n",book[k]bookid,book[k]bookname,book[k]zhuangtai,book[k]year,book[k]month,book[k]day);
break;
case 3:
system("cls");
printf("\n\n ∵∴∵∴∵∴∵∴∵∴∵∴∵∴∵查看未借书籍∵∵∴∵∴∵∴∵∴∵∴∵∴∵∴\n\n");
printf("\t编号\t书名\t\t状态\t\n\n");
for(k=0;k<i;k++)
if(book[k]zhuangtai==1)
printf("\t%d\t%s\t\t%d\n",book[k]bookid,book[k]bookname,book[k]zhuangtai);
break;
case 4:
system("cls");
quit=0;
break;
default:system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\t 输入错误,请重新输入!");
fflush(stdin);
getchar();
break;
}
if(quit!=0)
{
printf("\n\n\n\n\n\n\t 按ENTER返回目录");
fflush(stdin);
getchar();
}
}while(quit);
}
void jie()
{
char h;
int d,m=1;
system("cls");
printf("\n\n\t┏━━━━━━━━━━━━━━借 书━━━━━━━━━━━━━━┓");
know();
printf("\n\n\t =====>请按Y确认继续,按其他结束:");
fflush(stdin);
h=getchar();
if(h=='y'||h=='Y')
{
printf("\n\n\n\t 请输入您要借阅的书籍编号:");
fflush(stdin);
scanf("%d",&d);
m=findid(d);
if(m==0)
{
printf("\n\n\t 借阅不成功,没找到此书或此书以借出!");
fflush(stdin);
getchar();
}
else if(m==2)
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\t您的会员卡卡号没有登记,请先办理会员卡再进行会员服务,谢谢合作!");
fflush(stdin);
getchar();
}
else
m=1;
}
else
getchar();
}
int findid(int d)
{
int k,m=1,h,j,i;
char p;
char a[7];
for(k=0;k<10000;k++)
{
if(book[k]bookid==d&&book[k]zhuangtai)
{
printf("\n\n\t编号\t书名\t\t作者\t状态\n\n");
printf("\t%d\t%s\t\t%s\t%d\n",book[k]bookid,book[k]bookname,book[k]writer,book[k]zhuangtai,book[k]year,book[k]month);
printf("\n\t 本书未被借阅,请确定是否借阅(y/n):");
fflush(stdin);
p=getchar();
if(p=='y'||p=='Y')
{
printf("\n\n\t 您是否使用会员卡办理借阅手续(y/n):");
fflush(stdin);
p=getchar();
if(p=='y'||p=='Y')
{
printf("\n\n\t 请输入您的会员卡卡号:");
scanf("%d",&h);
for(j=0;j<100;j++)
{
if(h==member[j]mid)
{
printf("\n\n\t 请输入您的密码:");
for(i=0;i<6;i++)
{
fflush(stdin);
a[i]=getch();
printf("");
}
fflush(stdin);
getchar();
a[6]='\0';
if(strcmp(a,member[j]mima)==0)
{
member[j]sfjie++;
check(k);
printf("\n\n\t 使用会员卡借阅成功,谢谢光临,请您爱护好书籍!");
fflush(stdin);
getchar();
book[k]zhuangtai=0;
m=1;
break;
}
else
{
printf("\n\n\t 您密码输入都错误,请退出!");
fflush(stdin);
getchar();
jie();
}
}
else
{
m=2;
break;
}
}
}
else
{ printf("\n\n\t 请付10元/本的押金,还书时候退还。谢谢合作");
check(k);
printf("\n\n\t 借阅成功,谢谢光临,请您爱护好书籍!");
fflush(stdin);
getchar();
book[k]zhuangtai=0;
m=1;
break;
}
}
if(m==2)
{
m=2;
break;
}
else
{
m=3;
break;
}
}
else
m=0;
}
return m;
}
void check(int k)
{
int y,m,d,i;
printf("\n\n");
printf("\t\t系统日期:");
system("date/t");
printf("\n\t 请输入日期(年-月-日):");
fflush(stdin);
scanf("%d-%d-%d",&y,&m,&d);
if(m<1||m>12)
{
printf("\n\n\t 日期输入错误,请重新输入\n");
check(k);
}
if((y%4==0&&y%100!=0)||(y%400==0)&&(m==1||m==2))
{
switch(m)
{
case 1:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else i=1;
break;
case 2:if(d>=1&&d<=29)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
}
}
else
{
switch(m)
{
case 1:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 2:if(d>=1&&d<=28)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 3:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 4:if(d>=1&&d<=30)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 5:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 6:if(d>=1&&d<=30)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 7:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 8:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 9:if(d>=1&&d<=30)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 10:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 11:if(d>=1&&d<=30)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
case 12:if(d>=1&&d<=31)
{
book[k]year=y;
book[k]month=m;
book[k]day=d;
}
else
i=1;
break;
}
}
if(i==1)
{
printf("\n\n\t 日期输入错误,请重新输入\n");
check(k);
}
}
int del()
{
int s,k,j,m,d;
char g;
printf("\n\n\t┏━━━━━━━━━━━━━删除书籍━━━━━━━━━━━━━┓");
printf("\n\n\n\t 请输入要删除的书籍编号:");
fflush(stdin);
scanf("%d",&s);
for(k=0;k<100;k++)
{
if(book[k]bookid==s&&book[k]zhuangtai==1)
{
printf("\n\n\t 此书信息如下:\n\n");
printf("\t编号\t书名\t\t作者\t状态\t借出日期\n");
printf("\t%d\t%s\t\t%s\t%d\t%d-%d-%d\n",book[k]bookid,book[k]bookname,book[k]writer,book[k]zhuangtai,book[k]year,book[k]month,book[k]day);
printf("\n\n\t 您确定要删除该书吗(y/n):");
fflush(stdin);
g=getchar();
if(g=='y'||g=='Y')
{
for(j=0;j<100;j++)
{
if(s==book[j]bookid)
{
for(m=j;m<100;m++)
book[m]=book[m+1];
}
}
d=1;
break;
}
else
{
d=2;
break;
}
}
else
d=0;
}
return d;
}
void main1()
{
printf("\n\n\n\n\t ┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t ┃ ┃\n");
printf("\t ┃ 查 询 菜 单 ┃\n");
printf("\t ┃ ┃\n");
printf("\t ┣━━━━━━━━━━━━┳━━━━━━━━━━━┫\n");
printf("\t ┃ ⑴ 查看所有书籍 ┃ ⑵ 查看借出书籍 ┃\n");
printf("\t ┣━━━━━━━━━━━━╋━━━━━━━━━━━┫\n");
printf("\t ┃ ⑶ 查看未借书籍 ┃ ⑷ 返回上级目录 ┃\n");
printf("\t ┃ ⑶ 修改会员密码 ┃ ⑷ 退会办理 ┃\n");
printf("\t ┣━━━━━━━━━━━━┻━━━━━━━━━━━┫\n");
printf("\t ┃ ⑸ 返回上级目录 ┃\n");
printf("\t ┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n\n\n\n\n\n\n\t 请选择:");
fflush(stdin);
scanf("%d",&h);
switch(h)
{
case 1:system("cls");
m=tianjia(m);
break;
case 2:system("cls");
chaxunhuiyuan(m);
break;
case 3:system("cls");
printf("\n\n
以上就是关于用c语言编写一个linux程序:通过find一个文件名,系统给一个路径,然后用c语言展开这个路径全部的内容,包括:用c语言编写一个linux程序:通过find一个文件名,系统给一个路径,然后用c语言展开这个路径、怎么用C语言编程遍历文件夹下所有文件名、c语言课程设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)