- 文件名:[作业]
- 作者:〈漆黑〉
- 描述:〈 本周项目:
假设一个小组有5位同学,成绩薄上记录了每位同学每一次考试成绩的排名,
设计一个成绩薄程序,要有以下功能:
1、程序首先提示录入每个同学的成绩排名。步骤如下
1)提示录入同学姓名
2)提示录入同学排名(注意5个人的名次只能在1~5之间,这里要有数字范围验证,最好也有字符验证)
3)按照上述步骤录入下一位同学的信息。直至录入完所有同学的信息。
2、录入成绩排名完成之后,程序应该提供一个菜单
1)打印各位同学的排名(按照名次顺序,正序/倒序都可以)
2)删除一位同学的信息(注意删除一位同学的信息之后,要把后面同学的名次也要更改。)
3)增加一位同学的信息(仍然注意他对其他同学的影响,最多可能增加5位同的信息,如果使用动态内存分配则不用考虑增加人数的限制)
3、额外功能加分(如提供一个存档功能,将当前同学的成绩和姓名信息以txt格式保存在本地等) 〉
#include<iostream>
#include <fstream>
using namespace std;
struct student
{
string name;
int rank;
};
void faultinfo();
void sort(student s[], int n);
void prints(student s[], int n);
void deletes(student s[], int n, int num);
int main() {
int num = 0;
student students[10];
for (int i = 0; i < 5; i++) {
cout << "请输入同学姓名:";
while (!(cin >> students[i].name)) {
faultinfo();
}
cout << "请输入同学排名:";
loop:
while (!(cin >> students[i].rank) || students[i].rank > 5 || students[i].rank < 1) {
faultinfo();
}
for (int j = 0; j < i; j++) {
if (students[i].rank == students[j].rank) {
faultinfo();
goto loop;
}
}
num++;
}
sort(students, num);
while (1)
{
system("cls");
cout << "请选择功能:\n1、打印学生成绩\n2、删除学生信息\n3、增加学生信息\n4、保存到本地\n5、结束\n请选择:";
int choice;
while (!(cin >> choice) || choice > 5 || choice < 1) {
faultinfo();
}
switch (choice)
{
case 1://打印学生成绩
prints(students, num);
system("pause");
break;
case 2://删除学生信息
if (num < 1) {
cout << "已没有学生信息。";
system("pause");
break;
}
int rank;
prints(students, num);
cout << "请选择删除的同学排名为:";
while (!(cin >> rank) || rank > num || rank < 1) {
faultinfo();
}
deletes(students, rank, num);
cout << "删除成功。" << endl;
num--;
sort(students, num);
system("pause");
break;
case 3://增加学生信息
prints(students, num);
if (num >= 10) {
cout << "人数已满。";
system("pause");
break;
}
cout << "请输入增加的同学姓名:";
while (!(cin >> students[num].name)) {
faultinfo();
}
cout << "请输入增加的同学排名:";
while (!(cin >> students[num].rank) || students[num].rank > num + 1 || students[num].rank < 1) {
faultinfo();
}
cout << "增加成功。"<<endl;
num++;
sort(students, num);
system("pause");
break;
case 4://保存到本地
{
ofstream fout;
fout.open("学生成绩单.txt");
fout << "姓名\t排名" << endl;
for (int i = 0; i < num; i++) {
fout << students[i].name << "\t" << students[i].rank << endl;
}
fout.close();
cout << "保存成功。";
system("pause");
break;
}
case 5://结束
return 0;
default:
break;
}
}
}
void faultinfo() {
cout << "输入错误,请重新输入:";
cin.clear();
cin.ignore(1024, '\n');
}
void sort(student s[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (s[i].rank >= s[j].rank) {
student temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
for (int i = 0; i < n; i++) {
s[i].rank = i + 1;
}
}
void prints(student s[], int n) {
for (int i = 0; i < n; i++) {
cout << s[i].name << ":" << s[i].rank << endl;
}
}
void deletes(student s[], int n, int num) {
for (n; n < num; n++) {
s[n - 1] = s[n];
}
}