main
p4v3fhysf 1 year ago
parent 94cf8fe45b
commit da1cd2eb68

533
代码

@ -0,0 +1,533 @@
//学生信息管理系统大项目
//组长杨振宇 组员刘宸雨
//任务分配 杨振宇18-28行函数 刘宸雨31-36行函数
#include<iostream>
#include<cmath>
#include<string.h>
#include<fstream>
using namespace std;
struct STUDENT {
int cla;
int num;
char sex[5];
char name[20];
int score;
}s[100];
int N{ 0 };//已存学生数量
//以下函数由杨振宇所写
void list();//显示学生信息函数
void list1();//菜单4函数包含list函数额外有返回菜单功能与退出功能
void add();//添加学生信息函数
void menu();//菜单汉书
void quit();//退出程序函数
void dele();//删除学生信息函数
void rev();//修改学生信息函数
void inq();//查询学生信息函数
void ana();//学生数据分析函数
void readFile();//读取文件函数
void writeFile();//保存文件函数
//以下是学生数据分析函数
//以下函数由刘宸雨所写
int score_min();//成绩最小值
int score_max();//成绩最大值
double aver();//成绩平均数
void search(int a, int b);//成绩范围检索
double variance();//成绩方差
void seqence();//成绩排名
//本程序中seq为每一时刻使用者输入的数字指令无固定含义
int main() {
menu();
return 0;
}//主函数
void ana() {
int seq;
cout << "\n\n请选择你的分析对象1.年级 2.班级):";
cout << "请输入你的选择前的序号1|2";
cin >> seq;
while (seq != 1 && seq != 2) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1) {
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 1. 最低分查询 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 2. 最高分查询 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 3. 平均分计算 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 4. 成绩范围学生检索 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 5. 方差计算及成绩分析 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 6. 学生成绩排序 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\n\n请选择你的需求输入操作前的序号1-6";
cin >> seq;
while (seq != 1 && seq != 2 && seq != 3 && seq != 4 && seq != 5 && seq != 6) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
switch (seq) {
case 1:
cout << '\n\t' << "该年级最低分学生信息为:" << '\n';
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\t\t" << score_min() << ".\t" << s[score_min()].cla << "\t" << s[score_min()].num << "\t" << s[score_min()].name << "\t " << s[score_min()].sex << "\t" << s[score_min()].score << "\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
break;
case 2:
cout << '\n\t' << "该年级最高分学生信息为:" << '\n';
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\t\t" << score_max() << ".\t" << s[score_max()].cla << "\t" << s[score_max()].num << "\t" << s[score_max()].name << "\t " << s[score_max()].sex << "\t" << s[score_max()].score << "\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
break;
case 3:
cout << '\n\t' << "该年级平均分是:" << aver() << '\n';
break;
case 4:
cout << "请选择您的检索范围:\n" << "从:";
int a, b;
cin >> a;
cout << "到:";
cin >> b;
search(a, b);
break;
case 5:
cout << "\n该年级成绩方差为" << variance() << '\n';
break;
case 6:
seqence();
cout << "\n已将该年级学生的成绩进行排序排序后的学生名册如下\n";
list();
break;
}
}
else {
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 1. 最低分查询 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 2. 最高分查询 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 3. 平均分计算 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 4. 成绩范围学生检索 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 5. 方差计算及成绩分析 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 6. 学生成绩排序 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\n\n请选择你的需求输入操作前的序号1-6";
cin >> seq;
while (seq != 1 && seq != 2 && seq != 3 && seq != 4 && seq != 5 && seq != 6) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
switch (seq) {
case 1:
cout << '\n\t' << "该年级最高分学生信息为:" << '\n';
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\t\t" << score_max() << ".\t" << s[score_max()].cla << "\t" << s[score_max()].num << "\t" << s[score_max()].name << "\t " << s[score_max()].sex << "\t" << s[score_max()].score << "\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
break;
case 2:
cout << '\n\t' << "该年级最高分学生信息为:" << '\n';
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\t\t" << score_max() << ".\t" << s[score_max()].cla << "\t" << s[score_max()].num << "\t" << s[score_max()].name << "\t " << s[score_max()].sex << "\t" << s[score_max()].score << "\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
break;
case 3:
cout << '\n\t' << "该班级平均分是:" << aver() << '\n';
break;
case 4:
cout << "请选择您的检索范围:\n" << "从:";
int a, b;
cin >> a;
cout << "到:";
cin >> b;
search(a, b);
break;
case 5:
cout << "\n该班级成绩方差为" << variance() << '\n';
break;
case 6:
seqence();
cout << "\n已将该班级学生的成绩进行排序排序后的学生信息如下\n";
list();
break;
}
}
cout << "是否继续进行数据分析1.是|0.不是)" << endl;
cout << "请输入选择前的序号1或0";
cin >> seq;
while (seq != 1 && seq != 0) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
ana();
else
menu();
}
void quit() {
int seq;
cout << "是否进行存档1.是|0.否)" << endl;
cout << "请输入选择前的序号1或0";
cin >> seq;
while (seq != 1 && seq != 0) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
writeFile();
}
void list() {
cout << "\t\t\t\t\t学生信息\n";
cout << "\t\t**********************************************************\n\n";
cout << "\t\t序号\t班级\t学号\t姓名 \t性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
for (int i = 1; i <= N; i++) {
cout << "\t\t" << i << ".\t" << s[i].cla << "\t" << s[i].num << "\t" << s[i].name << "\t " << s[i].sex << "\t" << s[i].score << "\n";
}
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
}
void list1() {
int seq;
list();
cout << "\n\n输入1返回菜单,输入0退出系统";
cin >> seq;
while (seq != 0 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
menu();
else
quit();
}
void rev() {
list();
int seq;
cout << "请输入你要修改的学生编号:";
cin >> seq;
while (seq < 1 || seq > N) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
cout << "\t以下为待修改学生信息";
cout << "\n\t-----------------------------------------------------------\n";
cout << "\t1. " << s[seq].cla << "\t2. " << s[seq].num << "\t3. " << s[seq].name << "\t4. " << s[seq].sex << "\t5. " << s[seq].score << endl;
cout << "\t-----------------------------------------------------------\n";
cout << "请输入你要修改内容的编号:";
int seq1;
cin >> seq1;
while (seq1 < 1 || seq1 > 5) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq1 == 1) {
cout << "你要将“" << s[seq].cla << "”修改为:";
cin >> s[seq].cla;
}
else if (seq1 == 2) {
cout << "你要将“" << s[seq].num << "”修改为:";
cin >> s[seq].num;
}
else if (seq1 == 3) {
cout << "你要将“" << s[seq].name << "”修改为:";
cin >> s[seq].name;
}
else if (seq1 == 4) {
cout << "你要将“" << s[seq].sex << "”修改为:";
cin >> s[seq].sex;
}
else {
cout << "你要将“" << s[seq].score << "”修改为:";
cin >> s[seq].score;
}
cout << endl << "修改成功是否继续修改继续输入1不继续输入0";
cin >> seq;
while (seq != 0 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
rev();
else
list1();
}
void dele() {
list();
N--;
int seq;
cout << "请输入你要删除的学生编号:";
cin >> seq;
while (seq < 1 || seq > N + 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
for (int i = seq; i <= N; i++) {
s[i] = s[i + 1];
}
cout << endl << "\t是否继续删除继续输入1不继续输入0";
cin >> seq;
while (seq != 0 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
dele();
else
list1();
}
void add() {
list();
N++;
cout << "\t请输入学生信息\n\t学生班级";
cin >> s[N].cla;
cout << endl << "\t学生学号";
cin >> s[N].num;
cout << endl << "\t学生姓名";
cin >> s[N].name;
cout << endl << "\t学生性别";
cin >> s[N].sex;
cout << endl << "\t学生成绩";
cin >> s[N].score;
cout << endl << "\t是否继续录入继续输入1不继续输入0";
int seq;
cin >> seq;
while (seq != 0 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
add();
else
list1();
}
void inq() {
cout << "请选择查询途径1.学号查询 2.姓名查询)\n";
cout << "请输入选择途径的序号1或2";
int seq;
cin >> seq;
while (seq != 2 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
{
cout << "请输入待查学生学号:";
int inq_num, mark{ 0 };
cin >> inq_num;
for (int i = 1; i <= N; i++) {
if (s[i].num == inq_num) {
mark = 1;
cout << "该学生信息如下\n";
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\t\t" << i << ".\t" << s[i].cla << "\t" << s[i].num << "\t" << s[i].name << "\t " << s[i].sex << "\t" << s[i].score << "\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
break;
}
}
if (mark == 0) {
cout << "\t\t\t该学生信息不存在";
inq();
}
cout << "\n\n输入1返回菜单,输入0退出系统";
cin >> seq;
while (seq != 0 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
menu();
else
quit();
}
else
{
cout << "请输入待查学生姓名:";
int mark{ 0 };
char inq_name[20];
cin >> inq_name;
for (int i = 1; i <= N; i++) {
if (strcmp(inq_name, s[i].name)) {
mark = 1;
cout << "该学生信息如下\n";
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\t\t" << i << ".\t" << s[i].cla << "\t" << s[i].num << "\t" << s[i].name << "\t " << s[i].sex << "\t" << s[i].score << "\n";
cout << "\t\t----------------------------------------------------------\n";
cout << "\n\n";
}
}
if (mark == 0) {
cout << "\t\t\t该学生信息不存在";
inq();
}
}
cout << "\n\n输入1返回菜单,输入0退出系统";
cin >> seq;
while (seq != 0 && seq != 1) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1)
menu();
else
quit();
}
void readFile()
{
ifstream ifs;
ifs.open("stuList.txt", ios::in);
ifs >> N;
for (int i = 1; i <= N; i++)
{
ifs >> s[i].cla >> s[i].num >> s[i].name >> s[i].sex >> s[i].score;
}
ifs.close();
cout << "已读取存档\n";
menu();
}
//写入文件
void writeFile()
{
ofstream ofs;
ofs.open("stuList.txt", ios::out);
ofs << N << endl; //先写入学生数量
for (int i = 1; i <= N; i++)
{
ofs << s[i].cla << " " << s[i].num << " " << s[i].name << " " << s[i].sex << " " << s[i].score << endl;
}
ofs.close();
}
int score_min() {
int sc_mi{ 999 }, min{0};
for (int i = 1; i <= N; i++) {
if (s[i].score <= sc_mi) {
sc_mi = s[i].score;
min = i;
}
}
return min;
}
int score_max() {
int sc_ma{ 0 }, max{ 0 };
for (int i = 1; i <= N; i++) {
if (s[i].score >= sc_ma) {
sc_ma = s[i].score;
max = i;
}
}
return max;
}
double aver() {
double averge{ 0 };
for (int i = 1; i <= N; i++) {
averge += s[i].score * 1.0 / N;
}
return averge;
}
void search(int a, int b) {
cout << "符合成绩范围条件的学生信息如下:" << "\n";
cout << "\t\t序号\t班级\t学号\t姓名\t 性别\t成绩\n";
cout << "\t\t----------------------------------------------------------\n";
for (int i = 1; i <= N; i++) {
if (s[i].score >= a && s[i].score <= b) {
cout << "\t\t" << i << ".\t" << s[i].cla << "\t" << s[i].num << "\t" << s[i].name << "\t " << s[i].sex << "\t" << s[i].score << "\n";
}
}
cout << "\t\t----------------------------------------------------------\n";
}
double variance() {
double ave = aver();
double var{ 0 };
for (int i = 1; i <= N; i++) {
var += pow((s[i].score - ave), 2) / N;
}
return var;
}
void seqence() {
for (int i = 1; i < N; i++) {
for (int j = 1; j <= N-i; j++) {
if (s[j].score < s[j + 1].score) {
STUDENT s_t;
s_t = s[j];
s[j] = s[j + 1];
s[j + 1] = s_t;
}
}
}
}
void menu() {
int seq;
cout << "\t\t\t\t欢迎来到学生信息管理系统\n";
cout << "\t\t*********************************************************\n\n";
cout << "\t\t\t\t\t 菜单\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 1. 添加学生信息 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 2. 删除学生信息 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 3. 修改学生信息 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 4. 查询学生信息 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 5. 显示学生列表 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 6. 学生数据分析 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 7. 读取文件 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\t\t| 8. 退出系统 |\n";
cout << "\t\t|-------------------------------------------------------|\n";
cout << "\n\n请选择你的操作输入操作前的序号1-8";
cin >> seq;
while (seq != 1 && seq != 2 && seq != 3 && seq != 4 && seq != 5 && seq != 6 && seq != 7 && seq != 8) {
cout << "输入错误,请重新输入:";
cin >> seq;
}
if (seq == 1) {
cout << "\t\t*****************欢迎使用添加学生信息功能******************\n\n\n";
add();
}
else if (seq == 2) {
cout << "\t\t*****************欢迎使用删除学生信息功能******************\n\n\n";
dele();
}
else if (seq == 3) {
cout << "\t\t*****************欢迎使用修改学生信息功能******************\n\n\n";
rev();
}
else if (seq == 4) {
cout << "\t\t*****************欢迎使用查询学生信息功能******************\n\n\n";
inq();
}
else if (seq == 5)
list1();
else if (seq == 6) {
cout << "\t\t*****************欢迎使用学生数据分析功能******************\n\n\n";
ana();
}
else if (seq == 7)
readFile();
else quit();
}
Loading…
Cancel
Save