c语言大作业--学生管理系统.doc
#include "stdafx.h" #include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#define N 100struct student char name10; int num; char sex10; float math; float yingyu; float zhengzhi; float ywen; float aver; float sum;stu;void menu() system("cls"); printf(" * 欢迎使用学生成绩管理系统 * n"); printf(" * = * n"); printf(" * 请选择相应的功能: * n"); printf(" * 1.成绩录入 * n"); printf(" * 2.查询成绩 * n"); printf(" * 3.修改成绩 * n"); printf(" * 4.插入成绩 * n"); printf(" * 5.报表输出 * n"); printf(" * 6.删除操作 * n"); printf(" * 0.退出系统 * n" ); printf(" * = * n");printf(" nnnnnnnnn * * * * n");/成绩录入void input() system("cls"); FILE *fp; student xs; /*定义一个结构体变量来装从文件中读出来的数据*/int c=1;if(fp=fopen("student.dat","ab")=NULL) printf("can't open file!n");exit(0); printf("n 成绩录入 "); printf("n*"); while(c+) /*中间加油break,可使循环中断*/ printf("n 请输入您的姓名(姓名为end结束):"); scanf("%s",xs.name); if(strcmp(xs.name,"end")=0) break;/*判断姓名是否为end,用字符串判断*/ printf("n 请输入学号:"); scanf("%d",&xs.num); printf("n 性别:"); scanf("%s",&xs.sex); printf("n 请输入数学的成绩:"); scanf("%f",&xs.math); printf("n 请输入英语的成绩:"); scanf("%f",&xs.yingyu); printf("n 请输入政治的成绩:"); scanf("%f",&xs.zhengzhi); printf("n 请输入语文的成绩:"); scanf("%f",&xs.ywen); xs.aver=0;/*给平均分变量赋初值*/ xs.aver=(xs.math+xs.yingyu+xs.zhengzhi+xs.ywen)/4; xs.sum=0; xs.sum=xs.math+xs.yingyu+xs.zhengzhi+xs.ywen; fwrite(&xs,sizeof(stu),1,fp); /将成绩信息写入文件 system("cls"); fclose(fp);void xingming() FILE *fp; student xs; char name10; printf("n 输入要查学生的姓名: ");scanf("%s",name); if(fp=fopen("student.dat","rb")=NULL) printf("can't open file!n");exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)=0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/ printf("n 学生的信息如下:n"); printf("n %10s %6s %6s %6s %6s %6s %6s %6s %6sn","姓名","学号","性别","数学","英语","政治 ","语文","平均成绩","总成绩"); printf("n %10s %6d%6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2fn",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.zhengzhi,xs.ywen,xs.aver,xs.sum); break; if(feof(fp) printf("n 查找失败!"); /*学生不存在*/ fclose(fp);void xuehao() FILE *fp; student xs; int num; printf("n 输入要查学生的学号: ");scanf("%d",&num); if(fp=fopen("student.dat","rb")=NULL) printf("can't open file!n");exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*按学号查询时判断输入的学号是否存在,会循环从数据中找取*/ printf("n 学生的信息如下:n"); printf("n %10s %6s %6s %6s %6s %6s %6s %6s %6sn","姓名","学号","性别","数学","英语","政治 ","语文","平均成绩","总成绩"); printf("n %10s %6d%6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2fn",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.zhengzhi,xs.ywen,xs.aver,xs.sum); break; if(feof(fp) printf("n 查找失败!"); fclose(fp);/查询void search() char ch1; system("cls"); printf(" 请输入按何种方式查询:n"); printf("n 1-姓名,2-学号:"); ch1=getchar();/*用字符接收*/ switch(ch1)/*判断*/ case '1':xingming();break; case '2':xuehao();break; printf("n 按任意键返回主菜单 "); getch();/*让屏幕停留同时按任意键返回*/修改:输入学生的姓名,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果;void modi() student xs; FILE *fp; char name10; system("cls"); printf("n 输入要修改的学生的姓名: ");scanf("%s",name); if(fp=fopen("student.dat","rb+")=NULL) printf("can't open file!n");exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)=0)/*判断输入要修改的姓名是否存在*/ printf(" 修改前学生的信息如下:n"); printf("n %10s %6s %6s %6s %6s %6s %6s %6s %6sn","姓名","学号","性别","数学","英语","政治 ","语文","平均成绩","总成绩"); printf("n %10s %6d %6s %6.2f %6.2f %6.2f %6.2f %6.2fn",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.zhengzhi,xs.ywen,xs.aver,xs.sum); printf("n 请输入该生的数学成绩:");scanf("%f",&xs.math); printf("n 英语成绩:");scanf("%f",&xs.yingyu); printf("n 政治成绩:");scanf("%f",&xs.zhengzhi); printf("n 语文成绩:");scanf("%f",&xs.ywen); xs.aver=(xs.math +xs.yingyu +xs.zhengzhi +xs.ywen)/4; xs.sum=xs.math +xs.yingyu +xs.zhengzhi +xs.ywen; break; if(!feof(fp) printf(" n 修改后的学生的信息如下:n"); printf("n %10s %6s %6s %6s %6s %6s %6s %6s %6sn","姓名","学号","性别","数学","英语","政治 ","语文","平均成绩","总成绩"); printf("n %10s %6d %6s %6.2f %6.2f %6.2f %6.2f %6.2fn",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.zhengzhi,xs.ywen,xs.aver,xs.sum); fseek(fp,sizeof(stu),1);/*负号表示后退,1表示文件当前位置*/ fwrite(&xs,sizeof(stu),1,fp);/*再写入,同时把要修改的那个覆盖掉*/ else printf("n 学生不存在,修改失败!"); fclose(fp); printf("n 按任意键返回主菜单 ");getch();/插入:输入学生的平时的各项成绩,插入到指定位置;当指定的位置超出范围时,将其插入到全班的最后,并显示插入成功后的结果。void insert() int i=0,j,k,lenth; FILE *fp; student s,xsN; system("cls"); printf("n 请输入插入的学生的姓名:");scanf("%s",&s.name); printf("n 学生的学号:");scanf("%d",&s.num); printf("n 学生的性别:");scanf("%s",&s.sex); printf("n 数学成绩:");scanf("%f",&s.math); printf("n 英语成绩:");scanf("%f",&s.yingyu); printf("n 政治成绩:");scanf("%f",&s.zhengzhi); printf("n 语文成绩:");scanf("%f",&s.ywen); s.aver=(s.math+s.yingyu+s.zhengzhi+s.ywen)/4; s.sum= s.math+s.yingyu+s.zhengzhi+s.ywen; printf("n 插入位置:");scanf("%d",&k);/ i=0; if(fp=fopen("student.dat","rb")=NULL) printf(" can't open file!n");exit(0); while(!feof(fp) fread(&xsi,sizeof(stu),1,fp);/*把数据读入到结构体数组中*/ if(feof(fp) break; i+; fclose(fp); lenth=i; if(k<lenth && k>=0)/*k的位置要位于数组范围之内*/ /插入 for(j=lenth-1;j>=k;j-) xsj+1=xsj;/*一开始j是最大的,往后移一个这样移动避免数据被覆盖*/ /*循环是只循环这一句的*/ xsk=s;/*将输入的学生信息加入这个k位置*/ lenth+;/*长度+1*/ /写回 if(fp=fopen("student.dat","wb")=NULL) printf(" 不能建立文件!n");exit(0); for(i=0;i<lenth;i+) fwrite(&xsi,sizeof(stu),1,fp); else/*不再数组范围之内*/ if(fp=fopen("student.dat","ab")=NULL) printf(" 不能建立文件!n");exit(0); fwrite(&s,sizeof(stu),1,fp); printf("n 按任意键返回主菜单 "); fclose(fp);/显示void print() FILE *fp; student s; system("cls"); if(fp=fopen("student.dat","rb")=NULL) printf(" can't open file!n");exit(0); printf(" 学生成绩表 "); printf("n *"); printf("n %10s %10s%6s %6s %6s %6s %6s %6s %6s n","姓名","学号","性别","数学","英语"," 政治"," 语文"," 平均成绩","总成绩"); while(!feof(fp) fread(&s,sizeof(stu),1,fp);/从文件中读取成绩信息 if(feof(fp) break;/判断是否文件尾 printf("n %10s %6d %6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2fn",s.name,s.num,s.sex,s.math,s.yingyu,s.zhengzhi,s.ywen,s.aver,s.sum); fclose(fp); printf("n 按任意键返回主菜单 ");getch();/统计void tongji() int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u; FILE *fp; student sN, *p1N,*p2N,*p3N,*p4N;/*用指针数组*/ system("cls"); if(fp=fopen("student.dat","rb")=NULL) printf("cant't open file!n");exit(0); while(!feof(fp) fread(&si+,sizeof(stu),1,fp);/*读入数据*/ if(feof(fp) break; t=i;i=0; for(u=0;u<t;u+)/*以下每个指针数组用于指向各分数段的学生信息*/ if(si.aver<60) p1j+=&si+;continue;/*每个学生信息只能位于一个分数段*/ if(si.aver>=60&&si.aver<80) p2k+=&si+;continue; if(si.aver>=80&&si.aver<90) p3l+=&si+;continue; if(si.aver>=90) p4m+=&si+;continue; printf(" 学生成绩单 "); printf("n 90以上的人有: 姓名 学号 平均分n"); for(r=0;r<m;r+) printf("n %10s %6d %6.2fn",p4r->name,p4r->num,p4r->aver); printf("n 80-89分的人有: 姓名 学号 平均分n"); for(q=0;q<l;q+) printf("n %10s %6d %6.2fn",p3q->name,p3q->num,p3q->aver); printf("n 60-79分的人有: 姓名 学号 平均分n"); for(p=0;p<k;p+) printf("n %10s %6d %6.2fn",p2p->name,p2p->num,p2p->aver); printf("n 不及格的人有: 姓名 学号 平均分n"); for(n=0;n<j-1;n+) printf("n %10s %6d %6.2fn",p1n->name,p1n->num,p1n->aver); fclose(fp); printf("n 按任意键返回主菜单 ");getch();/ if(si.aver<60) p1j+=&si+;continue;/*每个学生信息只能位于一个分数段*/ if(si.aver>=60&&si.aver<80) p2k+=&si+;continue; if(si.aver>=80&&si.aver<90) p3l+=&si+;continue; if(si.aver>=90) p4m+=&si+;continue; printf(" 学生成绩单 "); printf("n 90以上的人有: 姓名 学号 平均分n"); for(r=0;r<m;r+) printf("n %10s %6d %6.2fn",p4r->name,p4r->num,p4r->aver); printf("n 80-89分的人有: 姓名 学号 平均分n"); for(q=0;q<l;q+) printf("n %10s %6d %6.2fn",p3q->name,p3q->num,p3q->aver); printf("n 60-79分的人有: 姓名 学号 平均分n"); for(p=0;p<k;p+) printf("n %10s %6d %6.2fn",p2p->name,p2p->num,p2p->aver); printf("n 不及格的人有: 姓名 学号 平均分n"); for(n=0;n<j-1;n+) printf("n %10s %6d %6.2fn",p1n->name,p1n->num,p1n->aver); fclose(fp); printf("n 按任意键返回主菜单 ");getch();/删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele() student xsN; FILE *fp; char name10; int i=0,len,k=-1/*k<0是为后面if判断用的*/; system("cls"); printf("n 输入要删除的学生姓名: ");scanf("%s",name); if(fp=fopen("student.dat","rb+")=NULL) printf(" can't open file!n");exit(0); while(!feof(fp) 删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele() student xsN; FILE *fp; char name10; int i=0,len,k=-1/*k<0是为后面if判断用的*/; system("cls"); printf("n 输入要删除的学生姓名: ");scanf("%s",name); if(fp=fopen("student.dat","rb+")=NULL) printf(" can't open file!n");exit(0); while(!feof(fp) fread(&xsi,sizeof(stu),1,fp); if(feof(fp) break; if(strcmp(xsi.name,name)=0) k=i; i+; fclose(fp);/以下是删除后重新写文件 len=i;/*结构体数组上限*/ if(k>=0)/*k>0说明找到删除学生位置*/ if(fp=fopen("student.dat","wb+")=NULL) printf(" can't open file!n");exit(0); for(i=0;i<len;i+) if(i=k) continue;/*从这个位置开始写入*/ fwrite(&xsi,sizeof(stu),1,fp); fclose(fp); else printf("n 删除失败!n");getch(); /*失败后重新返回菜单*/ printf("n 按任意键返回主菜单 ");print();/菜单选择void main() char ch;system("color 3f"); while(1) menu();/ 显示菜单 ch=getch();/选择菜单 if(ch='0') break; switch(ch)/判断功能项 case'1':input();break; case '2':search();break; case '3':modi();break; case '4':insert();break; case '5':print( );break; case '6':tongji();break; case '7':dele();break; #include "stdafx.h" #include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#define N 100struct student char name10; int num; char sex10; float math; float yingyu; float zhengzhi; float ywen; float aver; float sum;stu;void menu() system("cls"); printf(" * 欢迎使用学生成绩管理系统 * n"); printf(" * = * n"); printf(" * 请选择相应的功能: * n"); printf(" * 1.成绩录入 * n"); printf(" * 2.查询成绩 * n"); printf(" * 3.修改成绩 * n"); printf(" * 4.插入成绩 * n"); printf(" * 5.报表输出 * n"); printf(" * 6.删除操作 * n"); printf(" * 0.退出系统 * n" ); printf(" * = * n");printf(" nnnnnnnnn * * * * n");/成绩录入void input() system("cls"); FILE *fp; student xs; /*定义一个结构体变量来装从文件中读出来的数据*/int c=1;if(fp=fopen("student.dat","ab")=NULL) printf("can't open file!n");exit(0); printf("n 成绩录入 "); printf("n*"); while(c+) /*中间加油break,可使循环中断*/ printf("n 请输入您的姓名(姓名为end结束):"); scanf("%s",xs.name); if(strcmp(xs.name,"end")=0) break;/*判断姓名是否为end,用字符串判断*/ printf("n 请输入学号:"); scanf("%d",&xs.num); printf("n 性别:"); scanf("%s",&xs.sex); printf("n 请输入数学的成绩:"); scanf("%f",&xs.math); printf("n 请输入英语的成绩:"); scanf("%f",&xs.yingyu); printf("n 请输入政治的成绩:"); scanf("%f",&xs.zhengzhi); printf("n 请输入语文的成绩:"); scanf("%f",&xs.ywen); xs.aver=0;/*给平均分变量赋初值*/ xs.aver=(xs.math+xs.yingyu+xs.zhengzhi+xs.ywen)/4; xs.sum=0; xs.sum=xs.math+xs.yingyu+xs.zhengzhi+xs.ywen; fwrite(&xs,sizeof(stu),1,fp); /将成绩信息写入文件 system("cls"); fclose(fp);void xingming() FILE *fp; student xs; char name10; printf("n 输入要查学生的姓名: ");scanf("%s",name); if(fp=fopen("student.dat","rb")=NULL) printf("can't open file!n");exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)=0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/ printf("n 学生的信息如下:n"); printf("n %10s %6s %6s %6s %6s %6s %6s %6s %6sn","姓名","学号","性别","数学","英语","政治 ","语文","平均成绩","总成绩"); printf("n %10s %6d%6s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2fn",xs.name,xs.num,xs.sex,xs.math,xs.yingyu,xs.zhengzhi,xs.ywen,xs.aver,xs.sum); break; if(feof(fp) printf("n 查找失败!"); /*学生不存在*/ fclose(fp);void xuehao() FILE *fp; student xs; int num; printf("n 输入要查学生的学号: ");scanf("%d",&num); if(fp=fopen("student.dat","rb")=NULL) printf("can't open file!n");exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*按学号查询时判断输入的学号是否存在,会循环从数据中找取*/ printf("n 学生的信息如下:n"); printf("n %10s %6s %6s %6s %6s %6s %6s %6s %6sn","姓名","学号","性别","数学","英语","政治 ","语文","平均成绩","总成绩"); printf("n %10s %6d%6s %6.2f %6.2f %6.2f %6.2