数据结构课程设计
2015-12-31 16:20
344 查看
头文件:
<pre name="code" class="cpp">#define N 20struct Student //结构体
代码:
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>//主要是对cin,cout之类的一些操纵运算,是I/O流控制头文件。
#include <conio.h> //文件和标准控制台的输入输出
#include<stdio.h>
<pre name="code" class="cpp">#define N 20struct 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 .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 .num,r .name,r .mark1,r .mark2,r .mark3,r .term,r .sum,r .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 .num,r .name,&r .mark1,&r .mark2,&r .mark3,&r .term,&r .sum,&r .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; } else cout<<"未输入任何信息!!"<<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; } else cout<<"未输入任何信息!!"<<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; } else cout<<"未输入任何信息!!"<<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); } } } } else 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 .num,r .name,r .mark1,r .mark2,r .mark3,r .term,r .sum,r .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 .num,r .name,r .mark1,r .mark2,r .mark3,r .term,r .sum,r .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 .num,r .name,r .mark1,r .mark3,r .mark3,r .term,r .sum,r .average); fprintf(fp,"\n"); } fclose(fp); cout<<"文件已经写入"<<endl; if(t==0) cout<<"该学号不存在!!"<<endl; } else cout<<"未输入任何信息!!"<<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 .num,r .name,&r .mark1,&r .mark2,&r .mark3,&r .term,&r .sum,&r .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 .num,r .name,r .mark1,r .mark2,r .mark3,r .term,r .sum,r .average); fprintf(fp,"\n"); } fclose(fp); cout<<"文件已经写入"<<endl; } else cout<<"未输入任何信息!!"<<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 .num,r .name,&r .mark1,&r .mark2,&r .mark3,&r .term,&r .sum,&r .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 .num,r .name,r .mark1,r .mark2,r .mark3,r .term,r .sum,r .average); fprintf(fp,"\n"); } fclose(fp); cout<<"文件已经写入"<<endl; } else cout<<"未输入任何信息!!"<<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 .num,r .name,r .mark1,r .mark2,r .mark3,r .term,r .sum,r .average); fprintf(fp,"\n"); } fprintf(fp,"高等数学 总分为%.2f",summark1); fprintf(fp,"\n"); fprintf(fp,"数据结构 总分为%.2f",summark2); fprintf(fp,"\n"); fprintf(fp,"组成原理 总分为%.2f",summark3); fclose(fp); } else cout<<"未输入任何信息!!"<<endl; }
相关文章推荐
- php的数组与数据结构
- 第<2>章 实现复杂的数据结构
- 数据结构和算法经典100题-第31题
- 数据结构--Chapter9(查找)
- 数据结构 JAVA描述(八) 最短路径+拓扑排序+关键路径
- 数据结构之冒泡排序
- 【数据结构与算法分析】证logX<X 对所有的X>0成立
- 数据结构课程设计--连连看
- 数据结构的理解和应用——红黑树
- Nginx的数据结构--字符串
- 《挑战程序设计竞赛》2.4.2 数据结构-并查集 POJ1182 2236 1703 AOJ2170
- 《挑战程序设计竞赛》2.4.1 数据结构-优先队列 POJ2431 3253 3614 2010(3)
- Day-9 用js实现数据结构中的排序
- 数据结构课程设计-12月30号
- 【数据结构】链栈的基本操作
- 【数据结构+算法】【(线性)动态规划】--- 求最长回文串的长度
- 数据结构问题集锦 - Find Median from Data Stream
- 数据结构学习笔记——线性表的逻辑结构
- 数据结构和算法经典100题-第30题
- 【数据结构】顺序栈的基本操作