一:需求分析1.课程设计名称:个人备忘录管理系统2.设计类容:编写一个简单的个人备忘录程序,帮助管理日常事务。3.程序设计要求:运用面向对象的程序设计方法,要求选择动态数组类模板或链表类模板,任务中要运用I/O流对象对文件进行读写操作。4.需求原因:随着生活水平的提高,人们的生活节奏越来越快,每天都要处理很多事情,而又会常常因忘记处理重要的事情而苦恼。鉴于此,本系统主要为了更好地管理个人的备忘录,让使用者的生活井然有序,不会忘记重要的会议和约会。功能实现:(1)界面※※※※※※※※※※※※※※※※※※※※★个人备忘录★★菜单★★******1---添加信息4---查询信息******★★******2---存储信息5---修改信息******★★******3---显示信息6---删除信息******★★******7---退出程序******★※※※※※※※※※※※※※※※※※※※※(2)功能1)添加:即增加一条信息到备忘录中;2)显示:即在屏幕上显示所有备忘录中的信息。3)存储:即将备忘录信息保存在一个文件中。4)装入:即将文件中的信息读入程序。5)查询:可根据日期查找备忘信息,若找到,显示在屏幕上。6)修改:可修改某日的备忘信息。4.测试数据程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。一、算法设计1.设计思想:(1)定义一个备忘录类(BWL),将备忘录所包含的信息(时间、内容)设定为类BWL的对象,便于赋值以及调用。(2)函数的框架图主体框架图票据图2.设计表示:(1)主菜单(menu):显示各项程序功能,通过此,用户可以根据自己所需进行选择。程序代码:voidmain(){intt;BWLbwl;do{cout※※※※※※※※※※※※※※※※※※※※endl;添加信息显示信息票据使用(utilize)存储信息主菜单(nemu)修改信息删除信息退出系统查询信息cout★个人备忘录★endl;cout★菜单★endl;cout★******1---添加信息4---查询信息******★endl;cout★******2---存储信息5---修改信息******★endl;cout★******3---显示信息6---删除信息******★endl;cout★******7---退出程序******★endl;cout※※※※※※※※※※※※※※※※※※※※endl;cout请选择endl;cint;switch(t){case1:bwl.creatBWL();break;case2:bwl.saveBWL();break;case3:bwl.showBWL();break;case4:bwl.findBWL();break;case6:bwl.deleteBWL();break;case5:bwl.correctBWL();break;}if(t==7)break;}while(1);}按1键,进入添加功能;按2键,进入存储功能;按3键,进入显示功能;按4键,进入查询功能;按5键,进入修改功能;按6键,进入删除功能;按7键,退出系统。(2)添加信息(menu1)voidBWL::creatBWL()//创建信息{cout请依次输入备忘录时间和内容:endl;cout备忘录时间(****-**-**-*****):;cintimeBWL;cout备忘录内容:;cincontentBWL;saveBWL();//调用函数,对信息进行保存cout备忘录已经保存!endl;system(pause);//程序结束}这是添加信息操作,需要依次输入备忘录的时间和备忘录内容,并且调用存储信息函数对输入的信息进行存储,并显示备忘录已经保存。(3)存储信息对信息进行存储。源代码:voidBWL::saveBWL()//保存{ofstreamf1(beiwanglu.txt,ios::app);//采用追加的方式打开文件if(!f1)//不存在文件{coutendl文件不存在!endlendl;system(pause);return;}f1setiosflags(ios::left)setw(17)timeBWLsetw(17)contentBWLendl;f1.close();//关闭文件cout信息已保存endl;}这是对信息进行存储,先已追加方式打开文件,然后依次将备忘录时间和备忘录内容存入文件内,然后关闭文件。显示信息已保存。(4)显示信息对已存储信息进行显示源代码:voidBWL::showBWL()//显示信息{ifstreamf2(beiwanglu.txt,ios::in);//以读的方式打开文件//在使用文件时,要检查文件是否可用if(!f2){cout文件不存在endl;system(pause);return;}boolflag=true;//定义一个布尔类型stringrecord;while(getline(f2,record))//输入{if(flag){coutendl所有的备忘录如下:endl;coutsetiosflags(ios::left)setw(17)备忘录时间setw(17)备忘录内容endl;}coutrecordendl;flag=false;//把false赋值给flag}if(flag)//如果为错误{coutendl您的备忘录中未存储信息!endl;}else{coutendl所有的备忘录已经显示!endl;}system(pause);}先以读的方式打开已存储信息的文件,将文件内的信息显示出来,同时定义一个布尔类型变量,如果flag为flase则显示“您的备忘录中未存储信息!”,如果为true则显示所有的备忘录已经显示!。(5)查询信息查找对应时间要进行的动作源代码:voidBWL::findBWL()//查找信息{BWL*head,*p,*q;chart[20];chartime[20];charcontent[500];head=NULL;cout请输入要查看的备忘录的时间:endl;cint;ifstreamf1(beiwanglu.txt);//以读方式打开文件//创建链表并从文件中读取备忘录信息q=newBWL;head=q;f1timecontent;q-Install(time,content);while(!f1.eof()){p=newBWL;f1timecontent;p-Install(time,content);q-next=p;q=p;}q-next=NULL;f1.close();//关闭文件p=head;while(p!=NULL){if(strcmp(p-retime(),t)==0)//如果t恰好等于p{coutsetiosflags(ios::left)setw(17)备忘录时间setw(17)备忘录内容endl;p-display();cout您所要查看的备忘录已显示!endlendl;}p=p-next;//否则将p往后移一个节点,进行查找}if(p=NULL)//如果为空cout这个时间没有备忘录!endl;}先创建一个链表来存储文件里的信息,然后输入要查询的时间,如果有则显示备忘录内容,并显示您所要查看的备忘录已显示!,如果没有要查找的时间则显示这个时间没有备忘录!。(6)修改信息对已输入的信息进行修改。源代码:voidBWL::correctBWL()//修改信息{BWL*head,*p,*q;chart[20];chartime[20];charcontent[500];head=NULL;cout请输入要修改的备忘录的时间:endl;cint;ifstreamf1(beiwanglu.txt);//以读方式打开文件//创建链表并从文件中读取备忘录信息q=newBWL;head=q;f1timecontent;q-Install(time,content);while(!f1.eof()){p=newBWL;f1timecontent;p-Install(time,content);q-next=p;q=p;}q-next=NULL;f1.close();//关闭文件p=head;while(p!=NULL){if(strcmp(p-retime(),t)==0)//先进行查找{coutsetiosflags(ios::left)setw(17)备忘录时间setw(17)备忘录内容endl;p-display();cout请输入新的备忘录信息:endl;cout备忘录时间:endl;cintime;cout备忘录内容:endl;cincontent;p-Install(time,content);ofstreamf2(beiwanglu.txt);//以写方式打开文件//向文件中写入修改后的备忘录信息,并进行保存p=head;while(p!=NULL){f2setiosflags(ios::left)setw(17)p-retime()setw(17)p-recontent()endl;p=p-next;}f2.close();//关闭文件cout备忘录信息修改完毕endl;}p=p-next;//若找不到,则将p的下一个结点赋给p,进行循环查找}if(p==NULL)cout无此备忘录信息endl;}输入要修改的时间,然后创建一个链表并把已打开文件信息存入链表,先查找到要修改的时间,再输入备忘录内容,然后将修改的信息存入文件。(7)删除信息voidBWL::deleteBWL()//删除信息{BWL*head,*p,*q;//定义两个指针变量p和qchart[20];chartime[20];charcontent[500];head=NULL;//头指针为空cout请输入要删除的备忘录的时间:endl;cint;ifstreamf1(beiwanglu.txt);//以读方式打开文件//创建链表并从文件中读取备忘录信息q=newBWL;//用new开辟一个新节点head=q;//把q的值赋给headf1timecontent;//从键盘输入信息q-Install(time,content);while(!f1.eof()){p=newBWL;//又开辟一个新节点f1timecontent;p-Install(time,content);q-next=p;//将p的值赋给q-nextq=p;//使指q向刚刚建立的节点}//以此循,创建链表q-next=NULL;//直到为空时,不再执行循环f1.close();//关闭文件//查找结点p=head;while(p!=NULL)//如果不为空{if(strcmp(p-retime(),t)==0)//找到了所需要的结点{coutsetiosflags(ios::left)setw(17)备忘录时间setw(17)备忘录内容endl;p-display();if(p==head)//如果指向的是表头结点{head=head-next;//把第二个结点的地址赋给head;}else{q-next=p-next;//否则把p的下一个结点赋给q的下一个结点,循环查找,删除p}deletep;cout备忘录已被删除!endl;}else//p指向的不是要找的结点,{q=p;//把p的地址赋给qp=p-next;//把p向