课程综合设计

来源:互联网 发布:c语言判断是不是数字 编辑:程序博客网 时间:2024/05/18 23:26
#include <iostream>#include <string>#include <iomanip>#include <cstdlib>#include <fstream>#include <cstring>#include <cctype>using namespace std;const int SIZE=20;struct student{ char classnum[SIZE]; char id[SIZE]; char name[SIZE]; int *score;};int main(){cout<<setw(25)<<" "<<"欢迎使用本学生管理系统!"<<endl;cout<<""<<endl<<endl;cout<<"《学生成绩管理系统》"<<endl<<endl;cout<<""<<endl;int n=0;int student_num;//学生数int semester;//学期int cour_num;//课程数cout<<"是否从文档中读取基础信息?(Y/N):";char first_sel;cin>>first_sel;cin.get();while(tolower(first_sel)!='y'&&tolower(first_sel)!='n'){cout<<"输入错误,请重新输入(Y/N):";cin>>first_sel;cin.get();}if(tolower(first_sel)=='y'){ifstream fin;n=1;cout<<"说明:"<<endl;cout<<"  如上次保存的文档名为student.txt"<<endl;cout<<"    则读取的文档名为basic_student.txt。"<<endl;cout<<"请输入基本信息文档名:";char _fname[SIZE];cin.getline(_fname,SIZE);fin.open(_fname);while(!fin.is_open()){cout<<"不能打开此文档名的文档,请重新输入:";cin.getline(_fname,SIZE);fin.open(_fname);}fin>>student_num;fin.get();fin>>semester;fin.get();fin>>cour_num;fin.get();fin.close();system("pause");    system("cls");}else{cout<<setfill('=')<<setw(32);cout<<"请输入学生个数:";cin>>student_num;while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入学生个数: ";cin>>student_num;cin.get();}cout<<"================";cout<<"请输入学期(以数字形式):";cin>>semester;while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入学期: ";cin>>student_num;cin.get();}cout<<setfill('=')<<setw(25);cout<<"请输入第 "<<semester<<" 学期的课程门数: ";cin>>cour_num;cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入第 "<<semester<<" 学期的课程门数: ";cin>>cour_num;cin.get();}}student *p=new student[student_num];    string *cour_name=new string[cour_num];    if(tolower(first_sel)=='y'){ifstream fin;cout<<">>>>>>>>>>>>>>>>《说明:                                      》<<<<<<<<<<<<<<<<"<<endl;cout<<">>>>>>>>>>>>>>>>《     如上次保存的文档名为student.txt        》<<<<<<<<<<<<<<<<"<<endl;cout<<">>>>>>>>>>>>>>>>《     则读取的文档名为course_student.txt。   》<<<<<<<<<<<<<<<<"<<endl;cout<<"请输入课程信息文档名:";char _fname[SIZE];cin.getline(_fname,SIZE);fin.open(_fname);while(!fin.is_open()){cout<<"不能打开此文档名的文档,请重新输入:";cin.getline(_fname,SIZE);fin.open(_fname);}for(int i=0;i<cour_num;i++){getline(fin,cour_name[i]);}fin.close();system("pause");    system("cls");}else{for(int i=0;i<cour_num;i++){cout<<setfill('=')<<setw(25);cout<<"请输入第 "<<i+1<<" 个课程名:";getline(cin,cour_name[i]);}}int **all_score=new int*[student_num];for(int i=0;i<student_num;i++)all_score[i]=new int[cour_num];for(int i=0;i<student_num;i++)p[i].score=&all_score[i][0];if(tolower(first_sel)=='y'){ifstream fin;cout<<"说明:"<<endl;cout<<" 如上次保存的文档名为student.txt  "<<endl;cout<<"  则读取的文档名为student_student.txt。"<<endl;cout<<"请输入学生信息文档名:";char _fname[SIZE];cin.getline(_fname,SIZE);fin.open(_fname);while(!fin.is_open()){cout<<"不能打开此文档名的文档,请重新输入:";cin.getline(_fname,SIZE);fin.open(_fname);}for(int i=0;i<student_num;i++){fin.get(p[i].classnum,SIZE);fin.get();fin.get(p[i].id,SIZE);fin.get();fin.getline(p[i].name,SIZE);for(int j=0;j<cour_num;j++){fin>>*(p[i].score+j);fin.get();}}fin.close();}system("pause");system("cls");char select='a';while(select!='q'){cout<<""<<endl;cout<<"请输入选择:"<<endl;cout<<"【a】输入基本信息         "<<"【b】显示成绩信息           "<<"【c】成绩统计分析"<<endl;cout<<"【d】统计各科各分数段人数 "<<"【e】查找某个学生的各科成绩 " <<"【f】由高到低显示成绩"<<endl;cout<<"【g】更新学生成绩         "<<"【h】保存学生与成绩信息     "<<"【q】结束"<<endl<<endl;cout<<""<<endl;cout<<"输入:";cin.get(select);cin.get();while(n==0&&select!='a'){cout<<"错误,请先输入基本信息!"<<endl;select='a';}if(select=='a')input(p,cour_name,student_num,cour_num);else if(select=='b')show(p,cour_name,student_num,cour_num);else if(select=='c')statistic(p,cour_name,student_num,cour_num);else if(select=='d')section(p,cour_name,student_num,cour_num);else if(select=='e')search(p,cour_name,student_num,cour_num);else if(select=='f')sort(p,cour_name,student_num,cour_num);else if(select=='g')update(p,cour_name,student_num,cour_num);else if(select=='h')fileout(p,cour_name,student_num,cour_num,semester);else if(select=='q');elsecout<<"输入错误,请重新输入: "<<endl;n++;}cout<<""<<endl;cout<<"欢迎使用!"<<endl;delete p;delete cour_name;for(int j=0;j<student_num;j++)delete[] all_score[j];delete all_score;return 1;}void input(student p[], string c_name[],int s_num,int c_num);void show(student p[], string c_name[],int s_num,int c_num);void statistic(student p[], string c_name[],int s_num,int c_num);void section(student p[], string c_name[],int s_num,int c_num);void search(student p[], string c_name[],int s_num,int c_num);void sort(student p[], string c_name[],int s_num,int c_num);void update(student p[], string c_name[],int s_num,int c_num);void quicksort(int s[],int l,int r);void fileout(student p[], string c_name[],int s_num,int c_num,int semester);void input(student p[], string c_name[],int s_num,int c_num){for(int i=0;i<s_num;i++){if(i>0){cout<<"《》";cout<<"《》";cout<<"《请继续输入》";cout<<"《》";cout<<"《》";cout<<endl;}cout<<setfill('=')<<setw(25);cout<<"请输入第 "<<i+1<<"个学生的班级(例如:自动化1121):";cin.get(p[i].classnum,SIZE);cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin.get(p[i].classnum,SIZE);cin.get();}cout<<setfill('=')<<setw(14);cout<<"请输入"<<i+1<<"个学生的学号:";cin.get(p[i].id,SIZE);cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin.get(p[i].id,SIZE);cin.get();}for(int k=0;k<s_num;k++){if(k==i)k++;if(strcmp(p[k].id,p[i].id)==0){cout<<setfill('=')<<setw(25);cout<<"与已有学生的学号重复,请重新输入:";cin.get(p[i].id,SIZE);cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin.get(p[i].id,SIZE);cin.get();}}}cout<<setfill('=')<<setw(32);cout<<"请输入其姓名:";cin.getline(p[i].name,SIZE);while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin.getline(p[i].name,SIZE);}for(int j=0;j<c_num;j++){cout<<setfill('=')<<setw(24);cout<<"请输入"<<c_name[j]<<"的成绩:";cin>>*(p[i].score+j);cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin>>*(p[i].score+j);cin.get();}while(*(p[i].score+j)>100||*(p[i].score+j)<0){cout<<setfill('=')<<setw(25);cout<<"输入错误,请输入0到100之内的数:";cin>>*(p[i].score+j);cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin>>*(p[i].score+j);cin.get();}}}system("pause");system("cls");}}void statistic(student p[], string c_name[],int s_num,int c_num){int sum,ave,max,min,pass,trigger,cl_num;double pass_rate;for(int i=0;i<c_num;i++){        cout<<"【"<<c_name[i]<<"科目】"<<endl;for(int k=0;k<s_num;k++){sum=0;trigger=0;ave=0;cl_num=0;pass_rate=0;pass=0;max=*(p[k].score+i);min=*(p[k].score+i);for(int j=0;j<k;j++)if(strcmp(p[k].classnum,p[j].classnum)==0)trigger=1;if(trigger==1)continue;for(int j=k;j<s_num;j++){if(strcmp(p[k].classnum,p[j].classnum)==0){sum+=*(p[j].score+i);cl_num++;if((*p[j].score+i)>max)max=*(p[j].score+i);if((*p[j].score+i)<min)min=*(p[j].score+i);if(*(p[j].score+i)>=60)pass++;}}cout<<"《"<<p[k].classnum<<"班》"<<endl;cout<<"";cout<<"总分为:"<<sum<<" ";ave=sum/cl_num;cout<<"平均分为:"<<ave<<" ";cout<<"最高分为:"<<max<<" ";cout<<"最低分为:"<<min<<" ";pass_rate=(1.0*pass)/cl_num;cout<<"及格率为:"<<pass_rate*100<<"%"<<endl;cout<<"";}}system("pause");system("cls"); }void section(student p[], string c_name[],int s_num,int c_num){int s_nopass,s_60,s_70,s_80,s_90,trigger;for(int i=0;i<c_num;i++){cout<<"【"<<c_name[i]<<"】";for(int k=0;k<s_num;k++){trigger=0;s_nopass=0;s_60=0;s_70=0;s_80=0;s_90=0;for(int j=0;j<k;j++)if(strcmp(p[k].classnum,p[j].classnum)==0)trigger=1;if(trigger==1)continue;for(int j=k;j<s_num;j++){if(strcmp(p[k].classnum,p[j].classnum)==0){if(*(p[j].score+i)>=90)s_90++;else if(*(p[j].score+i)>=80)s_80++;else if(*(p[j].score+i)>=70)s_70++;else if(*(p[j].score+i)>=60)s_60++;else if(*(p[j].score+i)<60)s_nopass++;}}cout<<endl;cout<<"《"<<p[k].classnum<<"班》"<<endl;cout<<"";cout<<"不及格:"<<s_nopass<<" 人 ";cout<<"60至70:"<<s_60<<" 人 ";cout<<"70至80:"<<s_70<<" 人 ";cout<<"80至90:"<<s_80<<" 人 ";cout<<"90至100:"<<s_90<<" 人 "<<endl;cout<<"";}}system("pause");system("cls");}void search(student p[], string c_name[],int s_num,int c_num){char name_or_id[SIZE];cout<<"请输入学号或名字:";cin.get(name_or_id,SIZE);cin.get();while(!cin.good()){cin.clear();cin.sync();cout<<"错误!请重新输入: ";cin.get(name_or_id,SIZE);cin.get();}cout<<"";int n=0;for(int i=0;i<s_num;i++){if(strcmp(p[i].name,name_or_id)==0||strcmp(p[i].id,name_or_id)==0){n++;cout<<"学号"<<p[i].id<<"的"<<p[i].name<<"同学的成绩如下:"<<endl;cout<<"";for(int j=0;j<c_num;j++)cout<<c_name[j]<<"科目:"<<*(p[i].score+j)<<"分"<<" ";cout<<endl;cout<<"";}}if(n==0)cout<<"没有这名同学的信息。"<<endl;system("pause");system("cls");}void sort(student p[], string c_name[],int s_num,int c_num){int *score_s=new int[s_num];for(int i=0;i<c_num;i++){for(int j=0;j<s_num;j++)score_s[j]=*(p[j].score+i);quicksort(score_s,0,s_num-1);cout<<"【"<<c_name[i]<<"】由高到低的分数排序如下:"<<endl;cout<<"";for(int j=0;j<s_num;j++)cout<<score_s[j]<<"分 ";cout<<endl;cout<<"";}system("pause");system("cls");delete[] score_s;}void fileout(student p[], string c_name[],int s_num,int c_num,int semester){ofstream fout;char fname[SIZE];char _fname1[SIZE]="basic_";char _fname2[SIZE]="course_";char _fname3[SIZE]="student_";cout<<"请输入要保存的文件名(需要加上后缀.txt):";cin.getline(fname,SIZE);strcat(_fname1,fname);strcat(_fname2,fname);strcat(_fname3,fname);fout.open(fname);for(int i=0;i<s_num;i++){fout<<""<<endl;fout<<"【个人信息】";fout<<"姓名:"<<p[i].name<<" "<<"班级:"<<p[i].classnum<<"班 "<<"学号:"<<p[i].id<<endl;fout<<"*"<<endl;fout<<"【成绩】";for(int j=0;j<c_num;j++)fout<<c_name[j]<<":"<<*(p[i].score+j)<<" ";fout<<endl;fout<<""<<endl;fout<<endl;}fout.close();fout.open(_fname1);fout<<s_num<<endl;fout<<semester<<endl;fout<<c_num<<endl;fout.close();fout.open(_fname2);for(int i=0;i<c_num;i++){fout<<c_name[i]<<endl;}fout.close();fout.open(_fname3);for(int i=0;i<s_num;i++){fout<<p[i].classnum<<endl;fout<<p[i].id<<endl;fout<<p[i].name<<endl;for(int j=0;j<c_num;j++){fout<<*(p[i].score+j)<<endl;}}cout<<"已输出到"<<fname<<"中。"<<endl;system("pause");system("cls");}void quicksort(int s[],int l,int r){if(l<r){int i=l,j=r,x=s[l];while(i<j){while(i<j&&s[j]<=x)j--;if(i<j)s[i++]=s[j];while(i<j&&s[i]>=x)i++;if(i<j)s[j--]=s[i];}s[i]=x;quicksort(s,l,i-1);quicksort(s,i+1,r);}}

0 0
原创粉丝点击