模拟记事本程序
p-JSP记事本程序

JSP记事本程序guestbook.javapackage guestbook;import java.sql.*;public class guestbook{String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";String sConnStr = "jdbc:odbc:guestbook";Connection conn = null;ResultSet rs = null;public guestbook() {try {Class.forName(sDBDriver);} catch(ng.ClassNotFoundException e) {System.err.println("guestbook(): " + e.getMessage());}}public void executeInsert(String sql) {try {conn = DriverManager.getConnection(sConnStr);Statement stmt = conn.createStatement();stmt.executeUpdate(sql);}catch(SQLException ex) {System.err.println("guestbook.executeUpdate: " + ex.getMessage());}}public ResultSet executeQuery(String sql) {rs = null;try {conn = DriverManager.getConnection(sConnStr);Statement stmt = conn.createStatement();rs = stmt.executeQuery(sql);}catch(SQLException ex) {System.err.println("guestbook.executeQuery: " + ex.getMessage());}return rs;}}GuestBook.jsp<html><head><title>My First Jsp GuestBook</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#CCCCFF" vlink="#000000" alink="#666666"><div align="center"><p><font size="7"><b><font size="+6">Jsp GuestBook</font></b></font></p><form method="post" action="index.jsp"><table width="75%" align="center" border=1><tr><td width="30%"><div align="right">Name:</div></td><td width="70%"><input type="text" name="name"></td></tr><tr><td width="30%"><div align="right">E-mail:</div></td><td width="70%"><input type="text" name="email"></td></tr><tr><td width="30%"><div align="right">Site Url:</div></td><td width="70%"><input type="text" name="url" value="http://"></td></tr><tr><td width="30%"><p>What do you want to</p><p>say?</p></td><td width="70%"><textarea name="body" rows="5" cols="30"></textarea></td></tr><tr><td width="30%"></td><td width="70%"></td></tr><tr><td width="30%"></td><td width="70%"><table width="75%"><tr><td><input type="submit" name="send" value="Send"></td><td><input type="reset" name="reset" value="Reset"></td></tr></table></td></tr></table></form><hr><%@ page language="java" import="java.sql.*"%><jsp:useBean id="sqlbean" scope="page" class="guestbook.guestbook" /><%! String name,email,url,body,sql;%><%if (name!=null&&email!=null&&body!=null){name = request.getParameter("name");email = request.getParameter("email");url = request.getParameter("url");body = request.getParameter("body");sql = "insert into guestbook (Name,Email,Url,Body) values('"+name+"','"+email+"','"+url+"','"+body+"')";sqlbean.executeInsert(sql);}else{out.print("<b><font color=red>Sorry, Please enter your name,email and body!!!</font></b>"=;=%><p><font size="4"><b><a href="./index.jsp#see">See My Guestbook</a></b></font></p><%-- Because I don't konw a good method to konw the all items count,so.... --%><%// ResultSet RScount = sqlbean.executeQuery("SELECT count(*) FROM guestbook"); ResultSet RScount = sqlbean.executeQuery("SELECT * FROM guestbook");int i=0;while (RScount.next()) {i++;}%><%-- <p><a name=see><B>Now,<%= RScount %>Records.</B><a></p >--%><p><a name=see><B>Now,<%= i %>Records.</B><a></p><%RScount.close();i=0;%><p></p><%ResultSet RS = sqlbean.executeQuery("SELECT * FROM guestbook ORDER BY RecordID DESC");while (RS.next()){name = RS.getString("Name");email = RS.getString("Email");url = RS.getString("Url");body = RS.getString("Body");%><table border=1 width=80%><tr><td width=30%>Name:</td><td width=70%><%= name %></tr><tr><td width=30%>Email:</td><td width=70%><a href="mailto:<%= email %>"><%= email %></a></td></tr><tr><td width=30%>SiteUrl:</td><td width=70%><a href="<%= url %>"><%= url %></a></td></tr><tr><td width=30%>Body:</td><td width=70%><%= body %></td></tr></table><hr><% =RS.close();%></div></body></html>。
微信小程序入门实例之记事本

微信⼩程序⼊门实例之记事本主要实现思想都在代码的注释中,项⽬源码见github⾸先上项⽬⽬录app.js⽂件代码如下://app.jsApp({onLaunch: function() {//调⽤API从本地缓存中获取数据var logs = wx.getStorageSync('logs') || []logs.unshift(Date.now())wx.setStorageSync('logs', logs)},getUserInfo: function(cb) {var that = thisif (erInfo) {typeof cb == "function" && cb(erInfo)} else {//调⽤登录接⼝wx.getUserInfo({withCredentials: false,success: function(res) {erInfo = erInfotypeof cb == "function" && cb(erInfo)}})}},globalData: {userInfo: null}})app.json⽂件代码如下:{"pages":["pages/mylist/mylist","pages/myadd/myadd"],"window":{"backgroundTextStyle":"light","navigationBarBackgroundColor": "#fff","navigationBarTitleText": "WeChat","navigationBarTextStyle":"black"}}mylist.wxml⽂件代码如下:<view class="page"><scroll-view scroll-y class="list-box"><block wx:for="{{mylists}}"><!--根据id确定每⼀条内容--><view class="list-i" bindtap="edit" data-id="{{item.id}}"><view class="content">{{item.content}}</view><view class="date">{{item.time}}</view></view></block></scroll-view><view class="edit" bindtap="add"><image src="../../img/edit.png"></image></view></view>mylist.js⽂件代码如下:var timeFormat=require("../../utils/util")Page({onload:function(){initData(this);},onShow:function(){initData(this);},edit(e){// 修改原有的记事本内容console.log("myedit")var myid=e.currentTarget.dataset.id;console.log(myid);wx.navigateTo({url: '../myadd/myadd?id='+myid,})},add(){// 增加新的记事本内容console.log("my add");wx.navigateTo({url: '../myadd/myadd'})},data:{mylists:[]}})// 每次onload和onshow从本地存储中获取数据function initData(page){var txt=wx.getStorageSync("txt");if(txt.length){txt.forEach(function(item,i){// 循环每⼀项数据,并格式化时间戳var t=new Date(Number(item.time));item.time=timeFormat.formatTime(t);})}page.setData({// 将获取到的数据绑定到本页⾯实例中mylists:txt})}myadd.wxml⽂件如下:<view class="classname"><input class="txt-input" placeholder="请输⼊内容" bindinput="change" value="{{content}}"/> </view><view class="btn-box"><view class="cancel" bindtap="cancel">取消</view><view class="sure" bindtap="sure">确定</view></view>myadd.js⽂件如下:Page({data:{},// bindinput 事件,内容修改后绑定到本页⾯实例change(e){console.log(e);this.setData({content:e.detail.value})},// 点击取消按钮后返回上级页⾯cancel(){wx.navigateBack();},// 点击确定后更新数据sure(){// 点击确定时若内容为空格,直接返回上级var re = /^\s*$/g;if (!this.data.content || re.test(this.data.content)) {return;}// 点击确定时,更新时间戳,并绑定到页⾯实例(必须在 setValue之前调⽤)this.setData({time:Date.now()})// 将新内容更新到localstoragesetValue(this);wx.navigateBack()},onLoad(e){// 页⾯加载后⾸先获取上级页⾯传来的idvar id=e.id;if(id){// 若存在id 则为修改记事本内容getData(id,this);}else{// 不存在id则为新增记事本内容this.setData({// 为新增的记事本内容增加记事本id 并绑定到页⾯实例id:Date.now()})}}})function getData(id,page){// 从本地存储获取数据var arr=wx.getStorageSync("txt");arr.forEach(function(item){if(arr.length){// 遍历数据并根据id显⽰当前记事本内容if(item.id==id){page.setData({// 匹配记事本后将id与content绑定到页⾯实例id:item.id,content:item.content})}}})}function setValue(page){var arr=wx.getStorageSync("txt");var data=[],flag=true;// data数组⽤于存储更新或新加的记事本内容if(arr.length){// 修改原有记事本内容arr.forEach(function(item){if(item.id==page.data.id){item.time=Date.now();item.content=page.data.content;// flag⽤于控制是修改记事本内容还是新增记事本内容flag=false;}data.push(item);})}// 新增记事本内容if(flag){data.push(page.data)}// 最后将新的内容加⾄localStore中wx.setStorageSync("txt", data)}util.js⽂件代码如下:// 格式化时间函数function formatTime(date) {var year = date.getFullYear()var month = date.getMonth() + 1var day = date.getDate()var hour = date.getHours()var minute = date.getMinutes()var second = date.getSeconds()return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') }// 时间补零function formatNumber(n) {n = n.toString()return n[1] ? n : '0' + n}// 对外提供接⼝module.exports = {formatTime: formatTime}微信⼩程序,在摸索中前进,欢迎⼤家批评指正!。
实验三利用记事本等编制程序,.

实验三:利用记事本等编制程序,将程序导入并利用模拟功能进行轨迹检验一、使用记事本或写字板,编写简单零件的数控车床加工程序对几何形状简单、单一的切削路线,如:外径、内径、端面的切削,若加工余量较大,刀具常常要反复地执行相同的动作,才能达到工件要求的尺寸。
要完成上述加工,在一个程序中就要写入很多的程序段,为了简化程序,减少程序所占内存,数控机床设有各种固定循环指令,只需用一个指令,一个程序段,便可完成一次乃至多次重复的切削动作。
轴向(圆柱或圆锥)切削循环指令(G90)如图3-1所示,刀具从循环起点开始按矩形循环,其加工顺序按1,2,3,4进行,最后又回到循环起点。
图中虚线表示按R快速移动,点划线表示按F指定的工件进给速度移动。
图3-1(a)和(b)分别为圆柱或圆锥切削循环示意图。
(1)圆柱面切削循环指令格式:G90 X(U)- Z(W)- F-;(2)圆锥面切削循环指令格式:G90 X(U)- Z(W)- I- F-;功能:进行外圆及内孔直线加工和锥面加工循环,可以简化编程。
其中:X、Z为切削终点坐标;U、W为切削终点相对于循环起点坐标值的增量;I为工件加工锥面大小端直径差的1/2,当锥面的起点坐标大于终点坐标时为正,反之为负;F为切削进给速度。
注意事项如下。
(1)使用循环切削指令,刀具必须先定位至循环起点,再执行循环切削指令,且完成一循环切削后,刀具仍回到此循环起点。
(2)G90是模态指令。
一旦规定,以下程序段一直有效,在完成固定切削循环后,用另一个G代码来取消。
格式中的I(R)值在圆柱切削时是不用的,在圆锥切削时才要用,这一点,我们可从图3-1中清楚看到。
(a)(b)图3-1 轴向(圆柱或圆锥)切削循环指令G90(a)(b)图3-2 轴向(圆柱或圆锥)切削循环指令G90应用如图3-2(a)所示, 加工余量(Z向)为:30mm,如果进刀量为5mm(直径测量),就分3次循环。
设循环起点为A点(50,52)。
创建记事本程序的操作步骤

创建记事本程序的操作步骤
嘿,朋友们!今天咱就来讲讲怎么创建记事本程序。
这可不难哦,
就像走路一样,一步一步来就好啦!
首先,咱得找到那个神奇的“开始”按钮,就像找到开启宝藏的钥匙
孔一样。
点一下它,嘿,一大串东西就冒出来啦。
然后在那里面找“所
有程序”,这就像是在一个大宝藏堆里找我们想要的宝贝。
找到“所有程序”后,再在里面仔细瞅瞅,就能发现“附件”啦。
这“附件”就像是一个藏着各种小工具的小盒子。
打开这个小盒子,哇哦,
“记事本”就在里面等着我们呢!就像找到了我们一直想要的那个小玩
具一样。
这时候,只要轻轻点一下“记事本”,嘿,它就出来啦!就像变魔术
一样,一个可以让我们写字、记录想法的地方就出现啦。
你说这神奇不神奇?就这么简单几步,我们就创建好记事本程序啦。
这就好像我们盖房子,一块砖一块砖地往上垒,最后就建成了一座漂
亮的小房子。
我们可以在记事本里写日记,记录每天的喜怒哀乐;可以写计划,
规划我们未来要做的事情;还可以写一些小灵感,说不定哪天这些小
灵感就能变成大创意呢!
想象一下,如果没有记事本,我们的那些想法、那些记忆该往哪里放呢?难道就任由它们在脑子里飘来飘去,最后消失不见吗?那多可惜呀!
所以呀,学会创建记事本程序是多么重要的一件事呀!它就像我们的一个小助手,随时准备帮我们记录下生活中的点点滴滴。
现在,你是不是觉得创建记事本程序其实很简单呀?那就赶紧去试试吧,让我们的生活因为有了记事本而变得更加丰富多彩!别再犹豫啦,行动起来才是最重要的呢!。
java课程设计记事本设计报告

java课程设计记事本设计报告一、教学目标本课程旨在通过Java编程语言实现一个记事本应用程序,让学生掌握Java编程的基本概念和方法,培养学生的编程能力和解决问题的能力。
1.理解Java编程语言的基本语法和结构。
2.掌握Java编程中的数据类型、变量、运算符、控制语句等基本概念。
3.学习Java中的类和对象的概念,理解封装、继承和多态的原理。
4.熟悉Java中的常用类库和方法。
5.能够运用Java编程语言编写简单的程序。
6.能够使用Java编程语言实现一个记事本应用程序,包括文本的增删改查等功能。
7.能够分析并解决编程过程中遇到的问题。
情感态度价值观目标:1.培养学生的团队合作意识和沟通能力,通过小组合作完成项目。
2.培养学生的创新思维和解决问题的能力,鼓励学生进行自主学习和探索。
3.培养学生的学习兴趣和自信心,让学生感受到编程的乐趣和成就感。
二、教学内容本课程的教学内容主要包括Java编程语言的基本概念和方法,以及记事本应用程序的设计和实现。
1.Java编程语言的基本概念和方法:–数据类型、变量、运算符、控制语句等基本概念。
–类和对象的概念,封装、继承和多态的原理。
–常用类库和方法的使用。
2.记事本应用程序的设计和实现:–用户界面设计:创建文本框、按钮等控件,实现用户输入和显示功能。
–文件操作:实现文件的打开、保存、关闭等功能,使用文件读写技术。
–文本处理:实现文本的增删改查等功能,使用数据结构和算法进行文本管理。
三、教学方法本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等,以激发学生的学习兴趣和主动性。
1.讲授法:教师通过讲解Java编程语言的基本概念和方法,以及记事本应用程序的设计和实现,引导学生掌握相关知识。
2.讨论法:学生分组进行讨论,分享自己的理解和思路,互相学习和交流。
3.案例分析法:分析实际案例,让学生了解记事本应用程序的实际应用场景和设计思路。
4.实验法:学生通过编写代码和进行实验,实现记事本应用程序的功能,培养学生的实际编程能力和解决问题的能力。
抖音上用记事本编写爱心小程序教程

抖⾳上⽤记事本编写爱⼼⼩程序教程本⽂实例为⼤家分享了抖⾳上⽤记事本编写爱⼼⼩程序的具体代码,供⼤家参考,具体内容如下先上⼀波效果图:⼀颗旋转的⼩⼼⼼七⼣的前⼀天晚上,当我满怀期待的把这颗“爱⼼”展⽰给我⼥朋友的时候,我以为她会very..very..happy 但是..她和我说你给我颗⼤蒜⼲什么啊..Why are you giving me a garlic..也就是那个时候,我突然觉得这真的像⼀颗⼤蒜哎好啦,不多说了。
直接上源代码:<!DOCTYPE html><html lang="zh-cn"><head><meta charset="UTF-8"><title>Document</title><style>@keyframes ani{from{transform:rotateY(0deg) rotateX(0deg);}to{transform:rotateY(360deg) rotateX(360deg);}}body{perspective:1000px;}#heart{position:relative;height:200px;width:150px;margin:200px auto;animation:ani 5s linear infinite;transform-style:preserve-3d;}.line{position:absolute;height:200px;width:150px;border:2px solid red;border-left:0;border-bottom:0;border-radius:50% 50% 0/50% 40% 0;}#word{font-family:"⾪书";font-size:1.3em;color:red;position:absolute;top: 80px;left:22px;font-weight:bold;}</style></head><body><div id="heart"><div id="word">I LOVE You</div></div><script>var heart=document.getElementById("heart");var html="";for(var i=0;i<36;i++){html+="<div class='line' style='transform:rotateY("+i*10+"deg) rotateZ(45deg) translateX(25px)'></div>";}heart.innerHTML += html;</script></body></html>运⾏这串代码也是⾮常简单,打开记事本,复制粘贴,将后缀名改为.html。
程序员常用的记事本

程序员常用的记事本
程序员常用的记事本软件有很多种,下面是几个常用的:
1. Notepad++: Notepad++ 是一款免费的纯文本编辑器,具备语法高亮、代码折叠、拼写检查等功能。
它支持多种编程语言,包括 C、C++、Java、Python 等。
2. Sublime Text: Sublime Text 是一款功能强大的文本编辑器,它支持多种编程语言,包括 Python、JavaScript、Ruby 等。
它还具有快捷键、语法高亮、插件等功能,让用户更高效地编写代码。
3. Atom: Atom 是一款开源的文本编辑器,它支持多种编程语言,包括 C、C++、Java、Python 等。
它具有强大的插件系统,用户可以根据自身需求安装各种插件,提高编写代码的效率。
4. Visual Studio Code: Visual Studio Code 是一款免费、开源的轻量级编程工具,它支持多种编程语言,包括 C、C++、Java、Python 等。
它还具有代码补全、调试器、编辑器插件等功能,让用户更高效地编写代码。
5. Quiver: Quiver 是一款为程序员设计的笔记软件,它可以混合文字、代码、Markdown 和 LaTeX 等内容。
它支持多种平台,包括macOS、Windows 和 Linux 等。
它还具有同步、笔记搜索、标签等功能,让程序员更方便地记录和管理笔记。
记事本程序

NotePad一、实验项目名称记事本程序—notepad二、实验目的模拟系统自带的记事本程序,主要为学习DIALOG一章练手。
三、编程环境Windows xp sp3,vc++6.0四、实验过程、代码、结果1、建立工程MFC 工程NotePad,基于dialog;2、设计界面:3、程序界面元素主窗口为dialog, 菜单,RichEdit控件。
三控件属性:Dialog属性:标题栏,系统菜单,最大化,最小化菜单条设计如下:;RichEdit控件属性:多行,垂直滚动4、设计概要这个程序说实话没什么技术含量,只有是对菜单、各种对话框、系统消息处理的应用,熟悉这个控件类中用到的函数和一些常用函数。
5、设计步骤1、初始化RichEdit控件。
该控件所属类为CRichEdit,ID默认为是IDC_RICHEDIT1,在使用前和其他的控件不一样,必须在使用前初始化。
具体操作:在C##APP类的InitInstance()函数开头加上函数:AfxInitRichEdit();2、在打开MFC ClassWizard 的 MemberVariables,为IDC_RICHEDIT1添加一个控件变量“m_MyRichEdit”,和一个string类型的变量m_text;3、“插入”-“资源”,增加一个菜单资源(IDR_MENU1)编辑好,界面如上。
4、将菜单资源装入程序中,做法是在对话框类定义中添加以下代码:class C##Dlg : public CDialog{......CMenu m_menu; //在头文件中加入CMenu变量......}然后在对话框类的初始化函数中添加代码:BOOL C##Dlg::OnInitDialog(){CDialog::OnInitDialog();......//加载菜单m_menu.LoadMenu(IDR_MENU1);//设置当前菜单SetMenu(&m_menu);//当你不需要菜单时可以用SetMenu(NULL);来取消当前菜单......}5、运行一下,这时候菜单应出现了6、然后在MFC ClassWizard 为每个菜单项目添加响应函数,具体代码如下:/*******文件菜单消息处理函数******************************///退出程序void CNotePadDlg::OnMenuFileExit(){//检查当前文档是否被编辑过if(m_MyRichEdit.GetModify()){int bkvalue = MessageBox("当前文档已被修改,需要保存吗?","保存提示",MB_YESNOCANCEL|MB_ICONQUESTION);if( bkvalue== IDYES){OnMenuFileSave();}else if(bkvalue == IDCANCEL)return;}exit(0);}//新建文件void CNotePadDlg::OnMenuFileNew(){if(m_MyRichEdit.GetModify()){int bkvalue =MessageBox("当前文档已被修改,需要保存吗?","保存提示",MB_YESNOCANCEL|MB_ICONQUESTION);if( bkvalue == IDYES)OnMenuFileSave();else if(bkvalue == IDCANCEL)return;}m_MyRichEdit.SetWindowText("");//修改窗口标题title = L"新建文档.txt";AfxGetMainWnd()->SetWindowText(title+huozhui);}//打开文件void CNotePadDlg::OnMenuFileOpen(){//显示文件打开对话框if(m_MyRichEdit.GetModify()){int bkvalue =MessageBox("当前文档已被修改,需要保存吗?","保存提示",MB_YESNOCANCEL|MB_ICONQUESTION);if( bkvalue == IDYES)OnMenuFileSave();else if(bkvalue == IDCANCEL)return;}CFileDialog dlg(TRUE, "SQL", NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");if ( dlg.DoModal()!=IDOK ) return;//获取文件的绝对路径CString sFileName=dlg.GetPathName();filepath = sFileName;//获取文件名title = dlg.GetFileName();//设置窗口标题AfxGetMainWnd()->SetWindowText(title+huozhui);//打开文件CStdioFile out;out.Open(sFileName, CFile::modeRead);CString sSql="", s;//读取文件do{out.ReadString(s);sSql=sSql+s+(char)10; //10是换行符LF的ASSCII码值}while (out.GetPosition()!=out.GetLength());out.Close();m_MyRichEdit.SetWindowText(sSql);}//保存文件void CNotePadDlg::OnMenuFileSave(){//如果该文件时一个新建的文件,则另存为,如果是一个已经存在的文件,则直接保存。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京理工大学珠海学院课程设计说明书2012—2013学年第2学期题目: 模拟记事本程序学院:计算机学院专业班级:学号:学生姓名:指导教师:成绩:时间:2013年5月 22日北京理工大学珠海学院课程设计任务书2012—2013学年第2学期学生姓名:专业班级:指导教师:工作部门:一、课程设计题目模拟记事本程序二、课程设计内容用文本命令行界面模拟记事本功能:包括编辑、保存、另存为、复制、粘贴、查找、替换等功能。
三、进度安排(1)1-2学时,选定题目、分析需求、理解需求;(2)3-4学时,程序设计,定义数据类型、数据处理方式;(3)5-10学时,编写程序、调试、测试;(4)11-12学时,编写设计报告;(5)13-16学时,答辩。
四、基本要求(1)只能使用C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)建立文件操作类、界面显示类及相关接口类,用文件读写实现。
(5)写出课程设计报告,应不少于3000字(不含附录),同一组学生只需提交1份,但必须在报告中列明分工。
课程负责人签名:年月日课程设计分工安排课程设计成绩评定表模拟记事本摘要本程序采用纯C++编写,用文本命令行界面模拟记事本功能:包括编辑、保存、另存为、复制、粘贴、查找、替换等功能。
运用了vector容器来充当寄存器,还用#include<fstream>实现文件的读入读出关键词:面向对象;模拟记事本;文件读写;编辑、保存、另存为、复制、粘贴、查找、替换目录第一章设计内容 (1)第二章总体设计 (5)2.1模块化设计 (5)2.2程序运行示意图 (5)第三章详细设计 (5)3.1数据结构设计 (6)3.2程序模块设计 (6)3.3流程图 (10)第四章调试与测试 (10)4.1调试过程中的主要问题 (10)4.2测试结果 (10)参考文献 (13)心得体会 (13)第一章设计内容#include<iostream>using namespace std;#include<string>#include<vector>#include <fstream>vector<string>savee; //寄存容器vector<string>saved; //复制容器//中英文实际个数----------------------------------------------------------------------unsigned int GetStringCount(const string &s){short ch;unsigned cnt = s.size();for(size_t i=0; i<s.size(); ++i){ch = s.at(i);if(ch&0x1000) ++i,--cnt;}return cnt;}//取得以0为起始索引的指定位置字符-------------------------------------------string GetString(string &s, size_t index){short ch;string res;unsigned cnt = index;size_t i;for(i=0; i<s.size() && i<cnt; ++i){ch = s.at(i);if(ch&0x1000) ++i,++cnt;}ch = s.at(i);if(ch&0x1000) res=s.substr(i,2);else res=s.substr(i,1);return res;}//定义记事本类,包括9个成员函数--------------------------------------------class notepad{public:notepad(){}~notepad(){}void operator_interface(); //用户操作界面void open(); //读入void input(); //写入void copy(); //复制void paste(); //粘贴int find(); //查找void rplace(); //替换void save(); //保存void lsave(); //另存};void notepad::operator_interface(){cout<<"********************************************************"<<endl;cout<<"0.打开文档内容"<<endl;cout<<"1.输入文档内容"<<endl;cout<<"2.复制某些内容"<<endl;cout<<"3.粘贴某些内容"<<endl;cout<<"4.查找某些内容"<<endl;cout<<"5.替换某些内容"<<endl;cout<<"6.保存文档"<<endl;cout<<"7.另存文档"<<endl;cout<<"8.返回操作界面"<<endl;cout<<"9.我要结束操作"<<endl;cout<<"********************************************************"<<endl; }void notepad::open(){savee.clear ();string s;cout<<"输入你要打开的文档的位置"<<endl;cin>>s;ifstream T(s.data());string ch;while(getline(T,ch)){cout << ch<<endl;savee.push_back (ch);}T.close();}void notepad::input (){int s;savee.clear ();string v;cout<<"输入总行数,格式:1-99"<<endl;cin>>s;getchar();for(int i=0;i<s;i++){getline(cin,v);savee.push_back (v);}}void notepad::copy(){string s1,line;int a,b,c,d;int i=1,sum1=0,sum2=0;saved.clear();cout<<"请输入你要复制的开始位置(第几行,第几个字符)"<<endl;cin>>a;cin>>b;cout<<"请输入你要复制的结束位置(第几行,第几个字符)"<<endl;cin>>c;cin>>d;cout<<endl;i=1;for(vector<string>::iterator iter=savee.begin ();iter!=savee.end ();iter++,i++){ s1=*iter;if(a==i&&a==c){for(int j=b-1;j<d;j++){cout<<GetString(s1,j);//getline(GetString(s1,b-1),line);}}if(a==i&&a!=c){for(unsigned int j=b-1;j<GetStringCount(s1);j++){saved.push_back (GetString(s1,j));//getline(GetString(s1,b-1),line);}}if(a<i&&i<c){for(unsigned int j=0;j<GetStringCount(s1);j++){saved.push_back (GetString(s1,j));}}if(i!=1&&i==c){for(int j=0;j<d;j++){saved.push_back (GetString(s1,j));}}saved.push_back ("\n");}ofstream W("d:\\copycopy.txt");for(vector<string>::iterator ite=saved.begin ();ite!=saved.end ();ite++){W<<*ite;}cout<<endl;}void notepad::paste(){for(vector<string>::iterator ite=saved.begin ();ite!=saved.end ();ite++){cout<<*ite;}}int notepad::find(){int i=1;string s,v;cout<<"请输入你要查找的字符"<<endl;cin>>v;for(vector<string>::iterator iter=savee.begin ();iter!=savee.end ();iter++){s=*iter;string::size_type pos =s.find (v);if(pos != string::npos){cout<<"查找的位置第一次出现在的位置为:"<<i<<"行"<<"第"<<pos+1<<"个字符"<<endl;return pos;}i++;}return 0;}void notepad::rplace (){int i=1;string s,v,r;cout<<"请输入你要被替换的字符"<<endl;cin>>v;cout<<"请输入你要替换的字符"<<endl;cin>>r;vector<string>::iterator iter;for(iter=savee.begin ();iter!=savee.end ();iter++){s=*iter;string::size_type pos = 0;while((pos = s.find(v, pos)) != string::npos) {s.replace(pos, v.size(), r);pos++;}//cout<<s<<endl;*iter=s;}for(iter=savee.begin ();iter!=savee.end ();iter++){cout<<*iter<<endl;}}void notepad::save (){string s;cout<<"请输入的要保存的文件位置和文件名和格式:"<<endl;cin>>s;ofstream T(s.data ());for(vector<string>::iterator i=savee.begin ();i!=savee.end ();i++){T<<*i<<endl;}T.close();}void notepad::lsave (){string s;cout<<"请输入你要另存的位置:"<<endl;cin>>s;ofstream T(s.data ());for(vector<string>::iterator i=savee.begin ();i!=savee.end ();i++){T<<*i<<endl;}T.close();}//定义主函数---------------------------------------------------------------void main(){cout<<"欢迎使用本程序,您可以在要输入文档内容时通过切换输入法实现输入汉字"<<endl;notepad b; //创建一个记事本对象b.operator_interface(); //显示操作界面char f[10];int choice; //操作号cin>>f;char *choic=f;if(*(choic+1)=='\0'&&isdigit(*choic)){ //错误输入处理机制choice=*choic-'0';}elsechoice=10;while(choice!=9){switch(choice){case 0:b.open();break;case 1:b.input();break;case 2:b.copy();break;case 3:b.paste();break;case 4:b.find ();break;case 5:b.rplace();break;case 6:b.save();break;case 7:b.lsave ();break;case 8:b.operator_interface();break;case 9:break;default:break;}if(choice==10||(choice>=0&&choice<=8)){ //输入错误时的操作及输入正确时的继续操作判断if(choice==10) cout<<"你输入的操作有误,请重新输入,输入8 获取操作帮助"<<endl;else cout<<"继续你的操作,输入8 获取操作帮助"<<endl;cin>>f;choic=f;if(*(choic+1)=='\0'&&isdigit(*choic)) //错误输入处理机制choice=*choic-'0';else choice=10;} }cout<<"感谢您的使用!"<<endl;}第二章 总体设计2.1模块化设计第1模块:读入。