C语言工程实践-简单文本编辑器

废话不多数,先来简单展示下程序界面。
程序界面展示1
查找功能
替换操作
创建新文本
学完C后老师要求写个大点的项目,当时就随便选了这个,结果发现难度还是有点大的,别人写个小游戏就三四百行,我这个给整成快800行了_,不过最终还是写出来了,由于初次学习C语言,编程能力有限,代码写的可能不够漂亮,但还是决定拿出来分享下。供有需要的同学提供借鉴。
环境:
Windows10系统+Visual Studio 2017 Community

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//数据节点结构
typedef struct _node {
	char *Data;	//字符串 
	int da_lg;	//字符串长度 
	struct _node *next;		//下一个节点位置
	struct _node *last;		//上一个节点位置
}sjjd, *Sjjd;		//数据节点结构

//查找数据保存
typedef struct _find_data{
	int num;	//出现编号
	int jd_num;	//节点编号
	Sjjd sjjd_last;	//上一个数据节点地址
	Sjjd sjjd_next;	//下一个数据节点地址
	struct _find_data *fd_next;	//下一个查找数据节点位置
}find_data, *Find_data;

void wenbenbj_1(char *fname);	//文本编辑一级
void wenbencj_2(char *fname);	//文本创建一级
void theme_3(void);				//主题选择一级
void bi_ji(FILE *fp, char fname[100]);	//编辑文本二级 
void ch_ji(FILE *fp);					//创建文本二级 
char *cat_out_filename(char *fname);		//截取文件名
int pdzfc(char fp);							//判断字符类别函数 
void sclb(Sjjd head,char fname[100]);		//输出链表内容
Find_data str_fnd_xh(Sjjd head, char *str);	//细化的查找功能模块
void dest_fd(Find_data head_fd);			//释放查找结果链表函数
void str_fnd(Sjjd head);							//字符串查找
Sjjd str_ins(Sjjd head, char *fname);				//字符串插入
Sjjd str_del(Sjjd head, char *fname);				//字符串删除
Sjjd str_rep(Sjjd head, char *fname);				//字符串替换
void qut_n_save(Sjjd head, FILE *fp);				//退出不保存
void qut_y_save(Sjjd head, FILE *fp, char *fname);	//退出并保存

int main(void)
{
	char fname[100], tmp;	//文件名包含路径、缓冲区清理
	int choice1;	//菜单选择
	char choice2;	//继续操作选择

	system("title Notepad_Simple 1.0");	//窗口标题显示程序名
	do
	{
		printf("欢迎使用simple Notepad\n");
		printf("注意事项:本程序“文件编辑功能”目前只支持英文文本操作\n(“创建文本”功能暂不受影响),后续版本会支持中文,由\n此带来的不便请见谅^_^!\n");
		printf("请选择:\n");
		printf("1:打开文件\t");
		printf("2:创建文件\n");
		printf("3:主题选择\t");
		printf("4:退    出\n");
		do
		{
			scanf("%d", &choice1);
			while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓冲区
			if (choice1 < 1 || choice1 > 4)
				printf("没有该选项,请重新输入:\n");
			else
				break;
		} while (1);

		switch (choice1)
		{
		case 1: system("mode con cols=90"); wenbenbj_1(fname); break;
		case 2: system("mode con cols=60"); wenbencj_2(fname); break;
		case 3: theme_3(); choice2 = 'y';	goto re; break;		//执行完主题操作后直接跳转至开始界面
		case 4: choice2 = 'n';	goto re; break;
		}

		printf("是否继续操作?y/n:");
		scanf("%c", &choice2);
		while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓冲区
	re:	if (choice2 == 'y')		//继续操作前清屏
			system("cls");
	} while (choice2 == 'y' );

	return 0;
}

//函数定义区
//主函数功能模块-一级
void wenbenbj_1(char *fname)	//文本编辑-一级
{
	char tmp;	//缓冲区清理
	FILE *fp;

	printf("请输入要打开的文件位置及名字(不超过100个字符)\n");
	scanf("%s", fname);
	while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓冲区
	while ((fp = fopen(fname, "r")) == NULL)
	{
		printf("打开文件失败!失败原因可能为;\n");
		printf("1:文件名错误\n2:路径错误\n3:权限错误\n");
		printf("请检查后重新输入文件位置及名字\n");
		scanf("%s", fname);
		while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓冲区
	}
	system("cls");	//清屏
	bi_ji(fp, fname);		//调用编辑文本函数
}
void wenbencj_2(char *fname)	//文本创建-一级
{
	char tmp;	//缓冲区清理
	FILE *fp;

	printf("请输入要创建的文件位置及名字(不超过100个字符)\n");
	scanf("%s", fname);
	while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓冲区
	while ((fp = fopen(fname, "w+")) == NULL)
	{
		printf("创建文件失败!失败原因可能为;\n");
		printf("1:路径错误\n2:权限错误\n");
		printf("请检查后重新输入文件位置及名字\n");
		scanf("%s", fname);
		while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓冲区
	}
	system("cls");
	printf("文件“%s”已成功创建!\n", fname);
	ch_ji(fp);	//调用创建文本函数
	while ((tmp = getchar()) != '\n' && tmp != EOF);	//清除输入缓
  • 18
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值