观影网站影评信息管理程序
基于codeblocks,文件存储的观影网站影评信息管理程序
- 题目描述
设计三个类:用户类、影片类、影评信息类。用户类用来存储在该网站注册用户的信息,影片类用来存储该网站提供观看的影片信息,影评信息类用来存储用户对影片进行评论和打分的信息。用户类可以包括以下数据成员:用户名、用户等级、年龄组、职业组、兴趣分类、电子邮箱等。影片类可以包括以下数据成员:影片名称、上映年份、导演、主演、出品公司、分级等。影评信息类可以包括以下数据成员:用户名、影片名称、打分、影评链接、评价次数等。(注意:影评信息类的用户名成员可关联到具体的某个用户、影片名称成员可关联到具体的某个影片)
在程序中需要实现用户信息的添加和查询、影片信息的添加和查询、影评信息的添加和查询。
注意:各种信息添加后要求存储在文件中,并根据文件中存储的信息进行查询。三种不同的信息可以存储在三个不同的文件中。
此外,需要为该程序设计简单的菜单系统,根据用户的选择进行不同的操作。
- 开发环境

启动界面

功能界面
SDE:
codeblocks-17.12mingw-setup
Codeblocks属于C/C++开发程序软件。程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为进行活动或过程所规定的途径。程序是由序列组成的,告诉计算机如何完成一个具体的任务。由于现在的计算机还不能理解人类的自然语言,所以还不能用自然语言编写计算机程序。为实现预期目的而进行操作的一系列语句和指令。一般分为系统程序和应用程序两大类。 计算机中的程序在港澳台地区称为程式。程序就是为使电子计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合。由程序计数器控制。程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。是用汇编语言、高级语言等开发编制出来的可以运行的文件,在计算机中称可执行文件(后缀名一般为.exe)
三、需求分析
1.面向用户类型分析
本产品的使用对象是电影评论的管理人员。
2.功能需求

a.主要功能
b.一些其他的辅助功能
清屏功能,改变用户界面颜色。
3.可行性分析
各种信息添加后要求存储在文件中,并根据文件中存储的信息进行查询。三种不同的信息可以存储在三个不同的文件中。包含在#include
包含在#include
四、系统设计及算法描述
- 系统功能结构设计

*可以关联到是否存在用户信息和电影信息*
- 类的设计

- 关键算法实现步骤
*添加信息(以添加用户信息为例)*
void myWriteuse(const char* filename,const User& swrite)
{
ofstream os(filename,ios_base::out|ios_base::app);
os.write(swrite.name.c_str(),swrite.name.length());
os<<" ";
os.write(toString(swrite.denji).c_str(),toString(swrite.denji).length());
os<<" ";
os.write(toString(swrite.age).c_str(),toString(swrite.age).length());
os<<" ";
os.write(swrite.major.c_str(),swrite.major.length());
os<<" ";
os.write(swrite.interest.c_str(),swrite.interest.length());
os<<" ";
os.write(swrite.emeal.c_str(),swrite.emeal.length());
os<<" ";
os.write(swrite.number.c_str(),swrite.number.length());
os<
os.close();
}
*浏览信息(以浏览用户信息为例)*
void myReaduse(const char* filename)
{
ifstream is(filename,ios_base::in);
string info;
User sread;
while(!is.eof())
{
getline(is,info);
if(info!="")
{
string age;
string denji;
istringstream istr(info);
istr>>sread.name;
istr>>denji;
sread.denji=fromString
istr>>age;
sread.age=fromString
istr>>sread.major;
istr>>sread.interest;
istr>>sread.emeal;
istr>>sread.number;
sread.printInfo();
}
}
is.close();
}
*查找信息(以查找用户信息为例)*
int myReaduse0(const char* filename,string name)
{
ifstream is(filename,ios_base::in);
string info;
User sread;
bool flag=0;
while(!is.eof())
{
getline(is,info);
if(info!="")
{
string age;
string denji;
istringstream istr(info);
istr>>sread.name;
istr>>denji;
sread.denji=fromString
istr>>age;
sread.age=fromString
istr>>sread.major;
istr>>sread.interest;
istr>>sread.emeal;
istr>>sread.number;
if(sread.name==name)
{
flag=1;
break;
}
}
}
is.close();
if(flag)
{
sread.printInfo();
return flag;
}
else
return flag;
}
*删除指定类容(以删除用户信息为例)*
int myDeletuse(const char* filename,string number)
{
ifstream is(filename,ios_base::in);
string info;
User sread;
bool flag=0;
while(!is.eof())
{
getline(is,info);
if(info!="")
{
string age;
string denji;
istringstream istr(info);
istr>>sread.name;
istr>>denji;
sread.denji=fromString
istr>>age;
sread.age=fromString
istr>>sread.major;
istr>>sread.interest;
istr>>sread.emeal;
istr>>sread.number;
if(sread.number==number)
{
flag=1;
break;
}
}
}
is.close();
if(flag==1)
{
string str, estr;
fstream in("User.txt", ios::in);//原文件
fstream out("temp.txt", ios::out);//中间文件
str = sread.name.append(" ").append(toString(sread.denji)).append(" ").append(toString(sread.age)).append(" ").append(sread.major).
append(" ").append(sread.interest).append(" ").append(sread.emeal).append(" ").append(sread.number);//test.txt中需要删除的某一行内容
while (getline(in, estr))//得到test.txt中一行的内容
{
if (!estr.compare(str))//比较test.txt每一行的内容和要删除的是否一致,一致就跳过
continue;
out << estr << "\n";//不一致的内容写到temp.txt中,注意换行
}
in.close();//关闭流
out.close();
fstream outfile("User.txt", ios::out);
fstream infile("temp.txt", ios::in);
while (getline(infile, estr)) //将temp.txt的内容写到test.txt
{
outfile<< estr << "\n";
}
const char* path = "temp.txt";
remove(path);//删除temp.txt
outfile.close();//关闭流
infile.close();
return flag;
}
else
{
cout<<"!!!!!!!!!要删除的对象不存在!"<
cout<
return flag;
}
}
#include
#include
#include
#include
#include
#include
using namespace std;
void mainMenu();
//定义用户类 用户名、用户等级、年龄组、职业组、兴趣分类、电子邮箱
class User
{string name;int denji;int age;string major;string interest;string emeal;string number;
public:User(string name="",int denji=0,int age=0,string major="",string interest="",string emeal="",string number=""):name(name),denji(denji),age(age),major(major),interest(interest),emeal(emeal),number(number) {}void printInfo(){cout<
inline string toString(const T &v)
{ostringstream os;os<
inline T fromString(const string &str)
{istringstream is(str);T v;is>>v;return v;
}//用于向文件中写入一个对象
void myWriteuse(const char* filename,const User& swrite)
{ofstream os(filename,ios_base::out|ios_base::app);os.write(swrite.name.c_str(),swrite.name.length());os<<" ";os.write(toString(swrite.denji).c_str(),toString(swrite.denji).length());os<<" ";os.write(toString(swrite.age).c_str(),toString(swrite.age).length());os<<" ";os.write(swrite.major.c_str(),swrite.major.length());os<<" ";os.write(swrite.interest.c_str(),swrite.interest.length());os<<" ";os.write(swrite.emeal.c_str(),swrite.emeal.length());os<<" ";os.write(swrite.number.c_str(),swrite.number.length());os<>sread.name;istr>>denji;sread.denji=fromString(denji);istr>>age;sread.age=fromString(age);istr>>sread.major;istr>>sread.interest;istr>>sread.emeal;istr>>sread.number;sread.printInfo();}}is.close();
}
int myReaduse0(const char* filename,string name)
{ifstream is(filename,ios_base::in);string info;User sread;bool flag=0;while(!is.eof()){getline(is,info);if(info!=""){string age;string denji;istringstream istr(info);istr>>sread.name;istr>>denji;sread.denji=fromString(denji);istr>>age;sread.age=fromString(age);istr>>sread.major;istr>>sread.interest;istr>>sread.emeal;istr>>sread.number;if(sread.name==name){flag=1;break;}}}is.close();if(flag){sread.printInfo();return flag;}elsereturn flag;
}
//用于根据学号查找到对应的对象并输出
void myReaduse(const char* filename,string number)
{ifstream is(filename,ios_base::in);string info;User sread;bool flag=0;while(!is.eof()){getline(is,info);if(info!=""){string age;string denji;istringstream istr(info);istr>>sread.name;istr>>denji;sread.denji=fromString(denji);istr>>age;sread.age=fromString(age);istr>>sread.major;istr>>sread.interest;istr>>sread.emeal;istr>>sread.number;if(sread.number==number){flag=1;break;}}}is.close();if(flag){sread.printInfo();}else{cout<<"!!!!!!!!!!要查找的对象不存在!"<>sread.name;istr>>denji;sread.denji=fromString(denji);istr>>age;sread.age=fromString(age);istr>>sread.major;istr>>sread.interest;istr>>sread.emeal;istr>>sread.number;if(sread.number==number){flag=1;break;}}}is.close();if(flag==1){string str, estr;fstream in("User.txt", ios::in);//原文件fstream out("temp.txt", ios::out);//中间文件str = sread.name.append(" ").append(toString(sread.denji)).append(" ").append(toString(sread.age)).append(" ").append(sread.major).append(" ").append(sread.interest).append(" ").append(sread.emeal).append(" ").append(sread.number);//test.txt中需要删除的某一行内容while (getline(in, estr))//得到test.txt中一行的内容{if (!estr.compare(str))//比较test.txt每一行的内容和要删除的是否一致,一致就跳过continue;out << estr << "\n";//不一致的内容写到temp.txt中,注意换行}in.close();//关闭流out.close();fstream outfile("User.txt", ios::out);fstream infile("temp.txt", ios::in);while (getline(infile, estr)) //将temp.txt的内容写到test.txt{outfile<< estr << "\n";}const char* path = "temp.txt";remove(path);//删除temp.txtoutfile.close();//关闭流infile.close();return flag;}else{cout<<"!!!!!!!!!要删除的对象不存在!"<>sread.name;istr>>year;sread.year=fromString(year);istr>>sread.daoy;istr>>sread.zuy;istr>>sread.cpgs;istr>>sread.denji;sread.printInfo();}}is.close();
}//用于根据电影名查找到对应的对象并输出
int myReadfilm(const char* filename,string name)
{ifstream is(filename,ios_base::in);string info;Film sread;bool flag=0;while(!is.eof()){getline(is,info);if(info!=""){string year;istringstream istr(info);istr>>sread.name;istr>>year;sread.year=fromString(year);istr>>sread.daoy;istr>>sread.zuy;istr>>sread.cpgs;istr>>sread.denji;if(sread.name==name){flag=1;break;}}}is.close();if(flag){sread.printInfo();return flag;}elsereturn flag;
}
int myDeletfilm(const char* filename,string name)
{ifstream is(filename,ios_base::in);string info;Film sread;bool flag=0;while(!is.eof()){getline(is,info);if(info!=""){string year;istringstream istr(info);istr>>sread.name;istr>>year;sread.year=fromString(year);istr>>sread.daoy;istr>>sread.zuy;istr>>sread.cpgs;istr>>sread.denji;if(sread.name==name){flag=1;break;}}}is.close();if(flag==1){string str, estr;fstream in("Film.txt", ios::in);//原文件fstream out("temp.txt", ios::out);//中间文件str = sread.name.append(" ").append(toString(sread.year)).append(" ").append(sread.daoy).append(" ").append(sread.zuy).append(" ").append(sread.cpgs).append(" ").append(sread.denji);//test.txt中需要删除的某一行内容while (getline(in, estr))//得到test.txt中一行的内容{if (!estr.compare(str))//比较test.txt每一行的内容和要删除的是否一致,一致就跳过continue;out << estr << "\n";//不一致的内容写到temp.txt中,注意换行}in.close();//关闭流out.close();fstream outfile("Film.txt", ios::out);fstream infile("temp.txt", ios::in);while (getline(infile, estr)) //将temp.txt的内容写到test.txt{outfile<< estr << "\n";}const char* path = "temp.txt";remove(path);//删除temp.txtoutfile.close();//关闭流infile.close();return flag;}else{cout<<"!!!!!!!!!要删除的对象不存在!"<>sread.uname;istr>>sread.fname;istr>>score;sread.score=fromString(score);istr>>sread.ip;sread.counts=fromString(counts);sread.printInfo();}}is.close();
}
//用于根据电影名查找到对应的对象并输出
void myReadreview(const char* filename,string fname)
{ifstream is(filename,ios_base::in);string info;ReviewFilm sread;bool flag=0;while(!is.eof()){getline(is,info);if(info!=""){string score;string counts;istringstream istr(info);istr>>sread.uname;istr>>sread.fname;istr>>score;sread.score=fromString(score);istr>>sread.ip;istr>>counts;sread.counts=fromString(counts);if(sread.fname==fname){flag=1;sread.printInfo();}}}is.close();if(flag==0){cout<<"!!!!!!!!要查找的对象不存在!"<>sread.uname;istr>>sread.fname;istr>>score;sread.score=fromString(score);istr>>sread.ip;istr>>counts;sread.counts=fromString(counts);if(sread.uname==uname){flag=1;sread.printInfo();}}}is.close();if(flag==0){cout<<"!!!!!!!!要查找的对象不存在!"<>sread.uname;istr>>sread.fname;istr>>score;sread.score=fromString(score);istr>>sread.ip;istr>>counts;sread.counts=fromString(counts);if(sread.fname==fname&&sread.uname==uname){flag=1;break;}}}is.close();if(flag==1){string str, estr;fstream in("ReviewFilm.txt", ios::in);//原文件fstream out("temp.txt", ios::out);//中间文件str = sread.uname.append(" ").append(sread.fname).append(" ").append(toString(sread.score)).append(" ").append(sread.ip).append(" ").append(toString(sread.counts));//test.txt中需要删除的某一行内容while (getline(in, estr))//得到test.txt中一行的内容{if (!estr.compare(str))//比较test.txt每一行的内容和要删除的是否一致,一致就跳过continue;out << estr << "\n";//不一致的内容写到temp.txt中,注意换行}in.close();//关闭流out.close();fstream outfile("ReviewFilm.txt", ios::out);fstream infile("temp.txt", ios::in);while (getline(infile, estr)) //将temp.txt的内容写到test.txt{outfile<< estr << "\n";}const char* path = "temp.txt";remove(path);//删除temp.txtoutfile.close();//关闭流infile.close();return flag;}else{cout<<"!!!!!!!!要删除的对象不存在!"<>number;if(number=="0"){u.userMenu();break;}if(number=="00"){mainMenu();break;}cout<<"姓名 等级 年龄 职业 兴趣 邮件 序号"<>number;if(number=="0"){u.userMenu();break;}if(number=="00"){mainMenu();break;}cin>>name>>denji>>age>>major>>interest>>emeal;User s(name,denji,age,major,interest,emeal,number);myWriteuse("User.txt",s);}}
void ulook()
{system("cls");string n;Menu u;system("cls");cout<<"姓名 等级 年龄 职业 兴趣 邮件 序号"<>n;if(n=="0")u.userMenu();if(n=="00")mainMenu();
}
void deletuser()
{system("cls");Menu u;string n,m;cout<<"请输入要删除的用户序号:"<>n;if(n=="0")u.userMenu();if(n=="00")mainMenu();if(myDeletuse("User.txt",n)==1){system("cls");cout<<"*****删除成功!*****"<>m;if(m=="0")deletuser();if(m=="1")u.userMenu();
}
void Menu::userMenu()
{while(1){system("cls");cout<<" *********************************"<>opt;if(opt==0){mainMenu();break;}switch(opt){case 1:ulook();break;case 2:finduser();break;case 3:creatuser();break;case 4:deletuser();break;}}
}
void findfilm()
{system("cls");Menu u;string name;//根据用户输入的电影查找对象并输出cout<<"如果要返回filmMenu请输入0:"<>name;if(name=="0"){u.filmMenu();break;}if(name=="00"){mainMenu();break;}cout<<"名字 年份 导演 主要演员 出品公司 等级"<>name;if(name=="0"){u.filmMenu();break;}if(name=="00"){mainMenu();break;}cin>>year>>daoy>>zuy>>cpgs>>denji;Film s(name,year,daoy,zuy,cpgs,denji);myWritefilm("Film.txt",s);}}
void flook()
{system("cls");Menu u;string n;system("cls");cout<<"名字 年份 导演 主要演员 出品公司 等级"<>n;if(n=="0")u.filmMenu();if(n=="00")mainMenu();}
void deletfilm()
{system("cls");Menu u;string n,m;cout<<"请输入要删除的电影:"<>n;if(n=="0")u.filmMenu();if(n=="00")mainMenu();if(myDeletfilm("Film.txt",n)==1){system("cls");cout<<"*****删除成功!*****"<>m;if(m=="0")deletfilm();if(m=="1")u.filmMenu();
}
void Menu::filmMenu()
{while(1){system("cls");cout<<" *********************************"<>opt;if(opt==0){mainMenu();break;}switch(opt){case 1:flook();break;case 2:findfilm();break;case 3:creatfilm();break;case 4:deletfilm();break;}}
}
void findreview()
{system("cls");Menu u;string funame;string n;//根据用户输入的学号查找对象并输出cout<<"如果要返回reviewMenu请输入0:"<>n;if(n=="0"){u.reviewMenu();break;}if(n=="00"){mainMenu();break;}if(n=="1"){cout<<"请输入要查找的电影名:"<>funame;cout<<"评论人 电影名 评分 电影链接 评论次数"<>funame;cout<<"评论人 电影名 评分 电影链接 评论次数"<>fname;if(fname=="0"){u.reviewMenu();break;}if(fname=="00"){mainMenu();break;}if(myReadfilm("Film.txt",fname)==0){cout<<"相关电影不存在"<>uname;if(myReaduse0("User.txt",uname)==0){cout<<"相关评论人不存在"<>score>>ip>>counts;ReviewFilm s(uname,fname,score,ip,counts);myWritereview("ReviewFilm.txt",s);}}}}
void rlook()
{system("cls");Menu u;string n;cout<<"如果要返回reviewMenu请输入0:"<>n;if(n=="0")u.reviewMenu();if(n=="00")mainMenu();}
void deletreview()
{system("cls");Menu n;string f,u,m;cout<<"请输入要删除的电影影评的!电影名!和!评论人名!"<>f;if(f=="0")n.reviewMenu();if(f=="00")mainMenu();cin>>u;if(u=="0")n.reviewMenu();if(u=="00")mainMenu();if(myDeletreview("ReviewFilm.txt",f,u)==1){system("cls");cout<<"*****删除成功!*****"<>m;if(m=="0")deletreview();if(m=="1")n.reviewMenu();
}
void Menu::reviewMenu()
{while(1){system("cls");cout<<" *************************************"<>opt;if(opt==0){mainMenu();break;}switch(opt){case 1:rlook();break;case 2:findreview();break;case 3:creatreview();break;case 4:deletreview();break;}}}
void mainMenu()
{system("cls");Menu w;while(1){system("cls");system("color 1B");cout<<" *************************************"<>opt;if(opt==0){exit(0);}switch(opt){case 1:system("cls");w.userMenu();break;case 2:system("cls");w.filmMenu();break;case 3:system("cls");w.reviewMenu();break;}}
}int main()
{mainMenu();return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
