A类:
主要关于用c++写一个管理系统能够实现一些管理功能。第一个是学生基本信息管理程序。主要思路是要实现学籍信息管理,就需要能够把每个学生的信息存储起来,并且能够调用,满足题目要求可以使用结构体包含学生信息然后配和主函数创建一系列的对象就可以实现,但不方便。我选择用一个学生类封装,把学生信息当作类的私有数据,功能实现用在主函数中声明函数完成,即安全又方便。在主函数中用switch语句实现用户选择功能,包括创建、添加、修改、删除、查找、文件导入导出。有一点是我一开始忽略掉的,使得我的程序运行不成功,就是我一开始在主函数中声明了类的对象数组,后来改成了在所有函数外声明(红字部分)。(上代码,功能函数部分没给出);第二个和第一个基本类似,就是功能函数改换一下。
#include<fstream>
#include <string>
#define N 20
using namespace std;
class Student{
protected:
string stuID;
string stuName;
string stuSex;
string stuAge;
string stuClass;
string stuAcademy;
string stuMajor;
public:
Student(){}
Student(const string &id,const string &name,const string &sex,const string &age,const string &class1,const string &academy,const string &major){
stuID=id;
stuName=name;
stuSex=sex;
stuAge=age;
stuClass=class1;
stuAcademy=academy;
stuMajor=major;
}
Student(Student &s);
void setstuID(const string &i);
string getstuID();
void setstuName(const string &n);
string getstuName();
void setstuSex(const string &s);
string getstuSex();
void setstuAge(const string &a);
string getstuAge();
void setstuClass(const string &c);
string getstuClass();
void setstuAcademy(const string &d);
string getstuAcademy();
void setstuMajor(const string &m);
string getstuMajor();
friend istream &operator>>(istream &is,Student &a);
friend ostream &operator<<(ostream &os,Student &a);
void show();
~Student(){};
};
Student::Student(Student &s){
stuID=s.stuID;
stuName=s.stuName;
stuSex=s.stuSex;
stuAge=s.stuAge;
stuClass=s.stuClass;
stuAcademy=s.stuAcademy;
stuMajor=s.stuMajor;
}
void Student::setstuID(const string &i){
stuID=i;
}
string Student::getstuID(){
return stuID;
}
void Student::setstuName(const string &n){
stuName=n;
}
string Student::getstuName(){
return stuName;
}
void Student::setstuSex(const string &s){
stuSex=s;
}
string Student::getstuSex(){
return stuSex;
}
void Student::setstuAge(const string &a){
stuAge=a;
}
string Student::getstuAge(){
return stuAge;
}
void Student::setstuClass(const string &c){
stuClass=c;
}
string Student::getstuClass(){
return stuClass;
}
void Student::setstuAcademy(const string &d){
stuAcademy=d;
}
string Student::getstuAcademy(){
return stuAcademy;
}
void Student::setstuMajor(const string &m){
stuMajor=m;
}
string Student::getstuMajor(){
return stuMajor;
}
istream &operator>>(istream &is,Student &a)
{
is>>a.stuID>>a.stuName>>a.stuSex>>a.stuAge>>a.stuClass>>a.stuAcademy>>a.stuMajor;
return is;
}
ostream &operator<<(ostream &os,Student &a)
{
os<<a.stuID<<" "<<a.stuName<<" "<<a.stuSex<<" "<<a.stuAge<<" "<<a.stuClass<<" "<<a.stuAcademy<<" "<<a.stuMajor;
return os;
}
void Student::show(){
cout<<stuID<<" "<<stuName<<" "<<stuSex<<" "<<stuAge<<" "<<stuClass<<" "<<stuAcademy<<" "<<stuMajor<<" "<<endl;
}
int creat();
int add(int c);
void inquire(int f);
void amend(int f);
void delete1(int f);
void showa(int n);
void fexport(int n);
void fimport();
int main(void){
int i=0,c,n,p=0;
for(i;i<100;i++){
cout<<"学生成绩管理系统:"<<'\n'<<" 1 创建"<<'\n'<<" 2 添加"<<'\n'<<" 3 查询"<<'\n'<<" 4 修改"<<'\n'<<" 5 删除"<<'\n'<<" 6 显示"<<'\n'<<" 7 文件导入"<<'\n'<<" 8 文件导出"<<'\n'<<" 9 退出"<<'\n'<<" 请选择:"<<endl;
cout<<"输入:";
cin>>c;
switch(c){
case 1:n=creat();break;
case 2:n=add(n);break;
case 3:inquire(n);break;
case 4:amend(n);break;
case 5:delete1(n);break;
case 6:showa(n);break;
case 7:fimport();break;
case 8:fexport(n);break;
case 9:p=1;break;
default:cout<<"Error!"<<endl;break;
}
if(p==1){
cout<<"退出成功!"<<endl;
break;
}
}
return 0;
}
m=a1.getX()-b1.getX();
n=a1.getY()-b1.getY();
p=a1.getZ()-b1.getZ();
A=a1;
}
void Line::twoPlanes(Plane pa1,Plane pa2){
double m1,n1;
m=pa1.getb()*pa2.getc()-pa1.getc()*pa2.getb();
n=pa1.getc()*pa2.geta()-pa1.geta()*pa2.getc();
p=pa1.geta()*pa2.getb()-pa1.getb()*pa2.geta();
m1=(pa2.getd()*pa1.geta()-pa1.getd()*pa2.geta())/(pa1.getb()*pa2.geta()-pa2.getb()*pa1.geta());
n1=(pa2.getd()*pa1.getb()-pa1.getd()*pa2.getb())/(pa2.getb()*pa1.geta()-pa1.getb()*pa2.geta());
A.setZ(0);
A.setX(n1);
A.setY(m1);
}
void Line::pointslope(Vector n1,Point p1){
m=n1.getO();
n=n1.getT();
p=n1.getS();
A=p1;
}
主要思路:根据题目要求可知可以创建一个游戏类。用函数来实现初始化棋盘的格式、玩家落子、电脑落子、打印每时每刻的棋盘现况、判断输赢、判断棋盘是否满了等功能,然后把函数封装在游戏类中。私有数据是:玩家的棋子、电脑的棋子、棋盘的行数、棋盘的列数,通过够着函数从主函数中获取棋子的样式和行列数的大小,并且可以供公有函数调用。主函数中声明一个游戏类的对象,初始化对象的数据,调用对象的函数实现下棋。比较苦难的点是电脑落子,我不清楚如何用算法快速计算每个空位的分值,我就用最蠢的方法一个一个的算每个位子的分值,但只能实现3*3的棋盘,用户不能自己设置棋盘大小。(展示一下第一个空位的分值计算代码)
if(chess_board[0][1]=='X'&&chess_board[0][2]=='X') //计算每个位置的分值 (用了非常蠢的办法)
sum[1]=sum[1]+50;
if(chess_board[1][0]=='X'&&chess_board[2][0]=='X')
sum[1]=sum[1]+50;
if(chess_board[1][1]=='X'&&chess_board[2][2]=='X')
sum[1]=sum[1]+50;
if(chess_board[0][1]=='O'&&chess_board[0][2]=='O')
sum[1]=sum[1]+25;
if(chess_board[1][0]=='O'&&chess_board[2][0]=='O')
sum[1]=sum[1]+25;
if(chess_board[1][1]=='O'&&chess_board[2][2]=='O')
sum[1]=sum[1]+25;
if(chess_board[0][1]=='*'&&chess_board[0][2]=='*')
sum[1]=sum[1]+4;
if(chess_board[1][0]=='*'&&chess_board[2][0]=='*')
sum[1]=sum[1]+4;
if(chess_board[1][1]=='*'&&chess_board[2][2]=='*')
sum[1]=sum[1]+4;
if((chess_board[0][1]=='X'&&chess_board[0][2]=='*')||(chess_board[0][2]=='X'&&chess_board[0][1]=='*'))
sum[1]=sum[1]+10;
if((chess_board[1][0]=='X'&&chess_board[2][0]=='*')||(chess_board[2][0]=='X'&&chess_board[1][0]=='*'))
sum[1]=sum[1]+10;
if((chess_board[1][1]=='X'&&chess_board[2][2]=='*')||(chess_board[2][2]=='X'&&chess_board[1][1]=='*'))
sum[1]=sum[1]+10;
if((chess_board[0][1]=='O'&&chess_board[0][2]=='*')||(chess_board[0][2]=='O'&&chess_board[0][1]=='*'))
sum[1]=sum[1]+8;
if((chess_board[1][0]=='O'&&chess_board[2][0]=='*')||(chess_board[2][0]=='O'&&chess_board[1][0]=='*'))
sum[1]=sum[1]+8;
if((chess_board[1][1]=='O'&&chess_board[2][2]=='*')||(chess_board[2][2]=='O'&&chess_board[1][1]=='*'))
sum[1]=sum[1]+8;//1 号位分值
第三个石头剪刀布也比较简单
设计一个游戏类,私有数据为电脑本局的选择(由主函数随机产生并通过构造函数赋给),公有函数中用户输入想出的选择,然后与私有数据进行比较、判断胜负。主函数的switch语句用来供用户选择是否继续游戏。
D类:
第一个是整数链表类
首先得先定义一个节点的结构体(便于链表类的实现),然后构建一个链表类。根据功能要求,在链表类构建相应的函数来实现功能,在主函数中声明一个链表对象,然后调用对应的函数。我本来是想用链表的模板,然后可以方便直接套用在第二个函数上,但是私有数据处理不好就放弃了。
第二个是用链表建一个通讯录
其实跟A类的差不多,只不过是用链表的方式实现。用节点的数据域包含通讯人的信息,链表中把节点连起来,功能的实现用链表类函数实现包括:创建链表、添加节点、查询、修改节点的数据域、删除节点、遍历并显示。主函数中定义一个链表类,再用switch语句实现用户自己选择功能。难点是要理解节点之间如何删除和添加next指针的理解。