这是我大二时上c语言课程的课程设计。程序基本功能:1添加文件2删除文件3全部文件列表4修改文件摘要5按关键词查找文件程序注释完全,可以按照步骤提示一步一步运行。当然由于水平有限程序有不少bug,不过基本功能实现了。希望能帮到需要的童鞋。两外程序可以直接运行的。如果赋值程序到VC++6.0环境下,中文及注释变成了问号。可以发消息联系我,发给亲们源文件。//Search.cpp:Definestheentrypointfortheconsoleapplication.//通信081//最后链表写入后没有添加释放内存语句//list时最后文件总是输出两遍/*添加文件时注意添加到@之前已修正*///2010/08/03最后修改到Delet函数//2010/08/05list函数有bug已修正//2010/08/05修改到SearchKeys()//08-06连续添加文件时第一个以后的.abs文件中写入不了内容解决//小的bug有待纠正//2010/08/05基本修改完成没有美化界面//过期文件没有删除的提醒***********************************//搜索关键词时同一文件中重复出现一个关键词输出也重复//2010/08/07重复修改文件摘要时有错#includestdafx.h#includestdio.h#includestring.h#includestdlib.h#includetime.h#includectype.h#defineZ创建时间:#defineMAX20structNameOfText{charname[MAX];structNameOfText*next;};//程序开始读入文件名structtm*stm;voidWucan();structNameOfText*AddFile(structNameOfText*);//加入文件structNameOfText*DelFile(structNameOfText*);//删除文件structNameOfText*ListFile(structNameOfText*);//文件列表structNameOfText*ReviseFile(structNameOfText*);//修改文件structNameOfText*SearchKeys(structNameOfText*);//搜索关键词voidTimeDelay();voidEXIT();voidEXIT1();voidmenu();intFirstCheck();structNameOfText*DuChu(structNameOfText*);structNameOfText*XieRu(structNameOfText*);voidRelease(structNameOfText*);structNameOfText*head=NULL;charstr[15],str1[15],str2[15];//str装文件名,str1装加了txt后缀的文件名,str2装加了abs后缀的文件名charsstr1[5][15];//sstr1用来存放参数传递的关键词intMonth,Day;charmonth[3],day[3];voidmain(){intm;//m为循环变量chartemp[3];time_tnow;now=time(NULL);stm=localtime(&now);/**********************把int转换为string********************/Month=stm-tm_mon+1;Day=stm-tm_mday;itoa(Month,month,10);itoa(Day,day,10);if(Month10){strcpy(temp,month);month[0]='0';month[1]='\0';strcat(month,temp);}if(Day10){strcpy(temp,day);day[0]='0';day[1]='\0';strcat(day,temp);}/*********************把int转换为string********************/intnum,L=0;//num为菜单选项标号l控制是否退出系统printf(\n\n\n);printf(**********************\n);printf(**\n);printf(*欢迎使用科技查询!*\n);printf(**\n);printf(**********************\n\n\n\n);printf(Usage:\n);printf(程序具有以下功能:\n\n);printf(1添加文献\n);printf(2删除文献\n);printf(3全文献列表\n);printf(4修改文献摘要\n);printf(5按关键词查找\n\n);printf(运行时请按照提示操作!\n\n);printf(********************************************************************************\n);printf(请按Enter进入程序菜单列表\n);getchar();system(cls);FirstCheck();/*检查PageBase是否存在*/head=DuChu(head);/*读出文件名*/for(m=0;;m++){menu();printf(\n请选择菜单序号:);scanf(%d,&num);while(getchar()!='\n');switch(num){case1:head=AddFile(head);break;case2:head=DelFile(head);break;case3:head=ListFile(head);break;case4:head=ReviseFile(head);break;case5:head=SearchKeys(head);break;case6:EXIT();default:printf(Wronginput!\nThenumbertochooserangefrom1to6!\n);getchar();}system(cls);//printf(正在回到主菜单...\n\n);//TimeDelay();//system(cls);}EXIT();}/*******************************************************************************************/intFirstCheck(){FILE*fp;if((fp=fopen(PageBase.txt,r))==NULL){printf(您是第一次使用科技查询系统!下面将为您创建文件名库PageBase.\n\n请稍后...);TimeDelay();fp=fopen(PageBase.txt,w);fputs(@,fp);fclose(fp);printf(\n\n文件名库PageBase创建成功!请按Enter键退出,重新启动程序!\n);getchar();EXIT1();return1;}elsereturn0;}/*******************************************************************************************/structNameOfText*DuChu(structNameOfText*head){FILE*fp;chars[20];structNameOfText*tempnode;structNameOfText*temp;head=temp=(structNameOfText*)malloc(sizeof(structNameOfText));head-next=NULL;fp=fopen(PageBase.txt,r);fgets(s,20,fp);strcpy((*temp).name,s);for(;(!feof(fp));){fgets(s,20,fp);//读取文件名tempnode=(structNameOfText*)malloc(sizeof(structNameOfText));temp-next=tempnode;strcpy((*tempnode).name,s);temp=tempnode;(*temp).next=NULL;}fclose(fp);returnhead;}/*******************************************************************************************/structNameOfText*XieRu(structNameOfText*head){FILE*fp;chars[20];structNameOfText*temp=head;fp=fopen(PageBase.txt,w);while(temp!=NULL){strcpy(s,(*temp).name);fputs(s,fp);temp=temp-next;}fclose(fp);returnhead;}/******************************************************************************************/voidRelease(structNameOfText*head){structNameOfText*temp;while(head-next!=NULL){temp=head;head=head-next;free(temp);}free(head);}/******************************************************************************************/structNameOfText*AddFile(structNameOfText*head){FILE*fp1,*fp2,*fp3,*fp;//fp1指向txt文件,fp2指向abs文件,fp3指向PageBase.txtintc=0,L=0,b,i,a;//计算txt文件中前50个单词charch,s[20];//ch用来向txt文件中写内容structNameOfText*temp;structNameOfText*temp1;structNameOfText*temp2;structNameOfText*temp3;do{b=0;c=0;temp=head;temp1=head;for(i=0;i20;i++)s[i]=0;printf(请输入待添加的文件名:\t\t例如:wang\n);gets(str);strcpy(str1,str);strcpy(str2,str);strcat(str1,.txt);//在文件名后加.txt,赋给str1strcat(str2,.abs);//在文件名后加.abs,赋给str2/***************************用链表判断将要创建的文件是否存在*************************/while(temp!=NULL){strcpy(s,(*temp).name);s[strlen(s)-1]=0;a=strcmp(s,str);if(a==0){b=1;break;}elsetemp=temp-next;}if(b==1){printf(\n该文件已存在!\n\n\n);gotoloop;}/***********************************判断结束*************************