记事本程序(C语言)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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键--退出保存
printf("\t\t\t****************************\n\n");
printf("\t\t\t 1.新建我的记事本\n\n");
printf("\t\t\t 2.加载我的记事本\n\n");
printf("\t\t\t 3.删除我的记事本\n\n");
printf("\t\t\t 4.退出记事本程序\n\n");
printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
if((fp=fopen(file_name_now,"ab+"))==NULL)
{
printf("不能连接%s\n",file_name_now);
{
s=p->next;
c[0]=s->date;
fputc(c[0],fp);
printf("\t\t\t *请输入你的选择:\n\n\t\t\t\t ");
scanf("%s",&choose);
return choose;
}
void new_file_win() //新建记事本
{
int flag;
FILE *fp;
FILE *date;
char txt[5]=".txt";
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;
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");
char input[30];
char re[30];
void new_file();
for(flag=0;flag==0;)
{
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t新记事本\n");
printf("\t\t\t****************************\n\n");
char empty='\0';
int huanhang=10; //换行
system("cls");
time(&now);
timenow = localtime(&now);
printf("*打开记事本时间:%s*当前记事本:%s\t\t ENTER:换行ESC:退出、保存\n",asctime(timenow),file_name_now);
}
char main_win() //主界面选择函数
{
char choose;
system("if not exist C:\\我的记事本md C:\\我的记事本");
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t记事本\n");
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#define hh 70 //设置自动换行的位置
char file_name_now[100]; //全局保存加载文件路径
{
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)
}
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)
typedef struct char_node //结点,date存储字符数据,c存储汉字、英文识别码..汉字为1,英文为0
{
char date;
int c;
struct char_node *next; //保存下一结点地址
struct char_node *up; //保存上一结点地址
}node;
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;
s1->up=p1;
p1=s1;
}
else if(c[0]==0xE0) //监测方向键等扩展键,可插入字符(可扩展很多功能,待实现。。)
{
c[0]=getch();
continue;
}
else if(c[0]==8) //删除字符功能模块----监测退格键----取消前面输入的字符(靠这里实现两个字节的汉字和一个字节的英文都是按一下消除)
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 ");
{
printf("不能分配内存!\n");
system("pause");
return;
}
p1->next=s1;
s1->x=x_temp;
s1->next=NULL;
s1->up=p1;
p1=s1;
x_temp=ຫໍສະໝຸດ Baidu;
}
}
if(c[0]==13) //监测回车--把回车改为换行,并保存
{
c[0]=10;
{
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)
CONSOLE_SCREEN_BUFFER_INFO scrInfo;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(h1,&scrInfo);
*x=scrInfo.dwCursorPosition.X;
*y=scrInfo.dwCursorPosition.Y;
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]);
{
FILE *fp;
node *h,*p,*s; //p指向当前节点的前一个节点,s指向当前节点
xy *h1,*p1,*s1; //存储光标位置
int x,y,x_temp=0; //光标坐标x_temp用于自动换行
int c[2],hz[3]; //存储用户即时输入的字符
int flag=0,flag_hz=0; //flag_hz标记获取的字符是汉字还是英文
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;
{
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);
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;
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);
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;
{
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) //把链表中的文本数据存入文件
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void wherexy(int *x,int *y) //自定义函数,获取光标当前位置。
{
HANDLE h1;
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();
}
void new_file() //新记事本编辑
typedef struct xy_node //x保存换行的位置
{
int x;
struct xy_node *next;
struct xy_node *up;
}xy;
time_t now; //实例化time_t结构
struct tm *timenow;
void gotoxy(int x, int y) //自定义函数,跳转光标。
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键--退出保存
printf("\t\t\t****************************\n\n");
printf("\t\t\t 1.新建我的记事本\n\n");
printf("\t\t\t 2.加载我的记事本\n\n");
printf("\t\t\t 3.删除我的记事本\n\n");
printf("\t\t\t 4.退出记事本程序\n\n");
printf("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
if((fp=fopen(file_name_now,"ab+"))==NULL)
{
printf("不能连接%s\n",file_name_now);
{
s=p->next;
c[0]=s->date;
fputc(c[0],fp);
printf("\t\t\t *请输入你的选择:\n\n\t\t\t\t ");
scanf("%s",&choose);
return choose;
}
void new_file_win() //新建记事本
{
int flag;
FILE *fp;
FILE *date;
char txt[5]=".txt";
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;
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");
char input[30];
char re[30];
void new_file();
for(flag=0;flag==0;)
{
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t新记事本\n");
printf("\t\t\t****************************\n\n");
char empty='\0';
int huanhang=10; //换行
system("cls");
time(&now);
timenow = localtime(&now);
printf("*打开记事本时间:%s*当前记事本:%s\t\t ENTER:换行ESC:退出、保存\n",asctime(timenow),file_name_now);
}
char main_win() //主界面选择函数
{
char choose;
system("if not exist C:\\我的记事本md C:\\我的记事本");
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t记事本\n");
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#define hh 70 //设置自动换行的位置
char file_name_now[100]; //全局保存加载文件路径
{
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)
}
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)
typedef struct char_node //结点,date存储字符数据,c存储汉字、英文识别码..汉字为1,英文为0
{
char date;
int c;
struct char_node *next; //保存下一结点地址
struct char_node *up; //保存上一结点地址
}node;
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;
s1->up=p1;
p1=s1;
}
else if(c[0]==0xE0) //监测方向键等扩展键,可插入字符(可扩展很多功能,待实现。。)
{
c[0]=getch();
continue;
}
else if(c[0]==8) //删除字符功能模块----监测退格键----取消前面输入的字符(靠这里实现两个字节的汉字和一个字节的英文都是按一下消除)
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 ");
{
printf("不能分配内存!\n");
system("pause");
return;
}
p1->next=s1;
s1->x=x_temp;
s1->next=NULL;
s1->up=p1;
p1=s1;
x_temp=ຫໍສະໝຸດ Baidu;
}
}
if(c[0]==13) //监测回车--把回车改为换行,并保存
{
c[0]=10;
{
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)
CONSOLE_SCREEN_BUFFER_INFO scrInfo;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(h1,&scrInfo);
*x=scrInfo.dwCursorPosition.X;
*y=scrInfo.dwCursorPosition.Y;
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]);
{
FILE *fp;
node *h,*p,*s; //p指向当前节点的前一个节点,s指向当前节点
xy *h1,*p1,*s1; //存储光标位置
int x,y,x_temp=0; //光标坐标x_temp用于自动换行
int c[2],hz[3]; //存储用户即时输入的字符
int flag=0,flag_hz=0; //flag_hz标记获取的字符是汉字还是英文
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;
{
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);
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;
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);
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;
{
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) //把链表中的文本数据存入文件
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void wherexy(int *x,int *y) //自定义函数,获取光标当前位置。
{
HANDLE h1;
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();
}
void new_file() //新记事本编辑
typedef struct xy_node //x保存换行的位置
{
int x;
struct xy_node *next;
struct xy_node *up;
}xy;
time_t now; //实例化time_t结构
struct tm *timenow;
void gotoxy(int x, int y) //自定义函数,跳转光标。