学生成绩管理系统 用c语言写 能不能快一点给我答案呢 谢谢啦 第一次求助 希望给力呀
#include
#include
#include
#include
#include
class Stu //构建学生类
{
public:
friend void Input(Stu stud[]) ;
friend void Statistic(Stu stud[]);
friend void Lookup(Stu stud[]) ;
friend void Modify(Stu stud[]) ;
friend void Delete(Stu stud[]) ;
friend void Output(Stu stud[]) ;
friend void Sort(Stu stud[]) ;
friend void Insert(Stu stud[]) ;
friend void Write(Stu stud[],int n);
friend int Read(Stu stud[]);
private:
char class_0[20];
int num;
char name[8];
float elec;
float c_program;
float media;
float english;
float math;
float sport;
float polity;
float average;
int order;
}stud[100];
void Write(Stu stud[],int n) //向文件中写入数据
{
fstream myFile;
myFile.open("student.dat",ios::out|ios::binary);
if(!myFile)
{
cout<<"student.dat can't open!"<<endl;
abort();
}
int count=n;
myFile<<count<<endl<<endl;
for(int i=0;i<=count;i++)
{
myFile<<stud[i].class_0<<" "<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].elec<<" "<<stud[i].c_program<<" "<<stud[i].media<<" "<<stud[i].english
<<" "<<stud[i].math<<" "<<stud[i].sport<<" "<<stud[i].polity<<" "<<stud[i].average<<endl;
}
myFile.close();
}
int Read(Stu stud[]) //从文件中读数据
{
fstream myFile;
myFile.open("student.dat",ios::in|ios::binary);
if(!myFile)
{
cout<<"student.dat can't open!"<<endl;
abort();
}
int count;
myFile.seekg(0);
myFile>>count;
for(int i=0;i<=count;i++)
{
myFile>>stud[i].class_0>>stud[i].num>>stud[i].name>>stud[i].elec>>stud[i].c_program>>stud[i].media>>stud[i].english>>stud[i].math>>stud[i].sport>>stud[i].polity>>stud[i].average;
}
myFile.close();
return count ;
}
void Input(Stu stud[]) //---------------输入学生成绩
{
system("cls"); /*运行前清屏*/
int i=0;
int flag;
char sign;
cout> 请输入学生成绩 <<===="<<endl;
while(sign!='n'&&sign!='N') /*判断*/
{
cout<<"班级:"; /*交互输入*/
cin>>stud[i].class_0;
loop:
cout<<"学号:";
cin>>stud[i].num;
int c=0;
while(c<i)
{
c++;
if(stud[i].num==stud[i-c].num)
{
cout<<" 你输入的学号已经存在!请重新输入。"<<endl;
goto loop;
}
}
cout<<"姓名:";
cin>>stud[i].name;
do{
flag=0;
cout<<"电子技术成绩:";
cin>>stud[i].elec;
if(stud[i].elec>100 ||stud[i].elec<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"C++程序设计成绩:";
cin>>stud[i].c_program;
if(stud[i].c_program>100 ||stud[i].c_program<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"多媒体技术成绩:";
cin>>stud[i].media;
if(stud[i].media>100 ||stud[i].media<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"大学英语成绩:";
cin>>stud[i].english;
if(stud[i].english>100 ||stud[i].english<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"高等数学成绩:";
cin>>stud[i].math;
if(stud[i].math>100 ||stud[i].math<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"大学体育成绩:";
cin>>stud[i].sport;
if(stud[i].sport>100 ||stud[i].sport<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
do{
flag=0;
cout<<"马克思主义政治经济学成绩:";
cin>>stud[i].polity;
if(stud[i].polity>100 ||stud[i].polity<1)
cout<<"对不起,请输入1-100之间的数字!!
";
else
flag=1;
}while(flag==0);
stud[i].average=(stud[i].elec+stud[i].c_program+stud[i].media+stud[i].english+stud[i].math+stud[i].sport+stud[i].polity)/7;
cout<<"平均分为:"<<stud[i].average<<endl;
cout提示:是否继续写入学生成绩?(Y/N)";
cin>>sign; /*输入判断*/
i++;
}
Write(stud,i);
}
void Statistic(Stu stud[]) //---------------统计学生数据
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
cout> 输出学生统计数据 <<===="<<endl;
cout<<"班级"<<""<<"学号"<<""<<" 姓名"<<""<<" 平均分"<<endl;
for(int i=0;i<n;i++)
cout<<stud[i].class_0<<""<<stud[i].num<<""<<stud[i].name<<""<<stud[i].average<<endl;
system("pause");
}
void Lookup(Stu stud[]) //---------------查找学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
int s;
int i=0;
cout> 查找学生成绩 <<===="<<endl;
cout<<"请输入需要查找学生的学号:"<<endl;
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout提示:对不起,无法找到该学生的信息!"<<endl; /*输入失败信息*/
}
else
{
cout<<"---------------------------"<<endl;
cout<<"班级:"<<stud[i].class_0<<endl; /*输出该学生信息*/
cout<<"学号:"<<stud[i].num<<endl;
cout<<"姓名:"<<stud[i].name<<endl;
cout<<"电子技术:"<<stud[i].elec<<endl;
cout<<"C++程序设计:"<<stud[i].c_program<<endl;
cout<<"多媒体技术:"<<stud[i].media<<endl;
cout<<"大学英语:"<<stud[i].english<<endl;
cout<<"高等数学:"<<stud[i].math<<endl;
cout<<"大学体育:"<<stud[i].sport<<endl;
cout<<"马克思主义政治经济学:"<<stud[i].polity<<endl;
cout<<"平均分:"<<stud[i].average<<endl;
}
}
void Modify(Stu stud[]) //---------------修改学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
int s;
int i=0;
cout> 修改学生成绩 <<===="<<endl;
cout<<"请输入需要修改成绩学生的学号:"<<endl;
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout提示:对不起,无该学生的成绩……"<<endl; /*输入失败信息*/
}
else
{
cout<<"----------该学生的信息----------"<<endl; /*格式头*/
cout<<"班级"<<""<<"学号"<<""<<"姓名"<<""<<"电子"<<""<<"c++"<<""<<" 多媒体"<<""<<"英语"<<""<<"数学"<<""<<"体育"<<""<<"政治"<<""<<"平均分"<<endl;
cout<<"---------------------------------"<<endl;
cout<<stud[i].class_0<<""<<stud[i].num<<""<<stud[i].name<<""<<stud[i].elec<<""<<stud[i].c_program<<""<<stud[i].media<<""<<stud[i].english<<""<<stud[i].math<<""<<stud[i].sport<<""<<stud[i].polity<<""<<stud[i].average<<endl;
cout<<"请重新输入该学生的信息"<<endl;
cout<<"班级:"<<endl; /*交互输入*/
cin>>stud[i].class_0;
cout<<"学号:"<<endl;
cin>>stud[i].num;
cout<<"姓名:"<<endl;
cin>>stud[i].name;
cout<<"电子技术成绩:"<<endl;
cin>>stud[i].elec;
cout<<"C++程序设计成绩:"<<endl;
cin>>stud[i].c_program;
cout<<"多媒体技术成绩:"<<endl;
cin>>stud[i].media;
cout<<"大学英语成绩:"<<endl;
cin>>stud[i].english;
cout<<"高等数学成绩:"<<endl;
cin>>stud[i].math;
cout<<"大学体育成绩:"<<endl;
cin>>stud[i].sport;
cout<<"马克思主义政治经济学成绩:"<<endl;
cin>>stud[i].polity;
stud[i].average=(stud[i].elec+stud[i].c_program+stud[i].media+stud[i].english+stud[i].math+stud[i].sport+stud[i].polity)/7;
cout<<"平均分为:"<<stud[i].average<<endl;
char c;
cout<<"是否保存数据?(y/n)"<<endl;
cin>>c;
if(c!='n'&&c!='N')
Write(stud,n);
}
}
void Delete(Stu stud[]) //---------------按学号查找,删除学生信息
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
int s;
int i=0,j;
cout> 删除学生成绩 <<===="<<endl;
cout<<"请输入需要删除学生的学号:"<<endl; /*交互式问寻*/
cin>>s;
while((stud[i].num-s)!=0&&i<n) i++; /*查找判断*/
if(i==n)
{
cout提示:对不起,无法找到该学生……"<<endl; /*返回失败信息*/
}
else
{
for(j=i;j<n-1;j++) /*删除操作*/
{
strcpy(stud[j].class_0,stud[j+1].class_0);
stud[j].num=stud[j+1].num;
strcpy(stud[j].name,stud[j+1].name);
stud[j].elec=stud[j+1].elec;
stud[j].c_program=stud[j+1].c_program;
stud[j].media=stud[j+1].media;
stud[j].english=stud[j+1].english;
stud[j].math=stud[j+1].math;
stud[j].sport=stud[j+1].sport;
stud[j].polity=stud[j+1].polity;
stud[j].average=stud[j+1].average;
}
cout提示:已成功删除!"<<endl; /*返回成功信息*/
}
Write(stud,n-1);
}
void Insert(Stu stud[]) //---------------增加学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
char s;
cout> 增加学生成绩<<===="<<endl;
while(s!='n'&&s!='N')
{
cout<<"班级:"<<endl; /*交互输入*/
cin>>stud[n].class_0;
cout<<"学号:";
cin>>stud[n].num;
cout<<"姓名:";
cin>>stud[n].name;
cout<<"电子技术成绩:";
cin>>stud[n].elec;
cout<<"C++程序设计成绩:";
cin>>stud[n].c_program;
cout<<"多媒体技术成绩:";
cin>>stud[n].media;
cout<<"大学英语成绩:";
cin>>stud[n].english;
cout<<"高等数学成绩:";
cin>>stud[n].math;
cout<<"大学体育成绩:";
cin>>stud[n].sport;
cout<<"马克思主义政治经济学成绩:";
cin>>stud[n].polity;
stud[n].average=(stud[n].elec+stud[n].c_program+stud[n].media+stud[n].english+ stud[n].math+stud[n].sport+stud[n].polity)/7;
cout<<"平均分"<<stud[n].average;
n++;
cout提示:插入成功!"<<endl; /*返回成功信息*/
cout<<"是否继续输入(y/n)"<<endl;
cin>>s;
}
Write(stud,n);
}
void Sort(Stu stud[]) //---------------按平均分对学生成绩记录项进行降序排序
{
system("cls"); /*运行前清屏*/
int i,j,k;
float s;
char t[20];
cout> 降序排序成绩 <<===="<<endl;
int n=Read(stud);
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(stud[j].average<stud[j+1].average)
{
strcpy(t,stud[j+1].class_0);
strcpy(stud[j+1].class_0,stud[j].class_0);
strcpy(stud[j].class_0,t);
k=stud[j+1].num;
stud[j+1].num=stud[j].num;
stud[j].num=k;
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
s=stud[j+1].elec;
stud[j+1].elec=stud[j].elec;
stud[j].elec=s;
s=stud[j+1].c_program;
stud[j+1].c_program=stud[j].c_program;
stud[j].c_program=s;
s=stud[j+1].media;
stud[j+1].media=stud[j].media;
stud[j].media=s;
s=stud[j+1].english;
stud[j+1].english=stud[j].english;
stud[j].english=s;
s=stud[j+1].math;
stud[j+1].math=stud[j].math;
stud[j].math=s;
s=stud[j+1].sport;
stud[j+1].sport=stud[j].sport;
stud[j].sport=s;
s=stud[j+1].polity;
stud[j+1].polity=stud[j].polity;
stud[j].polity=s;
s=stud[j+1].average;
stud[j+1].average=stud[j].average;
stud[j].average=s;
}
cout<<"----------------------------------------------------"<<endl; /*格式头*/
cout<<"班级"<<""<<"学号"<<""<<"姓名"<<""<<"电子"<<""<<"C++"<<""<<"多媒体"<<""<<"英语"<<""<<"数学"<<""<<"体育"<<""<<"政治"<<""<<"平均分"<<""<<"名次"<<endl;
cout<<"----------------------------------------------------"<<endl;
for(i=0;i<n;i++) /*循环输入*/
{
stud[i].order=i+1;
cout<<stud[i].class_0<<""<<stud[i].num<<""<<stud[i].name<<""<<stud[i].elec<<""<<stud[i].c_program<<""<<stud[i].media<<" "<<stud[i].english<<" "<< stud[i].math<<""<<stud[i].sport<<" "<<stud[i].polity<<""<<stud[i].average<<""<<stud[i].order<<endl;
}
Write(stud,n);
}
void Output(Stu stud[]) //---------------显示全部学生成绩
{
system("cls"); /*运行前清屏*/
int n=Read(stud);
cout> 显示全部学生成绩 <<===="<<endl;
if(!stud)
cout<<"没有记录";
else
{
cout<<"----------------------------------------------------"<<endl; /*格式头*/
cout<<"班级"<<""<<"学号"<<""<<"姓名"<<""<<"电子"<<""<<"c++"<<""<<"多媒体"<<""<<"英语"<<""<<"数学"<<""<<"体育"<<""<<"政治"<<""<<"平均分"<<endl;
cout<<"------------------------------------------------"<<endl;
for(int i=0;i<n;i++) /*循环输入*/
{
cout<<stud[i].class_0<<" "<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].elec<<" "<<stud[i].c_program<<" "<<stud[i].media<<" "<<stud[i].english<<" "<< stud[i].math<<" "<<stud[i].sport<<""<<stud[i].polity<<""<<stud[i].average<<endl;
}
cout<<"--------------------------------------------------------"<<endl;
}
}
int menu() /*菜单函数*/
{
char c;
do
{
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<<" * 【0】退出本系统 * "<<endl<<endl;
cout<<"***************************************************************"<<endl;
cout<<"请你选择操作(0-8):"<<endl;
c=getchar(); /*读入选择*/
}
while(c'8');
return(c-'0'); /*返回选择*/
}
void main() /*主函数*/
{
for(;;)
{
switch(menu()) /*选择判断*/
{
case 1:
Input(stud);/*输入学生成绩*/
break;
case 2:
Statistic(stud); /*输出学生统计数据*/
break;
case 3:
Lookup(stud); /*查找学生成绩*/
cout<<"";
system("pause");
break;
case 4:
Modify(stud); /*修改学生成绩*/
cout<<"";
system("pause");
break;
case 5:
Delete(stud); /*按学号查找,删除学生信息*/
cout<<"";
system("pause");
break;
case 6:
Insert(stud);/*增加学生成绩*/
cout<<"";
system("pause");
break;
case 7:
Sort(stud); /*按平均分对成绩记录项进行降序排序*/
cout<<"";
system("pause");
break;
case 8:
Output(stud); /*显示全部学生成绩*/
cout<<"";
system("pause");
break;
case 0:
cout>===============================
"<<endl; /*结束程序*/
cout<<"";
system("pause");
exit(0);
}
}
}
去年写的,你稍微改下加个成绩就行
#include#include#includeFILE *fp;struct student{char name[10];char number[12];char age[3];struct student *next;};struct student *creat();//手动创建链表struct student *build_list();//从文件读取信息创建链表void read_list(struct student *head);//打印链表void search(struct student *head);//查找相应信息struct student *delete_(struct student *head);//删除相应信息void ad_list(struct student *head);//增加信息int control(struct student *head);//控制函数void head_print();//打印界面函数void change_list(struct student *head);//更改链表信息函数void save(struct student *head);//保存文件void remove(struct student *head);//递归释放链表空间char name[10],number[12],age[3];//学生姓名、学号、年龄全局变量int main(){struct student *head;head=(struct student*)malloc(sizeof(struct student));control(head);free(head);fclose(fp);return 0;}struct student *creat(){struct student *head;char name[10],number[12],age[3];struct student *p,*r,*p1;head=(struct student *)malloc(sizeof(struct student));p=head->next;r=head;printf("依次输入姓名学号年龄(按q退出):
");scanf("%s",name);while(name[0]!='q'){p1=(struct student*)malloc(sizeof(struct student));scanf("%s",number);scanf("%s",age);strcpy(p1->name,name);strcpy(p1->number,number);strcpy(p1->age,age);p1->next=NULL;r->next=p1;r=p1;scanf("%s",name);}printf("建立成功
");return head;}/*若无文件或文件为空,用链表创建函数,为防止占用多余内存在循环入口处进行判断,函数返回头指针地址*/struct student *build_list(){char ch;struct student *head;struct student *p1,*r;rewind(fp);head=(struct student*)malloc(sizeof(struct student));r=head;while(!feof(fp)){p1=(struct student*)malloc(sizeof(struct student));fscanf(fp,"%s%s%s",p1->name,p1->number,p1->age);p1->next=NULL;r->next=p1;r=p1;fseek(fp,2L,SEEK_CUR);if((ch=getc(fp))==EOF)break;elsefseek(fp,-3L,SEEK_CUR);} return head;}/*文件内有信息时按行读取文件信息并创建链表,为防止误读结尾换行符,用fseek函数在每次循环后移两单位判断是否为空,若为空结束循环,若不为空则用fseek函数前移三个单位*/void read_list(struct student *head){struct student *p;p=head->next;if(p==NULL){head=creat();}printf("*******************************************
");while(p!=NULL){printf("%-20s%-12s%-3s
",p->name,p->number,p->age);p=p->next;}printf("*******************************************
");}/*输出链表信息,如果进行删除操作后链表为空则转到链表创建函数;按行读取文件信息并输出。*/void search(struct student *head){char s[20];struct student *p;int k=0;printf("请输入要查询的字符串:
");p=head->next;scanf("%s",s);printf("查询结果:
");while(p!=NULL){if((strcmp(s,p->age)&&strcmp(s,p->name)&&strcmp(s,p->number))==0){printf("%-20s%-12s%-3s
",p->name,p->number,p->age);k=1;}p=p->next;}if(k==0)printf("无记录
");}/*查找函数,*/struct student *delete_(struct student *head){char s[20];char ch;int v=0;struct student *p,*q;printf("请输入要删除的学生的学号:
");scanf("%s",s);p=head->next;q=head;while(p!=NULL){if(strcmp(s,p->number)==0){q->next=p->next;v=1;free(p);break;}q=p;p=p->next;}if(v==1)printf("删除成功
");else{printf("未删除成功
");return q->next;}if(head->next==NULL){printf("已无信息,是否输入新的(Y/N):
");scanf("%c",&ch);ch=getchar();if(ch=='y')head=creat();return head;}return q->next;}void ad_list(struct student *head){char s[20];int v=0;struct student *p,*q;q=(struct student *)malloc(sizeof(struct student));p=head->next;printf("插在学号为多少的学生后?
");scanf("%s",s);while(p!=NULL){if(strcmp(s,p->number)==0){printf("请输入学生信息(姓名 学号 年龄):
");scanf("%s%s%s",q->name,q->number,q->age);q->next=p->next;p->next=q;v=1;break;}p=p->next;}if(v==0)printf("插入失败
");}void change_list(struct student *head){char s1[12];char ch;struct student *p;printf("请输入要更改的学生的学号:
");scanf("%s",s1);p=head->next;while(p!=NULL){if(strcmp(s1,p->number)==0)break;p=p->next;}printf("请输入要更改的内容:
a.姓名
b.学号
c.年龄
");scanf("%c",&ch);ch=getchar();printf("请输入更改后结果:
");scanf("%s",s1);switch(ch){case'a':strcpy(p->name,s1);break;case'b':strcpy(p->number,s1);break;case'c':strcpy(p->age,s1);break;}}void save(struct student *head){struct student *p;p=head->next;fp=fopen("stu.out","w+");rewind(fp);while(p!=NULL){fprintf(fp,"%-20s%-12s%3s
",p->name,p->number,p->age);p=p->next;}printf("保存成功
");}void remove(struct student *head){if(head==NULL)return;remove(head->next);free(head);}int control(struct student *head){int i=0;char ch;head_print();if((fp=fopen("stu.out","r"))==NULL){printf("无文件,请先建立:
");head=creat();}else if((ch=getc(fp))==EOF){printf("无信息,请先建立:
");head=creat();}else head=build_list();while((ch=getchar())!='q'){switch(ch){case'a':search(head);break;case'b':delete_(head);break;case'c':ad_list(head);break;case'd':change_list(head);break;case'e':read_list(head);break;case'f':save(head);break;case'h':head_print();}}if(ch=='q')remove(head);return 0;}void head_print(){printf("%13.0s********************************************%13.0s
");printf("%13.0s**%40.0s**
");printf("%13.0s**%9.0sa.查找%9.0sb.删除%10.0s**
");printf("%13.0s**%40.0s**
");printf("%13.0s**%9.0sc.增加%9.0sd.更改%10.0s**
");printf("%13.0s**%40.0s**
");printf("%13.0s**%9.0se.查看%9.0sf.存档%10.0s**
");printf("%13.0s**%40.0s**
");printf("%13.0s**%9.0s按h显示提示信息,q退出%10.0s**
");printf("%13.0s********************************************%13.0s
");}
typedef struct student//学生的结构体{ char name[CH]; // 姓名 char no[CH]; //学号 float math; //高数 float iEn; //英语 float physics; //大学物理 float C_language; //C语言 float fAvage; //平均分数 float S_all; //总分数}student;
student s[N]; //学生数组int num; //学生个数
/*程序辅助函数*//* 欢迎界面 */void welcome(){ printf("\n\n\n\n\n"); printf("\t\t ╭═══════┤成绩管理系统├═══════╮\n"); printf("\t\t║ \t║\n"); printf("\t\t║ \t║\n"); printf("\t\t║ 欢迎使用该成绩管理系统 \t║\n"); printf("\t\t║ \t║\n"); printf("\t\t║ 作者:某某 \t║\n"); printf("\t\t║ \t║\n"); printf("\t\t║ 按回车键继续…… \t║\n"); printf("\t\t║ \t║\n"); printf("\t\t║ \t║\n"); printf("\t\t╰═══════════════════════╯\n"); getchar();}/* 菜单 */void meun(){ system("cls"); //屏幕清空 printf("\n\n\n\n\n"); printf("\t\t ╭═══════┤成绩管理系统├═══════╮\n"); /*菜单选择*/ printf("\t\t║ …………某某制作 \t║\n"); printf("\t\t║ 学 生 成 绩 管 理 系 统 \t║\n"); printf("\t\t║ 主菜单 \t║\n"); printf("\t\t║ 1. 录入学生数据 \t║\n"); printf("\t\t║ 2. 删除学生数据 \t║\n"); printf("\t\t║ 3. 修改学生数据 \t║\n"); printf("\t\t║ 4. 显示学生数据 \t║\n"); printf("\t\t║ 5. 排序输出 \t║\n"); printf("\t\t║ 6. 查询成绩 \t║\n"); printf("\t\t║ 7. 退出成绩管理系统 \t║\n"); printf("\t\t║ \t║\n"); printf("\t\t╰═══════════════════════╯\n"); printf("\t\t \1选择菜单选项(1-7):");}void read_from_file()//从文件中读取学生的信息{ FILE *fp; int i=0; fp=fopen("data.db","rb"); if(!fp) { printf("打开文件data.db失败!\n"); return ; }
fread(&num,1,sizeof(num),fp); //先读取学生的个数 for(i=0;i<num;i++) fread(&s[i],1,sizeof(student),fp); //读取每个学生的信息存放到结构体
fclose(fp);//关闭文件
}
void write_to_file()//从文件中读取学生的信息{ FILE *fp; int i=0; fp=fopen("data.db","wb+"); if(!fp) { printf("打开文件data.db失败!\n"); return ; }
fwrite(&num,1,sizeof(num),fp); //先写入学生的个数 for(i=0;i<num;i++) fwrite(&s[i],1,sizeof(student),fp); //写入每个学生的信息
fclose(fp);//关闭文件
}
void Add()//添加学生信息{ int i=num;
printf("请输入姓名:"); scanf("%s",s[i].name); printf("请输入学号:"); scanf("%s",s[i].no);
printf("请输入高数:"); scanf("%f",&s[i].math);
printf("请输入英语:"); scanf("%f",&s[i].iEn);
printf("请输入大学物理:"); scanf("%f",&s[i].physics);
printf("请输入C语言:"); scanf("%f",&s[i].C_language);
s[i].S_all=s[i].math+s[i].iEn+s[i].physics+s[i].C_language; //计算出总分数
s[i].fAvage=s[i].S_all/4; //计算出平均分
num++;
}
void Delete()//删除学生信息{
int i=0,j=0; char no[CH]; //学号
printf("请输入你要删除的学生学号:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该学号对应的序号 if(strcmp(s[i].no,no)==0) { for(j=i;j<num-1;j++) s[j]=s[j+1];
num--; //数量减少 1
return; }
printf("没有这个学号!");
}
void Delete_infor()//修改学生信息{
int i=0; char no[CH]; //学号 printf("请输入你要修改的学生学号:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该学号对应的序号 if(strcmp(s[i].no,no)==0) { printf("请输入姓名:"); scanf("%s",s[i].name); printf("请输入学号:"); scanf("%s",s[i].no);
printf("请输入高数:"); scanf("%f",&s[i].math);
printf("请输入英语:"); scanf("%f",&s[i].iEn);
printf("请输入大学物理:"); scanf("%f",&s[i].physics);
printf("请输入C语言:"); scanf("%f",&s[i].C_language);
s[i].S_all=s[i].math+s[i].iEn+s[i].physics+s[i].C_language; //计算出总分数
s[i].fAvage=s[i].S_all/4; //计算出平均分
return; }
printf("没有这个学号!");
}
void Show_s()//显示学生信息{ int i=0; printf("姓名 学号 高数 英语 大学物理 C语言 总分数 平均分\n"); for(i=0;i<num;i++) printf("%s%10s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",s[i].name,s[i].no,s[i].math,s[i].iEn,s[i].physics,s[i].C_language,s[i].S_all,s[i].fAvage);
}
void Sort_s()//用平均值排序{ int i=0,j=0; student t;//用于排序交换的临时变量 student s1[N]; //学生数组,用来排序的临时数组
for(i=0;i<num;i++) s1[i]=s[i];
for(i=0;i<num;i++) for(j=i+1;j<num;j++) if(s1[i].fAvage<s1[j].fAvage) { t=s1[i]; s1[i]=s1[j]; s1[j]=t; }
printf("姓名 学号 高数 英语 大学物理 C语言 总分数 平均分\n"); for(i=0;i<num;i++) printf("%s%10s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",s1[i].name,s1[i].no,s1[i].math,s1[i].iEn,s1[i].physics,s1[i].C_language,s1[i].S_all,s1[i].fAvage);
}
void Search()//查询学生成绩{
int i=0; char no[CH]; //学号 printf("请输入你要查询的学生学号:");
scanf("%s",no);
for(i=0;i<num;i++)//先找到该学号对应的序号 if(strcmp(s[i].no,no)==0) { printf("姓名 学号 高数 英语 大学物理 C语言 总分数 平均分\n"); printf("%s%10s%11.2f%11.2f%11.2f%11.2f%11.2f%11.2f\n",s[i].name,s[i].no,s[i].math,s[i].iEn,s[i].physics,s[i].C_language,s[i].S_all,s[i].fAvage);
return; }
printf("没有这个学号!");
} void secede()//退出查询 { printf("谢谢使用学生成绩评定系统!再见!\n"); }void main(){ int choose=0; num=0;//初始化学生个数为0 //read_from_file(); //读取文件 welcome(); meun(); scanf("%d",&choose); printf("\n"); while(choose>0&&choose<8) {
switch(choose) { case 1:Add();system("pause");break; case 2:Delete();system("pause");break; case 3:Delete_infor();system("pause");break; case 4:Show_s();system("pause");break; case 5:Sort_s();system("pause");break; case 6:Search();system("pause");break; case 7:secede();system("pause");break; } printf("\n"); meun(); scanf("%d",&choose); printf("\n"); }
write_to_file();//写入文件
getchar();
}
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# include <string.h>
# include <conio.h>
void menu(struct student *parr,int len);
void sore(struct student *parr,int len);
void output(struct student *parr,int *len);
void input(struct student *parr,int len);
void write(struct student *parr,int len);
void read(struct student *parr,int len);
void find(struct student *parr,int len);
void logout(struct student *parr,int len);
void exit(struct student *parr,int len);
void modify(struct student *parr,int len);
void insert(struct student*parr,int *len);
struct student
{
int number;//学号
float score;//成绩
char name[10];//姓名
};
int main(void)
{
struct student * parr;
int len = 0;
char ch = '\0';
printf("请输入需要存入的学生人数:");
scanf("%d",&len);
parr = (struct student *)malloc((sizeof(struct student) * len));
menu(parr, len);
printf("按回车键继续\n");
while(1)
{
system("cls");
printf("\n\n\n\n");
printf("\t\t|******************************************|\n");
printf("\t\t|--------------- 学生管理系统 -------------|\n");
printf("\t\t|------------ 1.写入学生信息 ---------|\n");
printf("\t\t|------------ 2.查看全部学生信息 ---------|\n");
printf("\t\t|------------ 3.按成绩排序 ---------|\n");
printf("\t\t|------------ 4.按学号查找 ---------|\n");
printf("\t\t|------------ 5.修改学生信息 ---------|\n");
printf("\t\t|------------ 6.添加学生 ---------|\n");
printf("\t\t|------------ 7.保存 ---------|\n");
printf("\t\t|------------ 0.退出 ---------|\n");
printf("\t\t|******************************************|\n");
printf("\t\t\n");
scanf(" %c",&ch);
switch(ch)
{
case '1' : input(parr,len); break;
case '2' : output(parr,&len); break;
case '3' : sore(parr,len); break;
case '4' : find(parr,len); break;
case '5' : modify(parr,len); break;
case '6' : insert(parr,&len); break;
case '7' : write(parr,len); break;
case '0' : exit(parr,len); break;
default : printf("\n\t输入错误!按回车键返回主菜单!");
getch();
}
}
free(parr);
return 0 ;
}
//函数功能:实现按成绩排序
void sore(struct student *parr,int len)
{
int i,j;
struct student t;
for( i = 0; i < len - 1; i++)
{
for(j = 0; j < len; j++)
if( parr[j+1].score > parr[j].score )
{
t = parr[j+1];
parr[j+1] = parr[j];
parr[j] = t;
}
}
output(parr,&len);
return;
}
//函数功能:打印信息
void output(struct student *parr,int *len)
{
int i;
for(i = 0;i < *len; i++)
printf("姓名:%s 成绩:%.2f 学号:%d\n",parr[i].name,parr[i].score,parr[i].number);
printf("\n");
getchar();
getchar();
return;
}
//函数功能:输入数据
void input(struct student *parr,int len )
{ int i;
for( i = 0; i < len; i++)
{
printf("请输入第%d个学生信息:",i + 1);
printf("姓名:");
scanf("%s",parr[i].name);//name是数组名 本身就是地址
printf("成绩: ");
scanf("%f",&parr[i].score);
printf("学号:");
scanf("%d",&parr[i].number);
}
printf("\n");
return;
}
/*函数功能:将数据写入文件*/
void write(struct student *parr,int len)
{
int i;//控制循环
FILE *fp = NULL;//定义文件指针
fp = fopen("D:\\student.txt","w");//打开文件并使文件指针指向它,以写的方式
if(fp == NULL)//如果文件没有打开,提示错误并退出
{
printf("\n\t文件没有打开!程序结束!");
getchar();//等待用户观察
exit(0);//结束整个程序
}
else
{
for(i=0; i<len; i++)//将数据依次写入文件
{
fprintf(fp, "姓名:%s 成绩:%.2f 学号:%d\n",parr[i].name,parr[i].score,parr[i].number);
}
}
printf("已将学生信息保存在了D盘根目录下的student.txt文件中。\n");
getch();
fclose(fp);
return;
}
/*函数功能:读取文件数据*/
void read(struct student *parr,int len)
{
int i;
FILE * fp = NULL;
fp = fopen("D:\\student.txt","r");//以只读的方式打开文件
if(fp == NULL)
{
printf("数据读取失败!\n");
getchar();
exit(0);
}
else
{
for(i=0; i<len; i++)
{
fscanf(fp,"%s,%d,%.2f\n",parr[i].name,parr[i].number,parr[i].score);
}
}
fclose(fp);
return;
}
/*函数功能:按学号找学生信息*/
void find(struct student *parr,int len)
{
int number= 0;
int i;
printf("请您输入需要查找的学号:");
scanf("%d",&number);
for( i=0; i<len; i++ )
{
if(number == parr[i].number)
{
printf("姓名:%s 成绩:%.2f 学号:%d\n",parr[i].name,parr[i].score,parr[i].number);
}
}
getch();
return;
}
/*函数功能:注销学生信息*/
void logout(struct student *parr,int len)
{
char ch = '\0';
find(parr,len);
printf("您确定要注销该学生吗?确定请按 Y,返回主菜单请按 N !\n");
scanf("%d",&ch);
if((ch == 'Y') || (ch == 'y'))
{
}
return;
}
void menu(struct student *parr,int len)
{
printf("\t\t||=========================================||\n");
printf("\t\t||-----------------------------------------||\n");
printf("\t\t||-----------欢迎使用学生管理系统----------||\n");
printf("\t\t||-----------------------------------------||\n");
printf("\t\t||=========================================||\n");
getchar();
getchar();
system("cls");
return;
}
/*函数功能:结束整个程序*/
void exit(struct student *parr,int len)
{// getchar();
char ch = '\0';
do
{
printf("您确定要退出!(y/n):");
scanf(" %c",&ch);
}while((ch != 'Y') && (ch != 'y') && (ch != 'N') && (ch != 'n'));
if((ch == 'Y') || (ch == 'y'))
{
exit(0);
}
return;
}
/*函数功能:修改学生信息*/
void modify(struct student *parr,int len)
{
int number = 0;
char ch = '\0';
int i;
printf("请您输入要修改的学生的学号:");
scanf("%d",&number);
for( i=0; i<len; i++ )
{
if(number == parr[i].number)
{
printf("姓名:%s 成绩:%.2f 学号:%d\n",parr[i].name,parr[i].score,parr[i].number);
printf("您确定要修改该学生信息(y/n)");
scanf(" %c",&ch);
if(ch == 'y')
{
printf("请输入姓名:");
scanf("%s",parr[i].name);
printf("请输入成绩:");
scanf("%f",&parr[i].score);
printf("请输入学号:");
scanf("%d",&parr[i].number);
printf("姓名:%s 成绩:%.2f 学号:%d\n",parr[i].name,parr[i].score,parr[i].number);
printf("修改成功!");
getch();
}
else
{
printf("没有找到该学生");
getch();
break;
}
}
}
return;
}
/*函数功能:添加学生*/
void insert(struct student *parr,int *len)
{
int number = 0;//添加学生的个数
int i;
printf("请输入您要添加几个学生信息:");
scanf("%d",&number);
parr = (struct student *)malloc((sizeof(struct student) * (*len+number)));
for(i=*len; i<*len+number;i++)
{
printf("请输入第%d个学生信息:",i + 1);
printf("姓名:");
scanf("%s",parr[i].name);
printf("成绩: ");
scanf("%f",&parr[i].score);
printf("学号:");
scanf("%d",&parr[i].number);
}
output(parr,&*len);
我曾经回答过别人,
以前写的,代码质量不高,但是还是能用的。
http://zhidao.baidu.com/question/372616792.html?oldq=1
写了好久的。
塔耐保肾: 我们才做了这个作业... #include <malloc.h> #include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct scorenode) #define DEBUG #include <string.h> struct scorenode { int number;/*学号*/ char name[8];/*姓名*/ float cj1;/*成绩1*/ ...
阿拉善盟15175456444: c语言编写学生成绩管理系统 - ?
塔耐保肾: #include <stdio.h> void main() { /*输入资料*/ int student[5][4],i; for (i=0; i<=4; i++); scanf("%d,%d,%d \n",student[i][0],student[i][1],student[i][2],student[i][3]) /*平均分*/ for (i=0; i<=4; i++); printf("%f",(float)((student[i][1]+student[i][2]+student[i][3]...
阿拉善盟15175456444: 用C语言写一个成绩管理系统 - ?
塔耐保肾: #include /* 1.根据学生信息定义一个结构体类型,再说明一个该结构体类型的数组.*/ struct stu_info{char stuNo[10];/* No */char stuName[30];/* Name */float stuScore[3];/* the three scores */float aveScore; /* average score */float totalScore; ...
阿拉善盟15175456444: c语言设计学生成绩管理系统 - ?
塔耐保肾: #include<iostream> #include<cstdio> #include<cmath> #include<vector> #include<list> #include<cstring> #include<map> #include<set> #include<algorithm> #include<queue> using namespace std; int n; struct birth {int year,month,day; };struct ...
阿拉善盟15175456444: 用C语言编写学生成绩管理系统..谢谢啊..小弟不太会...大哥大姐帮帮忙!! - ?
塔耐保肾: #include struct stud { long num; char name[20]; double score; }; typedef struct stucode { struct stud student ; struct stucode *next; }L; void menu(); void createlist(struct stucode **r); void out(struct stucode *r); void search1(struct stucode *r); void search2...
阿拉善盟15175456444: 用c语言编写一个程序实现学员成绩管理,每个学生包括3门课的成绩? ?
塔耐保肾: #include #define n 20 int static index=0; struct student { int num; char name[n]; float ... gets(str[j].name); //getchar(); printf("三门成绩: "); for(i=0;ichengji;qchengji 3;...
阿拉善盟15175456444: 如何用C语言编一个学生成绩管理系统 - ?
塔耐保肾: #include "stdio.h"#include "stdlib.h"#include "string.h"#define NULL 0 int shoudsave=0; struct student { char num[10]; char name[20]; char sex[4]; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime[10]; }; typedef struct node { ...
阿拉善盟15175456444: 怎么用c语言编写一个学生成绩管理系统啊?急…… - ?
塔耐保肾: C语言课程设计报告-------学生成绩简单管理程序 一、系统菜单的主要功能 (1)输入若干条记录 (2)显示所有记录 (3)按学号排序 (4)插入一条记录 (5)按姓名查找,删除一条记录 (6)查找并显示一条记录 (7)输出统计信息 (新增)...
阿拉善盟15175456444: 用C语言写一个成绩管理系统 - ?
塔耐保肾: #include"stdio.h"#include"stdlib.h"#include"string.h"#include<conio.h>#include<malloc.h> typedef struct list { char name[20]; char num[12]; char telephone[12]; int score; struct list *next; }list,*lnode; lnode init() {lnode L=(lnode)malloc(sizeof(...