课程设计--学生成绩管理系统
来源:互联网 发布:linux tar zcvf命令 编辑:程序博客网 时间:2024/05/03 22:05
问题描述:本系统实现了学生成绩管理的功能,具有学生成绩的输入、读取、查询、修改、插入、删除、排序,统计等功能。
代码:
头文件student.h:
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED
struct Student //结构体
{
int term; //学期
int num; //学号
char name[12]; //姓名
float mark1; //成绩1
float mark2; //成绩2
float mark3; //成绩3
float sum; //总分
float average; //平均分
};
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); //统计各科总分和平均分信息
void put(int a);
#endif
//stu.cpp:
#include <iostream.h>
#include"student.h"
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
#include <stdio.h>
int num;
void put(int a)
{
num=a;
}
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;
}
fp=fopen("student.txt","w+");
if(!fp)
{
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) //r只读
{
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(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;
cout<<"是否要继续修改此学生的其他成绩记录?(Y/N)";
fflush(stdin);//清空输入缓冲区,通常是为了确保不影响后面的数据读取
cin>>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[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;
}
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[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;
}
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[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+1;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;
}
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[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");
}
cout<<"高等数学 总分为:"<<summark1<<endl;
cout<<"数据结构 总分为:"<<summark2<<endl;
cout<<"大学英语 总分为:"<<summark3<<endl;
}
else
cout<<"对不起,未输入任何信息!"<<endl;
}
//主函数main.cpp:
#include <iostream.h>
#include"student.h"
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
#include <stdio.h>
//数组、结构体
//int num=0;
//声明
void main()
{
int num;
cout<<"输入学生的个数:";
cin>>num; //全局变量
put(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);
}
运行结果截图:
- 数据结构 课程设计 学生成绩管理系统
- C++课程设计:学生成绩管理系统
- C++课程设计:学生成绩管理系统
- C++课程设计:学生成绩管理系统
- 数据结构课程设计-学生成绩管理系统
- 课程设计-学生成绩管理系统
- 数据结构课程设计---学生成绩管理系统
- 课程设计--学生成绩管理系统
- 课程设计之学生成绩管理系统
- 课程设计之学生成绩管理系统
- 课程设计---学生成绩管理系统
- 课程设计之学生成绩管理系统
- 数据结构课程设计--学生成绩管理系统
- 学生成绩管理系统(课程设计)
- 《c语言课程设计》---学生成绩管理系统
- <数据结构课程设计> 学生成绩管理系统开发
- 数据结构课程设计学生成绩管理系统源代码
- C++ 课程设计学生成绩管理系统源代码
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
- Android aar打包碰到的问题
- VmWare VM 虚拟网卡类型及选择
- AsyncTask多线程
- 好的博客
- 课程设计--学生成绩管理系统
- 纪念自己第一次进入CSDN
- 【Visual C++】游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步
- 点击图片 , 获取图片上对应的坐标
- Debug Java applications remotely with Eclipse
- Ubuntu 搜狗输入法 一直全角问题
- [文章摘要]Towards Privacy-Preserving Semantic Mobility Analysis
- 随机选取算法 (有权重的记录中选取)
- 关于Android的三种常用布局(TableLayout和AbsoluteLayout不常用,再次不做介绍)