四则运算练习器的实现文件

更新时间:2023-09-30 23:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

//四则运算练习器的实现文件 #include #include #include #include

#include

//函数getch()定义在头文件conio.h中,他从键盘接收字符,但不回显在屏幕上 //此功能可应用于输入密码等 #include%using namespace std; char* student::getname() {

return name; }

void student::add(char n[20],char c[20]) {

for(int i=0;i<20;i++) {

name[i]=n[i]; code[i]=c[i]; }

jiaz=0;jiar=0;jial=0;jianz=0;jianr=0;jianl=0;

chengz=0;chengr=0;chengl=0;chuz=0;chur=0;chul=0; hunz=0;hunr=0;hunl=0; ofstream file;

file.open(\ if(!file)

{

cout<<\ system (\ exit(1); }

file.write((char*)&(*this),sizeof(*this)); file.close(); }

void student::addchengji(int yunsuan,int zong,int right) {

int n=all();

student s[n];

read(s,n);//将 文件中的数据写入数组s[n]中 for(int i=0;i

1

if(!strcmp(s[i].name,this->name)) {

if(yunsuan==1) {

s[i].jiaz=s[i].jiaz+zong; s[i].jiar=s[i].jiar+right; if(s[i].jiaz!=0)

s[i].jial=static_cast(s[i].jiar)/s[i].jiaz; }

if(yunsuan==2) {

s[i].jianz=s[i].jianz+zong; s[i].jianr=s[i].jianr+right; if(s[i].jianz!=0)

s[i].jianl=static_cast(s[i].jianr)/s[i].jianz; }

if(yunsuan==3) {

s[i].chengz=s[i].chengz+zong; s[i].chengr=s[i].chengr+right; if(s[i].chengz!=0)

s[i].chengl=static_cast(s[i].chengr)/s[i].chengz; }

if(yunsuan==4) {

s[i].chuz=s[i].chuz+zong; s[i].chur=s[i].chur+right;

if(s[i].chuz!=0)

s[i].chul=static_cast(s[i].chur)/s[i].chuz; }

if(yunsuan==5) {

s[i].hunz=s[i].hunz+zong; s[i].hunr=s[i].hunr+right;

if(s[i].hunz!=0)

s[i].hunl=static_cast(s[i].hunr)/s[i].hunz; } } }

ofstream file2;

file2.setf(ios::fixed);

file2.setf(ios::showpoint);

2

file2.precision(2);

//将更新后的数据重写入文件

file2.open(\ if(!file2) {

cout<<\ system (\ exit(1); }

for(int k=0;k

{

file2.write((char*)&s[k],sizeof(s[k])); }

file2.close(); }

int all() {

cout.setf(ios::fixed); cout.setf(ios::showpoint);

cout.precision(2); ifstream file;

file.open(\ if(!file)

{//打不开说明文件不存在,即记录总数为0 return 0;

/* cout<<\ system (\ exit(1);*/ } else

{

int zongshu=0; student s;

while(!file.eof()) {

file.read((char*)&s,sizeof(s)); zongshu++; }

file.close(); return zongshu-1; } }

3

void chakan(int m,int n,double w)

{

system (\ //banquan();

cout<<\ *******************************************\\n\ cout<<\ 此次总做题数 正确题数 正确率 *\\n\

cout<<\ \ \ \ *\\n\

cout<<\ *******************************************\\n\ }

void student::output() {

cout.setf(ios::fixed);

cout.setf(ios::showpoint); cout.precision(2);

cout<<\ \小朋友,你的以往战绩如下:\\n\

cout<<\

cout<

cout<

cout<<\ }

bool namepanduan(char n[20]) {

int renshu=all(); if(renshu==0) return 0; else

{

int xiangtong=0; student s[renshu];

4

法法

read(s,renshu);

for(int i=0;i

if(strcmp(s[i].name,n)==0) { xiangtong=1; break;} }

return xiangtong; } }

void fenpaihangbang(int n) {

int m=all();

student s1[m],s2[m],s3[m];

//将文件中的资料均读入s1,s2,s3中,已分别

read(s1,m); //按总做题数,正确题数,正确率排名 read(s2,m); read(s3,m);

int zong[m],right[m]; double zhengquelu[m]; for(int i=0;i

if(n==1) {

zong[i]=s1[i].jiaz; right[i]=s2[i].jiar; zhengquelu[i]=s3[i].jial; }

if(n==2)

{

zong[i]=s1[i].jianz; right[i]=s2[i].jianr;

zhengquelu[i]=s3[i].jianl; }

if(n==3) {

zong[i]=s1[i].chengz; right[i]=s2[i].chengr; zhengquelu[i]=s3[i].chengl; }

if(n==4) {

zong[i]=s1[i].chuz;

5

switch(xuanze-48)

{

case 1: system (\

paihangbang();break;//进入排行榜菜单 case 2: system (\

s.output();break;//用户s以往战绩输出

case 3: system (\

lianximennu(s);//s进入练习菜单 case 4: system (\

cout<<\ Bye-bye!\\n\ default: system (\

cout<<\ 小朋友,输错了,再输吧\\n\控制数字 }

}while((xuanze-48)!=4); }

void paihangbang()//排行榜输出 {

system (\ char choice; do {

cout<<\输入你想查看的排行榜前面的数字:\\n\ cout<<\ cout<<\ 1:加法排行榜 *\\n\ cout<<\ 2:减法排行榜 *\\n\ cout<<\ 3:乘法排行榜 *\\n\ cout<<\ 4:除法法排行榜 *\\n\ cout<<\ 5:混合运算排行榜 *\\n\ cout<<\ 6:退出 *\\n\ cout<<\ do {

shuru(choice);

if(choice>='1'&&choice<='6') putch(choice);

}while(choice<'1'||choice>'6');

switch(choice-48)//将字符数字转变为数字

{

case 1:system (\

cout<<\加法排行榜如下:\\n\

16

fenpaihangbang(1);break;

case 2:system (\

cout<<\减法排行榜如下:\\n\ fenpaihangbang(2);break; case 3:system (\

cout<<\乘法排行榜如下:\\n\ fenpaihangbang(3);break;

case 4:system (\

cout<<\除法排行榜如下:\\n\ fenpaihangbang(4);break;

case 5:system (\

cout<<\混合运算排行榜如下:\\n\

fenpaihangbang(5);break;

case 6:system (\

default:system (\ 小朋友,刚才输错了,再输一次吧!\\n\

} }

while((choice-48)!=6); }

void lianximennu(student s)//练习菜单输出 {

system (\ banquan();

char xuan;

cout<<\小朋友,以下是专项训练,请选择练习项目,祝你取得辉煌战绩!\\n\ do

{

// system (\

cout<<\输入你想进行的练习项目前面的数字:\\n\ cout<<\

**********************************************************\\n\

cout<<\ * 1:加法练习

*\\n\

cout<<\ * 2:减法练习 *\\n\

cout<<\ * 3:乘法练习

*\\n\

cout<<\ * 4:除法练习

*\\n\

cout<<\ * 5:混合练习

17

*\\n\

cout<<\ * 6:退出! *\\n\

cout<<\

**********************************************************\\n\

do {

shuru(xuan);

if(xuan>='1'&&xuan<='6') putch(xuan); }while(xuan<'1'||xuan>'6'); switch(xuan) {

case '1':lianxi(1,s);break; case '2':lianxi(2,s);break;

case '3':lianxi(3,s);break; case '4':lianxi(4,s);break; case '5':lianxi(5,s);break;

case '6':cout<<\再见!\\n\

default:system (\选择有误,重选吧!\\n\ }

}while(xuan!='6'); }

void lianxi(int n,student s)//用户s进入练习,n值决定练习项目 {

system (\

banquan();

//随机产生1到100的 a,b的值,key为正确答案,answer为学生的答案 int z=0,r=0; double l;

cout.setf(ios::fixed);

cout.setf(ios::showpoint);

cout.precision(2);

//原程序此处健壮性不够,张鹏祥已于2010年4月做了改进 cout<<\要结束练习,请输入三个零:000\\n\ cout<<\除法就保留两位小数啊 \\n\

double key,answer; do {

18

long s=time(NULL);

srand (s); int a,b;

a=rand()?+1;b=rand()?+1; if(n==1) {

cout<<\ \ key=a+b;//cout<<\ } if(n==2)

{

cout<<\ \ key=a-b;//cout<<\ } if(n==3) {

cout<<\ \ key=a*b;//cout<<\ }

if(n==4)//除法

{

cout<<\ \

key=double(a)/b;//cout<<\ }

//混合运算*************************************** if(n==5) {

long s2=time(NULL); srand(s2);

int suiji=rand()%4+1;//suiji为1到4的随机数,用以决定加减乘除 if(suiji==1)

{

cout<<\ \ key=a+b;//cout<<\ }

if(suiji==2) {

cout<<\ \ key=a-b; }

if(suiji==3)

19

{

cout<<\ \ key=a*b; }

if(suiji==4) {

cout<<\ \

key=double(a)/b;//cout<<\ }

}//混合运算结束************************************ //此处用输入字符串的方式输入一个数字 string ans=\ cin>>ans;

if(ans==\ answer=atof(ans.c_str());

//将数字字符串转换为实数

//atof函数的自变量只能是c字符串,因此使用 //string对象的成员函数c_str()转换为c字符串 //cin>>answer;

z=z+1;//测验题计数 if(answer==key)

r=r+1;//正确题计数 }while(1); if(z==0) {

r=0;l=0; }

if(z>0)

l=double(r)/(z); // system (\

chakan(z,r,l);//显示此次练习成绩

s.addchengji(n,z,r);//将用户s此次练习成绩加入其个人账户上 }

//以下这些函数均为细节设计,与程序构架无关

void shuru(char& a)//菜单的键盘输入控制,清除字母垃圾输入 {

//char a;

a=getch();

while(!isdigit(a)&&a!=13) {

20

cout<

cout<<\小朋友,你敲的不是数字,重输吧!\\n\ a=getch();

//屏幕不显示输入内容 } }

void xiaoguo()//增加趣味性的设计,并无实际用途 {

system(\ for(int j=0;j<1;j++) {

for(int i=10;i<70;i++) {

cout<

for(int i=50;i>20;i--)

{

cout<

system (\ }

void banquan()//版权声明

{

cout<<\小学生四则运算练习系统 设计者:崔会令 }

2009/6/3\\n\21

本文来源:https://www.bwwdw.com/article/si2d.html

Top