这是进入大学以来,第一次做的C语言课程设计,觉得挺有意义,把代码贴上来,晒一下!
代码:
//学生成绩管理系统
//教师,管理员密码
//输入学生的基本信息
//输出学生的基本信息
//查找学生的基本信息
//学生成绩分析
//排序
//统计
//退出
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int MIMA=123456,yyy;
struct student//结构体函数
{
char banji[20];
char name[20];
char xh[20];
double math;
double english;
double Cyuyan;
double score;//总成绩!
int num;
}stu[3000];
void AdministratorMenu();
void Teacher();
void Sort();
void display();
void dis1();
void InsertScore();
void Xiugai();
void Fenxi();
void FenxiMenu();
void XiTongshuoming();
void Guanyu();
void Mainface()//进入界面
{
system("color 0c");
cout<<" ------------------------------------- "<<endl;
cout<<" | 欢迎使用学生成绩管理系统 |"<<endl;
cout<<" ------------------------------------- "<<endl;
cout<<" | 1、管理员登陆 | 2、教师登陆 |"<<endl;
cout<<" ------------------------------------- "<<endl;
cout<<" "<<endl;
cout<<" 请选择登陆方式:";
}
void mima()//登录密码!
{
int x;
cin>>x;
if(x==MIMA)
{
system("cls");
}
else
{
cout<<"您输入的密码错误!"<<endl;
system("pause");//暂停!
system("cls");//清屏!
if(yyy==1)
{
AdministratorMenu();
mima();
}
else if(yyy==2)
{
Teacher();
mima();
}
}
}
void AdministratorMenu()
{
system("cls");
cout<<"管理员登陆》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"<<endl;
cout<<" 账号:Administrator"<<endl;
cout<<" 密码:";
mima();
}
void Teacher()
{
system("cls");
cout<<"教师登陆》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"<<endl;
cout<<" 账号:Teacher"<<endl;
cout<<" 密码:";
mima();
}
void First()
{
Mainface();
cin>>yyy;
if(yyy<1||yyy>2)
{
cout<<"输入错误!请重新输入!"<<endl;
system("pause");
system("cls");
First();
}
else if(yyy==1)
{
AdministratorMenu();
}
else if(yyy==2)
{
Teacher();
}
}
char menu()//菜单选项
{
char x;
system("cls");
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<<" 0、退出系统"<<endl;
cout<<"请选择您要进行的选项:"<<endl;;
while(1)
{
cin>>x;
if(x>='0'&&x<='8') break;
else
{
cout<<"输入错误!!!请重新输入!!!"<<endl;
}
}
return x;
}
double cmp1(student a1,student a2)//比较数学成绩
{
if(a1.math!=a2.math)
return a1.math>a2.math;
}
double cmp2(student a1,student a2)//比较英语成绩
{
if(a1.english!=a2.english)
return a1.english>a2.english;
}
double cmp3(student a1,student a2)//比较C语言成绩
{
if(a1.Cyuyan!=a2.Cyuyan)
return a1.Cyuyan>a2.Cyuyan;
}
double cmp4(student a1,student a2)//比较总成绩,得出名次
{
if(a1.score!=a2.score)
return a1.score>a2.score;
}
void FenxiChengji()
{
system("cls");
cout<<" 1、查看学生数学成绩分析"<<endl;
cout<<" 2、查看学生英语成绩分析"<<endl;
cout<<" 3、查看学生C语言成绩分析"<<endl;
cout<<"请您选择您要进行的选项:"<<endl;
}
void FenxiMenu()
{
system("cls");
cout<<" 1、查看学生数学成绩"<<endl;
cout<<" 2、查看学生英语成绩"<<endl;
cout<<" 3、查看学生C语言成绩"<<endl;
cout<<"请您选择您要进行的选项:"<<endl;
}
void SortMenu()
{
system("cls");
cout<<" 1、查看学生数学成绩"<<endl;
cout<<" 2、查看学生英语成绩"<<endl;
cout<<" 3、查看学生C语言成绩"<<endl;
cout<<" 4、查看学生总成绩"<<endl;
cout<<"请您选择您要进行的选项:"<<endl;
}
void Sort()//成绩比较函数
{
student a;
FILE *fp=fopen("d:\\Student\\成绩.txt","ab+");
int flag,Num=0,n;
char ch;
do
{
while(1)
{
SortMenu();
cin>>flag;
if(flag>=1&&flag<=4)
{
break;
}
else
{
cout<<"\n输入错误!!!请重新输入!!!"<<endl;
system("pause");
system("cls");
}
}
while((n=fread(&a,sizeof(a),1,fp)>0))
{
stu[Num++]=a;
}
fclose(fp);
if(flag==1)//数学成绩查询
{
system("cls");
sort(stu,stu+Num,cmp1);
cout<<" 班级 姓名 学号 数学 名次"<<endl;
for(int i=0;i<Num;i++)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf",stu[i].math);
cout<<" "<<i+1<<endl;
}
}
else if(flag==2)//英语成绩查询
{
system("cls");
sort(stu,stu+Num,cmp2);
cout<<" 班级 姓名 学号 英语 名次"<<endl;
for(int i=0;i<Num;i++)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf",stu[i].english);
cout<<" "<<i+1<<endl;
}
}
else if(flag==3)//C语言成绩查询
{
system("cls");
sort(stu,stu+Num,cmp3);
cout<<" 班级 姓名 学号 C语言 名次"<<endl;
for(int i=0;i<Num;i++)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf",stu[i].Cyuyan);
cout<<" "<<i+1<<endl;
}
}
else if(flag==4)//总成绩查询
{
system("cls");
sort(stu,stu+Num,cmp4);
dis1();
for(int i=0;i<Num;i++)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<" "<<i+1<<endl;
}
}
getchar();
cout<<"这里一共有"<<Num<<"份记录!"<<endl;
cout<<"是否返回上一级?(Y/N):";ch=getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
void input()//输入学生信息!
{
system("cls");
getchar();
struct student a;
FILE *fp;
char ch;
int Num,n;
if((fp=fopen("d:\\Student\\成绩.txt","wb"))==NULL)
{
cout<<"\nCannot open the inform file"<<endl;
getchar();
exit(1);
}
do
{
system("cls");
cout<<"请输入班级代号:";gets(a.banji);
cout<<"请输入学生姓名:";gets(a.name);
cout<<"请输入学生学号:";gets(a.xh);
cout<<"请分别输入学生的数学、英语、C语言成绩:"<<endl;
cin>>a.math>>a.english>>a.Cyuyan;
a.score=a.math+a.english+a.Cyuyan;
fwrite(&a,sizeof(a),1,fp);
cout<<"是否继续添加?(Y/N):";
cin>>ch;
getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
void dis1()
{
system("cls");
cout<<" 班级 姓名 学号 数学 英语 C语言 总成绩 名次"<<endl;
}
void display()//学生信息显示
{
system("color 0e");
struct student a;
FILE *fp;
int Num=0,n;
if((fp=fopen("d:\\Student\\成绩.txt","rb"))==NULL)
{
cout<<"\nCannot open the inform file\n";
getchar();
exit(1);
}
while((n=fread(&a,sizeof(a),1,fp)>0))
{
stu[Num++]=a;
}
fclose(fp);
sort(stu,stu+Num,cmp4);
dis1();
for(int i=0;i<Num;i++)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<" "<<i+1<<endl;
}
cout<<endl<<endl<<"这里一共有"<<Num<<"份信息!"<<endl;
system("pause");
//menu();此处有些画蛇添足!注释掉!表示不理解!
}
int FindMenu()//查找菜单
{
int flag;
system("color D");
cout<<" 1、按班级查找"<<endl;
cout<<" 2、按学号查找"<<endl;
cout<<" 3、按姓名查找"<<endl;
cout<<" 4、按名次查找"<<endl;
cout<<"请选择您要进行的选项:";
cin>>flag;
return flag;
}
void Find()//对学生信息的查找
{
struct student a;
FILE *fp;
int Num=0,x,flag;
char ch[20],str;
if((fp=fopen("d:\\Student\\成绩.txt","rb"))==NULL)
{
cout<<"\nCannot open the inform file"<<endl;
getchar();
exit(1);
}
do
{
system("cls");
flag=FindMenu();
if(flag<1||flag>4)
{
cout<<"\n输入错误!!!请重新输入!!!"<<endl;
system("pause");
system("cls");
flag=FindMenu();
}//对菜单的选择!
if(flag==1)
{
system("cls");
cout<<"请输入您要查询的班级:";getchar();
gets(ch);
Num=0;
while(fread(&a,sizeof(a),1,fp)==1)
{
stu[Num++]=a;
}
fclose(fp);
sort(stu,stu+Num,cmp4);
dis1();
for(int i=0;i<Num;i++)
{
if(strcmp(ch,stu[i].banji)==0)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<" "<<i+1<<endl;
}
}
}
else if(flag==2)
{
system("cls");
cout<<"请您输入您要查询的学号:";getchar();
gets(ch);
Num=0;
while(fread(&a,sizeof(a),1,fp)==1)
{
stu[Num++]=a;
}
fclose(fp);
sort(stu,stu+Num,cmp4);
dis1();
for(int i=0;i<Num;i++)
{
if(strcmp(ch,stu[i].xh)==0)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<" "<<i+1<<endl;
}
}
}
else if(flag==3)
{
system("cls");
cout<<"请您输入您要查询的姓名:";getchar();
gets(ch);
Num=0;
while(fread(&a,sizeof(a),1,fp)==1)
{
stu[Num++]=a;
}
fclose(fp);
sort(stu,stu+Num,cmp4);
dis1();
for(int i=0;i<Num;i++)
{
if(strcmp(ch,stu[i].name)==0)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<" "<<i+1<<endl;
}
}
}
else if(flag==4)
{
system("cls");
cout<<"请您输入您要查询的名次:";
cin>>x;
Num=0;
while(fread(&a,sizeof(a),1,fp)==1)
{
stu[Num++]=a;
}
fclose(fp);
sort(stu,stu+Num,cmp4);
dis1();
for(int i=0;i<Num;i++)
{
if(i+1==x)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<" "<<i+1<<endl;
break;
}
}
}
//cout<<"这里一共有"<<Num<<"份信息!"<<endl;
cout<<"是否返回上一级再次查找?(Y/N):";
str=getchar();getchar();
}while(str=='Y'||str=='y');
fclose(fp);
}
void Fenxi()//学生成绩分析
{
system("cls");
system("color F");
student a;
FILE *fp=fopen("d:\\Student\\成绩.txt","ab+");
int flag,Num=0,n;
char ch;
do
{
while(1)
{
FenxiMenu();
cin>>flag;
if(flag>=1&&flag<=3)
{
break;
}
else
{
cout<<"\n输入错误!!!请重新输入!!!"<<endl;
system("pause");
system("cls");
}
}
while((n=fread(&a,sizeof(a),1,fp)>0))
{
stu[Num++]=a;
}
fclose(fp);
if(flag==1)//数学成绩查询
{
system("cls");
sort(stu,stu+Num,cmp1);
int g=0,bug=0,l=0,you=0;
for(int i=0;i<Num;i++)
{
if(stu[i].math>=60)
{
g++;
}
if(stu[i].math>=80)
{
l++;
}
if(stu[i].math>=90)
{
you++;
}
if(stu[i].math<60)
{
bug++;
}
}
cout<<"数学成绩优秀者"<<you<<"人\n";
cout<<"数学成绩良好者"<<l<<"人\n";
cout<<"数学成绩及格者"<<g<<"人\n";
cout<<"数学成绩不及格者"<<bug<<"人\n";
}
else if(flag==2)//英语成绩查询
{
system("cls");
sort(stu,stu+Num,cmp2);
int g=0,bug=0,l=0,you=0;
for(int i=0;i<Num;i++)
{
if(stu[i].english>=60)
{
g++;
}
if(stu[i].english>=80)
{
l++;
}
if(stu[i].english>=90)
{
you++;
}
if(stu[i].english<60)
{
bug++;
}
}
cout<<"英语成绩优秀者"<<you<<"人\n";
cout<<"英语成绩良好者"<<l<<"人\n";
cout<<"英语成绩及格者"<<g<<"人\n";
cout<<"英语成绩不及格者"<<bug<<"人\n";
}
else if(flag==3)//C语言成绩查询
{
system("cls");
sort(stu,stu+Num,cmp3);
int g=0,bug=0,l=0,you=0;
for(int i=0;i<Num;i++)
{
if(stu[i].Cyuyan>=60)
{
g++;
}
if(stu[i].Cyuyan>=80)
{
l++;
}
if(stu[i].Cyuyan>=90)
{
you++;
}
if(stu[i].Cyuyan<60)
{
bug++;
}
}
cout<<"C语言成绩优秀者"<<you<<"人\n";
cout<<"C语言成绩良好者"<<l<<"人\n";
cout<<"C语言成绩及格者"<<g<<"人\n";
cout<<"C语言成绩不及格者"<<bug<<"人\n";
}
getchar();
cout<<"这里一共有"<<Num<<"份记录!"<<endl;
cout<<"是否返回上一级?(Y/N):";ch=getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
void InsertScore()//追加学生成绩
{
system("cls");
getchar();
struct student a;
FILE *fp;
char ch;
int Num,n;
if((fp=fopen("d:\\Student\\成绩.txt","ab+"))==NULL)
{
cout<<"\nCannot open the inform file"<<endl;
getchar();
exit(1);
}
do
{
system("cls");
cout<<"追加学生成绩:"<<endl;
cout<<"请输入班级代号:";gets(a.banji);
cout<<"请输入学生姓名:";gets(a.name);
cout<<"请输入学生学号:";gets(a.xh);
cout<<"请分别输入学生的数学、英语、C语言成绩:"<<endl;
cin>>a.math>>a.english>>a.Cyuyan;
a.score=a.math+a.english+a.Cyuyan;
fwrite(&a,sizeof(a),1,fp);
cout<<"是否继续添加?(Y/N):";
cin>>ch;
getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
/*void Xiugai()
{
system("cls");
student a;
FILE *fp,*p;
int flag,n,Num;
char ch[15],x;
do
{
Num=0;
if((fp=fopen("d:\\Student\\成绩.txt","rb"))=NULL)
{
cout<<"\nCannot open the inform file!";
getchar();
exit(1);
}
if((p=fopen("d:\\Student\\替代文件.txt","wb"))==NULL)
{
cout<<"\nCannot creat the inform file!";
getchar();
exit(1);
}
printf("请输入您想要修改信息的学号:");
gets(ch);getchar();
flag=0;
while(fread(&a,sizeof(a),1,fp)==1)
{
stu[Num++]=a;
}
for(int i=0;i<Num;i++)
{
if(strcmp(stu[i].xh,ch)==0)
{
cout<<" "<<stu[i].banji<<" "<<stu[i].name<<" "<<stu[i].xh<<" ";
printf("%.2lf %.2lf %.2lf %.2lf ",stu[i].math,stu[i].english,stu[i].Cyuyan,stu[i].score);
cout<<"请输入班级代号:";gets(stu[i].banji);
cout<<"请输入学生姓名:";gets(stu[i].name);
cout<<"请输入学生学号:";gets(stu[i].xh);
cout<<"请分别输入学生的数学、英语、C语言成绩:"<<endl;
cin>>stu[i].math>>stu[i].english>>stu[i].Cyuyan;
stu[i].score=stu[i].math+stu[i].english+stu[i].Cyuyan;
}
fwrite(&stu,sizeof(stu),1,p);
}
if(flag==1)
{
cout<<"修改成功!"<<endl;
remove("d:\\Student\\成绩.txt");
rename("d:\\Student\\替代文件.txt","d:\\Student\\成绩.txt");//虽然这一块函数比较坑爹,好歹学会了!!!
}
else if(flag==0)
{
cout<<"您要修改的信息不存在!"<<endl;
}
cout<<"您是否要继续修改信息?(Y/N):";
cin>>x;getchar();
}while(x=='Y'||x=='y');
fclose(fp);
fclose(p);
}*/
//注释部分是在是有点儿小心疼,编译代码的时候实在是搞不懂懂那些莫名奇妙
//的错误,花一个下午仍然没能把头绪理出来,不得不割舍掉这个系统很重要的
//两个功能:学生信息修改,学生信息删除
void Xitongshuoming()
{
system("cls");
system("color 0e");
cout<<" (1) 功能1的学生成绩录入为一次性录入,再次使用便会覆盖原有数据。"<<endl;
cout<<" 如教师希望添加学生成绩可使用功能5(追加学生成绩)。\n"<<endl;
cout<<" (2) 本系统的成绩排序范围为整个系的学生。"<<endl;
cout<<" 即:学生的名次为年级名次!\n"<<endl;
cout<<" (3) 学生的排名可由功能3(学生成绩排名)来实现。\n"<<endl;
cout<<" (4) 学生的成绩具体情况可使用功能6(学生成绩分析)。\n"<<endl;
cout<<" (5) 若教师对该系统还有不明之处,请联系管理员或“关于”的本产品制作者!\n"<<endl;
system("pause");
}
void Guanyu()
{
system("cls");
system("color 0a");
cout<<" 本产品由Topcoder工作室成员申军超制作!"<<endl;
cout<<" 若教师或管理员对本产品功能有不满之处,请管理员联系本人!"<<endl;
cout<<" QQ号码:1736696594"<<endl;
cout<<" 邮箱: 1736696594@qq.com"<<endl;
system("pause");
}
int main()
{
First();
while(1)
{
system("color 0a");
switch(menu())
{
case '1':input();break;
case '2':display();break;
case '3':Sort();break;
case '4':Find();break;
case '5':InsertScore();break;
case '6':Fenxi();break;
case '7':Xitongshuoming();break;
case '8':Guanyu();break;
case '0':exit(0);break;
}
}
return 0;
}
代码比较多,高手不喜勿喷!!!