需求#

{F7FCAEE6-2F19-0037-F220-102DA76240EE}.png
实现难点##
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include<math.h>
#include<io.h>
#include <stdlib.h>
using namespace std;
//定义学生节点
typedef struct studentNode{
string number;
string name;
int math;
int english;
int chinese;
struct studentNode *next;
}*student;
int countOfStudent ;
FILE * fp;
void ShowAllStudentInfo(student& studentLink);
//输入学生信息
void InputStudentInfo(student& studentLink){
cout<<"************欢迎进入学生信息创建菜单*************"<<endl;
cout<<"1.重新创建"<<endl;
cout<<"2.引用已有数据"<<endl;
int choice = 0;
int choice1 = 0;
studentLink->next = nullptr;
cin>>choice;
switch(choice){
case 1:{
cout<<"请依次输入学号,姓名,数学成绩,英语成绩,语文成绩:"<<endl;
countOfStudent = 0;
while(1){
student stu = new studentNode;
countOfStudent = countOfStudent + 1;
cin>>stu->number>>stu->name>>stu->math>>stu->english>>stu->chinese;
cout<<stu->number<<stu->name<<stu->math<<stu->english<<stu->chinese;
//头插法
stu->next = studentLink->next;
studentLink->next = stu;
cout<<"1.继续输入 2.已完成"<<endl;
cin>>choice1;
if (choice1 == 2)
{
//输入完成后将学生信息写入文件
fp= fopen("output\\studentFile.txt","w");
fprintf(fp,"%d\n",countOfStudent);
student p = studentLink->next;
while(p){
fprintf(fp,"%s %s %d %d %d \n", p->number.c_str(), p->name.c_str(),p->math,p->english,p->chinese);
cout<<p->number<<p->name<<p->math<<p->english<<p->chinese;
p= p->next;
}
fclose(fp);
break;
}else{
cout<<"请依次输入学号,姓名,数学成绩,英语成绩,语文成绩:"<<endl;
}
}
break;
}
case 2:
//到指定文件夹读取数据
int exists = 0;
if(!access("output\\studentFile.txt",0))
exists=1;
char a[20];
char b[30];
if(exists)
{
fp= fopen("output\\studentFile.txt","rt");
fscanf(fp,"%d",&countOfStudent);
for (int i = 0;i<countOfStudent;i++)
{
student stu = new studentNode;
fscanf(fp,"%s %s %d %d %d\n",b,a,&stu->math,&stu->english,&stu->chinese);
stu->number = b;
stu->name = a;
//头插法
stu->next = studentLink->next;
studentLink->next = stu;
}
cout<<"已加载完成!"<<"已加载"<<countOfStudent<<"条数据!"<<endl;
//cout<<stu1.name<<stu1.number<<stu1.chinese<<stu1.math<<stu1.english<<endl;
}else{
cout<<"暂无本地数据,请手动创建!"<<endl;
}
fclose(fp);
break;
}
}
//显示所有学生信息
void ShowAllStudentInfo(student& studentLink){
cout<<"************欢迎进入学生信息浏览菜单*************"<<endl;
student p = studentLink->next;
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
while(p){
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
p= p->next;
}
}
//数据的排序,并显示
void SortAllStudentInfo(student& studentLink){
cout<<"************欢迎进入学生信息顺序显示菜单*************"<<endl;
int choice = 0;
cout<<"1 按学号升序显示 2 按学号降序显示 "<<endl;
cout<<"请输入您的选择:"<<endl;
cin>>choice;
switch(choice){
case 1:{
student p;//循环指示变量,用于指向无序表的当前待插入元素
student q;//q和r用于对已有有序序列进行循环遍历
student r;
student u;//临时变量,用于控制循环
p= studentLink->next;
studentLink->next = nullptr;
while(p){
//每次循环开始前将指针指向最开始的地方
r = studentLink;
q = studentLink->next;
while( (q!=nullptr)&&q->number < p->number ){
r = q;
q = q->next;
}
//保存下一个需插入的点
u = p->next;
//保存好了之后进行插入
p->next = r->next;
r->next = p;
//插入完成之后,将p指回未排序序列
p = u;
}
{
}
{
fp= fopen("output\\studentAscend.txt","w");
cout<<"************学生信息升序浏览*************"<<endl;
student p = studentLink->next;
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
while(p){
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
fprintf(fp,"%s %s %d %d %d \n", p->number.c_str(), p->name.c_str(),p->math,p->english,p->chinese);
p= p->next;
}
}
fclose(fp);
break;
}
case 2:{
student p,q,r,u;
p = studentLink->next;
studentLink->next = nullptr;
while(p){
r = studentLink;
q = studentLink->next;
while((q != nullptr)&&q->number>p->number){
r = q;
q= q->next;
}
u = p->next;
p->next = r->next;
r->next = p;
p = u;
}
{
fp= fopen("output\\studentDescend.txt","w");
cout<<"************学生信息降序浏览*************"<<endl;
student p = studentLink->next;
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
while(p){
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
fprintf(fp,"%s %s %d %d %d \n", p->number.c_str(), p->name.c_str(),p->math,p->english,p->chinese);
p= p->next;
}
}
fclose(fp);
break;
}
}
}
//学生信息查询
void SearchStudentInfo(student& studentLink){
cout<<"************欢迎进入学生信息查询菜单*************"<<endl;
while (1)
{
cout<<"1.按照学号查询。 2.按照姓名查询"<<endl;
int choice = 0;
int choice1 = 0;
cin>>choice;
switch(choice){
case 1:
{
student p = studentLink->next;
cout<<"1.按照学号精确查询。 2.按照学号模糊查询"<<endl;
cin>>choice1;
switch(choice1){
case 1:
{
cout<<"请输入精确学号:"<<endl;
string num ;
cin>>num;
bool flag = false;
while(p){
if (p->number == num)
{
flag = true;
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
break;
}
p=p->next;
}
if (!flag)
{
cout<<"当前学号不存在"<<endl;
}
break;
}
case 2:
{
cout<<"请输入前缀学号:"<<endl;
string num ;
bool flag = false;
cin>>num;
while(p){
if (p->number.find(num,0)==0)
{
if (!flag)
{
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
};
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
flag = true;
}
p=p->next;
}
if (!flag)
{
cout<<"当前学号不存在"<<endl;
}
break;
}
}
break;}
case 2:
{
student p = studentLink->next;
cout<<"1.按照姓名精确查询。 2.按照姓氏模糊查询"<<endl;
cin>>choice1;
switch(choice1){
case 1:
{
cout<<"请输入精确姓名:"<<endl;
string name ;
cin>>name;
bool flag = false;
while(p){
if (p->name == name)
{
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
flag = true;
break;
}
p=p->next;
}
if (!flag)
{
cout<<"当前姓名不存在"<<endl;
}
break;
}
case 2:
{
cout<<"请输入前缀姓氏:"<<endl;
string name ;
bool flag = false;
cin>>name;
while(p){
if (p->name.find(name,0)==0)
{
if (!flag)
{
cout<<"学号: "<<"姓名: "<<"数学: "<<"英语: "<<"语文: "<<endl;
};
cout<<p->number<<" "<<p->name<<" "<<p->math<<" "<<p->english<<" "<<p->chinese<<endl;
flag = true;
}
p=p->next;
}
if (!flag)
{
cout<<"当前姓氏不存在"<<endl;
}
break;
}
}
break;
}
}
int choice3 = 0;
cout<<"1.继续查询。 2.查询完成"<<endl;
cin>>choice3;
if (choice3 == 2)
{
break;
}
}
}
//对学生信息进行修改
void ModifyStudentInfo(student& studentLink){
cout<<"************欢迎进入学生信息修改菜单*************"<<endl;
fp= fopen("output\\studentFile.txt","rt");
fscanf(fp,"%d",&countOfStudent);
fclose(fp);
while(1){
cout<<"1.添加 2.删除 3.修改"<<endl;
int choice = 0;
cout<<"请输入您想要的操作:"<<endl;
cin>>choice;
switch(choice){
case 1 :
{
cout<<"请依次输入学号,姓名,数学成绩,英语成绩,语文成绩:"<<endl;
while(1){
student stu = new studentNode;
countOfStudent = countOfStudent + 1;
cin>>stu->number>>stu->name>>stu->math>>stu->english>>stu->chinese;
cout<<stu->number<<stu->name<<stu->math<<stu->english<<stu->chinese;
//头插法
stu->next = studentLink->next;
studentLink->next = stu;
cout<<"1.继续输入 2.已完成"<<endl;
int choice1 = 0;
cout<<"请输入选择:"<<endl;
cin>>choice1;
if (choice1 == 2)
{
break;
}
}
break;
}
case 2:
{
cout<<"请输入学生学号"<<endl;
string number1 ;
cin>>number1;
bool flag = false;
student p = studentLink;
student p1 = p->next;
while(p){
if (p1)
{
if (p1->number == number1)
{
cout<<"find"<<endl;
student p2 = p1;
p->next = p2->next;
free(p2);
flag = true;
countOfStudent--;
}
}
p= p->next;
if (p)
{
p1 = p->next;
}
}
if (!flag)
{
cout<<"无此学生!"<<endl;
}
break;
}
case 3:
{
cout<<"请输入需修改学生的学号:"<<endl;
string number;
cin>>number;
bool flag = false;
student p = studentLink->next;
while(p){
if (p->number == number)
{
flag = true;
cout<<"1 修改学号 2 修改姓名 3 修改数学成绩 4 修改英语成绩 5 修改英语成绩"<<endl;
int cho = 0;
cin>>cho;
switch(cho){
case 1:{
cout<<"请输入新的学号:"<<endl;
string num;
cin>>num;
p->number = num;
break;
}
case 2:{
cout<<"请输入新的姓名:"<<endl;
string name;
cin>>name;
p->name = name;
break;
}
case 3:{
cout<<"请输入新的数学成绩:"<<endl;
int num;
cin>>num;
p->math = num;
break;
}
case 4:{
cout<<"请输入新的英语成绩:"<<endl;
int num;
cin>>num;
p->english = num;
break;
}
case 5:{
cout<<"请输入新的语文成绩:"<<endl;
int num;
cin>>num;
p->chinese = num;
break;
}
}
}
p= p->next;
}
if (!flag)
{
cout<<"该学号不存在"<<endl;
}
break;
}
}
cout<<"1 继续修改 2 修改完成"<<endl;
int choice7 = 0;
cin>>choice7;
if (choice7 == 2)
{
student p = studentLink->next;
cout<<"sssssss"<<endl;
//输入完成后将学生信息写入文件
fp= fopen("output\\studentFile.txt","w");
fprintf(fp,"%d\n",countOfStudent);
while(p){
fprintf(fp,"%s %s %d %d %d \n", p->number.c_str(), p->name.c_str(),p->math,p->english,p->chinese);
p= p->next;
}
fclose(fp);
break;
}
}
}
//数据统计功能
void StatisticStudentInfo(student& studentLink){
cout<<"1 学生平均分及总分 2 每门课程平均分机最高分最低分"<<endl;
int choice = 0;
cout<<"请输入您的选择:"<<endl;
cin>>choice;
switch(choice){
case 1:
{
//计算每个学生的平均分和总分
fp= fopen("output\\studentAverageScoreAndTotal.txt","wb");
student p = studentLink->next;
int avg =0;
int total = 0;
cout<<"学号: "<<"姓名: "<<"平均分: "<<"总分: "<<endl;
while(p){
avg = (p->math + p->english+p->chinese)/3;
total = p->math + p->english+p->chinese;
fprintf(fp,"%s %s %ld %ld\n", p->number.c_str(), p->name.c_str(),avg,total);
cout<<p->number<<" "<<p->name<<" "<<avg<<" "<<total<<endl;
p= p->next;
}
fclose(fp);
break;
}
case 2:
{
int mathMax= 0;int mathMin = 65535;int mathAvg = 0;
int englishMax = 0;int englishMin = 65535;int englishAvg = 0;
int chineseMax = 0;int chinesMin = 65535;int chineseAvg = 0;
int countOfM= 0;
student p = studentLink->next;
while(p){
//遍历数学成绩
if (p->math>mathMax){
mathMax = p->math;
}
if(p->math<mathMin){
mathMin = p->math;
}
mathAvg += p->math;
if (p->english>englishMax)
{
englishMax = p->english;
}
if (p->english<englishMin)
{
englishMin = p->english;
}
englishAvg += p->english;
if (p->chinese >chineseMax)
{
chineseMax = p->chinese;
}
if (p->chinese<chinesMin)
{
chinesMin = p->chinese;
}
chineseAvg += p->chinese;
countOfM++;
p = p->next;
}
fp= fopen("output\\studentMath.txt","wb");
fprintf(fp,"数学: 最高分:%d 最低分: %d 平均分: %d\n", mathMax,mathMin,mathAvg/countOfM);
cout<<"数学: "<<"最高分: "<<mathMax<<" 最低分: "<<mathMin<<" 平均分: "<<mathAvg/countOfM<<endl;
fclose(fp);
fp= fopen("output\\studentEglish.txt","wb");
fprintf(fp,"英语: 最高分:%d 最低分: %d 平均分: %d\n", englishMax,englishMin,englishAvg/countOfM);
cout<<"英语: "<<"最高分: "<<englishMax<<" 最低分: "<<englishMax<<" 平均分: "<<englishAvg/countOfM<<endl;
fclose(fp);
fp= fopen("output\\studentChinese.txt","wb");
fprintf(fp,"语文: 最高分:%d 最低分: %d 平均分: %d\n", chineseMax,chinesMin,chineseAvg/countOfM);
cout<<"语文: "<<"最高分: "<<chineseMax<<" 最低分: "<<chinesMin<<" 平均分: "<<chineseAvg/countOfM<<endl;
fclose(fp);
break;
}
}
}
int main(){
cout<<"****************************欢迎来到学生信息管理系统***************************"<<endl;
cout<<"1.输入学生信息"<<endl;
cout<<"2.查询所有学生信息"<<endl;
cout<<"3.排序显示学生信息"<<endl;
cout<<"4.查询某一个学生具体信息"<<endl;
cout<<"5.插入新信息,修改信息,删除信息"<<endl;
cout<<"6.数据统计"<<endl;
cout<<"7.退出"<<endl;
int choice = 0;
student studentLink = new studentNode ;
//studentLink->next = nullptr;
while(1){
cout<<"主菜单---请输入您的选择:";
cin>>choice;
switch(choice){
case 1 :
InputStudentInfo(studentLink);
break;
case 2 :
ShowAllStudentInfo(studentLink);
break;
case 3 :
SortAllStudentInfo(studentLink);
break;
case 4 :
SearchStudentInfo(studentLink);
break;
case 5 :
ModifyStudentInfo(studentLink);
break;
case 6 :
StatisticStudentInfo(studentLink);
break;
case 7 :
exit(0);
break;
}
}
getchar();
return 0;
}
``
网友评论