问题描述:本系统实现了学生成绩管理的功能,具有学生成绩的输入、读取、查询、修改、插入、删除、排序,统计等功能。
代码:
头文件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)