求C++大神。。帮忙啦,希望可以自己写。。再麻烦给解释下。。我的邮箱688 147零5圈qq.co
求C++大神。。帮忙啦,希望可以自己写。。再麻烦给解释下。。我的邮箱688147零5圈qq.com...
求C++大神。。帮忙啦,希望可以自己写。。再麻烦给解释下。。我的邮箱688 147零5圈qq.com
展开
2个回答
展开全部
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 《C++编写 学生成绩管理系统》
* 作 者: 刘江波
* 完成日期: 2012 年 6 月 26 日
* 版 本 号: v.626
* 对任务及求解方法的描述部分
* 问题描述:
用C++编写一个学生成绩管理系统
1、可以实现以下功能:
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 2.显示学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 3.排序统计成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 4.查找学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 5.删除学生成绩 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 6.修改学生信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系统 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
2、用链表存储信息
* 程序头部的注释结束
*/
# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
using namespace std;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{
public:
char name[20];
char Id[20];
int Cnum; //C++课程得分
int Mnum; //汇编课程得分
int Enum; //嵌入式操作系统课程得分
int sum; //总分
Student * Next;
void Input()
{
cout<<"\t\t请输入学生的姓名:"; cin>>name;
cout<<"\t\t请输入学生的学号:"; cin>>Id;
cout<<"\t\t请输入C++课程的成绩:"; cin>>Cnum;
cout<<"\t\t请输入汇编课程的成绩:"; cin>>Mnum;
cout<<"\t\t请输入嵌入式操作系统课程的成绩:"; cin>>Enum;
sum=Cnum+Mnum+Enum;
}
void ReadFile(istream & in)
{
in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;
}
void Show()
{
cout<<"姓名:"<<name<<endl<<"学号:"<<Id<<endl<<"C++:"<<Cnum<<endl
<<"汇编:"<<Mnum<<endl<<"嵌入式操作系统:"<<Enum<<endl<<"总成绩:"<<sum<<endl<<endl<<endl;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Studentmassage
{
public:
Studentmassage();
~Studentmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Swap(Student *,Student *);
void Sort();
//void Unpass();
int ListCount();
//void Average();
void Display()
{
for(Student * p=Head->Next;p!=End;p=p->Next)
p->Show();
cout<<"输入任意字符!继续……";
getch();
}
void AddItem()
{
End->Input();
End->Next=new Student;
End=End->Next;
cout<<"添加成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
private:
Student * Head,* End;
ifstream in;
ofstream out;
Student *FindItem(char * name)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Student *FindID(char * Id)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->Id,Id))return p;
return NULL;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new Student;
Head->Next=new Student;
End=Head->Next;
in.open("sort.txt");
if(!in)
cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
else
{
while(!in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Student;
End=End->Next;
}
in.close();
cout<<"\t\t读取学生信息成功!"<<endl;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
Save();
for(Student * temp;Head->Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu()
{
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<<"〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系统 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"\n\t\t\n\t\t请选择:";
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Find()
{
char name[20] ,Id[10];
int x;
Student * p=NULL;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
cout<<"\n\t\t*********************************\n请选择:";
cin>>x;
switch(x)
{
case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;
if(p=FindItem(name))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}break;
case 2:
{
cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;
if(p=FindID(Id))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该学好的学生!"<<'\n'<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}break;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ModifyItem() //修改信息
{
char name[20];
Student * p=NULL;
cout<<"\t\t请输入要修改的人的姓名:";cin>>name;
if(p=FindItem(name))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;
p->Next->Input();
cout<<"修改成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::RemoveItem() // 删除信息
{
char name[20];
Student * p=NULL,*temp=NULL;
cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;
if(p=FindItem(name))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"\t\t删除成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Swap(Student *p1, Student *p2)//交换两个combox变量的数据域
{
Student *temp=new Student;
strcpy(temp->name,p1->name);
strcpy(temp->Id,p1->Id);
temp->Cnum=p1->Cnum;
temp->Mnum=p1->Mnum;
temp->Enum=p1->Enum;
temp->sum=p1->sum;
strcpy(p1->name,p2->name);
strcpy(p1->Id,p2->Id);
p1->Cnum=p2->Cnum;
p1->Mnum=p2->Mnum;
p1->Enum=p2->Enum;
p1->sum=p2->sum;
strcpy(p2->name,temp->name);
strcpy(p2->Id,temp->Id);
p2->Cnum=temp->Cnum;
p2->Mnum=temp->Mnum;
p2->Enum=temp->Enum;
p2->sum=temp->sum;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
if(! Head)
return 0;
int n=0;
for(Student * p=Head->Next;p!=End;p=p->Next)
{
n++;
}
return n;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Sort()//对当前链表进行排序
{
cout <<"Sorting..."<<endl;
Student *p=NULL,*p1=NULL,*k=NULL;
int n=Studentmassage::ListCount();
if(n<2)
return;
for(p=Head->Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage::Swap(p,k);
}
}
cout <<"排序完成!"<<endl;
getch();
return;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Save()
{
out.open("sort.txt");
for(Student *p=Head->Next;p!=End;p=p->Next)
out<<p->name<<"\t"<<p->Id<<"\t"<<p->Cnum<<"\t"
<<p->Mnum<<"\t"<<p->Enum<<"\t"<<p->sum<<'\n';
out.close();
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
int x,i=0;
bool quit=false;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl;
for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t ◎"<<endl;
cout<<"\t\t◎★★★★【 欢迎进入学生成绩管理系统 】★★★★◎"<<endl;
for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t ◎"<<endl;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl;;
Studentmassage Grade;
cout<<"按任意键开始……";
getch();
while(!quit)
{
system("cls");
Grade.ShowMenu();
cin>>x;
switch(x)
{
case 0:quit=true;break;
case 1:Grade.AddItem();break;
case 2:Grade.Display();break;
case 3:Grade.Sort();break;
case 4:Grade.Find();break;
case 5:Grade.RemoveItem();break;
case 6:Grade.ModifyItem();break;
}
}
return 0;
}
参考下吧
展开全部
#include<stdio.h>
#include<stdlib.h>
#define M 30
void menu();
void sortmenu();
void searchmenu();
void detailmenu();
void inputscore(struct student s[],int n);
void searchscore_fail(struct student s[],int n);
void searchscore_xh(struct student s[],int n);
void searchscore_best(struct student s[],int n);
void detail_gdsx(struct student s[],int n);
void detail_xxds(struct student s[],int n);
void detail_cyy(struct student s[],int n);
void detail_yy(struct student s[],int n);
int readfromfile(struct student s[]);
void writetofile(struct student s[],int n);
struct student /*定义结构体*/
{
int xh;
char name[10];
int gdsx;
int xxds;
int cyy;
int yy;
int sum;
};
main()
{
struct student s[M],t;
int choice_main; /*主菜单选项*/
char select; /*继续选项*/
int num; /*学生数量*/
int choice_sort; /*排序选项*/
int i,j;
int choice_search; /*查找选项*/
int choice_detail;
END:system("cls");
menu();
scanf("%d",&choice_main);
switch(choice_main)
{
case 1:
{
system("cls");
printf("\n请输入学生数量:");
scanf("%d",&num);
inputscore(s,num);
}
break;
case 2:
{
system("cls");
sortmenu();
scanf("%d",&choice_sort);
switch(choice_sort)
{
case 1:
{
for(i=0;i<num-1;i++)
{
for(j=0;j<num-1-i;j++)
{
if(s[j].sum<s[j+1].sum)
{
t=s[j];s[j]=s[j+1];s[j+1]=t;
}
}
}
for(i=0;i<num;i++)
{
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
break;
case 2:
{
for(i=0;i<num-1;i++)
{
for(j=0;j<num-1-i;j++)
{
if(s[j].xh>s[j+1].xh)
{
t=s[j];s[j]=s[j+1];s[j+1]=t;
}
}
}
for(i=0;i<num;i++)
{
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
break;
}
}
break;
case 3:
{
system("cls");
searchmenu();
scanf("%d",&choice_search);
switch(choice_search)
{
case 1:
{
system("cls");
searchscore_fail(s,num);
break;
}
case 2:
{
system("cls");
searchscore_xh(s,num);
break;
}
case 3:
{
system("cls");
searchscore_best(s,num);
break;
}
}
}
break;
case 4:
{
system("cls");
detailmenu();
scanf("%d",&choice_detail);
system("cls");
switch(choice_detail)
{
case 1:
{
detail_gdsx(s,num);
}
break;
case 2:
{
detail_xxds(s,num);
}
break;
case 3:
{
detail_cyy(s,num);
}
break;
case 4:
{
detail_yy(s,num);
}
break;
}
}
break;
case 5:
{
writetofile(s,num);
}
break;
case 6:
{
num=readfromfile(s);
}
break;
case 7:exit(1);
default:
{
printf("输入错误!\n");
}
}
printf("继续选择功能?Y/N :");
getchar();
scanf("%c",&select);
if(select=='Y'||select=='y') goto END;
else if(select=='N'||select=='n') exit(0);
}
void menu() /*函数功能:输出主菜单*/
{
printf("********************\n");
printf("* *\n");
printf("* 学生成绩管理系统 *\n");
printf("* 只针对30人以下 *\n");
printf("* 四科成绩 *\n");
printf("* *\n");
printf("* 1.成绩录入 *\n");
printf("* 2.成绩排名 *\n");
printf("* 3.成绩查询 *\n");
printf("* 4.成绩统计 *\n");
printf("* 5.写入文件 *\n");
printf("* 6.文件读出 *\n");
printf("* 7.退出程序 *\n");
printf("* *\n");
printf("********************\n");
printf("请输入数字选择功能:");
}
void inputscore(struct student s[],int n) /*函数功能:成绩录入与输出*/
{
int i;
printf("请按照下列顺序输入信息:\n");
printf("学号 姓名 高数 线数 C语言 英语\n");
for(i=0;i<n;i++)
{
scanf("%d%s%d%d%d%d",&s[i].xh,&s[i].name,&s[i].gdsx,&s[i].xxds,&s[i].cyy,&s[i].yy);
s[i].sum=s[i].gdsx+s[i].xxds+s[i].cyy+s[i].yy;
}
system("cls");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
for(i=0;i<n;i++)
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
void sortmenu() /*函数功能:排序菜单*/
{
printf("**************\n");
printf("* *\n");
printf("* 1.总分排序 *\n");
printf("* 2.学号排序 *\n");
printf("* *\n");
printf("**************\n");
printf("请输入数字选择功能:");
}
void searchmenu() /*函数功能:查找菜单*/
{
printf("**************\n");
printf("* *\n");
printf("* 1.挂科查询 *\n");
printf("* 2.学号查询 *\n");
printf("* 3.最高查询 *\n");
printf("* *\n");
printf("**************\n");
printf("请输入数字选择功能:");
}
void searchscore_xh(struct student s[],int n) /*函数功能:按学号查找*/
{
int i;
int searchxh;
printf("请输入学号:");
scanf("%d",&searchxh);
for(i=0;i<n;i++)
{
if(s[i].xh==searchxh)
{
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
}
void searchscore_fail(struct student s[],int n) /*函数功能:挂科查找*/
{
int i;
printf("不及格的同学有:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
for(i=0;i<n;i++)
{
if(s[i].gdsx<60||s[i].xxds<60||s[i].cyy<60||s[i].yy<60)
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
void searchscore_best(struct student s[],int n) /*函数功能:最高分*/
{
int i,max;
for(i=0,max=0;i<n-1;i++)
if(s[i].gdsx<s[i+1].gdsx) max=i+1;
printf("高等数学最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
for(i=0,max=0;i<n-1;i++)
if(s[i].xxds<s[i+1].xxds) max=i+1;
printf("线性代数最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
for(i=0,max=0;i<n-1;i++)
if(s[i].cyy<s[i+1].cyy) max=i+1;
printf("C语言最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
for(i=0,max=0;i<n-1;i++)
if(s[i].yy<s[i+1].yy) max=i+1;
printf("英语最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
}
void detailmenu() /*函数功能:统计菜单*/
{
printf("**************\n");
printf("* *\n");
printf("* 1.高等数学 *\n");
printf("* 2.线性代数 *\n");
printf("* 3.C语言 *\n");
printf("* 4.大学英语 *\n");
printf("* *\n");
printf("**************\n");
}
void detail_gdsx(struct student s[],int n) /*函数功能:高数统计*/
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].gdsx>90) a=a+1;
else if(s[i].gdsx>80) b=b+1;
else if(s[i].gdsx>70) c=c+1;
else if(s[i].gdsx>60) d=d+1;
else e=e+1;
}
printf("高等数学统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}
void detail_xxds(struct student s[],int n)
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].xxds>90) a=a+1;
else if(s[i].xxds>80) b=b+1;
else if(s[i].xxds>70) c=c+1;
else if(s[i].xxds>60) d=d+1;
else e=e+1;
}
printf("线性代数统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}
void detail_cyy(struct student s[],int n)
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].cyy>90) a=a+1;
else if(s[i].cyy>80) b=b+1;
else if(s[i].cyy>70) c=c+1;
else if(s[i].cyy>60) d=d+1;
else e=e+1;
}
printf("C语言统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}void detail_yy(struct student s[],int n)
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].yy>90) a=a+1;
else if(s[i].yy>80) b=b+1;
else if(s[i].yy>70) c=c+1;
else if(s[i].yy>60) d=d+1;
else e=e+1;
}
printf("英语统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}
void writetofile(struct student s[],int n)/*函数功能:写入文件*/
{
FILE*fp;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("文件打开失败!");
exit(0);
}
fwrite(s,sizeof(struct student),n,fp);
fclose(fp);
}
int readfromfile(struct student s[]) /*函数功能:文件读出*/
{
FILE*fp;
int i;
int c;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;!feof(fp);i++)
{
fread(&s[i],sizeof(struct student),1,fp);
}
fclose(fp);
c=i-1;
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
for(i=0;i<c;i++)
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
return c;
}
#include<stdlib.h>
#define M 30
void menu();
void sortmenu();
void searchmenu();
void detailmenu();
void inputscore(struct student s[],int n);
void searchscore_fail(struct student s[],int n);
void searchscore_xh(struct student s[],int n);
void searchscore_best(struct student s[],int n);
void detail_gdsx(struct student s[],int n);
void detail_xxds(struct student s[],int n);
void detail_cyy(struct student s[],int n);
void detail_yy(struct student s[],int n);
int readfromfile(struct student s[]);
void writetofile(struct student s[],int n);
struct student /*定义结构体*/
{
int xh;
char name[10];
int gdsx;
int xxds;
int cyy;
int yy;
int sum;
};
main()
{
struct student s[M],t;
int choice_main; /*主菜单选项*/
char select; /*继续选项*/
int num; /*学生数量*/
int choice_sort; /*排序选项*/
int i,j;
int choice_search; /*查找选项*/
int choice_detail;
END:system("cls");
menu();
scanf("%d",&choice_main);
switch(choice_main)
{
case 1:
{
system("cls");
printf("\n请输入学生数量:");
scanf("%d",&num);
inputscore(s,num);
}
break;
case 2:
{
system("cls");
sortmenu();
scanf("%d",&choice_sort);
switch(choice_sort)
{
case 1:
{
for(i=0;i<num-1;i++)
{
for(j=0;j<num-1-i;j++)
{
if(s[j].sum<s[j+1].sum)
{
t=s[j];s[j]=s[j+1];s[j+1]=t;
}
}
}
for(i=0;i<num;i++)
{
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
break;
case 2:
{
for(i=0;i<num-1;i++)
{
for(j=0;j<num-1-i;j++)
{
if(s[j].xh>s[j+1].xh)
{
t=s[j];s[j]=s[j+1];s[j+1]=t;
}
}
}
for(i=0;i<num;i++)
{
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
break;
}
}
break;
case 3:
{
system("cls");
searchmenu();
scanf("%d",&choice_search);
switch(choice_search)
{
case 1:
{
system("cls");
searchscore_fail(s,num);
break;
}
case 2:
{
system("cls");
searchscore_xh(s,num);
break;
}
case 3:
{
system("cls");
searchscore_best(s,num);
break;
}
}
}
break;
case 4:
{
system("cls");
detailmenu();
scanf("%d",&choice_detail);
system("cls");
switch(choice_detail)
{
case 1:
{
detail_gdsx(s,num);
}
break;
case 2:
{
detail_xxds(s,num);
}
break;
case 3:
{
detail_cyy(s,num);
}
break;
case 4:
{
detail_yy(s,num);
}
break;
}
}
break;
case 5:
{
writetofile(s,num);
}
break;
case 6:
{
num=readfromfile(s);
}
break;
case 7:exit(1);
default:
{
printf("输入错误!\n");
}
}
printf("继续选择功能?Y/N :");
getchar();
scanf("%c",&select);
if(select=='Y'||select=='y') goto END;
else if(select=='N'||select=='n') exit(0);
}
void menu() /*函数功能:输出主菜单*/
{
printf("********************\n");
printf("* *\n");
printf("* 学生成绩管理系统 *\n");
printf("* 只针对30人以下 *\n");
printf("* 四科成绩 *\n");
printf("* *\n");
printf("* 1.成绩录入 *\n");
printf("* 2.成绩排名 *\n");
printf("* 3.成绩查询 *\n");
printf("* 4.成绩统计 *\n");
printf("* 5.写入文件 *\n");
printf("* 6.文件读出 *\n");
printf("* 7.退出程序 *\n");
printf("* *\n");
printf("********************\n");
printf("请输入数字选择功能:");
}
void inputscore(struct student s[],int n) /*函数功能:成绩录入与输出*/
{
int i;
printf("请按照下列顺序输入信息:\n");
printf("学号 姓名 高数 线数 C语言 英语\n");
for(i=0;i<n;i++)
{
scanf("%d%s%d%d%d%d",&s[i].xh,&s[i].name,&s[i].gdsx,&s[i].xxds,&s[i].cyy,&s[i].yy);
s[i].sum=s[i].gdsx+s[i].xxds+s[i].cyy+s[i].yy;
}
system("cls");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
for(i=0;i<n;i++)
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
void sortmenu() /*函数功能:排序菜单*/
{
printf("**************\n");
printf("* *\n");
printf("* 1.总分排序 *\n");
printf("* 2.学号排序 *\n");
printf("* *\n");
printf("**************\n");
printf("请输入数字选择功能:");
}
void searchmenu() /*函数功能:查找菜单*/
{
printf("**************\n");
printf("* *\n");
printf("* 1.挂科查询 *\n");
printf("* 2.学号查询 *\n");
printf("* 3.最高查询 *\n");
printf("* *\n");
printf("**************\n");
printf("请输入数字选择功能:");
}
void searchscore_xh(struct student s[],int n) /*函数功能:按学号查找*/
{
int i;
int searchxh;
printf("请输入学号:");
scanf("%d",&searchxh);
for(i=0;i<n;i++)
{
if(s[i].xh==searchxh)
{
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
}
void searchscore_fail(struct student s[],int n) /*函数功能:挂科查找*/
{
int i;
printf("不及格的同学有:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
for(i=0;i<n;i++)
{
if(s[i].gdsx<60||s[i].xxds<60||s[i].cyy<60||s[i].yy<60)
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
}
}
void searchscore_best(struct student s[],int n) /*函数功能:最高分*/
{
int i,max;
for(i=0,max=0;i<n-1;i++)
if(s[i].gdsx<s[i+1].gdsx) max=i+1;
printf("高等数学最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
for(i=0,max=0;i<n-1;i++)
if(s[i].xxds<s[i+1].xxds) max=i+1;
printf("线性代数最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
for(i=0,max=0;i<n-1;i++)
if(s[i].cyy<s[i+1].cyy) max=i+1;
printf("C语言最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
for(i=0,max=0;i<n-1;i++)
if(s[i].yy<s[i+1].yy) max=i+1;
printf("英语最高分:\n");
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[max].xh,s[max].name,s[max].gdsx,s[max].xxds,s[max].cyy,s[max].yy,s[max].sum);
}
void detailmenu() /*函数功能:统计菜单*/
{
printf("**************\n");
printf("* *\n");
printf("* 1.高等数学 *\n");
printf("* 2.线性代数 *\n");
printf("* 3.C语言 *\n");
printf("* 4.大学英语 *\n");
printf("* *\n");
printf("**************\n");
}
void detail_gdsx(struct student s[],int n) /*函数功能:高数统计*/
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].gdsx>90) a=a+1;
else if(s[i].gdsx>80) b=b+1;
else if(s[i].gdsx>70) c=c+1;
else if(s[i].gdsx>60) d=d+1;
else e=e+1;
}
printf("高等数学统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}
void detail_xxds(struct student s[],int n)
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].xxds>90) a=a+1;
else if(s[i].xxds>80) b=b+1;
else if(s[i].xxds>70) c=c+1;
else if(s[i].xxds>60) d=d+1;
else e=e+1;
}
printf("线性代数统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}
void detail_cyy(struct student s[],int n)
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].cyy>90) a=a+1;
else if(s[i].cyy>80) b=b+1;
else if(s[i].cyy>70) c=c+1;
else if(s[i].cyy>60) d=d+1;
else e=e+1;
}
printf("C语言统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}void detail_yy(struct student s[],int n)
{
int i,a,b,c,d,e;
a=b=c=d=e=0;
for(i=0;i<n;i++)
{
if(s[i].yy>90) a=a+1;
else if(s[i].yy>80) b=b+1;
else if(s[i].yy>70) c=c+1;
else if(s[i].yy>60) d=d+1;
else e=e+1;
}
printf("英语统计成绩如下:\n");
printf("优秀人数%d人\n",a);
printf("良好人数%d人\n",b);
printf("中等人数%d人\n",c);
printf("及格人数%d人\n",d);
printf("挂科人数%d人\n",e);
}
void writetofile(struct student s[],int n)/*函数功能:写入文件*/
{
FILE*fp;
if((fp=fopen("student.txt","w"))==NULL)
{
printf("文件打开失败!");
exit(0);
}
fwrite(s,sizeof(struct student),n,fp);
fclose(fp);
}
int readfromfile(struct student s[]) /*函数功能:文件读出*/
{
FILE*fp;
int i;
int c;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;!feof(fp);i++)
{
fread(&s[i],sizeof(struct student),1,fp);
}
fclose(fp);
c=i-1;
printf("学号 姓名 高数 线数 C语言 英语 总分\n");
for(i=0;i<c;i++)
printf("%8d %6s %3d %3d %3d %3d %3d\n",s[i].xh,s[i].name,s[i].gdsx,s[i].xxds,s[i].cyy,s[i].yy,s[i].sum);
return c;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询