《c语言大作业--学生管理系统.doc》由会员分享,可在线阅读,更多相关《c语言大作业--学生管理系统.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include stdafx.h #include #include #include #include #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
2、( * 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(
3、student.dat,ab)=NULL) printf(cant 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 请
4、输入数学的成绩:); 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(&x
5、s,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(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)=0)/*按姓名查询时判断输入的姓名是
6、否存在,会循环从数据中找取*/ 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 查找失败!); /*学生不存在*/ fc
7、lose(fp);void xuehao() FILE *fp; student xs; int num; printf(n 输入要查学生的学号: );scanf(%d,&num); if(fp=fopen(student.dat,rb)=NULL) printf(cant 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 %6
8、s %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); pri
9、ntf(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
10、(fp=fopen(student.dat,rb+)=NULL) printf(cant 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
11、%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;
12、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.s
13、um); 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);
14、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)
15、/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( cant 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=0)/*k的位置要位于数组范围之内*/ /插入 for(j=lenth-1;
16、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;ilenth;i+) fwrite(&xsi,sizeof(stu),1,fp); else/*不再数组范围之内*/ if(fp=fopen(student.dat,ab)=NULL) printf( 不能建立文件!n);exit(0); fw
17、rite(&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( cant open file!n);exit(0); printf( 学生成绩表 ); printf(n *); printf(n %10s %10s%6s %6s %6s %6s %6s %6s %6s n,姓名,学号,性别,数学,英语, 政治, 语文, 平均成绩,总成绩); while(!f
18、eof(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
19、 *fp; student sN, *p1N,*p2N,*p3N,*p4N;/*用指针数组*/ system(cls); if(fp=fopen(student.dat,rb)=NULL) printf(cantt 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;ut;u+)/*以下每个指针数组用于指向各分数段的学生信息*/ if(si.aver=60&si.aver=80&si.aver=90) p4m+=&si+;c
20、ontinue; printf( 学生成绩单 ); printf(n 90以上的人有: 姓名 学号 平均分n); for(r=0;rname,p4r-num,p4r-aver); printf(n 80-89分的人有: 姓名 学号 平均分n); for(q=0;qname,p3q-num,p3q-aver); printf(n 60-79分的人有: 姓名 学号 平均分n); for(p=0;pname,p2p-num,p2p-aver); printf(n 不及格的人有: 姓名 学号 平均分n); for(n=0;nname,p1n-num,p1n-aver); fclose(fp); pri
21、ntf(n 按任意键返回主菜单 );getch();/ if(si.aver=60&si.aver=80&si.aver=90) p4m+=&si+;continue; printf( 学生成绩单 ); printf(n 90以上的人有: 姓名 学号 平均分n); for(r=0;rname,p4r-num,p4r-aver); printf(n 80-89分的人有: 姓名 学号 平均分n); for(q=0;qname,p3q-num,p3q-aver); printf(n 60-79分的人有: 姓名 学号 平均分n); for(p=0;pname,p2p-num,p2p-aver); pr
22、intf(n 不及格的人有: 姓名 学号 平均分n); for(n=0;nname,p1n-num,p1n-aver); fclose(fp); printf(n 按任意键返回主菜单 );getch();/删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele() student xsN; FILE *fp; char name10; int i=0,len,k=-1/*k0是为后面if判断用的*/; system(cls); printf(n 输入要删除的学生姓名: );scanf(%s,name); if(fp=fopen(student.dat,rb+
23、)=NULL) printf( cant open file!n);exit(0); while(!feof(fp) 删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele() student xsN; FILE *fp; char name10; int i=0,len,k=-1/*k=0)/*k0说明找到删除学生位置*/ if(fp=fopen(student.dat,wb+)=NULL) printf( cant open file!n);exit(0); for(i=0;ilen;i+) if(i=k) continue;/*从这个位置开始写入*/
24、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)/判断功能项 case1:input();break; case 2:search();break; case 3:modi();break; ca
25、se 4:insert();break; case 5:print( );break; case 6:tongji();break; case 7:dele();break; #include stdafx.h #include #include #include #include #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() syst
26、em(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
27、input() system(cls); FILE *fp; student xs; /*定义一个结构体变量来装从文件中读出来的数据*/int c=1;if(fp=fopen(student.dat,ab)=NULL) printf(cant 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,用字
28、符串判断*/ 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+x
29、s.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(cant open file!n);exit(0);
30、 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.ying
31、yu,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(cant 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
限制150内