课程报告

时间:2024.4.13

计算机高级语言课程设计报告

                   —新闻信息管理系统

               

               班级:191131

          学号:20131000310

          姓名:蔡路

          日期:2014/2/27

一.课程设计题目与要求(包括题目与系统功能要求)

已知一个日期类Date,其数据成员如下:

class Date{

private:

int m_year,m_month,m_day; //分别代表一个日期中的年月日

int m_totalDaysYear; //年份m_year 中的总天数

};

1. 在此基础上,请完善以下成员函数声明和定义,要求声明为public 访问标识,且成员函数在类外定义:

1) 默认的构造函数,要求具有三个默认值分别为2001(年),1(月)和1(日)

的形式参数,并在此构造函数内部根据m_year 的值,计算总天数。

2) 重载赋值操作符。

3) 析构函数。

4) 增加并实现以下类Date的成员函数,其功能和声明如下

int getDaysofYear();

//返回一个日期在当年中的天数,如2014/ 2/12 返回43

int getRemainingDaysofYear();

//返回一个日期在当年中的余下的天数,如2014/ 1/12 返回353

int compare(const Date &date);

//比较date 和当前对象的大小, 分别返回1,0 和-1 代表当前对象的日期大于,等于或小于date

int operator-(const Date &date);

//计算并返回date 和当前调用对象相差的天数

Date operator+(int days);

//计算当前对象加上days 天数的日期,并返回结果

5)定义并实现一个类Date 的友元函数, 声明和功能如下

friend ostream & operator<<(ostream & out, const Date & date);

//按照年/月/日格式输出, 如2014/ 1/12

6) 定义一个内联函数,其函数名和形式参数如下:

isLeapYear(int year ), 要求返回值为布尔类型,其功能为判断year 是否是闰年,闰年返回true,非闰年返回false。

2. 在上题提基础上,设计一个新闻类,要求能够记录新闻发生的日期、编号(整数从1 开始)、新闻类型、新闻标题、发生的地点以及新闻的内容。该类的部分数据成员声明如下:

class News{

private:

string m_news; //存储新闻内容,假设单词间以空格隔开,无换行符和Tab符,

Date m_date; //新闻报道的时间

public:

};

实现功能: 1) 实现每条新闻自动编号,编号从1 开始;

2) 某类型新闻在某段时间内发生的次数;如2013 年1 月1 日到2013 年12 月31 日期间体育类的新闻数目。

3) 根据特定关键词搜索相关的新闻,并将其输出到屏幕,如anti-corruption

4) 统计每条新闻的英文单词数目

5) 可增加和删除新闻, 增加或删除的结果保存到本地文件中

6) 在某日期之后一段时间内报道的新闻,并将其输出到屏幕, 如在2013/1/14 的169 天内报道的新闻

要求:

完善类的设计,实现相应功能,请加以说明你的设计。数据成员以m_ 开头,如m_news ,

函数成员请用有意义的英文单词如上题getRemainingDaysofYear()。

假定新闻类型如下:

enum NewsType{ Education, Politic, Sport, Science, Weather};

每条新闻按以下格式存储在本地文本文件中,

ID: 123

Date: 2014/1/13

Type: Sport

Title: Australian Open 2014: Roger Federer 'can get back to his best'

Address:Australian

Content: Stefan Edberg believes he can help get Roger Federer back to his best. The Swedish

six-time Grand Slam winner will be a part of Federer's coaching team for 10 weeks in 2014,

starting with the Australian Open. Swiss Federer, 32, won the last of his 17 Grand Slams at

Wimbledon in 2012.

类似上面的测试数据自己生成(可到www.bbc.co.uk 下载,新闻内容截取部分即可),至少要20 条。所有的新闻按上述格式存储在本地文件中,文件名为news.txt

程序源代码请用多文件结构实现。按照课程设计报告要求书写寒假作业报告。

二.需求分析

1.问题描述:用c ++编写一个简单的新闻信息管理系统,至少需要2个类,在这里由于害怕2个类会导致功能紊乱,代码不易读,我使用了3个类来实现问题。

①——Date的日期类(比较复杂的一个类):要求可以记录一个日期的年月日并可以返回及其它功能。以m_year,m_month,m_day,m_totalDaysYear为私有数据成员,对其进行保护,使用公有函数成员(即类的接口)对其进行操作,完成问题要求。

②——News的新闻类:这个类的设计比较简洁,清晰,因为它的作用比较简单,只是为了存储一条新闻信息,因此只需Date m_date;//新闻日期,int ID;//新闻编号,string Title;//新闻名,NewsType Type;//新闻类型,枚举类型,  string Address;//新闻发生地址,string m_news;//储存新闻内容这几个private就行了,接口也只是简单地赋值等函数。

③——newsmassage类,最紧要的就是其私有数据成员是vector的一个容器,vector<News> news,剩下的就是关于主菜单里的一些操作了,但这里的每一个操作都要用到其private的成员。

④——此外,此程序的实现还需要定义枚举类型和自定义的转换类型作为辅助,这些都定义在文件的开头以供newsmassage类使用。

2. 系统环境、运行要求:Visual  c ++ 6.0/2012等c++编译器。

三.概要设计(包括系统流程设计和系统模块设计)

均以流程图的形式呈现:

主菜单:

文本框: 主菜单 


加载模块:

查询模块:

删除模块:

统计与查看模块:

加载和保存部分:

四.详细设计(包括类的函数成员和数据成员设计、界面设计(见问题提示)、及其它模块设计与实现)

1.  类的函数成员和数据成员设计:

//************Date类

class Date{

private:

int m_year,m_month,m_day;//******私有数据成员

int m_totalDaysYear;

public:

Date(int year=2001,int month=1,int day=1);

~Date(){};//******析构函数

int getm_year(void);

int getm_month(void);

int getm_day(void);

Date(const Date & date);//复制构造函数

Date & operator=(const Date & date);//重载赋值构造函数

int operator-(const Date &date);//重载运算符

Date operator+(int days);//重载运算符

int compare(const Date &date);

void print();

int getDaysofYear();

int getRemainingDaysofYear();

friend ostream & operator<<(ostream & out, const Date & date){//重载输出运算符

       out<<date.m_year<<'\\'<<date.m_month<<'\\'<<date.m_day;

return out;

}

void strtodate(string);//类型转换

};

//************News类

class News{

private:

    Date m_date;//新闻日期

       int ID;//新闻编号

       string Title;//新闻名

       NewsType Type;//新闻类型,枚举类型

       string Address;//新闻发生地址

       string m_news;//储存新闻内容

public:

       News(){};//********************默认的构造函数

       ~News(){};//*************************析构函数

       News(Date,NewsType,int,string,string,string);

       News(const News & com){

         m_date=com.m_date;

         Title=com.Title;

               ID=com.ID;

         Type=com.Type;

         Address=com.Address;

         m_news=com.m_news;

}//复制构造函数

       Date getm_date(void);

       string getTitle(void);

       NewsType getType(void);

       int getID(void);

       string getAddress(void);

       string getm_news(void);

};

//************newsmassage类

class newsmassage{

private:

       vector<News> news;//**********************************vector容器

public:

       void File();//添加新闻信息文本

       void Save();//保存新闻信息

       void Display();//查看新闻信息

    void ADaysduring();//在某一日期之后时间段内发生的新闻

       void Daysduring();//某类型新闻在某一时间段内发生次数

       void Serching();//根据关键字寻找新闻

       void Addnews();//添加新闻

       void Deletenews();//删除新闻

       void Statistical_analysis();//统计新闻中英文单词数目

};

2.界面设计(见问题提示):主函数显示功能菜单,供用户选择操作。每步操作之前,都要显示菜单,在主函数中调用类的方法,在主函数中定义类对象 。

首先:定义显示菜单(不是类的成员函数):

      void ShowMenu()//***************************************显示菜单

其次:在while中调用ShowMenu()实现每步操作之前,都要显示菜单,这样就形成了主界面!!!

3.其它模块设计与实现(自定义的函数):

①enum NewsType{Education,Politic,Sport,Science,Weather};//枚举类型

NewsType strtotype(string ch){//******自定义的类型转换,字符串转为枚举

       NewsType type;//定义枚举变量

       if(ch=="Education")

              type=Education;

       else if(ch=="Politic")

              type=Politic;

       else if(ch=="Sport")

              type=Sport;

       else if(ch=="Science")

              type=Science;

       else type=Weather;

       return type;

}

②int strtoint(string ch){//******自定义的类型转换,字符串转为整型

       int a;

       if(ch.size()>1)

       a=(ch[0]-48)*10+ch[1]-48;

       else a=ch[0]-48;

       return a;

}

③string typetostr(NewsType type){//******自定义的类型转换,枚举转为字符串

       string str;

       switch(type){

       case 0:str="Education";break;

       case 1:str="Politic";break;

       case 2:str="Sport";break;

       case 3:str="Science";break;

       case 4:str="Weather";break;

       }

       return str;

}

五.测试(包括对各功能模块的测试,以截图的形式)

1.进入新闻管理系统,按任意键开始:

2.进入主页面:有十个选项可以任意选择:

3.测试功能,按数字9,首先读入原始的新闻数据,即读入vector:

4.进行功能的具体测试,从1开始,按关键字查询(新闻标题):

5.键入2,统计所有新闻英文单词数目,输出到屏幕:

6.键入3,统计某时间段内体育新闻发生次数:

7.键入4,统计某日期后时间段内新闻,并将其输出到屏幕:

8.键入5,添加一条新闻信息,不继续添加或继续添加(此处只添加一次,不继续添加)

9.键入7,查看所有新闻信息,此处截取添加的部分:(7的功能就是显示出所有vector中的数据,只要添加了信息文本(9),在添加,删除等操作之后均可查看所有新闻信息)

10.键入6,删除一条记录,可按号码或者地址删除,此处按号码删除:

11.键入6,这是删除之后的截图:

12.键入8,存储新闻信息到news1.txt,请到该工作目录下查看保存的文本:

13.键入0,安全退出新闻系统,按任意键退出:

六.结论(对系统开发的总结,设计的亮点,存在的不足,需要改进的地方)

这是我第2次做这样系统的开发,有了不一样的感觉,这也是一个非常实际,具有非常强综合力的系统开发,相比于返家之前的课程设计,我感觉有一定的相似度,但绝对不是一样的,说实话,自我感觉这个还难一点,虽然功能相似,但要求却多了,也更面向对象了。

这是一个面向对象的程序设计,与面向过程有很大的区别。我个人认为我的程序的优点就是1.充分的体现了类的概念,整个程序使用了3个类,均有数据成员和函数成员,功能都是通过类来完成。2.另外,程序用了多文件结构,便于编译和改错。3.还有就是本程序可以实现题目的要求,虽然有的地方有一些限制,但总体还是可以的。

在缺点方面,本程序有些缺陷1.安全性不够高,输错可能导致程序崩溃。2.代码不够简洁。3.部分功能有限制,等一些缺陷,但在以后的学习中我会一一改正过来,让程序达到完美。

最后想说的是,调试程序真的很关键。据我统计,有好多次我都因为错误太多而做不下去了,但最终经过我的仔细调试都改了过来,真心觉得调试是个好东西,调试程序需要较大的耐心,我在调试方面花费了很多的时间,调试程序的时间比自己编写整个程序的时间还要长,下的工夫还要深,但这是一个身为程序员必须了解,也必须接受的事实。

通过这个寒假作业的练习,我学到了很多东西,特别是加深了对类和对象理解和应用得方面,非常感谢老师给我的提示!也希望我在以后的学习中能够学好c ++,做出更完美的系统!

参考文献:C++程序设计(第二版)高等教育出版社,c ++ Primer 中文版等。

七.附录(源程序代码)

#include<iostream>

#include<cmath>

#include<vector>

#include<fstream>

#include<string>

#include<cstring>

#include<iterator>

#include<conio.h>//*****************************用getch()停顿;

enum NewsType{Education,Politic,Sport,Science,Weather};//枚举类型

using namespace std;

NewsType strtotype(string ch){//***********************自定义的类型转换

       NewsType type;

       if(ch=="Education")

              type=Education;

       else if(ch=="Politic")

              type=Politic;

       else if(ch=="Sport")

              type=Sport;

       else if(ch=="Science")

              type=Science;

       else type=Weather;

       return type;

}

int strtoint(string ch){//***********************自定义的类型转换

       int a;

       if(ch.size()>1)

       a=(ch[0]-48)*10+ch[1]-48;

       else a=ch[0]-48;

       return a;

}

string typetostr(NewsType type){//***********************自定义的类型转换

       string str;

       switch(type){

       case 0:str="Education";break;

       case 1:str="Politic";break;

       case 2:str="Sport";break;

       case 3:str="Science";break;

       case 4:str="Weather";break;

       }

       return str;

}

//*****************************Date日期类

class Date{

private:

       int m_year,m_month,m_day;

       int m_totalDaysYear;

public:

       Date(int year=2001,int month=1,int day=1);

       ~Date(){};//析构函数

       int getm_year(void);

       int getm_month(void);

       int getm_day(void);

       Date(const Date & date);//复制构造函数

       Date & operator=(const Date & date);//重载赋值构造函数

       int operator-(const Date &date);//重载运算符

       Date operator+(int days);//重载运算符

       int compare(const Date &date);

       void print();

       int getDaysofYear();

       int getRemainingDaysofYear();

       friend ostream & operator<<(ostream & out, const Date & date){//重载输出运算符

       out<<date.m_year<<'\\'<<date.m_month<<'\\'<<date.m_day;

       return out;

       }

       void strtodate(string);//类型转换

};

int Date::getm_year(void){

return m_year;

}

int Date::getm_month(void){

return m_month;

}

int Date::getm_day(void){

return m_day;

}

inline bool isLeapYear(int year ){

       if(year%4==0&&year%100!=0||year%400==0) return true;

       else return false;

}

Date::Date(int year,int month,int day):m_year(year),m_month(month),m_day(day){

       m_totalDaysYear=isLeapYear(m_year)?366:365;

}

Date::Date(const Date &date){

       m_year=date.m_year;

       m_month=date.m_month;

       m_day=date.m_day;

       m_totalDaysYear=date.m_totalDaysYear;

}

Date & Date::operator=(const Date & date){

       if(this==&date) return *this;

       m_year=date.m_year;

       m_month=date.m_month;

       m_day=date.m_day;

       m_totalDaysYear=date.m_totalDaysYear;

       return *this;

}

int Date::operator-(const Date &date){

       int num=0;

       Date bigDate,smallDate;

       int value=compare(date);

       if(value==1){

              bigDate=*this;

              smallDate=date;

       }else if(value==-1){

              bigDate=date;

              smallDate=*this;

       }else return 0;

       int yearGap=bigDate.m_year-smallDate.m_year;

       if(yearGap>=2){

              for(int i=smallDate.m_year+1;i<=bigDate.m_year-1;i++){

                     if(isLeapYear(i)) num+=366;

                     else num+=365;

              }

              num+=bigDate.getDaysofYear();

              num+=smallDate.getRemainingDaysofYear();

       }else if(bigDate.m_year-smallDate.m_year==1){

              num+=bigDate.getDaysofYear();

              num+=smallDate.getRemainingDaysofYear();

       }else{

              num+=bigDate.getDaysofYear();

              num-=smallDate.getDaysofYear();

       }

       if(value==1) return num;

       else return -num;

}

Date  Date::operator+(int days){

       int year=m_year,month,day;

       int remainings=getRemainingDaysofYear();

       if(days>remainings){

              days-=remainings;

              year++;

              int num=isLeapYear(year)?366:365;

              while(days>num){ // 找到相应的年份

                     days-=num;

                     year++;

                     num=isLeapYear(year)?366:365;

              }

       }

       int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};

       if(isLeapYear(year)) months[1]=29;

       month=m_month;

       if(days-(months[m_month-1]-m_day)>0){

              days-=months[m_month-1]-m_day;

              int i=m_month;

              for(;i<12;i++){// 找到相应的月份

                     if(days-months[i]<0) break;

                     days-=months[i];

              }

              month=i+1;

       }

       day=days;

       return Date(year,month,day);

}

int Date::compare(const Date &date){

       if(m_year>date.m_year){

              return 1;

       }else if(m_year<date.m_year){

              return -1;

       }else{

              if(m_month>date.m_month) return 1;

              else if(m_month<date.m_month) return -1;

              else{

                     if(m_day>date.m_day) return 1;

                     else if(m_day<date.m_day) return -1;

                     else return 0;

              }

       }

}

void Date::print(){

       cout<<m_year<<'\\'<<m_month<<'\\'<<m_day<<endl;

}

int Date::getDaysofYear(){

       int months[12]={31,28,31,30,31,30,31,31,30,31,30,31};

       if(isLeapYear(m_year)) months[1]=29;

       int num=0;

       for(int i=0;i<m_month-1;i++){

              num+=months[i];

       }

       return num+m_day;

}

int Date::getRemainingDaysofYear(){

       return m_totalDaysYear-getDaysofYear();

}

void Date::strtodate(string bIn){

     m_year=atoi(bIn.substr(0,4).c_str());

     m_month=atoi(bIn.substr(6,2).c_str());

     m_day=atoi(bIn.substr(9,2).c_str());

}

class News{

private:

    Date m_date;//新闻日期

       int ID;//新闻编号

       string Title;//新闻名

       NewsType Type;//新闻类型,枚举类型

       string Address;//新闻发生地址

       string m_news;//储存新闻内容

public:

       News(){};//********************默认的构造函数

       ~News(){};//*************************析构函数

       News(Date,NewsType,int,string,string,string);

       News(const News & com){

         m_date=com.m_date;

         Title=com.Title;

               ID=com.ID;

         Type=com.Type;

         Address=com.Address;

         m_news=com.m_news;

}//复制构造函数

       Date getm_date(void);

       string getTitle(void);

       NewsType getType(void);

       int getID(void);

       string getAddress(void);

       string getm_news(void);

};

News::News(Date lm_date,NewsType type,int id,string title,string address,string lm_news){

m_date=lm_date;

Title=title;

ID=id;

Type=type;

Address=address;

m_news=lm_news;

}

Date News::getm_date(void){

return m_date;

}

string News::getTitle(void){

return Title;

}

int News::getID(void){

return ID;

}

NewsType News::getType(void){

return Type;

}

string News::getAddress(void){

return Address;

}

string News::getm_news(void){

return m_news;

}

//newsmassage类

class newsmassage{

private:

       vector<News> news;//**********************************vector容器

public:

       void File();//添加新闻信息文本

       void Save();//保存新闻信息

       void Display();//查看新闻信息

    void ADaysduring();//在某一日期之后时间段内发生的新闻

       void Daysduring();//某类型新闻在某一时间段内发生次数

       void Serching();//根据关键字寻找新闻

       void Addnews();//添加新闻

       void Deletenews();//删除新闻

       void Statistical_analysis();//统计新闻中英文单词数目

};

void newsmassage::File(){

       string str;

       ifstream ifile;

       ifile.open("news.txt");

       while(ifile.eof()!=1){

       string title,address,content;

       int id;

       Date date;//定义date

       NewsType type;

       getline(ifile,str);//读id

       id=strtoint(str.substr(3,str.length()-3));//自定义

       getline(ifile,str);//读date

       date.strtodate(str.substr(5,10));

       getline(ifile,str);//读type

       type=strtotype(str.substr(5,str.length()-5));//自定义

       getline(ifile,str);//读title

       title=str.substr(6,str.length()-6);

       getline(ifile,str);//读addrress

       address=str.substr(8,str.length()-8);

       getline(ifile,str);//读news

       content=str.substr(8,str.length()-8);

       for(;str.length()!=0;){

       if(ifile.eof()!=0) break;

       getline(ifile,str);

       content+="\n";

       content+=str;

       }

       news.push_back(News(date,type,id,title,address,content));

       }

       cout<<"添加成功!"<<endl;

       ifile.close();

}

void newsmassage::Save(){

       ofstream ofile;

       ofile.open("news1.txt");

       for(int i=0;i<(int)news.size();i++){

              ofile<<"ID:"<<news[i].getID()<<endl;

              ofile<<"Date:"<<news[i].getm_date()<<endl;

              ofile<<"Type:"<<typetostr(news[i].getType())<<endl;

              ofile<<"Title:"<<news[i].getTitle()<<endl;

              ofile<<"Address:"<<news[i].getAddress()<<endl;

              ofile<<"Content:"<<news[i].getm_news()<<endl;

       }

       ofile.close();

       cout<<"储存成功!"<<endl;

}

void newsmassage::Display(){

       for(int i=0;i<(int)news.size();i++){

       cout<<"ID:"<<news[i].getID()<<endl;

       cout<<"Date:"<<news[i].getm_date()<<endl;

       cout<<"Title:"<<news[i].getTitle()<<endl;

       cout<<"Type:"<<typetostr(news[i].getType())<<endl;

       cout<<"Address:"<<news[i].getAddress()<<endl;

       cout<<"Content:"<<news[i].getm_news()<<endl;

       }

}

void newsmassage::ADaysduring(){

       Date date3;

       int year1,month1,day1;int a,b=0;

       cout<<"请输入date1的数据:";

       cin>>year1>>month1>>day1;

       Date date1(year1,month1,day1);

       cout<<"请输入天数:";

       cin>>a;

       for(int i=0;i<(int)news.size();i++){

              date3=news[i].getm_date();

              if(date1.compare(date3)<0&&date3.operator-(date1)<=a){

                     cout<<"新闻内容为:"<<endl;

                     cout<<"ID:"<<news[i].getID()<<endl;

               cout<<"Date:"<<news[i].getm_date()<<endl;

               cout<<"Title:"<<news[i].getTitle()<<endl;

               cout<<"Type:"<<typetostr(news[i].getType())<<endl;

               cout<<"Address:"<<news[i].getAddress()<<endl;

               cout<<"Content:"<<news[i].getm_news()<<endl;

              }

              else continue;

       }

}

void newsmassage::Daysduring(){

       Date date3;

       int a=0;

       int year1,year2,month1,month2,day1,day2;

       cout<<"请输入date1的数据(date1<date2):";

       cin>>year1>>month1>>day1;

       cout<<"请输入date2的数据:";

       cin>>year2>>month2>>day2;

    Date date1(year1,month1,day1),date2(year2,month2,day2);

       int num;

       num=date2.operator-(date1);

       for(int i=0;i<(int)news.size();i++){

              date3=news[i].getm_date();

              if(date1.compare(date3)<0&&date1.operator-(date3)<=num&&news[i].getType()==Sport) a++;

              else continue;

       }

       cout<<"体育类新闻次数:"<<a<<endl;

}

void newsmassage::Serching(){

       cout<<"按关键字查询(Title)!"<<endl;

       cout<<"输入新闻名称:"<<endl;

       string title;

       cin.get();

       getline(cin,title);

       for(int i=0;i<(int)news.size();i++){

              if(news[i].getTitle()==title){

              cout<<"新闻内容为:"<<endl;

              cout<<"ID:"<<news[i].getID()<<endl;

           cout<<"Date:"<<news[i].getm_date()<<endl;

           cout<<"Title:"<<news[i].getTitle()<<endl;

           cout<<"Type:"<<typetostr(news[i].getType())<<endl;

           cout<<"Address:"<<news[i].getAddress()<<endl;

           cout<<"Content:"<<news[i].getm_news()<<endl;

              }

       }

       cout<<"查找成功!"<<endl;

}

void newsmassage::Addnews(){

       while(1){

              string a;

              int year,month,day;

           NewsType Type;

              int ID;

           string Title;

           string Address;

           string m_news;

        cout<<"输入新闻日期:";

              cin>>year>>month>>day;

        Date m_date(year,month,day);

              cout<<"输入新闻序号:";

              cin>>ID;

              cin.get();

              cout<<"输入新闻名称:";

              getline(cin,Title);

              cout<<"输入新闻类型:";

           cin>>a;

              Type=strtotype(a);

              cout<<"输入新闻地址:";

              cin>>Address;

              cin.get();

              cout<<"输入新闻内容:";

              getline(cin,m_news);

              news.push_back(News(m_date,Type,ID,Title,Address,m_news));//重要的函数操作

              cout<<"是否继续添加,继续请按1,结束请按0"<<endl;

              int b;

              cin>>b;

              if(b==0) break;

       }

       cout<<"添加成功!"<<endl;

}

void newsmassage::Deletenews(){

    cout<<"按号码删除请按1,按地址删除请按2"<<endl;

       if(getch()=='2')

       {

              string Address;

              cout<<"输入要删除新闻的地址:";

              cin>>Address;

                     for(vector<News>::iterator iter=news.begin();iter!=news.end();){

                            if(iter->getAddress()==Address)

                                   iter=news.erase(iter);//重要的函数操作

                            else ++iter;

                     }

              }

       else

       {

              int ID;

              cout<<"输入要删除新闻的号码:";

              cin>>ID;

              for(vector<News>::iterator iter=news.begin();iter!=news.end();){

                            if(iter->getID()==ID)

                                   iter=news.erase(iter);

                            else ++iter;

                     }

              }

       cout<<"删除成功!"<<endl;

}

void newsmassage::Statistical_analysis(){

       int nword=0;

       int isword=0;

       int i;

                     for(i=0;i<(int)news.size();i++){

                     string str;

                     cout<<"读入需要统计的新闻内容!"<<endl;

                     str=news[i].getm_news();

                     char ch;

                     for(int j=0;i<str.length();j++){

                            ch=str[j];

                            if(ch=='\n') break;

                            else if(ch!=' '&&ch!='\t'&&ch!=','&&ch!='-'&&ch!='%'&&ch!='’'){

                            if(!isword) nword++;

                            isword=1;

                            }

                            else isword=0;

                     }

                     cout<<"第"<<i+1<<"条新闻的英文单词数目为:"<<nword<<endl;

                     nword=0;

                     }

                     cout<<"统计完毕!"<<endl;

}

void ShowMenu()//***************************************显示菜单

{

       cout<<"***********新闻信息管理系统***********"<<endl;

       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;

}

//*******************************************************主函数

int main(){

       int x,i=0;

    bool quit=false;

    for(i=0;i<3;i++)

    cout<<"                    ******************************              "<<endl;

    cout<<"                    【 欢迎进入新闻信息管理系统 】              "<<endl;

    for(i=0;i<3;i++)

    cout<<"                    ******************************              "<<endl;

    newsmassage Newsmassage;//定义类对象

    cout<<"按任意键开始……"<<endl;

    getch();

    while(!quit){

    ShowMenu();

    cin>>x;

switch(x){

    case 0:quit=true;cout<<"已退出!"<<endl;break;

    case 1:Newsmassage.Serching();break;

       case 2:Newsmassage.Statistical_analysis();break;

    case 3:Newsmassage.Daysduring();break;

    case 4:Newsmassage.ADaysduring();break;

    case 5:Newsmassage.Addnews();break;

    case 6:Newsmassage.Deletenews();break;

    case 7:Newsmassage.Display();break;

    case 8:Newsmassage.Save();break;

       case 9:Newsmassage.File();break;

       default:cout<<"选择有误!"<<endl;break;

}

       }

       return 0;

}

更多相关推荐:
课程报告范文

姓名学院电气与电子工程学院班级学号邮箱时间本科生课程研究报告指导手册0高电压工程课程报告目录本科生课程研究报告指导手册1本科生课程研究报告指导手册21报告简介本科生课程研究报告指导手册32背景资料本科生课程研究...

课程报告参考模板

大连交通大学逆向工程课程论文课程报告题目基于逆向工程的个性化假体设计综述学生姓名学号所在院系机械工程学院指导教师1大连交通大学逆向工程课程论文摘要逆向工程在医学上的应用是一门边缘学科涉及到机械工程生物材料科学医...

课程总结报告范本

华北科技学院课程总结20xx20xx学年第1学期安全评价技术院部安全工程学院姓名班级B105学号20xx10044502指导教师张跃兵

课程报告格式说明

课程报告格式说明,内容附图。

课程设计报告范文

计算机技术综合课程设计学生姓名何妞学号6103105048专业班级计算机051班指导教师林振荣二00八年7月4日目录1课程设计目的22课程设计题目描述和要求23课程设计内容24课程设计总结125参考书目1211...

课程报告格式

姓学院专业班级指导教师提交时间封面格式说明:1、报告封面中注明:报告题目、指导教师、作者姓名、学院、专业;2、页边距:上3.6cm、下3cm,左侧3cm、右侧2.5cm;3、段落格式:1.5倍行间距;4、纸张大…

观课报告范文

20xx年初中教师新课标课例研究全员远程研修观课报告(范文)在今天的观课议课活动中,我选择以“??”作为自己的观察视角,实地观察了***老师的一节英语新授(复习)课,现将自己的观课情况总结汇报如下:一、观察点选…

课程设计报告范文

新疆工程学院课程设计报告设计题目系部专业班级学号姓名指导教师完成日期新疆工程学院教务处印制1课程设计任务书教研室主任签名系部主任签名年2月日课程设计评定意见设计题目学生姓名专业班级评定意见评定成绩指导教师签名年...

管理学课程报告范文

浅谈管理的职能与科学管理理论在实践工作中的运用一个人真实经历20xx年暑假的时候正值我大学生涯第一年的完结那个时候经朋友推荐去武汉XX教育咨询有限公司参加面试成为了武汉XX教育中心南湖校区的一名教育顾问教育顾问...

科技文献检索课程报告范文

重庆大学研究生科技文献检索及利用课程报告姓名学号学院电话电子邮箱完成日期文献信息检索检索结果1检索词中文英文12检索3词和4检索2检索式式

工程初验报告(范本)

编号工程初验报告工程名称双河乡店子上至花秋坪公路建设单位威信县双河苗族彝族乡人民政府主管单位威信县财政局施工单位云南义博建筑工程有限公司设计单位威信县交通规划设计室监理单位云南中冶建筑工程监理有限公司检查日期2...

单位工程质量评估报告(范本)

单位工程质量评估报告范本昆明建设咨询监理公司生产管理部年月日全国甲级监理企业昆明建设咨询监理公司地址昆明市东风东路47号建业商务中心九楼电话3133920传真3133361XXXXXXXX工程单位工程质量评估报...

课程报告范文(27篇)