数据结构课程设计

来源:互联网 发布:淘宝什么是属性词 编辑:程序博客网 时间:2024/06/07 11:44

头文件:

<pre name="code" class="cpp">#define N 20
struct Student //结构体

{int term;//学期int num;//学号char name[12];//姓名float mark1;//成绩float mark2;float mark3;float sum;//总分float average;//平均分};int num=0;void input(Student *r);       //输入void output(Student *r);      //输出void searchnum(Student *r);     //按学号及学期查找void searchname(Student *r);    //按姓名及学期查找void change(Student *r);      //按学号及学期修改信息Student *insert(Student *r);   //插入信息void shanchu(Student *r);      //按学号及学期删除信息void maopao(Student *r);       //按数据结构降序(冒泡)排序void xuanze(Student *r);       //按总分降序(选择)排序void tongji(Student *r);      //统计各科总分和平均分信息

代码:

#include<iostream.h>#include<stdlib.h>#include<iomanip.h>//主要是对cin,cout之类的一些操纵运算,是I/O流控制头文件。 #include <conio.h> //文件和标准控制台的输入输出#include<stdio.h> 
<pre name="code" class="cpp">void main(){cout<<"输入学生的个数:";cin>>num;Student *p=(Student *)new Student[num];//定义指针数组,存放学生个数int m;do{cout<<endl;cout<<endl;cout<<"\t*************************菜单栏**********************************\n"<<endl;cout<<"\t* 1 输入学生信息并保存到文件      2 读取文件并输出学生信息      *"<<endl;cout<<"\t* 3 按学号及学期查询              4 按姓名及学期查询            *"<<endl;cout<<"\t* 5 按学号及学期修改信息          6 插入信息                    *"<<endl;cout<<"\t* 7 按学号及学期删除信息          8 按数据结构降序(冒泡)排序    *"<<endl;cout<<"\t* 9 按总分降序(选择)排序          10 统计各科成绩的总分和平均分 *"<<endl;cout<<"\t*                        11 退出                                *"<<endl;cout<<"\t*****************************************************************\n"<<endl;cout<<"请选择:";cin>>m;switch(m){case 1: input(p);break;case 2:output(p);break;case 3: searchnum(p);break;case 4: searchname(p);break;case 5: change(p);break;case 6: p=insert(p);break;case 7: shanchu(p);break;case 8: maopao(p);break;case 9:xuanze(p);break;case 10: tongji(p);break;case 11:break;}}while(m!=11);   }void input(Student *r)   //输入信息{FILE *fp;int n=0;int i;int t=0;        //t为控制标量,1为找到,0为未找到 cout<<endl<<"========>> 请输入学生信息 <<========"<<endl;for(i=0;i<num;i++){cout<<"请输入学期:";cin>>r[i].term;cout<<"请输入第"<<i+1<<"个人的学号:";cin>>r[i].num;  if(i>=1){for(n=0;n<i;n++){if(r[n].num==r[i].num){   cout<<"该学号已存在!!"<<endl;t=1;}}}if(t==1){//表示有重复i--;t=0;continue;}cout<<"请输入姓名:";cin>>r[i].name;cout<<"请输入 高等数学 成绩:";cin>>r[i].mark1;cout<<"请输入 数据结构 成绩:";cin>>r[i].mark2;cout<<"请输入 组成原理 成绩:";cin>>r[i].mark3;r[i].sum=r[i].mark1+r[i].mark2+r[i].mark3;r[i].average=(r[i].mark1+r[i].mark2+r[i].mark3)/3;}if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(n=0;n<i;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f   %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark2,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已经写入"<<endl;}void output(Student *r)   //输出信息{int m;system("cls");if(num>0){FILE *fp;if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(int n=0;n<num;n++){fscanf(fp,"%d%s%f%f%f%d%f%f",&r[n].num,r[n].name,&r[n].mark1,&r[n].mark2,&r[n].mark3,&r[n].term,&r[n].sum,&r[n].average);}fclose(fp);cout<<"文件已经读入"<<endl;cout<<"******************************学生信息如下**********************************"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"高等数学"<<setw(10)<<"数据结构"<<setw(10)<<"组成原理"<<setw(6)<<"学期"<<setw(6)<<"总分"<<setw(8)<<"平均分"<<endl;cout<<"---------------------------------------------------------------"<<endl;for(m=0;m<num;m++){cout<<r[m].num<<setw(6)<<r[m].name<<setw(7)<<r[m].mark1<<setw(10)<<r[m].mark2<<setw(10)<<r[m].mark3<<setw(8)<<r[m].term<<setw(6)<<r[m].sum<<setw(6)<<r[m].average<<endl;}cout<<"\0\0"<<endl;}elsecout<<"未输入任何信息!!"<<endl;}void searchnum(Student *r)    //按学号及学期查找{int n,k;system("cls");if(num>0){cout<<"请输入要查找学生的学号:";cin>>n;cout<<"请输入学期号:";cin>>k;for(int m=0;m<num;m++){if(r[m].num==n&&r[m].term==k){//如果找到了输出并跳出循环cout<<endl;cout<<"---------------------------要查找的信息如下--------------------------------"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"高等数学"<<setw(10)<<"数据结构"<<setw(10)<<"组成原理"<<setw(6)<<"学期"<<setw(6)<<"总分"<<setw(8)<<"平均分"<<endl;cout<<r[m].num<<setw(6)<<r[m].name<<setw(7)<<r[m].mark1<<setw(10)<<r[m].mark2<<setw(10)<<r[m].mark3<<setw(8)<<r[m].term<<setw(6)<<r[m].sum<<setw(8)<<r[m].average<<endl;break;}}if(r[m].num!=n&&r[m].term!=k)  //若没找到提示不存在cout<<"该学号不存在,或没有这个学期的成绩!"<<endl;}elsecout<<"未输入任何信息!!"<<endl;}void searchname(Student *r)    //按姓名及学期查找{char n[12];int k;system("cls");if(num>0){  //如果没输入就查找提示cout<<"请输入要查找学生的姓名:";cin>>n;cout<<"请输入学期号:";cin>>k;for(int m=0;m<num;m++){if(r[m].name[0]==n[0]&&r[m].term==k){  //如果找到了输出并跳出循环cout<<endl;cout<<"---------------------------要查找的信息如下--------------------------------"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"高等数学"<<setw(10)<<"数据结构"<<setw(10)<<"组成原理"<<setw(6)<<"学期"<<setw(6)<<"总分"<<setw(8)<<"平均分"<<endl;cout<<r[m].num<<setw(6)<<r[m].name<<setw(7)<<r[m].mark1<<setw(10)<<r[m].mark2<<setw(10)<<r[m].mark3<<setw(8)<<r[m].term<<setw(6)<<r[m].sum<<setw(8)<<r[m].average<<endl;break;}}if(r[m].name[0]!=n[0]&&r[m].term!=k)  //若没找到提示不存在cout<<"该姓名不存在,或没有这个学期的成绩!"<<endl;}elsecout<<"未输入任何信息!!"<<endl;}void change(Student *r)//修改信息{FILE *fp;int n=0;char chiose='Y';if(num>0){int n,k;int t=0;system("cls");cout<<"输入要修改成绩的学生学号:";cin>>n;cout<<"所需修改的学期:";cin>>k;for(int m=0;m<num;m++){if(r[m].num==n&&r[m].term==k){int j;cout<<endl;cout<<"---------------------------修改前的信息如下--------------------------------"<<endl;cout<<"学号"<<setw(6)<<"姓名"<<setw(10)<<"高等数学"<<setw(10)<<"数据结构"<<setw(10)<<"组成原理"<<setw(6)<<"学期"<<setw(6)<<"总分"<<setw(8)<<"平均分"<<endl;cout<<r[m].num<<setw(6)<<r[m].name<<setw(7)<<r[m].mark1<<setw(10)<<r[m].mark2<<setw(10)<<r[m].mark3<<setw(8)<<r[m].term<<setw(6)<<r[m].sum<<setw(8)<<r[m].average<<endl;cout<<endl;while (chiose=='Y'||chiose=='y'){cout<<"\t\t\t*********可以修改的项目如下*******\n"<<endl;        cout<<"\t\t\t 1.修改学生的 高等数学 成绩记录\n"<<endl;        cout<<"\t\t\t 2.修改学生的 数据结构 成绩记录\n"<<endl;        cout<<"\t\t\t 3.修改学生的 组成员理 成绩记录\n"<<endl;                    cout<<"请选择:";    cin>>j;switch(j){case 1:cout<<"输入新的 高等数学 成绩:";    cin>>r[m].mark1;       break;     case 2:    cout<<"输入新的 数据结构 成绩:";    cin>>r[m].mark2;    break;    case 3:            cout<<"输入新的 组成原理 成绩:";    cin>>r[m].mark3;    break;}t=1;printf("是否要继续修改此学生的其他成绩记录呢?(Y/N)");fflush(stdin);//清空输入缓冲区,通常是为了确保不影响后面的数据读取scanf("%c",&chiose);}}}}elsecout<<"未输入任何信息!!"<<endl;if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(n=0;n<num;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f   %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark2,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已修改并写入"<<endl;}Student *insert(Student *r)     //插入{FILE *fp;int m;char n;do{if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(int o=0;o<num;o++){fscanf(fp,"%d%s%f%f%f%d%f%f",&r[o].num,r[o].name,&r[o].mark1,&r[o].mark2,&r[o].mark3,&r[o].term,&r[o].sum,&r[o].average);}Student *y=(Student *)new Student[num+1];   //定义另一个数组,用于存放新添加的记录for(m=0;m<num;m++){y[m]=r[m];}r=y;cout<<"请输入学期:";cin>>r[num].term;cout<<"请输入学号:";cin>>r[num].num;cout<<"请输入姓名:";cin>>r[num].name;cout<<"请输入 高等数学 成绩:";cin>>r[num].mark1;cout<<"请输入 数据结构 成绩:";cin>>r[num].mark2;cout<<"请输入 组成原理 成绩:";cin>>r[num].mark3;r[num].sum=r[num].mark1+r[num].mark2+r[num].mark3;//计算总分r[num].average=(r[num].mark1+r[num].mark2+r[num].mark3)/3;num++;cout<<"是否继续输入?(继续,输入y,否则输入其他)"<<endl;cin>>n;}while(n=='y');if((fp=fopen("student.txt","w"))==NULL){cout<<"文件不能打开"<<endl;exit(0); }for(n=0;n<num;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f   %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark2,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已经写入"<<endl;return r;}void shanchu(Student *r)    //删除{FILE *fp;if(num>0){if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(int o=0;o<num;o++){fscanf(fp,"%d%s%f%f%f%d%f%f",&r[o].num,r[o].name,&r[o].mark1,&r[o].mark2,&r[o].mark3,&r[o].term,&r[o].sum,&r[o].average);}int n,k,t=0;cout<<"请输入要删除学生的学号:";cin>>n;cout<<"请输入要删除成绩的学期:";cin>>k;for(int m=0;m<num;m++)if(r[m].num==n&&r[m].term==k){ for(int k=m;k<num;k++){  //循环把后一位的信息提前一位r[k]=r[k+1];}num--;                     //整体数量减一t=1;                     //标志变量 1为找到0为未找到} if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(n=0;n<num;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f   %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark3,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已经写入"<<endl;if(t==0)cout<<"该学号不存在!!"<<endl;}elsecout<<"未输入任何信息!!"<<endl;}void maopao(Student *r)    //按数据结构成绩冒泡降序排序{FILE *fp;if(num>0){if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(int n=0;n<num;n++){fscanf(fp,"%d%s%f%f%f%d%f%f",&r[n].num,r[n].name,&r[n].mark1,&r[n].mark2,&r[n].mark3,&r[n].term,&r[n].sum,&r[n].average);}for(int k=0;k<num-1;k++){for(int m=0;m<num-k;m++){ Student max;if(r[m].mark2<r[m+1].mark2) {max=r[m+1];r[m+1]=r[m];r[m]=max;}  }}cout<<"排序完毕"<<endl;if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(n=0;n<num;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f    %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark2,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已经写入"<<endl;}elsecout<<"未输入任何信息!!"<<endl;}void xuanze(Student *r)   //按总分选择降序排序{FILE *fp;if(num>0){if((fp=fopen("student.txt","r"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(int n=0;n<num;n++){fscanf(fp,"%d%s%f%f%f%d%f%f",&r[n].num,r[n].name,&r[n].mark1,&r[n].mark2,&r[n].mark3,&r[n].term,&r[n].sum,&r[n].average);}for(int i=0;i<num;i++){int max=i;for(int j=i;j<num;j++){if(r[max].sum<r[j].sum){max=j;}}Student temp;temp=r[max];r[max]=r[i];r[i]=temp;}cout<<"排序完毕"<<endl;if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(n=0;n<num;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f   %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark2,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fclose(fp);cout<<"文件已经写入"<<endl;}elsecout<<"未输入任何信息!!"<<endl;}void tongji(Student *r)       //统计各科总分及平均分{float summark1=0,summark2=0,summark3=0;float avemark1=0,avemark2=0,avemark3=0;FILE *fp;system("cls");if(num>0){for(int m=0;m<num;m++){ summark1=summark1+r[m].mark1;summark2=summark2+r[m].mark2;summark3=summark3+r[m].mark3;} avemark1=summark1/num;avemark2=summark2/num;avemark3=summark3/num;cout<<endl;cout<<"高等数学 总分为:"<<summark1<<"平均分为:"<<avemark1<<endl;cout<<endl;cout<<"数据结构 总分为:"<<summark2<<"平均分为:"<<avemark2<<endl;cout<<endl;                                  cout<<"组成原理 总分为:"<<summark3<<"平均分为:"<<avemark3<<endl;cout<<endl;if((fp=fopen("student.txt","w"))==NULL) {cout<<"文件不能打开"<<endl;exit(0); }for(int n=0;n<num;n++){fprintf(fp,"%d   %s   %.1f   %.1f   %.1f   %d   %.1f   %.1f",r[n].num,r[n].name,r[n].mark1,r[n].mark2,r[n].mark3,r[n].term,r[n].sum,r[n].average);fprintf(fp,"\n");}fprintf(fp,"高等数学 总分为%.2f",summark1);fprintf(fp,"\n");fprintf(fp,"数据结构 总分为%.2f",summark2);fprintf(fp,"\n");fprintf(fp,"组成原理 总分为%.2f",summark3);fclose(fp);}elsecout<<"未输入任何信息!!"<<endl;}




0 0
原创粉丝点击