【c++项目】小鑫记单词系统

本文最后更新于:2022年7月9日 下午

【c++项目】小鑫记单词系统

前言

四级没过的我快哭了…因此开发了一个记单词的系统。可以录入单词,随机抽取单词记忆,显示单词本等功能。代码写的仓促,有点屎山代码的意味。所以在写代码之前,还是要事先写好开发文档。

话不多说,放代码。

代码

englishStudy.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
2022-6-24
连思鑫
*/
#include <iostream>
#include "sendEnglish.h"
using namespace std;
int main() {
int num;
sendEnglish sendenglish;
while (true)
{
cout << "************************" << endl;
cout << "* 小鑫记单词系统 *" << endl;
cout << "************************" << endl;
cout << "* 1.录入单词 *" << endl;
cout << "* 2.随机学单词 *" << endl;
cout << "* 3.显示单词本 *" << endl;
cout << "* 4.清空单词本 *" << endl;
cout << "* 0.退出 *" << endl;
cout << "************************" << endl;
cout << "请根据编号选择:";
cin >> num;
switch (num) {
case 1:
sendenglish.show();
break;
case 2:
sendenglish.rec();
break;
case 3:
sendenglish.book();
break;
case 4:
sendenglish.del_book();
break;
case 0:
return 0;
}
}
return 0;
}

sendEnglish.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
2022-6-24
连思鑫
*/

#ifndef ENGLISHSTUDY_SENDENGLISH_H
#define ENGLISHSTUDY_SENDENGLISH_H
#define MAX 10000
#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
#include <vector>
#include <sstream>
#include <ctime>

using namespace std;

//单词结构体
struct English {
string english;
string chinese;
};

//单词本结构体
struct Englishbook {

int number; //单词个数
English english[MAX];//一万个单词
};

class sendEnglish {
public:
void show(); //显示
void send(); //写入
void rec(); //读取
void book(); //单词本
void del_book(); //清空单词本

private:
//判断文件是否为空
bool fileIsEmpty;

};


#endif //ENGLISHSTUDY_SENDENGLISH_H

sendEnglish.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/*
2022-6-24
连思鑫
*/
#include "sendEnglish.h"
Englishbook englishbook;


//随机数生成
int randomNumber(int num) {
srand((int)time(0));
return rand() % (num + 1);
}


//C++字符串切片,C++标准库里没有。。。只能自己去实现了。
static void _split(const string& s, char delim, vector<string>& elems) {
stringstream ss(s);
string item;

while (getline(ss, item, delim))
{
elems.push_back(item);
}
}

vector<string> split(const string& s, char delim) {
vector<string> elems;
_split(s, delim, elems);
return elems;
}

//:~

void test() {
for (int i = 0; i <= englishbook.number; ++i) {
cout << "-----------------------------------" << endl;
cout << i << " : " << englishbook.english[i].english << " " << englishbook.english[i].chinese << endl;
cout << "-----------------------------------" << endl;
}
}

void sendEnglish::show() {
string s;
int num = 0;
cout << "*************************" << endl;
cout << "* 请输入单词以及该单词的翻译 *" << endl;
cout << "* 按回车即可保存 *" << endl;
cout << "* 输入0按回车即可结束 *" << endl;
cout << "*************************" << endl;
while (true) {
cout << "请输入您要输入的英语单词:";
cin >> s;
if (s == "0") {
break;
}
englishbook.number = num;
englishbook.english[num].english = s;
cout << "请输入该英语的翻译:";
cin >> englishbook.english[num].chinese;
cout << "------------------------" << endl;
num++;
send();
}
test(); //测试单词写入结构体是否成功
cout << "以上是您录入的新单词,已保存!!" << endl;
}

void sendEnglish::send() {

ofstream ofs;
ofs.open("english.csv", ios::out | ios::app); // 用追加的方式写文件
if (!ofs.is_open()) {
cout << "文件没有打开!" << endl;
}
ifstream ifs("english.csv", ios::in); //读文件
if (!ifs.is_open())
{
this->fileIsEmpty = true;
cout << "文件不存在" << endl;
ifs.close();
return;
}
int s = 0;
string data;
while (getline(ifs,data))
{
s++;
}
ifs.close();

//将数据 写入到文件中
for (int i = 0; i <= englishbook.number; i++)
{
ofs << s+i << "," << englishbook.english[i].english << "," << englishbook.english[i].chinese << endl;
}
//关闭
ofs.close();
//cout << "记录已经保存" << endl;

}

void sendEnglish::rec(){
int num;
//memset(&englishbook, 0, sizeof(englishbook));
//清空结构体,这个地方加上有bug,字符串会乱码,没搞明白为什么。所以注释掉了,可能不是我这么用的。有知道的大佬可以指点一下。
ifstream ifs("english.csv", ios::in); //读文件
if (!ifs.is_open())
{
this->fileIsEmpty = true;
cout << "文件不存在" << endl;
ifs.close();
return;
}
string buff;
int s = 0;
while (getline(ifs, buff))
{
vector<string> data = split(buff, ',');
//for (auto it = begin(data); it != end(data); ++it)
//{
// cout << *it << endl;
//}
englishbook.english[s].english = data[1];
englishbook.english[s].chinese = data[2];
s++;
}
englishbook.number = s-1;
cout << "如果想要退出请按0." << endl;
while (true)
{
string chinese;
num = randomNumber(englishbook.number);
//cout << num << endl;//测试随机数是否生成
cout << "请写出" << englishbook.english[num].english << "的翻译:";
cin >> chinese;
if (chinese == "0")
{
break;

}
else if (englishbook.english[num].chinese == chinese) {
cout << "回答正确!!" << endl;
}
else if (englishbook.english[num].chinese != chinese)
{
cout << "回答错误!!正确答案是:" << englishbook.english[num].chinese << endl;
}
}
}

void sendEnglish::book() {
ifstream ifs("english.csv", ios::in); //读文件
if (!ifs.is_open())
{
this->fileIsEmpty = true;
cout << "文件不存在" << endl;
ifs.close();
return;
}
string buff;
int s = 0;
while (getline(ifs, buff))
{
vector<string> data = split(buff, ',');
//for (auto it = begin(data); it != end(data); ++it)
//{
// cout << *it << endl;
//}
englishbook.english[s].english = data[1];
englishbook.english[s].chinese = data[2];
s++;
}
englishbook.number = s - 1;
cout << "已录入单词如下:" << endl;
test();

}

void sendEnglish::del_book() {
int num;
cout << "************************" << endl;
cout << "您确定要清空单词本吗?" << endl;
cout << "是,请输入1" << endl;
cout << "否,请输入0" << endl;
cin >> num;
if (num == 0)
{
return;
}
else if(num == 1) {
remove("english.csv");
}
}


效果展示

uploaded!

uploaded!

可执行程序:点我下载


【c++项目】小鑫记单词系统
https://jinbilianshao.github.io/2022/06/24/【c-项目】小鑫记单词系统/
作者
连思鑫
发布于
2022年6月24日
许可协议