main.cpp
#include <iostream> #include"User.h" #include"Review.h" #include"Film.h" #include<vector> #include<bits/stdc++.h> using namespace std; void userMenu(); void filmMenu(); void reviewMenu(); int main() { while(1) { system("cls"); cout<<"*********************************"<<endl; cout<<"* 影评信息管理系统 *"<<endl; cout<<"* 1.用户信息操作 *"<<endl; cout<<"* 2.影片信息操作 *"<<endl; cout<<"* 3.影评 *"<<endl; cout<<"请输入你的选择项[ ]\b\b"; int opt; cin>>opt; switch(opt) { case 1: system("cls"); userMenu(); break; case 2: system("cls"); filmMenu(); break; case 3: system("cls"); reviewMenu(); break; } } return 0; } void userMenu() { while(1) { system("cls"); cout<<"*********************************"<<endl; cout<<"* 用户信息操作 *"<<endl; cout<<"* 1.浏览用户信息 *"<<endl; cout<<"* 2.查询用户信息 *"<<endl; cout<<"* 3.添加用户信息 *"<<endl; cout<<"* 4.删除用户信息 *"<<endl; cout<<"* 5.修改用户信息 *"<<endl; cout<<"请输入你的选择项[ ]\b\b"; int opt; string searchName; cin>>opt; User u("no name",0,0,"no name","no name","no name"); switch(opt) { case 1: u.userBrowse(); break; case 2: cout<<"输入要查询的用户姓名:"; cin>>searchName; u.userQuery(searchName); break; case 3: u.userAdd(); break; case 4: u.userDel(); break; case 5: u.userUpdate(); break; } } } void filmMenu() { while(1) { system("cls"); cout<<"*********************************"<<endl; cout<<"* 影片信息操作 *"<<endl; cout<<"* 1.浏览影片信息 *"<<endl; cout<<"* 2.查询影片信息 *"<<endl; cout<<"* 3.添加影片信息 *"<<endl; cout<<"* 4.删除影片信息 *"<<endl; cout<<"* 5.修改影片信息 *"<<endl; cout<<"请输入你的选择项[ ]\b\b"; int opt; string searchName; cin>>opt; Film f("no name",0,"no name","no name","no name",0); switch(opt) { case 1: f.filmBrowse(); break; case 2: cout<<"输入要查询的影片名字:"; cin>>searchName; f.filmQuery(searchName); break; case 3: f.filmAdd(); break; case 4: f.filmDel(); break; case 5: f.filmUpdate(); break; } } } void reviewMenu() { while(1) { system("cls"); cout<<"*************************************"<<endl; cout<<"* 影评信息管理系统 *"<<endl; cout<<"* 1.浏览影评信息操作 *"<<endl; cout<<"* 2.查询影评信息操作 *"<<endl; cout<<"* 3.进行影评操作 *"<<endl; cout<<"请输入你的选择项[ ]\b\b"; int opt; string s="no name"; Review r(s,s,0.0,s,0); cin>>opt; switch(opt) { case 1: r.reviewBrowse(); break; case 2: r.reviewQuery(); break; case 3: r.addNewReview(); } } }
Film.h
#ifndef FILM_H #define FILM_H #include<string> using namespace std; class Film//影片类 { private: string filmName;//电影名字 int filmYear;//电影上映年份 string filmDirector;//电影导演 string filmPerformer;//电影主演 string filmCompany;//电影出品公司 int filmGrade;//电影等级 public: Film(string,int,string,string,string,int);//构造函数 Film(string name):filmName(name) {}//用于实现影评信息的重载构造函数 string getFilmName();//获取电影名字 int getFilmYear();//获取电影上映年份 string getFilmDirector();//获取电影导演 string getFilmPerformer();//获取电影主演 string getFilmCompany();//获取电影出品公司 int getFilmGrade();//获取电影等级 void filmBrowse();//浏览影片信息 void filmAdd();//增加影评信息 int filmQuery(string name);//查询影评信息 void filmDel();//删除影评信息 void filmUpdate();//修改影评信息 }; #endif // FILM_H
Film.cpp
#include "Film.h" #include<bits/stdc++.h> using namespace std; Film::Film(string name,int year, string director,string performer,string company,int grade): filmName(name),filmYear(year),filmDirector(director),filmPerformer(performer),filmCompany(company),filmGrade(grade) {} string Film::getFilmName() { return filmName; } int Film::getFilmYear() { return filmYear; } string Film::getFilmDirector() { return filmDirector; } string Film::getFilmPerformer() { return filmPerformer; } string Film::getFilmCompany() { return filmCompany; } int Film::getFilmGrade() { return filmGrade; } void Film::filmBrowse() { ifstream fin; fin.open("film.txt"); if(!fin.is_open()) cout<<"文件打开失败!"; else { string name,director,proformer,company; int grade,year; cout<<setiosflags(ios::left)<<setw(20)<<"电影名称"<<setw(20)<<"上映年份"<<setw(20)<<"导演"<<setw(20)<<"主演"<<setw(25)<<"出品公司"<<setw(20)<<"电影等级"<<endl; while(fin>>name>>year>>director>>proformer>>company>>grade) cout<<setiosflags(ios::left)<<setw(20)<<name<<setw(20)<<year<<setw(20)<<director<<setw(20)<<proformer<<setw(25)<<company<<setw(20)<<grade<<endl; } fin.close(); cout<<"请按回车键继续操作"<<endl; system("pause"); } int Film::filmQuery(string searchName) { ifstream fin; int flag =1; fin.open("film.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { string name,director,proformer,company; int grade,year; while(fin>>name>>year>>director>>proformer>>company>>grade) { if(searchName==name) { flag=0; cout<<"电影信息"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<"电影名称"<<setw(20)<<"上映年份"<<setw(20)<<"导演"<<setw(20)<<"主演"<<setw(25)<<"出品公司"<<setw(20)<<"电影等级"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<name<<setw(20)<<year<<setw(20)<<director<<setw(20)<<proformer<<setw(25)<<company<<setw(20)<<grade<<endl; break; } } } if(flag!=0) { cout<<"没有发现你输入的电影名字\n"; fin.close(); cout<<"请按回车键继续操作"<<endl; system("pause"); return 0; } fin.close(); cout<<"请按回车键继续操作"<<endl; system("pause"); return 1; } void Film::filmUpdate() { int gps; ifstream fin; fin.open("film.txt",ios_base::in|ios_base::binary); if(!fin.is_open()) cout<<"文件打开失败"; else { string searchName; cout<<"输入要修改的影片名字:"; cin>>searchName; string name,director,proformer,company; int grade,year; while(!fin.eof()) { gps=fin.tellg(); fin>>name>>year>>director>>proformer>>company>>grade; if(name==searchName) { cout<<"当前电影信息"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<"电影名称"<<setw(20)<<"上映年份"<<setw(20)<<"导演"<<setw(20)<<"主演"<<setw(25)<<"出品公司"<<setw(20)<<"电影等级"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<name<<setw(20)<<year<<setw(20)<<director<<setw(20)<<proformer<<setw(25)<<company<<setw(20)<<grade<<endl; fin.close(); break; } } if(fin.is_open()) { cout<<"没有找到此影片!"; fin.close(); } else { cout<<"输入修改后的影片信息:"<<endl; cout<<"当前电影信息"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<"电影名称"<<setw(20)<<"上映年份"<<setw(20)<<"导演"<<setw(20)<<"主演"<<setw(25)<<"出品公司"<<setw(20)<<"电影等级"<<endl; cin>>name>>year>>director>>proformer>>company>>grade; fstream fout; fout.open("film.txt",ios_base::in|ios_base::out|ios_base::binary); if(!fout.is_open()) cout<<"文件打开失败!"; else { if(gps!=0) fout.seekp(gps);//设置写入的位置 fout<<name<<" "<<year<<" "<<director<<" "<<proformer<<" "<<company<<" "<<grade<<endl; cout<<"修改成功!"; fout.close(); } } } cout<<"请按回车键继续操作"<<endl; system("pause"); } void Film::filmDel() { vector<Film> film; ifstream fin; fin.open("film.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { string name,director,proformer,company; int grade,year; while(fin>>name>>year>>director>>proformer>>company>>grade) film.push_back(Film(name,year,director,proformer,company,grade)); fin.close(); string delName; cout<<"输入要删除的影片名称:"; cin>>delName; if(filmQuery(delName)) { vector<Film>::iterator it=film.begin(); for(; it!=film.end(); it++) { if(it->getFilmName()==delName) { film.erase(it); cout<<"删除成功!"; break; } } ofstream fout; fout.open("film.txt",ios_base::binary); if(!fout.is_open()) cout<<"文件打开失败!"; else { for(auto it=film.begin(); it!=film.end(); it++) fout<<it->getFilmName()<<" "<<it->getFilmYear()<<" "<<it->getFilmDirector()<<" "<<it->getFilmPerformer()<<" "<<it->getFilmCompany()<<" "<<it->getFilmGrade()<<endl; fout.close(); } } else cout<<"影片不存在!\n"; } cout<<"请按回车键继续操作"<<endl; system("pause"); } void Film::filmAdd() { ofstream fout; fout.open("film.txt",ios::app); if(!fout.is_open()) cout<<"文件打开失败"; else { cout<<"输入要添加的影片信息:"; string name,director,proformer,company; int grade,year; cout<<"当前电影信息"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<"电影名称"<<setw(20)<<"上映年份"<<setw(20)<<"导演"<<setw(20)<<"主演"<<setw(25)<<"出品公司"<<setw(20)<<"电影等级"<<endl; cin>>name>>year>>director>>proformer>>company>>grade; int flag=filmQuery(name); if(!flag){ cout<<"可以添加该影片"<<endl; fout<<name<<" "<<year<<" "<<director<<" "<<proformer<<" "<<company<<" "<<grade<<endl; cout<<"添加成功"<<endl; } else cout<<"该影片已存在!\n"; fout.close(); } cout<<"请按回车键继续操作"<<endl; system("pause"); }
User.h
#ifndef USER_H #define USER_H #include<string> using namespace std; class User//用户类 { private: string userName;//用户姓名 int userGrade;//用户等级 int userYear;//用户年龄 string userProfession;//用户职业 string userInterest;//用户兴趣 string userEmail;//用户邮箱 public: User(string,int,int,string,string,string);//构造函数 User(string name):userName(name) {} //用于影评信息存储的重载构造函数 string getUserName();//获取用户姓名 int getUserGrade();//获取用户等级 int getUserYear();//获取用户年龄 string getUserProfession();//获取用户职业 string getUserInterest();//获取用户兴趣爱好 string getUserEmail();//获取用户邮箱 void userBrowse();//浏览用户信息 void userAdd();//增加用户信息 int userQuery(string name);//查询用户信息, void userDel();//删除用户信息 void userUpdate();//修改用户信息 }; #endif // USER_H
User.cpp
#include "User.h" #include<cstring> #include<bits/stdc++.h> using namespace std; User::User(string name,int year,int grade,string profession,string interest,string email): userName(name),userYear(year),userGrade(grade),userProfession(profession),userInterest(interest),userEmail(email){} string User::getUserName(){ return userName; } int User::getUserGrade(){ return userGrade; } int User::getUserYear(){ return userYear; } string User::getUserProfession(){ return userProfession; } string User::getUserInterest(){ return userInterest; } string User::getUserEmail(){ return userEmail; } void User::userBrowse() { ifstream fin; fin.open("user.txt"); if(!fin.is_open()) cout<<"文件打开失败!"; else { string name,profession,email,interest; int grade,year; cout<<setiosflags(ios::left)<<setw(10)<<"用户名"<<setw(10)<<"用户等级"<<setw(10)<<"用户年龄"<<setw(20)<<"用户职业"<<setw(20)<<"用户兴趣爱好"<<setw(20)<<"用户电子邮箱"<<endl; while(fin>>name>>grade>>year>>profession>>interest>>email) cout<<setiosflags(ios::left)<<setw(10)<<name<<setw(10)<<grade<<setw(10)<<year<<setw(20)<<profession<<setw(20)<<interest<<setw(20)<<email<<endl; } fin.close(); cout<<"请按回车键继续操作"<<endl; system("pause"); } int User::userQuery(string searchName) { ifstream fin; int flag =1; fin.open("user.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { string name,profession,email,interest; int grade,year; while(fin>>name>>grade>>year>>profession>>interest>>email) { if(searchName==name) { flag=0; cout<<setiosflags(ios::left)<<setw(10)<<"用户名"<<setw(10)<<"用户等级"<<setw(10)<<"用户年龄"<<setw(20)<<"用户职业"<<setw(20)<<"用户兴趣爱好"<<setw(20)<<"用户电子邮箱"<<endl; cout<<setiosflags(ios::left)<<setw(10)<<name<<setw(10)<<grade<<setw(10)<<year<<setw(20)<<profession<<setw(20)<<interest<<setw(20)<<email<<endl; break; } } } if(flag!=0) { cout<<"没有发现你输入的用户姓名\n"; cout<<"请按回车键继续操作"<<endl; system("pause"); fin.close(); return 0; } cout<<"请按回车键继续操作"<<endl; system("pause"); fin.close(); return 1; } void User::userUpdate() { int gps; ifstream fin; fin.open("user.txt",ios_base::in|ios_base::binary); if(!fin.is_open()) cout<<"文件打开失败"; else { string searchName; cout<<"输入要修改的用户姓名:"; cin>>searchName; string name,profession,email,interest; int grade,year; while(!fin.eof()) { gps=fin.tellg(); fin>>name>>grade>>year>>profession>>interest>>email; if(name==searchName) { cout<<"当前用户信息:"<<endl;; cout<<setiosflags(ios::left)<<setw(10)<<"用户名"<<setw(10)<<"用户等级"<<setw(10)<<"用户年龄"<<setw(20)<<"用户职业"<<setw(20)<<"用户兴趣爱好"<<setw(20)<<"用户电子邮箱"<<endl; cout<<setiosflags(ios::left)<<setw(10)<<name<<setw(10)<<grade<<setw(10)<<year<<setw(20)<<profession<<setw(20)<<interest<<setw(20)<<email<<endl; fin.close(); break; } } if(fin.is_open()) { cout<<"没有找到此用户!"; fin.close(); } else { cout<<"输入修改后的用户信息:"<<endl; cout<<setiosflags(ios::left)<<setw(10)<<"用户名"<<setw(10)<<"用户等级"<<setw(10)<<"用户年龄"<<setw(20)<<"用户职业"<<setw(20)<<"用户兴趣爱好"<<setw(20)<<"用户电子邮箱"<<endl; cin>>name>>grade>>year>>profession>>interest>>email; fstream fout; fout.open("user.txt",ios_base::in|ios_base::out|ios_base::binary); if(!fout.is_open()) cout<<"文件打开失败!"; else { if(gps!=0) fout.seekp(gps);//设置写入的位置 fout<<name<<" "<<grade<<" "<<year<<" "<<profession<<" "<<interest<<" "<<email<<endl; cout<<"修改成功!"; fout.close(); } } } cout<<"请按回车键继续操作"<<endl; system("pause"); } void User::userDel() { vector<User> user; ifstream fin; fin.open("user.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { string name,profession,email,interest; int grade,year; while(fin>>name>>grade>>year>>profession>>interest>>email) user.push_back(User(name,grade,year,profession,interest,email)); fin.close(); string delName; cout<<"输入要删除的用户名字:"; cin>>delName; if(userQuery(delName)) { vector<User>::iterator it=user.begin(); for(; it!=user.end(); it++) { if(it->getUserName()==delName) { user.erase(it); cout<<"删除成功!"; break; } } ofstream fout; fout.open("user.txt",ios_base::binary); if(!fout.is_open()) cout<<"文件打开失败!"; else { for(auto it=user.begin(); it!=user.end(); it++) fout<<it->getUserName()<<" "<<it->getUserGrade()<<" "<<it->getUserYear()<<" "<<it->getUserProfession()<<" "<<it->getUserInterest()<<" "<<it->getUserEmail()<<endl; fout.close(); } } else cout<<"用户不存在!\n"; } cout<<"请按回车键继续操作"<<endl; system("pause"); } void User::userAdd() { cout<<"输入要添加的用户信息:"<<endl; string addName,addProfession,addEmail,addInterest; int addGrade,addYear; cout<<setiosflags(ios::left)<<setw(10)<<"用户名"<<setw(10)<<"用户等级"<<setw(10)<<"用户年龄"<<setw(20)<<"用户职业"<<setw(20)<<"用户兴趣爱好"<<setw(20)<<"用户电子邮箱"<<endl; cin>>addName>>addGrade>>addYear>>addProfession>>addInterest>>addEmail; ifstream fin; int flag=1; string name,profession,email,interest; int grade,year; fin.open("user.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { while(fin>>name>>grade>>year>>profession>>interest>>email) { if(name==addName) { flag=0; break; } } } fin.close(); if(flag) { ofstream fout; fout.open("user.txt",ios::app); if(!fout.is_open()) cout<<"文件打开失败"; else { fout<<addName<<" "<<addGrade<<" "<<addYear<<" "<<addProfession<<" "<<addInterest<<" "<<addEmail<<endl; cout<<"用户信息添加成功"<<endl; } fout.close(); } else cout<<"用户已存在!\n"; cout<<"请按回车键继续操作"<<endl; system("pause"); }
Review.h
#ifndef REVIEW_H #define REVIEW_H #include"User.h" #include"Film.h" class Review//影评类 { public: Review(User,Film,double,string,int);//构造函数 string getUserName();//获取用户名字 string getFilmName();//获取电影名字 string getLink();//获取影评链接 int getTimes();//获取评价次数 void setTimes(int);//设置评价次数 void setScore(double);//设置评价分数 double getScore();//获取评价分数 void reviewBrowse();//浏览影评信息 void reviewQuery();//查询影评信息 void addNewReview();//进行影评 private: string userName;//用户名字 string filmName;//电影名字 double score;//电影评分 string link;//影评链接 int times;//电影评价次数 }; #endif // REVIEW_H
Review.cpp
#include "Review.h" #include"User.h" #include"Film.h" #include<string> #include<vector> #include<bits/stdc++.h> using namespace std; Review::Review(User user,Film film,double score,string link,int times): score(score),link(link),times(times) { Review::userName=user.getUserName(); Review::filmName=film.getFilmName(); } double Review::getScore() { return score; } string Review::getLink() { return link; } int Review::getTimes() { return times; } string Review::getUserName() { return userName; }; string Review::getFilmName() { return filmName; }; void Review::setTimes(int val) { times=val; } void Review::setScore(double val) { score=val; } void Review::reviewBrowse() { vector<Review> review; ifstream fin; fin.open("review.txt"); if(!fin.is_open()) cout<<"文件打开失败!"; else { string filmName,userName,link; double score; int times; while(fin>>userName>>filmName>>score>>link>>times) review.push_back(Review(userName,filmName,score,link,times)); cout<<setiosflags(ios::left)<<setw(20)<<"用户名字"<<setw(20)<<"电影名称"<<setw(20)<<"电影评分"<<setw(40)<<"影评链接"<<" "<<setw(20)<<"评价次数"<<endl; for(auto it=review.begin(); it!=review.end(); it++) cout<<setw(20)<<it->getUserName()<<setw(20)<<it->getFilmName()<<setw(20)<<it->getScore()<<setw(40)<<it->getLink()<<" "<<setw(20)<<it->getTimes()<<endl; } fin.close(); system("pause"); } void Review::reviewQuery() { vector<Review> review; int flag=1; ifstream fin; fin.open("review.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { string userName,filmName; double score; int times; string link; string searchFilmName; cout<<"请输入你要查询电影的名字:"<<endl; cin>>searchFilmName; while(fin>>userName>>filmName>>score>>link>>times) review.push_back(Review(userName,filmName,score,link,times)); cout<<"当前影评信息"<<endl; cout<<setiosflags(ios::left)<<setw(20)<<"用户名字"<<setw(20)<<"电影名称"<<setw(20)<<"电影评分"<<setw(40)<<"影评链接"<<" "<<setw(5)<<"评价次数"<<endl; for(auto it=review.begin(); it!=review.end(); it++) if(it->getFilmName()==searchFilmName) { flag=0; cout<<setw(20)<<it->getUserName()<<setw(20)<<it->getFilmName()<<setw(20)<<it->getScore()<<setw(40)<<it->getLink()<<" "<<setw(5)<<it->getTimes()<<endl; } } if(flag!=0) { cout<<"没有发现你输入的电影名字\n"; system("pause"); fin.close(); } system("pause"); fin.close(); } void Review::addNewReview() { vector<Review> review; string userName,filmName,link; double score; cout<<"请输入你的用户名字"<<endl; cin>>userName; cout<<"请输入进行影评的电影名称"<<endl; cin>>filmName; cout<<"请输入你评价的分数"<<endl; cin>>score; cout<<"请输入影评链接"<<endl; cin>>link; ifstream fin; fin.open("review.txt"); if(!fin.is_open()) cout<<"文件打开失败"; else { string curUserName,curFilmName,curLink; double curScore; int curTimes; while(fin>>curUserName>>curFilmName>>curScore>>curLink>>curTimes) review.push_back(Review(curUserName,curFilmName,curScore,curLink,curTimes)); fin.close(); } ofstream fout; fout.open("review.txt"); int flag=1; int tot=1; for(auto it=review.begin(); it!=review.end(); it++){ if(it->getFilmName()==filmName) { if(it->getUserName()==userName&&it->getLink()==link)//同一个用户评价同一个电影两次,且影评链接相同,只需要改变评分和该电影评价次数 it->setScore(score),flag=0; tot=it->getTimes()+1; it->setTimes(it->getTimes()+1); } } if(flag) review.push_back(Review(userName,filmName,score,link,tot)); for(auto it=review.begin(); it!=review.end(); it++) fout<<it->getUserName()<<" "<<it->getFilmName()<<" "<<it->getScore()<<" "<<it->getLink()<<" "<<it->getTimes()<<endl; fout.close(); system("pause"); }