记事本程序(C语言)

合集下载

C#记事本程序开发操作步骤

C#记事本程序开发操作步骤

C#记事本程序开发操作步骤1. 按要求创建一个名为Txt的“Windows应用程序”2. 在“Form1窗体”中一次添加MenuStrip,RichTextBox,StatusStrip,OpenFileDialog,SaveFileDialog,FontDialog,Timer等控件各一个3. 将Form1窗体属性下的Text 设置为记事本;StartPosition设置为CenterScreen;点击窗体属性下的Icon选项,导入记事本图片4. 设置5个MenuStrip控件的下拉子菜单,分别为【文件(F)】、【编辑(E)】、【格式(O)】、【查看(V)】和【帮助(H)】,各子菜单如下图所示各子菜单及其菜单项的属性设置如下图所示【文件(F)】菜单【编辑(E)】菜单【格式(O)】菜单【查看(V)】菜单【帮助(H)】菜单5. 将RichTextBox控件Anchor属性选择“Top,Bottom,Left,Right;将StatusStrip控件Anchor属性设为“Bottom,Left,Right”,单击StatusStrip控件的下拉菜单,添加两个StatusLabel,将statusLabel1,statusLabel2的Text属性分别设置为“就绪”,“显示日期、时间”;将打开对话框OpenFileDialog的Filter属性设置为“RTF File(*.rtf)|*.RTF|TXT FILE(*.txt)|*.txt”;将保存对话框SaveFileDialog的FileName 属性设置为“无标题”,Filter属性设置为“RTF文件|*.rtf”;将Timer控件的Enabled属性设置为“True”,Interval属性设置为“1000”6. 在代码public partial class Form1 : Form和代码public Form1(){ InitializeComponent(); }之间输入一下代码:/* 布尔变量b用于判断文件是新建的还是从磁盘打开的,true表示文件是从磁盘打开的,false表示文件是新建的,默认值为false*/ bool b = false;/* 布尔变量s用于判断文件件是否被保存,true表示文件是已经被保存了,false表示文件未被保存,默认值为true*/bool s = true;在richTextBox1的TextChanged事件输入一下代码:private void richTextBox1_TextChanged(object sender, EventArgs e){// 文本被修改后,设置s为false,表示文件未保存s = false;}在新建ToolStripMenuItem的Click事件输入以下代码:private void 新建ToolStripMenuItem_Click(object sender, EventArgs e){// 判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存if (b == true || richTextBox1.Text.Trim() != ""){// 若文件未保存if (s == false){string result;result = MessageBox.Show("文件尚未保存,是否保存?","保存文件", MessageBoxButtons.YesNoCancel).ToString();switch (result){case "Y es":// 若文件是从磁盘打开的if (b == true){// 按文件打开的路径保存文件richTextBox1.SaveFile(openFileDialog1.FileName);}// 若文件不是从磁盘打开的else if (saveFileDialog1.ShowDialog() == DialogResult.OK){richTextBox1.SaveFile(saveFileDialog1.FileName);}s = true;richTextBox1.Text = "";break;case "No":b = false;richTextBox1.Text = "";break;}}}}在打开ToolStripMenuItem的Click事件输入以下代码:private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) {if (b == true || richTextBox1.Text.Trim() != ""){if (s == false){string result;result = MessageBox.Show("文件尚未保存,是否保存?","保存文件", MessageBoxButtons.YesNoCancel).ToString();switch (result){case "Y es":if (b == true){richTextBox1.SaveFile(openFileDialog1.FileName);}else if (saveFileDialog1.ShowDialog() == DialogResult.OK){richTextBox1.SaveFile(saveFileDialog1.FileName);}s = true;break;case "No":b = false;richTextBox1.Text = "";break;}}}openFileDialog1.FileName = "";openFileDialog1.Filter = "RTF File(*.rtf)|*.RTF|TXT FILE(*.txt)|*.txt";openFileDialog1.ShowDialog();if (openFileDialog1.FileName != "")switch (openFileDialog1.FilterIndex){case 1:richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.RichText);break;case 2:richTextBox1.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);break;}}在保存ToolStripMenuItem的Click事件输入以下代码:private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) {if (b == true && richTextBox1.Modified == true){richTextBox1.SaveFile(openFileDialog1.FileName);s = true;}else if (b == false && richTextBox1.Text.Trim() != "" && saveFileDialog1.ShowDialog() == DialogResult.OK){richTextBox1.SaveFile(saveFileDialog1.FileName);s = true;b = true;openFileDialog1.FileName = saveFileDialog1.FileName;}}在另保为ToolStripMenuItem的Click事件输入以下代码:{if (saveFileDialog1.ShowDialog() == DialogResult.OK){richTextBox1.SaveFile(saveFileDialog1.FileName);s = true;}}在退出ToolStripMenuItem的Click事件输入以下代码:private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) {Application.Exit();}在撤销ToolStripMenuItem的Click事件输入以下代码:private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.Undo();}在复制ToolStripMenuItem的Click事件输入以下代码:private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.Copy();}在剪切ToolStripMenuItem的Click事件输入以下代码:private void 剪贴ToolStripMenuItem_Click(object sender, EventArgs e){richTextBox1.Cut();}在粘贴ToolStripMenuItem的Click事件输入以下代码:{richTextBox1.Paste();}在全选ToolStripMenuItem的Click事件输入以下代码:private void 全选ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.SelectAll();}在日期ToolStripMenuItem的Click事件输入以下代码:private void 日期ToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.AppendText(System.DateTime.Now.ToString());}在自动换行ToolStripMenuItem的Click事件输入以下代码:private void 自动换行ToolStripMenuItem_Click(object sender, EventArgs e){if (自动换行ToolStripMenuItem.Checked == false){自动换行ToolStripMenuItem.Checked = true; // 选中该菜单项richTextBox1.WordWrap = true; // 设置为自动换行}else{自动换行ToolStripMenuItem.Checked = false;richTextBox1.WordWrap = false;}}在字体ToolStripMenuItem的Click事件输入以下代码:private void 字体ToolStripMenuItem_Click(object sender, EventArgs e) {fontDialog1.ShowColor = true;if (fontDialog1.ShowDialog() == DialogResult.OK){richTextBox1.SelectionColor = fontDialog1.Color;richTextBox1.SelectionFont = fontDialog1.Font;}}在状态栏ToolStripMenuItem的Click事件输入以下代码:private void 状态栏ToolStripMenuItem_Click(object sender, EventArgs e) {if (状态栏ToolStripMenuItem.Checked == true){状态栏ToolStripMenuItem.Checked = false;statusStrip1.Visible = false;richTextBox1.Height += statusStrip1.Height;}else{状态栏ToolStripMenuItem.Checked = true;richTextBox1.Visible = true;richTextBox1.Height -= statusStrip1.Height;}}在关于记事本ToolStripMenuItem的Click事件输入以下代码:private void 关于记事本ToolStripMenuItem_Click(object sender, EventArgs e){Form2 ob_Form2 = new Form2();ob_Form2.Show();}在timer1的Tick事件输入以下代码:private void timer1_Tick(object sender, EventArgs e){toolStripStatusLabel2.Text = System.DateTime.Now.ToString();}在Form1的SizeChanged事件输入以下代码:private void Form1_SizeChanged(object sender, EventArgs e){Form1 ob_Form1 = new Form1();toolStripStatusLabel1.Width = this.Width / 2 - 12;toolStripStatusLabel2.Width = toolStripStatusLabel1.Width;}7. 单击【项目】→【添加Windows窗体】菜单项,添加一个名为Form2的窗体,在Form2的窗体中添加1个PictureBox控件,1个Button控件,2个Label 控件,1个LinkLabel控件,Form2的窗体和个控件的属性设置如下图所示:8. 在Form2的窗体下的button1控件的Click事件输入一下代码:private void button1_Click(object sender, EventArgs e){this.Close();}在Form2的窗体下的linkLabel1控件的LinkClicked事件输入一下代码:private void linkLabel1_Click(object sender, EventArgs e){System.Diagnostics.Process.Start("mailto:****************");}9. 调试运行程序。

记事本程序

记事本程序
FILE *fp;
fp=fopen(DATA_FILE,"a+");
fprintf(fp,"%s\n%s\n%s\n%s\n",dairy.title[0],dairy.date[0],dairy.content[0],dairy.type[0]);
printf("保存成功\n");
void end(void)//结束函数
{
system("cls");
printf("感谢使用日记本系统,再见。\n");
exit(0);
}
void newuser ( void )//普通用户增加新用户
{
system ( " cls " );
char proving[20];
printf("请选择一个选项:\n");
printf("1.创建账户\n2.登陆账户\n3.返回主界面\n0.退出系统\n");
scanf("%c",&userchoice);
switch(userchoice)
{
case '0':end();break;
case '1':newuser();break;
fp = fopen ( DATA_FILE , "r" ) ;
printf("以下是您的日志列表:\n");
while(!feof(fp))
{
i++;
fscanf(fp,"%s\n%s\n%s\n%s\n",dairy.title[0],dairy.date[0],dairy.content[0],dairy.type[0]);

C_实验-记事本(带源码)

C_实验-记事本(带源码)

记事本实验报告一、实验目的创建一个Windows窗体应用程序,实现记事本的基本功能,具体包括新建文件、打开文件、保存文件、查找等功能。

该实验的目的是掌握:(一)窗体程序的开发(二)常用控件的使用(三)常用事件的处理(四)对话框的设计和使用(五)文件访问的基本方法二、实验内容(一)主窗口Form1图1 主窗口主窗口界面如图1所示,功能包括基本编辑操作、主菜单和其它快捷键功能。

1、编辑功能用文本框实现。

2、窗口标题与文件名相一致。

未打开文件时为“无标题”,打开文件(另存为)后为文件名。

3、支持菜单的热键和快捷键。

二者的区别是前者是激活菜单且显示出该菜单项时有效,后者在任何时候有效。

4、实现新建、打开、保存和查找功能。

5、支持F3(查找下一个)。

表1 Form1控件列表using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO;namespace WindowsFormsApplication1{public partial class Form1 : Form{public Form2 fm2 = null;public string searchText = "";public Form1(){InitializeComponent();}private void saveFile(){if (textBox1.Text.Length > 0 && textBox1.Modified) {if (MessageBox.Show("想保存文件吗?", "记事本",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning) == DialogResult.Yes){SaveFileDialog d = new SaveFileDialog();d.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";if (d.ShowDialog() == DialogResult.OK){FileStream fs = File.OpenWrite(d.FileName);StreamWriter sr = new StreamWriter(fs);sr.Write(textBox1.Text);sr.Flush();fs.Close();}}}}private void文件NToolStripMenuItem_Click(object sender, EventArgs e) {saveFile();textBox1.Text = "";Text = "无标题 - 记事本";}private void OpenFile(){OpenFileDialog d = new OpenFileDialog();d.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";if (d.ShowDialog() == DialogResult.OK){FileStream fs = File.OpenRead(d.FileName);StreamReader sr = new StreamReader(fs);string s;string s1 = "";while ((s = sr.ReadLine()) != null){s1 += s;}textBox1.Text = s1;string fname = d.FileName.Substring(stIndexOf("\\") + 1);Text = fname + " - 记事本";}}private void打开OToolStripMenuItem_Click(object sender, EventArgs e) {saveFile();OpenFile();}private void保存SToolStripMenuItem_Click(object sender, EventArgs e) {saveFile();}private void查找FToolStripMenuItem_Click(object sender, EventArgs e) {if (fm2 == null){fm2 = new Form2();fm2.fm1 = this;Form2.textBox2 = textBox1;fm2.Show();}elsefm2.Activate();}private void textBox1_KeyDown(object sender, KeyEventArgs e){if (e.KeyCode == Keys.A && e.Control && !e.Shift && !e.Alt){textBox1.SelectAll();e.Handled = true;}else if (e.KeyCode == Keys.F3 && !e.Control && !e.Shift && !e.Alt) {Form2.findNext();}}}}(二)查找对话框图2 查找对话框查找对话框的界面(图2)与记事本的相同。

c语言的记事本源代码

c语言的记事本源代码
case 4: i=0;
if((fp=fopen("tongxunlu.txt","a+"))==NULL)
{ printf(" 无法打开文件~~~\n");
}
while(!feof(fp))
{ i++;
p2=p1;
p1=(link *)malloc(LEN);
printf("Thank your use\n");
else
if(identify=='n'||identify=='N')
exit(0);
else
printf(" 请输入(Y/N):");
{ printf(" 无法打开文件~~~\n");
exit(0);
} //打开文件,并将文件中内容复制到链表中,若文件中无记录,则链表头指针为空
char identify;
// char fullname[10];
link *head,*p,*p1,*p2,*p3;
int choose;
char absorb;
int i;
head=NULL;
welcome();
head=NULL;
p2->next=NULL;
fclose(fp);
if(head==NULL)
p1=p2=(link *)malloc(LEN);
fread(p1,LEN,1,fp);
head=p1;
#include<stdio.h>
#include<stdlib.h>

c语言课设实验报告-记事本程序(含源码)

c语言课设实验报告-记事本程序(含源码)

C语言课设实验报告[记事本程序]班级:学号:姓名:指导老师:C语言课设实验报告#define key_down 80#define key_up 72#define key_esc 1#define key_alt_f 33#define key_alt_x 45#define key_enter 28#define key_alt_e 18int get_key();void box(int startx,int stary,int high,int width);{int i,key,x,y,l;char *w=NULL,*d=NULL,*s=NULL;FILE *fp;char *menu[]={ "File ", "Edit ","Format","View","Help"};char *red[]={ "F", "E","F","V","H"};char *f[]={ "New ", "Open" , "Save", "Another","Quit alt_x"};char *e[]={"Search","Search next","Replace","Date"};char buf[16*10*2],buf1[16*2];textbackground(3);clrscr();window(1,1,80,1);textbackground(WHITE);textcolor(BLUE);clrscr();window(1,1,80,2);for(i=0, l=0; i <5;i++){x=wherex();y=wherey();textcolor(BLACK);cprintf( " %s ",menu[i]);l=strlen(menu[i]);gotoxy(x,y); x.y等的头文件*//*功能键的扫描码的定义*//* i为循环次数的序数,key为从键盘输入的功能键,x,y 为光标的坐标,l为菜单栏中菜单的字符长度*//*w是存放输入的内容(记录的事情)的指针,*s是存放输入的文件名的指针,*d是存放输入要定时的文件的文件名的指针*/ /*菜单栏中各个菜单的定义*//*菜单栏中菜单开头要标颜色的字母的定义*//* file 子菜单中项目的定义*//*edit子菜单的定义*/ /*缓冲区的定义*//*整个大窗口的背景颜色设置*//*创建菜单栏窗口*/ /*设置菜单栏窗口背景颜色为白色,字体颜色为蓝色*//*利用循环输出menu菜单栏,有多少个菜单循环多少次。

C语言程序设计课程设计-- 记事本

C语言程序设计课程设计-- 记事本

C#语言程序设计课程设计题目记事本指导老师专业班级学号姓名2012年 6月 21 日摘要:记事本是专为个体用户量身定制的记录数据的平台。

记事本,用来记录各类事情的小册子。

在windows操作系统中是一个简单的文本编辑器。

自从1985年发布的Windows 1.0开始,所有的Microsoft Windows 版本都内置这个软件。

记事本只能处理纯文本文件,但是,由于多种格式源代码都是纯文本的,所以记事本也就成为了使用最多的源代码编辑器。

它只具备最基本的编辑功能,所以体积小巧,启动快,占用内存低,容易使用。

关键词:Microsoft Visual Studio 2005。

目录引言 (2)1、问题描述 (3)1.1课题背景 (3)1.2研究意义 (3)2、总体设计 (4)2.1开发方法 (4)2.2总体目标 (4)3、界面设计 (5)3.1记事本的功能结构图: (5)3.2记事本的界面: (5)4、详细介绍 (9)4.1组成的模块 (9)5、代码设计 (10)6、结论 (30)参考资料 (32)引言随着信息化在全球的快速进展,世界对信息的需求快速增长,信息产品和信息服务对于各个国家、地区、企业、单位、家庭、个人都不可缺少。

信息技术已成为支撑当今经济活动和社会生活的基石。

在这种情况下,信息产业成为世界各国,特别是发达国家竞相投资、重点发展的战略性产业部门。

“记事本”的功能虽然连“写字板”都比不上,但它还是有它自己的独门绝技的。

下面我们就来看看记事本吧。

相对于微软的Word来说“记事本”的功能确实是太单薄了,只有:新建,保存,打印,查找,替换这几个功能。

但是“记事本”却拥有一个Word不可能拥有的优点:打开速度快,文件小。

我相信对于这一点大家一定是深有感触地,一点就打开;同样的文本文件用Word保存和用记事本保存的文件大小就大不相同,所以对于大小在64KB以下的纯文本的保存最好还是采用记事本。

1、问题描述1.1课题背景记事本是以txt后缀名的文件,在windows页面重点及鼠标右键-〉新建-〉在下拉子菜单中既有文本文档一项1.详细:txt文件是微软在操作系统上附带的一种文本格式,是最常见的一种文件格式,早在DOS时代应用就很多,主要存文本信息,即为文字信息,在微软在操作系统等于直接存,就是它了,现在多用的操作系统得使用记事本等程序保存,大多数软件可以查看如记事本,浏览器等等。

C语言记事本代码

C语言记事本代码

C语言记事本代码#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<ctype.h>#define NULL 0#define MAX 100typedef struct lnode{char date[MAX]; //存放数据struct lnode * prior ; //前驱struct lnode * next ; //后继int number ; //记录一个节点的字符数~如果是头节点就记录他的节点个数int quese ; //记录节点在链表中的位置}lnodetype;lnodetype * l ; //设置两个全局变量,分别是头节点指针和尾节点指针lnodetype * end ;//**********这个函数是用来初始化的**********//int iniatelist (lnodetype ** l , lnodetype ** end){(*l) = (lnodetype *)malloc (sizeof (lnodetype) ) ;if ( (*l) == NULL ){printf ("没有只够的内存空间~程序即将退出~");return 0 ;}(*l)->prior =(*l)->next = NULL ; //这是双链表(*l)->number = (*l)->quese = 0;(*end) = (*l) ;printf ("程序初始化完毕~");return 0;}//**********这个函数是用来建立节点,并且插入元素的**********// int link(lnodetype ** l, lnodetype ** end){lnodetype *s ;s = (lnodetype *)malloc ( sizeof (lnodetype) ) ;if ( s == NULL ){printf ("内存空间不够,程序即将退出~") ;return 0 ;}(*end)->next = s ;s->prior = (*end) ;(*end) = (*end)->next ;(*l)->number++ ; //增加一个节点,头节点的number就加1s->quese = (*l)->number ; //这个是记录节点在链表中的位置printf ("%d行", s->quese ) ; //这个是节点在整个链表中的位置gets(s->date) ;s -> number = strlen(s->date) ;return 0 ;}//**********这个是打印链表的函数**********//int prin (lnodetype ** l, lnodetype ** end){lnodetype * p ;int i ;int j = 0;int couter = (*l)->number ;p = (*l)->next ;for (i=0; i < couter; i++){printf ( "%d行" , i+1 ) ;j = 0;while ( ( p->date[j]>='a' && p->date[j]<='z') || (p->date[j]>='A' && p->date[j]<='z') ||p->date[j]>='0' && p->date[j]<='9'){printf ( "%c" , p->date[j] ) ;j++ ;}printf ("n") ;p = p->next ;}return 0 ;}//*********这个查找和编辑相应行的函数**********//int search (lnodetype ** l, lnodetype ** end ){int number ;scanf ("%d" , &number) ;int i ;lnodetype * p ;p = (*l)->next ;for ( i=0; i<number-1; i++ )p = p->next ;printf ("%d行" , number ) ;gets (p->date) ;return 0 ;}//**********这个是在文本文件里搜索字符串的函数**********// int searchstr(lnodetype ** l , lnodetype ** end){char ptr[100] ;int arrycouter ;int mystrcmp( char *, char * , int ) ;printf ( "ok!现在输入你查找的字符串~" ) ;scanf ( "%s" , ptr ) ;arrycouter = strlen (ptr) ;lnodetype * s ;s = (*l)->next ;char * p ;int i = 1 ;int couter = 0 ;int number = (*l)->number ;p = (char *)s->date ;while ( i && number ){// i=1是,证明没有找到,向第二个节点继续寻找while ( i && ( ( (*p >= 'a') && (*p <= 'z') ) ||( (*p >= 'A') && (*p <= 'Z') ) ) ){i = mystrcmp ( p , ptr , arrycouter );if ( i == 1 ){printf ("字符串已经在第%d行,第%d个字符开始,",s->quese, couter+1 );i = 0 ;}else{p++ ;couter++;i = 1 ;}}s = s->next ;p = (char *)s->date ;number -- ;}if ( i == 1 )printf ("字符串在本文档中不存在~");return 0 ;}//**********(1)这个函数是用来实现退出不保存功能的**********// int exitunsave(lnodetype ** l, lnodetype ** end){lnodetype * s ;while( (*l) != (*end) ){ //如果不保存的话,最好是把节点的空间都释放,节省空间s = (*end) ;(*end) = (*end)->prior ;free( s ) ;}return 0 ;}//**********(2)这个函数是用来实现退出但保存功能的**********// int quitandsave( lnodetype ** l , lnodetype ** end ){FILE * fp ;char ch ;char filename[20] ;lnodetype * p;int i ;int j ;int couter = (*l)->number ;p = (*l)->next ;printf ("请输入文件名:") ;scanf ("%s" , filename ) ;if ( (fp = fopen( filename , "w" )) == NULL ){printf ("文件不能打开~n");return 0 ;}for ( i=0; i<couter; i++ ){ //有几个节点就进行多少次的存贮ch = p->date[0] ;j = 1 ;while (ch != '\0'){fputc (ch , fp) ;ch = p->date[j] ;j++ ;}p = p->next ;fputc ( '#' , fp ) ; //注意在每个节点的后面加上结束的符号}fputc ( '@' , fp ) ; //整个文件关闭的标志fclose ( fp ) ; //注意关闭文件,return 0 ;}//**********由于库函数比较字符串提供的功能不满足要求,故自己写了一个**********/int mystrcmp( char * p ,char * sour ,int number ){while ( number && (*p) == (*sour) &&( ( (*p >= 'a') && (*p <= 'z') ) || ( (*p >= 'A')&& (*p <= 'Z') ) )){p++ ;sour++ ;number-- ;}if ( number == 0 )return 1 ;elsereturn 0 ;}//**********这个函数是用来实现统计字符串功能的**********//int coutword(lnodetype ** l , lnodetype ** end){ //考虑到只统计一行的单词没有意义,故统计整个文本int yes = 1 ; //这个是进入单词的标志int no = 0 ; //在单词外面的时候的标志int i , j ,inaword ,count = 0 ;inaword = no ;lnodetype * s = (*l)->next ;for (j=0; j<(*l)->number; j++){for ( i=0; (s->date[i]>='a' && s->date[i]<='z') || (s->date[i]>='A' && s->date[i]<='z') ||(s->date[i]>='0' && s->date[i]<='9' ) ||(s->date[i]==' '); i++ ){if ( s->date[i] == ' ' )inaword = no ;elseif ( inaword == no ){inaword = yes ;count++ ; //计算单词}}s = s->next ;inaword = 0 ; //注意这里,把标志置为0了~}printf ( "n文本一共有 %d 行" , (*l)->number ) ;printf ("n此文本一共有 %d 个单词!" , count ) ;return count ;}//**********这个函数是用来实现计算文本行数功能的**********// int linecouter(lnodetype ** l , lnodetype ** end ){int couter ;couter = (*l)->number ;return couter ;}//**********这个函数是整和一上所有功能的菜单函数**********// int editmenu(lnodetype ** l , lnodetype ** end ){char choice ;char * p = "cls" ;int i = 1 ; //这两个变量是用来控制循环的int j= 1 ;system (p) ;prin (&(*l) , &(*end)) ;while (j){printf ("*********************************** e: 编辑相应行*************************************n") ;printf ("*********************************** s: 搜索字符串*************************************n") ;printf ("*********************************** t: 统计单词个数***********************************n") ;printf ("*********************************** q: 退出编辑***************************************n") ;scanf("%c",&choice);scanf("%c" , &choice) ; //,,,,莫名其妙的问题,非要两个请求输入语句才肯停下来~switch (choice){case 'e' : {i = 1 ;while (i){search( &(*l) , &(*end) );system (p) ;prin( &(*l) , &(*end) ) ;printf ("n1 继续编辑 0 结束编辑n") ;scanf ("%d" , &i) ;}}break;case 's' : {i = 1 ;while (i){searchstr( &(*l) , &(*end) );getchar();getchar();system (p) ;prin( &(*l) , &(*end) ) ;printf ("n1 继续搜索 0 结束搜索n") ; scanf ("%d" , &i) ;}}break;case 't' : {coutword ( &(*l) , &(*end) ) ;getchar() ;}break;default : return 0 ;}system (p) ;prin( &(*l) , &(*end) ) ;printf ("n1 回到编辑菜单 0 结束编辑n") ; scanf ("%d" , &j) ;if (j == 1)system (p) ;elsereturn 0 ;}return 0 ;}//**********实现第一个模块:新建空白文档**********// int newtext( lnodetype ** l ,lnodetype ** end ) {printf ( "新文本文件:n" ) ;int i = 1 ;char judstr[MAX] ;lnodetype * temp ;char jud ;char * p = "cls" ;while ( 1 ){link( &(*l) , &(*end) ) ;jud = (*end)->date[0] ;if ( jud == '5' ){ //输入‘5’结束一切temp = (*end) ;(*end) = (*end)->prior ;free (temp) ;while (1){printf ( "******************************* out :退出不保存****************************n") ;printf ( "******************************* edit :编辑信息*****************************n") ;printf ( "******************************* quit :退出而不存盘**************************n") ;printf ( "******************************* qas :退出且存盘****************************n") ;printf ( "******************************* con :继续输入~*****************************n") ;gets(judstr) ;if ( !strcmp(judstr , "out") ){exitunsave( &(*l) , &(*end) ) ;return 0 ;}elseif ( !strcmp(judstr , "qas") ){quitandsave( &(*l) , &(*end) ) ;return 0 ;}elseif ( !strcmp(judstr , "edit") ){editmenu (l , end) ;return 0;}system (p) ;}return 0 ;}}return 0 ;}//**********这个是装入文件的函数**********// int loadtaxt( char * filename ){FILE * fp ;lnodetype * l ;char ch ;int i = 0 ;char * p = "cls" ;char judstr[MAX] ;lnodetype * head ;lnodetype * end ;iniatelist ( &head , &end) ;l = end = head ;if ( (fp = fopen( filename, "r+")) == NULL ){ printf ("文件不能打开~n") ;return 0 ;}ch = fgetc ( fp ) ;while ( ch != '@' ){lnodetype *s ;s = (lnodetype *)malloc ( sizeof (lnodetype) ) ; if ( s == NULL ){printf ("内存空间不够,程序即将退出~") ;return 0 ;}end->next = s ;s->prior = end ;end = end->next ;l->number++ ;s->quese = l->number ;printf ("%d行", s->quese ) ;while ( ch != '#'){s->date[i] = ch ;ch = fgetc (fp) ;i++ ;}i = 0;while ( (end->date[i]>='a' && end->date[i]<='z') ||(end->date[i]>='A' && end->date[i]<='z') ||(end->date[i]>='0' && end->date[i]<='9' ) ||(end->date[i]==' ') ){printf ( "%c" , end->date[i] ) ;i++ ;}end->date[i] = '\0' ; //注意在节点的最好加上这个,以让退出保存功能函数知道此节点已结束printf ( "n" ) ;i = 0;ch = fgetc ( fp ) ;}fclose (fp) ;printf ("n文件成功装入~n") ;while (1){printf ( "******************************* out :退出不保存****************************n") ;printf ( "******************************* edit :编辑信息*****************************n") ;printf ( "******************************* qas :退出且存盘****************************n") ;printf ( "******************************* con :继续输入~*****************************n") ;scanf("%s",judstr);if ( !strcmp(judstr , "out") ){exitunsave( &l , &end ) ;return 0 ;}elseif ( !strcmp(judstr , "qas") ){quitandsave( &l , &end ) ;return 0 ;}elseif ( !strcmp(judstr , "edit") ){editmenu (&l , &end) ;return 0 ;}system (p) ;}return 0 ;}//**********主函数**********// void main ( void ){//iniatelist (&l , &end) ;//newtext(&l , &end) ;char filename[MAX] ;scanf ( "%s" , filename ) ; loadtaxt( filename ) ;}很不容易做的程序~~~通过编译。

记事本(代码)

记事本(代码)
{
char t; //选择是否继续输入
flag:
printf("请输入第%d个学生信息\n",a+1);
printf("学号:");
scanf("%d",&gt[a].xuehao);
printf("姓名:");
scanf("%s",&gt[a].name);
for(int k=i;k<a;k++)
if(gt[i].xuehao>gt[k].xuehao)
{
gts=gt[i];
gt[i]=gt[k];
gt[k]=gts;
}
{
for(l=0;l<a;l++)
{
gt[l]=gt[l+1];
}
}
}
if(x==2)
{
printf("请输入该学生的姓名\n");
scanf("%s",&q);
for (i=0;i<a;i++)
{
int l; //用于for循环
int i; //用于表示删除编号
int x; //选择
char q[10]; //被删除的姓名
int cx; //被删除的学号
printf("1.按学号删除\n");
char q[10]; //被修改的姓名
int cx; //被修改的学号
printf("1.按学号修改\n");
printf("2.按姓名修改\n");
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
s=p->next;
c[0]=s->date;
fputc(c[0],fp);
{
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) //把链表中的文本数据存入文件
{
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)
{ቤተ መጻሕፍቲ ባይዱ
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标记获取的字符是汉字还是英文
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";
typedef struct char_node //结点,date存储字符数据,c存储汉字、英文识别码..汉字为1,英文为0
{
char date;
int c;
struct char_node *next; //保存下一结点地址
struct char_node *up; //保存上一结点地址
}node;
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);
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);
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 ");
s1->up=p1;
p1=s1;
}
else if(c[0]==0xE0) //监测方向键等扩展键,可插入字符(可扩展很多功能,待实现。。)
{
c[0]=getch();
continue;
}
else if(c[0]==8) //删除字符功能模块----监测退格键----取消前面输入的字符(靠这里实现两个字节的汉字和一个字节的英文都是按一下消除)
CONSOLE_SCREEN_BUFFER_INFO scrInfo;
h1=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(h1,&scrInfo);
*x=scrInfo.dwCursorPosition.X;
*y=scrInfo.dwCursorPosition.Y;
}
char main_win() //主界面选择函数
{
char choose;
system("if not exist C:\\我的记事本md C:\\我的记事本");
system("cls");
printf("\t\t\t****************************\n");
printf("\t\t\t记事本\n");
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) //自定义函数,跳转光标。
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");
{
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",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]);
{
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)
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;
}
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)
system("pause");
return;
}
if((h=(node *)malloc(sizeof(node)))==NULL)
相关文档
最新文档