//小学生出题系统
#include <stdio.h>//.c
#include <stdlib.h>//文件操作c
#include <time.h>//生成随机数c
#include <conio.h>
#include <iostream>//.cpp
#include <iomanip>//小数位数
#include <string.h>//字符串c
#include <string>//字符串数组
using namespace std;
int menu();//主菜单
int practise();//计算练习
int exam();//计算考试
int vvvvvvvv();//考试出题
int query();//成绩查询
int sort();//成绩排序
int del();//成绩删除
int m = 0, n = 0;//总题数 正确数
int x = 0, y = 0, z = 0;//考试每道题正确\错误存放的位置 考试错题答案存放的位置 考生数据存放的位置
int choose;//选择
string p[100];//存放考试题目的正确\错误
int q[100];//存放考试每道错题的答案
struct student
{
int num;//学号
char name[20];//姓名
float score;//成绩
};
struct student stu[20];
struct student s;
int main()//主函数//////////////////////////////////////////////////////////////////////////////////////
{
menu();
return 0;
}
int menu()//主菜单/////////////////////////////////////////////////////////////////////////////////////
{
cout << "小朋友,欢迎你来到小学算数" << endl;
cout << "\t\t\t\t1.计算练习" << endl;
cout << "\t\t\t\t2.计算考试" << endl;
cout << "\t\t\t\t3.成绩查询" << endl;
cout << "\t\t\t\t4.成绩排序" << endl;
cout << "\t\t\t\t5.成绩删除" << endl;
cout << "\t\t\t\t6.退出" << endl;
cout << "请选择:";///////////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:practise();//计算练习
case 2:exam();//计算考试
case 3:query();//成绩查询
case 4:sort();//成绩排序
case 5:del();//成绩删除
case 6:exit(1);//退出
}
return 0;
}
int practise()//计算练习//////////////////////////////////////////////////////////////////////////////////
{
m++;//总题数加一
int a, b, c, d;//运算数值
int i, j;//辅助
srand((unsigned)time(NULL));//生成随机数
a = rand() % 100;//[0,99]
b = rand() % 100;//[0,99]
i = rand() % 4;//[0,3]
switch (i)//加减乘除
{
case 0://加法//////////////////////////////////////////////////////////////////////////////////////
cout << a << '+' << b << '=' << endl << endl;
c = a + b;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
}
else
{
for (j = 1; j < 3; j++)
{
cout << "错误" << endl << endl;//三次机会
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
break;
}
}
if (j == 3)cout << "错误" << endl << endl << "答案:" << c << endl;//三次错给答案
}
break;
case 1://减法//////////////////////////////////////////////////////////////////////////////////////
if (a < b)//无负数 减数不为零
{
int k;//辅助
k = a;
a = b;
b = k;
}
cout << a << '-' << b << '=' << endl << endl;
c = a - b;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
}
else
{
for (j = 1; j < 3; j++)
{
cout << "错误" << endl << endl;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
break;
}
}
if (j == 3)cout << "错误" << endl << endl << "答案:" << c << endl;//三次错给答案
}
break;
case 2://乘法//////////////////////////////////////////////////////////////////////////////////////
cout << a << '*' << b << '=' << endl << endl;
c = a * b;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
}
else
{
for (j = 1; j < 3; j++)
{
cout << "错误" << endl << endl;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
break;
}
}
if (j == 3)cout << "错误" << endl << endl << "答案:" << c << endl;//三次错给答案
}
break;
case 3://除法//////////////////////////////////////////////////////////////////////////////////////
for (; a%b != 0;)//要求整除 得数为整数
{
srand((unsigned)time(NULL));//重新生成随机数
a = rand() % 100;
b = rand() % 100;
for (; b == 0;)//分母不能为零
{
srand((unsigned)time(NULL));//重新生成随机数
b = rand() % 100;
}
}
cout << a << '/' << b << '=' << endl << endl;
c = a / b;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
}
else
{
for (j = 1; j < 3; j++)
{
cout << "错误" << endl << endl;
cin >> d;
if (c == d)
{
cout << "正确" << endl;
n++;//正确数加一
break;
}
}
if (j == 3)cout << "错误" << endl << endl << "答案:" << c << endl;//三次错给答案
}
}
cout << "\t\t\t\t1.继续练习" << endl;
cout << "\t\t\t\t2.结束练习" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:practise(); break;
case 2:cout << "总题数:" << m << endl << "正确数:" << n << endl << "正确率:" << fixed << setprecision(2) << float(n) * 100 / m << '%' << endl << endl;
}
cout << "\t\t\t\t1.返回主菜单" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:m = 0, n = 0, menu();
}
return 0;
}
int exam()//计算考试//////////////////////////////////////////////////////////////////////////////////////
{
cout << "学号:";
cin >> stu[z].num;//学号
cout << endl << "姓名:";
cin >> stu[z].name;//姓名
cout << endl << "总题数:";
cin >> m;//考试题数
if (m > 0)
{
int i;//辅助
cout << endl;
for (i = 0; i < m; i++)vvvvvvvv();//考试出题
if (i == m)
{
stu[z].score = float(n) * 100 / m;//成绩
cout << "\t\t\t\t1.结束考试" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:
cout << "成绩:" << fixed << setprecision(1) << float(n) * 100 / m << endl << endl;//成绩
for (x = 0; x < m; x++)cout << "第" << x + 1 << "道题" << p[x] << endl;//考试每道题目的正确\错误
if (n < m)
{
cout << "错题答案依次为:";
for (y = 0; y < m - n; y++)cout << q[y] << " ";//考试每道错题的答案
cout << endl;
}
}
cout << "\t\t\t\t1.返回主菜单" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1: m = 0, n = 0, x = 0, y = 0, z++, menu();//学生数据存放的位置加一
}
}
}
else
{
cout << "输入非法" << endl;
cout << "\t\t\t\t1.返回主菜单" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:m = 0, n = 0, menu();
}
}
return 0;
}
int vvvvvvvv()//考试出题//////////////////////////////////////////////////////////////////////////////////////
{
int a, b, c, d;//运算数值
int i;//辅助
srand((unsigned)time(NULL));//生成随机数
a = rand() % 100;//[0,99]
b = rand() % 100;//[0,99]
i = rand() % 4;//[0,3]
switch (i)//加减乘除
{
case 0://加法//////////////////////////////////////////////////////////////////////////////////////
cout << a << '+' << b << '=' << endl << endl;
c = a + b;
cin >> d;
cout << endl;
break;
case 1://减法//////////////////////////////////////////////////////////////////////////////////////
if (a < b)//无负数 减数不为零
{
int k;//辅助
k = a;
a = b;
b = k;
}
cout << a << '-' << b << '=' << endl << endl;
c = a - b;
cin >> d;
cout << endl;
break;
case 2://乘法//////////////////////////////////////////////////////////////////////////////////////
cout << a << '*' << b << '=' << endl << endl;
c = a * b;
cin >> d;
cout << endl;
break;
case 3://除法//////////////////////////////////////////////////////////////////////////////////////
for (; a%b != 0;)//要求整除 得数为整数
{
srand((unsigned)time(NULL));//重新生成随机数
a = rand() % 100;
b = rand() % 100;
for (; b == 0;)//分母不能为零
{
srand((unsigned)time(NULL));//重新生成随机数
b = rand() % 100;
}
}
cout << a << '/' << b << '=' << endl << endl;
c = a / b;
cin >> d;
cout << endl;
}
if (c == d)
{
p[x] = "正确";
n++;//正确数加一
}
if (c != d)
{
p[x] = "错误";
q[y] = c;//存放错题答案
y++;
}
x++;//考试每道题正确错误以及错题答案存放的位置加一
return 0;
}
int query()//成绩查询//////////////////////////////////////////////////////////////////////////////////////
{
int i;//辅助
int NUM;//学号
char NAME[20];//姓名
cout << "学号:";
cin >> NUM;
cout << endl << "姓名:";
cin >> NAME;
cout << endl;
for (i = 0; i <= z; i++)
{
if (stu[i].num == NUM)
{
if (strcmp(stu[i].name, NAME) == 0)
{
cout << stu[i].score << endl;
break;
}
}
}
if (i == z + 1)cout << "无此学生信息" << endl;
cout << "\t\t\t\t1.返回主菜单" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:menu();
}
return 0;
}
int sort()//成绩排序//////////////////////////////////////////////////////////////////////////////////////
{
int i, j;//辅助
cout << "排列前" << endl;
for (i = 0; i <= z; i++)cout << stu[i].num << " " << stu[i].name << " " << stu[i].score << endl;
cout << endl;
for (i = 0; i < z - 1; i++)
{
for (j = 0; j < z - i - 1; j++)
{
if (stu[j].score < stu[j + 1].score)
{
s = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = s;
}
}
}
cout << "排列后" << endl;
for (i = 0; i <= z; i++)cout << stu[i].num << " " << stu[i].name << " " << stu[i].score << endl;
cout << "\t\t\t\t1.返回主菜单" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:menu();
}
return 0;
}
int del()//成绩删除//////////////////////////////////////////////////////////////////////////////////////
{
int i, j;//辅助
int NUM;//学号
char NAME[20];//姓名
cout << "学号:";
cin >> NUM;
cout << endl << "姓名:";
cin >> NAME;
cout << endl;
for (i = 0; i <= z; i++)
{
if (NUM == stu[i].num)
{
if (strcmp(NAME, stu[i].name) == 0)
{
for (j = i; j < 20; j++)stu[j] = stu[j + 1];
cout << "删除成功";
break;
}
}
}
if (i == z + 1)cout << "删除失败 无此学生信息" << endl;
cout << "\t\t\t\t1.返回主菜单" << endl;
cout << "请选择:";////////////////////////////////////////////////////////////////////////////////////////
cin >> choose;
system("cls");
switch (choose)
{
case 1:menu();
}
return 0;
}