作业三:用c#实现一个记事本
Posted sjr123456
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作业三:用c#实现一个记事本相关的知识,希望对你有一定的参考价值。
1、功能说明:
设计一个Windows应用程序——记事本。通过本章的学习,可以进一步掌握MenuStrip(菜单)、ToolStrip(工具栏)、RichTextBox(高级文本框)和StatusStrip(状态栏控件)等控件的使用,以及如何使用CommonDialog(公共对话框)实现对文本的存取、格式设置等操作。
2、过程:
(1)菜单
i、实现功能:文件(F)
代码:
// 新建(N)
private void 新建NCtrlNToolStripMenuItem_Click(object sender, EventArgs e)
// 判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存
if (b == true || rtxtNotepad.Text.Trim() != "")
// 若文件未保存
if (s == false)
string result;
result = MessageBox.Show("文件尚未保存,是否保存?",
"保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
case "Yes":
// 若文件是从磁盘打开的
if (b == true)
// 按文件打开的路径保存文件
rtxtNotepad.SaveFile(odlgNotepad.FileName);
// 若文件不是从磁盘打开的
else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
rtxtNotepad.Text = "";
break;
case "No":
b = false;
rtxtNotepad.Text = "";
break;
//打开(O)
private void tsmiOpen_Click(object sender, EventArgs e)
if (b == true || rtxtNotepad.Text.Trim() != "")
if (s == false)
string result;
result = MessageBox.Show("文件尚未保存,是否保存?",
"保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
case "Yes":
if (b == true)
rtxtNotepad.SaveFile(odlgNotepad.FileName);
else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
break;
case "No":
b = false;
rtxtNotepad.Text = "";
break;
odlgNotepad.RestoreDirectory = true;
if ((odlgNotepad.ShowDialog() == DialogResult.OK) && odlgNotepad.FileName != "")
rtxtNotepad.LoadFile(odlgNotepad.FileName);//打开代码语句
b = true;
s = true;
// 保存(S)
private void tsmiSave_Click(object sender, EventArgs e)
//由于这个没有改Name属性,所以和图片不太一样,对照就行
// 若文件从磁盘打开并且修改了其内容
if (b == true && rtxtNotepad.Modified == true)
rtxtNotepad.SaveFile(odlgNotepad.FileName);
s = true;
else if (b == false && rtxtNotepad.Text.Trim() != "" &&
sdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SaveFile(sdlgNotepad.FileName);//保存语句
s = true;
b = true;
odlgNotepad.FileName = sdlgNotepad.FileName;
// 另存为(A)
private void tsmiSaveAs_Click(object sender, EventArgs e)
if (sdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
// 退出(E)
private void tsmiClose_Click(object sender, EventArgs e)
Application.Exit();//程序结束
效果图:
ii、编辑(E)
代码:
// 撤销(Z)
private void tsmiUndo_Click(object sender, EventArgs e)
rtxtNotepad.Undo();//撤销
private void tsmiCopy_Click(object sender, EventArgs e)
rtxtNotepad.Copy();//复制
private void tsmiCut_Click(object sender, EventArgs e)
rtxtNotepad.Cut();//剪切
private void tsmiPaste_Click(object sender, EventArgs e)
rtxtNotepad.Paste();//粘贴
private void tsmiSelectAll_Click(object sender, EventArgs e)
rtxtNotepad.SelectAll();//全选
private void tsmiDate_Click(object sender, EventArgs e)
rtxtNotepad.AppendText(System.DateTime.Now.ToString());//显示当前日期
结果图:
iii、格式O和查看V:
格式(O)代码:
// 自动换行
private void tsmiAuto_Click(object sender, EventArgs e)
if (tsmiAuto.Checked == false)
tsmiAuto.Checked = true; // 选中该菜单项
rtxtNotepad.WordWrap = true; // 设置为自动换行
else
tsmiAuto.Checked = false;
rtxtNotepad.WordWrap = false;
// 字体
private void tsmiFont_Click(object sender, EventArgs e)
fdlgNotepad.ShowColor = true;
if (fdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SelectionColor = fdlgNotepad.Color;
rtxtNotepad.SelectionFont = fdlgNotepad.Font;
截图:
查看(V)代码:
// 工具栏
private void tsmiToolStrip_Click(object sender, EventArgs e)
Point point;
if (tsmiToolStrip.Checked == true)
// 隐藏工具栏时,把坐标设为(0,24),因为菜单的高度为24
point = new Point(0, 24);
tsmiToolStrip.Checked = false;
toolStrip1.Visible = false;
// 设置多格式文本框左上角位置
rtxtNotepad.Location = point;
// 隐藏工具栏后,增加文本框高度
rtxtNotepad.Height += toolStrip1.Height;
else
/* 显示工具栏时,多格式文本框左上角位置的位置为(0,49),
因为工具栏的高度为25,加上菜单的高度24后为49 */
point = new Point(0, 49);
tsmiToolStrip.Checked = true;
toolStrip1.Visible = true;
rtxtNotepad.Location = point;
rtxtNotepad.Height -= toolStrip1.Height;
// 状态栏
private void tsmiStatusStrip_Click(object sender, EventArgs e)
if (tsmiStatusStrip.Checked == true)
tsmiStatusStrip.Checked = false;
stsNotepad.Visible = false;
rtxtNotepad.Height += stsNotepad.Height;
else
tsmiStatusStrip.Checked = true;
stsNotepad.Visible = true;
rtxtNotepad.Height -= stsNotepad.Height;
结果图:
iv、帮组(H):
代码:
// 关于记事本
private void tsmiAbout_Click(object sender, EventArgs e)
frmAbout ob_FrmAbout = new frmAbout();
ob_FrmAbout.Show();
截图:
关于记事本的具体实现:
代码:
private void btnOk_Click(object sender, EventArgs e)
this.Close();
private void linkLabel1_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
System.Diagnostics.Process.Start("http://www.baidu.com");
效果图:
3、工具栏:
代码:
// 快捷工具栏
private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
int n;
// 变量n用来接收按下按钮的索引号从0开始
n = toolStrip1.Items.IndexOf(e.ClickedItem);
switch (n)
case 0:
新建NCtrlNToolStripMenuItem_Click(sender, e);
break;
case 1:
tsmiOpen_Click(sender, e);
break;
case 2:
tsmiSave_Click(sender, e);
break;
/*case 3:
tsmiCopy_Click(sender, e);
break;*/ // 我们不用case3
case 4:
tsmiCut_Click(sender, e);
break;
case 5:
tsmiPaste_Click(sender, e);
break;
/*case 6:
tsmiPaste_Click(sender, e);
break; */ // 我们不用case6
case 7:
tsmiAbout_Click(sender, e);
break;
3、计时器:
// 计时器
private void tmrNotepad_Tick(object sender, EventArgs e)
tssLbl2.Text = System.DateTime.Now.ToString();
4、窗体:
代码:
private void frmNotepad_SizeChanged(object sender, EventArgs e)
frmNotepad ob_frmNotepad = new frmNotepad();
tssLbl1.Width = this.Width / 2 - 12;
tssLbl2.Width = tssLbl1.Width;
5、总结:
在实验的过程中,遇到了不少的问题,比如有时候修改或删除了部分代码,但是属性值忘记相应地进行修改,就会导致窗体的界面崩溃,显示错误打不开,就只能重新再来一遍。还有刚开始打开winform的时候,组件那块全是白色,就是不能进行使用,后面在网上一直查询搜索相关的资料才最终的解决组件不能用的问题。
C++,,,课堂作业求助,,,编写一个程序,,计算自己的生日距离今天多少天,,是星期几
编写一个程序,,计算自己的生日距离今天多少天,,是星期几
参考技术A #include <time.h>tm t;
_getsystime(&t);
// struct tm
// int tm_sec; /* seconds after the minute - [0,59] */
// int tm_min; /* minutes after the hour - [0,59] */
// int tm_hour; /* hours since midnight - [0,23] */
// int tm_mday; /* day of the month - [1,31] */
// int tm_mon; /* months since January - [0,11] */
// int tm_year; /* years since 1900 */
// int tm_wday; /* days since Sunday - [0,6] */
// int tm_yday; /* days since January 1 - [0,365] */
// int tm_isdst; /* daylight savings time flag */
// ; 参考技术B #include"iostream.h"
void main()
bool m;
int date[12]=31,28,31,30,31,30,31,31,30,31,30,31;
int year1,mon1,day1;
int year,mon,day,weekend;
int i,total=0;
loop:
cout<<"输入你的出生日期(年月日):";
cin>>year1>>mon1>>day1;
cout<<"输入今天的日期:";
cin>>year>>mon>>day;
cout<<"今天是星期几:";
cin>>weekend;
if(year%4==0)
if(year%100!=0||year%400==0) date[1]=29;m=true;
//判断是否是闰年。
try
if(year<year1) throw year;
if(mon<1||mon>12||mon1<1||mon1>12) throw mon;
if(day1>date[mon1-1]||day>date[mon-1]) throw day;
catch(int)
cout<<"数据Error!"<<endl;
cout<<"**********************"<<endl;
goto loop;
//检验输入数据是否正确。
if(mon<=mon1)
for(i=mon;i<mon1;i++) total=total+date[i];
total=total+day1-day;
if(total<0)
if(m==true) total=366+total;
else total=365+total;
else
for(i=mon1;i<mon;i++) total=total+date[i];
total=total+day-day1;
if(m==true) total=366-total;
else total=365-total;
cout<<"你的生日距今还有:"<<total<<"天"<<endl;
weekend=(weekend+total%7)%7;
if(weekend==0) cout<<"星期天"<<endl;
else
cout<<"星期:"<<weekend<<endl;
参考技术C /*
date.h
*/
/*
定义和实现日期类
Microsoft Visual C++ .NET编译通过
*/
#include "time.h"
#include "iostream"
using namespace std;
class date
public:
date();
date(int year,int month,int day);
int ydays() const;
int get_day() const;
int get_month() const;
int get_year() const;
int get_week() const;
void set_day(int day);
void set_month(int month);
void set_year(int year);
static bool isLeapYear(int year);
static unsigned long int count_days(const date& begin,const date& end);
private:
int m_year;
int m_month;
int m_day;
;
date::date()
//默认构造函数,用当前时间初始化
time_t temp;
time(&temp);
tm *_time=localtime(&temp);
m_year=_time->tm_year+1900;
m_month=_time->tm_mon;
m_day=_time->tm_mday;
date::date(int year,int month,int day):m_year(year),m_month(month-1),m_day(day)
int date::get_day() const
return m_day;
int date::get_month() const
return m_month;
int date::get_year() const
return m_year;
void date::set_day(int day)
m_day=day;
void date::set_month(int month)
m_month=month;
void date::set_year(int year)
m_year=year;
int date::ydays() const
//计算从1月1号到当前日期的天数
int total=m_day;
int mt[]=31,28+isLeapYear(m_year),31,30,31,30,31,31,30,31,30,31;
for (int i=0;i<m_month;i++)
total+=mt[i];
return total;
bool date::isLeapYear(int year)
//判断闰年
if((year % 400 == 0)||(year % 4 == 0)&&(year % 100 != 0))
return true;
return false;
unsigned long int date::count_days(const date& begin,const date& end)//to-do
//计算两个日期间隔的时间
int total=0;
if (begin.get_year()==end.get_year())
total+=(end.ydays()-begin.ydays());
else
total+=(365-begin.ydays()+end.ydays()+isLeapYear(begin.get_year()));
for (int i=begin.get_year()+1;i<end.get_year();i++)
total+=(365+isLeapYear(i));
return total;
///////////////////////////////////////////////////////////////
/*
test.cpp
*/
/*
调用date类实现了题目要求的操作
星期的计算以公元1年1月1日星期一为参照点
Microsoft Visual C++ .NET编译通过
*/
#include "stdafx.h"
#include "iostream"
#include "date.h"
using namespace std;
/*
http://zhidao.baidu.com/question/42587847.html
计算自己的生日距离今天多少天,,是星期几
*/
int _tmain(int argc, _TCHAR* argv[])
void print(const date& t);//日期的输出
int week(const date& t);//星期的计算
date now;//当前日期
//在此换成个人生日
date birthday(2007,12,22);
//输出
cout<<"从";
print(birthday);
cout<<"[星期"<<week(birthday)<<"]\n";
cout<<"到";
print(now);
cout<<"[星期"<<week(now)<<"]\n";
cout<<"一共是";
cout<<date::count_days(birthday,now)<<"天.\n";
return 0;
void print(const date& t)
cout<<t.get_year()<<"年"<<t.get_month()+1<<"月"<<t.get_day()<<"日";
int week(const date& t)
//以公元1月1日(星期1)为参照点
unsigned long int days=0;
int week=0;
date ref(1,1,1);
days=date::count_days(ref,t);
week=days%7+1;
return week;
本回答被提问者采纳 参考技术D 这个好像直接就有个api函数的,
以上是关于作业三:用c#实现一个记事本的主要内容,如果未能解决你的问题,请参考以下文章