记事本程序C语言1.docx

上传人:b****8 文档编号:9493485 上传时间:2023-02-04 格式:DOCX 页数:31 大小:20.63KB
下载 相关 举报
记事本程序C语言1.docx_第1页
第1页 / 共31页
记事本程序C语言1.docx_第2页
第2页 / 共31页
记事本程序C语言1.docx_第3页
第3页 / 共31页
记事本程序C语言1.docx_第4页
第4页 / 共31页
记事本程序C语言1.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

记事本程序C语言1.docx

《记事本程序C语言1.docx》由会员分享,可在线阅读,更多相关《记事本程序C语言1.docx(31页珍藏版)》请在冰豆网上搜索。

记事本程序C语言1.docx

记事本程序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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1