记事本程序C语言1.docx
- 文档编号:9493485
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:31
- 大小:20.63KB
记事本程序C语言1.docx
《记事本程序C语言1.docx》由会员分享,可在线阅读,更多相关《记事本程序C语言1.docx(31页珍藏版)》请在冰豆网上搜索。
记事本程序C语言1
#include
#include
#include
#include
#include
#include
#definehh70//设置自动换行的位置
charfile_name_now[100];//全局保存加载文件路径
typedefstructchar_node//结点,date存储字符数据,c存储汉字、英文识别码..汉字为1,英文为0
{
chardate;
intc;
structchar_node*next;//保存下一结点地址
structchar_node*up;//保存上一结点地址
}node;
typedefstructxy_node//x保存换行的位置
{
intx;
structxy_node*next;
structxy_node*up;
}xy;
time_tnow;//实例化time_t结构
structtm*timenow;
voidgotoxy(intx,inty)//自定义函数,跳转光标。
{
COORDpos={x,y};
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
}
voidwherexy(int*x,int*y)//自定义函数,获取光标当前位置。
{
HANDLEh1;
CONSOLE_SCREEN_BUFFER_INFOscrInfo;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(h1,&scrInfo);
*x=scrInfo.dwCursorPosition.X;
*y=scrInfo.dwCursorPosition.Y;
}
charmain_win()//主界面选择函数
{
charchoose;
system("ifnotexistC:
\\我的记事本mdC:
\\我的记事本");
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t记事本\n");
printf("\t\t\t****************************\n\n");
printf("\t\t\t1.新建我的记事本\n\n");
printf("\t\t\t2.加载我的记事本\n\n");
printf("\t\t\t3.删除我的记事本\n\n");
printf("\t\t\t4.退出记事本程序\n\n");
printf("\t\t\t*请输入你的选择:
\n\n\t\t\t\t");
scanf("%s",&choose);
returnchoose;
}
voidnew_file_win()//新建记事本
{
intflag;
FILE*fp;
FILE*date;
chartxt[5]=".txt";
charinput[30];
charre[30];
voidnew_file();
for(flag=0;flag==0;)
{
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t新记事本\n");
printf("\t\t\t****************************\n\n");
strcpy(re,"c:
\\我的记事本\\");
printf("\t\t\t*请输入记事本名称:
\n\t\t\t");
scanf("%s",input);
strcat(re,input);
strcat(re,txt);
if((fp=fopen(re,"rb"))!
=NULL)
{
printf("\n\n\n\t\t-----------------------\n\t\t新记事本和原有记事本名称重复,请重新命名!
\n\t\t\t");
fclose(fp);
system("pause");
flag=0;
}
else
{
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t新记事本\n");
printf("\t\t\t****************************\n\n");
fp=fopen(re,"ab+");
printf("\t\t\t已创建记事本:
%s\n\n\t\t\t",re);
flag=1;
fclose(fp);
system("pause");
}
}
strcpy(file_name_now,re);
new_file();
}
voidnew_file()//新记事本编辑
{
FILE*fp;
node*h,*p,*s;//p指向当前节点的前一个节点,s指向当前节点
xy*h1,*p1,*s1;//存储光标位置
intx,y,x_temp=0;//光标坐标x_temp用于自动换行
intc[2],hz[3];//存储用户即时输入的字符
intflag=0,flag_hz=0;//flag_hz标记获取的字符是汉字还是英文
charempty='\0';
inthuanhang=10;//换行
system("cls");
time(&now);
timenow=localtime(&now);
printf("*打开记事本时间:
%s*当前记事本:
%s\t\tENTER:
换行ESC:
退出、保存\n",asctime(timenow),file_name_now);
printf("----------------------------------------\n");
if((fp=fopen(file_name_now,"ab+"))==NULL)
{
printf("不能连接%s\n",file_name_now);
system("pause");
return;
}
if((h=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
h->date='\0';
h->c=0;
h->next=NULL;
h->up=NULL;
p=h;
if((h1=(xy*)malloc(sizeof(xy)))==NULL)//创建存储x轴坐标的链表
{
printf("不能分配内存!
\n");
system("pause");
return;
}
h1->x=0;
h1->next=NULL;
h1->up=NULL;
p1=h1;
while(c[0]!
=27)//监测ESC键--退出保存
{
c[0]=getch();
if(x_temp==(hh-1)||x_temp>=hh)//这里是汉字换行的关键,防止汉字的两个字节分别存储在两行上
{
if(!
(x_temp==(hh-1)&&flag_hz==1))
{
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->date=10;
s->c=0;
s->next=NULL;
s->up=p;
p=s;
printf("%c",s->date);
if((s1=(xy*)malloc(sizeof(xy)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p1->next=s1;
s1->x=x_temp;
s1->next=NULL;
s1->up=p1;
p1=s1;
x_temp=0;
}
}
if(c[0]==13)//监测回车--把回车改为换行,并保存
{
c[0]=10;
wherexy(&x,&y);
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->date=c[0];
s->c=0;
s->next=NULL;
s->up=p;
p=s;
printf("%c",10);
x_temp=0;
if((s1=(xy*)malloc(sizeof(xy)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p1->next=s1;
s1->x=x;//记录回车时的位置
s1->next=NULL;
s1->up=p1;
p1=s1;
}
elseif(c[0]==0xE0)//监测方向键等扩展键,可插入字符(可扩展很多功能,待实现。
。
)
{
c[0]=getch();
continue;
}
elseif(c[0]==8)//删除字符功能模块----监测退格键----取消前面输入的字符(靠这里实现两个字节的汉字和一个字节的英文都是按一下消除)
{
wherexy(&x,&y);
if(s->up!
=NULL)//防止退过链表域
{
if(s->date==10)//检测回车
{gotoxy((p1->x)+1,y-1);p1=s1->up;s1=p1;}
if(s->c==0)
{
p=s;
p->date='\0';
s=p->up;
printf("%c",8);
printf("%c",32);
printf("%c",8);
if(x_temp>=0)
{x_temp--;}
}
else
{
if(s->up->up!
=NULL)
{
p=s;
p->date='\0';
s=p->up;
p=s;
p->date='\0';
s=p->up;
printf("%c",8);
printf("%c",32);
printf("%c",8);
printf("%c",8);
printf("%c",32);
printf("%c",8);
if(x_temp>=1)
{x_temp=x_temp-2;}
}
}
}
}
else//文字输入,区分汉字与英文字符(并用flag_hz标记)
{
if(flag_hz==1)
{
printf("%c",c[0]);
flag_hz=0;
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->date=c[0];
s->c=1;
s->next=NULL;
s->up=p;
p=s;
x_temp++;
continue;
}
if(c[0]<=128)
{
c[1]='\0';
printf("%s",c);
flag_hz=0;
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->c=0;
s->date=c[0];
s->next=NULL;
s->up=p;
p=s;
x_temp++;
}
else
{
flag_hz=1;
printf("%c",c[0]);
x_temp++;
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->date=c[0];
s->c=1;
s->next=NULL;
s->up=p;
p=s;
}
}
}
rewind(fp);
p=h;
while(p->next!
=NULL)//把链表中的文本数据存入文件
{
s=p->next;
c[0]=s->date;
fputc(c[0],fp);
p=s;
}
p1=h1;
while(p1->next!
=NULL)//把链表中的数据存入文件
{
s1=p1->next;
x=s1->x;
fputc(x,fp);
p1=s1;
}
fclose(fp);
printf("\n--------\n保存成功!
\n");
system("pause");
}
voidload_file_win()//加载记事本
{
voidload_file();
FILE*fp;
intflag=0;
chartxt[5]=".txt";
charinput[30];
charre[30];
for(flag=0;flag==0;)
{
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t加载记事本\n");
printf("\t\t\t****************************\n\n");
strcpy(re,"C:
\\我的记事本\\");
printf("\t\t\t*已保存的记事本:
\n");
printf("----------------------------------------\n");
system("dir/bC:
\\我的记事本");
printf("----------------------------------------\n");
printf("\t\t\t\n*请输入记事本名称:
");
scanf("%s",input);
strcat(re,input);
strcat(re,txt);
if((fp=fopen(re,"rb"))==NULL)
{
printf("\n\n\n------------\n没有该记事本,请重试!
\n");
system("pause");
flag=0;
}
else
{
fclose(fp);
strcpy(file_name_now,re);
flag=1;
load_file();
}
}
}
voidload_file()
{
FILE*fp;
node*h,*p,*s;//p指向当前节点的前一个节点,s指向当前节点
xy*h1,*p1,*s1;//存储光标位置(其实我不想这样的擦,太麻烦)
intx,y,x_temp;//光标坐标
intc[2],hz[3];//存储用户即时输入的字符
inthz_true;
intc_temp[2];
intflag=0,flag1,flag_hz=0;//flag检测是否获取方向键后用户是否插入字符
charempty='\0';
chardel[120]="del/f";
chartemp_file[100];
charchoose;//选择变量、、
time(&now);
timenow=localtime(&now);
system("cls");
printf("*打开记事本时间:
%s*当前记事本:
%s\t\tENTER:
换行ESC:
退出、保存\n",asctime(timenow),file_name_now);
printf("----------------------------------------\n");
if((fp=fopen(file_name_now,"ab+"))==NULL)
{
printf("不能连接%s\n",file_name_now);
system("pause");
return;
}
if((h=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
else
{
h->date='\0';
h->c=0;
h->next=NULL;
h->up=NULL;
p=h;
}
if((h1=(xy*)malloc(sizeof(xy)))==NULL)//创建存储x轴坐标的链表
{
printf("不能分配内存!
\n");
system("pause");
return;
}
else
{
h1->x=0;
h1->next=NULL;
h1->up=NULL;
p1=h1;
}
while((c[0]=fgetc(fp))!
=EOF)//文件部分读取
{
if(c[0]==27)
{
c[0]='\0';
break;
}
if(flag_hz==1)
{
hz[1]=c[0];
hz[2]='\0';
printf("%c",c[0]);
flag_hz=0;
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->date=c[0];
s->c=1;
s->next=NULL;
s->up=p;
p=s;
continue;
}
if(c[0]<=128)
{
c[1]='\0';
printf("%s",c);
flag_hz=0;
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->c=0;
s->date=c[0];
s->next=NULL;
s->up=p;
p=s;
}
else
{
hz[0]=c[0];
flag_hz=1;
printf("%c",c[0]);
if((s=(node*)malloc(sizeof(node)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p->next=s;
s->date=c[0];
s->c=1;
s->next=NULL;
s->up=p;
p=s;
}
}
while((x=fgetc(fp))!
=EOF)//文件数据部分读取(换行位置)
{
if(x==27)
{
x='\0';
break;
}
if((s1=(xy*)malloc(sizeof(xy)))==NULL)
{
printf("不能分配内存!
\n");
system("pause");
return;
}
p1->next=s1;
s1->x=x;
s1->next=NULL;
s1->up=p1;
p1=s1;
}
wherexy(&x,&y);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 记事本 程序 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)