录入学生信息,并写入文件 # 用户输入:学号,姓名,班级 # 根据班级创建文件(限制班级:2220,2221,2222)
时间: 2024-03-21 09:37:55 浏览: 62
好的,以下是 Python 的代码实现,您可以参考一下:
```python
while True:
student_id = input("请输入学号:")
if not student_id:
break
student_name = input("请输入姓名:")
student_class = input("请输入班级:")
if student_class not in ["2220", "2221", "2222"]:
print("班级不合法,请重新输入")
continue
file_name = f"{student_class}.txt"
with open(file_name, "a", encoding="utf-8") as f:
f.write(f"{student_id}\t{student_name}\t{student_class}\n")
```
这段代码可以实现以下功能:
1. 循环让用户输入学生信息,直到用户不再输入任何内容
2. 用户输入学号、姓名、班级
3. 班级只能是 2220、2221、2222 中的一个,否则提示班级不合法并重新输入
4. 根据班级创建文件,文件名为班级号,如果文件已经存在,则在文件末尾追加学生信息
5. 将学生信息写入文件,每个学生信息占一行,以制表符分隔
希望这段代码可以帮助到您!
相关问题
用c++写以班级为单位进行选题,题目信息以文件形式存放, 包括:编号、题目、任务要求、完成时间 功能要求: 1录入学生信息包括:学号、姓名、班级; 2输入学号,随机抽取题目,限定每个题目只能被一个学生选中 3选题结果以文件形式存放,可以随时进行查询操作。
好的,您的问题是如何用C++编写一个以班级为单位进行选题的程序,包括录入学生信息、随机抽取题目、选题结果存储和查询。
首先,我们需要设计数据结构,包括学生信息和题目信息。对于学生信息,可以定义一个结构体,包括学号、姓名、班级等字段。对于题目信息,也可以定义一个结构体,包括编号、题目、任务要求、完成时间等字段。
然后,我们需要实现程序的功能。首先,我们可以编写一个函数用于录入学生信息,将学生信息存储到文件中。然后,我们可以编写一个函数用于读取题目信息文件,将题目信息存储到一个题库中。接下来,我们可以编写一个函数用于随机抽取题目,限定每个题目只能被一个学生选中。最后,我们可以编写一个函数将选题结果存储到文件中,并且可以随时进行查询操作。
下面是一个简单的示例程序,供您参考:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
struct Student {
string id;
string name;
string clazz;
};
struct Topic {
string id;
string title;
string requirement;
string deadline;
string chosen_by;
};
vector<Student> students;
vector<Topic> topics;
void read_students(const string& filename) {
ifstream ifs(filename);
if (!ifs) {
cerr << "Failed to open file: " << filename << endl;
exit(1);
}
string line;
while (getline(ifs, line)) {
Student s;
ifs >> s.id >> s.name >> s.clazz;
students.push_back(s);
}
ifs.close();
}
void read_topics(const string& filename) {
ifstream ifs(filename);
if (!ifs) {
cerr << "Failed to open file: " << filename << endl;
exit(1);
}
string line;
while (getline(ifs, line)) {
Topic t;
ifs >> t.id >> t.title >> t.requirement >> t.deadline;
topics.push_back(t);
}
ifs.close();
}
void choose_topic() {
int n = students.size();
int m = topics.size();
srand(time(nullptr));
for (int i = 0; i < m; i++) {
int idx = rand() % n;
while (topics[i].chosen_by != "") {
i = (i + 1) % m;
}
topics[i].chosen_by = students[idx].id;
}
}
void save_result(const string& filename) {
ofstream ofs(filename);
if (!ofs) {
cerr << "Failed to open file: " << filename << endl;
exit(1);
}
for (auto& t : topics) {
ofs << t.id << '\t' << t.chosen_by << endl;
}
ofs.close();
}
void print_topics() {
for (auto& t : topics) {
cout << t.id << '\t' << t.title << '\t' << t.chosen_by << endl;
}
}
int main() {
read_students("students.txt");
read_topics("topics.txt");
choose_topic();
save_result("result.txt");
print_topics();
return 0;
}
```
在这个示例程序中,我们定义了两个结构体 `Student` 和 `Topic`,分别表示学生信息和题目信息。我们使用 STL 中的 `vector` 来存储学生和题目信息,方便进行遍历和查询。
首先,我们编写了一个函数 `read_students`,用于读取学生信息文件,将学生信息存储到 `students` 中。类似地,我们编写了一个函数 `read_topics`,用于读取题目信息文件,将题目信息存储到 `topics` 中。
然后,我们编写了一个函数 `choose_topic`,用于随机抽取题目,并将选题结果存储在 `topics` 中。在这个函数中,我们使用了 `rand` 函数来生成随机数,限定每个题目只能被一个学生选中。
最后,我们编写了一个函数 `save_result`,用于将选题结果存储到文件中。在这个函数中,我们使用了 `ofstream` 类来打开文件,并将选题结果写入文件中。
在 `main` 函数中,我们依次调用了上述函数,完成了程序的各项功能。最后,我们编写了一个函数 `print_topics`,用于打印选题结果,方便进行查询操作。
设计一个学生学籍管理系统: 学生信息包括:姓名、学号、性别和英语、数学、程序设计、体育成绩。 数据录入支持键盘输入和文件导入;同时支持导入+输入,如自动列出“姓名、学号、性别”,而成绩部分由键盘输入。录入结果存入数据文件student.dat。 支持按学生姓名和学号查询,支持指定班级的两位序号范围查询,查询结果回显到屏幕上。 l对所有学生,按照班级计算各科平均成绩。 l支持按单科成绩排序和总分排序,排序结果写入文件并回显,文件名自拟。
好的,这是一个比较完整的学生学籍管理系统,需要较多的代码实现。我可以给你提供一个大致的框架,但具体的实现过程需要你自己去完成。
1. 定义学生信息的结构体
```c++
struct Student {
string name; // 姓名
int id; // 学号
string gender; // 性别
float english; // 英语成绩
float math; // 数学成绩
float program; // 程序设计成绩
float sports; // 体育成绩
};
```
2. 实现数据录入功能
```c++
void inputStudent(Student &s) {
cout << "请输入学生姓名:";
cin >> s.name;
cout << "请输入学生学号:";
cin >> s.id;
cout << "请输入学生性别:";
cin >> s.gender;
cout << "请输入学生英语成绩:";
cin >> s.english;
cout << "请输入学生数学成绩:";
cin >> s.math;
cout << "请输入学生程序设计成绩:";
cin >> s.program;
cout << "请输入学生体育成绩:";
cin >> s.sports;
}
void inputFromFile(vector<Student> &students, string filename) {
ifstream infile(filename);
if (!infile) {
cout << "文件不存在!" << endl;
return;
}
while (!infile.eof()) {
Student s;
infile >> s.name >> s.id >> s.gender >> s.english >> s.math >> s.program >> s.sports;
students.push_back(s);
}
infile.close();
}
void input(vector<Student> &students) {
char choice;
cout << "请选择录入方式(1-键盘输入,2-文件导入,3-导入+输入):";
cin >> choice;
if (choice == '1') {
Student s;
inputStudent(s);
students.push_back(s);
} else if (choice == '2') {
string filename;
cout << "请输入文件名:";
cin >> filename;
inputFromFile(students, filename);
} else if (choice == '3') {
string filename;
cout << "请输入文件名:";
cin >> filename;
inputFromFile(students, filename);
Student s;
inputStudent(s);
students.push_back(s);
} else {
cout << "无效的选项!" << endl;
}
}
```
3. 实现按学生姓名和学号查询功能
```c++
void searchByName(vector<Student> &students, string name) {
for (auto s : students) {
if (s.name == name) {
cout << "姓名:" << s.name << " 学号:" << s.id << " 性别:" << s.gender
<< " 英语成绩:" << s.english << " 数学成绩:" << s.math
<< " 程序设计成绩:" << s.program << " 体育成绩:" << s.sports << endl;
}
}
}
void searchById(vector<Student> &students, int id) {
for (auto s : students) {
if (s.id == id) {
cout << "姓名:" << s.name << " 学号:" << s.id << " 性别:" << s.gender
<< " 英语成绩:" << s.english << " 数学成绩:" << s.math
<< " 程序设计成绩:" << s.program << " 体育成绩:" << s.sports << endl;
}
}
}
```
4. 实现按班级计算各科平均成绩功能
```c++
void calculateAverage(vector<Student> &students) {
map<string, float> englishSum;
map<string, float> mathSum;
map<string, float> programSum;
map<string, float> sportsSum;
map<string, int> count;
for (auto s : students) {
englishSum[s.gender] += s.english;
mathSum[s.gender] += s.math;
programSum[s.gender] += s.program;
sportsSum[s.gender] += s.sports;
count[s.gender]++;
}
cout << "班级\t英语平均成绩\t数学平均成绩\t程序设计平均成绩\t体育平均成绩" << endl;
for (auto it = count.begin(); it != count.end(); it++) {
string gender = it->first;
float englishAvg = englishSum[gender] / count[gender];
float mathAvg = mathSum[gender] / count[gender];
float programAvg = programSum[gender] / count[gender];
float sportsAvg = sportsSum[gender] / count[gender];
cout << gender << "\t" << englishAvg << "\t" << mathAvg << "\t" << programAvg << "\t" << sportsAvg << endl;
}
}
```
5. 实现按单科成绩排序和总分排序功能
```c++
bool compareEnglish(Student s1, Student s2) {
return s1.english > s2.english;
}
bool compareMath(Student s1, Student s2) {
return s1.math > s2.math;
}
bool compareProgram(Student s1, Student s2) {
return s1.program > s2.program;
}
bool compareSports(Student s1, Student s2) {
return s1.sports > s2.sports;
}
bool compareTotal(Student s1, Student s2) {
return (s1.english + s1.math + s1.program + s1.sports) > (s2.english + s2.math + s2.program + s2.sports);
}
void sortByEnglish(vector<Student> &students) {
sort(students.begin(), students.end(), compareEnglish);
}
void sortByMath(vector<Student> &students) {
sort(students.begin(), students.end(), compareMath);
}
void sortByProgram(vector<Student> &students) {
sort(students.begin(), students.end(), compareProgram);
}
void sortBySports(vector<Student> &students) {
sort(students.begin(), students.end(), compareSports);
}
void sortByTotal(vector<Student> &students) {
sort(students.begin(), students.end(), compareTotal);
}
void outputToFile(vector<Student> &students, string filename) {
ofstream outfile(filename);
if (!outfile) {
cout << "文件无法打开!" << endl;
return;
}
for (auto s : students) {
outfile << s.name << "\t" << s.id << "\t" << s.gender << "\t" << s.english << "\t"
<< s.math << "\t" << s.program << "\t" << s.sports << endl;
}
outfile.close();
}
void sortAndOutput(vector<Student> &students) {
char choice;
cout << "请选择排序方式(1-按英语成绩排序,2-按数学成绩排序,3-按程序设计成绩排序,4-按体育成绩排序,5-按总分排序):";
cin >> choice;
if (choice == '1') {
sortByEnglish(students);
outputToFile(students, "EnglishSort.dat");
} else if (choice == '2') {
sortByMath(students);
outputToFile(students, "MathSort.dat");
} else if (choice == '3') {
sortByProgram(students);
outputToFile(students, "ProgramSort.dat");
} else if (choice == '4') {
sortBySports(students);
outputToFile(students, "SportsSort.dat");
} else if (choice == '5') {
sortByTotal(students);
outputToFile(students, "TotalSort.dat");
} else {
cout << "无效的选项!" << endl;
}
}
```
6. 主函数框架
```c++
int main() {
vector<Student> students;
while (true) {
// 显示菜单
// 根据用户选择执行相应的功能
}
return 0;
}
```
这只是一个大致的框架,具体的实现还需要你自己去完成。希望能对你有所帮助!
阅读全文