cpp文件需要与名为‘class.txt’,'student.txt','score.txt'三个文件放在一个文件夹才能正常运行,如图:
代码如下:
//使用此程序时需将源程序整个文件夹拖到桌面才可使用
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<process.h>
#include<conio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
#include <iomanip>
#include <iostream>
using namespace std;
typedef struct
{
int num;
char name[10];
float score;
char teacher[10];
}Cls;
typedef struct
{
Cls *elem;
int length;
}Class;
typedef struct
{
int num;
char name[10];
char clas[10];
char birth[10];
long long QQ;
}Std1;
typedef int Status;
typedef Std1 ElemType;
typedef struct
{
ElemType *elem;
int length;
}Std;
typedef struct
{
int snum;
int cnum;
float score;
int trem;
}Sco;
typedef struct
{
Sco *elem;
int length;
}Score;
Status menu();
Status ReadStu( Std &stu );
Status ReadCls( Class &cls );
Status ReadSco( Score &sco );
Status InitList( Std &stu );
Status InitList( Class &cls );
Status InitList( Score &sco );
Status InputStd( Std &stu );
Status InputClass( Class &cls );
Status InputScore( Score &sco );
Status InputMenu( Std &stu, Class &cls, Score &sco );
Status OutputStd( Std &stu );
Status OutputCls( Class &cls );
Status OutputSco( Score &sco );
Status OutputMenu( Std &stu, Class &cls, Score &sco );
Status SearchStd( Std &stu );
Status SearchCls( Class &cls );
Status SearchSco( Score &sco );
Status SearchMenu( Std &stu, Class &cls, Score &sco );
Status ModifyStd( Std &stu );
Status ModifyCls( Class &cls );
Status ModifySco( Score &sco );
Status ModifyMenu( Std &stu, Class &cls, Score &sco );
Status DeleteStd( Std &stu );
Status DeleteCls( Class &cls );
Status DeleteSco( Score &sco );
Status DeleteMenu( Std &stu, Class &cls, Score &sco );
Status SaveStd( Std &stu );
Status SaveCls( Class &cls );
Status SaveSco( Score &sco );
Status SaveMenu( Std &stu, Class &cls, Score &sco );
Status SearchOsco( Score &sco , Class &cls , Std &stu );
Status SearchCSco( Std &stu, Class &cls, Score &sco );
Status Searchlsco( Std &stu, Class &cls, Score &sco, char *clas );
int main()
{
int i;
Std stu;
Class cls;
Score sco;
char *clas;
InitList( stu );
InitList( cls );
InitList( sco );
ReadStu( stu );
ReadCls( cls );
ReadSco( sco );
short int flag = 0;
menu();
do
{
flag=1;
switch( getch() )
{
case '1' :
InputMenu( stu, cls, sco );//添加信息
break;
case '2' :
OutputMenu( stu, cls, sco );//输出信息
break;
case '3' :
SearchMenu( stu, cls, sco );//查询信息
break;
case '4' :
ModifyMenu( stu, cls, sco );//修改成绩
break;
case '5' :
DeleteMenu( stu, cls, sco );//删除信息
break;
case '6' :
SearchOsco( sco , cls , stu );//查询个人成绩
break;
case '7' :
SearchCSco( stu, cls, sco ); //查询某门课程所有成绩
break;
case '8' :
Searchlsco( stu, cls, sco ,clas );//查询某班级某门课所有成绩
break;
case '9' :
SaveMenu( stu, cls, sco ); //保存信息
break;
case '0' :
cout<<"已成功退出,欢迎您下次使用^-^"<<endl;
exit( 0 );
default :
cout<<"输入有误"<<endl;
}
cout<<"按任意键继续"<<endl;
getch();
menu();
}
while( flag == 1 );
}
Status menu()
{
system("cls");
cout<<endl;
cout<<"*********欢迎进入学生成绩管理系统**************"<<endl;
cout<<" 菜单 "<<endl;
cout<<"录入信息-------------------------------------1"<<endl;
cout<<"输出信息-------------------------------------2"<<endl;
cout<<"查询信息-------------------------------------3"<<endl;
cout<<"修改信息-------------------------------------4"<<endl;
cout<<"删除信息-------------------------------------5"<<endl;
cout<<"查询个人成绩---------------------------------6"<<endl;
cout<<"查询某门课程所有人成绩-----------------------7"<<endl;
cout<<"查询某班级某门课所有成绩---------------------8"<<endl;
cout<<"保存信息-------------------------------------9"<<endl;
cout<<"退出系统-------------------------------------0"<<endl;
cout<<"**********************************************"<<endl;
cout<<"请输入您的选择"<<endl;
}
Status ReadStu( Std &stu )
{
FILE *fp;
int i;
if( ( fp = fopen( "student.txt" , "r" ) ) == NULL )
{
cout<<"打开失败!"<<endl;
return ERROR;
exit( 0 );
}
for( i = 0; !feof(fp); i++ )
{
fscanf( fp ,"%d %s %s %s %lld", &stu.elem[i].num, &stu.elem[i].name, &stu.elem[i].clas
, &stu.elem[i].birth, &stu.elem[i].QQ );
++stu.length;
}
fclose( fp );
stu.length--;
return OK;
}
Status ReadCls( Class &cls )
{
FILE *fp;
int i;
if( ( fp = fopen( "class.txt" , "r" ) ) == NULL )
{
cout<<"打开失败!"<<endl;
return ERROR;
exit( 0 );
}
for( i = 0; !feof(fp); i++ )
{
fscanf( fp ,"%d %s %f %s", &cls.elem[i].num, &cls.elem[i].name
, &cls.elem[i].score, &cls.elem[i].teacher );
++cls.length;
}
fclose( fp );
cls.length--;
return OK;
}
Status ReadSco( Score &sco )
{
FILE *fp;
int i;
if( ( fp = fopen( "score.txt" , "r" ) ) == NULL )
{
cout<<"打开失败!"<<endl;
return ERROR;
exit( 0 );
}
for( i = 0; !feof(fp); i+